@grove-dev/core 0.7.0 → 0.9.0

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 (159) hide show
  1. package/dist/audit.d.ts +3 -3
  2. package/dist/audit.d.ts.map +1 -1
  3. package/dist/audit.js +25 -6
  4. package/dist/audit.js.map +1 -1
  5. package/dist/awesome-readme.d.ts.map +1 -1
  6. package/dist/awesome-readme.js +31 -31
  7. package/dist/awesome-readme.js.map +1 -1
  8. package/dist/build-data.d.ts +1 -1
  9. package/dist/build-data.d.ts.map +1 -1
  10. package/dist/build-data.js +110 -80
  11. package/dist/build-data.js.map +1 -1
  12. package/dist/candidate.d.ts +34 -0
  13. package/dist/candidate.d.ts.map +1 -0
  14. package/dist/candidate.js +128 -0
  15. package/dist/candidate.js.map +1 -0
  16. package/dist/collections-io.d.ts +1 -1
  17. package/dist/collections-io.js +8 -8
  18. package/dist/collections-io.js.map +1 -1
  19. package/dist/collections.d.ts +2 -2
  20. package/dist/collections.d.ts.map +1 -1
  21. package/dist/collections.js +8 -9
  22. package/dist/collections.js.map +1 -1
  23. package/dist/collector.d.ts +1 -1
  24. package/dist/collector.d.ts.map +1 -1
  25. package/dist/collector.js +2 -2
  26. package/dist/collector.js.map +1 -1
  27. package/dist/config.d.ts +1 -1
  28. package/dist/config.d.ts.map +1 -1
  29. package/dist/config.js +4 -4
  30. package/dist/config.js.map +1 -1
  31. package/dist/content-body.d.ts.map +1 -1
  32. package/dist/content-body.js +22 -22
  33. package/dist/content-body.js.map +1 -1
  34. package/dist/contributors.d.ts.map +1 -1
  35. package/dist/contributors.js +22 -23
  36. package/dist/contributors.js.map +1 -1
  37. package/dist/decisions.d.ts +1 -1
  38. package/dist/decisions.d.ts.map +1 -1
  39. package/dist/decisions.js +18 -20
  40. package/dist/decisions.js.map +1 -1
  41. package/dist/directory-client.d.ts +6 -4
  42. package/dist/directory-client.d.ts.map +1 -1
  43. package/dist/directory-client.js +9 -4
  44. package/dist/directory-client.js.map +1 -1
  45. package/dist/directory-facets.d.ts +1 -1
  46. package/dist/directory-facets.d.ts.map +1 -1
  47. package/dist/directory-facets.js +35 -17
  48. package/dist/directory-facets.js.map +1 -1
  49. package/dist/directory-filter-keys.d.ts +53 -0
  50. package/dist/directory-filter-keys.d.ts.map +1 -0
  51. package/dist/directory-filter-keys.js +66 -0
  52. package/dist/directory-filter-keys.js.map +1 -0
  53. package/dist/directory-format.d.ts.map +1 -1
  54. package/dist/directory-format.js +15 -15
  55. package/dist/directory-format.js.map +1 -1
  56. package/dist/directory-lenses.d.ts +1 -1
  57. package/dist/directory-lenses.d.ts.map +1 -1
  58. package/dist/directory-lenses.js +66 -61
  59. package/dist/directory-lenses.js.map +1 -1
  60. package/dist/directory-repo.js +2 -2
  61. package/dist/directory-scores.d.ts.map +1 -1
  62. package/dist/directory-scores.js +25 -25
  63. package/dist/directory-scores.js.map +1 -1
  64. package/dist/directory-search.d.ts +4 -4
  65. package/dist/directory-search.d.ts.map +1 -1
  66. package/dist/directory-search.js +129 -110
  67. package/dist/directory-search.js.map +1 -1
  68. package/dist/directory-taxonomy.d.ts +1 -1
  69. package/dist/directory-taxonomy.d.ts.map +1 -1
  70. package/dist/directory-taxonomy.js +2 -2
  71. package/dist/directory-taxonomy.js.map +1 -1
  72. package/dist/enrich.d.ts.map +1 -1
  73. package/dist/enrich.js +15 -12
  74. package/dist/enrich.js.map +1 -1
  75. package/dist/evidence.d.ts +33 -0
  76. package/dist/evidence.d.ts.map +1 -0
  77. package/dist/evidence.js +181 -0
  78. package/dist/evidence.js.map +1 -0
  79. package/dist/github-client.js +6 -6
  80. package/dist/github.d.ts +9 -1
  81. package/dist/github.d.ts.map +1 -1
  82. package/dist/github.js +40 -13
  83. package/dist/github.js.map +1 -1
  84. package/dist/health.d.ts +1 -1
  85. package/dist/health.js +44 -44
  86. package/dist/host.js +2 -2
  87. package/dist/import-types.d.ts +24 -0
  88. package/dist/import-types.d.ts.map +1 -0
  89. package/dist/import-types.js +2 -0
  90. package/dist/import-types.js.map +1 -0
  91. package/dist/import-write.d.ts +12 -0
  92. package/dist/import-write.d.ts.map +1 -0
  93. package/dist/import-write.js +39 -0
  94. package/dist/import-write.js.map +1 -0
  95. package/dist/importer.d.ts +5 -3
  96. package/dist/importer.d.ts.map +1 -1
  97. package/dist/importer.js +4 -2
  98. package/dist/importer.js.map +1 -1
  99. package/dist/index.d.ts +74 -63
  100. package/dist/index.d.ts.map +1 -1
  101. package/dist/index.js +94 -75
  102. package/dist/index.js.map +1 -1
  103. package/dist/io.js +8 -8
  104. package/dist/llms.d.ts +1 -1
  105. package/dist/llms.d.ts.map +1 -1
  106. package/dist/llms.js +65 -64
  107. package/dist/llms.js.map +1 -1
  108. package/dist/markdown.d.ts +3 -33
  109. package/dist/markdown.d.ts.map +1 -1
  110. package/dist/markdown.js +2 -39
  111. package/dist/markdown.js.map +1 -1
  112. package/dist/og-image.d.ts +8 -8
  113. package/dist/og-image.d.ts.map +1 -1
  114. package/dist/og-image.js +91 -84
  115. package/dist/og-image.js.map +1 -1
  116. package/dist/page-document.d.ts +8 -8
  117. package/dist/page-document.d.ts.map +1 -1
  118. package/dist/page-document.js +48 -54
  119. package/dist/page-document.js.map +1 -1
  120. package/dist/parseReadme.d.ts.map +1 -1
  121. package/dist/parseReadme.js +9 -11
  122. package/dist/parseReadme.js.map +1 -1
  123. package/dist/prepare.d.ts +5 -5
  124. package/dist/prepare.d.ts.map +1 -1
  125. package/dist/prepare.js +32 -38
  126. package/dist/prepare.js.map +1 -1
  127. package/dist/readme-health.d.ts +33 -0
  128. package/dist/readme-health.d.ts.map +1 -0
  129. package/dist/readme-health.js +88 -0
  130. package/dist/readme-health.js.map +1 -0
  131. package/dist/related.d.ts +1 -1
  132. package/dist/repository-health.d.ts +11 -0
  133. package/dist/repository-health.d.ts.map +1 -0
  134. package/dist/repository-health.js +94 -0
  135. package/dist/repository-health.js.map +1 -0
  136. package/dist/schema.d.ts +72 -30
  137. package/dist/schema.d.ts.map +1 -1
  138. package/dist/schema.js +156 -144
  139. package/dist/schema.js.map +1 -1
  140. package/dist/site-artifacts.js +1 -1
  141. package/dist/sitemap.d.ts +2 -2
  142. package/dist/sitemap.d.ts.map +1 -1
  143. package/dist/sitemap.js +39 -39
  144. package/dist/sitemap.js.map +1 -1
  145. package/dist/slug.js +4 -4
  146. package/dist/sync-icons.js +15 -15
  147. package/dist/taxonomy-inference.d.ts +27 -0
  148. package/dist/taxonomy-inference.d.ts.map +1 -0
  149. package/dist/taxonomy-inference.js +38 -0
  150. package/dist/taxonomy-inference.js.map +1 -0
  151. package/dist/validate.d.ts +3 -3
  152. package/dist/validate.d.ts.map +1 -1
  153. package/dist/validate.js +73 -62
  154. package/dist/validate.js.map +1 -1
  155. package/dist/yaml.d.ts +47 -0
  156. package/dist/yaml.d.ts.map +1 -0
  157. package/dist/yaml.js +56 -0
  158. package/dist/yaml.js.map +1 -0
  159. package/package.json +6 -1
