@dependabit/detector 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.
Files changed (58) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/LICENSE +21 -0
  3. package/README.md +32 -0
  4. package/dist/detector.d.ts +64 -0
  5. package/dist/detector.d.ts.map +1 -0
  6. package/dist/detector.js +578 -0
  7. package/dist/detector.js.map +1 -0
  8. package/dist/diff-parser.d.ts +53 -0
  9. package/dist/diff-parser.d.ts.map +1 -0
  10. package/dist/diff-parser.js +203 -0
  11. package/dist/diff-parser.js.map +1 -0
  12. package/dist/index.d.ts +14 -0
  13. package/dist/index.d.ts.map +1 -0
  14. package/dist/index.js +9 -0
  15. package/dist/index.js.map +1 -0
  16. package/dist/llm/client.d.ts +65 -0
  17. package/dist/llm/client.d.ts.map +1 -0
  18. package/dist/llm/client.js +12 -0
  19. package/dist/llm/client.js.map +1 -0
  20. package/dist/llm/copilot.d.ts +15 -0
  21. package/dist/llm/copilot.d.ts.map +1 -0
  22. package/dist/llm/copilot.js +119 -0
  23. package/dist/llm/copilot.js.map +1 -0
  24. package/dist/llm/prompts.d.ts +10 -0
  25. package/dist/llm/prompts.d.ts.map +1 -0
  26. package/dist/llm/prompts.js +94 -0
  27. package/dist/llm/prompts.js.map +1 -0
  28. package/dist/parsers/code-comments.d.ts +23 -0
  29. package/dist/parsers/code-comments.d.ts.map +1 -0
  30. package/dist/parsers/code-comments.js +139 -0
  31. package/dist/parsers/code-comments.js.map +1 -0
  32. package/dist/parsers/package-files.d.ts +31 -0
  33. package/dist/parsers/package-files.d.ts.map +1 -0
  34. package/dist/parsers/package-files.js +130 -0
  35. package/dist/parsers/package-files.js.map +1 -0
  36. package/dist/parsers/readme.d.ts +23 -0
  37. package/dist/parsers/readme.d.ts.map +1 -0
  38. package/dist/parsers/readme.js +151 -0
  39. package/dist/parsers/readme.js.map +1 -0
  40. package/package.json +41 -0
  41. package/src/detector.ts +746 -0
  42. package/src/diff-parser.ts +257 -0
  43. package/src/index.ts +43 -0
  44. package/src/llm/client.ts +85 -0
  45. package/src/llm/copilot.ts +147 -0
  46. package/src/llm/prompts.ts +102 -0
  47. package/src/parsers/code-comments.ts +178 -0
  48. package/src/parsers/package-files.ts +156 -0
  49. package/src/parsers/readme.ts +185 -0
  50. package/test/detector.test.ts +102 -0
  51. package/test/diff-parser.test.ts +187 -0
  52. package/test/llm/client.test.ts +31 -0
  53. package/test/llm/copilot.test.ts +55 -0
  54. package/test/parsers/code-comments.test.ts +98 -0
  55. package/test/parsers/package-files.test.ts +52 -0
  56. package/test/parsers/readme.test.ts +52 -0
  57. package/tsconfig.json +10 -0
  58. package/tsconfig.tsbuildinfo +1 -0
