agentready 2.46.0__tar.gz → 2.46.2__tar.gz

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 (122) hide show
  1. {agentready-2.46.0/src/agentready.egg-info → agentready-2.46.2}/PKG-INFO +1 -1
  2. {agentready-2.46.0 → agentready-2.46.2}/pyproject.toml +1 -1
  3. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/assessors/code_quality.py +94 -32
  4. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/assessors/testing.py +5 -0
  5. {agentready-2.46.0 → agentready-2.46.2/src/agentready.egg-info}/PKG-INFO +1 -1
  6. {agentready-2.46.0 → agentready-2.46.2}/LICENSE +0 -0
  7. {agentready-2.46.0 → agentready-2.46.2}/README.md +0 -0
  8. {agentready-2.46.0 → agentready-2.46.2}/setup.cfg +0 -0
  9. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/__init__.py +0 -0
  10. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/__main__.py +0 -0
  11. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/assessors/__init__.py +0 -0
  12. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/assessors/base.py +0 -0
  13. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/assessors/containers.py +0 -0
  14. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/assessors/dbt.py +0 -0
  15. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/assessors/documentation.py +0 -0
  16. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/assessors/patterns.py +0 -0
  17. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/assessors/security.py +0 -0
  18. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/assessors/structure.py +0 -0
  19. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/assessors/stub_assessors.py +0 -0
  20. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/assessors/verification.py +0 -0
  21. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/cli/__init__.py +0 -0
  22. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/cli/align.py +0 -0
  23. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/cli/assess_batch.py +0 -0
  24. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/cli/bootstrap.py +0 -0
  25. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/cli/demo.py +0 -0
  26. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/cli/experiment.py +0 -0
  27. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/cli/main.py +0 -0
  28. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/cli/main_simplified.py +0 -0
  29. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/cli/repomix.py +0 -0
  30. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/cli/research.py +0 -0
  31. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/cli/schema.py +0 -0
  32. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/cli/submit.py +0 -0
  33. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/data/.agentready-config.example.yaml +0 -0
  34. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/data/Python.arsrc +0 -0
  35. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/data/RESEARCH_REPORT.md +0 -0
  36. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/data/default-weights.yaml +0 -0
  37. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/fixers/__init__.py +0 -0
  38. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/fixers/base.py +0 -0
  39. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/fixers/documentation.py +0 -0
  40. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/fixers/testing.py +0 -0
  41. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/github/__init__.py +0 -0
  42. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/github/review_formatter.py +0 -0
  43. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/models/__init__.py +0 -0
  44. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/models/assessment.py +0 -0
  45. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/models/attribute.py +0 -0
  46. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/models/batch_assessment.py +0 -0
  47. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/models/citation.py +0 -0
  48. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/models/config.py +0 -0
  49. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/models/discovered_skill.py +0 -0
  50. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/models/eval_harness.py +0 -0
  51. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/models/finding.py +0 -0
  52. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/models/fix.py +0 -0
  53. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/models/metadata.py +0 -0
  54. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/models/repository.py +0 -0
  55. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/models/theme.py +0 -0
  56. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/prompts/__init__.py +0 -0
  57. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/prompts/claude_md_generator.md +0 -0
  58. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/prompts/loader.py +0 -0
  59. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/reporters/__init__.py +0 -0
  60. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/reporters/aggregated_json.py +0 -0
  61. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/reporters/base.py +0 -0
  62. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/reporters/csv_reporter.py +0 -0
  63. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/reporters/html.py +0 -0
  64. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/reporters/json_reporter.py +0 -0
  65. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/reporters/markdown.py +0 -0
  66. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/reporters/multi_html.py +0 -0
  67. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/services/__init__.py +0 -0
  68. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/services/assessment_cache.py +0 -0
  69. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/services/attribute_analyzer.py +0 -0
  70. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/services/batch_scanner.py +0 -0
  71. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/services/bootstrap.py +0 -0
  72. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/services/claudecode_runner.py +0 -0
  73. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/services/experiment_comparer.py +0 -0
  74. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/services/fixer_service.py +0 -0
  75. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/services/github_scanner.py +0 -0
  76. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/services/language_detector.py +0 -0
  77. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/services/llm_cache.py +0 -0
  78. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/services/repomix.py +0 -0
  79. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/services/repository_manager.py +0 -0
  80. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/services/research_formatter.py +0 -0
  81. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/services/research_loader.py +0 -0
  82. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/services/scanner.py +0 -0
  83. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/services/schema_migrator.py +0 -0
  84. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/services/schema_validator.py +0 -0
  85. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/services/scorer.py +0 -0
  86. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/services/sweagent_runner.py +0 -0
  87. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/services/swebench_evaluator.py +0 -0
  88. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/templates/align/CLAUDE.md.j2 +0 -0
  89. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/templates/bootstrap/CODEOWNERS.j2 +0 -0
  90. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/templates/bootstrap/CODE_OF_CONDUCT.md.j2 +0 -0
  91. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/templates/bootstrap/CONTRIBUTING.md.j2 +0 -0
  92. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/templates/bootstrap/PULL_REQUEST_TEMPLATE.md.j2 +0 -0
  93. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/templates/bootstrap/_base/precommit.yaml.j2 +0 -0
  94. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/templates/bootstrap/_base/workflows/security.yml.j2 +0 -0
  95. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/templates/bootstrap/_base/workflows/tests.yml.j2 +0 -0
  96. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/templates/bootstrap/dependabot.yml.j2 +0 -0
  97. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/templates/bootstrap/go/precommit.yaml.j2 +0 -0
  98. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/templates/bootstrap/go/workflows/security.yml.j2 +0 -0
  99. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/templates/bootstrap/go/workflows/tests.yml.j2 +0 -0
  100. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/templates/bootstrap/issue_templates/bug_report.md.j2 +0 -0
  101. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/templates/bootstrap/issue_templates/feature_request.md.j2 +0 -0
  102. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/templates/bootstrap/javascript/precommit.yaml.j2 +0 -0
  103. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/templates/bootstrap/javascript/workflows/security.yml.j2 +0 -0
  104. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/templates/bootstrap/javascript/workflows/tests.yml.j2 +0 -0
  105. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/templates/bootstrap/python/precommit.yaml.j2 +0 -0
  106. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/templates/bootstrap/python/workflows/security.yml.j2 +0 -0
  107. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/templates/bootstrap/python/workflows/tests.yml.j2 +0 -0
  108. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/templates/bootstrap/workflows/agentready-assessment.yml.j2 +0 -0
  109. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/templates/bootstrap/workflows/repomix-update.yml.j2 +0 -0
  110. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/templates/multi_report.html.j2 +0 -0
  111. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/templates/report.html.j2 +0 -0
  112. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/templates/slides.html.j2 +0 -0
  113. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/utils/__init__.py +0 -0
  114. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/utils/privacy.py +0 -0
  115. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/utils/security.py +0 -0
  116. {agentready-2.46.0 → agentready-2.46.2}/src/agentready/utils/subprocess_utils.py +0 -0
  117. {agentready-2.46.0 → agentready-2.46.2}/src/agentready.egg-info/SOURCES.txt +0 -0
  118. {agentready-2.46.0 → agentready-2.46.2}/src/agentready.egg-info/dependency_links.txt +0 -0
  119. {agentready-2.46.0 → agentready-2.46.2}/src/agentready.egg-info/entry_points.txt +0 -0
  120. {agentready-2.46.0 → agentready-2.46.2}/src/agentready.egg-info/requires.txt +0 -0
  121. {agentready-2.46.0 → agentready-2.46.2}/src/agentready.egg-info/top_level.txt +0 -0
  122. {agentready-2.46.0 → agentready-2.46.2}/tests/test_demo_generation.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agentready