@@ -0,0 +1,88 @@
1
+ import { extractCandidates } from './candidate.js';
2
+ import { canonicalRepoKey, inspectRepositories } from './evidence.js';
3
+ import { parseGithubRepoUrl } from './github.js';
4
+ import { classifyRepositoryHealth } from './repository-health.js';
5
+ export async function runReadmeHealthCheck(markdown, options = {}) {
6
+ const candidates = extractCandidates(markdown, {
7
+ ...(options.file ? { file: options.file } : {}),
8
+ ...(options.sourceUrl ? { sourceUrl: options.sourceUrl } : {}),
9
+ });
10
+ const repositoryUrls = candidates.map((candidate) => candidate.links.find((link) => link.kind === 'repository')?.url);
11
+ const urlsToInspect = repositoryUrls.filter((url) => Boolean(url));
12
+ const evidenceList = urlsToInspect.length > 0
13
+ ? await inspectRepositories(urlsToInspect, {
14
+ ...(options.token ? { token: options.token } : {}),
15
+ ...(options.concurrency !== undefined ? { concurrency: options.concurrency } : {}),
16
+ })
17
+ : [];
18
+ const evidenceByUrl = new Map(urlsToInspect.map((url, index) => [url, evidenceList[index]]));
19
+ const seenRepoKeys = new Set();
20
+ const entries = candidates.map((candidate, index) => {
21
+ const repositoryUrl = repositoryUrls[index];
22
+ if (!repositoryUrl) {
23
+ return { candidate, isDuplicate: false };
24
+ }
25
+ const evidence = evidenceByUrl.get(repositoryUrl);
26
+ const identity = parseGithubRepoUrl(repositoryUrl);
27
+ const key = identity ? canonicalRepoKey(identity.owner, identity.repo) : repositoryUrl;
28
+ const isDuplicate = seenRepoKeys.has(key);
29
+ seenRepoKeys.add(key);
30
+ return {
31
+ candidate,
32
+ repositoryUrl,
33
+ isDuplicate,
34
+ ...(evidence ? { evidence, health: classifyRepositoryHealth(evidence) } : {}),
35
+ };
36
+ });
37
+ return { entries, summary: summarize(entries) };
38
+ }
39
+ function summarize(entries) {
40
+ let repositoriesResolved = 0;
41
+ let archived = 0;
42
+ let unavailable = 0;
43
+ let moved = 0;
44
+ let duplicates = 0;
45
+ let likelyStale = 0;
46
+ let unresolved = 0;
47
+ let healthyCount = 0;
48
+ for (const entry of entries) {
49
+ if (entry.evidence?.status === 'ok')
50
+ repositoriesResolved++;
51
+ if (entry.evidence?.redirected)
52
+ moved++;
53
+ if (entry.isDuplicate)
54
+ duplicates++;
55
+ switch (entry.health?.status) {
56
+ case 'archived':
57
+ archived++;
58
+ break;
59
+ case 'broken':
60
+ unavailable++;
61
+ break;
62
+ case 'likely-stale':
63
+ likelyStale++;
64
+ break;
65
+ case 'active':
66
+ case 'maintained':
67
+ case 'stable':
68
+ healthyCount++;
69
+ break;
70
+ default:
71
+ break;
72
+ }
73
+ if (!entry.repositoryUrl || entry.health?.status === 'unknown')
74
+ unresolved++;
75
+ }
76
+ return {
77
+ entriesDetected: entries.length,
78
+ repositoriesResolved,
79
+ archived,
80
+ unavailable,
81
+ moved,
82
+ duplicates,
83
+ likelyStale,
84
+ unresolved,
85
+ healthyPercent: repositoriesResolved > 0 ? Math.round((100 * healthyCount) / repositoriesResolved) : 0,
86
+ };
87
+ }
88
+ //# sourceMappingURL=readme-health.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"readme-health.js","sourceRoot":"","sources":["../src/readme-health.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACxE,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAA2B,MAAM,eAAe,CAAC;AAC/F,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,wBAAwB,EAA+B,MAAM,wBAAwB,CAAC;AAkC/F,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,QAAgB,EAChB,UAAuC,EAAE;IAEzC,MAAM,UAAU,GAAG,iBAAiB,CAAC,QAAQ,EAAE;QAC7C,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/C,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC/D,CAAC,CAAC;IAEH,MAAM,cAAc,GAAG,UAAU,CAAC,GAAG,CACnC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,YAAY,CAAC,EAAE,GAAG,CAC/E,CAAC;IACF,MAAM,aAAa,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,GAAG,EAAiB,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;IAElF,MAAM,YAAY,GAChB,aAAa,CAAC,MAAM,GAAG,CAAC;QACtB,CAAC,CAAC,MAAM,mBAAmB,CAAC,aAAa,EAAE;YACvC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAClD,GAAG,CAAC,OAAO,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACnF,CAAC;QACJ,CAAC,CAAC,EAAE,CAAC;IACT,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAE7F,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;IACvC,MAAM,OAAO,GAA8B,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE;QAC7E,MAAM,aAAa,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;QAC5C,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;QAC3C,CAAC;QAED,MAAM,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAClD,MAAM,QAAQ,GAAG,kBAAkB,CAAC,aAAa,CAAC,CAAC;QACnD,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,gBAAgB,CAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC;QACvF,MAAM,WAAW,GAAG,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC1C,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAEtB,OAAO;YACL,SAAS;YACT,aAAa;YACb,WAAW;YACX,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,wBAAwB,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC9E,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;AAClD,CAAC;AAED,SAAS,SAAS,CAAC,OAAkC;IACnD,IAAI,oBAAoB,GAAG,CAAC,CAAC;IAC7B,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,IAAI,YAAY,GAAG,CAAC,CAAC;IAErB,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,KAAK,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI;YAAE,oBAAoB,EAAE,CAAC;QAC5D,IAAI,KAAK,CAAC,QAAQ,EAAE,UAAU;YAAE,KAAK,EAAE,CAAC;QACxC,IAAI,KAAK,CAAC,WAAW;YAAE,UAAU,EAAE,CAAC;QAEpC,QAAQ,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;YAC7B,KAAK,UAAU;gBACb,QAAQ,EAAE,CAAC;gBACX,MAAM;YACR,KAAK,QAAQ;gBACX,WAAW,EAAE,CAAC;gBACd,MAAM;YACR,KAAK,cAAc;gBACjB,WAAW,EAAE,CAAC;gBACd,MAAM;YACR,KAAK,QAAQ,CAAC;YACd,KAAK,YAAY,CAAC;YAClB,KAAK,QAAQ;gBACX,YAAY,EAAE,CAAC;gBACf,MAAM;YACR;gBACE,MAAM;QACV,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,aAAa,IAAI,KAAK,CAAC,MAAM,EAAE,MAAM,KAAK,SAAS;YAAE,UAAU,EAAE,CAAC;IAC/E,CAAC;IAED,OAAO;QACL,eAAe,EAAE,OAAO,CAAC,MAAM;QAC/B,oBAAoB;QACpB,QAAQ;QACR,WAAW;QACX,KAAK;QACL,UAAU;QACV,WAAW;QACX,UAAU;QACV,cAAc,EACZ,oBAAoB,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,YAAY,CAAC,GAAG,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC;KACzF,CAAC;AACJ,CAAC"}
package/dist/related.d.ts CHANGED
@@ -1,3 +1,3 @@
1
- import type { Collection } from "./collections.js";
1
+ import type { Collection } from './collections.js';
2
2
  export declare function findRelated(target: Collection, all: Collection[], limit: number): Collection[];