@@ -0,0 +1,139 @@
1
+ /**
2
+ * Code Comment Parser
3
+ * Extracts URLs and references from code comments
4
+ */
5
+ /**
6
+ * Parse code files and extract references from comments
7
+ */
8
+ export function parseCodeComments(content, filePath) {
9
+ const references = [];
10
+ const extension = getFileExtension(filePath);
11
+ const commentStyle = getCommentStyle(extension);
12
+ if (!commentStyle) {
13
+ return references; // Unsupported file type
14
+ }
15
+ const lines = content.split('\n');
16
+ let inMultiLineComment = false;
17
+ for (let i = 0; i < lines.length; i++) {
18
+ const line = lines[i];
19
+ if (!line)
20
+ continue;
21
+ const lineNumber = i + 1;
22
+ // Check for multi-line comment start/end
23
+ if (commentStyle.multiLine) {
24
+ if (line.includes(commentStyle.multiLine.start)) {
25
+ inMultiLineComment = true;
26
+ }
27
+ if (inMultiLineComment) {
28
+ const urls = extractUrls(line);
29
+ for (const url of urls) {
30
+ references.push({
31
+ url,
32
+ context: line.trim(),
33
+ file: filePath,
34
+ line: lineNumber,
35
+ commentType: line.includes('/**') ? 'jsdoc' : 'multi-line'
36
+ });
37
+ }
38
+ }
39
+ if (line.includes(commentStyle.multiLine.end)) {
40
+ inMultiLineComment = false;
41
+ }
42
+ continue;
43
+ }
44
+ // Check for single-line comments
45
+ if (commentStyle.singleLine) {
46
+ const commentStart = line.indexOf(commentStyle.singleLine);
47
+ if (commentStart !== -1) {
48
+ const comment = line.substring(commentStart);
49
+ const urls = extractUrls(comment);
50
+ for (const url of urls) {
51
+ references.push({
52
+ url,
53
+ context: comment.trim(),
54
+ file: filePath,
55
+ line: lineNumber,
56
+ commentType: 'single-line'
57
+ });
58
+ }
59
+ }
60
+ }
61
+ }
62
+ return references;
63
+ }
64
+ function getFileExtension(filePath) {
65
+ const match = filePath.match(/\.([^.]+)$/);
66
+ const ext = match?.[1];
67
+ return ext ? ext.toLowerCase() : '';
68
+ }
69
+ function getCommentStyle(extension) {
70
+ const styles = {
71
+ // JavaScript/TypeScript
72
+ js: { singleLine: '//', multiLine: { start: '/*', end: '*/' } },
73
+ ts: { singleLine: '//', multiLine: { start: '/*', end: '*/' } },
74
+ jsx: { singleLine: '//', multiLine: { start: '/*', end: '*/' } },
75
+ tsx: { singleLine: '//', multiLine: { start: '/*', end: '*/' } },
76
+ // Python
77
+ py: { singleLine: '#' },
78
+ // Ruby
79
+ rb: { singleLine: '#', multiLine: { start: '=begin', end: '=end' } },
80
+ // Go
81
+ go: { singleLine: '//', multiLine: { start: '/*', end: '*/' } },
82
+ // Rust
83
+ rs: { singleLine: '//', multiLine: { start: '/*', end: '*/' } },
84
+ // C/C++
85
+ c: { singleLine: '//', multiLine: { start: '/*', end: '*/' } },
86
+ cpp: { singleLine: '//', multiLine: { start: '/*', end: '*/' } },
87
+ h: { singleLine: '//', multiLine: { start: '/*', end: '*/' } },
88
+ // Java/Kotlin
89
+ java: { singleLine: '//', multiLine: { start: '/*', end: '*/' } },
90
+ kt: { singleLine: '//', multiLine: { start: '/*', end: '*/' } },
91
+ // C#
92
+ cs: { singleLine: '//', multiLine: { start: '/*', end: '*/' } },
93
+ // PHP
94
+ php: { singleLine: '//', multiLine: { start: '/*', end: '*/' } },
95
+ // Shell
96
+ sh: { singleLine: '#' },
97
+ bash: { singleLine: '#' },
98
+ // YAML
99
+ yml: { singleLine: '#' },
100
+ yaml: { singleLine: '#' }
101
+ };
102
+ return styles[extension] || null;
103
+ }
104
+ function extractUrls(text) {
105
+ const urls = [];
106
+ const regex = /https?:\/\/[^\s<>()[\]'"]+/g;
107
+ let match;
108
+ while ((match = regex.exec(text)) !== null) {
109
+ urls.push(match[0]);
110
+ }
111
+ return urls;
112
+ }
113
+ /**
114
+ * Extract specification and RFC references from comments
115
+ */
116
+ export function extractSpecReferences(content) {
117
+ const references = [];
118
+ const lines = content.split('\n');
119
+ for (const line of lines) {
120
+ // Match RFC references
121
+ const rfcMatch = /RFC\s*(\d+)/i.exec(line);
122
+ if (rfcMatch) {
123
+ references.push({
124
+ spec: `RFC ${rfcMatch[1]}`,
125
+ context: line.trim()
126
+ });
127
+ }
128
+ // Match standard references (ISO, IEEE, etc.)
129
+ const standardMatch = /(ISO|IEEE|ECMA|W3C)[\s-]*(\d+(?:[-.]\d+)*)/i.exec(line);
130
+ if (standardMatch) {
131
+ references.push({
132
+ spec: `${standardMatch[1]} ${standardMatch[2]}`,
133
+ context: line.trim()
134
+ });
135
+ }
136
+ }
137
+ return references;
138
+ }
139
+ //# sourceMappingURL=code-comments.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code-comments.js","sourceRoot":"","sources":["../../src/parsers/code-comments.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Package File Parser
3
+ * Extracts metadata and references from package manager files
4
+ * EXCLUDES actual dependencies (handled by dependabot)
5
+ */
6
+ export interface PackageMetadata {
7
+ repository?: string;
8
+ homepage?: string;
9
+ documentation?: string;
10
+ urls: string[];
11
+ }
12
+ /**
13
+ * Parse package.json and extract metadata URLs (NOT dependencies)
14
+ */
15
+ export declare function parsePackageJson(content: string): PackageMetadata;
16
+ /**
17
+ * Parse requirements.txt and extract URLs from comments
18
+ * EXCLUDES actual packages (handled by dependabot)
19
+ */
20
+ export declare function parseRequirementsTxt(content: string): PackageMetadata;
21
+ /**
22
+ * Parse Cargo.toml and extract metadata URLs
23
+ * EXCLUDES actual dependencies (handled by dependabot)
24
+ */
25
+ export declare function parseCargoToml(content: string): PackageMetadata;
26
+ /**
27
+ * Parse go.mod and extract URLs from comments
28
+ * EXCLUDES actual dependencies (handled by dependabot)
29
+ */
30
+ export declare function parseGoMod(content: string): PackageMetadata;
31
+ //# sourceMappingURL=package-files.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-files.d.ts","sourceRoot":"","sources":["../../src/parsers/package-files.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,eAAe;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe,CAqCjE;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe,CAcrE;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe,CA4C/D;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe,CAc3D"}
@@ -0,0 +1,130 @@
1
+ /**
2
+ * Package File Parser
3
+ * Extracts metadata and references from package manager files
4
+ * EXCLUDES actual dependencies (handled by dependabot)
5
+ */
6
+ /**
7
+ * Parse package.json and extract metadata URLs (NOT dependencies)
8
+ */
9
+ export function parsePackageJson(content) {
10
+ try {
11
+ const pkg = JSON.parse(content);
12
+ const urls = [];
13
+ // Extract repository URL
14
+ let repository = undefined;
15
+ if (typeof pkg.repository === 'string') {
16
+ repository = pkg.repository;
17
+ }
18
+ else if (pkg.repository && pkg.repository.url) {
19
+ repository = pkg.repository.url;
20
+ }
21
+ // Extract homepage
22
+ const homepage = pkg.homepage;
23
+ // Extract documentation (not standard but sometimes present)
24
+ const documentation = pkg.documentation || pkg.docs;
25
+ // Extract URLs from description
26
+ if (pkg.description) {
27
+ const descUrls = extractUrls(pkg.description);
28
+ urls.push(...descUrls);
29
+ }
30
+ // Note: We DO NOT extract dependencies/devDependencies
31
+ // Those are handled by dependabot
32
+ return {
33
+ ...(repository !== undefined && { repository }),
34
+ ...(homepage !== undefined && { homepage }),
35
+ ...(documentation !== undefined && { documentation }),
36
+ urls
37
+ };
38
+ }
39
+ catch {
40
+ return { urls: [] };
41
+ }
42
+ }
43
+ /**
44
+ * Parse requirements.txt and extract URLs from comments
45
+ * EXCLUDES actual packages (handled by dependabot)
46
+ */
47
+ export function parseRequirementsTxt(content) {
48
+ const urls = [];
49
+ const lines = content.split('\n');
50
+ for (const line of lines) {
51
+ // Only extract URLs from comments
52
+ if (line.trim().startsWith('#')) {
53
+ const commentUrls = extractUrls(line);
54
+ urls.push(...commentUrls);
55
+ }
56
+ // Skip actual package lines - dependabot handles those
57
+ }
58
+ return { urls };
59
+ }
60
+ /**
61
+ * Parse Cargo.toml and extract metadata URLs
62
+ * EXCLUDES actual dependencies (handled by dependabot)
63
+ */
64
+ export function parseCargoToml(content) {
65
+ const urls = [];
66
+ let repository = undefined;
67
+ let homepage = undefined;
68
+ let documentation = undefined;
69
+ const lines = content.split('\n');
70
+ let inPackageSection = false;
71
+ for (const line of lines) {
72
+ if (line.trim() === '[package]') {
73
+ inPackageSection = true;
74
+ continue;
75
+ }
76
+ if (line.trim().startsWith('[') && line.trim() !== '[package]') {
77
+ inPackageSection = false;
78
+ continue;
79
+ }
80
+ if (inPackageSection) {
81
+ const repoMatch = /repository\s*=\s*"([^"]+)"/.exec(line);
82
+ if (repoMatch && repoMatch[1])
83
+ repository = repoMatch[1];
84
+ const homepageMatch = /homepage\s*=\s*"([^"]+)"/.exec(line);
85
+ if (homepageMatch && homepageMatch[1])
86
+ homepage = homepageMatch[1];
87
+ const docMatch = /documentation\s*=\s*"([^"]+)"/.exec(line);
88
+ if (docMatch && docMatch[1])
89
+ documentation = docMatch[1];
90
+ }
91
+ // Extract URLs from comments
92
+ if (line.trim().startsWith('#')) {
93
+ const commentUrls = extractUrls(line);
94
+ urls.push(...commentUrls);
95
+ }
96
+ }
97
+ return {
98
+ ...(repository !== undefined && { repository }),
99
+ ...(homepage !== undefined && { homepage }),
100
+ ...(documentation !== undefined && { documentation }),
101
+ urls
102
+ };
103
+ }
104
+ /**
105
+ * Parse go.mod and extract URLs from comments
106
+ * EXCLUDES actual dependencies (handled by dependabot)
107
+ */
108
+ export function parseGoMod(content) {
109
+ const urls = [];
110
+ const lines = content.split('\n');
111
+ for (const line of lines) {
112
+ // Only extract URLs from comments
113
+ if (line.trim().startsWith('//')) {
114
+ const commentUrls = extractUrls(line);
115
+ urls.push(...commentUrls);
116
+ }
117
+ // Skip actual require lines - dependabot handles those
118
+ }
119
+ return { urls };
120
+ }
121
+ function extractUrls(text) {
122
+ const urls = [];
123
+ const regex = /https?:\/\/[^\s<>()[\]'"]+/g;
124
+ let match;
125
+ while ((match = regex.exec(text)) !== null) {
126
+ urls.push(match[0]);
127
+ }
128
+ return urls;
129
+ }
130
+ //# sourceMappingURL=package-files.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-files.js","sourceRoot":"","sources":["../../src/parsers/package-files.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * README Parser
3
+ * Extracts URLs and references from README and markdown files
4
+ */
5
+ export interface ExtractedReference {
6
+ url: string;
7
+ context: string;
8
+ line?: number;
9
+ type: 'markdown-link' | 'bare-url' | 'reference-link';
10
+ }
11
+ /**
12
+ * Parse README content and extract external references
13
+ */
14
+ export declare function parseReadme(content: string, filePath?: string): ExtractedReference[];
15
+ /**
16
+ * Extract GitHub repository mentions (owner/repo format)
17
+ */
18
+ export declare function extractGitHubReferences(content: string): Array<{
19
+ owner: string;
20
+ repo: string;
21
+ context: string;
22
+ }>;
23
+ //# sourceMappingURL=readme.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"readme.d.ts","sourceRoot":"","sources":["../../src/parsers/readme.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,eAAe,GAAG,UAAU,GAAG,gBAAgB,CAAC;CACvD;AAgBD;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,SAAc,GAAG,kBAAkB,EAAE,CAoDzF;AA6DD;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,MAAM,GACd,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAqCzD"}
@@ -0,0 +1,151 @@
1
+ /**
2
+ * README Parser
3
+ * Extracts URLs and references from README and markdown files
4
+ */
5
+ // Patterns to skip (package managers, CI badges, shields.io)
6
+ const SKIP_PATTERNS = [
7
+ /npmjs\.com\/package/,
8
+ /pypi\.org\/project/,
9
+ /crates\.io\/crates/,
10
+ /rubygems\.org\/gems/,
11
+ /packagist\.org\/packages/,
12
+ /shields\.io/,
13
+ /badge(s)?\..*\.svg/,
14
+ /travis-ci\.(org|com)/,
15
+ /circleci\.com/,
16
+ /github\.com\/.*\/actions/ // GitHub Actions badges
17
+ ];
18
+ /**
19
+ * Parse README content and extract external references
20
+ */
21
+ export function parseReadme(content, filePath = 'README.md') {
22
+ const references = [];
23
+ const lines = content.split('\n');
24
+ for (let i = 0; i < lines.length; i++) {
25
+ const line = lines[i];
26
+ if (!line)
27
+ continue; // Skip undefined or empty lines
28
+ const lineNumber = i + 1;
29
+ // Extract markdown links [text](url)
30
+ const markdownLinks = extractMarkdownLinks(line);
31
+ for (const { url, text } of markdownLinks) {
32
+ if (!shouldSkipUrl(url)) {
33
+ references.push({
34
+ url,
35
+ context: text || line.trim(),
36
+ line: lineNumber,
37
+ type: 'markdown-link'
38
+ });
39
+ }
40
+ }
41
+ // Extract reference-style links [text]: url
42
+ const referenceLinks = extractReferenceLinks(line);
43
+ for (const { url, text } of referenceLinks) {
44
+ if (!shouldSkipUrl(url)) {
45
+ references.push({
46
+ url,
47
+ context: text || line.trim(),
48
+ line: lineNumber,
49
+ type: 'reference-link'
50
+ });
51
+ }
52
+ }
53
+ // Extract bare URLs
54
+ const bareUrls = extractBareUrls(line);
55
+ for (const url of bareUrls) {
56
+ if (!shouldSkipUrl(url)) {
57
+ references.push({
58
+ url,
59
+ context: line.trim(),
60
+ line: lineNumber,
61
+ type: 'bare-url'
62
+ });
63
+ }
64
+ }
65
+ }
66
+ // Deduplicate by URL
67
+ return deduplicateReferences(references);
68
+ }
69
+ function extractMarkdownLinks(line) {
70
+ const links = [];
71
+ const regex = /\[([^\]]+)\]\(([^)]+)\)/g;
72
+ let match;
73
+ while ((match = regex.exec(line)) !== null) {
74
+ const text = match[1];
75
+ const url = match[2];
76
+ if (text !== undefined && url !== undefined) {
77
+ links.push({ text, url });
78
+ }
79
+ }
80
+ return links;
81
+ }
82
+ function extractReferenceLinks(line) {
83
+ const links = [];
84
+ const regex = /^\[([^\]]+)\]:\s+(.+)$/;
85
+ const match = regex.exec(line);
86
+ if (match) {
87
+ const text = match[1];
88
+ const url = match[2];
89
+ if (text !== undefined && url !== undefined) {
90
+ links.push({ text, url });
91
+ }
92
+ }
93
+ return links;
94
+ }
95
+ function extractBareUrls(line) {
96
+ const urls = [];
97
+ const regex = /https?:\/\/[^\s<>()[\]]+/g;
98
+ let match;
99
+ while ((match = regex.exec(line)) !== null) {
100
+ urls.push(match[0]);
101
+ }
102
+ return urls;
103
+ }
104
+ function shouldSkipUrl(url) {
105
+ return SKIP_PATTERNS.some((pattern) => pattern.test(url));
106
+ }
107
+ function deduplicateReferences(references) {
108
+ const seen = new Set();
109
+ return references.filter((ref) => {
110
+ if (seen.has(ref.url)) {
111
+ return false;
112
+ }
113
+ seen.add(ref.url);
114
+ return true;
115
+ });
116
+ }
117
+ /**
118
+ * Extract GitHub repository mentions (owner/repo format)
119
+ */
120
+ export function extractGitHubReferences(content) {
121
+ const references = [];
122
+ const lines = content.split('\n');
123
+ for (const line of lines) {
124
+ // Match owner/repo pattern not in URLs, with basic length and context constraints
125
+ const regex = /(?<!https?:\/\/github\.com\/)(?:^|[\s(])([a-zA-Z0-9_-]{2,}\/[a-zA-Z0-9_.-]{2,})(?=$|[\s),.;])/g;
126
+ let match;
127
+ while ((match = regex.exec(line)) !== null) {
128
+ const ownerRepo = match[1];
129
+ if (ownerRepo) {
130
+ const parts = ownerRepo.split('/');
131
+ const owner = parts[0];
132
+ const repo = parts[1];
133
+ if (owner &&
134
+ repo &&
135
+ owner.length >= 2 &&
136
+ repo.length >= 2 &&
137
+ owner !== 'owner' &&
138
+ repo !== 'repo' &&
139
+ !(/^\d+$/.test(owner) && /^\d+$/.test(repo))) {
140
+ references.push({
141
+ owner,
142
+ repo,
143
+ context: line.trim()
144
+ });
145
+ }
146
+ }
147
+ }
148
+ }
149
+ return references;
150
+ }
151
+ //# sourceMappingURL=readme.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"readme.js","sourceRoot":"","sources":["../../src/parsers/readme.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,41 @@
1
+ {
2
+ "name": "@dependabit/detector",
3
+ "version": "0.1.1",
4
+ "description": "LLM-based dependency detection for external resources",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "types": "dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "default": "./dist/index.js"
12
+ }
13
+ },
14
+ "dependencies": {
15
+ "@actions/core": "^3.0.0",
16
+ "zod": "^4.3.6",
17
+ "@dependabit/github-client": "0.1.1",
18
+ "@dependabit/manifest": "0.1.1"
19
+ },
20
+ "devDependencies": {
21
+ "@types/node": "^25.2.2",
22
+ "tsx": "^4.21.0",
23
+ "typescript": "^5.9.3",
24
+ "vitest": "^4.0.18"
25
+ },
26
+ "keywords": [
27
+ "dependency",
28
+ "detection",
29
+ "llm",
30
+ "ai"
31
+ ],
32
+ "license": "MIT",
33
+ "scripts": {
34
+ "build": "tsgo -p tsconfig.json",
35
+ "clean": "rm -rf dist",
36
+ "dev": "tsx watch src/index.ts",
37
+ "type-check": "tsgo --noEmit -p tsconfig.json",
38
+ "test": "vitest run",
39
+ "test:watch": "vitest"
40
+ }
41
+ }