@o3r/mcp 13.3.0-prerelease.4 → 13.3.0-prerelease.5
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/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@o3r/mcp",
|
|
3
|
-
"version": "13.3.0-prerelease.
|
|
3
|
+
"version": "13.3.0-prerelease.5",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public"
|
|
6
6
|
},
|
|
@@ -39,10 +39,10 @@
|
|
|
39
39
|
"@nx/eslint-plugin": "~21.6.0",
|
|
40
40
|
"@nx/jest": "~21.6.0",
|
|
41
41
|
"@nx/js": "~21.6.0",
|
|
42
|
-
"@o3r/build-helpers": "^13.3.0-prerelease.
|
|
43
|
-
"@o3r/eslint-config": "^13.3.0-prerelease.
|
|
44
|
-
"@o3r/eslint-plugin": "^13.3.0-prerelease.
|
|
45
|
-
"@o3r/test-helpers": "^13.3.0-prerelease.
|
|
42
|
+
"@o3r/build-helpers": "^13.3.0-prerelease.5",
|
|
43
|
+
"@o3r/eslint-config": "^13.3.0-prerelease.5",
|
|
44
|
+
"@o3r/eslint-plugin": "^13.3.0-prerelease.5",
|
|
45
|
+
"@o3r/test-helpers": "^13.3.0-prerelease.5",
|
|
46
46
|
"@stylistic/eslint-plugin": "~5.4.0",
|
|
47
47
|
"@types/jest": "~29.5.2",
|
|
48
48
|
"@types/node": "~22.18.0",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"find-repositories-using-otter.d.ts","sourceRoot":"","sources":["../../../src/tools/find-repositories-using-otter.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EACV,SAAS,EACV,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"find-repositories-using-otter.d.ts","sourceRoot":"","sources":["../../../src/tools/find-repositories-using-otter.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EACV,SAAS,EACV,MAAM,yCAAyC,CAAC;AAmLjD;;;GAGG;AACH,wBAAgB,qCAAqC,CAAC,MAAM,EAAE,SAAS,QAsCtE"}
|
|
@@ -19,15 +19,14 @@ async function listRepos(octokit) {
|
|
|
19
19
|
// so we should found another solution if we have more than 10 scopes to look for.
|
|
20
20
|
const search = (await Promise.all(OTTER_SCOPES
|
|
21
21
|
.map(async (scope) => {
|
|
22
|
-
const repos = (await octokit.paginate(octokit.search.code, { q: `@${scope}/ filename:package.json`, per_page: 100 }))
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
logger_1.logger.info(`Found ${
|
|
27
|
-
return
|
|
22
|
+
const repos = (await octokit.paginate(octokit.search.code, { q: `@${scope}/ filename:package.json`, per_page: 100 }));
|
|
23
|
+
// eslint-disable-next-line @typescript-eslint/naming-convention -- Naming convention from GitHub API
|
|
24
|
+
const reposWithOnlyNeededInfo = repos.map(({ repository: { name, full_name, fork, archived, default_branch } }) => ({ name, full_name, fork, archived, default_branch }));
|
|
25
|
+
const filteredRepos = reposWithOnlyNeededInfo.filter((repo) => !repo.archived && !repo.fork);
|
|
26
|
+
logger_1.logger.info(`Found ${filteredRepos.length} repositories with references to @${scope} in package.json`);
|
|
27
|
+
return filteredRepos;
|
|
28
28
|
}))).flat();
|
|
29
|
-
const repositories = Array.from(new Map((
|
|
30
|
-
.map(({ fork, archived, ...repo }) => [repo.full_name, repo])).values());
|
|
29
|
+
const repositories = Array.from(new Map(search.map(({ fork, archived, ...repo }) => [repo.full_name, repo])).values());
|
|
31
30
|
logger_1.logger.info(`Found ${repositories.length} repositories with references to Otter`);
|
|
32
31
|
return repositories;
|
|
33
32
|
}
|
|
@@ -67,6 +66,19 @@ function dependsOnOtter(octokit) {
|
|
|
67
66
|
].some((dep) => O3R_SCOPE_REGEX.test(dep));
|
|
68
67
|
};
|
|
69
68
|
}
|
|
69
|
+
const DEFAULT_O3R_MCP_CACHE_MAX_AGE = 90;
|
|
70
|
+
const convertDaysToMs = (days) => days * 1000 * 60 * 60 * 24;
|
|
71
|
+
function validateCache(cachedRepos) {
|
|
72
|
+
const now = Date.now();
|
|
73
|
+
const maxAge = convertDaysToMs(+(process.env.O3R_MCP_CACHE_MAX_AGE || DEFAULT_O3R_MCP_CACHE_MAX_AGE));
|
|
74
|
+
Object.entries(cachedRepos).forEach(([repo, { when }]) => {
|
|
75
|
+
const whenDate = new Date(when);
|
|
76
|
+
if (Number.isNaN(whenDate.getTime()) || (now - whenDate.getTime()) > maxAge) {
|
|
77
|
+
logger_1.logger.info(`Cache for repository ${repo} is outdated or invalid, removing it`);
|
|
78
|
+
delete cachedRepos[repo];
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
}
|
|
70
82
|
async function findRepositoriesUsingOtter(octokit, reposUsingOtter) {
|
|
71
83
|
const cacheFolderPath = process.env.O3R_MCP_CACHE_PATH || '.cache/o3r/mcp';
|
|
72
84
|
const cachePath = (0, node_path_1.resolve)(cacheFolderPath, 'repos-using-otter.json');
|
|
@@ -77,6 +89,7 @@ async function findRepositoriesUsingOtter(octokit, reposUsingOtter) {
|
|
|
77
89
|
else {
|
|
78
90
|
try {
|
|
79
91
|
cachedRepos = JSON.parse(await (0, promises_1.readFile)(cachePath, { encoding: 'utf8' }));
|
|
92
|
+
validateCache(cachedRepos);
|
|
80
93
|
reposUsingOtter.push(...Object.entries(cachedRepos).filter(([, usesOtter]) => usesOtter).map(([repo]) => repo));
|
|
81
94
|
logger_1.logger.info(`Loaded ${Object.keys(cachedRepos).length} cached repositories, ${reposUsingOtter.length} of them using Otter dependencies.`);
|
|
82
95
|
}
|
|
@@ -84,7 +97,7 @@ async function findRepositoriesUsingOtter(octokit, reposUsingOtter) {
|
|
|
84
97
|
logger_1.logger.info('No cache file found, starting fresh search for repositories using Otter dependencies.', e);
|
|
85
98
|
}
|
|
86
99
|
}
|
|
87
|
-
const repositories = (await listRepos(octokit)).filter((r) => !cachedRepos[r.full_name]);
|
|
100
|
+
const repositories = (await listRepos(octokit)).filter((r) => !cachedRepos[r.full_name]?.dependsOn);
|
|
88
101
|
const findPackageJsonFilesInRepo = findPackageJsonFiles(octokit);
|
|
89
102
|
const dependsOnOtterInRepo = dependsOnOtter(octokit);
|
|
90
103
|
await Promise.allSettled(repositories.map(async (repository) => {
|
|
@@ -98,7 +111,10 @@ async function findRepositoriesUsingOtter(octokit, reposUsingOtter) {
|
|
|
98
111
|
}
|
|
99
112
|
if (packageJsonFiles.length === 0) {
|
|
100
113
|
logger_1.logger.info(`No package.json files found in repository ${repository.full_name}`);
|
|
101
|
-
cachedRepos[repository.full_name] =
|
|
114
|
+
cachedRepos[repository.full_name] = {
|
|
115
|
+
dependsOn: false,
|
|
116
|
+
when: new Date().toISOString()
|
|
117
|
+
};
|
|
102
118
|
return;
|
|
103
119
|
}
|
|
104
120
|
try {
|
|
@@ -113,7 +129,10 @@ async function findRepositoriesUsingOtter(octokit, reposUsingOtter) {
|
|
|
113
129
|
if (depFound) {
|
|
114
130
|
reposUsingOtter.push(repository.full_name);
|
|
115
131
|
logger_1.logger.info(`Repository ${repository.full_name} uses Otter dependencies`);
|
|
116
|
-
cachedRepos[repository.full_name] =
|
|
132
|
+
cachedRepos[repository.full_name] = {
|
|
133
|
+
dependsOn: true,
|
|
134
|
+
when: new Date().toISOString()
|
|
135
|
+
};
|
|
117
136
|
}
|
|
118
137
|
else {
|
|
119
138
|
throw new Error('No Otter dependencies found in this package.json');
|
|
@@ -121,7 +140,10 @@ async function findRepositoriesUsingOtter(octokit, reposUsingOtter) {
|
|
|
121
140
|
}));
|
|
122
141
|
}
|
|
123
142
|
catch { }
|
|
124
|
-
cachedRepos[repository.full_name] ||=
|
|
143
|
+
cachedRepos[repository.full_name] ||= {
|
|
144
|
+
dependsOn: false,
|
|
145
|
+
when: new Date().toISOString()
|
|
146
|
+
};
|
|
125
147
|
}));
|
|
126
148
|
logger_1.logger.info(`Found ${reposUsingOtter.length} repositories using Otter dependencies`);
|
|
127
149
|
if (process.env.O3R_MCP_USE_CACHED_REPOS === 'false') {
|
|
@@ -132,7 +154,7 @@ async function findRepositoriesUsingOtter(octokit, reposUsingOtter) {
|
|
|
132
154
|
await (0, promises_1.mkdir)(cacheFolderPath, { recursive: true });
|
|
133
155
|
}
|
|
134
156
|
try {
|
|
135
|
-
await (0, promises_1.writeFile)(cachePath, JSON.stringify(cachedRepos
|
|
157
|
+
await (0, promises_1.writeFile)(cachePath, JSON.stringify(cachedRepos));
|
|
136
158
|
}
|
|
137
159
|
catch (e) {
|
|
138
160
|
logger_1.logger.error('Failed to update cache', e);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"find-repositories-using-otter.js","sourceRoot":"","sources":["../../../src/tools/find-repositories-using-otter.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"find-repositories-using-otter.js","sourceRoot":"","sources":["../../../src/tools/find-repositories-using-otter.ts"],"names":[],"mappings":"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"}
|