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,1016 @@
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
+ """Document upload and requirements extraction tool.
8
+
9
+ Uploads DoD documents (SOW, CDD, CONOPS, SRD, SRS, etc.) and images
10
+ (whiteboard photos, wireframe screenshots, architecture diagrams), extracts
11
+ text content using regex or vision LLM fallback, and identifies requirement
12
+ statements using shall/must/should/will patterns.
13
+
14
+ Supports PDF (with page-by-page vision fallback for scanned docs), DOCX,
15
+ TXT, MD, and image formats (PNG, JPG, GIF, WebP) with graceful fallback
16
+ for optional dependencies.
17
+
18
+ Usage:
19
+ # Upload a document
20
+ python tools/requirements/document_extractor.py --session-id sess-abc \\
21
+ --upload --file-path /path/to/sow.pdf --document-type sow --json
22
+
23
+ # Upload an image (whiteboard photo, wireframe, etc.)
24
+ python tools/requirements/document_extractor.py --session-id sess-abc \\
25
+ --upload --file-path /path/to/whiteboard.png --document-type other --json
26
+
27
+ # Extract requirements from an uploaded document
28
+ python tools/requirements/document_extractor.py --document-id doc-abc \\
29
+ --extract --json
30
+
31
+ # Classify an uploaded image document
32
+ python tools/requirements/document_extractor.py --document-id doc-abc \\
33
+ --classify --json
34
+
35
+ # List all documents for a session
36
+ python tools/requirements/document_extractor.py --session-id sess-abc \\
37
+ --list --json
38
+ """
39
+
40
+ import argparse
41
+ import base64
42
+ import hashlib
43
+ import json
44
+ import logging
45
+ import os
46
+ import re
47
+ import sqlite3
48
+ import sys
49
+ import uuid
50
+ from datetime import datetime
51
+ from pathlib import Path
52
+ from icdev._paths import get_project_root
53
+
54
+ BASE_DIR = get_project_root()
55
+ if str(BASE_DIR) not in sys.path:
56
+ sys.path.insert(0, str(BASE_DIR))
57
+
58
+ DB_PATH = Path(os.environ.get("ICDEV_DB_PATH", str(BASE_DIR / "data" / "icdev.db")))
59
+
60
+ logger = logging.getLogger("icdev.requirements.document_extractor")
61
+
62
+ # Image extensions supported for direct upload
63
+ IMAGE_EXTENSIONS = {".png", ".jpg", ".jpeg", ".gif", ".webp", ".tiff", ".bmp"}
64
+
65
+ try:
66
+ from icdev.tools.audit.audit_logger import log_event
67
+ _HAS_AUDIT = True
68
+ except ImportError:
69
+ _HAS_AUDIT = False
70
+ def log_event(**kwargs): return -1
71
+
72
+
73
+ def _get_connection(db_path=None):
74
+ """Get database connection with dict-like row access."""
75
+ path = db_path or DB_PATH
76
+ if not path.exists():
77
+ raise FileNotFoundError(
78
+ f"Database not found: {path}\nRun: python tools/db/init_icdev_db.py"
79
+ )
80
+ conn = sqlite3.connect(str(path))
81
+ conn.row_factory = sqlite3.Row
82
+ return conn
83
+
84
+
85
+ def _generate_id(prefix="doc"):
86
+ """Generate a unique ID with prefix."""
87
+ return f"{prefix}-{uuid.uuid4().hex[:12]}"
88
+
89
+
90
+ # ---------------------------------------------------------------------------
91
+ # File reading helpers
92
+ # ---------------------------------------------------------------------------
93
+
94
+ def _compute_file_hash(file_path):
95
+ """Compute SHA-256 hash of file content."""
96
+ h = hashlib.sha256()
97
+ with open(file_path, "rb") as f:
98
+ for chunk in iter(lambda: f.read(8192), b""):
99
+ h.update(chunk)
100
+ return h.hexdigest()
101
+
102
+
103
+ # ---------------------------------------------------------------------------
104
+ # Vision-based extraction helpers
105
+ # ---------------------------------------------------------------------------
106
+
107
+ def _check_vision_available():
108
+ """Check if a vision-capable LLM is available for document extraction."""
109
+ try:
110
+ from icdev.tools.llm import get_router
111
+ router = get_router()
112
+ provider, model_id, model_cfg = router.get_provider_for_function("document_vision")
113
+ if provider is None:
114
+ return False, ""
115
+ return model_cfg.get("supports_vision", False), model_id
116
+ except Exception:
117
+ return False, ""
118
+
119
+
120
+ def _extract_text_from_image_via_vision(file_path):
121
+ """Extract text content from an image using a vision LLM.
122
+
123
+ Sends the image to a vision-capable model with a prompt to extract
124
+ all visible text, preserving structure and formatting.
125
+
126
+ Args:
127
+ file_path: Path to the image file.
128
+
129
+ Returns:
130
+ Extracted text string, or placeholder if vision unavailable.
131
+ """
132
+ p = Path(file_path)
133
+ available, model_id = _check_vision_available()
134
+ if not available:
135
+ return f"[Image file: {p.name} -- vision model not available for text extraction]"
136
+
137
+ try:
138
+ from icdev.tools.testing.screenshot_validator import encode_image
139
+ from icdev.tools.llm import get_router
140
+ from icdev.tools.llm.provider import LLMRequest
141
+
142
+ b64_data, media_type = encode_image(str(p))
143
+
144
+ user_content = [
145
+ {
146
+ "type": "image",
147
+ "source": {
148
+ "type": "base64",
149
+ "media_type": media_type,
150
+ "data": b64_data,
151
+ },
152
+ },
153
+ {
154
+ "type": "text",
155
+ "text": (
156
+ "Extract ALL text content from this document image. "
157
+ "Preserve structure, headings, bullet points, and numbered lists. "
158
+ "If this contains requirement statements (shall/must/should/will), "
159
+ "preserve them exactly. Output only the extracted text."
160
+ ),
161
+ },
162
+ ]
163
+
164
+ router = get_router()
165
+ request = LLMRequest(
166
+ messages=[{"role": "user", "content": user_content}],
167
+ system_prompt=(
168
+ "You are a document text extraction assistant for a DoD requirements "
169
+ "intake system. Extract all visible text from the provided image accurately. "
170
+ "Preserve document structure, headings, and formatting."
171
+ ),
172
+ max_tokens=4096,
173
+ temperature=0.1,
174
+ )
175
+
176
+ response = router.invoke("document_vision", request)
177
+ text = response.content.strip()
178
+ if text:
179
+ logger.info("Vision extracted %d chars from image %s", len(text), p.name)
180
+ return text
181
+ return f"[Image file: {p.name} -- vision model returned no text]"
182
+
183
+ except Exception as exc:
184
+ logger.warning("Vision text extraction failed for %s: %s", p.name, exc)
185
+ return f"[Image file: {p.name} -- vision extraction error: {exc}]"
186
+
187
+
188
+ def _extract_pdf_pages_via_vision(file_path):
189
+ """Extract text from PDF pages using vision LLM for pages with no text.
190
+
191
+ Iterates pages via pypdf. For each page, attempts text extraction first.
192
+ If a page yields no text (scanned/image-heavy), renders it and sends to
193
+ the vision model for OCR-like extraction.
194
+
195
+ Args:
196
+ file_path: Path to the PDF file.
197
+
198
+ Returns:
199
+ Concatenated text from all pages with page markers.
200
+ """
201
+ p = Path(file_path)
202
+ available, model_id = _check_vision_available()
203
+ if not available:
204
+ return f"[PDF file: {p.name} -- vision model not available for page extraction]"
205
+
206
+ try:
207
+ from pypdf import PdfReader
208
+ except ImportError:
209
+ return f"[PDF file: {p.name} -- requires pypdf for page-by-page extraction]"
210
+
211
+ try:
212
+ from icdev.tools.llm import get_router
213
+ from icdev.tools.llm.provider import LLMRequest
214
+ except ImportError as exc:
215
+ return f"[PDF file: {p.name} -- vision dependencies not available: {exc}]"
216
+
217
+ reader = PdfReader(str(p))
218
+ all_pages = []
219
+ vision_pages_used = 0
220
+
221
+ for i, page in enumerate(reader.pages):
222
+ page_num = i + 1
223
+ text = page.extract_text() or ""
224
+
225
+ if len(text.strip()) >= 50:
226
+ # Sufficient text extracted directly
227
+ all_pages.append(f"--- Page {page_num} ---\n{text.strip()}")
228
+ continue
229
+
230
+ # Page has no/little text — try vision extraction via page rendering
231
+ # Attempt to render page to image using pdf2image or fitz
232
+ page_image_b64 = None
233
+ media_type = "image/png"
234
+
235
+ try:
236
+ # Try pdf2image (poppler-based)
237
+ from pdf2image import convert_from_path
238
+ images = convert_from_path(
239
+ str(p), first_page=page_num, last_page=page_num, dpi=200,
240
+ )
241
+ if images:
242
+ import io
243
+ buf = io.BytesIO()
244
+ images[0].save(buf, format="PNG")
245
+ page_image_b64 = base64.b64encode(buf.getvalue()).decode("utf-8")
246
+ except ImportError:
247
+ pass
248
+ except Exception as exc:
249
+ logger.debug("pdf2image failed for page %d: %s", page_num, exc)
250
+
251
+ if page_image_b64 is None:
252
+ # No rendering library available — use whatever text we got
253
+ if text.strip():
254
+ all_pages.append(f"--- Page {page_num} ---\n{text.strip()}")
255
+ else:
256
+ all_pages.append(
257
+ f"--- Page {page_num} ---\n"
258
+ f"[No text extractable; pdf2image required for vision fallback]"
259
+ )
260
+ continue
261
+
262
+ # Send rendered page image to vision model
263
+ try:
264
+ user_content = [
265
+ {
266
+ "type": "image",
267
+ "source": {
268
+ "type": "base64",
269
+ "media_type": media_type,
270
+ "data": page_image_b64,
271
+ },
272
+ },
273
+ {
274
+ "type": "text",
275
+ "text": (
276
+ f"Extract ALL text from this PDF page (page {page_num}). "
277
+ "Preserve structure, headings, tables, and bullet points. "
278
+ "Output only the extracted text."
279
+ ),
280
+ },
281
+ ]
282
+
283
+ router = get_router()
284
+ request = LLMRequest(
285
+ messages=[{"role": "user", "content": user_content}],
286
+ system_prompt=(
287
+ "You are a document OCR assistant. Extract all text from "
288
+ "the provided page image accurately."
289
+ ),
290
+ max_tokens=4096,
291
+ temperature=0.1,
292
+ )
293
+
294
+ response = router.invoke("document_vision", request)
295
+ page_text = response.content.strip()
296
+ if page_text:
297
+ all_pages.append(f"--- Page {page_num} (vision) ---\n{page_text}")
298
+ vision_pages_used += 1
299
+ else:
300
+ all_pages.append(f"--- Page {page_num} ---\n[Vision returned no text]")
301
+ except Exception as exc:
302
+ logger.warning("Vision extraction failed for page %d: %s", page_num, exc)
303
+ all_pages.append(
304
+ f"--- Page {page_num} ---\n[Vision extraction error: {exc}]"
305
+ )
306
+
307
+ if vision_pages_used > 0:
308
+ logger.info(
309
+ "PDF %s: %d pages, %d required vision extraction",
310
+ p.name, len(reader.pages), vision_pages_used,
311
+ )
312
+
313
+ if all_pages:
314
+ return "\n\n".join(all_pages)
315
+ return f"[PDF file: {p.name} -- no content extracted from any page]"
316
+
317
+
318
+ def _classify_image(file_path):
319
+ """Classify an uploaded image using a vision LLM.
320
+
321
+ Determines if the image is a whiteboard, diagram, wireframe, screenshot,
322
+ form, table, flowchart, network diagram, architecture diagram, or other.
323
+
324
+ Args:
325
+ file_path: Path to the image file.
326
+
327
+ Returns:
328
+ dict with {category, confidence, description} or None if unavailable.
329
+ """
330
+ available, model_id = _check_vision_available()
331
+ if not available:
332
+ return None
333
+
334
+ try:
335
+ from icdev.tools.testing.screenshot_validator import encode_image
336
+ from icdev.tools.llm import get_router
337
+ from icdev.tools.llm.provider import LLMRequest
338
+
339
+ b64_data, media_type = encode_image(str(file_path))
340
+
341
+ user_content = [
342
+ {
343
+ "type": "image",
344
+ "source": {
345
+ "type": "base64",
346
+ "media_type": media_type,
347
+ "data": b64_data,
348
+ },
349
+ },
350
+ {
351
+ "type": "text",
352
+ "text": (
353
+ "Classify this image into exactly ONE category from the list: "
354
+ "whiteboard, diagram, wireframe, screenshot, form, table, "
355
+ "flowchart, network_diagram, architecture_diagram, "
356
+ "handwritten_notes, other. "
357
+ "Respond with EXACTLY this JSON (no markdown, no extra text): "
358
+ '{"category": "string", "confidence": 0.0-1.0, '
359
+ '"description": "brief description of what the image shows"}'
360
+ ),
361
+ },
362
+ ]
363
+
364
+ router = get_router()
365
+ request = LLMRequest(
366
+ messages=[{"role": "user", "content": user_content}],
367
+ system_prompt=(
368
+ "You are an image classifier for a DoD document intake system. "
369
+ "Classify images accurately into the requested categories."
370
+ ),
371
+ max_tokens=256,
372
+ temperature=0.1,
373
+ )
374
+
375
+ response = router.invoke("document_vision", request)
376
+ text = response.content.strip()
377
+
378
+ # Strip markdown fences
379
+ if text.startswith("```"):
380
+ lines = text.splitlines()
381
+ if lines[0].startswith("```"):
382
+ lines = lines[1:]
383
+ if lines and lines[-1].strip() == "```":
384
+ lines = lines[:-1]
385
+ text = "\n".join(lines).strip()
386
+
387
+ result = json.loads(text)
388
+ return {
389
+ "category": str(result.get("category", "other")),
390
+ "confidence": float(result.get("confidence", 0.0)),
391
+ "description": str(result.get("description", "")),
392
+ }
393
+
394
+ except (json.JSONDecodeError, ValueError) as exc:
395
+ logger.debug("Image classification JSON parse failed: %s", exc)
396
+ return {"category": "other", "confidence": 0.3, "description": "Classification uncertain"}
397
+ except Exception as exc:
398
+ logger.warning("Image classification failed: %s", exc)
399
+ return None
400
+
401
+
402
+ def classify_document(document_id, db_path=None):
403
+ """Classify an uploaded image document using vision LLM.
404
+
405
+ Args:
406
+ document_id: ID of the uploaded document.
407
+ db_path: Optional DB path override.
408
+
409
+ Returns:
410
+ dict with classification result.
411
+ """
412
+ conn = _get_connection(db_path)
413
+ doc = conn.execute(
414
+ "SELECT * FROM intake_documents WHERE id = ?", (document_id,)
415
+ ).fetchone()
416
+ if not doc:
417
+ conn.close()
418
+ raise ValueError(f"Document '{document_id}' not found.")
419
+
420
+ doc_data = dict(doc)
421
+ file_path = doc_data["file_path"]
422
+ p = Path(file_path)
423
+
424
+ if p.suffix.lower() not in IMAGE_EXTENSIONS:
425
+ conn.close()
426
+ return {
427
+ "status": "skipped",
428
+ "document_id": document_id,
429
+ "reason": f"Not an image file: {p.suffix}",
430
+ }
431
+
432
+ classification = _classify_image(file_path)
433
+ if classification is None:
434
+ conn.close()
435
+ return {
436
+ "status": "skipped",
437
+ "document_id": document_id,
438
+ "reason": "Vision model not available for classification",
439
+ }
440
+
441
+ # Store classification in extracted_sections column
442
+ conn.execute(
443
+ "UPDATE intake_documents SET extracted_sections = ? WHERE id = ?",
444
+ (json.dumps(classification), document_id),
445
+ )
446
+ conn.commit()
447
+ conn.close()
448
+
449
+ return {
450
+ "status": "ok",
451
+ "document_id": document_id,
452
+ "classification": classification,
453
+ }
454
+
455
+
456
+ # ---------------------------------------------------------------------------
457
+ # File reading helpers
458
+ # ---------------------------------------------------------------------------
459
+
460
+ def _read_file_content(file_path):
461
+ """Read text content from a file.
462
+
463
+ Supports .txt, .md (direct read), .pdf (pypdf with vision fallback),
464
+ .docx (python-docx with fallback), image files (vision extraction),
465
+ and other text files.
466
+ """
467
+ p = Path(file_path)
468
+ suffix = p.suffix.lower()
469
+
470
+ if suffix in (".txt", ".md"):
471
+ return p.read_text(encoding="utf-8")
472
+
473
+ elif suffix == ".pdf":
474
+ # Try pypdf (PyPDF2 successor)
475
+ try:
476
+ from pypdf import PdfReader
477
+ reader = PdfReader(str(p))
478
+ pages = []
479
+ for page in reader.pages:
480
+ text = page.extract_text()
481
+ if text:
482
+ pages.append(text)
483
+ if pages:
484
+ return "\n\n".join(pages)
485
+ # No text found — try vision-based page extraction
486
+ logger.info("PDF %s has no extractable text, trying vision fallback", p.name)
487
+ vision_result = _extract_pdf_pages_via_vision(str(p))
488
+ if not vision_result.startswith("[PDF file:"):
489
+ return vision_result
490
+ return f"[PDF file: {p.name} -- no extractable text found]"
491
+ except ImportError:
492
+ return (
493
+ f"[PDF file: {p.name} -- requires pypdf library. "
494
+ f"Install with: pip install pypdf]"
495
+ )
496
+ except Exception as exc:
497
+ return f"[PDF file: {p.name} -- extraction error: {exc}]"
498
+
499
+ elif suffix == ".docx":
500
+ # Try python-docx
501
+ try:
502
+ from docx import Document
503
+ doc = Document(str(p))
504
+ paragraphs = [para.text for para in doc.paragraphs if para.text.strip()]
505
+ if paragraphs:
506
+ return "\n\n".join(paragraphs)
507
+ return f"[DOCX file: {p.name} -- no extractable text found]"
508
+ except ImportError:
509
+ return (
510
+ f"[DOCX file: {p.name} -- requires python-docx library. "
511
+ f"Install with: pip install python-docx]"
512
+ )
513
+ except Exception as exc:
514
+ return f"[DOCX file: {p.name} -- extraction error: {exc}]"
515
+
516
+ elif suffix in IMAGE_EXTENSIONS:
517
+ # Image file — use vision LLM for text extraction
518
+ return _extract_text_from_image_via_vision(str(p))
519
+
520
+ else:
521
+ # Attempt generic text read
522
+ try:
523
+ return p.read_text(encoding="utf-8")
524
+ except UnicodeDecodeError:
525
+ return f"[Binary file: {p.name} -- unable to read as text]"
526
+
527
+
528
+ # ---------------------------------------------------------------------------
529
+ # Requirement extraction logic
530
+ # ---------------------------------------------------------------------------
531
+
532
+ # Requirement type detection keywords
533
+ _REQ_TYPE_KEYWORDS = {
534
+ "security": [
535
+ "authenticate", "authorize", "encrypt", "cac", "piv", "mfa",
536
+ "fips", "stig", "access control", "audit log", "credential",
537
+ "certificate", "pki", "rbac", "permission", "classification",
538
+ "clearance", "password", "token", "session timeout",
539
+ ],
540
+ "performance": [
541
+ "response time", "latency", "throughput", "concurrent",
542
+ "availability", "uptime", "sla", "load", "capacity",
543
+ "transactions per second", "bandwidth", "millisecond",
544
+ ],
545
+ "interface": [
546
+ "integrate", "interface", "api", "rest", "soap", "feed",
547
+ "import", "export", "connect", "external system", "third-party",
548
+ "web service", "message queue", "protocol",
549
+ ],
550
+ "data": [
551
+ "database", "data store", "retention", "backup", "archive",
552
+ "migrate data", "data format", "schema", "cui data",
553
+ "record", "table", "storage", "replication",
554
+ ],
555
+ "operational": [
556
+ "deployment", "install", "configure", "maintain", "monitor",
557
+ "support", "train", "operate", "documentation", "helpdesk",
558
+ "disaster recovery", "failover", "continuity",
559
+ ],
560
+ }
561
+
562
+
563
+ def _detect_requirement_type(text):
564
+ """Determine requirement type from keywords in text."""
565
+ lower = text.lower()
566
+ for rtype, keywords in _REQ_TYPE_KEYWORDS.items():
567
+ if any(kw in lower for kw in keywords):
568
+ return rtype
569
+ return "functional"
570
+
571
+
572
+ def _detect_priority(text):
573
+ """Determine priority based on modal verbs.
574
+
575
+ shall/must -> P1 (critical)
576
+ should -> P2 (high)
577
+ will/may -> P3 (medium)
578
+ """
579
+ lower = text.lower()
580
+ if any(kw in lower for kw in ["shall", "must", "is required to"]):
581
+ return "critical"
582
+ elif "should" in lower:
583
+ return "high"
584
+ elif any(kw in lower for kw in ["will", "may", "can"]):
585
+ return "medium"
586
+ return "medium"
587
+
588
+
589
+ def _extract_requirement_sentences(text):
590
+ """Extract sentences that contain requirement indicator keywords.
591
+
592
+ Matches:
593
+ - "shall" statements (mandatory)
594
+ - "must" statements (mandatory)
595
+ - "should" statements (desired)
596
+ - "will" statements (intent)
597
+ """
598
+ # Split into sentences
599
+ sentences = re.split(r'(?<=[.!?])\s+', text.replace("\n", " "))
600
+ requirements = []
601
+
602
+ requirement_patterns = [
603
+ re.compile(r'\bshall\b', re.IGNORECASE),
604
+ re.compile(r'\bmust\b', re.IGNORECASE),
605
+ re.compile(r'\bshould\b', re.IGNORECASE),
606
+ re.compile(r'\bwill\b', re.IGNORECASE),
607
+ ]
608
+
609
+ for sentence in sentences:
610
+ sentence = sentence.strip()
611
+ if len(sentence) < 10:
612
+ continue
613
+
614
+ for pattern in requirement_patterns:
615
+ if pattern.search(sentence):
616
+ req_type = _detect_requirement_type(sentence)
617
+ priority = _detect_priority(sentence)
618
+ requirements.append({
619
+ "raw_text": sentence,
620
+ "requirement_type": req_type,
621
+ "priority": priority,
622
+ })
623
+ break # Only match once per sentence
624
+
625
+ return requirements
626
+
627
+
628
+ # ---------------------------------------------------------------------------
629
+ # Core functions
630
+ # ---------------------------------------------------------------------------
631
+
632
+ def upload_document(session_id, file_path, document_type, db_path=None):
633
+ """Upload a document for requirement extraction.
634
+
635
+ Args:
636
+ session_id: Intake session ID.
637
+ file_path: Path to the document file.
638
+ document_type: One of sow, cdd, conops, srd, srs, other.
639
+ db_path: Optional DB path override.
640
+
641
+ Returns:
642
+ dict with document_id, session_id, file metadata, and status.
643
+ """
644
+ p = Path(file_path)
645
+ if not p.exists():
646
+ raise FileNotFoundError(f"File not found: {file_path}")
647
+
648
+ conn = _get_connection(db_path)
649
+
650
+ # Verify session exists
651
+ session = conn.execute(
652
+ "SELECT * FROM intake_sessions WHERE id = ?", (session_id,)
653
+ ).fetchone()
654
+ if not session:
655
+ conn.close()
656
+ raise ValueError(f"Session '{session_id}' not found.")
657
+
658
+ session_data = dict(session)
659
+
660
+ # Compute file metadata
661
+ doc_id = _generate_id("doc")
662
+ file_hash = _compute_file_hash(file_path)
663
+ file_size = p.stat().st_size
664
+ file_name = p.name
665
+
666
+ # MIME type mapping
667
+ mime_map = {
668
+ ".pdf": "application/pdf",
669
+ ".docx": "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
670
+ ".doc": "application/msword",
671
+ ".txt": "text/plain",
672
+ ".md": "text/markdown",
673
+ ".png": "image/png",
674
+ ".jpg": "image/jpeg",
675
+ ".jpeg": "image/jpeg",
676
+ ".gif": "image/gif",
677
+ ".webp": "image/webp",
678
+ ".tiff": "image/tiff",
679
+ ".bmp": "image/bmp",
680
+ }
681
+ mime_type = mime_map.get(p.suffix.lower(), "application/octet-stream")
682
+
683
+ # Read raw text for storage
684
+ _read_file_content(file_path)
685
+
686
+ # Auto-classify images at upload time
687
+ image_classification = None
688
+ if p.suffix.lower() in IMAGE_EXTENSIONS:
689
+ image_classification = _classify_image(file_path)
690
+
691
+ # Map document_type for DB constraint compatibility
692
+ # DB allows: sow, cdd, conops, srd, icd, ssp, use_case, brd, urd, rfp, rfi, other
693
+ # Spec allows: sow, cdd, conops, srd, srs, other
694
+ # Map srs -> other if not in DB constraint
695
+ db_doc_type = document_type if document_type != "srs" else "other"
696
+
697
+ extracted_sections = None
698
+ if image_classification:
699
+ extracted_sections = json.dumps(image_classification)
700
+
701
+ conn.execute(
702
+ """INSERT INTO intake_documents
703
+ (id, session_id, document_type, file_name, file_path, file_hash,
704
+ file_size_bytes, mime_type, extraction_status, extracted_sections,
705
+ extracted_requirements_count, classification, uploaded_at)
706
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, 'pending', ?, 0, 'CUI', ?)""",
707
+ (
708
+ doc_id, session_id, db_doc_type, file_name, str(p.resolve()),
709
+ file_hash, file_size, mime_type, extracted_sections,
710
+ datetime.now().isoformat(),
711
+ ),
712
+ )
713
+ conn.commit()
714
+ conn.close()
715
+
716
+ if _HAS_AUDIT:
717
+ log_event(
718
+ event_type="document_uploaded",
719
+ actor="icdev-requirements-analyst",
720
+ action=f"Uploaded {document_type.upper()} document: {file_name}",
721
+ project_id=session_data.get("project_id"),
722
+ details={
723
+ "session_id": session_id,
724
+ "document_id": doc_id,
725
+ "file_name": file_name,
726
+ "file_hash": file_hash,
727
+ },
728
+ )
729
+
730
+ result = {
731
+ "document_id": doc_id,
732
+ "session_id": session_id,
733
+ "file_path": str(p.resolve()),
734
+ "file_hash": file_hash,
735
+ "file_size": file_size,
736
+ "status": "uploaded",
737
+ }
738
+ if image_classification:
739
+ result["image_classification"] = image_classification
740
+ return result
741
+
742
+
743
+ def extract_requirements(document_id, db_path=None):
744
+ """Extract requirement statements from an uploaded document.
745
+
746
+ Reads the document text from intake_documents, identifies requirement
747
+ sentences using shall/must/should/will patterns, classifies each by
748
+ type and priority, and inserts into intake_requirements.
749
+
750
+ Args:
751
+ document_id: ID of the uploaded document.
752
+ db_path: Optional DB path override.
753
+
754
+ Returns:
755
+ dict with document_id, count of requirements extracted, requirement
756
+ list, and breakdowns by type and priority.
757
+ """
758
+ conn = _get_connection(db_path)
759
+
760
+ # Load document
761
+ doc = conn.execute(
762
+ "SELECT * FROM intake_documents WHERE id = ?", (document_id,)
763
+ ).fetchone()
764
+ if not doc:
765
+ conn.close()
766
+ raise ValueError(f"Document '{document_id}' not found.")
767
+
768
+ doc_data = dict(doc)
769
+ session_id = doc_data["session_id"]
770
+ file_path = doc_data["file_path"]
771
+
772
+ # Update status to extracting
773
+ conn.execute(
774
+ "UPDATE intake_documents SET extraction_status = 'extracting' WHERE id = ?",
775
+ (document_id,),
776
+ )
777
+ conn.commit()
778
+
779
+ # Read file content
780
+ raw_text = _read_file_content(file_path)
781
+
782
+ # Extract requirement sentences
783
+ extracted_stmts = _extract_requirement_sentences(raw_text)
784
+
785
+ # Insert each requirement into intake_requirements
786
+ inserted_reqs = []
787
+ by_type = {}
788
+ by_priority = {}
789
+
790
+ for stmt in extracted_stmts:
791
+ req_id = f"req-{uuid.uuid4().hex[:12]}"
792
+ raw = stmt["raw_text"]
793
+ req_type = stmt["requirement_type"]
794
+ priority = stmt["priority"]
795
+
796
+ conn.execute(
797
+ """INSERT INTO intake_requirements
798
+ (id, session_id, raw_text, refined_text, requirement_type,
799
+ priority, source_document, clarity_score,
800
+ gaps, acceptance_criteria, status, classification, created_at)
801
+ VALUES (?, ?, ?, ?, ?, ?, ?, 0.5, NULL, NULL, 'draft', 'CUI', ?)""",
802
+ (
803
+ req_id, session_id, raw, raw, req_type,
804
+ priority, document_id, datetime.now().isoformat(),
805
+ ),
806
+ )
807
+
808
+ inserted_reqs.append({
809
+ "id": req_id,
810
+ "raw_text": raw,
811
+ "requirement_type": req_type,
812
+ "priority": priority,
813
+ "source": "document",
814
+ "source_reference": document_id,
815
+ })
816
+
817
+ # Count by type
818
+ by_type[req_type] = by_type.get(req_type, 0) + 1
819
+ # Count by priority
820
+ by_priority[priority] = by_priority.get(priority, 0) + 1
821
+
822
+ # Update document: extraction complete
823
+ conn.execute(
824
+ """UPDATE intake_documents
825
+ SET extraction_status = 'extracted', extracted_requirements_count = ?
826
+ WHERE id = ?""",
827
+ (len(inserted_reqs), document_id),
828
+ )
829
+
830
+ # Update session total requirement count
831
+ total_count = conn.execute(
832
+ "SELECT COUNT(*) as cnt FROM intake_requirements WHERE session_id = ?",
833
+ (session_id,),
834
+ ).fetchone()["cnt"]
835
+ conn.execute(
836
+ "UPDATE intake_sessions SET total_requirements = ?, updated_at = ? WHERE id = ?",
837
+ (total_count, datetime.now().isoformat(), session_id),
838
+ )
839
+
840
+ conn.commit()
841
+ conn.close()
842
+
843
+ if _HAS_AUDIT:
844
+ log_event(
845
+ event_type="document_extracted",
846
+ actor="icdev-requirements-analyst",
847
+ action=f"Extracted {len(inserted_reqs)} requirements from document {document_id}",
848
+ details={
849
+ "document_id": document_id,
850
+ "session_id": session_id,
851
+ "count": len(inserted_reqs),
852
+ "by_type": by_type,
853
+ },
854
+ )
855
+
856
+ return {
857
+ "status": "ok",
858
+ "document_id": document_id,
859
+ "requirements_extracted": len(inserted_reqs),
860
+ "requirements": inserted_reqs,
861
+ "by_type": by_type,
862
+ "by_priority": by_priority,
863
+ }
864
+
865
+
866
+ def list_documents(session_id, db_path=None):
867
+ """List all documents uploaded to a session.
868
+
869
+ Args:
870
+ session_id: Intake session ID.
871
+ db_path: Optional DB path override.
872
+
873
+ Returns:
874
+ dict with session_id and list of document records.
875
+ """
876
+ conn = _get_connection(db_path)
877
+
878
+ session = conn.execute(
879
+ "SELECT * FROM intake_sessions WHERE id = ?", (session_id,)
880
+ ).fetchone()
881
+ if not session:
882
+ conn.close()
883
+ raise ValueError(f"Session '{session_id}' not found.")
884
+
885
+ rows = conn.execute(
886
+ "SELECT * FROM intake_documents WHERE session_id = ? ORDER BY uploaded_at",
887
+ (session_id,),
888
+ ).fetchall()
889
+ documents = [dict(r) for r in rows]
890
+ conn.close()
891
+
892
+ return {
893
+ "status": "ok",
894
+ "session_id": session_id,
895
+ "total_documents": len(documents),
896
+ "documents": documents,
897
+ }
898
+
899
+
900
+ # ---------------------------------------------------------------------------
901
+ # CLI
902
+ # ---------------------------------------------------------------------------
903
+
904
+ def main():
905
+ parser = argparse.ArgumentParser(
906
+ description="ICDEV Document Requirements Extractor"
907
+ )
908
+ parser.add_argument("--session-id", help="Intake session ID")
909
+ parser.add_argument("--document-id", help="Document ID (for extraction)")
910
+ parser.add_argument(
911
+ "--upload", action="store_true",
912
+ help="Upload a document",
913
+ )
914
+ parser.add_argument("--file-path", help="Path to the document file")
915
+ parser.add_argument(
916
+ "--document-type",
917
+ choices=["sow", "cdd", "conops", "srd", "srs", "other"],
918
+ default="other",
919
+ help="Type of the document",
920
+ )
921
+ parser.add_argument(
922
+ "--extract", action="store_true",
923
+ help="Extract requirements from an uploaded document",
924
+ )
925
+ parser.add_argument(
926
+ "--list", action="store_true",
927
+ help="List all documents for a session",
928
+ )
929
+ parser.add_argument(
930
+ "--classify", action="store_true",
931
+ help="Classify an uploaded image document using vision LLM",
932
+ )
933
+ parser.add_argument("--json", action="store_true", help="JSON output")
934
+ args = parser.parse_args()
935
+
936
+ try:
937
+ result = None
938
+
939
+ if args.upload and args.session_id and args.file_path:
940
+ # Upload document
941
+ result = upload_document(
942
+ args.session_id, args.file_path, args.document_type,
943
+ )
944
+
945
+ elif args.extract and args.document_id:
946
+ # Extract requirements from document
947
+ result = extract_requirements(args.document_id)
948
+
949
+ elif args.classify and args.document_id:
950
+ # Classify image document
951
+ result = classify_document(args.document_id)
952
+
953
+ elif args.list and args.session_id:
954
+ # List documents
955
+ result = list_documents(args.session_id)
956
+
957
+ else:
958
+ parser.print_help()
959
+ return
960
+
961
+ if args.json:
962
+ print(json.dumps(result, indent=2, default=str))
963
+ else:
964
+ if args.upload:
965
+ print(
966
+ f"Document uploaded: {result.get('document_id')} "
967
+ f"({result.get('file_size', 0)} bytes, "
968
+ f"hash: {result.get('file_hash', '?')[:12]}...)"
969
+ )
970
+ elif args.extract:
971
+ print(
972
+ f"Extracted {result.get('requirements_extracted', 0)} "
973
+ f"requirements from document {result.get('document_id')}"
974
+ )
975
+ by_type = result.get("by_type", {})
976
+ if by_type:
977
+ print(" By type: " + ", ".join(
978
+ f"{k}={v}" for k, v in sorted(by_type.items())
979
+ ))
980
+ by_priority = result.get("by_priority", {})
981
+ if by_priority:
982
+ print(" By priority: " + ", ".join(
983
+ f"{k}={v}" for k, v in sorted(by_priority.items())
984
+ ))
985
+ elif args.classify:
986
+ cls = result.get("classification", {})
987
+ if cls:
988
+ print(f"Image classification for {result.get('document_id')}:")
989
+ print(f" Category: {cls.get('category', '?')}")
990
+ print(f" Confidence: {cls.get('confidence', 0):.2f}")
991
+ print(f" Description: {cls.get('description', '')}")
992
+ else:
993
+ print(f"Classification: {result.get('reason', result.get('status', '?'))}")
994
+ elif args.list:
995
+ docs = result.get("documents", [])
996
+ print(f"Documents for session {args.session_id}: {len(docs)}")
997
+ for doc in docs:
998
+ print(
999
+ f" [{doc.get('document_type', '?').upper()}] "
1000
+ f"{doc.get('file_name', '?')} "
1001
+ f"({doc.get('extraction_status', '?')})"
1002
+ )
1003
+ else:
1004
+ print(json.dumps(result, indent=2, default=str))
1005
+
1006
+ except (ValueError, FileNotFoundError) as e:
1007
+ if args.json:
1008
+ print(json.dumps({"error": str(e)}, indent=2))
1009
+ else:
1010
+ print(f"Error: {e}")
1011
+ raise SystemExit(1)
1012
+
1013
+
1014
+ if __name__ == "__main__":
1015
+ main()
1016
+ # [TEMPLATE: CUI // SP-CTI]