icdev 1.0.0__py3-none-any.whl

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 (1105) hide show
  1. icdev/__init__.py +18 -0
  2. icdev/_paths.py +85 -0
  3. icdev/_version.py +3 -0
  4. icdev/data/__init__.py +1 -0
  5. icdev/data/args/__init__.py +1 -0
  6. icdev/data/args/agent_authority.yaml +61 -0
  7. icdev/data/args/agent_config.yaml +355 -0
  8. icdev/data/args/agentic_fitness.yaml +31 -0
  9. icdev/data/args/ai_governance_config.yaml +137 -0
  10. icdev/data/args/atlas_critique_config.yaml +66 -0
  11. icdev/data/args/bedrock_models.yaml +63 -0
  12. icdev/data/args/cicd_config.yaml +82 -0
  13. icdev/data/args/classification_config.yaml +232 -0
  14. icdev/data/args/cli_config.yaml +154 -0
  15. icdev/data/args/cloud_config.yaml +63 -0
  16. icdev/data/args/code_pattern_config.yaml +151 -0
  17. icdev/data/args/code_quality_config.yaml +47 -0
  18. icdev/data/args/companion_registry.yaml +202 -0
  19. icdev/data/args/context_config.yaml +82 -0
  20. icdev/data/args/csp_monitor_config.yaml +268 -0
  21. icdev/data/args/cui_markings.yaml +35 -0
  22. icdev/data/args/db_config.yaml +40 -0
  23. icdev/data/args/deployment_profiles.yaml +248 -0
  24. icdev/data/args/dev_profile_config.yaml +144 -0
  25. icdev/data/args/devsecops_config.yaml +286 -0
  26. icdev/data/args/endpoint_security_config.yaml +137 -0
  27. icdev/data/args/extension_config.yaml +79 -0
  28. icdev/data/args/file_access_tiers.yaml +88 -0
  29. icdev/data/args/framework_registry.yaml +415 -0
  30. icdev/data/args/innovation_config.yaml +431 -0
  31. icdev/data/args/installation_manifest.yaml +1087 -0
  32. icdev/data/args/llm_config.yaml +495 -0
  33. icdev/data/args/maintenance_config.yaml +55 -0
  34. icdev/data/args/memory_config.yaml +83 -0
  35. icdev/data/args/monitoring_config.yaml +127 -0
  36. icdev/data/args/mosa_config.yaml +190 -0
  37. icdev/data/args/nlq_config.yaml +35 -0
  38. icdev/data/args/observability_config.yaml +39 -0
  39. icdev/data/args/observability_tracing_config.yaml +170 -0
  40. icdev/data/args/oscal_tools_config.yaml +43 -0
  41. icdev/data/args/owasp_agentic_config.yaml +171 -0
  42. icdev/data/args/phase_registry.yaml +618 -0
  43. icdev/data/args/project_defaults.yaml +235 -0
  44. icdev/data/args/prompt_chains.yaml +163 -0
  45. icdev/data/args/resilience_config.yaml +50 -0
  46. icdev/data/args/ricoas_config.yaml +191 -0
  47. icdev/data/args/role_personas.yaml +362 -0
  48. icdev/data/args/scaling_config.yaml +176 -0
  49. icdev/data/args/security_gates.yaml +685 -0
  50. icdev/data/args/skill_injection_config.yaml +322 -0
  51. icdev/data/args/spec_config.yaml +53 -0
  52. icdev/data/args/supply_chain_config.yaml +76 -0
  53. icdev/data/args/translation_config.yaml +228 -0
  54. icdev/data/args/workflow_templates/ato_acceleration.yaml +54 -0
  55. icdev/data/args/workflow_templates/build_deploy.yaml +63 -0
  56. icdev/data/args/workflow_templates/full_compliance.yaml +43 -0
  57. icdev/data/args/workflow_templates/security_hardening.yaml +55 -0
  58. icdev/data/args/worktree_config.yaml +34 -0
  59. icdev/data/args/zta_config.yaml +247 -0
  60. icdev/data/context/__init__.py +1 -0
  61. icdev/data/context/agent/__init__.py +1 -0
  62. icdev/data/context/agent/response_schemas/__init__.py +1 -0
  63. icdev/data/context/agent/response_schemas/debate_position.json +46 -0
  64. icdev/data/context/agent/response_schemas/fitness_scorecard.json +74 -0
  65. icdev/data/context/agent/response_schemas/review_decision.json +39 -0
  66. icdev/data/context/agent/response_schemas/task_decomposition.json +82 -0
  67. icdev/data/context/agent/response_schemas/veto_decision.json +40 -0
  68. icdev/data/context/agentic/__init__.py +1 -0
  69. icdev/data/context/agentic/architecture_patterns.md +269 -0
  70. icdev/data/context/agentic/capability_registry.yaml +202 -0
  71. icdev/data/context/agentic/csp_mcp_registry.yaml +280 -0
  72. icdev/data/context/agentic/fitness_rubric.md +56 -0
  73. icdev/data/context/agentic/governance_baseline.md +205 -0
  74. icdev/data/context/ci/__init__.py +1 -0
  75. icdev/data/context/ci/worktree_templates.json +44 -0
  76. icdev/data/context/cloud/__init__.py +1 -0
  77. icdev/data/context/cloud/csp_service_registry.json +739 -0
  78. icdev/data/context/compliance/__init__.py +1 -0
  79. icdev/data/context/compliance/atlas_mitigations.json +293 -0
  80. icdev/data/context/compliance/atlas_techniques.json +833 -0
  81. icdev/data/context/compliance/cisa_sbd_requirements.json +432 -0
  82. icdev/data/context/compliance/cjis_security_policy.json +522 -0
  83. icdev/data/context/compliance/cmmc_practices.json +2494 -0
  84. icdev/data/context/compliance/cmmc_report_template.md +142 -0
  85. icdev/data/context/compliance/cnssi_1253_overlay.json +109 -0
  86. icdev/data/context/compliance/control_crosswalk.json +1914 -0
  87. icdev/data/context/compliance/control_families/__init__.py +1 -0
  88. icdev/data/context/compliance/csp_certifications.json +251 -0
  89. icdev/data/context/compliance/cssp_report_template.md +193 -0
  90. icdev/data/context/compliance/cui_templates/__init__.py +1 -0
  91. icdev/data/context/compliance/cui_templates/banner_block.txt +4 -0
  92. icdev/data/context/compliance/cui_templates/code_header.txt +8 -0
  93. icdev/data/context/compliance/cui_templates/document_template.md +35 -0
  94. icdev/data/context/compliance/data_type_framework_map.json +321 -0
  95. icdev/data/context/compliance/data_type_registry.json +147 -0
  96. icdev/data/context/compliance/dod_cssp_8530.json +463 -0
  97. icdev/data/context/compliance/eu_ai_act_annex_iii.json +108 -0
  98. icdev/data/context/compliance/export_templates/__init__.py +1 -0
  99. icdev/data/context/compliance/export_templates/emass_controls.csv.j2 +4 -0
  100. icdev/data/context/compliance/export_templates/evidence_package.md.j2 +39 -0
  101. icdev/data/context/compliance/export_templates/executive_summary.md.j2 +55 -0
  102. icdev/data/context/compliance/export_templates/poam_tracking.csv.j2 +4 -0
  103. icdev/data/context/compliance/fedramp_20x_ksi_schemas.json +133 -0
  104. icdev/data/context/compliance/fedramp_high_baseline.json +4370 -0
  105. icdev/data/context/compliance/fedramp_moderate_baseline.json +2183 -0
  106. icdev/data/context/compliance/fedramp_report_template.md +181 -0
  107. icdev/data/context/compliance/fips_200_areas.json +362 -0
  108. icdev/data/context/compliance/gao_ai_accountability.json +262 -0
  109. icdev/data/context/compliance/hipaa_security_rule.json +720 -0
  110. icdev/data/context/compliance/hitrust_csf_v11.json +930 -0
  111. icdev/data/context/compliance/impact_level_profiles.json +251 -0
  112. icdev/data/context/compliance/incident_response_template.md +1110 -0
  113. icdev/data/context/compliance/iso27001_2022_controls.json +750 -0
  114. icdev/data/context/compliance/iso27001_nist_bridge.json +382 -0
  115. icdev/data/context/compliance/iso42001_controls.json +254 -0
  116. icdev/data/context/compliance/ivv_checklist_template.md +80 -0
  117. icdev/data/context/compliance/ivv_report_template.md +116 -0
  118. icdev/data/context/compliance/ivv_requirements.json +372 -0
  119. icdev/data/context/compliance/mosa_crosswalk.json +327 -0
  120. icdev/data/context/compliance/mosa_framework.json +250 -0
  121. icdev/data/context/compliance/narrative_templates/AC.md.j2 +101 -0
  122. icdev/data/context/compliance/narrative_templates/AU.md.j2 +106 -0
  123. icdev/data/context/compliance/narrative_templates/IA.md.j2 +104 -0
  124. icdev/data/context/compliance/narrative_templates/SC.md.j2 +102 -0
  125. icdev/data/context/compliance/narrative_templates/SI.md.j2 +111 -0
  126. icdev/data/context/compliance/narrative_templates/__init__.py +1 -0
  127. icdev/data/context/compliance/narrative_templates/default.md.j2 +50 -0
  128. icdev/data/context/compliance/narrative_templates/executive_summary.j2 +27 -0
  129. icdev/data/context/compliance/narrative_templates/poam_milestone.j2 +19 -0
  130. icdev/data/context/compliance/narrative_templates/ssp_section.j2 +11 -0
  131. icdev/data/context/compliance/nist_800_171_controls.json +1552 -0
  132. icdev/data/context/compliance/nist_800_207_crosswalk.json +399 -0
  133. icdev/data/context/compliance/nist_800_207_zta.json +258 -0
  134. icdev/data/context/compliance/nist_800_53.json +324 -0
  135. icdev/data/context/compliance/nist_ai_600_1_genai.json +326 -0
  136. icdev/data/context/compliance/nist_ai_rmf.json +206 -0
  137. icdev/data/context/compliance/nist_sp_800_60_types.json +1667 -0
  138. icdev/data/context/compliance/omb_m25_21_high_impact_ai.json +248 -0
  139. icdev/data/context/compliance/omb_m26_04_unbiased_ai.json +262 -0
  140. icdev/data/context/compliance/owasp_agentic_asi.json +133 -0
  141. icdev/data/context/compliance/owasp_agentic_threats.json +285 -0
  142. icdev/data/context/compliance/owasp_llm_top10.json +274 -0
  143. icdev/data/context/compliance/pci_dss_v4.json +510 -0
  144. icdev/data/context/compliance/poam_template.md +117 -0
  145. icdev/data/context/compliance/safeai_controls.json +512 -0
  146. icdev/data/context/compliance/sbd_report_template.md +77 -0
  147. icdev/data/context/compliance/siem_config_templates/__init__.py +1 -0
  148. icdev/data/context/compliance/siem_config_templates/filebeat.yml +213 -0
  149. icdev/data/context/compliance/siem_config_templates/log_sources.json +208 -0
  150. icdev/data/context/compliance/soc2_trust_criteria.json +661 -0
  151. icdev/data/context/compliance/ssp_template.md +432 -0
  152. icdev/data/context/compliance/stig_templates/__init__.py +1 -0
  153. icdev/data/context/compliance/stig_templates/webapp_stig.json +139 -0
  154. icdev/data/context/compliance/xai_requirements.json +108 -0
  155. icdev/data/context/dashboard/__init__.py +1 -0
  156. icdev/data/context/dashboard/nlq_examples.json +50 -0
  157. icdev/data/context/dashboard/schema_descriptions.json +23 -0
  158. icdev/data/context/integration/__init__.py +1 -0
  159. icdev/data/context/integration/approval_workflows.json +32 -0
  160. icdev/data/context/integration/gitlab_field_mappings.json +33 -0
  161. icdev/data/context/integration/jira_field_mappings.json +32 -0
  162. icdev/data/context/integration/reqif_export_schema.json +23 -0
  163. icdev/data/context/integration/servicenow_field_mappings.json +22 -0
  164. icdev/data/context/languages/__init__.py +1 -0
  165. icdev/data/context/languages/framework_patterns.json +205 -0
  166. icdev/data/context/languages/language_registry.json +279 -0
  167. icdev/data/context/llm/__init__.py +1 -0
  168. icdev/data/context/llm/example_provider.py +86 -0
  169. icdev/data/context/mbse/__init__.py +1 -0
  170. icdev/data/context/mbse/des_report_template.md +162 -0
  171. icdev/data/context/mbse/des_requirements.json +411 -0
  172. icdev/data/context/mbse/digital_thread_patterns.json +403 -0
  173. icdev/data/context/mbse/reqif_schema.json +280 -0
  174. icdev/data/context/mbse/sysml_element_types.json +432 -0
  175. icdev/data/context/modernization/__init__.py +1 -0
  176. icdev/data/context/modernization/db_type_mappings.json +148 -0
  177. icdev/data/context/modernization/decomposition_patterns.json +284 -0
  178. icdev/data/context/modernization/framework_migration_patterns.json +359 -0
  179. icdev/data/context/modernization/migration_report_template.md +168 -0
  180. icdev/data/context/modernization/seven_rs_catalog.json +369 -0
  181. icdev/data/context/modernization/version_upgrade_rules.json +279 -0
  182. icdev/data/context/oscal/NIST_SP-800-53_rev5_catalog.json +254987 -0
  183. icdev/data/context/oscal/README.md +43 -0
  184. icdev/data/context/patterns/__init__.py +1 -0
  185. icdev/data/context/profiles/__init__.py +1 -0
  186. icdev/data/context/profiles/dod_baseline_v1.yaml +145 -0
  187. icdev/data/context/profiles/fedramp_baseline_v1.yaml +143 -0
  188. icdev/data/context/profiles/financial_baseline_v1.yaml +142 -0
  189. icdev/data/context/profiles/healthcare_baseline_v1.yaml +135 -0
  190. icdev/data/context/profiles/law_enforcement_v1.yaml +129 -0
  191. icdev/data/context/profiles/startup_v1.yaml +134 -0
  192. icdev/data/context/requirements/__init__.py +1 -0
  193. icdev/data/context/requirements/ambiguity_patterns.json +97 -0
  194. icdev/data/context/requirements/boundary_impact_rules.json +123 -0
  195. icdev/data/context/requirements/default_constitutions.json +67 -0
  196. icdev/data/context/requirements/document_extraction_rules.json +58 -0
  197. icdev/data/context/requirements/gap_patterns.json +108 -0
  198. icdev/data/context/requirements/readiness_rubric.json +78 -0
  199. icdev/data/context/requirements/red_alternative_patterns.json +210 -0
  200. icdev/data/context/requirements/safe_templates.json +72 -0
  201. icdev/data/context/requirements/spec_quality_checklist.json +122 -0
  202. icdev/data/context/simulation/__init__.py +1 -0
  203. icdev/data/context/simulation/architecture_patterns.json +36 -0
  204. icdev/data/context/simulation/coa_templates.json +38 -0
  205. icdev/data/context/simulation/cost_models.json +23 -0
  206. icdev/data/context/simulation/risk_categories.json +46 -0
  207. icdev/data/context/supply_chain/__init__.py +1 -0
  208. icdev/data/context/supply_chain/isa_templates.json +129 -0
  209. icdev/data/context/supply_chain/nist_800_161_controls.json +247 -0
  210. icdev/data/context/supply_chain/scrm_risk_matrix.json +147 -0
  211. icdev/data/context/templates/__init__.py +1 -0
  212. icdev/data/context/templates/ansible/__init__.py +1 -0
  213. icdev/data/context/templates/ansible/playbooks/__init__.py +1 -0
  214. icdev/data/context/templates/ansible/roles/__init__.py +1 -0
  215. icdev/data/context/templates/gitlab_ci/__init__.py +1 -0
  216. icdev/data/context/templates/grafana/__init__.py +1 -0
  217. icdev/data/context/templates/kubernetes/__init__.py +1 -0
  218. icdev/data/context/templates/project/__init__.py +1 -0
  219. icdev/data/context/templates/project/api/__init__.py +1 -0
  220. icdev/data/context/templates/project/cli/__init__.py +1 -0
  221. icdev/data/context/templates/project/data_pipeline/__init__.py +1 -0
  222. icdev/data/context/templates/project/iac/__init__.py +1 -0
  223. icdev/data/context/templates/project/javascript_frontend/__init__.py +1 -0
  224. icdev/data/context/templates/project/javascript_frontend/src/__init__.py +1 -0
  225. icdev/data/context/templates/project/javascript_frontend/tests/__init__.py +1 -0
  226. icdev/data/context/templates/project/microservice/__init__.py +1 -0
  227. icdev/data/context/templates/project/python_backend/__init__.py +1 -0
  228. icdev/data/context/templates/project/python_backend/src/__init__.py +1 -0
  229. icdev/data/context/templates/project/python_backend/tests/__init__.py +1 -0
  230. icdev/data/context/templates/project/python_backend/tests/features/__init__.py +1 -0
  231. icdev/data/context/templates/project/python_backend/tests/steps/__init__.py +1 -0
  232. icdev/data/context/templates/terraform/__init__.py +1 -0
  233. icdev/data/context/templates/terraform/govcloud_base/__init__.py +1 -0
  234. icdev/data/context/templates/terraform/modules/__init__.py +1 -0
  235. icdev/data/context/tone/__init__.py +1 -0
  236. icdev/data/context/translation/dependency_mappings.json +186 -0
  237. icdev/data/context/translation/type_mappings.json +149 -0
  238. icdev/data/docs/README.md +187 -0
  239. icdev/data/docs/__init__.py +1 -0
  240. icdev/data/docs/admin/gateway-guide.md +338 -0
  241. icdev/data/docs/admin/marketplace-guide.md +396 -0
  242. icdev/data/docs/admin/monitoring-guide.md +509 -0
  243. icdev/data/docs/architecture/compliance-framework.md +764 -0
  244. icdev/data/docs/architecture/database-schema.md +689 -0
  245. icdev/data/docs/architecture/gotcha-framework.md +518 -0
  246. icdev/data/docs/architecture/multi-agent-system.md +603 -0
  247. icdev/data/docs/dx/README.md +106 -0
  248. icdev/data/docs/dx/__init__.py +1 -0
  249. icdev/data/docs/dx/ci-cd-integration.md +378 -0
  250. icdev/data/docs/dx/claude-code-guide.md +213 -0
  251. icdev/data/docs/dx/companion-guide.md +232 -0
  252. icdev/data/docs/dx/dev-profiles.md +309 -0
  253. icdev/data/docs/dx/icdev-yaml-spec.md +219 -0
  254. icdev/data/docs/dx/integration-tiers.md +279 -0
  255. icdev/data/docs/dx/llm-routing-guide.md +456 -0
  256. icdev/data/docs/dx/quickstart.md +192 -0
  257. icdev/data/docs/dx/sdk-reference.md +356 -0
  258. icdev/data/docs/dx/unified-mcp-setup.md +525 -0
  259. icdev/data/docs/features/__init__.py +1 -0
  260. icdev/data/docs/features/phase-01-gotcha-framework.md +249 -0
  261. icdev/data/docs/features/phase-02-atlas-build-workflow.md +223 -0
  262. icdev/data/docs/features/phase-03-tdd-bdd-testing.md +261 -0
  263. icdev/data/docs/features/phase-04-nist-compliance.md +255 -0
  264. icdev/data/docs/features/phase-05-security-scanning.md +229 -0
  265. icdev/data/docs/features/phase-06-infrastructure-deployment.md +288 -0
  266. icdev/data/docs/features/phase-07-code-review-gates.md +276 -0
  267. icdev/data/docs/features/phase-08-self-healing.md +223 -0
  268. icdev/data/docs/features/phase-09-monitoring-observability.md +230 -0
  269. icdev/data/docs/features/phase-10-dashboard-web-ui.md +218 -0
  270. icdev/data/docs/features/phase-11-multi-agent-architecture.md +272 -0
  271. icdev/data/docs/features/phase-12-integration-testing.md +228 -0
  272. icdev/data/docs/features/phase-13-cicd-integration.md +257 -0
  273. icdev/data/docs/features/phase-14-secure-by-design-ivv.md +240 -0
  274. icdev/data/docs/features/phase-15-maintenance-audit.md +192 -0
  275. icdev/data/docs/features/phase-16-ato-acceleration.md +228 -0
  276. icdev/data/docs/features/phase-17-multi-framework-compliance.md +223 -0
  277. icdev/data/docs/features/phase-18-mbse-integration.md +242 -0
  278. icdev/data/docs/features/phase-19-agentic-generation.md +202 -0
  279. icdev/data/docs/features/phase-20-fips-security-categorization.md +198 -0
  280. icdev/data/docs/features/phase-21-saas-multi-tenancy.md +273 -0
  281. icdev/data/docs/features/phase-22-federated-gotcha-marketplace.md +242 -0
  282. icdev/data/docs/features/phase-23-universal-compliance-platform.md +238 -0
  283. icdev/data/docs/features/phase-24-devsecops-pipeline-security.md +198 -0
  284. icdev/data/docs/features/phase-25-zero-trust-architecture.md +220 -0
  285. icdev/data/docs/features/phase-26-dod-mosa.md +205 -0
  286. icdev/data/docs/features/phase-27-cli-capabilities.md +222 -0
  287. icdev/data/docs/features/phase-28-remote-command-gateway.md +235 -0
  288. icdev/data/docs/features/phase-29-proactive-monitoring.md +212 -0
  289. icdev/data/docs/features/phase-30-dashboard-auth.md +215 -0
  290. icdev/data/docs/features/phase-31-dashboard-ux-low-impact.md +188 -0
  291. icdev/data/docs/features/phase-32-dashboard-ux-medium-impact.md +223 -0
  292. icdev/data/docs/features/phase-33-modular-installation.md +218 -0
  293. icdev/data/docs/features/phase-34-dev-profiles.md +239 -0
  294. icdev/data/docs/features/phase-35-innovation-engine.md +257 -0
  295. icdev/data/docs/features/phase-36-evolutionary-intelligence.md +351 -0
  296. icdev/data/docs/features/phase-37-mitre-atlas-integration.md +485 -0
  297. icdev/data/docs/features/phase-38-cloud-agnostic-architecture.md +1033 -0
  298. icdev/data/docs/features/phase-39-observability-operations.md +178 -0
  299. icdev/data/docs/features/phase-40-nlq-compliance-queries.md +176 -0
  300. icdev/data/docs/features/phase-41-parallel-cicd.md +169 -0
  301. icdev/data/docs/features/phase-42-framework-planning.md +177 -0
  302. icdev/data/docs/features/phase-43-cross-language-translation.md +225 -0
  303. icdev/data/docs/features/phase-44-innovation-adaptation.md +227 -0
  304. icdev/data/docs/features/phase-45-owasp-agentic-security.md +239 -0
  305. icdev/data/docs/features/phase-46-observability-traceability-xai.md +240 -0
  306. icdev/data/docs/features/phase-47-unified-mcp-gateway.md +257 -0
  307. icdev/data/docs/features/phase-48-ai-transparency.md +203 -0
  308. icdev/data/docs/features/phase-49-ai-accountability.md +243 -0
  309. icdev/data/docs/features/phase-50-ai-governance-intake-chat.md +195 -0
  310. icdev/data/docs/features/phase-51-unified-chat-dashboard.md +240 -0
  311. icdev/data/docs/features/phase-52-code-intelligence.md +244 -0
  312. icdev/data/docs/features/phase-53-fedramp-20x-owasp-asi.md +359 -0
  313. icdev/data/docs/features/phase-54-slsa-swft-orchestration.md +379 -0
  314. icdev/data/docs/features/phase-55-a2a-v03-mcp-oauth.md +322 -0
  315. icdev/data/docs/features/phase-56-evidence-lineage.md +352 -0
  316. icdev/data/docs/features/phase-57-eu-ai-act-iron-bank.md +319 -0
  317. icdev/data/docs/features/phase-58-creative-engine.md +370 -0
  318. icdev/data/docs/features/phase-59-govcon-intelligence.md +535 -0
  319. icdev/data/docs/features/phase-60-cpmp.md +528 -0
  320. icdev/data/docs/features/phase-61-orchestration-improvements.md +534 -0
  321. icdev/data/docs/operations/dashboard-guide.md +354 -0
  322. icdev/data/docs/operations/deployment-guide.md +556 -0
  323. icdev/data/docs/operations/saas-admin-guide.md +439 -0
  324. icdev/data/docs/operations/security-operations-guide.md +733 -0
  325. icdev/data/docs/runbooks/backup-restore.md +412 -0
  326. icdev/data/docs/runbooks/troubleshooting.md +499 -0
  327. icdev/data/features/__init__.py +1 -0
  328. icdev/data/features/cicd_integration.feature +41 -0
  329. icdev/data/features/compliance_gates.feature +46 -0
  330. icdev/data/features/dashboard.feature +72 -0
  331. icdev/data/features/environment.py +25 -0
  332. icdev/data/features/project_management.feature +32 -0
  333. icdev/data/features/requirements_intake.feature +42 -0
  334. icdev/data/features/saas_platform.feature +53 -0
  335. icdev/data/features/security_scanning.feature +36 -0
  336. icdev/data/features/steps/__init__.py +1 -0
  337. icdev/data/features/steps/cicd_steps.py +465 -0
  338. icdev/data/features/steps/compliance_steps.py +308 -0
  339. icdev/data/features/steps/dashboard_steps.py +88 -0
  340. icdev/data/features/steps/project_steps.py +126 -0
  341. icdev/data/features/steps/requirements_intake_steps.py +689 -0
  342. icdev/data/features/steps/saas_platform_steps.py +572 -0
  343. icdev/data/features/steps/security_steps.py +236 -0
  344. icdev/data/features/steps/testing_steps.py +226 -0
  345. icdev/data/features/testing_pipeline.feature +42 -0
  346. icdev/data/goals/__init__.py +1 -0
  347. icdev/data/goals/agent_management.md +144 -0
  348. icdev/data/goals/agentic_generation.md +345 -0
  349. icdev/data/goals/agentic_threat_model.md +309 -0
  350. icdev/data/goals/ai_accountability.md +90 -0
  351. icdev/data/goals/ai_governance_intake.md +132 -0
  352. icdev/data/goals/ai_transparency.md +76 -0
  353. icdev/data/goals/atlas_integration.md +405 -0
  354. icdev/data/goals/ato_acceleration.md +139 -0
  355. icdev/data/goals/boundary_supply_chain.md +206 -0
  356. icdev/data/goals/build_app.md +544 -0
  357. icdev/data/goals/cicd_integration.md +86 -0
  358. icdev/data/goals/claude_dir_maintenance.md +77 -0
  359. icdev/data/goals/cli_capabilities.md +340 -0
  360. icdev/data/goals/cloud_agnostic.md +312 -0
  361. icdev/data/goals/code_intelligence.md +197 -0
  362. icdev/data/goals/code_review.md +94 -0
  363. icdev/data/goals/compliance_workflow.md +858 -0
  364. icdev/data/goals/continuous_harmonization.md +140 -0
  365. icdev/data/goals/cross_language_translation.md +171 -0
  366. icdev/data/goals/dashboard.md +142 -0
  367. icdev/data/goals/deploy_workflow.md +390 -0
  368. icdev/data/goals/devsecops_workflow.md +408 -0
  369. icdev/data/goals/evolutionary_intelligence.md +305 -0
  370. icdev/data/goals/external_integration.md +113 -0
  371. icdev/data/goals/framework_planning.md +63 -0
  372. icdev/data/goals/init_project.md +235 -0
  373. icdev/data/goals/innovation_engine.md +199 -0
  374. icdev/data/goals/integration_testing.md +189 -0
  375. icdev/data/goals/maintenance_audit.md +196 -0
  376. icdev/data/goals/manifest.md +56 -0
  377. icdev/data/goals/mbse_integration.md +504 -0
  378. icdev/data/goals/modernization_workflow.md +618 -0
  379. icdev/data/goals/monitoring.md +126 -0
  380. icdev/data/goals/mosa_workflow.md +463 -0
  381. icdev/data/goals/multi_agent_orchestration.md +68 -0
  382. icdev/data/goals/nlq_compliance.md +63 -0
  383. icdev/data/goals/observability.md +64 -0
  384. icdev/data/goals/observability_traceability_xai.md +154 -0
  385. icdev/data/goals/owasp_agentic_security.md +395 -0
  386. icdev/data/goals/parallel_cicd.md +61 -0
  387. icdev/data/goals/requirements_intake.md +213 -0
  388. icdev/data/goals/sbd_ivv_workflow.md +195 -0
  389. icdev/data/goals/security_categorization.md +133 -0
  390. icdev/data/goals/security_scan.md +381 -0
  391. icdev/data/goals/self_healing.md +120 -0
  392. icdev/data/goals/simulation_engine.md +111 -0
  393. icdev/data/goals/tdd_workflow.md +403 -0
  394. icdev/data/goals/zero_trust_architecture.md +403 -0
  395. icdev/data/hardprompts/__init__.py +1 -0
  396. icdev/data/hardprompts/agent/__init__.py +1 -0
  397. icdev/data/hardprompts/agent/agentic_architect.md +100 -0
  398. icdev/data/hardprompts/agent/debate_prompt.md +32 -0
  399. icdev/data/hardprompts/agent/fitness_evaluation.md +48 -0
  400. icdev/data/hardprompts/agent/governance_review.md +214 -0
  401. icdev/data/hardprompts/agent/reviewer_prompt.md +34 -0
  402. icdev/data/hardprompts/agent/skill_design.md +172 -0
  403. icdev/data/hardprompts/agent/task_decomposition.md +275 -0
  404. icdev/data/hardprompts/agent/veto_check_prompt.md +33 -0
  405. icdev/data/hardprompts/architect/__init__.py +1 -0
  406. icdev/data/hardprompts/architect/api_design.md +283 -0
  407. icdev/data/hardprompts/architect/data_model.md +277 -0
  408. icdev/data/hardprompts/architect/system_design.md +180 -0
  409. icdev/data/hardprompts/builder/__init__.py +1 -0
  410. icdev/data/hardprompts/builder/code_generation.md +59 -0
  411. icdev/data/hardprompts/builder/refactor.md +58 -0
  412. icdev/data/hardprompts/builder/scaffold_project.md +69 -0
  413. icdev/data/hardprompts/builder/test_generation.md +87 -0
  414. icdev/data/hardprompts/ci/__init__.py +1 -0
  415. icdev/data/hardprompts/ci/worktree_setup.md +35 -0
  416. icdev/data/hardprompts/compliance/__init__.py +1 -0
  417. icdev/data/hardprompts/compliance/cmmc_assessment.md +63 -0
  418. icdev/data/hardprompts/compliance/cssp_assessment.md +75 -0
  419. icdev/data/hardprompts/compliance/cui_marking.md +86 -0
  420. icdev/data/hardprompts/compliance/fedramp_assessment.md +55 -0
  421. icdev/data/hardprompts/compliance/ivv_assessment.md +96 -0
  422. icdev/data/hardprompts/compliance/poam_generation.md +57 -0
  423. icdev/data/hardprompts/compliance/sbd_assessment.md +101 -0
  424. icdev/data/hardprompts/compliance/security_categorization.md +74 -0
  425. icdev/data/hardprompts/compliance/ssp_generation.md +56 -0
  426. icdev/data/hardprompts/compliance/stig_evaluation.md +63 -0
  427. icdev/data/hardprompts/dashboard/__init__.py +1 -0
  428. icdev/data/hardprompts/dashboard/nlq_system_prompt.md +26 -0
  429. icdev/data/hardprompts/infra/__init__.py +1 -0
  430. icdev/data/hardprompts/infra/k8s_manifests.md +118 -0
  431. icdev/data/hardprompts/infra/pipeline_generation.md +160 -0
  432. icdev/data/hardprompts/infra/terraform_generation.md +92 -0
  433. icdev/data/hardprompts/integration/__init__.py +1 -0
  434. icdev/data/hardprompts/integration/approval_review.md +17 -0
  435. icdev/data/hardprompts/integration/jira_mapping.md +25 -0
  436. icdev/data/hardprompts/integration/servicenow_mapping.md +14 -0
  437. icdev/data/hardprompts/knowledge/__init__.py +1 -0
  438. icdev/data/hardprompts/knowledge/pattern_detection.md +73 -0
  439. icdev/data/hardprompts/knowledge/recommendation_engine.md +90 -0
  440. icdev/data/hardprompts/knowledge/root_cause_analysis.md +91 -0
  441. icdev/data/hardprompts/maintenance/__init__.py +1 -0
  442. icdev/data/hardprompts/maintenance/maintenance_assessment.md +82 -0
  443. icdev/data/hardprompts/mbse/__init__.py +1 -0
  444. icdev/data/hardprompts/mbse/digital_thread.md +67 -0
  445. icdev/data/hardprompts/mbse/model_import.md +62 -0
  446. icdev/data/hardprompts/mbse/model_to_code.md +65 -0
  447. icdev/data/hardprompts/modernization/__init__.py +1 -0
  448. icdev/data/hardprompts/modernization/legacy_analysis.md +93 -0
  449. icdev/data/hardprompts/modernization/migration_planning.md +150 -0
  450. icdev/data/hardprompts/modernization/seven_r_assessment.md +107 -0
  451. icdev/data/hardprompts/requirements/__init__.py +1 -0
  452. icdev/data/hardprompts/requirements/bdd_generation.md +35 -0
  453. icdev/data/hardprompts/requirements/clarification_prioritization.md +29 -0
  454. icdev/data/hardprompts/requirements/decomposition.md +60 -0
  455. icdev/data/hardprompts/requirements/document_extraction.md +45 -0
  456. icdev/data/hardprompts/requirements/gap_detection.md +70 -0
  457. icdev/data/hardprompts/requirements/intake_conversation.md +101 -0
  458. icdev/data/hardprompts/requirements/readiness_assessment.md +39 -0
  459. icdev/data/hardprompts/requirements/spec_quality.md +33 -0
  460. icdev/data/hardprompts/requirements/traceability_analysis.md +23 -0
  461. icdev/data/hardprompts/security/__init__.py +1 -0
  462. icdev/data/hardprompts/security/endpoint_security.md +78 -0
  463. icdev/data/hardprompts/security/threat_model.md +70 -0
  464. icdev/data/hardprompts/security/vulnerability_assessment.md +81 -0
  465. icdev/data/hardprompts/simulation/__init__.py +1 -0
  466. icdev/data/hardprompts/simulation/architecture_impact.md +27 -0
  467. icdev/data/hardprompts/simulation/coa_alternative.md +27 -0
  468. icdev/data/hardprompts/simulation/coa_generation.md +25 -0
  469. icdev/data/hardprompts/simulation/compliance_impact.md +28 -0
  470. icdev/data/hardprompts/simulation/cost_estimation.md +33 -0
  471. icdev/data/hardprompts/simulation/risk_assessment.md +28 -0
  472. icdev/data/hardprompts/translation/code_translation.md +68 -0
  473. icdev/data/hardprompts/translation/dependency_suggestion.md +44 -0
  474. icdev/data/hardprompts/translation/test_translation.md +64 -0
  475. icdev/data/hardprompts/translation/translation_repair.md +59 -0
  476. icdev/py.typed +0 -0
  477. icdev/tools/__init__.py +1 -0
  478. icdev/tools/_gen_formatter.py +12 -0
  479. icdev/tools/a2a/__init__.py +1 -0
  480. icdev/tools/a2a/agent_cards/architect.json +43 -0
  481. icdev/tools/a2a/agent_cards/builder.json +50 -0
  482. icdev/tools/a2a/agent_cards/compliance.json +57 -0
  483. icdev/tools/a2a/agent_cards/devsecops.json +71 -0
  484. icdev/tools/a2a/agent_cards/infra.json +57 -0
  485. icdev/tools/a2a/agent_cards/integration.json +57 -0
  486. icdev/tools/a2a/agent_cards/knowledge.json +43 -0
  487. icdev/tools/a2a/agent_cards/mbse.json +57 -0
  488. icdev/tools/a2a/agent_cards/modernization.json +50 -0
  489. icdev/tools/a2a/agent_cards/monitor.json +43 -0
  490. icdev/tools/a2a/agent_cards/orchestrator.json +36 -0
  491. icdev/tools/a2a/agent_cards/requirements_analyst.json +64 -0
  492. icdev/tools/a2a/agent_cards/security.json +50 -0
  493. icdev/tools/a2a/agent_cards/simulation.json +57 -0
  494. icdev/tools/a2a/agent_cards/supply_chain.json +50 -0
  495. icdev/tools/a2a/agent_client.py +349 -0
  496. icdev/tools/a2a/agent_registry.py +412 -0
  497. icdev/tools/a2a/agent_server.py +579 -0
  498. icdev/tools/a2a/task.py +200 -0
  499. icdev/tools/agent/__init__.py +2 -0
  500. icdev/tools/agent/a2a_agent_card_generator.py +285 -0
  501. icdev/tools/agent/a2a_discovery_server.py +250 -0
  502. icdev/tools/agent/agent_executor.py +529 -0
  503. icdev/tools/agent/agent_memory.py +557 -0
  504. icdev/tools/agent/agent_models.py +51 -0
  505. icdev/tools/agent/atlas_critique.py +908 -0
  506. icdev/tools/agent/authority.py +443 -0
  507. icdev/tools/agent/bedrock_client.py +1075 -0
  508. icdev/tools/agent/collaboration.py +871 -0
  509. icdev/tools/agent/dispatcher_mode.py +665 -0
  510. icdev/tools/agent/mailbox.py +575 -0
  511. icdev/tools/agent/prompt_chain_executor.py +1064 -0
  512. icdev/tools/agent/session_purpose.py +350 -0
  513. icdev/tools/agent/skill_router.py +638 -0
  514. icdev/tools/agent/skill_selector.py +486 -0
  515. icdev/tools/agent/team_orchestrator.py +1108 -0
  516. icdev/tools/agent/token_tracker.py +290 -0
  517. icdev/tools/analysis/__init__.py +1 -0
  518. icdev/tools/analysis/code_analyzer.py +780 -0
  519. icdev/tools/analysis/runtime_feedback.py +389 -0
  520. icdev/tools/audit/__init__.py +1 -0
  521. icdev/tools/audit/audit_logger.py +196 -0
  522. icdev/tools/audit/audit_query.py +157 -0
  523. icdev/tools/audit/decision_recorder.py +72 -0
  524. icdev/tools/builder/__init__.py +1 -0
  525. icdev/tools/builder/agentic_fitness.py +534 -0
  526. icdev/tools/builder/agentic_test_templates/test_a2a_callback.py +117 -0
  527. icdev/tools/builder/agentic_test_templates/test_a2a_lifecycle.feature +52 -0
  528. icdev/tools/builder/agentic_test_templates/test_agent_card.feature +37 -0
  529. icdev/tools/builder/agentic_test_templates/test_agent_health.py +128 -0
  530. icdev/tools/builder/agentic_test_templates/test_memory_system.feature +50 -0
  531. icdev/tools/builder/agentic_test_templates/test_skill_execution.feature +40 -0
  532. icdev/tools/builder/app_blueprint.py +1583 -0
  533. icdev/tools/builder/child_app_generator.py +2852 -0
  534. icdev/tools/builder/claude_md_generator.py +1734 -0
  535. icdev/tools/builder/code_generator.py +3703 -0
  536. icdev/tools/builder/db_init_generator.py +1709 -0
  537. icdev/tools/builder/dev_profile_manager.py +954 -0
  538. icdev/tools/builder/formatter.py +768 -0
  539. icdev/tools/builder/goal_adapter.py +592 -0
  540. icdev/tools/builder/gotcha_validator.py +812 -0
  541. icdev/tools/builder/language_support.py +441 -0
  542. icdev/tools/builder/linter.py +976 -0
  543. icdev/tools/builder/profile_detector.py +657 -0
  544. icdev/tools/builder/profile_md_generator.py +723 -0
  545. icdev/tools/builder/scaffolder.py +1590 -0
  546. icdev/tools/builder/scaffolder_extended.py +1771 -0
  547. icdev/tools/builder/test_writer.py +950 -0
  548. icdev/tools/ci/__init__.py +2 -0
  549. icdev/tools/ci/connectors/__init__.py +2 -0
  550. icdev/tools/ci/connectors/base_connector.py +80 -0
  551. icdev/tools/ci/connectors/connector_registry.py +188 -0
  552. icdev/tools/ci/connectors/mattermost_connector.py +159 -0
  553. icdev/tools/ci/connectors/slack_connector.py +197 -0
  554. icdev/tools/ci/core/__init__.py +2 -0
  555. icdev/tools/ci/core/air_gap_detector.py +115 -0
  556. icdev/tools/ci/core/comment_handler.py +192 -0
  557. icdev/tools/ci/core/conversation_manager.py +479 -0
  558. icdev/tools/ci/core/event_envelope.py +500 -0
  559. icdev/tools/ci/core/event_router.py +443 -0
  560. icdev/tools/ci/core/failure_parser.py +397 -0
  561. icdev/tools/ci/core/recovery_engine.py +527 -0
  562. icdev/tools/ci/modules/__init__.py +2 -0
  563. icdev/tools/ci/modules/agent.py +271 -0
  564. icdev/tools/ci/modules/git_ops.py +175 -0
  565. icdev/tools/ci/modules/state.py +117 -0
  566. icdev/tools/ci/modules/vcs.py +303 -0
  567. icdev/tools/ci/modules/workflow_ops.py +295 -0
  568. icdev/tools/ci/modules/worktree.py +340 -0
  569. icdev/tools/ci/pipeline_config_generator.py +558 -0
  570. icdev/tools/ci/triggers/__init__.py +2 -0
  571. icdev/tools/ci/triggers/gitlab_task_monitor.py +330 -0
  572. icdev/tools/ci/triggers/poll_trigger.py +237 -0
  573. icdev/tools/ci/triggers/webhook_server.py +356 -0
  574. icdev/tools/ci/workflows/__init__.py +2 -0
  575. icdev/tools/ci/workflows/icdev_build.py +140 -0
  576. icdev/tools/ci/workflows/icdev_comply.py +284 -0
  577. icdev/tools/ci/workflows/icdev_document.py +152 -0
  578. icdev/tools/ci/workflows/icdev_e2e.py +188 -0
  579. icdev/tools/ci/workflows/icdev_patch.py +186 -0
  580. icdev/tools/ci/workflows/icdev_plan.py +202 -0
  581. icdev/tools/ci/workflows/icdev_plan_build.py +41 -0
  582. icdev/tools/ci/workflows/icdev_plan_build_test.py +46 -0
  583. icdev/tools/ci/workflows/icdev_plan_build_test_review.py +47 -0
  584. icdev/tools/ci/workflows/icdev_review.py +126 -0
  585. icdev/tools/ci/workflows/icdev_sdlc.py +261 -0
  586. icdev/tools/ci/workflows/icdev_test.py +240 -0
  587. icdev/tools/cli/__init__.py +1 -0
  588. icdev/tools/cli/output_formatter.py +756 -0
  589. icdev/tools/cli_formatter.py +42 -0
  590. icdev/tools/cloud/__init__.py +11 -0
  591. icdev/tools/cloud/cloud_mode_manager.py +364 -0
  592. icdev/tools/cloud/csp_changelog.py +383 -0
  593. icdev/tools/cloud/csp_health_checker.py +268 -0
  594. icdev/tools/cloud/csp_monitor.py +951 -0
  595. icdev/tools/cloud/iam_provider.py +593 -0
  596. icdev/tools/cloud/kms_provider.py +346 -0
  597. icdev/tools/cloud/monitoring_provider.py +628 -0
  598. icdev/tools/cloud/provider_factory.py +376 -0
  599. icdev/tools/cloud/region_validator.py +345 -0
  600. icdev/tools/cloud/registry_provider.py +563 -0
  601. icdev/tools/cloud/secrets_provider.py +486 -0
  602. icdev/tools/cloud/storage_provider.py +446 -0
  603. icdev/tools/compat/__init__.py +21 -0
  604. icdev/tools/compat/cli_harmonizer.py +251 -0
  605. icdev/tools/compat/datetime_utils.py +18 -0
  606. icdev/tools/compat/db_utils.py +160 -0
  607. icdev/tools/compat/platform_utils.py +123 -0
  608. icdev/tools/compliance/__init__.py +1 -0
  609. icdev/tools/compliance/accountability_manager.py +397 -0
  610. icdev/tools/compliance/ai_accountability_audit.py +294 -0
  611. icdev/tools/compliance/ai_impact_assessor.py +273 -0
  612. icdev/tools/compliance/ai_incident_response.py +301 -0
  613. icdev/tools/compliance/ai_inventory_manager.py +239 -0
  614. icdev/tools/compliance/ai_reassessment_scheduler.py +256 -0
  615. icdev/tools/compliance/ai_transparency_audit.py +248 -0
  616. icdev/tools/compliance/atlas_assessor.py +278 -0
  617. icdev/tools/compliance/atlas_report_generator.py +1211 -0
  618. icdev/tools/compliance/base_assessor.py +597 -0
  619. icdev/tools/compliance/cato_monitor.py +1385 -0
  620. icdev/tools/compliance/cato_scheduler.py +699 -0
  621. icdev/tools/compliance/cjis_assessor.py +76 -0
  622. icdev/tools/compliance/classification_manager.py +1353 -0
  623. icdev/tools/compliance/cmmc_assessor.py +1491 -0
  624. icdev/tools/compliance/cmmc_report_generator.py +1100 -0
  625. icdev/tools/compliance/compliance_detector.py +463 -0
  626. icdev/tools/compliance/compliance_exporter.py +427 -0
  627. icdev/tools/compliance/compliance_status.py +825 -0
  628. icdev/tools/compliance/control_mapper.py +505 -0
  629. icdev/tools/compliance/crosswalk_engine.py +1203 -0
  630. icdev/tools/compliance/cssp_assessor.py +1045 -0
  631. icdev/tools/compliance/cssp_evidence_collector.py +729 -0
  632. icdev/tools/compliance/cssp_report_generator.py +1116 -0
  633. icdev/tools/compliance/cui_marker.py +388 -0
  634. icdev/tools/compliance/diagram_validator.py +600 -0
  635. icdev/tools/compliance/emass/__init__.py +2 -0
  636. icdev/tools/compliance/emass/emass_client.py +840 -0
  637. icdev/tools/compliance/emass/emass_export.py +777 -0
  638. icdev/tools/compliance/emass/emass_sync.py +826 -0
  639. icdev/tools/compliance/eu_ai_act_classifier.py +194 -0
  640. icdev/tools/compliance/evidence_collector.py +468 -0
  641. icdev/tools/compliance/fairness_assessor.py +316 -0
  642. icdev/tools/compliance/fedramp_assessor.py +1808 -0
  643. icdev/tools/compliance/fedramp_authorization_packager.py +137 -0
  644. icdev/tools/compliance/fedramp_ksi_generator.py +355 -0
  645. icdev/tools/compliance/fedramp_report_generator.py +1128 -0
  646. icdev/tools/compliance/fips199_categorizer.py +881 -0
  647. icdev/tools/compliance/fips200_validator.py +315 -0
  648. icdev/tools/compliance/gao_ai_assessor.py +231 -0
  649. icdev/tools/compliance/gao_evidence_builder.py +308 -0
  650. icdev/tools/compliance/hipaa_assessor.py +78 -0
  651. icdev/tools/compliance/hitrust_assessor.py +49 -0
  652. icdev/tools/compliance/incident_response_plan.py +718 -0
  653. icdev/tools/compliance/iso27001_assessor.py +92 -0
  654. icdev/tools/compliance/iso42001_assessor.py +114 -0
  655. icdev/tools/compliance/ivv_assessor.py +2327 -0
  656. icdev/tools/compliance/ivv_report_generator.py +1662 -0
  657. icdev/tools/compliance/model_card_generator.py +297 -0
  658. icdev/tools/compliance/mosa_assessor.py +117 -0
  659. icdev/tools/compliance/multi_regime_assessor.py +451 -0
  660. icdev/tools/compliance/narrative_generator.py +1013 -0
  661. icdev/tools/compliance/nist_800_207_assessor.py +191 -0
  662. icdev/tools/compliance/nist_ai_600_1_assessor.py +188 -0
  663. icdev/tools/compliance/nist_ai_rmf_assessor.py +110 -0
  664. icdev/tools/compliance/nist_lookup.py +245 -0
  665. icdev/tools/compliance/omb_m25_21_assessor.py +228 -0
  666. icdev/tools/compliance/omb_m26_04_assessor.py +188 -0
  667. icdev/tools/compliance/oscal_catalog_adapter.py +395 -0
  668. icdev/tools/compliance/oscal_generator.py +2170 -0
  669. icdev/tools/compliance/oscal_tools.py +1182 -0
  670. icdev/tools/compliance/owasp_agentic_assessor.py +226 -0
  671. icdev/tools/compliance/owasp_asi_assessor.py +200 -0
  672. icdev/tools/compliance/owasp_llm_assessor.py +244 -0
  673. icdev/tools/compliance/pci_dss_assessor.py +80 -0
  674. icdev/tools/compliance/pi_compliance_tracker.py +1461 -0
  675. icdev/tools/compliance/poam_generator.py +405 -0
  676. icdev/tools/compliance/resolve_marking.py +283 -0
  677. icdev/tools/compliance/sbd_assessor.py +2068 -0
  678. icdev/tools/compliance/sbd_report_generator.py +1236 -0
  679. icdev/tools/compliance/sbom_generator.py +1008 -0
  680. icdev/tools/compliance/siem_config_generator.py +674 -0
  681. icdev/tools/compliance/slsa_attestation_generator.py +490 -0
  682. icdev/tools/compliance/soc2_assessor.py +77 -0
  683. icdev/tools/compliance/ssp_generator.py +573 -0
  684. icdev/tools/compliance/stig_checker.py +727 -0
  685. icdev/tools/compliance/swft_evidence_bundler.py +337 -0
  686. icdev/tools/compliance/system_card_generator.py +309 -0
  687. icdev/tools/compliance/traceability_matrix.py +1281 -0
  688. icdev/tools/compliance/universal_classification_manager.py +1172 -0
  689. icdev/tools/compliance/xacta/__init__.py +2 -0
  690. icdev/tools/compliance/xacta/xacta_client.py +449 -0
  691. icdev/tools/compliance/xacta/xacta_export.py +557 -0
  692. icdev/tools/compliance/xacta/xacta_sync.py +333 -0
  693. icdev/tools/compliance/xai_assessor.py +231 -0
  694. icdev/tools/dashboard/__init__.py +1 -0
  695. icdev/tools/dashboard/api/__init__.py +1 -0
  696. icdev/tools/dashboard/api/_pipeline_state.py +17 -0
  697. icdev/tools/dashboard/api/activity.py +206 -0
  698. icdev/tools/dashboard/api/admin.py +176 -0
  699. icdev/tools/dashboard/api/agents.py +53 -0
  700. icdev/tools/dashboard/api/ai_accountability.py +163 -0
  701. icdev/tools/dashboard/api/ai_transparency.py +198 -0
  702. icdev/tools/dashboard/api/audit.py +58 -0
  703. icdev/tools/dashboard/api/batch.py +666 -0
  704. icdev/tools/dashboard/api/chat.py +241 -0
  705. icdev/tools/dashboard/api/cicd.py +219 -0
  706. icdev/tools/dashboard/api/code_quality.py +223 -0
  707. icdev/tools/dashboard/api/compliance.py +171 -0
  708. icdev/tools/dashboard/api/cpmp.py +915 -0
  709. icdev/tools/dashboard/api/diagrams.py +65 -0
  710. icdev/tools/dashboard/api/events.py +250 -0
  711. icdev/tools/dashboard/api/evidence.py +99 -0
  712. icdev/tools/dashboard/api/fedramp_20x.py +77 -0
  713. icdev/tools/dashboard/api/govcon.py +1095 -0
  714. icdev/tools/dashboard/api/intake.py +1171 -0
  715. icdev/tools/dashboard/api/lineage.py +163 -0
  716. icdev/tools/dashboard/api/metrics.py +155 -0
  717. icdev/tools/dashboard/api/nlq.py +72 -0
  718. icdev/tools/dashboard/api/orchestration.py +472 -0
  719. icdev/tools/dashboard/api/oscal.py +183 -0
  720. icdev/tools/dashboard/api/prod_audit.py +183 -0
  721. icdev/tools/dashboard/api/projects.py +191 -0
  722. icdev/tools/dashboard/api/proposals.py +1084 -0
  723. icdev/tools/dashboard/api/traces.py +363 -0
  724. icdev/tools/dashboard/api/usage.py +234 -0
  725. icdev/tools/dashboard/app.py +1986 -0
  726. icdev/tools/dashboard/auth.py +500 -0
  727. icdev/tools/dashboard/byok.py +245 -0
  728. icdev/tools/dashboard/chat_manager.py +675 -0
  729. icdev/tools/dashboard/config.py +116 -0
  730. icdev/tools/dashboard/diagram_definitions.py +642 -0
  731. icdev/tools/dashboard/nlq_processor.py +323 -0
  732. icdev/tools/dashboard/phase_loader.py +136 -0
  733. icdev/tools/dashboard/sse_manager.py +89 -0
  734. icdev/tools/dashboard/state_tracker.py +267 -0
  735. icdev/tools/dashboard/static/css/style.css +706 -0
  736. icdev/tools/dashboard/static/css/ux.css +2047 -0
  737. icdev/tools/dashboard/static/js/activity.js +322 -0
  738. icdev/tools/dashboard/static/js/api.js +161 -0
  739. icdev/tools/dashboard/static/js/batch.js +814 -0
  740. icdev/tools/dashboard/static/js/charts.js +618 -0
  741. icdev/tools/dashboard/static/js/chat.js +1514 -0
  742. icdev/tools/dashboard/static/js/kanban.js +113 -0
  743. icdev/tools/dashboard/static/js/live.js +569 -0
  744. icdev/tools/dashboard/static/js/mermaid-icdev.js +332 -0
  745. icdev/tools/dashboard/static/js/proposals.js +588 -0
  746. icdev/tools/dashboard/static/js/shortcuts.js +544 -0
  747. icdev/tools/dashboard/static/js/tables.js +652 -0
  748. icdev/tools/dashboard/static/js/tour.js +524 -0
  749. icdev/tools/dashboard/static/js/ux.js +942 -0
  750. icdev/tools/dashboard/templates/404.html +10 -0
  751. icdev/tools/dashboard/templates/activity.html +80 -0
  752. icdev/tools/dashboard/templates/admin/users.html +144 -0
  753. icdev/tools/dashboard/templates/ai_accountability.html +235 -0
  754. icdev/tools/dashboard/templates/ai_transparency.html +263 -0
  755. icdev/tools/dashboard/templates/base.html +104 -0
  756. icdev/tools/dashboard/templates/batch.html +23 -0
  757. icdev/tools/dashboard/templates/chat.html +332 -0
  758. icdev/tools/dashboard/templates/children.html +149 -0
  759. icdev/tools/dashboard/templates/cicd.html +253 -0
  760. icdev/tools/dashboard/templates/code_quality.html +214 -0
  761. icdev/tools/dashboard/templates/cpmp/cor_detail.html +220 -0
  762. icdev/tools/dashboard/templates/cpmp/cor_portal.html +91 -0
  763. icdev/tools/dashboard/templates/cpmp/deliverable_detail.html +197 -0
  764. icdev/tools/dashboard/templates/cpmp/detail.html +578 -0
  765. icdev/tools/dashboard/templates/cpmp/portfolio.html +202 -0
  766. icdev/tools/dashboard/templates/dev_profiles.html +304 -0
  767. icdev/tools/dashboard/templates/diagrams.html +224 -0
  768. icdev/tools/dashboard/templates/events/timeline.html +232 -0
  769. icdev/tools/dashboard/templates/evidence.html +134 -0
  770. icdev/tools/dashboard/templates/fedramp_20x.html +207 -0
  771. icdev/tools/dashboard/templates/gateway.html +244 -0
  772. icdev/tools/dashboard/templates/govcon/capabilities.html +135 -0
  773. icdev/tools/dashboard/templates/govcon/pipeline.html +214 -0
  774. icdev/tools/dashboard/templates/govcon/requirements.html +120 -0
  775. icdev/tools/dashboard/templates/index.html +254 -0
  776. icdev/tools/dashboard/templates/lineage.html +141 -0
  777. icdev/tools/dashboard/templates/login.html +51 -0
  778. icdev/tools/dashboard/templates/monitoring/overview.html +193 -0
  779. icdev/tools/dashboard/templates/orchestration/dashboard.html +545 -0
  780. icdev/tools/dashboard/templates/oscal.html +263 -0
  781. icdev/tools/dashboard/templates/phases.html +150 -0
  782. icdev/tools/dashboard/templates/prod_audit.html +280 -0
  783. icdev/tools/dashboard/templates/profile.html +183 -0
  784. icdev/tools/dashboard/templates/projects/detail.html +583 -0
  785. icdev/tools/dashboard/templates/projects/list.html +47 -0
  786. icdev/tools/dashboard/templates/proposals/detail.html +1253 -0
  787. icdev/tools/dashboard/templates/proposals/list.html +179 -0
  788. icdev/tools/dashboard/templates/proposals/section_detail.html +193 -0
  789. icdev/tools/dashboard/templates/provenance.html +181 -0
  790. icdev/tools/dashboard/templates/query/nlq.html +234 -0
  791. icdev/tools/dashboard/templates/quick_paths.html +69 -0
  792. icdev/tools/dashboard/templates/traces.html +155 -0
  793. icdev/tools/dashboard/templates/translation_detail.html +199 -0
  794. icdev/tools/dashboard/templates/translations.html +162 -0
  795. icdev/tools/dashboard/templates/usage.html +225 -0
  796. icdev/tools/dashboard/templates/wizard.html +539 -0
  797. icdev/tools/dashboard/templates/xai.html +208 -0
  798. icdev/tools/dashboard/ux_helpers.py +962 -0
  799. icdev/tools/dashboard/websocket.py +81 -0
  800. icdev/tools/db/__init__.py +1 -0
  801. icdev/tools/db/backup.py +312 -0
  802. icdev/tools/db/backup_manager.py +832 -0
  803. icdev/tools/db/init_icdev_db.py +5900 -0
  804. icdev/tools/db/migrate.py +178 -0
  805. icdev/tools/db/migration_runner.py +549 -0
  806. icdev/tools/db/migrations/001_baseline/meta.json +9 -0
  807. icdev/tools/db/migrations/001_baseline/up.py +68 -0
  808. icdev/tools/db/migrations/002_memory_enhancements/down.sql +8 -0
  809. icdev/tools/db/migrations/002_memory_enhancements/meta.json +9 -0
  810. icdev/tools/db/migrations/002_memory_enhancements/up.py +118 -0
  811. icdev/tools/db/migrations/003_dev_profiles/meta.json +8 -0
  812. icdev/tools/db/migrations/003_dev_profiles/up.py +93 -0
  813. icdev/tools/db/migrations/004_innovation_engine/down.py +19 -0
  814. icdev/tools/db/migrations/004_innovation_engine/up.py +227 -0
  815. icdev/tools/db/migrations/005_phase_37_ai_security/down.py +19 -0
  816. icdev/tools/db/migrations/005_phase_37_ai_security/up.py +258 -0
  817. icdev/tools/db/migrations/006_phase_36_evolution/down.py +21 -0
  818. icdev/tools/db/migrations/006_phase_36_evolution/up.py +323 -0
  819. icdev/tools/db/migrations/007_phase_38_cloud/down.py +14 -0
  820. icdev/tools/db/migrations/007_phase_38_cloud/up.py +110 -0
  821. icdev/tools/db/migrations/008_phase36_37_integration/up.py +55 -0
  822. icdev/tools/db/migrations/__init__.py +2 -0
  823. icdev/tools/devsecops/__init__.py +2 -0
  824. icdev/tools/devsecops/attestation_manager.py +458 -0
  825. icdev/tools/devsecops/network_segmentation_generator.py +614 -0
  826. icdev/tools/devsecops/pdp_config_generator.py +1256 -0
  827. icdev/tools/devsecops/pipeline_security_generator.py +484 -0
  828. icdev/tools/devsecops/policy_generator.py +653 -0
  829. icdev/tools/devsecops/profile_manager.py +388 -0
  830. icdev/tools/devsecops/service_mesh_generator.py +1073 -0
  831. icdev/tools/devsecops/zta_maturity_scorer.py +368 -0
  832. icdev/tools/devsecops/zta_terraform_generator.py +1303 -0
  833. icdev/tools/dx/__init__.py +3 -0
  834. icdev/tools/dx/companion.py +266 -0
  835. icdev/tools/dx/instruction_generator.py +753 -0
  836. icdev/tools/dx/mcp_config_generator.py +282 -0
  837. icdev/tools/dx/skill_translator.py +425 -0
  838. icdev/tools/dx/tool_detector.py +144 -0
  839. icdev/tools/extensions/__init__.py +21 -0
  840. icdev/tools/extensions/builtins/010_ai_governance_chat.py +277 -0
  841. icdev/tools/extensions/builtins/__init__.py +2 -0
  842. icdev/tools/extensions/extension_manager.py +455 -0
  843. icdev/tools/infra/__init__.py +1 -0
  844. icdev/tools/infra/ansible_generator.py +869 -0
  845. icdev/tools/infra/dockerfile_generator.py +361 -0
  846. icdev/tools/infra/infra_status.py +393 -0
  847. icdev/tools/infra/ironbank_metadata_generator.py +411 -0
  848. icdev/tools/infra/k8s_generator.py +1002 -0
  849. icdev/tools/infra/pipeline_generator.py +832 -0
  850. icdev/tools/infra/rollback.py +400 -0
  851. icdev/tools/infra/terraform_generator.py +1142 -0
  852. icdev/tools/infra/terraform_generator_azure.py +1254 -0
  853. icdev/tools/infra/terraform_generator_gcp.py +953 -0
  854. icdev/tools/infra/terraform_generator_ibm.py +360 -0
  855. icdev/tools/infra/terraform_generator_oci.py +919 -0
  856. icdev/tools/infra/terraform_generator_onprem.py +319 -0
  857. icdev/tools/innovation/__init__.py +8 -0
  858. icdev/tools/innovation/competitive_intel.py +492 -0
  859. icdev/tools/innovation/innovation_manager.py +681 -0
  860. icdev/tools/innovation/introspective_analyzer.py +774 -0
  861. icdev/tools/innovation/register_external_patterns.py +440 -0
  862. icdev/tools/innovation/signal_ranker.py +1038 -0
  863. icdev/tools/innovation/solution_generator.py +697 -0
  864. icdev/tools/innovation/standards_monitor.py +466 -0
  865. icdev/tools/innovation/trend_detector.py +1046 -0
  866. icdev/tools/innovation/triage_engine.py +1149 -0
  867. icdev/tools/innovation/web_scanner.py +894 -0
  868. icdev/tools/installer/__init__.py +1 -0
  869. icdev/tools/installer/compliance_configurator.py +637 -0
  870. icdev/tools/installer/installer.py +1711 -0
  871. icdev/tools/installer/module_registry.py +805 -0
  872. icdev/tools/installer/platform_setup.py +961 -0
  873. icdev/tools/integration/__init__.py +2 -0
  874. icdev/tools/integration/approval_manager.py +561 -0
  875. icdev/tools/integration/doors_exporter.py +627 -0
  876. icdev/tools/integration/gitlab_connector.py +784 -0
  877. icdev/tools/integration/jira_connector.py +774 -0
  878. icdev/tools/integration/servicenow_connector.py +693 -0
  879. icdev/tools/knowledge/__init__.py +1 -0
  880. icdev/tools/knowledge/knowledge_ingest.py +293 -0
  881. icdev/tools/knowledge/pattern_detector.py +693 -0
  882. icdev/tools/knowledge/recommendation_engine.py +461 -0
  883. icdev/tools/knowledge/self_heal_analyzer.py +504 -0
  884. icdev/tools/llm/__init__.py +72 -0
  885. icdev/tools/llm/anthropic_provider.py +170 -0
  886. icdev/tools/llm/azure_openai_provider.py +338 -0
  887. icdev/tools/llm/bedrock_provider.py +315 -0
  888. icdev/tools/llm/embedding_provider.py +438 -0
  889. icdev/tools/llm/gemini_provider.py +381 -0
  890. icdev/tools/llm/ibm_watsonx_provider.py +232 -0
  891. icdev/tools/llm/oci_genai_provider.py +462 -0
  892. icdev/tools/llm/ollama_provider.py +340 -0
  893. icdev/tools/llm/openai_provider.py +225 -0
  894. icdev/tools/llm/provider.py +355 -0
  895. icdev/tools/llm/provider_sdk.py +175 -0
  896. icdev/tools/llm/router.py +780 -0
  897. icdev/tools/llm/vertex_ai_provider.py +374 -0
  898. icdev/tools/maintenance/__init__.py +2 -0
  899. icdev/tools/maintenance/dependency_scanner.py +1030 -0
  900. icdev/tools/maintenance/maintenance_auditor.py +815 -0
  901. icdev/tools/maintenance/remediation_engine.py +966 -0
  902. icdev/tools/maintenance/vulnerability_checker.py +987 -0
  903. icdev/tools/mbse/__init__.py +3 -0
  904. icdev/tools/mbse/des_assessor.py +1186 -0
  905. icdev/tools/mbse/des_report_generator.py +800 -0
  906. icdev/tools/mbse/diagram_extractor.py +811 -0
  907. icdev/tools/mbse/digital_thread.py +1665 -0
  908. icdev/tools/mbse/model_code_generator.py +1122 -0
  909. icdev/tools/mbse/model_control_mapper.py +420 -0
  910. icdev/tools/mbse/pi_model_tracker.py +1093 -0
  911. icdev/tools/mbse/reqif_parser.py +1483 -0
  912. icdev/tools/mbse/sync_engine.py +1805 -0
  913. icdev/tools/mbse/xmi_parser.py +1573 -0
  914. icdev/tools/mcp/__init__.py +1 -0
  915. icdev/tools/mcp/base_server.py +535 -0
  916. icdev/tools/mcp/builder_server.py +725 -0
  917. icdev/tools/mcp/compliance_server.py +1407 -0
  918. icdev/tools/mcp/context_indexer.py +199 -0
  919. icdev/tools/mcp/context_server.py +305 -0
  920. icdev/tools/mcp/core_server.py +679 -0
  921. icdev/tools/mcp/devsecops_server.py +432 -0
  922. icdev/tools/mcp/gap_handlers.py +1079 -0
  923. icdev/tools/mcp/gateway_server.py +339 -0
  924. icdev/tools/mcp/generate_registry.py +623 -0
  925. icdev/tools/mcp/infra_server.py +264 -0
  926. icdev/tools/mcp/innovation_server.py +316 -0
  927. icdev/tools/mcp/integration_server.py +527 -0
  928. icdev/tools/mcp/knowledge_server.py +429 -0
  929. icdev/tools/mcp/maintenance_server.py +248 -0
  930. icdev/tools/mcp/marketplace_server.py +499 -0
  931. icdev/tools/mcp/mbse_server.py +398 -0
  932. icdev/tools/mcp/modernization_server.py +496 -0
  933. icdev/tools/mcp/observability_server.py +354 -0
  934. icdev/tools/mcp/requirements_server.py +415 -0
  935. icdev/tools/mcp/simulation_server.py +468 -0
  936. icdev/tools/mcp/standalone/__init__.py +2 -0
  937. icdev/tools/mcp/standalone/builder.py +59 -0
  938. icdev/tools/mcp/standalone/compliance.py +59 -0
  939. icdev/tools/mcp/standalone/core.py +59 -0
  940. icdev/tools/mcp/standalone/knowledge.py +59 -0
  941. icdev/tools/mcp/standalone/maintenance.py +59 -0
  942. icdev/tools/mcp/supply_chain_server.py +476 -0
  943. icdev/tools/mcp/tool_registry.py +2008 -0
  944. icdev/tools/mcp/unified_server.py +158 -0
  945. icdev/tools/memory/__init__.py +2 -0
  946. icdev/tools/memory/auto_capture.py +347 -0
  947. icdev/tools/memory/embed_memory.py +158 -0
  948. icdev/tools/memory/history_compressor.py +334 -0
  949. icdev/tools/memory/hybrid_search.py +236 -0
  950. icdev/tools/memory/maintenance_cron.py +289 -0
  951. icdev/tools/memory/memory_consolidation.py +444 -0
  952. icdev/tools/memory/memory_db.py +133 -0
  953. icdev/tools/memory/memory_read.py +102 -0
  954. icdev/tools/memory/memory_write.py +222 -0
  955. icdev/tools/memory/semantic_search.py +139 -0
  956. icdev/tools/memory/time_decay.py +435 -0
  957. icdev/tools/modernization/__init__.py +3 -0
  958. icdev/tools/modernization/architecture_extractor.py +734 -0
  959. icdev/tools/modernization/compliance_bridge.py +1499 -0
  960. icdev/tools/modernization/db_migration_planner.py +1385 -0
  961. icdev/tools/modernization/doc_generator.py +1428 -0
  962. icdev/tools/modernization/framework_migrator.py +1525 -0
  963. icdev/tools/modernization/legacy_analyzer.py +1948 -0
  964. icdev/tools/modernization/migration_code_generator.py +1639 -0
  965. icdev/tools/modernization/migration_report_generator.py +1653 -0
  966. icdev/tools/modernization/migration_tracker.py +1726 -0
  967. icdev/tools/modernization/monolith_decomposer.py +1508 -0
  968. icdev/tools/modernization/seven_r_assessor.py +1658 -0
  969. icdev/tools/modernization/strangler_fig_manager.py +1705 -0
  970. icdev/tools/modernization/ui_analyzer.py +771 -0
  971. icdev/tools/modernization/version_migrator.py +1392 -0
  972. icdev/tools/monitor/__init__.py +1 -0
  973. icdev/tools/monitor/alert_correlator.py +495 -0
  974. icdev/tools/monitor/auto_resolver.py +612 -0
  975. icdev/tools/monitor/health_checker.py +509 -0
  976. icdev/tools/monitor/heartbeat_daemon.py +792 -0
  977. icdev/tools/monitor/log_analyzer.py +516 -0
  978. icdev/tools/monitor/metric_collector.py +496 -0
  979. icdev/tools/mosa/__init__.py +10 -0
  980. icdev/tools/mosa/icd_generator.py +370 -0
  981. icdev/tools/mosa/modular_design_analyzer.py +683 -0
  982. icdev/tools/mosa/mosa_code_enforcer.py +349 -0
  983. icdev/tools/mosa/tsp_generator.py +265 -0
  984. icdev/tools/observability/__init__.py +100 -0
  985. icdev/tools/observability/genai_attributes.py +88 -0
  986. icdev/tools/observability/instrumentation.py +140 -0
  987. icdev/tools/observability/mlflow_exporter.py +194 -0
  988. icdev/tools/observability/otel_tracer.py +168 -0
  989. icdev/tools/observability/provenance/__init__.py +3 -0
  990. icdev/tools/observability/provenance/prov_recorder.py +324 -0
  991. icdev/tools/observability/shap/__init__.py +3 -0
  992. icdev/tools/observability/shap/agent_shap.py +275 -0
  993. icdev/tools/observability/sqlite_tracer.py +361 -0
  994. icdev/tools/observability/trace_context.py +205 -0
  995. icdev/tools/observability/tracer.py +230 -0
  996. icdev/tools/orchestration/__init__.py +2 -0
  997. icdev/tools/orchestration/workflow_composer.py +361 -0
  998. icdev/tools/project/__init__.py +1 -0
  999. icdev/tools/project/manifest_loader.py +418 -0
  1000. icdev/tools/project/project_create.py +350 -0
  1001. icdev/tools/project/project_list.py +174 -0
  1002. icdev/tools/project/project_scaffold.py +1715 -0
  1003. icdev/tools/project/project_status.py +479 -0
  1004. icdev/tools/project/session_context_builder.py +757 -0
  1005. icdev/tools/project/validate_manifest.py +55 -0
  1006. icdev/tools/registry/__init__.py +10 -0
  1007. icdev/tools/registry/absorption_engine.py +832 -0
  1008. icdev/tools/registry/capability_evaluator.py +668 -0
  1009. icdev/tools/registry/child_registry.py +617 -0
  1010. icdev/tools/registry/cross_pollinator.py +1065 -0
  1011. icdev/tools/registry/genome_manager.py +671 -0
  1012. icdev/tools/registry/learning_collector.py +912 -0
  1013. icdev/tools/registry/propagation_manager.py +942 -0
  1014. icdev/tools/registry/staging_manager.py +742 -0
  1015. icdev/tools/registry/telemetry_collector.py +423 -0
  1016. icdev/tools/requirements/__init__.py +1 -0
  1017. icdev/tools/requirements/ai_governance_scorer.py +208 -0
  1018. icdev/tools/requirements/boundary_analyzer.py +1293 -0
  1019. icdev/tools/requirements/clarification_engine.py +618 -0
  1020. icdev/tools/requirements/complexity_scorer.py +387 -0
  1021. icdev/tools/requirements/consistency_analyzer.py +803 -0
  1022. icdev/tools/requirements/constitution_manager.py +605 -0
  1023. icdev/tools/requirements/decomposition_engine.py +778 -0
  1024. icdev/tools/requirements/document_extractor.py +1016 -0
  1025. icdev/tools/requirements/elicitation_techniques.py +519 -0
  1026. icdev/tools/requirements/gap_detector.py +271 -0
  1027. icdev/tools/requirements/intake_engine.py +2188 -0
  1028. icdev/tools/requirements/prd_generator.py +847 -0
  1029. icdev/tools/requirements/prd_validator.py +595 -0
  1030. icdev/tools/requirements/readiness_scorer.py +313 -0
  1031. icdev/tools/requirements/spec_organizer.py +1029 -0
  1032. icdev/tools/requirements/spec_quality_checker.py +1097 -0
  1033. icdev/tools/requirements/traceability_builder.py +579 -0
  1034. icdev/tools/resilience/__init__.py +34 -0
  1035. icdev/tools/resilience/circuit_breaker.py +340 -0
  1036. icdev/tools/resilience/correlation.py +150 -0
  1037. icdev/tools/resilience/errors.py +81 -0
  1038. icdev/tools/resilience/retry.py +95 -0
  1039. icdev/tools/schemas/__init__.py +27 -0
  1040. icdev/tools/schemas/chat.py +61 -0
  1041. icdev/tools/schemas/compliance.py +56 -0
  1042. icdev/tools/schemas/core.py +85 -0
  1043. icdev/tools/schemas/innovation.py +37 -0
  1044. icdev/tools/schemas/validation.py +109 -0
  1045. icdev/tools/sdk/__init__.py +3 -0
  1046. icdev/tools/sdk/icdev_client.py +218 -0
  1047. icdev/tools/security/__init__.py +1 -0
  1048. icdev/tools/security/agent_output_validator.py +330 -0
  1049. icdev/tools/security/agent_trust_scorer.py +466 -0
  1050. icdev/tools/security/ai_bom_generator.py +725 -0
  1051. icdev/tools/security/ai_telemetry_logger.py +469 -0
  1052. icdev/tools/security/atlas_red_team.py +543 -0
  1053. icdev/tools/security/code_pattern_scanner.py +378 -0
  1054. icdev/tools/security/confabulation_detector.py +271 -0
  1055. icdev/tools/security/container_scanner.py +491 -0
  1056. icdev/tools/security/dependency_auditor.py +944 -0
  1057. icdev/tools/security/endpoint_security_scanner.py +579 -0
  1058. icdev/tools/security/mcp_tool_authorizer.py +243 -0
  1059. icdev/tools/security/prompt_injection_detector.py +737 -0
  1060. icdev/tools/security/sast_runner.py +948 -0
  1061. icdev/tools/security/secret_detector.py +378 -0
  1062. icdev/tools/security/tool_chain_validator.py +357 -0
  1063. icdev/tools/security/vuln_scanner.py +539 -0
  1064. icdev/tools/simulation/__init__.py +2 -0
  1065. icdev/tools/simulation/coa_generator.py +1552 -0
  1066. icdev/tools/simulation/monte_carlo.py +758 -0
  1067. icdev/tools/simulation/scenario_manager.py +1073 -0
  1068. icdev/tools/simulation/simulation_engine.py +1104 -0
  1069. icdev/tools/supply_chain/__init__.py +2 -0
  1070. icdev/tools/supply_chain/cve_triager.py +705 -0
  1071. icdev/tools/supply_chain/dependency_graph.py +645 -0
  1072. icdev/tools/supply_chain/isa_manager.py +540 -0
  1073. icdev/tools/supply_chain/scrm_assessor.py +546 -0
  1074. icdev/tools/testing/__init__.py +2 -0
  1075. icdev/tools/testing/acceptance_validator.py +411 -0
  1076. icdev/tools/testing/claude_dir_validator.py +831 -0
  1077. icdev/tools/testing/data_types.py +199 -0
  1078. icdev/tools/testing/e2e_runner.py +715 -0
  1079. icdev/tools/testing/fuzz_cli.py +306 -0
  1080. icdev/tools/testing/health_check.py +483 -0
  1081. icdev/tools/testing/platform_check.py +143 -0
  1082. icdev/tools/testing/production_audit.py +1862 -0
  1083. icdev/tools/testing/production_remediate.py +804 -0
  1084. icdev/tools/testing/screenshot_validator.py +539 -0
  1085. icdev/tools/testing/smoke_test.py +283 -0
  1086. icdev/tools/testing/test_agent_models.py +117 -0
  1087. icdev/tools/testing/test_orchestrator.py +957 -0
  1088. icdev/tools/testing/utils.py +229 -0
  1089. icdev/tools/translation/__init__.py +17 -0
  1090. icdev/tools/translation/code_translator.py +550 -0
  1091. icdev/tools/translation/dependency_mapper.py +277 -0
  1092. icdev/tools/translation/feature_map.py +395 -0
  1093. icdev/tools/translation/project_assembler.py +439 -0
  1094. icdev/tools/translation/source_extractor.py +609 -0
  1095. icdev/tools/translation/test_translator.py +333 -0
  1096. icdev/tools/translation/translation_manager.py +582 -0
  1097. icdev/tools/translation/translation_validator.py +662 -0
  1098. icdev/tools/translation/type_checker.py +371 -0
  1099. icdev-1.0.0.dist-info/METADATA +868 -0
  1100. icdev-1.0.0.dist-info/RECORD +1105 -0
  1101. icdev-1.0.0.dist-info/WHEEL +5 -0
  1102. icdev-1.0.0.dist-info/entry_points.txt +9 -0
  1103. icdev-1.0.0.dist-info/licenses/LICENSE +254 -0
  1104. icdev-1.0.0.dist-info/licenses/NOTICE +268 -0
  1105. icdev-1.0.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,1038 @@
