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,1095 @@
1
+ #!/usr/bin/env python3
2
+ # CUI // SP-CTI
3
+ """Dashboard API: GovCon Intelligence — SAM.gov, requirement extraction,
4
+ capability mapping, AI drafting, compliance auto-population.
5
+
6
+ Bridges tools/govcon/ into the Proposal Writing Lifecycle Tracker
7
+ (tools/dashboard/api/proposals.py). Every endpoint wraps a GovCon tool
8
+ function and connects the output to the existing proposal pipeline.
9
+
10
+ Integration points:
11
+ sam_scanner.py → proposal_opportunities (auto-create from SAM.gov)
12
+ requirement_extractor → rfp_shall_statements (extract "shall" from opp)
13
+ capability_mapper → icdev_capability_map (score coverage per req)
14
+ compliance_populator → proposal_compliance_matrix (auto-populate L/M/N)
15
+ response_drafter → proposal_section_drafts (AI draft → human review)
16
+ gap_analyzer → innovation_signals (cross-register gaps)
17
+ knowledge_base → proposal_knowledge_base (reusable content blocks)
18
+ competitor_profiler → govcon_awards (vendor intelligence)
19
+ """
20
+
21
+ import json
22
+ import os
23
+ import sqlite3
24
+ import sys
25
+ import uuid
26
+ from datetime import datetime, timezone
27
+ from pathlib import Path
28
+
29
+ from flask import Blueprint, jsonify, request
30
+ from icdev._paths import get_project_root
31
+
32
+ BASE_DIR = get_project_root()
33
+ if str(BASE_DIR) not in sys.path:
34
+ sys.path.insert(0, str(BASE_DIR))
35
+
36
+ DB_PATH = Path(os.environ.get("ICDEV_DB_PATH", str(BASE_DIR / "data" / "icdev.db")))
37
+
38
+ govcon_api = Blueprint("govcon_api", __name__, url_prefix="/api/govcon")
39
+
40
+
41
+ def _get_db():
42
+ conn = sqlite3.connect(str(DB_PATH))
43
+ conn.row_factory = sqlite3.Row
44
+ conn.execute("PRAGMA journal_mode=WAL")
45
+ return conn
46
+
47
+
48
+ def _now():
49
+ return datetime.now(timezone.utc).isoformat()
50
+
51
+
52
+ def _uuid():
53
+ return str(uuid.uuid4())
54
+
55
+
56
+ def _audit(conn, action, details="", actor="govcon_api"):
57
+ """Append-only audit trail (NIST AU-2)."""
58
+ try:
59
+ conn.execute(
60
+ "INSERT INTO audit_trail (id, timestamp, event_type, actor, action, details, session_id) "
61
+ "VALUES (?, ?, ?, ?, ?, ?, ?)",
62
+ (_uuid(), _now(), "govcon.api", actor, action, details, "govcon"),
63
+ )
64
+ except Exception:
65
+ pass
66
+
67
+
68
+ # =====================================================================
69
+ # SAM.gov Sync → Proposal Opportunities
70
+ # =====================================================================
71
+
72
+ @govcon_api.route("/sam/scan", methods=["POST"])
73
+ def scan_sam_gov():
74
+ """POST /api/govcon/sam/scan — Trigger SAM.gov scanner.
75
+
76
+ Scans SAM.gov for opportunities matching configured NAICS codes.
77
+ Auto-creates proposal_opportunities for each new find.
78
+ """
79
+ try:
80
+ from icdev.tools.govcon.sam_scanner import scan_sam_gov as _scan_sam
81
+ data = request.get_json(silent=True) or {}
82
+ result = _scan_sam(
83
+ naics_filter=data.get("naics"),
84
+ )
85
+ return jsonify(result)
86
+ except Exception as e:
87
+ return jsonify({"error": str(e)}), 500
88
+
89
+
90
+ @govcon_api.route("/sam/opportunities", methods=["GET"])
91
+ def list_sam_opportunities():
92
+ """GET /api/govcon/sam/opportunities — List cached SAM.gov opportunities."""
93
+ conn = _get_db()
94
+ try:
95
+ naics = request.args.get("naics")
96
+ agency = request.args.get("agency")
97
+ active_only = request.args.get("active", "true").lower() == "true"
98
+
99
+ query = "SELECT * FROM sam_gov_opportunities WHERE 1=1"
100
+ params = []
101
+ if active_only:
102
+ query += " AND active = 1"
103
+ if naics:
104
+ query += " AND naics_code = ?"
105
+ params.append(naics)
106
+ if agency:
107
+ query += " AND agency LIKE ?"
108
+ params.append(f"%{agency}%")
109
+ query += " ORDER BY posted_date DESC LIMIT 100"
110
+
111
+ rows = conn.execute(query, params).fetchall()
112
+ opportunities = [dict(r) for r in rows]
113
+
114
+ # Enrich with linkage status
115
+ for opp in opportunities:
116
+ linked = conn.execute(
117
+ "SELECT id, status FROM proposal_opportunities WHERE solicitation_number = ?",
118
+ (opp.get("solicitation_number", ""),),
119
+ ).fetchone()
120
+ opp["linked_proposal_id"] = linked["id"] if linked else None
121
+ opp["linked_proposal_status"] = linked["status"] if linked else None
122
+
123
+ return jsonify({"opportunities": opportunities, "total": len(opportunities)})
124
+ finally:
125
+ conn.close()
126
+
127
+
128
+ @govcon_api.route("/sam/import/<sam_opp_id>", methods=["POST"])
129
+ def import_sam_to_proposal(sam_opp_id):
130
+ """POST /api/govcon/sam/import/<id> — Create proposal_opportunity from SAM.gov record.
131
+
132
+ Links sam_gov_opportunities → proposal_opportunities for full lifecycle tracking.
133
+ """
134
+ conn = _get_db()
135
+ try:
136
+ sam = conn.execute("SELECT * FROM sam_gov_opportunities WHERE id = ?", (sam_opp_id,)).fetchone()
137
+ if not sam:
138
+ return jsonify({"error": "SAM.gov opportunity not found"}), 404
139
+ sam = dict(sam)
140
+
141
+ # Check if already linked
142
+ existing = conn.execute(
143
+ "SELECT id FROM proposal_opportunities WHERE solicitation_number = ?",
144
+ (sam.get("solicitation_number", ""),),
145
+ ).fetchone()
146
+ if existing:
147
+ return jsonify({"error": "Already imported", "proposal_id": existing["id"]}), 409
148
+
149
+ # Create proposal_opportunity
150
+ prop_id = _uuid()
151
+ conn.execute(
152
+ """INSERT INTO proposal_opportunities
153
+ (id, solicitation_number, title, agency, sub_agency, due_date,
154
+ naics_code, set_aside_type, rfp_url, status, classification, created_at, updated_at)
155
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, 'intake', 'CUI', ?, ?)""",
156
+ (
157
+ prop_id,
158
+ sam.get("solicitation_number", ""),
159
+ sam.get("title", "Untitled"),
160
+ sam.get("agency", ""),
161
+ sam.get("agency_hierarchy", ""),
162
+ sam.get("response_deadline", ""),
163
+ sam.get("naics_code", ""),
164
+ sam.get("set_aside_type", ""),
165
+ sam.get("solicitation_number", ""), # use as rfp_url placeholder
166
+ _now(), _now(),
167
+ ),
168
+ )
169
+
170
+ # Link SAM record to proposal
171
+ conn.execute(
172
+ "UPDATE sam_gov_opportunities SET proposal_opportunity_id = ? WHERE id = ?",
173
+ (prop_id, sam_opp_id),
174
+ )
175
+
176
+ # Record status change
177
+ conn.execute(
178
+ "INSERT INTO proposal_status_history (entity_type, entity_id, old_status, new_status, changed_by, reason) "
179
+ "VALUES (?, ?, ?, ?, ?, ?)",
180
+ ("opportunity", prop_id, None, "intake", "govcon_api", f"Imported from SAM.gov: {sam_opp_id}"),
181
+ )
182
+
183
+ _audit(conn, "import_sam_opportunity", f"SAM {sam_opp_id} → Proposal {prop_id}")
184
+ conn.commit()
185
+
186
+ return jsonify({"status": "ok", "proposal_id": prop_id, "sam_opp_id": sam_opp_id})
187
+ finally:
188
+ conn.close()
189
+
190
+
191
+ # =====================================================================
192
+ # Requirement Extraction → rfp_shall_statements
193
+ # =====================================================================
194
+
195
+ @govcon_api.route("/opportunities/<opp_id>/extract-requirements", methods=["POST"])
196
+ def extract_requirements(opp_id):
197
+ """POST /api/govcon/opportunities/<id>/extract-requirements
198
+
199
+ Extract "shall/must/will" statements from the opportunity's RFP text.
200
+ Stores results in rfp_shall_statements and clusters into rfp_requirement_patterns.
201
+ """
202
+ try:
203
+ from icdev.tools.govcon.requirement_extractor import extract_and_store
204
+ result = extract_and_store(opp_id=opp_id)
205
+ return jsonify(result)
206
+ except Exception as e:
207
+ return jsonify({"error": str(e)}), 500
208
+
209
+
210
+ @govcon_api.route("/opportunities/<opp_id>/requirements", methods=["GET"])
211
+ def list_requirements(opp_id):
212
+ """GET /api/govcon/opportunities/<id>/requirements — List extracted shall statements."""
213
+ conn = _get_db()
214
+ try:
215
+ domain = request.args.get("domain")
216
+ query = """SELECT * FROM rfp_shall_statements
217
+ WHERE (sam_opportunity_id = ? OR proposal_opportunity_id = ?)"""
218
+ params = [opp_id, opp_id]
219
+ if domain:
220
+ query += " AND domain_category = ?"
221
+ params.append(domain)
222
+ query += " ORDER BY extracted_at DESC"
223
+
224
+ rows = conn.execute(query, params).fetchall()
225
+ statements = [dict(r) for r in rows]
226
+
227
+ # Domain summary
228
+ domains = {}
229
+ for s in statements:
230
+ d = s.get("domain_category", "other")
231
+ domains[d] = domains.get(d, 0) + 1
232
+
233
+ return jsonify({
234
+ "statements": statements,
235
+ "total": len(statements),
236
+ "by_domain": domains,
237
+ })
238
+ finally:
239
+ conn.close()
240
+
241
+
242
+ @govcon_api.route("/requirement-patterns", methods=["GET"])
243
+ def list_patterns():
244
+ """GET /api/govcon/requirement-patterns — List clustered requirement patterns."""
245
+ conn = _get_db()
246
+ try:
247
+ domain = request.args.get("domain")
248
+ min_freq = int(request.args.get("min_frequency", 1))
249
+
250
+ query = "SELECT * FROM rfp_requirement_patterns WHERE frequency >= ?"
251
+ params = [min_freq]
252
+ if domain:
253
+ query += " AND domain_category = ?"
254
+ params.append(domain)
255
+ query += " ORDER BY frequency DESC LIMIT 100"
256
+
257
+ rows = conn.execute(query, params).fetchall()
258
+ return jsonify({"patterns": [dict(r) for r in rows], "total": len(rows)})
259
+ finally:
260
+ conn.close()
261
+
262
+
263
+ # =====================================================================
264
+ # Capability Mapping → icdev_capability_map
265
+ # =====================================================================
266
+
267
+ @govcon_api.route("/opportunities/<opp_id>/map-capabilities", methods=["POST"])
268
+ def map_capabilities(opp_id):
269
+ """POST /api/govcon/opportunities/<id>/map-capabilities
270
+
271
+ Map ICDEV capabilities against extracted requirements for this opportunity.
272
+ Computes coverage scores and L/M/N grades.
273
+ """
274
+ try:
275
+ from icdev.tools.govcon.capability_mapper import map_all_patterns
276
+ result = map_all_patterns()
277
+ return jsonify(result)
278
+ except Exception as e:
279
+ return jsonify({"error": str(e)}), 500
280
+
281
+
282
+ @govcon_api.route("/opportunities/<opp_id>/coverage", methods=["GET"])
283
+ def get_coverage(opp_id):
284
+ """GET /api/govcon/opportunities/<id>/coverage — Capability coverage for opportunity."""
285
+ try:
286
+ from icdev.tools.govcon.capability_mapper import get_compliance_matrix
287
+ result = get_compliance_matrix(opp_id)
288
+ return jsonify(result)
289
+ except Exception as e:
290
+ return jsonify({"error": str(e)}), 500
291
+
292
+
293
+ # =====================================================================
294
+ # Compliance Auto-Population → proposal_compliance_matrix
295
+ # =====================================================================
296
+
297
+ @govcon_api.route("/opportunities/<opp_id>/auto-compliance", methods=["POST"])
298
+ def auto_populate_compliance(opp_id):
299
+ """POST /api/govcon/opportunities/<id>/auto-compliance
300
+
301
+ Auto-populate L/M/N compliance matrix from capability coverage scores.
302
+ Writes to proposal_compliance_matrix + returns bid/no-bid recommendation.
303
+ """
304
+ try:
305
+ from icdev.tools.govcon.compliance_populator import populate_compliance_matrix
306
+ result = populate_compliance_matrix(opp_id)
307
+
308
+ # Also batch-create compliance items in proposal_compliance_matrix
309
+ # if they don't already exist
310
+ if result.get("status") == "ok" and result.get("matrix"):
311
+ conn = _get_db()
312
+ try:
313
+ created = 0
314
+ for item in result["matrix"]:
315
+ # Check if compliance item already exists
316
+ existing = conn.execute(
317
+ "SELECT id FROM proposal_compliance_matrix WHERE opportunity_id = ? AND requirement_text = ?",
318
+ (opp_id, item["statement"][:200]),
319
+ ).fetchone()
320
+ if not existing:
321
+ grade = item.get("grade", "N")
322
+ status_map = {"L": "compliant", "M": "partial", "N": "non_compliant"}
323
+ conn.execute(
324
+ """INSERT INTO proposal_compliance_matrix
325
+ (id, opportunity_id, section_ref, requirement_text,
326
+ requirement_type, compliance_status, response_summary,
327
+ classification, created_at, updated_at)
328
+ VALUES (?, ?, ?, ?, ?, ?, ?, 'CUI', ?, ?)""",
329
+ (
330
+ _uuid(), opp_id,
331
+ item.get("domain", ""),
332
+ item["statement"][:500],
333
+ grade,
334
+ status_map.get(grade, "not_addressed"),
335
+ f"Auto: {item.get('best_capability', 'none')} ({item.get('coverage_score', 0):.0%})",
336
+ _now(), _now(),
337
+ ),
338
+ )
339
+ created += 1
340
+ _audit(conn, "auto_compliance", f"Opportunity {opp_id}: created {created} compliance items")
341
+ conn.commit()
342
+ result["compliance_items_created"] = created
343
+ finally:
344
+ conn.close()
345
+
346
+ return jsonify(result)
347
+ except Exception as e:
348
+ return jsonify({"error": str(e)}), 500
349
+
350
+
351
+ @govcon_api.route("/opportunities/<opp_id>/bid-recommendation", methods=["GET"])
352
+ def bid_recommendation(opp_id):
353
+ """GET /api/govcon/opportunities/<id>/bid-recommendation — Get bid/no-bid recommendation."""
354
+ try:
355
+ from icdev.tools.govcon.compliance_populator import get_summary
356
+ result = get_summary(opp_id)
357
+ return jsonify(result)
358
+ except Exception as e:
359
+ return jsonify({"error": str(e)}), 500
360
+
361
+
362
+ # =====================================================================
363
+ # AI Drafting → proposal_section_drafts
364
+ # =====================================================================
365
+
366
+ @govcon_api.route("/opportunities/<opp_id>/auto-draft", methods=["POST"])
367
+ def auto_draft(opp_id):
368
+ """POST /api/govcon/opportunities/<id>/auto-draft
369
+
370
+ AI-draft responses for all unaddressed requirements using two-tier LLM
371
+ (qwen3 worker → Claude reviewer). Falls back to template-based drafting.
372
+ Stores drafts in proposal_section_drafts (status='draft').
373
+ """
374
+ try:
375
+ from icdev.tools.govcon.response_drafter import draft_all_for_opportunity
376
+ data = request.get_json(silent=True) or {}
377
+ result = draft_all_for_opportunity(
378
+ opp_id,
379
+ method=data.get("method", "auto"), # auto, template, llm
380
+ )
381
+ return jsonify(result)
382
+ except Exception as e:
383
+ return jsonify({"error": str(e)}), 500
384
+
385
+
386
+ @govcon_api.route("/opportunities/<opp_id>/drafts", methods=["GET"])
387
+ def list_drafts(opp_id):
388
+ """GET /api/govcon/opportunities/<id>/drafts — List AI-generated drafts."""
389
+ conn = _get_db()
390
+ try:
391
+ status = request.args.get("status") # draft, reviewed, approved, rejected
392
+ query = "SELECT * FROM proposal_section_drafts WHERE opportunity_id = ?"
393
+ params = [opp_id]
394
+ if status:
395
+ query += " AND status = ?"
396
+ params.append(status)
397
+ query += " ORDER BY created_at DESC"
398
+
399
+ rows = conn.execute(query, params).fetchall()
400
+ drafts = [dict(r) for r in rows]
401
+
402
+ # Enrich with shall statement text
403
+ for d in drafts:
404
+ if d.get("shall_statement_id"):
405
+ shall = conn.execute(
406
+ "SELECT statement_text, domain_category FROM rfp_shall_statements WHERE id = ?",
407
+ (d["shall_statement_id"],),
408
+ ).fetchone()
409
+ if shall:
410
+ d["shall_text"] = shall["statement_text"]
411
+ d["domain"] = shall["domain_category"]
412
+
413
+ return jsonify({"drafts": drafts, "total": len(drafts)})
414
+ finally:
415
+ conn.close()
416
+
417
+
418
+ @govcon_api.route("/drafts/<draft_id>/approve", methods=["PUT"])
419
+ def approve_draft(draft_id):
420
+ """PUT /api/govcon/drafts/<id>/approve — Approve a draft.
421
+
422
+ When approved, the draft content flows into the linked proposal_section
423
+ and advances the section to 'drafting' status if currently 'not_started' or 'outlining'.
424
+ """
425
+ conn = _get_db()
426
+ try:
427
+ data = request.get_json(silent=True) or {}
428
+ reviewer = data.get("reviewed_by", "govcon_api")
429
+
430
+ draft = conn.execute("SELECT * FROM proposal_section_drafts WHERE id = ?", (draft_id,)).fetchone()
431
+ if not draft:
432
+ return jsonify({"error": "Draft not found"}), 404
433
+ draft = dict(draft)
434
+
435
+ # Update draft status (new row for audit trail)
436
+ conn.execute(
437
+ """INSERT INTO proposal_section_drafts
438
+ (id, section_id, opportunity_id, shall_statement_id, capability_ids,
439
+ draft_content, confidence, generation_model, knowledge_block_ids,
440
+ status, reviewed_by, reviewed_at, review_notes, created_at, classification)
441
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, 'approved', ?, ?, ?, ?, 'CUI')""",
442
+ (
443
+ _uuid(), draft.get("section_id"), draft.get("opportunity_id"),
444
+ draft.get("shall_statement_id"), draft.get("capability_ids"),
445
+ draft.get("draft_content"), draft.get("confidence"),
446
+ draft.get("generation_model"), draft.get("knowledge_block_ids"),
447
+ reviewer, _now(), data.get("review_notes", ""),
448
+ _now(),
449
+ ),
450
+ )
451
+
452
+ # If section linked, update section content and advance status
453
+ section_id = draft.get("section_id")
454
+ if section_id:
455
+ section = conn.execute("SELECT status FROM proposal_sections WHERE id = ?", (section_id,)).fetchone()
456
+ if section and section["status"] in ("not_started", "outlining"):
457
+ conn.execute(
458
+ "UPDATE proposal_sections SET status = 'drafting', notes = ?, updated_at = ? WHERE id = ?",
459
+ (f"AI draft approved by {reviewer}", _now(), section_id),
460
+ )
461
+ conn.execute(
462
+ "INSERT INTO proposal_status_history (entity_type, entity_id, old_status, new_status, changed_by, reason) "
463
+ "VALUES (?, ?, ?, ?, ?, ?)",
464
+ ("section", section_id, section["status"], "drafting", reviewer, "AI draft approved"),
465
+ )
466
+
467
+ _audit(conn, "approve_draft", f"Draft {draft_id} approved by {reviewer}")
468
+ conn.commit()
469
+ return jsonify({"status": "ok", "draft_id": draft_id, "approved": True})
470
+ finally:
471
+ conn.close()
472
+
473
+
474
+ @govcon_api.route("/drafts/<draft_id>/reject", methods=["PUT"])
475
+ def reject_draft(draft_id):
476
+ """PUT /api/govcon/drafts/<id>/reject — Reject a draft with feedback."""
477
+ conn = _get_db()
478
+ try:
479
+ data = request.get_json(silent=True) or {}
480
+ reviewer = data.get("reviewed_by", "govcon_api")
481
+
482
+ draft = conn.execute("SELECT * FROM proposal_section_drafts WHERE id = ?", (draft_id,)).fetchone()
483
+ if not draft:
484
+ return jsonify({"error": "Draft not found"}), 404
485
+ draft = dict(draft)
486
+
487
+ # Append-only: create new row with rejected status
488
+ conn.execute(
489
+ """INSERT INTO proposal_section_drafts
490
+ (id, section_id, opportunity_id, shall_statement_id, capability_ids,
491
+ draft_content, confidence, generation_model, knowledge_block_ids,
492
+ status, reviewed_by, reviewed_at, review_notes, created_at, classification)
493
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, 'rejected', ?, ?, ?, ?, 'CUI')""",
494
+ (
495
+ _uuid(), draft.get("section_id"), draft.get("opportunity_id"),
496
+ draft.get("shall_statement_id"), draft.get("capability_ids"),
497
+ draft.get("draft_content"), draft.get("confidence"),
498
+ draft.get("generation_model"), draft.get("knowledge_block_ids"),
499
+ reviewer, _now(), data.get("review_notes", "Rejected"),
500
+ _now(),
501
+ ),
502
+ )
503
+
504
+ _audit(conn, "reject_draft", f"Draft {draft_id} rejected by {reviewer}: {data.get('review_notes', '')}")
505
+ conn.commit()
506
+ return jsonify({"status": "ok", "draft_id": draft_id, "rejected": True})
507
+ finally:
508
+ conn.close()
509
+
510
+
511
+ # =====================================================================
512
+ # Gap Analysis
513
+ # =====================================================================
514
+
515
+ @govcon_api.route("/gaps", methods=["GET"])
516
+ def get_gaps():
517
+ """GET /api/govcon/gaps — Full gap analysis across all requirement patterns."""
518
+ try:
519
+ from icdev.tools.govcon.gap_analyzer import analyze_gaps
520
+ result = analyze_gaps()
521
+ return jsonify(result)
522
+ except Exception as e:
523
+ return jsonify({"error": str(e)}), 500
524
+
525
+
526
+ @govcon_api.route("/gaps/recommendations", methods=["GET"])
527
+ def get_gap_recommendations():
528
+ """GET /api/govcon/gaps/recommendations — Enhancement recommendations for gaps."""
529
+ try:
530
+ from icdev.tools.govcon.gap_analyzer import generate_recommendations
531
+ result = generate_recommendations()
532
+ return jsonify(result)
533
+ except Exception as e:
534
+ return jsonify({"error": str(e)}), 500
535
+
536
+
537
+ @govcon_api.route("/gaps/heatmap", methods=["GET"])
538
+ def get_gap_heatmap():
539
+ """GET /api/govcon/gaps/heatmap — Domain x Grade heatmap."""
540
+ try:
541
+ from icdev.tools.govcon.gap_analyzer import get_heatmap
542
+ result = get_heatmap()
543
+ return jsonify(result)
544
+ except Exception as e:
545
+ return jsonify({"error": str(e)}), 500
546
+
547
+
548
+ # =====================================================================
549
+ # Knowledge Base
550
+ # =====================================================================
551
+
552
+ @govcon_api.route("/knowledge-base", methods=["GET"])
553
+ def search_knowledge_base():
554
+ """GET /api/govcon/knowledge-base?q=&domain=&category= — Search KB."""
555
+ try:
556
+ from icdev.tools.govcon.knowledge_base import search_blocks, list_blocks
557
+ query = request.args.get("q")
558
+ domain = request.args.get("domain")
559
+ category = request.args.get("category")
560
+
561
+ if query:
562
+ result = search_blocks(query, domain=domain, category=category)
563
+ else:
564
+ result = list_blocks(domain=domain, category=category)
565
+ return jsonify(result)
566
+ except Exception as e:
567
+ return jsonify({"error": str(e)}), 500
568
+
569
+
570
+ @govcon_api.route("/knowledge-base", methods=["POST"])
571
+ def create_knowledge_block():
572
+ """POST /api/govcon/knowledge-base — Create a knowledge block."""
573
+ try:
574
+ from icdev.tools.govcon.knowledge_base import add_block
575
+ data = request.get_json(silent=True) or {}
576
+ result = add_block(
577
+ title=data.get("title", ""),
578
+ content=data.get("content", ""),
579
+ category=data.get("category", "capability_description"),
580
+ domain=data.get("domain", "general"),
581
+ volume_type=data.get("volume_type"),
582
+ keywords=data.get("keywords"),
583
+ )
584
+ return jsonify(result)
585
+ except Exception as e:
586
+ return jsonify({"error": str(e)}), 500
587
+
588
+
589
+ # =====================================================================
590
+ # Competitor Intelligence
591
+ # =====================================================================
592
+
593
+ @govcon_api.route("/competitors/scan", methods=["POST"])
594
+ def scan_awards():
595
+ """POST /api/govcon/competitors/scan — Scan SAM.gov for award notices."""
596
+ try:
597
+ from icdev.tools.govcon.award_tracker import scan_awards as _scan
598
+ result = _scan()
599
+ return jsonify(result)
600
+ except Exception as e:
601
+ return jsonify({"error": str(e)}), 500
602
+
603
+
604
+ @govcon_api.route("/competitors/leaderboard", methods=["GET"])
605
+ def competitor_leaderboard():
606
+ """GET /api/govcon/competitors/leaderboard — Vendor leaderboard."""
607
+ try:
608
+ from icdev.tools.govcon.competitor_profiler import get_leaderboard
609
+ naics = request.args.get("naics")
610
+ agency = request.args.get("agency")
611
+ limit = int(request.args.get("limit", 20))
612
+ result = get_leaderboard(naics=naics, agency=agency, limit=limit)
613
+ return jsonify(result)
614
+ except Exception as e:
615
+ return jsonify({"error": str(e)}), 500
616
+
617
+
618
+ @govcon_api.route("/competitors/profile/<vendor>", methods=["GET"])
619
+ def competitor_profile(vendor):
620
+ """GET /api/govcon/competitors/profile/<vendor> — Vendor profile."""
621
+ try:
622
+ from icdev.tools.govcon.competitor_profiler import profile_vendor
623
+ result = profile_vendor(vendor)
624
+ return jsonify(result)
625
+ except Exception as e:
626
+ return jsonify({"error": str(e)}), 500
627
+
628
+
629
+ # =====================================================================
630
+ # Pipeline — Full GovCon Intelligence Pipeline
631
+ # =====================================================================
632
+
633
+ @govcon_api.route("/pipeline/run", methods=["POST"])
634
+ def run_pipeline():
635
+ """POST /api/govcon/pipeline/run — Run full GovCon Intelligence pipeline.
636
+
637
+ Stages: DISCOVER → EXTRACT → MAP → DRAFT
638
+ Can run specific stages or the full pipeline.
639
+ """
640
+ data = request.get_json(silent=True) or {}
641
+ stages = data.get("stages", ["discover", "extract", "map", "draft"])
642
+ opp_id = data.get("opportunity_id")
643
+
644
+ results = {"status": "ok", "stages": {}}
645
+
646
+ try:
647
+ if "discover" in stages:
648
+ try:
649
+ from icdev.tools.govcon.sam_scanner import scan_sam_gov as _scan_sam
650
+ results["stages"]["discover"] = _scan_sam()
651
+ except Exception as e:
652
+ results["stages"]["discover"] = {"status": "error", "error": str(e)}
653
+
654
+ if "extract" in stages:
655
+ try:
656
+ from icdev.tools.govcon.requirement_extractor import extract_and_store
657
+ results["stages"]["extract"] = extract_and_store(opp_id=opp_id)
658
+ except Exception as e:
659
+ results["stages"]["extract"] = {"status": "error", "error": str(e)}
660
+
661
+ if "map" in stages:
662
+ try:
663
+ from icdev.tools.govcon.capability_mapper import map_all_patterns
664
+ results["stages"]["map"] = map_all_patterns()
665
+ except Exception as e:
666
+ results["stages"]["map"] = {"status": "error", "error": str(e)}
667
+
668
+ if "draft" in stages and opp_id:
669
+ try:
670
+ from icdev.tools.govcon.response_drafter import draft_all_for_opportunity
671
+ results["stages"]["draft"] = draft_all_for_opportunity(opp_id)
672
+ except Exception as e:
673
+ results["stages"]["draft"] = {"status": "error", "error": str(e)}
674
+
675
+ return jsonify(results)
676
+ except Exception as e:
677
+ return jsonify({"error": str(e)}), 500
678
+
679
+
680
+ # =====================================================================
681
+ # Questions to Government (D-QTG-1 through D-QTG-5)
682
+ # =====================================================================
683
+
684
+ @govcon_api.route("/opportunities/<opp_id>/generate-questions", methods=["POST"])
685
+ def generate_questions(opp_id):
686
+ """POST /api/govcon/opportunities/<id>/generate-questions
687
+
688
+ Auto-generate strategic questions from RFP analysis (D-QTG-1).
689
+ Deterministic regex/keyword extraction — no LLM needed.
690
+ """
691
+ try:
692
+ from icdev.tools.govcon.question_generator import generate_and_store
693
+ data = request.get_json(silent=True) or {}
694
+ result = generate_and_store(
695
+ opp_id=opp_id,
696
+ created_by=data.get("created_by", "govcon_api"),
697
+ )
698
+ return jsonify(result)
699
+ except Exception as e:
700
+ return jsonify({"error": str(e)}), 500
701
+
702
+
703
+ @govcon_api.route("/opportunities/<opp_id>/questions", methods=["GET"])
704
+ def list_questions(opp_id):
705
+ """GET /api/govcon/opportunities/<id>/questions
706
+
707
+ List questions with optional filters: category, status, priority, source.
708
+ """
709
+ conn = _get_db()
710
+ try:
711
+ query = "SELECT * FROM proposal_questions WHERE opportunity_id = ?"
712
+ params = [opp_id]
713
+
714
+ category = request.args.get("category")
715
+ status = request.args.get("status")
716
+ priority = request.args.get("priority")
717
+ source = request.args.get("source")
718
+
719
+ if category:
720
+ query += " AND category = ?"
721
+ params.append(category)
722
+ if status:
723
+ query += " AND status = ?"
724
+ params.append(status)
725
+ if priority:
726
+ query += " AND priority = ?"
727
+ params.append(priority)
728
+ if source:
729
+ query += " AND source = ?"
730
+ params.append(source)
731
+
732
+ query += " ORDER BY question_number ASC"
733
+ rows = conn.execute(query, params).fetchall()
734
+ questions = [dict(r) for r in rows]
735
+
736
+ # Stats
737
+ stats = {
738
+ "total": len(questions),
739
+ "by_category": {},
740
+ "by_status": {},
741
+ "by_priority": {},
742
+ }
743
+ for q in questions:
744
+ cat = q.get("category", "other")
745
+ stats["by_category"][cat] = stats["by_category"].get(cat, 0) + 1
746
+ st = q.get("status", "draft")
747
+ stats["by_status"][st] = stats["by_status"].get(st, 0) + 1
748
+ pr = q.get("priority", "medium")
749
+ stats["by_priority"][pr] = stats["by_priority"].get(pr, 0) + 1
750
+
751
+ return jsonify({"questions": questions, "stats": stats})
752
+ finally:
753
+ conn.close()
754
+
755
+
756
+ @govcon_api.route("/opportunities/<opp_id>/questions", methods=["POST"])
757
+ def create_question(opp_id):
758
+ """POST /api/govcon/opportunities/<id>/questions — Add a manual question."""
759
+ conn = _get_db()
760
+ try:
761
+ data = request.get_json(silent=True) or {}
762
+ if not data.get("question_text"):
763
+ return jsonify({"error": "question_text is required"}), 400
764
+
765
+ # Get next question number
766
+ row = conn.execute(
767
+ "SELECT MAX(question_number) as mx FROM proposal_questions WHERE opportunity_id = ?",
768
+ (opp_id,),
769
+ ).fetchone()
770
+ next_num = (row["mx"] or 0) + 1
771
+
772
+ q_id = _uuid()
773
+ now = _now()
774
+ conn.execute(
775
+ """INSERT INTO proposal_questions
776
+ (id, opportunity_id, question_number, question_text, category, priority,
777
+ source, rfp_section_ref, status, created_by, classification, created_at, updated_at)
778
+ VALUES (?, ?, ?, ?, ?, ?, 'manual', ?, 'draft', ?, 'CUI', ?, ?)""",
779
+ (
780
+ q_id, opp_id, next_num,
781
+ data["question_text"],
782
+ data.get("category", "scope"),
783
+ data.get("priority", "medium"),
784
+ data.get("rfp_section_ref", ""),
785
+ data.get("created_by", "govcon_api"),
786
+ now, now,
787
+ ),
788
+ )
789
+
790
+ # Update question_count
791
+ total = conn.execute(
792
+ "SELECT COUNT(*) as c FROM proposal_questions WHERE opportunity_id = ?",
793
+ (opp_id,),
794
+ ).fetchone()["c"]
795
+ conn.execute(
796
+ "UPDATE proposal_opportunities SET question_count = ?, updated_at = ? WHERE id = ?",
797
+ (total, now, opp_id),
798
+ )
799
+
800
+ _audit(conn, "create_question", f"opp={opp_id}, manual, #{next_num}")
801
+ conn.commit()
802
+ return jsonify({"status": "ok", "question_id": q_id, "question_number": next_num})
803
+ finally:
804
+ conn.close()
805
+
806
+
807
+ @govcon_api.route("/questions/<q_id>", methods=["PUT"])
808
+ def update_question(q_id):
809
+ """PUT /api/govcon/questions/<id> — Update question fields (text, category, priority, rfp_section_ref)."""
810
+ conn = _get_db()
811
+ try:
812
+ data = request.get_json(silent=True) or {}
813
+ allowed = {"question_text", "category", "priority", "rfp_section_ref"}
814
+ updates = {k: v for k, v in data.items() if k in allowed and v is not None}
815
+ if not updates:
816
+ return jsonify({"error": "No valid fields to update"}), 400
817
+
818
+ sets = ", ".join(f"{k} = ?" for k in updates)
819
+ vals = list(updates.values()) + [_now(), q_id]
820
+ conn.execute(
821
+ f"UPDATE proposal_questions SET {sets}, updated_at = ? WHERE id = ?", vals
822
+ )
823
+ _audit(conn, "update_question", f"question={q_id}, fields={list(updates.keys())}")
824
+ conn.commit()
825
+ return jsonify({"status": "ok", "question_id": q_id, "updated_fields": list(updates.keys())})
826
+ finally:
827
+ conn.close()
828
+
829
+
830
+ @govcon_api.route("/questions/<q_id>/status", methods=["PUT"])
831
+ def change_question_status(q_id):
832
+ """PUT /api/govcon/questions/<id>/status — Status transition with validation.
833
+
834
+ Valid transitions: draft→approved, approved→submitted, approved→draft, submitted→answered
835
+ """
836
+ conn = _get_db()
837
+ try:
838
+ data = request.get_json(silent=True) or {}
839
+ new_status = data.get("status")
840
+ if not new_status:
841
+ return jsonify({"error": "status is required"}), 400
842
+
843
+ q = conn.execute("SELECT * FROM proposal_questions WHERE id = ?", (q_id,)).fetchone()
844
+ if not q:
845
+ return jsonify({"error": "Question not found"}), 404
846
+
847
+ old_status = q["status"]
848
+
849
+ # Enforce valid transitions
850
+ valid_transitions = {
851
+ "draft": ["approved"],
852
+ "approved": ["submitted", "draft"],
853
+ "submitted": ["answered"],
854
+ "answered": [],
855
+ }
856
+ allowed = valid_transitions.get(old_status, [])
857
+ if new_status not in allowed:
858
+ return jsonify({
859
+ "error": f"Invalid transition: {old_status} → {new_status}. Allowed: {allowed}"
860
+ }), 400
861
+
862
+ now = _now()
863
+ extra_fields = ""
864
+ extra_vals = []
865
+
866
+ if new_status == "approved":
867
+ extra_fields = ", approved_by = ?, approved_at = ?"
868
+ extra_vals = [data.get("changed_by", "govcon_api"), now]
869
+ elif new_status == "submitted":
870
+ extra_fields = ", submitted_at = ?"
871
+ extra_vals = [now]
872
+
873
+ conn.execute(
874
+ f"UPDATE proposal_questions SET status = ?, updated_at = ?{extra_fields} WHERE id = ?",
875
+ [new_status, now] + extra_vals + [q_id],
876
+ )
877
+
878
+ # Status history (id is AUTOINCREMENT, created_at has default)
879
+ conn.execute(
880
+ "INSERT INTO proposal_status_history "
881
+ "(entity_type, entity_id, old_status, new_status, changed_by, reason) "
882
+ "VALUES (?, ?, ?, ?, ?, ?)",
883
+ ("question", q_id, old_status, new_status,
884
+ data.get("changed_by", "govcon_api"), data.get("notes", "")),
885
+ )
886
+
887
+ _audit(conn, "change_question_status", f"question={q_id}, {old_status}→{new_status}")
888
+ conn.commit()
889
+ return jsonify({"status": "ok", "question_id": q_id,
890
+ "old_status": old_status, "new_status": new_status})
891
+ finally:
892
+ conn.close()
893
+
894
+
895
+ @govcon_api.route("/opportunities/<opp_id>/questions/bulk-status", methods=["PUT"])
896
+ def bulk_status_change(opp_id):
897
+ """PUT /api/govcon/opportunities/<id>/questions/bulk-status — Bulk status change."""
898
+ conn = _get_db()
899
+ try:
900
+ data = request.get_json(silent=True) or {}
901
+ question_ids = data.get("question_ids", [])
902
+ new_status = data.get("status")
903
+ changed_by = data.get("changed_by", "govcon_api")
904
+
905
+ if not question_ids or not new_status:
906
+ return jsonify({"error": "question_ids and status are required"}), 400
907
+
908
+ valid_transitions = {
909
+ "draft": ["approved"],
910
+ "approved": ["submitted", "draft"],
911
+ "submitted": ["answered"],
912
+ "answered": [],
913
+ }
914
+
915
+ now = _now()
916
+ changed = 0
917
+ skipped = 0
918
+
919
+ for qid in question_ids:
920
+ q = conn.execute(
921
+ "SELECT id, status FROM proposal_questions WHERE id = ? AND opportunity_id = ?",
922
+ (qid, opp_id),
923
+ ).fetchone()
924
+ if not q:
925
+ skipped += 1
926
+ continue
927
+
928
+ old = q["status"]
929
+ if new_status not in valid_transitions.get(old, []):
930
+ skipped += 1
931
+ continue
932
+
933
+ conn.execute(
934
+ "UPDATE proposal_questions SET status = ?, updated_at = ? WHERE id = ?",
935
+ (new_status, now, qid),
936
+ )
937
+ conn.execute(
938
+ "INSERT INTO proposal_status_history "
939
+ "(entity_type, entity_id, old_status, new_status, changed_by, reason) "
940
+ "VALUES (?, ?, ?, ?, ?, ?)",
941
+ ("question", qid, old, new_status, changed_by, "Bulk status change"),
942
+ )
943
+ changed += 1
944
+
945
+ _audit(conn, "bulk_status_change", f"opp={opp_id}, changed={changed}, skipped={skipped}")
946
+ conn.commit()
947
+ return jsonify({"status": "ok", "changed": changed, "skipped": skipped})
948
+ finally:
949
+ conn.close()
950
+
951
+
952
+ @govcon_api.route("/opportunities/<opp_id>/questions/export", methods=["POST"])
953
+ def export_questions_endpoint(opp_id):
954
+ """POST /api/govcon/opportunities/<id>/questions/export — Export to HTML document."""
955
+ try:
956
+ from icdev.tools.govcon.question_exporter import export_questions
957
+ data = request.get_json(silent=True) or {}
958
+ result = export_questions(
959
+ opp_id=opp_id,
960
+ status_filter=data.get("status_filter"),
961
+ output_path=data.get("output_path"),
962
+ company_name=data.get("company_name"),
963
+ )
964
+ return jsonify(result)
965
+ except Exception as e:
966
+ return jsonify({"error": str(e)}), 500
967
+
968
+
969
+ @govcon_api.route("/opportunities/<opp_id>/amendments", methods=["POST"])
970
+ def upload_amendment_endpoint(opp_id):
971
+ """POST /api/govcon/opportunities/<id>/amendments — Upload amendment (file or text)."""
972
+ try:
973
+ from icdev.tools.govcon.amendment_tracker import upload_amendment
974
+ data = request.get_json(silent=True) or {}
975
+ # Validate file_path to prevent path traversal — restrict to data/ and .tmp/
976
+ file_path = data.get("file_path")
977
+ if file_path:
978
+ safe_bases = [BASE_DIR / "data", BASE_DIR / ".tmp"]
979
+ resolved = Path(file_path).resolve()
980
+ if not any(str(resolved).startswith(str(sb.resolve())) for sb in safe_bases):
981
+ return jsonify({"error": "file_path must be within data/ or .tmp/"}), 400
982
+ file_path = str(resolved)
983
+ result = upload_amendment(
984
+ opp_id=opp_id,
985
+ title=data.get("title", "Untitled Amendment"),
986
+ file_path=file_path,
987
+ text=data.get("text"),
988
+ description=data.get("description"),
989
+ amendment_date=data.get("amendment_date"),
990
+ uploaded_by=data.get("uploaded_by", "govcon_api"),
991
+ )
992
+ return jsonify(result)
993
+ except Exception as e:
994
+ return jsonify({"error": str(e)}), 500
995
+
996
+
997
+ @govcon_api.route("/opportunities/<opp_id>/amendments", methods=["GET"])
998
+ def list_amendments_endpoint(opp_id):
999
+ """GET /api/govcon/opportunities/<id>/amendments — List amendments."""
1000
+ try:
1001
+ from icdev.tools.govcon.amendment_tracker import list_amendments
1002
+ result = list_amendments(opp_id)
1003
+ return jsonify(result)
1004
+ except Exception as e:
1005
+ return jsonify({"error": str(e)}), 500
1006
+
1007
+
1008
+ @govcon_api.route("/amendments/<amendment_id>/diff", methods=["GET"])
1009
+ def get_amendment_diff(amendment_id):
1010
+ """GET /api/govcon/amendments/<id>/diff — Get diff data for amendment."""
1011
+ try:
1012
+ from icdev.tools.govcon.amendment_tracker import compute_diff
1013
+ result = compute_diff(amendment_id)
1014
+ return jsonify(result)
1015
+ except Exception as e:
1016
+ return jsonify({"error": str(e)}), 500
1017
+
1018
+
1019
+ @govcon_api.route("/questions/<q_id>/response", methods=["POST"])
1020
+ def record_response_endpoint(q_id):
1021
+ """POST /api/govcon/questions/<id>/response — Record government Q&A response."""
1022
+ try:
1023
+ from icdev.tools.govcon.amendment_tracker import record_response
1024
+ data = request.get_json(silent=True) or {}
1025
+ if not data.get("response_text"):
1026
+ return jsonify({"error": "response_text is required"}), 400
1027
+
1028
+ result = record_response(
1029
+ question_id=q_id,
1030
+ response_text=data["response_text"],
1031
+ amendment_id=data.get("amendment_id"),
1032
+ response_date=data.get("response_date"),
1033
+ impacts_requirements=data.get("impacts_requirements", False),
1034
+ impact_notes=data.get("impact_notes"),
1035
+ recorded_by=data.get("recorded_by", "govcon_api"),
1036
+ )
1037
+ return jsonify(result)
1038
+ except Exception as e:
1039
+ return jsonify({"error": str(e)}), 500
1040
+
1041
+
1042
+ # =====================================================================
1043
+ # Pipeline — Full GovCon Intelligence Pipeline
1044
+ # =====================================================================
1045
+
1046
+ @govcon_api.route("/pipeline/status", methods=["GET"])
1047
+ def pipeline_status():
1048
+ """GET /api/govcon/pipeline/status — Pipeline health and statistics."""
1049
+ conn = _get_db()
1050
+ try:
1051
+ # SAM.gov opportunities
1052
+ sam_total = conn.execute("SELECT COUNT(*) as c FROM sam_gov_opportunities").fetchone()["c"]
1053
+ sam_active = conn.execute("SELECT COUNT(*) as c FROM sam_gov_opportunities WHERE active = 1").fetchone()["c"]
1054
+
1055
+ # Requirements
1056
+ shall_total = conn.execute("SELECT COUNT(*) as c FROM rfp_shall_statements").fetchone()["c"]
1057
+ pattern_total = conn.execute("SELECT COUNT(*) as c FROM rfp_requirement_patterns").fetchone()["c"]
1058
+
1059
+ # Capability mapping
1060
+ mapped = conn.execute("SELECT COUNT(*) as c FROM icdev_capability_map").fetchone()["c"]
1061
+
1062
+ # Drafts
1063
+ drafts_total = conn.execute("SELECT COUNT(*) as c FROM proposal_section_drafts").fetchone()["c"]
1064
+ drafts_pending = conn.execute(
1065
+ "SELECT COUNT(*) as c FROM proposal_section_drafts WHERE status = 'draft'"
1066
+ ).fetchone()["c"]
1067
+ drafts_approved = conn.execute(
1068
+ "SELECT COUNT(*) as c FROM proposal_section_drafts WHERE status = 'approved'"
1069
+ ).fetchone()["c"]
1070
+
1071
+ # Knowledge base
1072
+ kb_total = conn.execute(
1073
+ "SELECT COUNT(*) as c FROM proposal_knowledge_base WHERE status = 'active'"
1074
+ ).fetchone()["c"]
1075
+
1076
+ # Awards
1077
+ awards_total = conn.execute("SELECT COUNT(*) as c FROM govcon_awards").fetchone()["c"]
1078
+
1079
+ # Domain distribution
1080
+ domains = conn.execute(
1081
+ "SELECT domain_category, COUNT(*) as c FROM rfp_shall_statements GROUP BY domain_category ORDER BY c DESC"
1082
+ ).fetchall()
1083
+
1084
+ return jsonify({
1085
+ "status": "ok",
1086
+ "sam_gov": {"total": sam_total, "active": sam_active},
1087
+ "requirements": {"shall_statements": shall_total, "patterns": pattern_total},
1088
+ "capability_mapping": {"mapped": mapped},
1089
+ "drafts": {"total": drafts_total, "pending_review": drafts_pending, "approved": drafts_approved},
1090
+ "knowledge_base": {"active_blocks": kb_total},
1091
+ "awards": {"total": awards_total},
1092
+ "domain_distribution": {d["domain_category"]: d["c"] for d in domains},
1093
+ })
1094
+ finally:
1095
+ conn.close()