3
3
  //# sourceMappingURL=related.d.ts.map
@@ -0,0 +1,11 @@
1
+ import type { RepositoryEvidence } from './evidence.js';
2
+ export type RepositoryHealthStatus = 'active' | 'maintained' | 'stable' | 'likely-stale' | 'archived' | 'broken' | 'unknown';
3
+ export type RepositoryHealthConfidence = 'high' | 'medium' | 'low';
4
+ export interface RepositoryHealthResult {
5
+ status: RepositoryHealthStatus;
6
+ confidence: RepositoryHealthConfidence;
7
+ evidence: string[];
8
+ counterEvidence: string[];
9
+ }
10
+ export declare function classifyRepositoryHealth(evidence: RepositoryEvidence): RepositoryHealthResult;
11
+ //# sourceMappingURL=repository-health.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repository-health.d.ts","sourceRoot":"","sources":["../src/repository-health.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAExD,MAAM,MAAM,sBAAsB,GAC9B,QAAQ,GACR,YAAY,GACZ,QAAQ,GACR,cAAc,GACd,UAAU,GACV,QAAQ,GACR,SAAS,CAAC;AAEd,MAAM,MAAM,0BAA0B,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;AAEnE,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,sBAAsB,CAAC;IAC/B,UAAU,EAAE,0BAA0B,CAAC;IACvC,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AAwBD,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,kBAAkB,GAAG,sBAAsB,CAgF7F"}
@@ -0,0 +1,94 @@
1
+ function daysSince(value) {
2
+ if (!value)
3
+ return Infinity;
4
+ const date = new Date(value);
5
+ if (Number.isNaN(date.valueOf()))
6
+ return Infinity;
7
+ return (Date.now() - date.valueOf()) / 86_400_000;
8
+ }
9
+ function unknown(reason) {
10
+ return { status: 'unknown', confidence: 'low', evidence: [reason], counterEvidence: [] };
11
+ }
12
+ // Thresholds intentionally match `classifyHealth` (health.ts) so "stale" means
13
+ // the same thing everywhere in Grove. Not imported — health.test.ts documents
14
+ // that these cutoffs are deliberately burned into the function that uses them
15
+ // rather than shared, so a future change forces a visible diff at the call
16
+ // site instead of drifting silently through a shared constant.
17
+ const ACTIVE_WITHIN_DAYS = 183;
18
+ const STABLE_WITHIN_DAYS = 548;
19
+ const CONFIDENT_STALE_WITHIN_DAYS = 730;
20
+ const RECENT_RELEASE_WITHIN_DAYS = 365;
21
+ const POPULAR_STARS = 500;
22
+ export function classifyRepositoryHealth(evidence) {
23
+ if (evidence.status === 'not-found') {
24
+ return {
25
+ status: 'broken',
26
+ confidence: 'high',
27
+ evidence: ['Repository not found on GitHub (404)'],
28
+ counterEvidence: [],
29
+ };
30
+ }
31
+ if (evidence.status === 'invalid-url') {
32
+ return unknown('Link is not a recognizable GitHub repository URL');
33
+ }
34
+ if (evidence.status === 'rate-limited') {
35
+ return unknown('GitHub lookup was rate-limited before evidence could be gathered');
36
+ }
37
+ if (evidence.status === 'error') {
38
+ return unknown(`Lookup failed: ${evidence.error ?? 'unknown error'}`);
39
+ }
40
+ const github = evidence.github;
41
+ if (!github) {
42
+ return unknown('No repository metadata available');
43
+ }
44
+ if (github.archived) {
45
+ return {
46
+ status: 'archived',
47
+ confidence: 'high',
48
+ evidence: ['Repository is archived on GitHub'],
49
+ counterEvidence: [],
50
+ };
51
+ }
52
+ if (evidence.source === 'html') {
53
+ return unknown('Only partial evidence available (GitHub API was rate-limited; activity signals unknown)');
54
+ }
55
+ const pushedDays = daysSince(github.pushedAt);
56
+ const releaseDays = daysSince(github.latestReleaseAt);
57
+ const hasRecentRelease = releaseDays <= RECENT_RELEASE_WITHIN_DAYS;
58
+ const popular = github.stars >= POPULAR_STARS;
59
+ const months = (days) => Math.round(days / 30);
60
+ if (pushedDays <= ACTIVE_WITHIN_DAYS) {
61
+ const evidenceLines = [`Pushed to within the last ${Math.round(pushedDays)} days`];
62
+ if (hasRecentRelease || popular) {
63
+ evidenceLines.push(hasRecentRelease ? 'Recent release found' : 'Strong community adoption (star count)');
64
+ return {
65
+ status: 'maintained',
66
+ confidence: 'high',
67
+ evidence: evidenceLines,
68
+ counterEvidence: [],
69
+ };
70
+ }
71
+ return { status: 'active', confidence: 'high', evidence: evidenceLines, counterEvidence: [] };
72
+ }
73
+ if (pushedDays <= STABLE_WITHIN_DAYS) {
74
+ const counterEvidence = [];
75
+ if (hasRecentRelease)
76
+ counterEvidence.push('A release was published within the last year');
77
+ return {
78
+ status: 'stable',
79
+ confidence: 'high',
80
+ evidence: [`No push in ${Math.round(pushedDays)} days (~${months(pushedDays)} months)`],
81
+ counterEvidence,
82
+ };
83
+ }
84
+ const counterEvidence = [];
85
+ if (hasRecentRelease)
86
+ counterEvidence.push('A release was published within the last year');
87
+ return {
88
+ status: 'likely-stale',
89
+ confidence: pushedDays <= CONFIDENT_STALE_WITHIN_DAYS ? 'medium' : 'low',
90
+ evidence: [`No push in ${Math.round(pushedDays)} days (~${months(pushedDays)} months)`],
91
+ counterEvidence,
92
+ };
93
+ }
94
+ //# sourceMappingURL=repository-health.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repository-health.js","sourceRoot":"","sources":["../src/repository-health.ts"],"names":[],"mappings":"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"}
package/dist/schema.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { z } from "zod";
1
+ import { z } from 'zod';
2
2
  /**
3
3
  * A blueprint defines the shape and behavior of a Grove site.
4
4
  *
@@ -521,6 +521,7 @@ export declare const overridesFileSchema: z.ZodUnion<readonly [z.ZodArray<z.ZodO
521
521
  }, z.core.$strip>]>;
522
522
  export declare const projectRecordSchema: z.ZodObject<{
523
523
  slug: z.ZodString;
524
+ addedAt: z.ZodOptional<z.ZodString>;
524
525
  description: z.ZodDefault<z.ZodString>;
525
526
  summary: z.ZodOptional<z.ZodString>;
526
527
  sourceDescription: z.ZodOptional<z.ZodString>;
@@ -576,6 +577,10 @@ export declare const projectRecordSchema: z.ZodObject<{
576
577
  highlight: "highlight";
577
578
  keep: "keep";
578
579
  }>>;
580
+ seo: z.ZodOptional<z.ZodObject<{
581
+ title: z.ZodOptional<z.ZodString>;
582
+ description: z.ZodOptional<z.ZodString>;
583
+ }, z.core.$strip>>;
579
584
  kind: z.ZodLiteral<"project">;
580
585
  name: z.ZodString;
581
586
  projectType: z.ZodOptional<z.ZodEnum<{
@@ -662,10 +667,7 @@ export declare const projectRecordSchema: z.ZodObject<{
662
667
  pushed_at: z.ZodOptional<z.ZodNullable<z.ZodString>>;
663
668
  }, z.core.$loose>>;
664
669
  languages: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodNumber>>;
665
- latestRelease: z.ZodOptional<z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
666
670
  activity: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
667
- files: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodBoolean>>;
668
- labels: z.ZodOptional<z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
669
671
  sync: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
670
672
  }, z.core.$loose>>;
671
673
  health: z.ZodOptional<z.ZodObject<{
@@ -714,6 +716,7 @@ export declare const projectRecordSchema: z.ZodObject<{
714
716
  export type ProjectRecord = z.infer<typeof projectRecordSchema>;
715
717
  export declare const resourceRecordSchema: z.ZodObject<{
716
718
  slug: z.ZodString;
719
+ addedAt: z.ZodOptional<z.ZodString>;
717
720
  description: z.ZodDefault<z.ZodString>;
718
721
  summary: z.ZodOptional<z.ZodString>;
719
722
  sourceDescription: z.ZodOptional<z.ZodString>;
@@ -769,6 +772,10 @@ export declare const resourceRecordSchema: z.ZodObject<{
769
772
  highlight: "highlight";
770
773
  keep: "keep";
771
774
  }>>;
775
+ seo: z.ZodOptional<z.ZodObject<{
776
+ title: z.ZodOptional<z.ZodString>;
777
+ description: z.ZodOptional<z.ZodString>;
778
+ }, z.core.$strip>>;
772
779
  kind: z.ZodLiteral<"resource">;
773
780
  title: z.ZodString;
774
781
  type: z.ZodEnum<{
@@ -792,6 +799,7 @@ export declare const resourceRecordSchema: z.ZodObject<{
792
799
  export type ResourceRecord = z.infer<typeof resourceRecordSchema>;
793
800
  export declare const entityRecordSchema: z.ZodObject<{
794
801
  slug: z.ZodString;
802
+ addedAt: z.ZodOptional<z.ZodString>;
795
803
  description: z.ZodDefault<z.ZodString>;
796
804
  summary: z.ZodOptional<z.ZodString>;
797
805
  sourceDescription: z.ZodOptional<z.ZodString>;
@@ -847,6 +855,10 @@ export declare const entityRecordSchema: z.ZodObject<{
847
855
  highlight: "highlight";
848
856
  keep: "keep";
849
857
  }>>;
858
+ seo: z.ZodOptional<z.ZodObject<{
859
+ title: z.ZodOptional<z.ZodString>;
860
+ description: z.ZodOptional<z.ZodString>;
861
+ }, z.core.$strip>>;
850
862
  kind: z.ZodLiteral<"entity">;
851
863
  name: z.ZodString;
852
864
  type: z.ZodEnum<{
@@ -870,6 +882,7 @@ export declare const entityRecordSchema: z.ZodObject<{
870
882
  export type EntityRecord = z.infer<typeof entityRecordSchema>;
871
883
  export declare const resourceSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
872
884
  slug: z.ZodString;
885
+ addedAt: z.ZodOptional<z.ZodString>;
873
886
  description: z.ZodDefault<z.ZodString>;
874
887
  summary: z.ZodOptional<z.ZodString>;
875
888
  sourceDescription: z.ZodOptional<z.ZodString>;
@@ -925,6 +938,10 @@ export declare const resourceSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
925
938
  highlight: "highlight";
926
939
  keep: "keep";
927
940
  }>>;
941
+ seo: z.ZodOptional<z.ZodObject<{
942
+ title: z.ZodOptional<z.ZodString>;
943
+ description: z.ZodOptional<z.ZodString>;
944
+ }, z.core.$strip>>;
928
945
  kind: z.ZodLiteral<"project">;
929
946
  name: z.ZodString;
930
947
  projectType: z.ZodOptional<z.ZodEnum<{
@@ -1011,10 +1028,7 @@ export declare const resourceSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
1011
1028
  pushed_at: z.ZodOptional<z.ZodNullable<z.ZodString>>;
1012
1029
  }, z.core.$loose>>;
1013
1030
  languages: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodNumber>>;
1014
- latestRelease: z.ZodOptional<z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
1015
1031
  activity: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
1016
- files: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodBoolean>>;
1017
- labels: z.ZodOptional<z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
1018
1032
  sync: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
1019
1033
  }, z.core.$loose>>;
1020
1034
  health: z.ZodOptional<z.ZodObject<{
@@ -1061,6 +1075,7 @@ export declare const resourceSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
1061
1075
  }, z.core.$strip>>;
1062
1076
  }, z.core.$strip>, z.ZodObject<{
1063
1077
  slug: z.ZodString;
1078
+ addedAt: z.ZodOptional<z.ZodString>;
1064
1079
  description: z.ZodDefault<z.ZodString>;
1065
1080
  summary: z.ZodOptional<z.ZodString>;
1066
1081
  sourceDescription: z.ZodOptional<z.ZodString>;
@@ -1116,6 +1131,10 @@ export declare const resourceSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
1116
1131
  highlight: "highlight";
1117
1132
  keep: "keep";
1118
1133
  }>>;
1134
+ seo: z.ZodOptional<z.ZodObject<{
1135
+ title: z.ZodOptional<z.ZodString>;
1136
+ description: z.ZodOptional<z.ZodString>;
1137
+ }, z.core.$strip>>;
1119
1138
  kind: z.ZodLiteral<"resource">;
1120
1139
  title: z.ZodString;
1121
1140
  type: z.ZodEnum<{
@@ -1137,6 +1156,7 @@ export declare const resourceSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
1137
1156
  author: z.ZodOptional<z.ZodString>;
1138
1157
  }, z.core.$strip>, z.ZodObject<{
1139
1158
  slug: z.ZodString;
1159
+ addedAt: z.ZodOptional<z.ZodString>;
1140
1160
  description: z.ZodDefault<z.ZodString>;
1141
1161
  summary: z.ZodOptional<z.ZodString>;
1142
1162
  sourceDescription: z.ZodOptional<z.ZodString>;
@@ -1192,6 +1212,10 @@ export declare const resourceSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
1192
1212
  highlight: "highlight";
1193
1213
  keep: "keep";
1194
1214
  }>>;
1215
+ seo: z.ZodOptional<z.ZodObject<{
1216
+ title: z.ZodOptional<z.ZodString>;
1217
+ description: z.ZodOptional<z.ZodString>;
1218
+ }, z.core.$strip>>;
1195
1219
  kind: z.ZodLiteral<"entity">;
1196
1220
  name: z.ZodString;
1197
1221
  type: z.ZodEnum<{
@@ -1215,6 +1239,7 @@ export declare const resourceSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
1215
1239
  export type Resource = z.infer<typeof resourceSchema>;
1216
1240
  export declare const recordsFileSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
1217
1241
  slug: z.ZodString;
1242
+ addedAt: z.ZodOptional<z.ZodString>;
1218
1243
  description: z.ZodDefault<z.ZodString>;
1219
1244
  summary: z.ZodOptional<z.ZodString>;
1220
1245
  sourceDescription: z.ZodOptional<z.ZodString>;
@@ -1270,6 +1295,10 @@ export declare const recordsFileSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
1270
1295
  highlight: "highlight";
1271
1296
  keep: "keep";
1272
1297
  }>>;
1298
+ seo: z.ZodOptional<z.ZodObject<{
1299
+ title: z.ZodOptional<z.ZodString>;
1300
+ description: z.ZodOptional<z.ZodString>;
1301
+ }, z.core.$strip>>;
1273
1302
  kind: z.ZodLiteral<"project">;
1274
1303
  name: z.ZodString;
1275
1304
  projectType: z.ZodOptional<z.ZodEnum<{
@@ -1356,10 +1385,7 @@ export declare const recordsFileSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
1356
1385
  pushed_at: z.ZodOptional<z.ZodNullable<z.ZodString>>;
1357
1386
  }, z.core.$loose>>;
1358
1387
  languages: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodNumber>>;
1359
- latestRelease: z.ZodOptional<z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
1360
1388
  activity: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
1361
- files: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodBoolean>>;
1362
- labels: z.ZodOptional<z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
1363
1389
  sync: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
1364
1390
  }, z.core.$loose>>;
1365
1391
  health: z.ZodOptional<z.ZodObject<{
@@ -1406,6 +1432,7 @@ export declare const recordsFileSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
1406
1432
  }, z.core.$strip>>;
1407
1433
  }, z.core.$strip>, z.ZodObject<{
1408
1434
  slug: z.ZodString;
1435
+ addedAt: z.ZodOptional<z.ZodString>;
1409
1436
  description: z.ZodDefault<z.ZodString>;
1410
1437
  summary: z.ZodOptional<z.ZodString>;
1411
1438
  sourceDescription: z.ZodOptional<z.ZodString>;
@@ -1461,6 +1488,10 @@ export declare const recordsFileSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
1461
1488
  highlight: "highlight";
1462
1489
  keep: "keep";
1463
1490
  }>>;
1491
+ seo: z.ZodOptional<z.ZodObject<{
1492
+ title: z.ZodOptional<z.ZodString>;
1493
+ description: z.ZodOptional<z.ZodString>;
1494
+ }, z.core.$strip>>;
1464
1495
  kind: z.ZodLiteral<"resource">;
1465
1496
  title: z.ZodString;
1466
1497
  type: z.ZodEnum<{
@@ -1482,6 +1513,7 @@ export declare const recordsFileSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
1482
1513
  author: z.ZodOptional<z.ZodString>;
1483
1514
  }, z.core.$strip>, z.ZodObject<{
1484
1515
  slug: z.ZodString;
1516
+ addedAt: z.ZodOptional<z.ZodString>;
1485
1517
  description: z.ZodDefault<z.ZodString>;
1486
1518
  summary: z.ZodOptional<z.ZodString>;
1487
1519
  sourceDescription: z.ZodOptional<z.ZodString>;
@@ -1537,6 +1569,10 @@ export declare const recordsFileSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
1537
1569
  highlight: "highlight";
1538
1570
  keep: "keep";
1539
1571
  }>>;
1572
+ seo: z.ZodOptional<z.ZodObject<{
1573
+ title: z.ZodOptional<z.ZodString>;
1574
+ description: z.ZodOptional<z.ZodString>;
1575
+ }, z.core.$strip>>;
1540
1576
  kind: z.ZodLiteral<"entity">;
1541
1577
  name: z.ZodString;
1542
1578
  type: z.ZodEnum<{
@@ -1831,6 +1867,8 @@ export declare function getOwnerRepoFromUrl(repoUrl: string | undefined | null):
1831
1867
  export interface IndexBase {
1832
1868
  slug: string;
1833
1869
  kind: ResourceKind;
1870
+ /** When the record joined the directory. See `resourceBaseSchema.addedAt`. */
1871
+ addedAt?: string | undefined;
1834
1872
  category: string;