1
+ #!/usr/bin/env python3
2
+ # CUI // SP-CTI
3
+ # Controlled by: Department of Defense
4
+ # CUI Category: CTI
5
+ # Distribution: D
6
+ # POC: ICDEV System Administrator
7
+ """Innovation Scoring Engine — score and rank innovation signals using weighted multi-dimension analysis.
8
+
9
+ Scores innovation signals discovered by web_scanner.py using a 5-dimension weighted
10
+ average (D21 deterministic scoring pattern):
11
+
12
+ 1. community_demand (0.30) — GitHub stars, SO votes, upvotes, issue frequency
13
+ 2. impact_breadth (0.25) — Potential number of ICDEV projects/tenants affected
14
+ 3. feasibility (0.20) — Can ICDEV build this with existing tools/layers?
15
+ 4. compliance_alignment (0.15) — Does it strengthen compliance posture?
16
+ 5. novelty (0.10) — Not already addressed by existing ICDEV capabilities
17
+
18
+ Architecture:
19
+ - Weights loaded from args/innovation_config.yaml under scoring.weights (D26 pattern)
20
+ - Thresholds: auto_queue >= 0.80, suggest >= 0.50, log_only < 0.50
21
+ - Status transitions: new -> scored (after scoring)
22
+ - Score + dimension breakdown stored in innovation_signals table
23
+ - Calibration adjusts weights based on marketplace adoption feedback
24
+ - All scoring is deterministic (D21 — reproducible, not probabilistic)
25
+
26
+ Usage:
27
+ # Score a single signal
28
+ python tools/innovation/signal_ranker.py --score --signal-id "sig-xxx" --json
29
+
30
+ # Score all unscored signals
31
+ python tools/innovation/signal_ranker.py --score-all --json
32
+
33
+ # Get top-scored signals
34
+ python tools/innovation/signal_ranker.py --top --limit 20 --min-score 0.5 --json
35
+
36
+ # Recalibrate weights from marketplace feedback
37
+ python tools/innovation/signal_ranker.py --calibrate --json
38
+ """
39
+
40
+ import argparse
41
+ import json
42
+ import os
43
+ import sqlite3
44
+ import sys
45
+ from datetime import datetime, timezone
46
+ from pathlib import Path
47
+ from icdev._paths import get_project_root
48
+
49
+ # =========================================================================
50
+ # PATH SETUP
51
+ # =========================================================================
52
+ BASE_DIR = get_project_root()
53
+ if str(BASE_DIR) not in sys.path:
54
+ sys.path.insert(0, str(BASE_DIR))
55
+
56
+ DB_PATH = Path(os.environ.get("ICDEV_DB_PATH", str(BASE_DIR / "data" / "icdev.db")))
57
+ CONFIG_PATH = BASE_DIR / "args" / "innovation_config.yaml"
58
+
59
+ # =========================================================================
60
+ # GRACEFUL IMPORTS
61
+ # =========================================================================
62
+ try:
63
+ import yaml
64
+ _HAS_YAML = True
65
+ except ImportError:
66
+ _HAS_YAML = False
67
+
68
+ try:
69
+ from icdev.tools.audit.audit_logger import log_event as audit_log_event
70
+ _HAS_AUDIT = True
71
+ except ImportError:
72
+ _HAS_AUDIT = False
73
+ def audit_log_event(**kwargs):
74
+ return -1
75
+
76
+ # =========================================================================
77
+ # DEFAULT CONFIGURATION
78
+ # =========================================================================
79
+ DEFAULT_WEIGHTS = {
80
+ "community_demand": 0.30,
81
+ "impact_breadth": 0.25,
82
+ "feasibility": 0.20,
83
+ "compliance_alignment": 0.15,
84
+ "novelty": 0.10,
85
+ }
86
+
87
+ DEFAULT_THRESHOLDS = {
88
+ "auto_queue": 0.80,
89
+ "suggest": 0.50,
90
+ "log_only": 0.0,
91
+ }
92
+
93
+ # Categories that strengthen compliance posture (positive boost)
94
+ COMPLIANCE_POSITIVE_CATEGORIES = {
95
+ "security_vulnerability", "compliance_gap", "supply_chain",
96
+ }
97
+
98
+ # Categories neutral to compliance
99
+ COMPLIANCE_NEUTRAL_CATEGORIES = {
100
+ "developer_experience", "performance", "infrastructure",
101
+ "testing", "ai_tooling", "modernization",
102
+ }
103
+
104
+ # GOTCHA layer keyword mapping — used for feasibility scoring
105
+ # Mirrors triage.gotcha_fit.layer_mapping from innovation_config.yaml
106
+ DEFAULT_GOTCHA_LAYERS = {
107
+ "goal": ["workflow", "process", "procedure", "methodology", "best practice"],
108
+ "tool": ["script", "utility", "generator", "scanner", "checker", "validator", "analyzer"],
109
+ "arg": ["configuration", "setting", "threshold", "parameter", "tuning"],
110
+ "context": ["reference", "template", "sample", "example", "guideline", "standard"],
111
+ "hardprompt": ["prompt template", "instruction", "llm directive", "system prompt"],
112
+ }
113
+
114
+
115
+ # =========================================================================
116
+ # DATABASE HELPERS
117
+ # =========================================================================
118
+ def _get_db(db_path=None):
119
+ """Get database connection with dict-like row access."""
120
+ path = db_path or DB_PATH
121
+ if not path.exists():
122
+ raise FileNotFoundError(
123
+ f"Database not found: {path}\nRun: python tools/db/init_icdev_db.py"
124
+ )
125
+ conn = sqlite3.connect(str(path))
126
+ conn.row_factory = sqlite3.Row
127
+ return conn
128
+
129
+
130
+ def _now():
131
+ """ISO-8601 UTC timestamp."""
132
+ return datetime.now(timezone.utc).strftime("%Y-%m-%dT%H:%M:%SZ")
133
+
134
+
135
+ def _audit(event_type, actor, action, details=None, project_id=None):
136
+ """Write audit trail entry (best-effort, never raises)."""
137
+ if _HAS_AUDIT:
138
+ try:
139
+ audit_log_event(
140
+ event_type=event_type,
141
+ actor=actor,
142
+ action=action,
143
+ details=json.dumps(details) if details else None,
144
+ project_id=project_id or "innovation-engine",
145
+ )
146
+ except Exception:
147
+ pass
148
+
149
+
150
+ def _load_config():
151
+ """Load innovation config from YAML with fallback defaults."""
152
+ if not _HAS_YAML:
153
+ return {}
154
+ if not CONFIG_PATH.exists():
155
+ return {}
156
+ try:
157
+ with open(CONFIG_PATH, "r", encoding="utf-8") as f:
158
+ return yaml.safe_load(f) or {}
159
+ except Exception:
160
+ return {}
161
+
162
+
163
+ def _get_weights(config=None):
164
+ """Extract scoring weights from config, falling back to defaults."""
165
+ if config is None:
166
+ config = _load_config()
167
+ scoring = config.get("scoring", {})
168
+ weights = scoring.get("weights", {})
169
+ result = {}
170
+ for dim, default_val in DEFAULT_WEIGHTS.items():
171
+ result[dim] = float(weights.get(dim, default_val))
172
+ # Normalize weights to sum to 1.0
173
+ total = sum(result.values())
174
+ if total > 0 and abs(total - 1.0) > 0.001:
175
+ result = {k: v / total for k, v in result.items()}
176
+ return result
177
+
178
+
179
+ def _get_thresholds(config=None):
180
+ """Extract scoring thresholds from config, falling back to defaults."""
181
+ if config is None:
182
+ config = _load_config()
183
+ scoring = config.get("scoring", {})
184
+ thresholds = scoring.get("thresholds", {})
185
+ return {
186
+ "auto_queue": float(thresholds.get("auto_queue", DEFAULT_THRESHOLDS["auto_queue"])),
187
+ "suggest": float(thresholds.get("suggest", DEFAULT_THRESHOLDS["suggest"])),
188
+ "log_only": float(thresholds.get("log_only", DEFAULT_THRESHOLDS["log_only"])),
189
+ }
190
+
191
+
192
+ def _get_gotcha_layers(config=None):
193
+ """Extract GOTCHA layer mapping from config, falling back to defaults."""
194
+ if config is None:
195
+ config = _load_config()
196
+ triage = config.get("triage", {})
197
+ gotcha_fit = triage.get("gotcha_fit", {})
198
+ layer_mapping = gotcha_fit.get("layer_mapping", {})
199
+ if layer_mapping:
200
+ return {k: [kw.lower() for kw in v] for k, v in layer_mapping.items()}
201
+ return {k: [kw.lower() for kw in v] for k, v in DEFAULT_GOTCHA_LAYERS.items()}
202
+
203
+
204
+ def _get_signal_categories(config=None):
205
+ """Extract signal category keywords from config."""
206
+ if config is None:
207
+ config = _load_config()
208
+ categories = config.get("signal_categories", {})
209
+ return categories
210
+
211
+
212
+ # =========================================================================
213
+ # DIMENSION SCORERS
214
+ # =========================================================================
215
+ def _score_community_demand(signal):
216
+ """Score community demand dimension.
217
+
218
+ Uses the community_score field already set by web_scanner.py.
219
+ This field is normalized to [0, 1] by the scanner based on source-specific
220
+ metrics (GitHub stars/1000, SO votes/100, HN score/500, CVSS/10).
221
+
222
+ Args:
223
+ signal: Dict of signal row from DB.
224
+
225
+ Returns:
226
+ Float in [0.0, 1.0].
227
+ """
228
+ raw = float(signal.get("community_score", 0.0) or 0.0)
229
+ # Clamp to [0, 1]
230
+ return max(0.0, min(1.0, raw))
231
+
232
+
233
+ def _score_impact_breadth(signal, conn):
234
+ """Score impact breadth dimension.
235
+
236
+ Estimates how many ICDEV projects/tenants could benefit from addressing
237
+ this signal. Uses signal category to match against project types in DB.
238
+
239
+ Args:
240
+ signal: Dict of signal row from DB.
241
+ conn: Open database connection.
242
+
243
+ Returns:
244
+ Float in [0.0, 1.0].
245
+ """
246
+ category = signal.get("category") or ""
247
+ title = (signal.get("title") or "").lower()
248
+ description = (signal.get("description") or "").lower()
249
+ text_corpus = f"{title} {description} {category}"
250
+
251
+ # Count total active projects
252
+ try:
253
+ total_projects = conn.execute(
254
+ "SELECT COUNT(*) as cnt FROM projects WHERE status = 'active'"
255
+ ).fetchone()["cnt"]
256
+ except Exception:
257
+ total_projects = 0
258
+
259
+ if total_projects == 0:
260
+ # No projects in DB — use heuristic based on category breadth
261
+ # Security and compliance affect everyone; niche categories affect fewer
262
+ broad_keywords = [
263
+ "security", "compliance", "testing", "ci/cd", "pipeline",
264
+ "deployment", "monitoring", "authentication", "authorization",
265
+ ]
266
+ narrow_keywords = [
267
+ "specific", "niche", "legacy", "deprecated", "single",
268
+ ]
269
+ broad_matches = sum(1 for kw in broad_keywords if kw in text_corpus)
270
+ narrow_matches = sum(1 for kw in narrow_keywords if kw in text_corpus)
271
+ score = min(1.0, (broad_matches * 0.15) - (narrow_matches * 0.1))
272
+ return max(0.0, min(1.0, score + 0.3)) # Base score of 0.3
273
+
274
+ # Match signal against project types and tech stacks
275
+ affected = 0
276
+
277
+ # Category-to-project-type relevance mapping
278
+ category_project_map = {
279
+ "security_vulnerability": None, # Affects all projects
280
+ "compliance_gap": None, # Affects all projects
281
+ "supply_chain": None, # Affects all projects
282
+ "developer_experience": None, # Affects all projects
283
+ "infrastructure": ["microservice", "api", "webapp"],
284
+ "testing": None, # Affects all projects
285
+ "performance": ["webapp", "api", "microservice", "data_pipeline"],
286
+ "modernization": ["webapp", "api", "microservice"],
287
+ "ai_tooling": None, # Affects all projects
288
+ }
289
+
290
+ relevant_types = category_project_map.get(category)
291
+
292
+ if relevant_types is None:
293
+ # Affects all project types
294
+ affected = total_projects
295
+ else:
296
+ try:
297
+ placeholders = ",".join("?" for _ in relevant_types)
298
+ affected = conn.execute(
299
+ f"SELECT COUNT(*) as cnt FROM projects WHERE status = 'active' AND type IN ({placeholders})",
300
+ relevant_types,
301
+ ).fetchone()["cnt"]
302
+ except Exception:
303
+ affected = total_projects // 2 # Conservative estimate
304
+
305
+ if total_projects > 0:
306
+ ratio = affected / total_projects
307
+ else:
308
+ ratio = 0.5
309
+
310
+ return max(0.0, min(1.0, ratio))
311
+
312
+
313
+ def _score_feasibility(signal, config=None):
314
+ """Score feasibility dimension.
315
+
316
+ Checks if the signal category maps to an existing GOTCHA layer,
317
+ indicating ICDEV has the architecture to address it.
318
+
319
+ Args:
320
+ signal: Dict of signal row from DB.
321
+ config: Loaded innovation config (optional).
322
+
323
+ Returns:
324
+ Float in [0.0, 1.0].
325
+ """
326
+ gotcha_layers = _get_gotcha_layers(config)
327
+ title = (signal.get("title") or "").lower()
328
+ description = (signal.get("description") or "").lower()
329
+ metadata_str = signal.get("metadata") or "{}"
330
+ try:
331
+ metadata = json.loads(metadata_str) if isinstance(metadata_str, str) else metadata_str
332
+ except (json.JSONDecodeError, TypeError):
333
+ metadata = {}
334
+
335
+ text_corpus = f"{title} {description} {json.dumps(metadata).lower()}"
336
+
337
+ # Count how many GOTCHA layers this signal maps to
338
+ layers_matched = 0
339
+ total_layers = len(gotcha_layers)
340
+ matched_layer_names = []
341
+
342
+ for layer_name, keywords in gotcha_layers.items():
343
+ for kw in keywords:
344
+ if kw in text_corpus:
345
+ layers_matched += 1
346
+ matched_layer_names.append(layer_name)
347
+ break # One match per layer is sufficient
348
+
349
+ if total_layers == 0:
350
+ return 0.5 # Unknown feasibility
351
+
352
+ # Base score from layer coverage
353
+ layer_ratio = layers_matched / total_layers
354
+
355
+ # Boost: signals matching "tool" layer are most directly actionable
356
+ tool_bonus = 0.15 if "tool" in matched_layer_names else 0.0
357
+
358
+ # Penalty: signals requiring external dependencies are harder
359
+ external_penalty = 0.0
360
+ hard_keywords = ["hardware", "physical", "proprietary", "closed-source", "manual"]
361
+ for kw in hard_keywords:
362
+ if kw in text_corpus:
363
+ external_penalty += 0.1
364
+
365
+ score = layer_ratio + tool_bonus - external_penalty
366
+ # Ensure minimum feasibility for anything that maps to at least one layer
367
+ if layers_matched > 0:
368
+ score = max(score, 0.3)
369
+
370
+ return max(0.0, min(1.0, score))
371
+
372
+
373
+ def _score_compliance_alignment(signal, config=None):
374
+ """Score compliance alignment dimension.
375
+
376
+ Boosts signals in security/compliance categories, neutral for others,
377
+ penalizes if the signal could potentially weaken compliance posture.
378
+
379
+ Args:
380
+ signal: Dict of signal row from DB.
381
+ config: Loaded innovation config (optional).
382
+
383
+ Returns:
384
+ Float in [0.0, 1.0].
385
+ """
386
+ category = signal.get("category") or ""
387
+ title = (signal.get("title") or "").lower()
388
+ description = (signal.get("description") or "").lower()
389
+ text_corpus = f"{title} {description}"
390
+
391
+ # Positive: directly strengthens compliance
392
+ if category in COMPLIANCE_POSITIVE_CATEGORIES:
393
+ base_score = 0.85
394
+ elif category in COMPLIANCE_NEUTRAL_CATEGORIES:
395
+ base_score = 0.50
396
+ else:
397
+ base_score = 0.50 # Unknown category gets neutral
398
+
399
+ # Boost for compliance-related keywords in text
400
+ compliance_keywords = [
401
+ "nist", "fedramp", "cmmc", "stig", "ato", "fips", "compliance",
402
+ "audit", "authorization", "security control", "cui", "classified",
403
+ "hipaa", "pci", "cjis", "soc 2", "iso 27001", "zero trust",
404
+ ]
405
+ keyword_hits = sum(1 for kw in compliance_keywords if kw in text_corpus)
406
+ keyword_boost = min(0.15, keyword_hits * 0.03)
407
+
408
+ # Penalty for potentially weakening compliance
409
+ weakening_keywords = [
410
+ "bypass", "disable security", "skip auth", "remove check",
411
+ "ignore compliance", "workaround security",
412
+ ]
413
+ weakening_hits = sum(1 for kw in weakening_keywords if kw in text_corpus)
414
+ weakening_penalty = min(0.4, weakening_hits * 0.2)
415
+
416
+ score = base_score + keyword_boost - weakening_penalty
417
+ return max(0.0, min(1.0, score))
418
+
419
+
420
+ def _score_novelty(signal, conn):
421
+ """Score novelty dimension.
422
+
423
+ Checks whether the signal addresses something not already covered by
424
+ existing ICDEV capabilities. Searches knowledge_patterns and tool manifest
425
+ for similar patterns via keyword matching.
426
+
427
+ Args:
428
+ signal: Dict of signal row from DB.
429
+ conn: Open database connection.
430
+
431
+ Returns:
432
+ Float in [0.0, 1.0]. Higher = more novel (less overlap).
433
+ """
434
+ title = (signal.get("title") or "").lower()
435
+ description = (signal.get("description") or "").lower()
436
+
437
+ # Extract significant words (simple tokenization, skip short words)
438
+ stop_words = {
439
+ "the", "and", "for", "that", "this", "with", "from", "are", "was",
440
+ "have", "has", "not", "but", "can", "will", "all", "been", "they",
441
+ "how", "use", "new", "when", "what", "who", "why", "does", "into",
442
+ }
443
+ words = set()
444
+ for token in f"{title} {description}".split():
445
+ cleaned = token.strip(".,;:!?()[]{}\"'`")
446
+ if len(cleaned) > 3 and cleaned not in stop_words:
447
+ words.add(cleaned)
448
+
449
+ if not words:
450
+ return 0.7 # No keywords to check — assume moderately novel
451
+
452
+ # Check against knowledge_patterns table
453
+ overlap_count = 0
454
+ total_checks = 0
455
+
456
+ try:
457
+ patterns = conn.execute(
458
+ "SELECT pattern_signature, description FROM knowledge_patterns"
459
+ ).fetchall()
460
+ for pattern in patterns:
461
+ sig_text = (
462
+ (pattern["pattern_signature"] or "") + " " + (pattern["description"] or "")
463
+ ).lower()
464
+ matches = sum(1 for w in words if w in sig_text)
465
+ if matches >= 3: # At least 3 keyword overlaps = significant similarity
466
+ overlap_count += 1
467
+ total_checks += 1
468
+ except Exception:
469
+ pass # Table may not exist or be empty
470
+
471
+ # Check against existing innovation_signals that are already scored/queued
472
+ try:
473
+ recent_signals = conn.execute(
474
+ """SELECT title, description FROM innovation_signals
475
+ WHERE status IN ('scored', 'queued', 'in_progress', 'completed')
476
+ AND id != ?
477
+ ORDER BY discovered_at DESC LIMIT 200""",
478
+ (signal.get("id", ""),),
479
+ ).fetchall()
480
+ for recent in recent_signals:
481
+ recent_text = (
482
+ (recent["title"] or "") + " " + (recent["description"] or "")
483
+ ).lower()
484
+ matches = sum(1 for w in words if w in recent_text)
485
+ if matches >= 3:
486
+ overlap_count += 1
487
+ total_checks += 1
488
+ except Exception:
489
+ pass
490
+
491
+ if total_checks == 0:
492
+ return 0.9 # Nothing to compare against — very novel
493
+
494
+ # Novelty is inversely proportional to overlap
495
+ overlap_ratio = overlap_count / max(total_checks, 1)
496
+ novelty = 1.0 - min(1.0, overlap_ratio * 2.0) # Scale: 50% overlap = 0 novelty
497
+
498
+ return max(0.0, min(1.0, novelty))
499
+
500
+
501
+ # =========================================================================
502
+ # SCORING FUNCTIONS
503
+ # =========================================================================
504
+ def score_signal(signal_id, db_path=None):
505
+ """Score a single innovation signal across all 5 dimensions.
506
+
507
+ Reads the signal from DB, computes each dimension score, calculates
508
+ the weighted average, updates the signal row, and returns the result.
509
+
510
+ Args:
511
+ signal_id: The signal ID (e.g., "sig-abc123def456").
512
+ db_path: Optional database path override.
513
+
514
+ Returns:
515
+ Dict with signal_id, overall score, dimension breakdown, status, and threshold.
516
+ """
517
+ config = _load_config()
518
+ weights = _get_weights(config)
519
+ thresholds = _get_thresholds(config)
520
+
521
+ conn = _get_db(db_path)
522
+ try:
523
+ row = conn.execute(
524
+ "SELECT * FROM innovation_signals WHERE id = ?", (signal_id,)
525
+ ).fetchone()
526
+ if not row:
527
+ raise ValueError(f"Signal not found: {signal_id}")
528
+
529
+ signal = dict(row)
530
+
531
+ # Compute each dimension
532
+ dimensions = {
533
+ "community_demand": _score_community_demand(signal),
534
+ "impact_breadth": _score_impact_breadth(signal, conn),
535
+ "feasibility": _score_feasibility(signal, config),
536
+ "compliance_alignment": _score_compliance_alignment(signal, config),
537
+ "novelty": _score_novelty(signal, conn),
538
+ }
539
+
540
+ # Weighted average (D21 deterministic pattern)
541
+ overall_score = sum(
542
+ dimensions[dim] * weights.get(dim, 0.0) for dim in dimensions
543
+ )
544
+ overall_score = round(max(0.0, min(1.0, overall_score)), 4)
545
+
546
+ # Determine threshold band
547
+ if overall_score >= thresholds["auto_queue"]:
548
+ threshold_band = "auto_queue"
549
+ elif overall_score >= thresholds["suggest"]:
550
+ threshold_band = "suggest"
551
+ else:
552
+ threshold_band = "log_only"
553
+
554
+ # Build score breakdown JSON
555
+ score_breakdown = {
556
+ "dimensions": {k: round(v, 4) for k, v in dimensions.items()},
557
+ "weights": weights,
558
+ "overall": overall_score,
559
+ "threshold_band": threshold_band,
560
+ "scored_at": _now(),
561
+ }
562
+
563
+ # Update DB: set score, score_breakdown, transition status new -> scored
564
+ conn.execute(
565
+ """UPDATE innovation_signals
566
+ SET innovation_score = ?,
567
+ score_breakdown = ?,
568
+ status = 'scored'
569
+ WHERE id = ?""",
570
+ (
571
+ overall_score,
572
+ json.dumps(score_breakdown),
573
+ signal_id,
574
+ ),
575
+ )
576
+ conn.commit()
577
+
578
+ _audit(
579
+ "innovation.score",
580
+ "innovation-agent",
581
+ f"Scored signal {signal_id}: {overall_score:.4f} ({threshold_band})",
582
+ {
583
+ "signal_id": signal_id,
584
+ "score": overall_score,
585
+ "threshold_band": threshold_band,
586
+ "dimensions": {k: round(v, 4) for k, v in dimensions.items()},
587
+ },
588
+ )
589
+
590
+ return {
591
+ "signal_id": signal_id,
592
+ "title": signal.get("title", ""),
593
+ "source": signal.get("source", ""),
594
+ "category": signal.get("category", ""),
595
+ "score": overall_score,
596
+ "threshold_band": threshold_band,
597
+ "dimensions": {k: round(v, 4) for k, v in dimensions.items()},
598
+ "weights_used": weights,
599
+ "status": "scored",
600
+ "scored_at": score_breakdown["scored_at"],
601
+ }
602
+
603
+ finally:
604
+ conn.close()
605
+
606
+
607
+ def score_all_new(db_path=None):
608
+ """Score all signals with status='new'.
609
+
610
+ Iterates through unscored signals and applies the 5-dimension scoring.
611
+ Respects max_signals_per_scan from config to prevent overload.
612
+
613
+ Args:
614
+ db_path: Optional database path override.
615
+
616
+ Returns:
617
+ Dict with count of scored signals, errors, and score distribution.
618
+ """
619
+ config = _load_config()
620
+ max_signals = config.get("scoring", {}).get("max_signals_per_scan", 500)
621
+
622
+ conn = _get_db(db_path)
623
+ try:
624
+ rows = conn.execute(
625
+ """SELECT id FROM innovation_signals
626
+ WHERE status = 'new'
627
+ ORDER BY discovered_at ASC
628
+ LIMIT ?""",
629
+ (max_signals,),
630
+ ).fetchall()
631
+ finally:
632
+ conn.close()
633
+
634
+ signal_ids = [row["id"] for row in rows]
635
+
636
+ scored = 0
637
+ errors = 0
638
+ error_details = []
639
+ score_distribution = {"auto_queue": 0, "suggest": 0, "log_only": 0}
640
+
641
+ for sid in signal_ids:
642
+ try:
643
+ result = score_signal(sid, db_path=db_path)
644
+ scored += 1
645
+ band = result.get("threshold_band", "log_only")
646
+ score_distribution[band] = score_distribution.get(band, 0) + 1
647
+ except Exception as e:
648
+ errors += 1
649
+ error_details.append({"signal_id": sid, "error": str(e)})
650
+
651
+ _audit(
652
+ "innovation.score_batch",
653
+ "innovation-agent",
654
+ f"Batch scored {scored} signals ({errors} errors)",
655
+ {
656
+ "scored": scored,
657
+ "errors": errors,
658
+ "distribution": score_distribution,
659
+ },
660
+ )
661
+
662
+ return {
663
+ "total_new": len(signal_ids),
664
+ "scored": scored,
665
+ "errors": errors,
666
+ "error_details": error_details[:10], # Cap error details
667
+ "score_distribution": score_distribution,
668
+ "scored_at": _now(),
669
+ }
670
+
671
+
672
+ def get_top_signals(limit=20, min_score=0.5, db_path=None):
673
+ """Get highest-scored innovation signals.
674
+
675
+ Args:
676
+ limit: Maximum number of signals to return (default 20).
677
+ min_score: Minimum score threshold (default 0.5).
678
+ db_path: Optional database path override.
679
+
680
+ Returns:
681
+ Dict with list of top signals and summary statistics.
682
+ """
683
+ conn = _get_db(db_path)
684
+ try:
685
+ rows = conn.execute(
686
+ """SELECT id, source, source_type, title, category, url,
687
+ innovation_score, score_breakdown, status, discovered_at
688
+ FROM innovation_signals
689
+ WHERE innovation_score IS NOT NULL AND innovation_score >= ?
690
+ ORDER BY innovation_score DESC
691
+ LIMIT ?""",
692
+ (min_score, limit),
693
+ ).fetchall()
694
+
695
+ signals = []
696
+ for row in rows:
697
+ entry = dict(row)
698
+ # Parse score_breakdown for dimension detail
699
+ try:
700
+ breakdown = json.loads(entry.get("score_breakdown") or "{}")
701
+ except (json.JSONDecodeError, TypeError):
702
+ breakdown = {}
703
+ entry["score_breakdown"] = breakdown
704
+ signals.append(entry)
705
+
706
+ # Summary statistics
707
+ total_scored = conn.execute(
708
+ "SELECT COUNT(*) as cnt FROM innovation_signals WHERE innovation_score IS NOT NULL"
709
+ ).fetchone()["cnt"]
710
+
711
+ avg_score = conn.execute(
712
+ "SELECT AVG(innovation_score) as avg_score FROM innovation_signals WHERE innovation_score IS NOT NULL"
713
+ ).fetchone()["avg_score"] or 0.0
714
+
715
+ distribution = {}
716
+ thresholds = _get_thresholds()
717
+ for band_name, band_min in [
718
+ ("auto_queue", thresholds["auto_queue"]),
719
+ ("suggest", thresholds["suggest"]),
720
+ ("log_only", thresholds["log_only"]),
721
+ ]:
722
+ band_count = conn.execute(
723
+ """SELECT COUNT(*) as cnt FROM innovation_signals
724
+ WHERE innovation_score IS NOT NULL AND innovation_score >= ?""",
725
+ (band_min,),
726
+ ).fetchone()["cnt"]
727
+ distribution[band_name] = band_count
728
+
729
+ # Correct distribution to be non-overlapping
730
+ distribution["auto_queue"] = distribution.get("auto_queue", 0)
731
+ distribution["suggest"] = (
732
+ distribution.get("suggest", 0) - distribution.get("auto_queue", 0)
733
+ )
734
+ distribution["log_only"] = (
735
+ distribution.get("log_only", 0)
736
+ - distribution.get("suggest", 0)
737
+ - distribution.get("auto_queue", 0)
738
+ )
739
+
740
+ return {
741
+ "signals": signals,
742
+ "count": len(signals),
743
+ "total_scored": total_scored,
744
+ "average_score": round(avg_score, 4),
745
+ "distribution": distribution,
746
+ "query": {"limit": limit, "min_score": min_score},
747
+ }
748
+
749
+ finally:
750
+ conn.close()
751
+
752
+
753
+ def calibrate_weights(db_path=None):
754
+ """Recalibrate scoring weights based on marketplace adoption feedback.
755
+
756
+ Analyzes which score dimensions best predict marketplace success
757
+ (install count, ratings) and adjusts weights accordingly. Uses
758
+ feedback config for step size and minimum data point requirements.
759
+
760
+ Args:
761
+ db_path: Optional database path override.
762
+
763
+ Returns:
764
+ Dict with old weights, new weights, adjustment rationale, and data points used.
765
+ """
766
+ config = _load_config()
767
+ feedback_config = config.get("feedback", {})
768
+ adjustment_step = float(feedback_config.get("weight_adjustment_step", 0.02))
769
+ min_data_points = int(feedback_config.get("min_data_points", 10))
770
+
771
+ current_weights = _get_weights(config)
772
+ old_weights = dict(current_weights)
773
+
774
+ conn = _get_db(db_path)
775
+ try:
776
+ # Collect signals that have been implemented and have marketplace feedback
777
+ # Join innovation_signals with marketplace_installations/ratings if available
778
+ completed_signals = []
779
+ try:
780
+ rows = conn.execute(
781
+ """SELECT s.id, s.innovation_score, s.score_breakdown, s.category
782
+ FROM innovation_signals s
783
+ WHERE s.status IN ('completed', 'queued')
784
+ AND s.innovation_score IS NOT NULL
785
+ AND s.score_breakdown IS NOT NULL
786
+ ORDER BY s.discovered_at DESC
787
+ LIMIT 500"""
788
+ ).fetchall()
789
+ completed_signals = [dict(r) for r in rows]
790
+ except Exception:
791
+ pass
792
+
793
+ if len(completed_signals) < min_data_points:
794
+ return {
795
+ "calibrated": False,
796
+ "reason": f"Insufficient data points ({len(completed_signals)}/{min_data_points})",
797
+ "old_weights": old_weights,
798
+ "new_weights": old_weights,
799
+ "data_points": len(completed_signals),
800
+ "adjustments": {},
801
+ }
802
+
803
+ # Analyze dimension correlations with success
804
+ # Success heuristic: signals that reached 'completed' status are successes;
805
+ # 'queued' signals with high scores that stalled may indicate scoring issues
806
+ dimension_success = {dim: [] for dim in DEFAULT_WEIGHTS}
807
+ dimension_stall = {dim: [] for dim in DEFAULT_WEIGHTS}
808
+
809
+ for sig in completed_signals:
810
+ try:
811
+ breakdown = json.loads(sig.get("score_breakdown") or "{}")
812
+ dims = breakdown.get("dimensions", {})
813
+ except (json.JSONDecodeError, TypeError):
814
+ continue
815
+
816
+ if sig.get("status") == "completed":
817
+ for dim, val in dims.items():
818
+ if dim in dimension_success:
819
+ dimension_success[dim].append(float(val))
820
+ else:
821
+ for dim, val in dims.items():
822
+ if dim in dimension_stall:
823
+ dimension_stall[dim].append(float(val))
824
+
825
+ # Calculate average dimension scores for successes vs stalls
826
+ adjustments = {}
827
+ for dim in DEFAULT_WEIGHTS:
828
+ success_vals = dimension_success.get(dim, [])
829
+ stall_vals = dimension_stall.get(dim, [])
830
+
831
+ success_avg = sum(success_vals) / len(success_vals) if success_vals else 0.5
832
+ stall_avg = sum(stall_vals) / len(stall_vals) if stall_vals else 0.5
833
+
834
+ # If successes score higher on this dimension, boost its weight
835
+ delta = success_avg - stall_avg
836
+ if delta > 0.05:
837
+ adj = min(adjustment_step, delta * 0.1)
838
+ adjustments[dim] = {"direction": "increase", "step": round(adj, 4)}
839
+ current_weights[dim] = current_weights[dim] + adj
840
+ elif delta < -0.05:
841
+ adj = min(adjustment_step, abs(delta) * 0.1)
842
+ adjustments[dim] = {"direction": "decrease", "step": round(adj, 4)}
843
+ current_weights[dim] = max(0.02, current_weights[dim] - adj)
844
+ else:
845
+ adjustments[dim] = {"direction": "unchanged", "step": 0.0}
846
+
847
+ # Re-normalize to sum to 1.0
848
+ total = sum(current_weights.values())
849
+ if total > 0:
850
+ current_weights = {k: round(v / total, 4) for k, v in current_weights.items()}
851
+
852
+ # Ensure no weight drops below 0.02 (2%)
853
+ for dim in current_weights:
854
+ if current_weights[dim] < 0.02:
855
+ current_weights[dim] = 0.02
856
+
857
+ # Final normalization
858
+ total = sum(current_weights.values())
859
+ if total > 0 and abs(total - 1.0) > 0.001:
860
+ current_weights = {k: round(v / total, 4) for k, v in current_weights.items()}
861
+
862
+ _audit(
863
+ "innovation.calibrate",
864
+ "innovation-agent",
865
+ "Recalibrated scoring weights",
866
+ {
867
+ "old_weights": old_weights,
868
+ "new_weights": current_weights,
869
+ "adjustments": adjustments,
870
+ "data_points": len(completed_signals),
871
+ },
872
+ )
873
+
874
+ return {
875
+ "calibrated": True,
876
+ "old_weights": old_weights,
877
+ "new_weights": current_weights,
878
+ "adjustments": adjustments,
879
+ "data_points": len(completed_signals),
880
+ "calibrated_at": _now(),
881
+ "note": "Weights computed but NOT persisted to YAML. "
882
+ "Review adjustments and update args/innovation_config.yaml manually.",
883
+ }
884
+
885
+ finally:
886
+ conn.close()
887
+
888
+
889
+ # =========================================================================
890
+ # CLI
891
+ # =========================================================================
892
+ def main():
893
+ parser = argparse.ArgumentParser(
894
+ description="ICDEV Innovation Scoring Engine — score and rank innovation signals"
895
+ )
896
+ parser.add_argument("--json", action="store_true", help="JSON output")
897
+ parser.add_argument(
898
+ "--db-path", type=Path, default=None, help="Database path override"
899
+ )
900
+
901
+ group = parser.add_mutually_exclusive_group(required=True)
902
+ group.add_argument("--score", action="store_true", help="Score a single signal")
903
+ group.add_argument("--score-all", action="store_true", help="Score all new signals")
904
+ group.add_argument("--top", action="store_true", help="Get top-scored signals")
905
+ group.add_argument(
906
+ "--calibrate", action="store_true", help="Recalibrate weights from feedback"
907
+ )
908
+
909
+ parser.add_argument(
910
+ "--signal-id", type=str, help="Signal ID to score (with --score)"
911
+ )
912
+ parser.add_argument(
913
+ "--limit", type=int, default=20, help="Max signals to return (with --top)"
914
+ )
915
+ parser.add_argument(
916
+ "--min-score",
917
+ type=float,
918
+ default=0.5,
919
+ help="Minimum score threshold (with --top)",
920
+ )
921
+
922
+ args = parser.parse_args()
923
+
924
+ try:
925
+ if args.score:
926
+ if not args.signal_id:
927
+ parser.error("--score requires --signal-id")
928
+ result = score_signal(args.signal_id, db_path=args.db_path)
929
+ elif args.score_all:
930
+ result = score_all_new(db_path=args.db_path)
931
+ elif args.top:
932
+ result = get_top_signals(
933
+ limit=args.limit, min_score=args.min_score, db_path=args.db_path
934
+ )
935
+ elif args.calibrate:
936
+ result = calibrate_weights(db_path=args.db_path)
937
+ else:
938
+ result = {"error": "No action specified"}
939
+
940
+ if args.json:
941
+ print(json.dumps(result, indent=2, default=str))
942
+ else:
943
+ _print_human(args, result)
944
+
945
+ except FileNotFoundError as e:
946
+ error = {"error": str(e), "hint": "Run: python tools/db/init_icdev_db.py"}
947
+ if args.json:
948
+ print(json.dumps(error, indent=2))
949
+ else:
950
+ print(f"ERROR: {e}", file=sys.stderr)
951
+ sys.exit(1)
952
+ except ValueError as e:
953
+ error = {"error": str(e)}
954
+ if args.json:
955
+ print(json.dumps(error, indent=2))
956
+ else:
957
+ print(f"ERROR: {e}", file=sys.stderr)
958
+ sys.exit(1)
959
+ except Exception as e:
960
+ error = {"error": str(e)}
961
+ if args.json:
962
+ print(json.dumps(error, indent=2))
963
+ else:
964
+ print(f"ERROR: {e}", file=sys.stderr)
965
+ sys.exit(1)
966
+
967
+
968
+ def _print_human(args, result):
969
+ """Print human-readable output for each command."""
970
+ if args.score:
971
+ print(f"Signal: {result.get('signal_id', '')}")
972
+ print(f"Title: {result.get('title', '')}")
973
+ print(f"Source: {result.get('source', '')}")
974
+ print(f"Category: {result.get('category', '')}")
975
+ print(f"Score: {result.get('score', 0):.4f} [{result.get('threshold_band', '')}]")
976
+ print(f"Status: {result.get('status', '')}")
977
+ print("Dimensions:")
978
+ for dim, val in result.get("dimensions", {}).items():
979
+ weight = result.get("weights_used", {}).get(dim, 0)
980
+ bar = "#" * int(val * 20)
981
+ print(f" {dim:25s} {val:.4f} (w={weight:.2f}) |{bar:<20s}|")
982
+
983
+ elif args.score_all:
984
+ print(f"Batch scoring completed at {result.get('scored_at', '')}")
985
+ print(f" New signals found: {result.get('total_new', 0)}")
986
+ print(f" Successfully scored: {result.get('scored', 0)}")
987
+ print(f" Errors: {result.get('errors', 0)}")
988
+ dist = result.get("score_distribution", {})
989
+ print("Score distribution:")
990
+ print(f" auto_queue (>=0.80): {dist.get('auto_queue', 0)}")
991
+ print(f" suggest (>=0.50): {dist.get('suggest', 0)}")
992
+ print(f" log_only (<0.50): {dist.get('log_only', 0)}")
993
+ if result.get("error_details"):
994
+ print("Errors:")
995
+ for err in result["error_details"][:5]:
996
+ print(f" {err['signal_id']}: {err['error']}")
997
+
998
+ elif args.top:
999
+ print(f"Top Innovation Signals (min_score={result.get('query', {}).get('min_score', 0.5)}):")
1000
+ print(f" Total scored: {result.get('total_scored', 0)}")
1001
+ print(f" Average score: {result.get('average_score', 0):.4f}")
1002
+ print(f" Showing: {result.get('count', 0)} signals")
1003
+ print()
1004
+ for i, sig in enumerate(result.get("signals", []), 1):
1005
+ score = sig.get("score", 0) or 0
1006
+ print(f" {i:2d}. [{score:.4f}] {sig.get('title', '')[:70]}")
1007
+ print(f" Source: {sig.get('source', '')} | Status: {sig.get('status', '')}")
1008
+ breakdown = sig.get("score_breakdown", {})
1009
+ dims = breakdown.get("dimensions", {})
1010
+ if dims:
1011
+ dim_str = " ".join(f"{k[:8]}={v:.2f}" for k, v in dims.items())
1012
+ print(f" {dim_str}")
1013
+ print()
1014
+
1015
+ elif args.calibrate:
1016
+ if result.get("calibrated"):
1017
+ print(f"Weights recalibrated at {result.get('calibrated_at', '')}")
1018
+ print(f"Data points used: {result.get('data_points', 0)}")
1019
+ print()
1020
+ print(f" {'Dimension':<25s} {'Old':>8s} {'New':>8s} {'Direction':>12s}")
1021
+ print(f" {'-' * 55}")
1022
+ old_w = result.get("old_weights", {})
1023
+ new_w = result.get("new_weights", {})
1024
+ for dim in DEFAULT_WEIGHTS:
1025
+ adj = result.get("adjustments", {}).get(dim, {})
1026
+ direction = adj.get("direction", "unchanged")
1027
+ print(
1028
+ f" {dim:<25s} {old_w.get(dim, 0):>8.4f} {new_w.get(dim, 0):>8.4f} {direction:>12s}"
1029
+ )
1030
+ print()
1031
+ print(f"NOTE: {result.get('note', '')}")
1032
+ else:
1033
+ print(f"Calibration skipped: {result.get('reason', 'unknown')}")
1034
+ print(f"Data points available: {result.get('data_points', 0)}")
1035
+
1036
+
1037
+ if __name__ == "__main__":
1038
+ main()