3
- Version: 2.46.0
3
+ Version: 2.46.2
4
4
  Summary: Assess and bootstrap git repositories for AI-assisted development with automated remediation
5
5
  Author-email: Jeremy Eder <jeder@redhat.com>
6
6
  License: MIT
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "agentready"
3
- version = "2.46.0"
3
+ version = "2.46.2"
4
4
  description = "Assess and bootstrap git repositories for AI-assisted development with automated remediation"
5
5
  authors = [{name = "Jeremy Eder", email = "jeder@redhat.com"}]
6
6
  readme = "README.md"
@@ -153,10 +153,15 @@ class TypeAnnotationsAssessor(BaseAssessor):
153
153
  )
154
154
 
155
155
  def _assess_typescript_types(self, repository: Repository) -> Finding:
156
- """Assess TypeScript type configuration."""
157
- tsconfig_path = repository.path / "tsconfig.json"
156
+ """Assess TypeScript type configuration across all tsconfig.json files.
158
157
 
159
- if not tsconfig_path.exists():
158
+ Supports monorepos with per-package tsconfig.json and JSONC comments.
159
+ """
160
+ import json
161
+
162
+ tsconfig_files = self._find_tsconfig_files(repository)
163
+
164
+ if not tsconfig_files:
160
165
  return Finding(
161
166
  attribute=self.attribute,
162
167
  status="fail",
@@ -168,41 +173,45 @@ class TypeAnnotationsAssessor(BaseAssessor):
168
173
  error_message=None,
169
174
  )