1835
1873
  tags: string[];
1836
1874
  links: Links;
@@ -1842,11 +1880,15 @@ export interface IndexBase {
1842
1880
  * can write their own `summary` without overwriting it. */
1843
1881
  sourceDescription?: string | undefined;
1844
1882
  content?: string | undefined;
1845
- curation: ProjectRecord["curation"];
1883
+ curation: ProjectRecord['curation'];
1846
1884
  licenses: string[];
1847
1885
  }
1848
1886
  export interface IndexGithubSummary {
1849
1887
  fullName: string | undefined;
1888
+ /** Repository creation date, straight from the GitHub API. The
1889
+ * honest source for JSON-LD `dateCreated`, and the last-resort
1890
+ * fallback for the `recently-added` sort. */
1891
+ createdAt: string | null;
1850
1892
  stars: number;
1851
1893
  forks: number;
1852
1894
  openIssues: number;
@@ -1857,45 +1899,45 @@ export interface IndexGithubSummary {
1857
1899
  topics: string[];
1858
1900
  }
1859
1901
  export interface IndexProjectRecord extends IndexBase {
1860
- kind: "project";
1902
+ kind: 'project';
1861
1903
  name: string;
1862
- stack: ProjectRecord["stack"];
1904
+ stack: ProjectRecord['stack'];
1863
1905
  stacks: string[];
1864
1906
  platforms: string[];
1865
1907
  licenses: string[];
1866
- projectType: ProjectRecord["projectType"];
1867
- repoUrl: ProjectRecord["repoUrl"];
1868
- logoUrl: ProjectRecord["logoUrl"];
1869
- screenshots: ProjectRecord["screenshots"];
1870
- difficulty: ProjectRecord["difficulty"];
1871
- codebaseSize: ProjectRecord["codebaseSize"];
1908
+ projectType: ProjectRecord['projectType'];
1909
+ repoUrl: ProjectRecord['repoUrl'];
1910
+ logoUrl: ProjectRecord['logoUrl'];
1911
+ screenshots: ProjectRecord['screenshots'];
1912
+ difficulty: ProjectRecord['difficulty'];
1913
+ codebaseSize: ProjectRecord['codebaseSize'];
1872
1914
  bestFor: string[];
1873
1915
  whyListed: string[];
1874
1916
  caveats: string[];
1875
- health: ProjectRecord["health"];
1917
+ health: ProjectRecord['health'];
1876
1918
  /** Effective visibility — decisions.yml overrides win over health. */
1877
1919
  visibility: DecisionVisibility;
1878
1920
  github: IndexGithubSummary | undefined;
1879
1921
  }
1880
1922
  export interface IndexResourceRecord extends IndexBase {
1881
- kind: "resource";
1923
+ kind: 'resource';
1882
1924
  title: string;
1883
- type: ResourceRecord["type"];
1925
+ type: ResourceRecord['type'];
1884
1926
  topic: string;
1885
1927
  related: string[];
1886
- publishedAt: ResourceRecord["publishedAt"];
1887
- author: ResourceRecord["author"];
1928
+ publishedAt: ResourceRecord['publishedAt'];
1929
+ author: ResourceRecord['author'];
1888
1930
  /** Effective visibility — decisions.yml overrides win over the record default. */
1889
1931
  visibility: DecisionVisibility;
1890
1932
  }
1891
1933
  export interface IndexEntityRecord extends IndexBase {
1892
- kind: "entity";
1934
+ kind: 'entity';
1893
1935
  name: string;
1894
- type: EntityRecord["type"];
1895
- founded: EntityRecord["founded"];
1896
- location: EntityRecord["location"];
1897
- members: EntityRecord["members"];
1898
- parent: EntityRecord["parent"];
1936
+ type: EntityRecord['type'];
1937
+ founded: EntityRecord['founded'];
1938
+ location: EntityRecord['location'];
1939
+ members: EntityRecord['members'];
1940
+ parent: EntityRecord['parent'];
1899
1941
  /** Effective visibility — decisions.yml overrides win over the record default. */
1900
1942
  visibility: DecisionVisibility;
1901
1943
  }
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"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"}