170
175
 
171
- try:
172
- import json
176
+ strict_count = 0
177
+ total_count = 0
178
+ evidence: list[str] = []
173
179
 
174
- with open(tsconfig_path, "r") as f:
175
- tsconfig = json.load(f)
180
+ for tsconfig_path in tsconfig_files:
181
+ rel_path = str(tsconfig_path.relative_to(repository.path))
182
+ total_count += 1
183
+ try:
184
+ raw = tsconfig_path.read_text(encoding="utf-8")
185
+ cleaned = self._strip_json_comments(raw)
186
+ tsconfig = json.loads(cleaned)
187
+ except (OSError, json.JSONDecodeError) as e:
188
+ evidence.append(f"{rel_path}: parse error ({e})")
189
+ continue
176
190
 
177
191
  strict = tsconfig.get("compilerOptions", {}).get("strict", False)
178
-
179
192
  if strict:
180
- return Finding(
181
- attribute=self.attribute,
182
- status="pass",
183
- score=100.0,
184
- measured_value="strict mode enabled",
185
- threshold="strict mode enabled",
186
- evidence=["tsconfig.json has strict: true"],
187
- remediation=None,
188
- error_message=None,
189
- )
193
+ strict_count += 1
194
+ evidence.append(f"{rel_path}: strict: true")
190
195
  else:
191
- return Finding(
192
- attribute=self.attribute,
193
- status="fail",
194
- score=50.0,
195
- measured_value="strict mode disabled",
196
- threshold="strict mode enabled",
197
- evidence=["tsconfig.json missing strict: true"],
198
- remediation=self._create_remediation(),
199
- error_message=None,
200
- )
196
+ evidence.append(f"{rel_path}: strict mode disabled")
201
197
 
202
- except (OSError, json.JSONDecodeError) as e:
203
- return Finding.error(
204
- self.attribute, reason=f"Could not parse tsconfig.json: {str(e)}"
205
- )
198
+ score = self.calculate_proportional_score(
199
+ measured_value=(strict_count / total_count) * 100,
200
+ threshold=100.0,
201
+ higher_is_better=True,
202
+ )
203
+ status = "pass" if strict_count == total_count else "fail"
204
+
205
+ return Finding(
206
+ attribute=self.attribute,
207
+ status=status,
208
+ score=score,
209
+ measured_value=f"{strict_count}/{total_count} strict",
210
+ threshold="all tsconfig.json files strict",
211
+ evidence=evidence,
212
+ remediation=self._create_remediation() if status == "fail" else None,
213
+ error_message=None,
214
+ )
206
215
 
207
216
  @staticmethod
208
217
  def _strip_go_non_code(content: str) -> str:
@@ -270,6 +279,59 @@ class TypeAnnotationsAssessor(BaseAssessor):
270
279
 
271
280
  return "".join(out)
272
281
 
282
+ @staticmethod
283
+ def _strip_json_comments(text: str) -> str:
284
+ """Strip // and /* */ comments from JSONC, preserving string contents."""
285
+ out: list[str] = []
286
+ i = 0
287
+ n = len(text)
288
+ while i < n:
289
+ c = text[i]
290
+
291
+ if c == '"':
292
+ out.append(c)
293
+ i += 1
294
+ while i < n and text[i] != '"':
295
+ if text[i] == "\\" and i + 1 < n:
296
+ out.append(text[i])
297
+ out.append(text[i + 1])
298
+ i += 2
299
+ else:
300
+ out.append(text[i])
301
+ i += 1
302
+ if i < n:
303
+ out.append(text[i])
304
+ i += 1
305
+ continue
306
+
307
+ if c == "/" and i + 1 < n and text[i + 1] == "/":
308
+ i += 2
309
+ while i < n and text[i] != "\n":
310
+ i += 1
311
+ continue
312
+
313
+ if c == "/" and i + 1 < n and text[i + 1] == "*":
314
+ i += 2
315
+ while i + 1 < n and not (text[i] == "*" and text[i + 1] == "/"):
316
+ i += 1
317
+ i += 2
318
+ continue
319
+
320
+ out.append(c)
321
+ i += 1
322
+
323
+ return "".join(out)
324
+
325
+ def _find_tsconfig_files(self, repository: Repository) -> list:
326
+ """Find all tsconfig.json files, excluding node_modules/vendor/testdata."""
327
+ found = []
328
+ for tsconfig in repository.path.rglob("tsconfig.json"):
329
+ parts = tsconfig.parts
330
+ if "node_modules" in parts or "vendor" in parts or "testdata" in parts:
331
+ continue
332
+ found.append(tsconfig)
333
+ return sorted(found)
334
+
273
335
  def _assess_go_types(self, repository: Repository) -> Finding:
274
336
  """Assess Go type safety.
275
337
 
@@ -1127,6 +1127,7 @@ class CIQualityGatesAssessor(BaseAssessor):
1127
1127
  r"(?:eslint|ruff|pylint|flake8|rubocop|golangci-lint|black|isort|prettier|stylelint)\b",
1128
1128
  r"\blint\b",
1129
1129
  r"\bformatting?\b",
1130
+ r"\bcargo\s+clippy\b",
1130
1131
  ]
1131
1132
  test_patterns = [
1132
1133
  r"\bpytest\b",
@@ -1146,6 +1147,10 @@ class CIQualityGatesAssessor(BaseAssessor):
1146
1147
  r"\btsc\b",
1147
1148
  r"\btype[_-]?check\b",
1148
1149
  r"\bgo\s+vet\b",
1150
+ r"(?:\bgo|\$\(GO\))\s+build\b",
1151
+ r"\bmake\s+build\b",
1152
+ r"\bgolangci-lint\b",
1153
+ r"\bcargo\s+build\b",
1149
1154
  ]
1150
1155
 
1151
1156
  found_lint = False
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agentready
3
- Version: 2.46.0
3
+ Version: 2.46.2
4
4
  Summary: Assess and bootstrap git repositories for AI-assisted development with automated remediation
5
5
  Author-email: Jeremy Eder <jeder@redhat.com>
6
6
  License: MIT
File without changes
File without changes
File without changes