icdev 0.0.3__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 (1214) hide show
  1. args/agent_config.yaml +113 -0
  2. args/audit_regimes/cisa_sbd.json +381 -0
  3. args/audit_regimes/cmmc_l2.json +906 -0
  4. args/audit_regimes/dod_cssp.json +393 -0
  5. args/audit_regimes/dodi_5000_87.json +297 -0
  6. args/audit_regimes/fedramp_moderate.json +650 -0
  7. args/audit_regimes/ieee_1012.json +373 -0
  8. args/audit_regimes/nist_800_171.json +624 -0
  9. args/audit_regimes/nist_800_53.json +907 -0
  10. args/cloudforge_blueprints/aws_commercial.yaml +29 -0
  11. args/cloudforge_blueprints/aws_govcloud_il4.yaml +34 -0
  12. args/cloudforge_blueprints/aws_govcloud_il5.yaml +38 -0
  13. args/cloudforge_blueprints/azure_commercial.yaml +28 -0
  14. args/cloudforge_blueprints/azure_gov_il4.yaml +32 -0
  15. args/cloudforge_blueprints/azure_gov_il5.yaml +36 -0
  16. args/cloudforge_blueprints/gcp_commercial.yaml +28 -0
  17. args/cloudforge_blueprints/oci_commercial.yaml +28 -0
  18. args/cloudforge_config.yaml +231 -0
  19. args/cloudforge_runbook_templates/backup_verify.yaml +98 -0
  20. args/cloudforge_runbook_templates/dr_failover.yaml +107 -0
  21. args/cloudforge_runbook_templates/health_check.yaml +97 -0
  22. args/cloudforge_runbook_templates/incident_response.yaml +101 -0
  23. args/cloudforge_runbook_templates/migration_cutover.yaml +105 -0
  24. args/cloudforge_runbook_templates/patch_rollout.yaml +92 -0
  25. args/cloudforge_runbook_templates/zone_provision.yaml +93 -0
  26. args/code_pattern_config.yaml +151 -0
  27. args/code_quality_config.yaml +47 -0
  28. args/compliance_config.yaml +17 -0
  29. args/control_inheritance.yaml +177 -0
  30. args/csp_mcp_config.yaml +41 -0
  31. args/cui_markings.yaml +35 -0
  32. args/databridge_config.yaml +232 -0
  33. args/db_config.yaml +116 -0
  34. args/decision_tables/agent_trust_decision.yaml +143 -0
  35. args/decision_tables/ato_boundary_impact.yaml +132 -0
  36. args/decision_tables/deployment_approval.yaml +152 -0
  37. args/degradation_matrix.yaml +163 -0
  38. args/devsecops_config.yaml +286 -0
  39. args/endpoint_security_config.yaml +207 -0
  40. args/exit_criteria.yaml +102 -0
  41. args/feature_flags.yaml +235 -0
  42. args/file_access_tiers.yaml +88 -0
  43. args/forge_studio/blueprint_config.yaml +27 -0
  44. args/forge_studio/component_catalog.json +411 -0
  45. args/forge_studio/workflow_templates.yaml +103 -0
  46. args/govcon_config.yaml +41 -0
  47. args/harness_config.yaml +67 -0
  48. args/innovation_config.yaml +321 -0
  49. args/knowledge_graph_config.yaml +113 -0
  50. args/llm_config.yaml +222 -0
  51. args/marketplace_config.yaml +260 -0
  52. args/monitoring_config.yaml +127 -0
  53. args/mosa_config.yaml +190 -0
  54. args/observability_tracing_config.yaml +170 -0
  55. args/owasp_agentic_config.yaml +171 -0
  56. args/pipeline_gates.yaml +197 -0
  57. args/project_defaults.yaml +235 -0
  58. args/prompt_chains.yaml +163 -0
  59. args/rag_config.yaml +167 -0
  60. args/research_config.yaml +89 -0
  61. args/resilience_config.yaml +197 -0
  62. args/ricoas_config.yaml +191 -0
  63. args/security_gates.yaml +763 -0
  64. args/storage_config.yaml +63 -0
  65. args/writeguard_config.yaml +131 -0
  66. args/zta_config.yaml +247 -0
  67. context/__init__.py +6 -0
  68. context/agent/__init__.py +6 -0
  69. context/agent/response_schemas/__init__.py +6 -0
  70. context/agent/response_schemas/debate_position.json +46 -0
  71. context/agent/response_schemas/fitness_scorecard.json +74 -0
  72. context/agent/response_schemas/review_decision.json +39 -0
  73. context/agent/response_schemas/task_decomposition.json +82 -0
  74. context/agent/response_schemas/veto_decision.json +40 -0
  75. context/agentic/__init__.py +6 -0
  76. context/agentic/architecture_patterns.md +269 -0
  77. context/agentic/capability_registry.yaml +223 -0
  78. context/agentic/csp_integration.md +30 -0
  79. context/agentic/csp_mcp_registry.yaml +280 -0
  80. context/agentic/fitness_rubric.md +56 -0
  81. context/agentic/governance_baseline.md +205 -0
  82. context/ci/__init__.py +6 -0
  83. context/ci/worktree_templates.json +44 -0
  84. context/cloud/__init__.py +6 -0
  85. context/cloud/csp_service_registry.json +739 -0
  86. context/compliance/__init__.py +6 -0
  87. context/compliance/ai_rmf_crosswalk.yaml +226 -0
  88. context/compliance/atlas_mitigations.json +293 -0
  89. context/compliance/atlas_techniques.json +833 -0
  90. context/compliance/cisa_sbd_requirements.json +477 -0
  91. context/compliance/cjis_security_policy.json +522 -0
  92. context/compliance/cmmc_practices.json +2494 -0
  93. context/compliance/cmmc_report_template.md +142 -0
  94. context/compliance/cnssi_1253_overlay.json +109 -0
  95. context/compliance/control_crosswalk.json +1914 -0
  96. context/compliance/control_families/__init__.py +6 -0
  97. context/compliance/csp_certifications.json +251 -0
  98. context/compliance/cssp_report_template.md +193 -0
  99. context/compliance/cui_templates/__init__.py +6 -0
  100. context/compliance/cui_templates/banner_block.txt +4 -0
  101. context/compliance/cui_templates/code_header.txt +8 -0
  102. context/compliance/cui_templates/document_template.md +35 -0
  103. context/compliance/data_type_framework_map.json +321 -0
  104. context/compliance/data_type_registry.json +147 -0
  105. context/compliance/dod_cssp_8530.json +463 -0
  106. context/compliance/eu_ai_act_annex_iii.json +108 -0
  107. context/compliance/export_templates/__init__.py +6 -0
  108. context/compliance/export_templates/emass_controls.csv.j2 +4 -0
  109. context/compliance/export_templates/evidence_package.md.j2 +39 -0
  110. context/compliance/export_templates/executive_summary.md.j2 +55 -0
  111. context/compliance/export_templates/poam_tracking.csv.j2 +4 -0
  112. context/compliance/fedramp_20x_ksi_schemas.json +133 -0
  113. context/compliance/fedramp_high_baseline.json +4370 -0
  114. context/compliance/fedramp_moderate_baseline.json +2183 -0
  115. context/compliance/fedramp_report_template.md +181 -0
  116. context/compliance/fips_200_areas.json +362 -0
  117. context/compliance/gao_ai_accountability.json +262 -0
  118. context/compliance/hipaa_security_rule.json +720 -0
  119. context/compliance/hitrust_csf_v11.json +930 -0
  120. context/compliance/impact_level_profiles.json +251 -0
  121. context/compliance/incident_response_template.md +1110 -0
  122. context/compliance/iso27001_2022_controls.json +750 -0
  123. context/compliance/iso27001_nist_bridge.json +382 -0
  124. context/compliance/iso42001_controls.json +254 -0
  125. context/compliance/ivv_checklist_template.md +80 -0
  126. context/compliance/ivv_report_template.md +116 -0
  127. context/compliance/ivv_requirements.json +372 -0
  128. context/compliance/mosa_crosswalk.json +327 -0
  129. context/compliance/mosa_framework.json +250 -0
  130. context/compliance/narrative_templates/AC.md.j2 +101 -0
  131. context/compliance/narrative_templates/AU.md.j2 +106 -0
  132. context/compliance/narrative_templates/IA.md.j2 +104 -0
  133. context/compliance/narrative_templates/SC.md.j2 +102 -0
  134. context/compliance/narrative_templates/SI.md.j2 +111 -0
  135. context/compliance/narrative_templates/__init__.py +6 -0
  136. context/compliance/narrative_templates/default.md.j2 +50 -0
  137. context/compliance/narrative_templates/executive_summary.j2 +27 -0
  138. context/compliance/narrative_templates/poam_milestone.j2 +19 -0
  139. context/compliance/narrative_templates/ssp_section.j2 +11 -0
  140. context/compliance/nist_800_171_controls.json +1552 -0
  141. context/compliance/nist_800_207_crosswalk.json +399 -0
  142. context/compliance/nist_800_207_zta.json +258 -0
  143. context/compliance/nist_800_53.json +324 -0
  144. context/compliance/nist_ai_600_1_genai.json +326 -0
  145. context/compliance/nist_ai_rmf.json +206 -0
  146. context/compliance/nist_sp_800_60_types.json +1667 -0
  147. context/compliance/omb_m25_21_high_impact_ai.json +248 -0
  148. context/compliance/omb_m26_04_unbiased_ai.json +262 -0
  149. context/compliance/owasp_agentic_asi.json +133 -0
  150. context/compliance/owasp_agentic_threats.json +285 -0
  151. context/compliance/owasp_llm_top10.json +274 -0
  152. context/compliance/pci_dss_v4.json +510 -0
  153. context/compliance/poam_template.md +117 -0
  154. context/compliance/safeai_controls.json +512 -0
  155. context/compliance/sbd_report_template.md +77 -0
  156. context/compliance/siem_config_templates/__init__.py +6 -0
  157. context/compliance/siem_config_templates/filebeat.yml +213 -0
  158. context/compliance/siem_config_templates/log_sources.json +208 -0
  159. context/compliance/soc2_trust_criteria.json +661 -0
  160. context/compliance/ssp_template.md +432 -0
  161. context/compliance/stig_templates/__init__.py +6 -0
  162. context/compliance/stig_templates/webapp_stig.json +139 -0
  163. context/compliance/xai_requirements.json +108 -0
  164. context/dashboard/__init__.py +6 -0
  165. context/dashboard/nlq_examples.json +50 -0
  166. context/dashboard/schema_descriptions.json +23 -0
  167. context/icdev_methodology.md +100 -0
  168. context/integration/__init__.py +6 -0
  169. context/integration/approval_workflows.json +32 -0
  170. context/integration/gitlab_field_mappings.json +33 -0
  171. context/integration/jira_field_mappings.json +32 -0
  172. context/integration/reqif_export_schema.json +23 -0
  173. context/integration/servicenow_field_mappings.json +22 -0
  174. context/languages/__init__.py +6 -0
  175. context/languages/framework_patterns.json +205 -0
  176. context/languages/language_registry.json +279 -0
  177. context/llm/__init__.py +6 -0
  178. context/llm/example_provider.py +89 -0
  179. context/marketplace/assets/writeguard-core.yaml +100 -0
  180. context/marketplace/assets/writeguard-govcon.yaml +45 -0
  181. context/marketplace/assets/writeguard-style-guides.yaml +44 -0
  182. context/mbse/__init__.py +6 -0
  183. context/mbse/des_report_template.md +162 -0
  184. context/mbse/des_requirements.json +411 -0
  185. context/mbse/digital_thread_patterns.json +403 -0
  186. context/mbse/reqif_schema.json +280 -0
  187. context/mbse/sysml_element_types.json +432 -0
  188. context/oscal/NIST_SP-800-53_rev5_catalog.json +254987 -0
  189. context/oscal/README.md +43 -0
  190. context/patterns/__init__.py +6 -0
  191. context/profiles/__init__.py +6 -0
  192. context/profiles/dod_baseline_v1.yaml +145 -0
  193. context/profiles/fedramp_baseline_v1.yaml +143 -0
  194. context/profiles/financial_baseline_v1.yaml +142 -0
  195. context/profiles/healthcare_baseline_v1.yaml +135 -0
  196. context/profiles/law_enforcement_v1.yaml +129 -0
  197. context/profiles/startup_v1.yaml +134 -0
  198. context/rag/source_mappings.json +42 -0
  199. context/requirements/__init__.py +6 -0
  200. context/requirements/ambiguity_patterns.json +97 -0
  201. context/requirements/boundary_impact_rules.json +123 -0
  202. context/requirements/default_constitutions.json +67 -0
  203. context/requirements/document_extraction_rules.json +58 -0
  204. context/requirements/gap_patterns.json +108 -0
  205. context/requirements/readiness_rubric.json +78 -0
  206. context/requirements/red_alternative_patterns.json +210 -0
  207. context/requirements/safe_templates.json +72 -0
  208. context/requirements/spec_quality_checklist.json +122 -0
  209. context/research/regulatory_registry.json +114 -0
  210. context/research/verticals/cybersecurity.json +127 -0
  211. context/research/verticals/defense.json +104 -0
  212. context/research/verticals/fintech.json +125 -0
  213. context/research/verticals/healthcare.json +118 -0
  214. context/research/verticals/logistics.json +117 -0
  215. context/research/verticals/trading.json +145 -0
  216. context/simulation/__init__.py +6 -0
  217. context/simulation/architecture_patterns.json +36 -0
  218. context/simulation/coa_templates.json +38 -0
  219. context/simulation/cost_models.json +23 -0
  220. context/simulation/risk_categories.json +46 -0
  221. context/supply_chain/__init__.py +6 -0
  222. context/supply_chain/isa_templates.json +129 -0
  223. context/supply_chain/nist_800_161_controls.json +247 -0
  224. context/supply_chain/scrm_risk_matrix.json +147 -0
  225. context/templates/__init__.py +6 -0
  226. context/templates/ansible/__init__.py +6 -0
  227. context/templates/ansible/playbooks/__init__.py +6 -0
  228. context/templates/ansible/roles/__init__.py +6 -0
  229. context/templates/gitlab_ci/__init__.py +6 -0
  230. context/templates/grafana/__init__.py +6 -0
  231. context/templates/kubernetes/__init__.py +6 -0
  232. context/templates/project/__init__.py +6 -0
  233. context/templates/project/api/__init__.py +6 -0
  234. context/templates/project/cli/__init__.py +6 -0
  235. context/templates/project/data_pipeline/__init__.py +6 -0
  236. context/templates/project/iac/__init__.py +6 -0
  237. context/templates/project/javascript_frontend/__init__.py +6 -0
  238. context/templates/project/javascript_frontend/src/__init__.py +6 -0
  239. context/templates/project/javascript_frontend/tests/__init__.py +6 -0
  240. context/templates/project/microservice/__init__.py +6 -0
  241. context/templates/project/python_backend/__init__.py +6 -0
  242. context/templates/project/python_backend/src/__init__.py +6 -0
  243. context/templates/project/python_backend/tests/__init__.py +6 -0
  244. context/templates/project/python_backend/tests/features/__init__.py +6 -0
  245. context/templates/project/python_backend/tests/steps/__init__.py +6 -0
  246. context/templates/terraform/__init__.py +6 -0
  247. context/templates/terraform/govcloud_base/__init__.py +6 -0
  248. context/templates/terraform/modules/__init__.py +6 -0
  249. context/tone/__init__.py +6 -0
  250. context/writing/grammar_rules/common_errors.json +306 -0
  251. context/writing/grammar_rules/govcon_vocabulary.json +113 -0
  252. context/writing/style_guides/academic.yaml +43 -0
  253. context/writing/style_guides/business.yaml +42 -0
  254. context/writing/style_guides/government.yaml +59 -0
  255. context/writing/style_guides/proposal.yaml +58 -0
  256. context/writing/style_guides/technical.yaml +43 -0
  257. docs/adr/README.md +66 -0
  258. docs/adr/connector-forge-decisions.md +318 -0
  259. docs/adr/core-decisions.md +289 -0
  260. docs/adr/db-decisions.md +94 -0
  261. docs/adr/harness-decisions.md +122 -0
  262. docs/adr/innovation-decisions.md +262 -0
  263. docs/adr/marketplace-decisions.md +109 -0
  264. docs/adr/sbd-decisions.md +109 -0
  265. docs/adr/scale-engine-decisions.md +108 -0
  266. docs/adr/writeguard-decisions.md +136 -0
  267. docs/architecture/bounded-contexts.md +1032 -0
  268. docs/features/phase-65-writeguard.md +139 -0
  269. docs/features/phase-66-marketplace-commerce.md +79 -0
  270. docs/features/phase-67-knowledge-ingestion-rag-autodraft.md +97 -0
  271. docs/features/phase-68-enhanced-autodraft-pipeline.md +109 -0
  272. docs/features/phase-69-proposalai-marketplace-module.md +131 -0
  273. docs/features/phase-70-databridge.md +214 -0
  274. docs/features/phase-71-databridge-messaging.md +102 -0
  275. docs/implementation-plan-architecture-evolution.md +614 -0
  276. docs/marketplace/CONTRIBUTING.md +124 -0
  277. docs/marketplace/module_manifest_schema.yaml +83 -0
  278. docs/research/ai-architecture-patterns-2024-2026.md +1236 -0
  279. docs/research/app-builder-platform-analysis.md +582 -0
  280. docs/research/architecture-patterns-c4-ddd-agentic.md +871 -0
  281. docs/research/flowable-boat-competitive-analysis.md +426 -0
  282. docs/research/modern-dev-practices-2024-2026.md +1615 -0
  283. docs/research/secure-by-design-cloudyrion-adaptation.md +270 -0
  284. goals/agent_management.md +144 -0
  285. goals/ai_accountability.md +90 -0
  286. goals/ai_narratives.md +79 -0
  287. goals/ai_transparency.md +76 -0
  288. goals/ato_simulator.md +78 -0
  289. goals/audit_engine.md +177 -0
  290. goals/bite_sized_plans.md +225 -0
  291. goals/boundary_supply_chain.md +206 -0
  292. goals/brainstorming_gate.md +186 -0
  293. goals/build_app.md +604 -0
  294. goals/cato_live_evidence.md +77 -0
  295. goals/cloudforge.md +106 -0
  296. goals/code_intelligence.md +197 -0
  297. goals/compliance_workflow.md +858 -0
  298. goals/connector_forge.md +133 -0
  299. goals/databridge.md +128 -0
  300. goals/deploy_workflow.md +390 -0
  301. goals/developer_scorecard.md +78 -0
  302. goals/devsecops_workflow.md +408 -0
  303. goals/firmware_sbom.md +79 -0
  304. goals/forge_hub.md +78 -0
  305. goals/golden_path.md +77 -0
  306. goals/harness_engineering.md +91 -0
  307. goals/integration_testing.md +189 -0
  308. goals/knowledge_graph.md +128 -0
  309. goals/maintenance_audit.md +196 -0
  310. goals/manifest.md +50 -0
  311. goals/monitoring.md +126 -0
  312. goals/mosa_workflow.md +463 -0
  313. goals/multi_agent_orchestration.md +68 -0
  314. goals/observability_traceability_xai.md +154 -0
  315. goals/owasp_agentic_security.md +395 -0
  316. goals/pr_intelligence.md +78 -0
  317. goals/requirements_intake.md +213 -0
  318. goals/secure_by_design.md +135 -0
  319. goals/security_scan.md +381 -0
  320. goals/self_healing.md +120 -0
  321. goals/simulation_engine.md +111 -0
  322. goals/subagent_review.md +205 -0
  323. goals/systematic_debugging.md +257 -0
  324. goals/tdd_workflow.md +403 -0
  325. goals/template_exchange.md +77 -0
  326. goals/thread_heatmap.md +77 -0
  327. goals/threat_modeler.md +77 -0
  328. goals/verification_iron_law.md +192 -0
  329. goals/vsm_dashboard.md +76 -0
  330. goals/writeguard.md +89 -0
  331. goals/zero_trust_architecture.md +403 -0
  332. hardprompts/__init__.py +6 -0
  333. hardprompts/agent/__init__.py +6 -0
  334. hardprompts/agent/agentic_architect.md +100 -0
  335. hardprompts/agent/debate_prompt.md +32 -0
  336. hardprompts/agent/fitness_evaluation.md +48 -0
  337. hardprompts/agent/governance_review.md +214 -0
  338. hardprompts/agent/reviewer_prompt.md +34 -0
  339. hardprompts/agent/skill_design.md +172 -0
  340. hardprompts/agent/task_decomposition.md +275 -0
  341. hardprompts/agent/veto_check_prompt.md +33 -0
  342. hardprompts/architect/__init__.py +6 -0
  343. hardprompts/architect/api_design.md +283 -0
  344. hardprompts/architect/data_model.md +277 -0
  345. hardprompts/architect/system_design.md +180 -0
  346. hardprompts/builder/__init__.py +6 -0
  347. hardprompts/builder/code_generation.md +59 -0
  348. hardprompts/builder/refactor.md +58 -0
  349. hardprompts/builder/scaffold_project.md +69 -0
  350. hardprompts/builder/test_generation.md +87 -0
  351. hardprompts/ci/__init__.py +6 -0
  352. hardprompts/ci/worktree_setup.md +35 -0
  353. hardprompts/compliance/__init__.py +6 -0
  354. hardprompts/compliance/cmmc_assessment.md +63 -0
  355. hardprompts/compliance/cssp_assessment.md +75 -0
  356. hardprompts/compliance/cui_marking.md +86 -0
  357. hardprompts/compliance/fedramp_assessment.md +55 -0
  358. hardprompts/compliance/ivv_assessment.md +96 -0
  359. hardprompts/compliance/poam_generation.md +57 -0
  360. hardprompts/compliance/sbd_assessment.md +101 -0
  361. hardprompts/compliance/security_categorization.md +74 -0
  362. hardprompts/compliance/ssp_generation.md +56 -0
  363. hardprompts/compliance/stig_evaluation.md +63 -0
  364. hardprompts/dashboard/__init__.py +6 -0
  365. hardprompts/dashboard/nlq_system_prompt.md +26 -0
  366. hardprompts/infra/__init__.py +6 -0
  367. hardprompts/infra/k8s_manifests.md +118 -0
  368. hardprompts/infra/pipeline_generation.md +160 -0
  369. hardprompts/infra/terraform_generation.md +92 -0
  370. hardprompts/integration/__init__.py +6 -0
  371. hardprompts/integration/approval_review.md +17 -0
  372. hardprompts/integration/jira_mapping.md +25 -0
  373. hardprompts/integration/servicenow_mapping.md +14 -0
  374. hardprompts/knowledge/__init__.py +6 -0
  375. hardprompts/knowledge/pattern_detection.md +73 -0
  376. hardprompts/knowledge/recommendation_engine.md +90 -0
  377. hardprompts/knowledge/root_cause_analysis.md +91 -0
  378. hardprompts/maintenance/__init__.py +6 -0
  379. hardprompts/maintenance/maintenance_assessment.md +82 -0
  380. hardprompts/mbse/__init__.py +6 -0
  381. hardprompts/mbse/digital_thread.md +67 -0
  382. hardprompts/mbse/model_import.md +62 -0
  383. hardprompts/mbse/model_to_code.md +65 -0
  384. hardprompts/modernization/__init__.py +6 -0
  385. hardprompts/modernization/legacy_analysis.md +93 -0
  386. hardprompts/modernization/migration_planning.md +150 -0
  387. hardprompts/modernization/seven_r_assessment.md +107 -0
  388. hardprompts/proposal_draft.md +53 -0
  389. hardprompts/rag_citation.md +12 -0
  390. hardprompts/rag_rerank.md +31 -0
  391. hardprompts/requirements/__init__.py +6 -0
  392. hardprompts/requirements/bdd_generation.md +35 -0
  393. hardprompts/requirements/clarification_prioritization.md +29 -0
  394. hardprompts/requirements/decomposition.md +60 -0
  395. hardprompts/requirements/document_extraction.md +45 -0
  396. hardprompts/requirements/gap_detection.md +70 -0
  397. hardprompts/requirements/intake_conversation.md +101 -0
  398. hardprompts/requirements/readiness_assessment.md +39 -0
  399. hardprompts/requirements/spec_quality.md +33 -0
  400. hardprompts/requirements/traceability_analysis.md +23 -0
  401. hardprompts/security/__init__.py +6 -0
  402. hardprompts/security/endpoint_security.md +78 -0
  403. hardprompts/security/threat_model.md +70 -0
  404. hardprompts/security/vulnerability_assessment.md +81 -0
  405. hardprompts/simulation/__init__.py +6 -0
  406. hardprompts/simulation/architecture_impact.md +27 -0
  407. hardprompts/simulation/coa_alternative.md +27 -0
  408. hardprompts/simulation/coa_generation.md +25 -0
  409. hardprompts/simulation/compliance_impact.md +28 -0
  410. hardprompts/simulation/cost_estimation.md +33 -0
  411. hardprompts/simulation/risk_assessment.md +28 -0
  412. hardprompts/translation/code_translation.md +68 -0
  413. hardprompts/translation/dependency_suggestion.md +44 -0
  414. hardprompts/translation/test_translation.md +64 -0
  415. hardprompts/translation/translation_repair.md +59 -0
  416. icdev-0.0.3.dist-info/METADATA +909 -0
  417. icdev-0.0.3.dist-info/RECORD +1214 -0
  418. icdev-0.0.3.dist-info/WHEEL +5 -0
  419. icdev-0.0.3.dist-info/entry_points.txt +9 -0
  420. icdev-0.0.3.dist-info/licenses/LICENSE +201 -0
  421. icdev-0.0.3.dist-info/licenses/NOTICE +11 -0
  422. icdev-0.0.3.dist-info/top_level.txt +7 -0
  423. memory/MEMORY.md +52 -0
  424. memory/logs/2026-02-14.md +17 -0
  425. memory/logs/2026-03-03.md +2 -0
  426. memory/logs/__init__.py +1 -0
  427. tools/a2a/icdev_callback_client.py +210 -0
  428. tools/agent/cards/architect_card.json +29 -0
  429. tools/agent/cards/builder_card.json +34 -0
  430. tools/agent/cards/compliance_card.json +29 -0
  431. tools/agent/cards/connector_forge_card.json +49 -0
  432. tools/agent/cards/devsecops_zta_card.json +24 -0
  433. tools/agent/cards/knowledge_card.json +29 -0
  434. tools/agent/cards/monitor_card.json +29 -0
  435. tools/agent/cards/orchestrator_card.json +29 -0
  436. tools/agent/cards/requirements_analyst_card.json +24 -0
  437. tools/agent/cards/security_card.json +29 -0
  438. tools/agent/cards/simulation_card.json +24 -0
  439. tools/agent/cards/supply_chain_card.json +24 -0
  440. tools/analysis/__init__.py +1 -0
  441. tools/analysis/code_analyzer.py +770 -0
  442. tools/analysis/runtime_feedback.py +379 -0
  443. tools/analytics/__init__.py +2 -0
  444. tools/analytics/scorecard.py +538 -0
  445. tools/analytics/vsm_engine.py +612 -0
  446. tools/architecture/__init__.py +2 -0
  447. tools/architecture/adr_extractor.py +393 -0
  448. tools/audit/__init__.py +1 -0
  449. tools/audit/audit_logger.py +199 -0
  450. tools/audit/audit_query.py +153 -0
  451. tools/audit/decision_recorder.py +73 -0
  452. tools/audit_engine/__init__.py +12 -0
  453. tools/audit_engine/ai_advisor.py +906 -0
  454. tools/audit_engine/cli.py +286 -0
  455. tools/audit_engine/comparator.py +305 -0
  456. tools/audit_engine/eject_scaffolder.py +399 -0
  457. tools/audit_engine/engine.py +614 -0
  458. tools/audit_engine/git_fetcher.py +341 -0
  459. tools/audit_engine/regime_loader.py +200 -0
  460. tools/audit_engine/regime_updater.py +325 -0
  461. tools/audit_engine/report_card.py +289 -0
  462. tools/audit_engine/scanner.py +684 -0
  463. tools/audit_engine/self_heal.py +1042 -0
  464. tools/ci/__init__.py +2 -0
  465. tools/ci/connectors/__init__.py +2 -0
  466. tools/ci/connectors/base_connector.py +80 -0
  467. tools/ci/connectors/connector_registry.py +188 -0
  468. tools/ci/connectors/mattermost_connector.py +159 -0
  469. tools/ci/connectors/slack_connector.py +197 -0
  470. tools/ci/core/__init__.py +2 -0
  471. tools/ci/core/air_gap_detector.py +115 -0
  472. tools/ci/core/comment_handler.py +192 -0
  473. tools/ci/core/conversation_manager.py +480 -0
  474. tools/ci/core/event_envelope.py +500 -0
  475. tools/ci/core/event_router.py +444 -0
  476. tools/ci/core/failure_parser.py +397 -0
  477. tools/ci/core/recovery_engine.py +527 -0
  478. tools/ci/gate_enforcer.py +361 -0
  479. tools/ci/modules/__init__.py +2 -0
  480. tools/ci/modules/agent.py +271 -0
  481. tools/ci/modules/git_ops.py +175 -0
  482. tools/ci/modules/state.py +117 -0
  483. tools/ci/modules/vcs.py +303 -0
  484. tools/ci/modules/workflow_ops.py +295 -0
  485. tools/ci/modules/worktree.py +337 -0
  486. tools/ci/pipeline_config_generator.py +558 -0
  487. tools/ci/pr_intelligence.py +485 -0
  488. tools/ci/triggers/__init__.py +2 -0
  489. tools/ci/triggers/gitlab_task_monitor.py +327 -0
  490. tools/ci/triggers/poll_trigger.py +237 -0
  491. tools/ci/triggers/webhook_server.py +356 -0
  492. tools/ci/workflows/__init__.py +2 -0
  493. tools/ci/workflows/icdev_build.py +140 -0
  494. tools/ci/workflows/icdev_comply.py +284 -0
  495. tools/ci/workflows/icdev_document.py +152 -0
  496. tools/ci/workflows/icdev_e2e.py +188 -0
  497. tools/ci/workflows/icdev_patch.py +186 -0
  498. tools/ci/workflows/icdev_plan.py +202 -0
  499. tools/ci/workflows/icdev_plan_build.py +41 -0
  500. tools/ci/workflows/icdev_plan_build_test.py +46 -0
  501. tools/ci/workflows/icdev_plan_build_test_review.py +47 -0
  502. tools/ci/workflows/icdev_review.py +126 -0
  503. tools/ci/workflows/icdev_sdlc.py +261 -0
  504. tools/ci/workflows/icdev_test.py +240 -0
  505. tools/cli/__init__.py +1 -0
  506. tools/cli/output_formatter.py +756 -0
  507. tools/cloudforge/__init__.py +12 -0
  508. tools/cloudforge/airgap/__init__.py +2 -0
  509. tools/cloudforge/airgap/il_classifier.py +70 -0
  510. tools/cloudforge/airgap/offline_validator.py +42 -0
  511. tools/cloudforge/airgap/shift_emulator.py +155 -0
  512. tools/cloudforge/airgap/sneakernet.py +91 -0
  513. tools/cloudforge/cd_hub/__init__.py +2 -0
  514. tools/cloudforge/cd_hub/canary_deployer.py +88 -0
  515. tools/cloudforge/cd_hub/gitops_renderer.py +123 -0
  516. tools/cloudforge/cd_hub/hub_controller.py +143 -0
  517. tools/cloudforge/cd_hub/pipeline_bridge.py +30 -0
  518. tools/cloudforge/cd_hub/rollback_engine.py +29 -0
  519. tools/cloudforge/cd_hub/spoke_agent.py +51 -0
  520. tools/cloudforge/compliance/__init__.py +2 -0
  521. tools/cloudforge/compliance/ato_accelerator.py +272 -0
  522. tools/cloudforge/compliance/control_inheritor.py +127 -0
  523. tools/cloudforge/compliance/evidence_generator.py +129 -0
  524. tools/cloudforge/compliance/poam_bridge.py +41 -0
  525. tools/cloudforge/compliance/ssp_bridge.py +52 -0
  526. tools/cloudforge/compliance/stig_bridge.py +41 -0
  527. tools/cloudforge/container_forge/__init__.py +2 -0
  528. tools/cloudforge/container_forge/bigbang_renderer.py +85 -0
  529. tools/cloudforge/container_forge/hardener.py +169 -0
  530. tools/cloudforge/container_forge/image_scanner_bridge.py +33 -0
  531. tools/cloudforge/container_forge/runtime_policy.py +87 -0
  532. tools/cloudforge/container_forge/sbom_bridge.py +42 -0
  533. tools/cloudforge/finops/__init__.py +2 -0
  534. tools/cloudforge/finops/anomaly_detector.py +78 -0
  535. tools/cloudforge/finops/budget_tracker.py +96 -0
  536. tools/cloudforge/finops/chargeback.py +69 -0
  537. tools/cloudforge/finops/cost_collector.py +141 -0
  538. tools/cloudforge/finops/optimizer.py +55 -0
  539. tools/cloudforge/hybrid/__init__.py +2 -0
  540. tools/cloudforge/hybrid/connection_manager.py +141 -0
  541. tools/cloudforge/hybrid/dns_federator.py +56 -0
  542. tools/cloudforge/hybrid/health_monitor.py +108 -0
  543. tools/cloudforge/hybrid/identity_federator.py +53 -0
  544. tools/cloudforge/hybrid/network_bridge.py +68 -0
  545. tools/cloudforge/hybrid/topology_manager.py +147 -0
  546. tools/cloudforge/hybrid/workload_abstractor.py +92 -0
  547. tools/cloudforge/iac/__init__.py +2 -0
  548. tools/cloudforge/iac/drift_detector.py +154 -0
  549. tools/cloudforge/iac/module_library.py +265 -0
  550. tools/cloudforge/iac/opentofu_adapter.py +89 -0
  551. tools/cloudforge/iac/pulumi_renderer.py +292 -0
  552. tools/cloudforge/iac/state_backend.py +146 -0
  553. tools/cloudforge/iac/terraform_renderer.py +626 -0
  554. tools/cloudforge/landing_zone/__init__.py +2 -0
  555. tools/cloudforge/landing_zone/blueprint_loader.py +98 -0
  556. tools/cloudforge/landing_zone/blueprint_validator.py +113 -0
  557. tools/cloudforge/landing_zone/zone_provisioner.py +306 -0
  558. tools/cloudforge/landing_zone/zone_state.py +143 -0
  559. tools/cloudforge/mbse_thread/__init__.py +2 -0
  560. tools/cloudforge/mbse_thread/ato_thread_weaver.py +111 -0
  561. tools/cloudforge/mbse_thread/control_tracer.py +68 -0
  562. tools/cloudforge/mbse_thread/system_boundary.py +83 -0
  563. tools/cloudforge/metastore/__init__.py +2 -0
  564. tools/cloudforge/metastore/dependency_graph.py +202 -0
  565. tools/cloudforge/metastore/discovery.py +192 -0
  566. tools/cloudforge/metastore/registry.py +185 -0
  567. tools/cloudforge/metastore/rto_tracker.py +92 -0
  568. tools/cloudforge/metastore/runbook_linker.py +82 -0
  569. tools/cloudforge/migration/__init__.py +2 -0
  570. tools/cloudforge/migration/assessor.py +187 -0
  571. tools/cloudforge/migration/cutover_orchestrator.py +117 -0
  572. tools/cloudforge/migration/databridge_bridge.py +92 -0
  573. tools/cloudforge/migration/planner.py +98 -0
  574. tools/cloudforge/migration/risk_scorer.py +97 -0
  575. tools/cloudforge/migration/validation_runner.py +45 -0
  576. tools/cloudforge/migration/workload_inventory.py +107 -0
  577. tools/cloudforge/provider.py +319 -0
  578. tools/cloudforge/providers/__init__.py +2 -0
  579. tools/cloudforge/providers/aws_commercial.py +92 -0
  580. tools/cloudforge/providers/aws_govcloud.py +229 -0
  581. tools/cloudforge/providers/aws_secret.py +83 -0
  582. tools/cloudforge/providers/azure_commercial.py +80 -0
  583. tools/cloudforge/providers/azure_gov.py +91 -0
  584. tools/cloudforge/providers/azure_secret.py +71 -0
  585. tools/cloudforge/providers/gcp.py +102 -0
  586. tools/cloudforge/providers/oci.py +102 -0
  587. tools/cloudforge/registry.py +140 -0
  588. tools/cloudforge/runbooks/__init__.py +2 -0
  589. tools/cloudforge/runbooks/ai_generator.py +119 -0
  590. tools/cloudforge/runbooks/dag_validator.py +219 -0
  591. tools/cloudforge/runbooks/engine.py +470 -0
  592. tools/cloudforge/runbooks/models.py +99 -0
  593. tools/cloudforge/runbooks/snippet_library.py +158 -0
  594. tools/cloudforge/runbooks/template_loader.py +122 -0
  595. tools/cloudforge/runbooks/visualization.py +108 -0
  596. tools/cloudforge/siem/__init__.py +2 -0
  597. tools/cloudforge/siem/alert_rules.py +86 -0
  598. tools/cloudforge/siem/correlation_engine.py +61 -0
  599. tools/cloudforge/siem/log_aggregator.py +113 -0
  600. tools/cloudforge/siem/siem_dashboard_data.py +28 -0
  601. tools/cloudforge/supply_chain/__init__.py +2 -0
  602. tools/cloudforge/supply_chain/bridge.py +33 -0
  603. tools/cloudforge/supply_chain/iac_dependency_scanner.py +36 -0
  604. tools/cloudforge/supply_chain/provider_trust_scorer.py +54 -0
  605. tools/compat/__init__.py +21 -0
  606. tools/compat/cli_harmonizer.py +251 -0
  607. tools/compat/datetime_utils.py +18 -0
  608. tools/compat/db_utils.py +190 -0
  609. tools/compat/platform_utils.py +123 -0
  610. tools/compliance/__init__.py +1 -0
  611. tools/compliance/accountability_manager.py +391 -0
  612. tools/compliance/ai_accountability_audit.py +287 -0
  613. tools/compliance/ai_impact_assessor.py +267 -0
  614. tools/compliance/ai_incident_response.py +295 -0
  615. tools/compliance/ai_inventory_manager.py +233 -0
  616. tools/compliance/ai_reassessment_scheduler.py +250 -0
  617. tools/compliance/ai_transparency_audit.py +247 -0
  618. tools/compliance/atlas_assessor.py +276 -0
  619. tools/compliance/atlas_report_generator.py +1199 -0
  620. tools/compliance/base_assessor.py +591 -0
  621. tools/compliance/cato_live_engine.py +607 -0
  622. tools/compliance/cato_monitor.py +1371 -0
  623. tools/compliance/cato_scheduler.py +698 -0
  624. tools/compliance/cjis_assessor.py +76 -0
  625. tools/compliance/classification_manager.py +1340 -0
  626. tools/compliance/cmmc_assessor.py +1478 -0
  627. tools/compliance/cmmc_report_generator.py +1087 -0
  628. tools/compliance/compliance_detector.py +452 -0
  629. tools/compliance/compliance_exporter.py +418 -0
  630. tools/compliance/compliance_status.py +810 -0
  631. tools/compliance/control_mapper.py +488 -0
  632. tools/compliance/crosswalk_engine.py +1208 -0
  633. tools/compliance/cssp_assessor.py +1032 -0
  634. tools/compliance/cssp_evidence_collector.py +716 -0
  635. tools/compliance/cssp_report_generator.py +1103 -0
  636. tools/compliance/cui_marker.py +387 -0
  637. tools/compliance/diagram_validator.py +599 -0
  638. tools/compliance/emass/__init__.py +2 -0
  639. tools/compliance/emass/emass_client.py +822 -0
  640. tools/compliance/emass/emass_export.py +758 -0
  641. tools/compliance/emass/emass_sync.py +807 -0
  642. tools/compliance/eu_ai_act_classifier.py +193 -0
  643. tools/compliance/evidence_collector.py +459 -0
  644. tools/compliance/fairness_assessor.py +310 -0
  645. tools/compliance/fedramp_20x_ksi_emitter.py +692 -0
  646. tools/compliance/fedramp_assessor.py +1795 -0
  647. tools/compliance/fedramp_authorization_packager.py +137 -0
  648. tools/compliance/fedramp_ksi_generator.py +349 -0
  649. tools/compliance/fedramp_report_generator.py +1115 -0
  650. tools/compliance/fips199_categorizer.py +869 -0
  651. tools/compliance/fips200_validator.py +304 -0
  652. tools/compliance/firmware_sbom.py +646 -0
  653. tools/compliance/gao_ai_assessor.py +228 -0
  654. tools/compliance/gao_evidence_builder.py +302 -0
  655. tools/compliance/hipaa_assessor.py +78 -0
  656. tools/compliance/hitrust_assessor.py +49 -0
  657. tools/compliance/incident_response_plan.py +705 -0
  658. tools/compliance/inheritance_engine.py +693 -0
  659. tools/compliance/iso27001_assessor.py +92 -0
  660. tools/compliance/iso42001_assessor.py +114 -0
  661. tools/compliance/ivv_assessor.py +2314 -0
  662. tools/compliance/ivv_report_generator.py +1649 -0
  663. tools/compliance/model_card_generator.py +291 -0
  664. tools/compliance/mosa_assessor.py +117 -0
  665. tools/compliance/multi_regime_assessor.py +441 -0
  666. tools/compliance/narrative_generator.py +1012 -0
  667. tools/compliance/narrative_quality_gate.py +701 -0
  668. tools/compliance/narrative_workflow.py +814 -0
  669. tools/compliance/nist_800_207_assessor.py +191 -0
  670. tools/compliance/nist_ai_600_1_assessor.py +185 -0
  671. tools/compliance/nist_ai_rmf_assessor.py +110 -0
  672. tools/compliance/nist_lookup.py +244 -0
  673. tools/compliance/omb_m25_21_assessor.py +225 -0
  674. tools/compliance/omb_m26_04_assessor.py +185 -0
  675. tools/compliance/oscal_catalog_adapter.py +395 -0
  676. tools/compliance/oscal_generator.py +2157 -0
  677. tools/compliance/oscal_tools.py +1182 -0
  678. tools/compliance/oscal_validator.py +692 -0
  679. tools/compliance/owasp_agentic_assessor.py +227 -0
  680. tools/compliance/owasp_asi_assessor.py +197 -0
  681. tools/compliance/owasp_llm_assessor.py +245 -0
  682. tools/compliance/pci_dss_assessor.py +80 -0
  683. tools/compliance/pi_compliance_tracker.py +1447 -0
  684. tools/compliance/poam_generator.py +388 -0
  685. tools/compliance/resolve_marking.py +272 -0
  686. tools/compliance/sbd_assessor.py +2070 -0
  687. tools/compliance/sbd_report_generator.py +1223 -0
  688. tools/compliance/sbom_generator.py +993 -0
  689. tools/compliance/siem_config_generator.py +661 -0
  690. tools/compliance/slsa_attestation_generator.py +479 -0
  691. tools/compliance/soc2_assessor.py +77 -0
  692. tools/compliance/ssp_generator.py +556 -0
  693. tools/compliance/stig_checker.py +712 -0
  694. tools/compliance/swft_evidence_bundler.py +326 -0
  695. tools/compliance/system_card_generator.py +303 -0
  696. tools/compliance/template_exchange.py +513 -0
  697. tools/compliance/traceability_matrix.py +1268 -0
  698. tools/compliance/universal_classification_manager.py +1159 -0
  699. tools/compliance/xacta/__init__.py +2 -0
  700. tools/compliance/xacta/xacta_client.py +438 -0
  701. tools/compliance/xacta/xacta_export.py +546 -0
  702. tools/compliance/xacta/xacta_sync.py +322 -0
  703. tools/compliance/xai_assessor.py +231 -0
  704. tools/core/__init__.py +2 -0
  705. tools/core/circuit_breaker.py +353 -0
  706. tools/core/compliance_sidecar.py +344 -0
  707. tools/core/container.py +110 -0
  708. tools/core/errors.py +256 -0
  709. tools/core/feature_flags.py +311 -0
  710. tools/core/task_dlq.py +350 -0
  711. tools/dashboard/__init__.py +2 -0
  712. tools/dashboard/app.py +6288 -0
  713. tools/dashboard/templates/agent_evolution.html +287 -0
  714. tools/dashboard/templates/agents/list.html +71 -0
  715. tools/dashboard/templates/agents.html +132 -0
  716. tools/dashboard/templates/architecture.html +289 -0
  717. tools/dashboard/templates/ato_simulator.html +170 -0
  718. tools/dashboard/templates/audit_engine.html +844 -0
  719. tools/dashboard/templates/base.html +236 -0
  720. tools/dashboard/templates/cato_live.html +116 -0
  721. tools/dashboard/templates/cloudforge.html +195 -0
  722. tools/dashboard/templates/cloudforge_finops.html +111 -0
  723. tools/dashboard/templates/cloudforge_hybrid.html +122 -0
  724. tools/dashboard/templates/cloudforge_metastore.html +234 -0
  725. tools/dashboard/templates/cloudforge_migration.html +87 -0
  726. tools/dashboard/templates/cloudforge_runbooks.html +201 -0
  727. tools/dashboard/templates/cloudforge_siem.html +94 -0
  728. tools/dashboard/templates/compliance_accel.html +292 -0
  729. tools/dashboard/templates/crashes.html +122 -0
  730. tools/dashboard/templates/databridge.html +305 -0
  731. tools/dashboard/templates/databridge_analytics.html +195 -0
  732. tools/dashboard/templates/databridge_mapping.html +345 -0
  733. tools/dashboard/templates/databridge_messaging.html +321 -0
  734. tools/dashboard/templates/decisions.html +258 -0
  735. tools/dashboard/templates/devices.html +151 -0
  736. tools/dashboard/templates/devsecops_maturity.html +278 -0
  737. tools/dashboard/templates/edge_ai.html +128 -0
  738. tools/dashboard/templates/firmware.html +120 -0
  739. tools/dashboard/templates/firmware_sbom.html +193 -0
  740. tools/dashboard/templates/forge_hub.html +196 -0
  741. tools/dashboard/templates/forge_studio.html +379 -0
  742. tools/dashboard/templates/forge_studio_analytics.html +360 -0
  743. tools/dashboard/templates/forge_studio_builder.html +1637 -0
  744. tools/dashboard/templates/forge_studio_compliance.html +310 -0
  745. tools/dashboard/templates/forge_studio_deploy.html +573 -0
  746. tools/dashboard/templates/forge_studio_enterprise.html +888 -0
  747. tools/dashboard/templates/forge_studio_marketplace.html +502 -0
  748. tools/dashboard/templates/forge_studio_workflow.html +696 -0
  749. tools/dashboard/templates/golden_path.html +175 -0
  750. tools/dashboard/templates/govcon.html +280 -0
  751. tools/dashboard/templates/harness.html +148 -0
  752. tools/dashboard/templates/index.html +207 -0
  753. tools/dashboard/templates/intelligence.html +336 -0
  754. tools/dashboard/templates/knowledge/index.html +190 -0
  755. tools/dashboard/templates/knowledge_graph.html +739 -0
  756. tools/dashboard/templates/login.html +51 -0
  757. tools/dashboard/templates/marketplace.html +336 -0
  758. tools/dashboard/templates/marketplace_admin.html +247 -0
  759. tools/dashboard/templates/missions.html +403 -0
  760. tools/dashboard/templates/narratives.html +154 -0
  761. tools/dashboard/templates/pr_intelligence.html +151 -0
  762. tools/dashboard/templates/proposals/detail.html +300 -0
  763. tools/dashboard/templates/proposals/list.html +52 -0
  764. tools/dashboard/templates/proposals/sam_detail.html +132 -0
  765. tools/dashboard/templates/proposals/section_detail.html +375 -0
  766. tools/dashboard/templates/research.html +222 -0
  767. tools/dashboard/templates/resilience.html +300 -0
  768. tools/dashboard/templates/scorecard.html +162 -0
  769. tools/dashboard/templates/simulator.html +131 -0
  770. tools/dashboard/templates/template_exchange.html +147 -0
  771. tools/dashboard/templates/thread_heatmap.html +151 -0
  772. tools/dashboard/templates/threat_model.html +195 -0
  773. tools/dashboard/templates/vsm.html +141 -0
  774. tools/dashboard/templates/writeguard.html +277 -0
  775. tools/databridge/__init__.py +5 -0
  776. tools/databridge/agent/__init__.py +2 -0
  777. tools/databridge/agent/daemon.py +227 -0
  778. tools/databridge/agent/tunnel.py +101 -0
  779. tools/databridge/agent/ws_relay.py +91 -0
  780. tools/databridge/analytics.py +167 -0
  781. tools/databridge/arrow_pipeline.py +327 -0
  782. tools/databridge/connection_manager.py +424 -0
  783. tools/databridge/connector.py +331 -0
  784. tools/databridge/connectors/__init__.py +2 -0
  785. tools/databridge/connectors/argocd_connector.py +160 -0
  786. tools/databridge/connectors/avro_connector.py +203 -0
  787. tools/databridge/connectors/azure_blob.py +63 -0
  788. tools/databridge/connectors/cdc_connector.py +205 -0
  789. tools/databridge/connectors/csv_connector.py +172 -0
  790. tools/databridge/connectors/datadog_connector.py +153 -0
  791. tools/databridge/connectors/discord_messaging.py +215 -0
  792. tools/databridge/connectors/dynamics365.py +151 -0
  793. tools/databridge/connectors/elasticsearch_connector.py +145 -0
  794. tools/databridge/connectors/email_base.py +114 -0
  795. tools/databridge/connectors/excel_connector.py +175 -0
  796. tools/databridge/connectors/fsspec_base.py +300 -0
  797. tools/databridge/connectors/gcs.py +53 -0
  798. tools/databridge/connectors/github_connector.py +138 -0
  799. tools/databridge/connectors/gitlab_connector.py +132 -0
  800. tools/databridge/connectors/gmail_connector.py +182 -0
  801. tools/databridge/connectors/hdfs.py +57 -0
  802. tools/databridge/connectors/health_base.py +401 -0
  803. tools/databridge/connectors/hubspot.py +124 -0
  804. tools/databridge/connectors/imap_connector.py +171 -0
  805. tools/databridge/connectors/jenkins_connector.py +138 -0
  806. tools/databridge/connectors/jira_connector.py +86 -0
  807. tools/databridge/connectors/json_connector.py +184 -0
  808. tools/databridge/connectors/kafka_connector.py +246 -0
  809. tools/databridge/connectors/kinesis_connector.py +238 -0
  810. tools/databridge/connectors/local_fs.py +30 -0
  811. tools/databridge/connectors/matrix.py +197 -0
  812. tools/databridge/connectors/mattermost_messaging.py +184 -0
  813. tools/databridge/connectors/messaging_base.py +172 -0
  814. tools/databridge/connectors/mssql.py +63 -0
  815. tools/databridge/connectors/mysql.py +57 -0
  816. tools/databridge/connectors/netsuite.py +170 -0
  817. tools/databridge/connectors/o365_mail.py +196 -0
  818. tools/databridge/connectors/oracle.py +65 -0
  819. tools/databridge/connectors/pagerduty_connector.py +162 -0
  820. tools/databridge/connectors/parquet_connector.py +131 -0
  821. tools/databridge/connectors/postgresql.py +58 -0
  822. tools/databridge/connectors/s3.py +65 -0
  823. tools/databridge/connectors/saas_base.py +198 -0
  824. tools/databridge/connectors/salesforce.py +126 -0
  825. tools/databridge/connectors/sap.py +89 -0
  826. tools/databridge/connectors/servicenow.py +60 -0
  827. tools/databridge/connectors/signal_messaging.py +150 -0
  828. tools/databridge/connectors/slack_messaging.py +203 -0
  829. tools/databridge/connectors/smtp_connector.py +126 -0
  830. tools/databridge/connectors/soap_base.py +258 -0
  831. tools/databridge/connectors/splunk_connector.py +171 -0
  832. tools/databridge/connectors/sql_base.py +310 -0
  833. tools/databridge/connectors/sqlite_connector.py +76 -0
  834. tools/databridge/connectors/teams.py +148 -0
  835. tools/databridge/connectors/telegram.py +192 -0
  836. tools/databridge/connectors/whatsapp.py +137 -0
  837. tools/databridge/data_profiler.py +99 -0
  838. tools/databridge/forge/__init__.py +6 -0
  839. tools/databridge/forge/base_selector.py +150 -0
  840. tools/databridge/forge/code_generator.py +206 -0
  841. tools/databridge/forge/community_hub.py +539 -0
  842. tools/databridge/forge/forge_agent.py +306 -0
  843. tools/databridge/forge/import_handler.py +133 -0
  844. tools/databridge/forge/integration_tester.py +127 -0
  845. tools/databridge/forge/marketplace_publisher.py +164 -0
  846. tools/databridge/forge/promoter.py +159 -0
  847. tools/databridge/forge/sandbox_manager.py +257 -0
  848. tools/databridge/forge/spec_parser.py +358 -0
  849. tools/databridge/forge/static_validator.py +363 -0
  850. tools/databridge/forge/templates/__init__.py +591 -0
  851. tools/databridge/format_converter.py +188 -0
  852. tools/databridge/mapping_engine.py +348 -0
  853. tools/databridge/messaging/__init__.py +5 -0
  854. tools/databridge/messaging/agent_bridge.py +254 -0
  855. tools/databridge/messaging/message_envelope.py +111 -0
  856. tools/databridge/messaging/message_logger.py +204 -0
  857. tools/databridge/messaging/messaging_daemon.py +326 -0
  858. tools/databridge/messaging/oauth2_manager.py +411 -0
  859. tools/databridge/pii_detector.py +221 -0
  860. tools/databridge/registry.py +352 -0
  861. tools/databridge/relay_server.py +105 -0
  862. tools/databridge/scale/__init__.py +16 -0
  863. tools/databridge/scale/backpressure.py +134 -0
  864. tools/databridge/scale/chunked_pipeline.py +169 -0
  865. tools/databridge/scale/connection_pool.py +293 -0
  866. tools/databridge/scale/engine.py +492 -0
  867. tools/databridge/scale/worker_pool.py +140 -0
  868. tools/databridge/scale/write_batcher.py +250 -0
  869. tools/databridge/schema_engine.py +324 -0
  870. tools/databridge/stream_manager.py +225 -0
  871. tools/databridge/sync_engine.py +411 -0
  872. tools/databridge/transforms.py +302 -0
  873. tools/db/__init__.py +1 -0
  874. tools/db/backup.py +312 -0
  875. tools/db/backup_manager.py +832 -0
  876. tools/db/init_icdev_db.py +7753 -0
  877. tools/db/init_sparkpilot_db.py +431 -0
  878. tools/db/migrate.py +177 -0
  879. tools/db/migrate_innovation_audit.py +165 -0
  880. tools/db/migration_runner.py +548 -0
  881. tools/db/migrations/001_baseline/meta.json +9 -0
  882. tools/db/migrations/001_baseline/up.py +67 -0
  883. tools/db/migrations/002_memory_enhancements/down.sql +8 -0
  884. tools/db/migrations/002_memory_enhancements/meta.json +9 -0
  885. tools/db/migrations/002_memory_enhancements/up.py +119 -0
  886. tools/db/migrations/003_dev_profiles/meta.json +8 -0
  887. tools/db/migrations/003_dev_profiles/up.py +93 -0
  888. tools/db/migrations/004_innovation_engine/down.py +19 -0
  889. tools/db/migrations/004_innovation_engine/up.py +227 -0
  890. tools/db/migrations/005_phase_37_ai_security/down.py +19 -0
  891. tools/db/migrations/005_phase_37_ai_security/up.py +257 -0
  892. tools/db/migrations/006_phase_36_evolution/down.py +21 -0
  893. tools/db/migrations/006_phase_36_evolution/up.py +323 -0
  894. tools/db/migrations/007_phase_38_cloud/down.py +14 -0
  895. tools/db/migrations/007_phase_38_cloud/up.py +110 -0
  896. tools/db/migrations/008_phase36_37_integration/up.py +55 -0
  897. tools/db/migrations/__init__.py +2 -0
  898. tools/db/pg_migrate.py +642 -0
  899. tools/db/storage.py +1080 -0
  900. tools/decisions/__init__.py +2 -0
  901. tools/decisions/dmn_engine.py +695 -0
  902. tools/devsecops/__init__.py +2 -0
  903. tools/devsecops/attestation_manager.py +449 -0
  904. tools/devsecops/network_segmentation_generator.py +604 -0
  905. tools/devsecops/pdp_config_generator.py +1246 -0
  906. tools/devsecops/pipeline_security_generator.py +475 -0
  907. tools/devsecops/policy_generator.py +644 -0
  908. tools/devsecops/profile_manager.py +374 -0
  909. tools/devsecops/service_mesh_generator.py +1063 -0
  910. tools/devsecops/zta_maturity_scorer.py +355 -0
  911. tools/devsecops/zta_terraform_generator.py +1301 -0
  912. tools/edge_ai/__init__.py +2 -0
  913. tools/edge_ai/model_manager.py +200 -0
  914. tools/embedded/__init__.py +2 -0
  915. tools/embedded/cmake_generator.py +318 -0
  916. tools/embedded/crash_analyzer.py +191 -0
  917. tools/embedded/nl_to_firmware.py +277 -0
  918. tools/events/__init__.py +1 -0
  919. tools/events/event_bus.py +199 -0
  920. tools/finetune/pair_generator.py +832 -0
  921. tools/fleet/__init__.py +2 -0
  922. tools/fleet/device_registry.py +148 -0
  923. tools/fleet/ota_manager.py +153 -0
  924. tools/forge_studio/__init__.py +13 -0
  925. tools/forge_studio/analytics/__init__.py +0 -0
  926. tools/forge_studio/analytics/process_miner.py +383 -0
  927. tools/forge_studio/audit.py +183 -0
  928. tools/forge_studio/blueprint/__init__.py +2 -0
  929. tools/forge_studio/blueprint/build_tracker.py +317 -0
  930. tools/forge_studio/blueprint/export_engine.py +441 -0
  931. tools/forge_studio/blueprint/parent_client.py +335 -0
  932. tools/forge_studio/catalog/__init__.py +2 -0
  933. tools/forge_studio/catalog/component_registry.py +176 -0
  934. tools/forge_studio/catalog/schema_validator.py +193 -0
  935. tools/forge_studio/compliance/__init__.py +1 -0
  936. tools/forge_studio/compliance/compliance_wiring.py +554 -0
  937. tools/forge_studio/deploy/__init__.py +1 -0
  938. tools/forge_studio/deploy/airgap_packager.py +466 -0
  939. tools/forge_studio/deploy/deploy_engine.py +1792 -0
  940. tools/forge_studio/deploy/env_manager.py +431 -0
  941. tools/forge_studio/eject/__init__.py +2 -0
  942. tools/forge_studio/eject/docker_compose_generator.py +237 -0
  943. tools/forge_studio/eject/eject_engine.py +230 -0
  944. tools/forge_studio/eject/expo_scaffolder.py +303 -0
  945. tools/forge_studio/eject/nextjs_scaffolder.py +338 -0
  946. tools/forge_studio/enterprise/__init__.py +0 -0
  947. tools/forge_studio/enterprise/custom_frameworks.py +826 -0
  948. tools/forge_studio/enterprise/hardening_engine.py +1530 -0
  949. tools/forge_studio/enterprise/sso_manager.py +718 -0
  950. tools/forge_studio/enterprise/whitelabel_engine.py +887 -0
  951. tools/forge_studio/formula/__init__.py +0 -0
  952. tools/forge_studio/formula/expression_engine.py +562 -0
  953. tools/forge_studio/formula/formula_registry.py +265 -0
  954. tools/forge_studio/generator/__init__.py +2 -0
  955. tools/forge_studio/generator/app_generator.py +584 -0
  956. tools/forge_studio/generator/complexity_detector.py +368 -0
  957. tools/forge_studio/generator/prompt_templates.py +104 -0
  958. tools/forge_studio/generator/spec_builder.py +192 -0
  959. tools/forge_studio/intake_bridge.py +898 -0
  960. tools/forge_studio/marketplace/__init__.py +0 -0
  961. tools/forge_studio/marketplace/component_hub.py +428 -0
  962. tools/forge_studio/models.py +369 -0
  963. tools/forge_studio/renderer/__init__.py +2 -0
  964. tools/forge_studio/renderer/json_render_engine.py +623 -0
  965. tools/forge_studio/renderer/layout_engine.py +214 -0
  966. tools/forge_studio/renderer/rn_component_map.py +182 -0
  967. tools/forge_studio/supabase/__init__.py +2 -0
  968. tools/forge_studio/supabase/auth_generator.py +283 -0
  969. tools/forge_studio/supabase/migration_generator.py +93 -0
  970. tools/forge_studio/supabase/schema_generator.py +281 -0
  971. tools/forge_studio/tenant_manager.py +387 -0
  972. tools/forge_studio/workflow/__init__.py +2 -0
  973. tools/forge_studio/workflow/bpmn_adapter.py +489 -0
  974. tools/govcon/draft_orchestrator.py +1151 -0
  975. tools/govcon/engine_enrichment.py +373 -0
  976. tools/govcon/knowledge_base.py +487 -0
  977. tools/govcon/knowledge_ingestion.py +510 -0
  978. tools/govcon/sam_scanner.py +754 -0
  979. tools/harness/__init__.py +6 -0
  980. tools/harness/exit_criteria_evaluator.py +231 -0
  981. tools/harness/maturity_assessor.py +347 -0
  982. tools/harness/scaffold_harness.py +416 -0
  983. tools/harness/trace_analyzer.py +281 -0
  984. tools/infra/__init__.py +1 -0
  985. tools/infra/ansible_generator.py +867 -0
  986. tools/infra/dockerfile_generator.py +359 -0
  987. tools/infra/infra_status.py +384 -0
  988. tools/infra/ironbank_metadata_generator.py +403 -0
  989. tools/infra/k8s_generator.py +1000 -0
  990. tools/infra/pipeline_generator.py +830 -0
  991. tools/infra/rollback.py +389 -0
  992. tools/infra/terraform_generator.py +1140 -0
  993. tools/infra/terraform_generator_azure.py +1252 -0
  994. tools/infra/terraform_generator_gcp.py +951 -0
  995. tools/infra/terraform_generator_ibm.py +359 -0
  996. tools/infra/terraform_generator_oci.py +918 -0
  997. tools/infra/terraform_generator_onprem.py +318 -0
  998. tools/knowledge/__init__.py +1 -0
  999. tools/knowledge/knowledge_ingest.py +281 -0
  1000. tools/knowledge/pattern_detector.py +681 -0
  1001. tools/knowledge/recommendation_engine.py +449 -0
  1002. tools/knowledge/self_heal_analyzer.py +492 -0
  1003. tools/knowledge_graph/__init__.py +2 -0
  1004. tools/knowledge_graph/graph_rag.py +498 -0
  1005. tools/knowledge_graph/ingester.py +406 -0
  1006. tools/knowledge_graph/insight_generator.py +369 -0
  1007. tools/knowledge_graph/text_network.py +832 -0
  1008. tools/llm/__init__.py +72 -0
  1009. tools/llm/anthropic_provider.py +170 -0
  1010. tools/llm/azure_openai_provider.py +338 -0
  1011. tools/llm/bedrock_provider.py +315 -0
  1012. tools/llm/embedding_provider.py +438 -0
  1013. tools/llm/gemini_provider.py +381 -0
  1014. tools/llm/ibm_watsonx_provider.py +231 -0
  1015. tools/llm/oci_genai_provider.py +462 -0
  1016. tools/llm/ollama_provider.py +350 -0
  1017. tools/llm/openai_provider.py +225 -0
  1018. tools/llm/prompt_registry.py +447 -0
  1019. tools/llm/provider.py +355 -0
  1020. tools/llm/provider_sdk.py +175 -0
  1021. tools/llm/router.py +1124 -0
  1022. tools/llm/semantic_cache.py +394 -0
  1023. tools/llm/vertex_ai_provider.py +374 -0
  1024. tools/maintenance/__init__.py +2 -0
  1025. tools/maintenance/dependency_scanner.py +1016 -0
  1026. tools/maintenance/maintenance_auditor.py +804 -0
  1027. tools/maintenance/remediation_engine.py +957 -0
  1028. tools/maintenance/vulnerability_checker.py +978 -0
  1029. tools/manifest.md +1066 -0
  1030. tools/marketplace/asset_installer.py +639 -0
  1031. tools/marketplace/feedback_validator.py +359 -0
  1032. tools/marketplace/license_client.py +458 -0
  1033. tools/marketplace/module_crypto.py +544 -0
  1034. tools/marketplace/module_runtime.py +236 -0
  1035. tools/marketplace/token_store.py +264 -0
  1036. tools/mbse/__init__.py +3 -0
  1037. tools/mbse/des_assessor.py +1173 -0
  1038. tools/mbse/des_report_generator.py +787 -0
  1039. tools/mbse/diagram_extractor.py +792 -0
  1040. tools/mbse/digital_thread.py +1650 -0
  1041. tools/mbse/model_code_generator.py +1115 -0
  1042. tools/mbse/model_control_mapper.py +410 -0
  1043. tools/mbse/pi_model_tracker.py +1079 -0
  1044. tools/mbse/reqif_parser.py +1468 -0
  1045. tools/mbse/sync_engine.py +1789 -0
  1046. tools/mbse/thread_heatmap.py +445 -0
  1047. tools/mbse/xmi_parser.py +1558 -0
  1048. tools/mcp/builder_server.py +64 -0
  1049. tools/mcp/compliance_server.py +64 -0
  1050. tools/mcp/connector_forge_server.py +155 -0
  1051. tools/mcp/core_server.py +64 -0
  1052. tools/mcp/devsecops_server.py +11 -0
  1053. tools/mcp/devsecops_zta_server.py +64 -0
  1054. tools/mcp/knowledge_server.py +64 -0
  1055. tools/mcp/monitor_server.py +64 -0
  1056. tools/mcp/ops_server.py +300 -0
  1057. tools/mcp/requirements_analyst_server.py +64 -0
  1058. tools/mcp/requirements_server.py +11 -0
  1059. tools/mcp/security_server.py +64 -0
  1060. tools/mcp/simulation_server.py +64 -0
  1061. tools/mcp/supply_chain_server.py +64 -0
  1062. tools/mcp/tool_registry.py +299 -0
  1063. tools/memory/__init__.py +2 -0
  1064. tools/memory/auto_capture.py +346 -0
  1065. tools/memory/embed_memory.py +157 -0
  1066. tools/memory/history_compressor.py +334 -0
  1067. tools/memory/hybrid_search.py +235 -0
  1068. tools/memory/maintenance_cron.py +288 -0
  1069. tools/memory/memory_consolidation.py +439 -0
  1070. tools/memory/memory_db.py +132 -0
  1071. tools/memory/memory_read.py +101 -0
  1072. tools/memory/memory_write.py +221 -0
  1073. tools/memory/semantic_search.py +138 -0
  1074. tools/memory/time_decay.py +434 -0
  1075. tools/missions/__init__.py +2 -0
  1076. tools/missions/mission_engine.py +459 -0
  1077. tools/monitor/__init__.py +1 -0
  1078. tools/monitor/alert_correlator.py +486 -0
  1079. tools/monitor/auto_resolver.py +603 -0
  1080. tools/monitor/health_checker.py +507 -0
  1081. tools/monitor/heartbeat_daemon.py +779 -0
  1082. tools/monitor/log_analyzer.py +507 -0
  1083. tools/monitor/metric_collector.py +484 -0
  1084. tools/mosa/__init__.py +10 -0
  1085. tools/mosa/icd_generator.py +358 -0
  1086. tools/mosa/modular_design_analyzer.py +682 -0
  1087. tools/mosa/mosa_code_enforcer.py +348 -0
  1088. tools/mosa/tsp_generator.py +265 -0
  1089. tools/observability/__init__.py +100 -0
  1090. tools/observability/genai_attributes.py +88 -0
  1091. tools/observability/instrumentation.py +140 -0
  1092. tools/observability/mlflow_exporter.py +193 -0
  1093. tools/observability/otel_tracer.py +168 -0
  1094. tools/observability/provenance/__init__.py +3 -0
  1095. tools/observability/provenance/prov_recorder.py +322 -0
  1096. tools/observability/shap/__init__.py +3 -0
  1097. tools/observability/shap/agent_shap.py +274 -0
  1098. tools/observability/sqlite_tracer.py +360 -0
  1099. tools/observability/trace_context.py +205 -0
  1100. tools/observability/tracer.py +230 -0
  1101. tools/orchestration/__init__.py +1 -0
  1102. tools/orchestration/peer_channels.py +254 -0
  1103. tools/orchestration/saga_coordinator.py +390 -0
  1104. tools/project/__init__.py +1 -0
  1105. tools/project/manifest_loader.py +418 -0
  1106. tools/project/project_create.py +350 -0
  1107. tools/project/project_list.py +171 -0
  1108. tools/project/project_scaffold.py +1715 -0
  1109. tools/project/project_status.py +478 -0
  1110. tools/project/session_context_builder.py +752 -0
  1111. tools/project/validate_manifest.py +54 -0
  1112. tools/rag/corrective_rag.py +582 -0
  1113. tools/rag/source_registry.py +482 -0
  1114. tools/requirements/__init__.py +1 -0
  1115. tools/requirements/ai_governance_scorer.py +207 -0
  1116. tools/requirements/boundary_analyzer.py +1281 -0
  1117. tools/requirements/clarification_engine.py +605 -0
  1118. tools/requirements/complexity_scorer.py +369 -0
  1119. tools/requirements/consistency_analyzer.py +789 -0
  1120. tools/requirements/constitution_manager.py +592 -0
  1121. tools/requirements/decomposition_engine.py +764 -0
  1122. tools/requirements/document_extractor.py +1002 -0
  1123. tools/requirements/elicitation_techniques.py +508 -0
  1124. tools/requirements/gap_detector.py +260 -0
  1125. tools/requirements/intake_engine.py +2175 -0
  1126. tools/requirements/prd_generator.py +839 -0
  1127. tools/requirements/prd_validator.py +584 -0
  1128. tools/requirements/readiness_scorer.py +302 -0
  1129. tools/requirements/spec_organizer.py +1015 -0
  1130. tools/requirements/spec_quality_checker.py +1083 -0
  1131. tools/requirements/traceability_builder.py +566 -0
  1132. tools/research/__init__.py +3 -0
  1133. tools/research/academic_scanner.py +130 -0
  1134. tools/research/build_buy_analyzer.py +229 -0
  1135. tools/research/challenge_scorer.py +280 -0
  1136. tools/research/community_scanner.py +174 -0
  1137. tools/research/cross_engine_bridge.py +124 -0
  1138. tools/research/dossier_generator.py +305 -0
  1139. tools/research/landscape_scanner.py +315 -0
  1140. tools/research/regulatory_scanner.py +248 -0
  1141. tools/research/research_manager.py +469 -0
  1142. tools/research/source_scanner.py +150 -0
  1143. tools/research/vertical_loader.py +118 -0
  1144. tools/saas/__init__.py +0 -0
  1145. tools/saas/licensing/__init__.py +0 -0
  1146. tools/saas/licensing/license_validator.py +345 -0
  1147. tools/scaffold/__init__.py +2 -0
  1148. tools/scaffold/golden_path.py +504 -0
  1149. tools/security/__init__.py +1 -0
  1150. tools/security/agent_output_validator.py +330 -0
  1151. tools/security/agent_trust_scorer.py +652 -0
  1152. tools/security/ai_bom_generator.py +718 -0
  1153. tools/security/ai_telemetry_logger.py +469 -0
  1154. tools/security/atlas_red_team.py +541 -0
  1155. tools/security/code_pattern_scanner.py +382 -0
  1156. tools/security/confabulation_detector.py +265 -0
  1157. tools/security/container_scanner.py +489 -0
  1158. tools/security/dependency_auditor.py +942 -0
  1159. tools/security/endpoint_security_scanner.py +626 -0
  1160. tools/security/mcp_tool_authorizer.py +242 -0
  1161. tools/security/output_verifier.py +427 -0
  1162. tools/security/prompt_injection_detector.py +737 -0
  1163. tools/security/sast_runner.py +946 -0
  1164. tools/security/secret_detector.py +376 -0
  1165. tools/security/threat_modeler.py +678 -0
  1166. tools/security/tool_chain_validator.py +357 -0
  1167. tools/security/vuln_scanner.py +536 -0
  1168. tools/simulation/__init__.py +2 -0
  1169. tools/simulation/ato_simulator.py +517 -0
  1170. tools/simulation/coa_generator.py +1539 -0
  1171. tools/simulation/monte_carlo.py +745 -0
  1172. tools/simulation/scenario_manager.py +1060 -0
  1173. tools/simulation/simulation_engine.py +1091 -0
  1174. tools/simulator/__init__.py +2 -0
  1175. tools/simulator/sim_runner.py +272 -0
  1176. tools/supply_chain/__init__.py +2 -0
  1177. tools/supply_chain/cve_triager.py +690 -0
  1178. tools/supply_chain/dependency_graph.py +630 -0
  1179. tools/supply_chain/isa_manager.py +526 -0
  1180. tools/supply_chain/scrm_assessor.py +531 -0
  1181. tools/supply_chain/slsa_verifier.py +473 -0
  1182. tools/testing/__init__.py +2 -0
  1183. tools/testing/acceptance_validator.py +411 -0
  1184. tools/testing/api_surface_extractor.py +749 -0
  1185. tools/testing/claude_dir_validator.py +831 -0
  1186. tools/testing/data_types.py +199 -0
  1187. tools/testing/e2e_runner.py +715 -0
  1188. tools/testing/fuzz_cli.py +306 -0
  1189. tools/testing/health_check.py +483 -0
  1190. tools/testing/platform_check.py +143 -0
  1191. tools/testing/production_audit.py +1836 -0
  1192. tools/testing/production_remediate.py +803 -0
  1193. tools/testing/screenshot_validator.py +538 -0
  1194. tools/testing/smoke_test.py +283 -0
  1195. tools/testing/test_agent_models.py +117 -0
  1196. tools/testing/test_orchestrator.py +957 -0
  1197. tools/testing/utils.py +229 -0
  1198. tools/writeguard/__init__.py +1 -0
  1199. tools/writeguard/main.py +1 -0
  1200. tools/writing/__init__.py +7 -0
  1201. tools/writing/ai_content_detector.py +316 -0
  1202. tools/writing/analysis_engine.py +454 -0
  1203. tools/writing/batch_analyzer.py +276 -0
  1204. tools/writing/coherence_analyzer.py +221 -0
  1205. tools/writing/govcon_bridge.py +509 -0
  1206. tools/writing/grammar_checker.py +270 -0
  1207. tools/writing/plagiarism_detector.py +106 -0
  1208. tools/writing/readability_scorer.py +201 -0
  1209. tools/writing/rewriter.py +96 -0
  1210. tools/writing/signal_registrar.py +167 -0
  1211. tools/writing/snippet_manager.py +276 -0
  1212. tools/writing/style_enforcer.py +220 -0
  1213. tools/writing/style_guide_manager.py +438 -0
  1214. tools/writing/tone_profiler.py +168 -0
@@ -0,0 +1,1042 @@
1
+ #!/usr/bin/env python3
2
+ # CUI // SP-CTI
3
+ # Controlled by: Department of Defense
4
+ # CUI Category: CTI
5
+ # Distribution: D
6
+ # POC: ICDEV System Administrator
7
+ """Audit Engine — Self-Heal Remediation Engine.
8
+
9
+ Executes authorized remediation actions for audit findings.
10
+ Each action is deterministic, reversible, and logged to audit trail.
11
+
12
+ Actions require explicit user authorization before execution.
13
+ """
14
+
15
+ import json
16
+ import os
17
+ import re
18
+ import shutil
19
+ from datetime import datetime, timezone
20
+ from pathlib import Path
21
+ from typing import Dict, List, Optional
22
+
23
+ BASE_DIR = Path(__file__).resolve().parent.parent.parent
24
+
25
+ # Safe import of storage layer
26
+ try:
27
+ from tools.db.storage import get_connection
28
+ except ImportError:
29
+ get_connection = None
30
+
31
+
32
+ # ---------------------------------------------------------------
33
+ # Remediation Action Registry
34
+ # ---------------------------------------------------------------
35
+
36
+ REMEDIATION_ACTIONS = {
37
+ "AC-6": {
38
+ "id": "AC-6",
39
+ "title": "Enforce least privilege",
40
+ "action_type": "config_change",
41
+ "reversible": True,
42
+ "description": "Add non-root container configuration and read-only filesystem settings",
43
+ "handler": "_remediate_least_privilege",
44
+ },
45
+ "AC-16": {
46
+ "id": "AC-16",
47
+ "title": "Add CUI classification markings",
48
+ "action_type": "code_annotation",
49
+ "reversible": True,
50
+ "description": "Add CUI // SP-CTI header markings to unmarked Python files",
51
+ "handler": "_remediate_cui_markings",
52
+ },
53
+ "SI-10": {
54
+ "id": "SI-10",
55
+ "title": "Add input validation patterns",
56
+ "action_type": "code_pattern",
57
+ "reversible": True,
58
+ "description": "Add input validation wrappers to identified unsafe patterns",
59
+ "handler": "_remediate_input_validation",
60
+ },
61
+ "AU-2": {
62
+ "id": "AU-2",
63
+ "title": "Enable audit logging",
64
+ "action_type": "code_pattern",
65
+ "reversible": True,
66
+ "description": "Add logging imports and basic audit logging to modules",
67
+ "handler": "_remediate_audit_logging",
68
+ },
69
+ "CM-6": {
70
+ "id": "CM-6",
71
+ "title": "Add security configuration files",
72
+ "action_type": "config_change",
73
+ "reversible": True,
74
+ "description": "Create .gitignore, SECURITY.md, and security configuration",
75
+ "handler": "_remediate_security_config",
76
+ },
77
+ "IA-5": {
78
+ "id": "IA-5",
79
+ "title": "Rotate detected secrets",
80
+ "action_type": "config_change",
81
+ "reversible": False,
82
+ "description": "Move hardcoded secrets to environment variables",
83
+ "handler": "_remediate_secrets",
84
+ },
85
+ "SA-11": {
86
+ "id": "SA-11",
87
+ "title": "Generate SBOM",
88
+ "action_type": "tool_enable",
89
+ "reversible": True,
90
+ "description": "Generate Software Bill of Materials for the project",
91
+ "handler": "_remediate_sbom",
92
+ },
93
+ "RA-5": {
94
+ "id": "RA-5",
95
+ "title": "Enable vulnerability scanning",
96
+ "action_type": "tool_enable",
97
+ "reversible": True,
98
+ "description": "Enable SAST and dependency scanning in CI/CD pipeline",
99
+ "handler": "_remediate_vuln_scanning",
100
+ },
101
+ "SI-2": {
102
+ "id": "SI-2",
103
+ "title": "Remediate known vulnerabilities",
104
+ "action_type": "dependency_update",
105
+ "reversible": True,
106
+ "description": "Update dependencies with known CVEs to patched versions",
107
+ "handler": "_remediate_dependencies",
108
+ },
109
+ "SC-13": {
110
+ "id": "SC-13",
111
+ "title": "Enable encryption",
112
+ "action_type": "config_change",
113
+ "reversible": True,
114
+ "description": "Add TLS/encryption configuration to communication channels",
115
+ "handler": "_remediate_encryption",
116
+ },
117
+ }
118
+
119
+
120
+ def list_available_actions(audit_result: Dict) -> List[Dict]:
121
+ """List remediation actions available for a given audit result.
122
+
123
+ Returns actions with their authorization status and estimated impact.
124
+ """
125
+ actions = []
126
+ if not audit_result or not audit_result.get("regime_scores"):
127
+ return actions
128
+
129
+ # Collect all failing controls across all regimes
130
+ failing_controls = set()
131
+ for regime_id, regime_data in audit_result["regime_scores"].items():
132
+ if regime_data.get("error"):
133
+ continue
134
+ for cat in regime_data.get("categories", []):
135
+ for ctrl in cat.get("controls", []):
136
+ if ctrl.get("status") in ("fail", "partial"):
137
+ # Extract NIST family prefix
138
+ ctrl_id = ctrl.get("control_id", "")
139
+ family = _extract_control_family(ctrl_id)
140
+ if family:
141
+ failing_controls.add(family)
142
+
143
+ for family in failing_controls:
144
+ if family in REMEDIATION_ACTIONS:
145
+ action = REMEDIATION_ACTIONS[family].copy()
146
+ action["affected_regimes"] = _count_affected_regimes(
147
+ audit_result, family
148
+ )
149
+ actions.append(action)
150
+
151
+ # Sort by number of affected regimes (most impactful first)
152
+ actions.sort(key=lambda a: a.get("affected_regimes", 0), reverse=True)
153
+ return actions
154
+
155
+
156
+ def execute_remediation(
157
+ control_id: str,
158
+ target_path: str,
159
+ project_id: Optional[str] = None,
160
+ dry_run: bool = False,
161
+ ) -> Dict:
162
+ """Execute a single remediation action.
163
+
164
+ Args:
165
+ control_id: NIST control family ID (e.g., 'AC-16', 'SI-10').
166
+ target_path: Directory to remediate.
167
+ project_id: Optional project ID.
168
+ dry_run: If True, preview changes without applying.
169
+
170
+ Returns:
171
+ Result dict with status, changes made, and before/after state.
172
+ """
173
+ target_path = os.path.abspath(target_path)
174
+ timestamp = datetime.now(timezone.utc).isoformat()
175
+
176
+ if control_id not in REMEDIATION_ACTIONS:
177
+ return {
178
+ "success": False,
179
+ "error": f"No remediation available for control {control_id}",
180
+ "control_id": control_id,
181
+ }
182
+
183
+ action = REMEDIATION_ACTIONS[control_id]
184
+ handler_name = action["handler"]
185
+ handler = globals().get(handler_name)
186
+
187
+ if not handler:
188
+ return {
189
+ "success": False,
190
+ "error": f"Handler {handler_name} not implemented",
191
+ "control_id": control_id,
192
+ }
193
+
194
+ result = {
195
+ "control_id": control_id,
196
+ "action_title": action["title"],
197
+ "action_type": action["action_type"],
198
+ "reversible": action["reversible"],
199
+ "target_path": target_path,
200
+ "dry_run": dry_run,
201
+ "timestamp": timestamp,
202
+ "changes": [],
203
+ }
204
+
205
+ try:
206
+ changes = handler(target_path, project_id, dry_run)
207
+ result["changes"] = changes
208
+ result["success"] = True
209
+ result["files_modified"] = len([c for c in changes if c.get("applied")])
210
+ except Exception as e:
211
+ result["success"] = False
212
+ result["error"] = str(e)
213
+
214
+ # Log to audit trail
215
+ if not dry_run and result["success"]:
216
+ _log_remediation(result)
217
+
218
+ return result
219
+
220
+
221
+ # ---------------------------------------------------------------
222
+ # Remediation Handlers
223
+ # ---------------------------------------------------------------
224
+
225
+ CUI_HEADER = """# CUI // SP-CTI
226
+ # Controlled by: Department of Defense
227
+ # CUI Category: CTI
228
+ # Distribution: D
229
+ # POC: ICDEV System Administrator
230
+ """
231
+
232
+
233
+ def _remediate_cui_markings(
234
+ target_path: str, project_id: Optional[str], dry_run: bool
235
+ ) -> List[Dict]:
236
+ """Add CUI markings to unmarked Python files."""
237
+ changes = []
238
+ skip_dirs = {
239
+ ".git", "node_modules", "venv", "__pycache__", ".tmp", "data",
240
+ ".venv", "env", "dist", "build", "site-packages",
241
+ }
242
+ count = 0
243
+ max_files = 200
244
+
245
+ for root, dirs, files in os.walk(target_path):
246
+ dirs[:] = [d for d in dirs if d not in skip_dirs]
247
+ for fname in files:
248
+ if count >= max_files:
249
+ break
250
+ if not fname.endswith(".py"):
251
+ continue
252
+ fpath = os.path.join(root, fname)
253
+ try:
254
+ with open(fpath, "r", encoding="utf-8", errors="ignore") as f:
255
+ content = f.read(500)
256
+ if "CUI" in content or "UNCLASSIFIED" in content:
257
+ continue # Already marked
258
+
259
+ rel_path = os.path.relpath(fpath, target_path)
260
+ change = {
261
+ "file": rel_path,
262
+ "action": "add_cui_header",
263
+ "applied": not dry_run,
264
+ }
265
+
266
+ if not dry_run:
267
+ with open(fpath, "r", encoding="utf-8") as f:
268
+ full_content = f.read()
269
+ # Preserve shebang if present
270
+ if full_content.startswith("#!"):
271
+ shebang_end = full_content.index("\n") + 1
272
+ new_content = (
273
+ full_content[:shebang_end] + CUI_HEADER + full_content[shebang_end:]
274
+ )
275
+ else:
276
+ new_content = CUI_HEADER + full_content
277
+ with open(fpath, "w", encoding="utf-8") as f:
278
+ f.write(new_content)
279
+
280
+ changes.append(change)
281
+ count += 1
282
+ except (OSError, UnicodeDecodeError):
283
+ continue
284
+ if count >= max_files:
285
+ break
286
+
287
+ return changes
288
+
289
+
290
+ def _remediate_audit_logging(
291
+ target_path: str, project_id: Optional[str], dry_run: bool
292
+ ) -> List[Dict]:
293
+ """Add logging imports to Python modules missing them."""
294
+ changes = []
295
+ skip_dirs = {
296
+ ".git", "node_modules", "venv", "__pycache__", ".tmp", "data",
297
+ ".venv", "env", "dist", "build", "site-packages",
298
+ }
299
+ count = 0
300
+ max_files = 50
301
+
302
+ for root, dirs, files in os.walk(target_path):
303
+ dirs[:] = [d for d in dirs if d not in skip_dirs]
304
+ for fname in files:
305
+ if count >= max_files:
306
+ break
307
+ if not fname.endswith(".py") or fname == "__init__.py":
308
+ continue
309
+ fpath = os.path.join(root, fname)
310
+ try:
311
+ with open(fpath, "r", encoding="utf-8", errors="ignore") as f:
312
+ content = f.read()
313
+ if "import logging" in content or "from logging" in content:
314
+ continue
315
+
316
+ # Only add to files with functions/classes
317
+ if "def " not in content and "class " not in content:
318
+ continue
319
+
320
+ rel_path = os.path.relpath(fpath, target_path)
321
+ change = {
322
+ "file": rel_path,
323
+ "action": "add_logging_import",
324
+ "applied": not dry_run,
325
+ }
326
+
327
+ if not dry_run:
328
+ # Insert logging import after other imports
329
+ lines = content.split("\n")
330
+ insert_idx = 0
331
+ for i, line in enumerate(lines):
332
+ if line.startswith("import ") or line.startswith("from "):
333
+ insert_idx = i + 1
334
+ lines.insert(insert_idx, "import logging")
335
+ lines.insert(
336
+ insert_idx + 1,
337
+ f'logger = logging.getLogger(__name__)',
338
+ )
339
+ lines.insert(insert_idx + 2, "")
340
+ with open(fpath, "w", encoding="utf-8") as f:
341
+ f.write("\n".join(lines))
342
+
343
+ changes.append(change)
344
+ count += 1
345
+ except (OSError, UnicodeDecodeError):
346
+ continue
347
+ if count >= max_files:
348
+ break
349
+
350
+ return changes
351
+
352
+
353
+ def _remediate_security_config(
354
+ target_path: str, project_id: Optional[str], dry_run: bool
355
+ ) -> List[Dict]:
356
+ """Create missing security configuration files."""
357
+ changes = []
358
+
359
+ # .gitignore
360
+ gitignore_path = Path(target_path) / ".gitignore"
361
+ if not gitignore_path.exists():
362
+ change = {"file": ".gitignore", "action": "create", "applied": not dry_run}
363
+ if not dry_run:
364
+ gitignore_path.write_text(
365
+ "# Secrets\n.env\n.env.*\ncredentials.*\n*.pem\n*.key\nid_rsa*\n\n"
366
+ "# Build\ndist/\nbuild/\n*.egg-info/\n\n"
367
+ "# Python\n__pycache__/\n*.pyc\n.venv/\nvenv/\n\n"
368
+ "# Data\n*.db\ndata/\n\n"
369
+ "# IDE\n.vscode/\n.idea/\n",
370
+ encoding="utf-8",
371
+ )
372
+ changes.append(change)
373
+
374
+ # SECURITY.md
375
+ security_path = Path(target_path) / "SECURITY.md"
376
+ if not security_path.exists():
377
+ change = {"file": "SECURITY.md", "action": "create", "applied": not dry_run}
378
+ if not dry_run:
379
+ security_path.write_text(
380
+ "# Security Policy\n\n"
381
+ "## Reporting Vulnerabilities\n\n"
382
+ "Please report security vulnerabilities to: security@icdev.ai\n\n"
383
+ "## Supported Versions\n\n"
384
+ "| Version | Supported |\n"
385
+ "| ------- | --------- |\n"
386
+ "| latest | Yes |\n",
387
+ encoding="utf-8",
388
+ )
389
+ changes.append(change)
390
+
391
+ return changes
392
+
393
+
394
+ def _remediate_least_privilege(
395
+ target_path: str, project_id: Optional[str], dry_run: bool
396
+ ) -> List[Dict]:
397
+ """Add security hardening to Dockerfiles and compose files."""
398
+ changes = []
399
+
400
+ # Find Dockerfiles
401
+ for fname in ("Dockerfile", "docker-compose.yml", "docker-compose.yaml"):
402
+ fpath = Path(target_path) / fname
403
+ if not fpath.exists():
404
+ continue
405
+
406
+ content = fpath.read_text(encoding="utf-8")
407
+
408
+ if fname == "Dockerfile" and "USER " not in content:
409
+ change = {
410
+ "file": fname,
411
+ "action": "add_non_root_user",
412
+ "applied": not dry_run,
413
+ }
414
+ if not dry_run:
415
+ # Add non-root user before CMD/ENTRYPOINT
416
+ lines = content.split("\n")
417
+ insert_idx = len(lines) - 1
418
+ for i, line in enumerate(lines):
419
+ if line.strip().startswith(("CMD", "ENTRYPOINT")):
420
+ insert_idx = i
421
+ break
422
+ user_lines = [
423
+ "",
424
+ "# Security: run as non-root",
425
+ "RUN addgroup --system appgroup && adduser --system --ingroup appgroup appuser",
426
+ "USER appuser",
427
+ "",
428
+ ]
429
+ for j, ul in enumerate(user_lines):
430
+ lines.insert(insert_idx + j, ul)
431
+ fpath.write_text("\n".join(lines), encoding="utf-8")
432
+ changes.append(change)
433
+
434
+ if "compose" in fname and "read_only: true" not in content:
435
+ change = {
436
+ "file": fname,
437
+ "action": "add_read_only_fs_note",
438
+ "applied": not dry_run,
439
+ "note": "Manual review recommended — add read_only: true to service volumes",
440
+ }
441
+ changes.append(change)
442
+
443
+ return changes
444
+
445
+
446
+ def _remediate_input_validation(
447
+ target_path: str, project_id: Optional[str], dry_run: bool
448
+ ) -> List[Dict]:
449
+ """Flag files with unsafe input patterns for review."""
450
+ changes = []
451
+ dangerous = [
452
+ (r"\beval\s*\(", "eval()"),
453
+ (r"\bexec\s*\(", "exec()"),
454
+ (r"os\.system\s*\(", "os.system()"),
455
+ ]
456
+ skip_dirs = {
457
+ ".git", "node_modules", "venv", "__pycache__", ".tmp", "data",
458
+ ".venv", "env", "dist", "build", "site-packages",
459
+ }
460
+
461
+ for root, dirs, files in os.walk(target_path):
462
+ dirs[:] = [d for d in dirs if d not in skip_dirs]
463
+ for fname in files:
464
+ if not fname.endswith(".py"):
465
+ continue
466
+ fpath = os.path.join(root, fname)
467
+ try:
468
+ with open(fpath, "r", encoding="utf-8", errors="ignore") as f:
469
+ content = f.read(50000)
470
+ for pattern, label in dangerous:
471
+ if re.search(pattern, content):
472
+ rel_path = os.path.relpath(fpath, target_path)
473
+ changes.append({
474
+ "file": rel_path,
475
+ "action": "flag_for_review",
476
+ "pattern": label,
477
+ "applied": False,
478
+ "note": f"Contains {label} — manual review required",
479
+ })
480
+ except (OSError, UnicodeDecodeError):
481
+ continue
482
+
483
+ return changes
484
+
485
+
486
+ def _remediate_secrets(
487
+ target_path: str, project_id: Optional[str], dry_run: bool
488
+ ) -> List[Dict]:
489
+ """Flag files containing hardcoded secrets (manual remediation only)."""
490
+ # Secrets remediation is always manual — we only flag, never auto-modify
491
+ return [{
492
+ "action": "manual_review_required",
493
+ "applied": False,
494
+ "note": "Secret rotation requires manual review. Move secrets to environment variables or a secrets manager.",
495
+ }]
496
+
497
+
498
+ def _remediate_sbom(
499
+ target_path: str, project_id: Optional[str], dry_run: bool
500
+ ) -> List[Dict]:
501
+ """Generate SBOM for the project."""
502
+ changes = []
503
+ if dry_run:
504
+ return [{"action": "generate_sbom", "applied": False, "note": "Would generate CycloneDX SBOM"}]
505
+
506
+ try:
507
+ import subprocess, sys
508
+ result = subprocess.run(
509
+ [sys.executable, "-c",
510
+ f"import sys; sys.path.insert(0,'.'); "
511
+ f"from tools.compliance.sbom_generator import generate_sbom; "
512
+ f"import json; r = generate_sbom(project_id='{project_id or 'audit-heal'}'); "
513
+ f"print(json.dumps({{'count': len(r.get('components', []))}}))"],
514
+ capture_output=True, text=True, timeout=15,
515
+ cwd=str(BASE_DIR),
516
+ env={**os.environ, "ICDEV_STORAGE_BACKEND": "sqlite"},
517
+ )
518
+ if result.returncode == 0:
519
+ data = json.loads(result.stdout.strip())
520
+ changes.append({
521
+ "action": "generate_sbom",
522
+ "applied": True,
523
+ "components": data.get("count", 0),
524
+ })
525
+ else:
526
+ changes.append({"action": "generate_sbom", "applied": False, "note": "SBOM tool unavailable"})
527
+ except Exception as e:
528
+ changes.append({"action": "generate_sbom", "applied": False, "note": str(e)})
529
+
530
+ return changes
531
+
532
+
533
+ def _remediate_vuln_scanning(
534
+ target_path: str, project_id: Optional[str], dry_run: bool
535
+ ) -> List[Dict]:
536
+ """Create CI/CD scanning configuration."""
537
+ changes = []
538
+
539
+ # Create a basic scanning config
540
+ scan_config_path = Path(target_path) / ".security-scan.yml"
541
+ if not scan_config_path.exists():
542
+ change = {"file": ".security-scan.yml", "action": "create", "applied": not dry_run}
543
+ if not dry_run:
544
+ scan_config_path.write_text(
545
+ "# Security Scanning Configuration\n"
546
+ "scanners:\n"
547
+ " sast: true\n"
548
+ " dependency_audit: true\n"
549
+ " secret_detection: true\n"
550
+ " container_scan: false\n"
551
+ "\n"
552
+ "# Run on every commit\n"
553
+ "triggers:\n"
554
+ " - push\n"
555
+ " - pull_request\n",
556
+ encoding="utf-8",
557
+ )
558
+ changes.append(change)
559
+
560
+ return changes
561
+
562
+
563
+ def _remediate_dependencies(
564
+ target_path: str, project_id: Optional[str], dry_run: bool
565
+ ) -> List[Dict]:
566
+ """Flag outdated dependencies for update (manual action)."""
567
+ return [{
568
+ "action": "manual_review_required",
569
+ "applied": False,
570
+ "note": "Run 'pip list --outdated' and update vulnerable packages. Review SBOM for CVE details.",
571
+ }]
572
+
573
+
574
+ def _remediate_encryption(
575
+ target_path: str, project_id: Optional[str], dry_run: bool
576
+ ) -> List[Dict]:
577
+ """Add encryption configuration guidance."""
578
+ return [{
579
+ "action": "manual_review_required",
580
+ "applied": False,
581
+ "note": "Enable TLS for all network communication. Add SSL context to HTTP servers and enforce HTTPS redirects.",
582
+ }]
583
+
584
+
585
+ # ---------------------------------------------------------------
586
+ # Exclusions (Risk Acceptance)
587
+ # ---------------------------------------------------------------
588
+
589
+ def create_exclusion(
590
+ control_id: str,
591
+ reason: str,
592
+ owner: str,
593
+ project_id: Optional[str] = None,
594
+ duration_days: int = 90,
595
+ risk_level: str = "accepted",
596
+ ) -> Dict:
597
+ """Register a risk acceptance exclusion for a control.
598
+
599
+ Excluded controls are removed from scoring and flagged in reports.
600
+ Exclusions expire after duration_days and must be renewed.
601
+
602
+ Args:
603
+ control_id: Control ID to exclude (e.g., 'AC-6', 'SI-10').
604
+ reason: Business justification for risk acceptance.
605
+ owner: Person/role responsible for the risk.
606
+ project_id: Project scope for the exclusion.
607
+ duration_days: Exclusion validity period (max 365).
608
+ risk_level: One of 'accepted', 'mitigated', 'transferred'.
609
+ """
610
+ timestamp = datetime.now(timezone.utc)
611
+ duration_days = min(duration_days, 365) # Cap at 1 year
612
+ expiry = datetime.fromtimestamp(
613
+ timestamp.timestamp() + duration_days * 86400, tz=timezone.utc
614
+ ).isoformat()
615
+
616
+ exclusion = {
617
+ "control_id": control_id,
618
+ "reason": reason,
619
+ "owner": owner,
620
+ "project_id": project_id,
621
+ "risk_level": risk_level,
622
+ "created": timestamp.isoformat(),
623
+ "expires": expiry,
624
+ "duration_days": duration_days,
625
+ "status": "active",
626
+ }
627
+
628
+ if get_connection:
629
+ try:
630
+ with get_connection() as conn:
631
+ conn.execute(
632
+ """CREATE TABLE IF NOT EXISTS audit_engine_exclusions (
633
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
634
+ control_id TEXT NOT NULL,
635
+ reason TEXT NOT NULL,
636
+ owner TEXT NOT NULL,
637
+ project_id TEXT,
638
+ risk_level TEXT DEFAULT 'accepted',
639
+ created TEXT NOT NULL,
640
+ expires TEXT NOT NULL,
641
+ duration_days INTEGER,
642
+ status TEXT DEFAULT 'active',
643
+ classification TEXT DEFAULT 'CUI'
644
+ )""",
645
+ )
646
+ conn.execute(
647
+ """INSERT INTO audit_engine_exclusions
648
+ (control_id, reason, owner, project_id, risk_level,
649
+ created, expires, duration_days, status)
650
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)""",
651
+ (
652
+ control_id, reason, owner, project_id, risk_level,
653
+ timestamp.isoformat(), expiry, duration_days, "active",
654
+ ),
655
+ )
656
+ # Also log to audit trail
657
+ conn.execute(
658
+ """INSERT INTO audit_trail (event_type, event_data, timestamp, classification)
659
+ VALUES (?, ?, ?, ?)""",
660
+ (
661
+ "audit_engine_exclusion_created",
662
+ json.dumps(exclusion),
663
+ timestamp.isoformat(),
664
+ "CUI",
665
+ ),
666
+ )
667
+ exclusion["stored"] = True
668
+ except Exception as e:
669
+ exclusion["stored"] = False
670
+ exclusion["storage_error"] = str(e)
671
+ else:
672
+ exclusion["stored"] = False
673
+
674
+ return exclusion
675
+
676
+
677
+ def list_exclusions(project_id: Optional[str] = None) -> List[Dict]:
678
+ """List active and expired exclusions."""
679
+ if not get_connection:
680
+ return []
681
+ try:
682
+ with get_connection() as conn:
683
+ conn.execute(
684
+ """CREATE TABLE IF NOT EXISTS audit_engine_exclusions (
685
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
686
+ control_id TEXT NOT NULL,
687
+ reason TEXT NOT NULL,
688
+ owner TEXT NOT NULL,
689
+ project_id TEXT,
690
+ risk_level TEXT DEFAULT 'accepted',
691
+ created TEXT NOT NULL,
692
+ expires TEXT NOT NULL,
693
+ duration_days INTEGER,
694
+ status TEXT DEFAULT 'active',
695
+ classification TEXT DEFAULT 'CUI'
696
+ )""",
697
+ )
698
+ if project_id:
699
+ rows = conn.execute(
700
+ "SELECT * FROM audit_engine_exclusions WHERE project_id = ? ORDER BY created DESC",
701
+ (project_id,),
702
+ ).fetchall()
703
+ else:
704
+ rows = conn.execute(
705
+ "SELECT * FROM audit_engine_exclusions ORDER BY created DESC"
706
+ ).fetchall()
707
+
708
+ now = datetime.now(timezone.utc).isoformat()
709
+ result = []
710
+ for row in rows:
711
+ excl = dict(row) if hasattr(row, "keys") else {
712
+ "id": row[0], "control_id": row[1], "reason": row[2],
713
+ "owner": row[3], "project_id": row[4], "risk_level": row[5],
714
+ "created": row[6], "expires": row[7], "duration_days": row[8],
715
+ "status": row[9],
716
+ }
717
+ # Check if expired
718
+ if excl.get("expires", "") < now and excl.get("status") == "active":
719
+ excl["status"] = "expired"
720
+ result.append(excl)
721
+ return result
722
+ except Exception:
723
+ return []
724
+
725
+
726
+ def get_excluded_controls(project_id: Optional[str] = None) -> set:
727
+ """Get set of currently excluded (active, non-expired) control IDs."""
728
+ exclusions = list_exclusions(project_id)
729
+ now = datetime.now(timezone.utc).isoformat()
730
+ return {
731
+ e["control_id"]
732
+ for e in exclusions
733
+ if e.get("status") == "active" and e.get("expires", "") >= now
734
+ }
735
+
736
+
737
+ # ---------------------------------------------------------------
738
+ # POAM Integration
739
+ # ---------------------------------------------------------------
740
+
741
+ def generate_poam_entries(
742
+ audit_result: Dict,
743
+ project_id: Optional[str] = None,
744
+ ) -> Dict:
745
+ """Generate POAM entries from audit findings.
746
+
747
+ Creates Plan of Action & Milestones entries for all failing controls,
748
+ with severity-based timelines and cross-regime impact analysis.
749
+
750
+ Returns:
751
+ Dict with poam_entries list and summary.
752
+ """
753
+ entries = []
754
+ excluded = get_excluded_controls(project_id)
755
+
756
+ # Collect all failing controls across regimes with dedup
757
+ seen_controls = {}
758
+ for regime_id, regime_data in audit_result.get("regime_scores", {}).items():
759
+ if regime_data.get("error"):
760
+ continue
761
+ for cat in regime_data.get("categories", []):
762
+ for ctrl in cat.get("controls", []):
763
+ ctrl_id = ctrl.get("control_id", "")
764
+ status = ctrl.get("status", "")
765
+ if status not in ("fail", "partial"):
766
+ continue
767
+ if ctrl_id in excluded:
768
+ continue
769
+
770
+ if ctrl_id not in seen_controls:
771
+ seen_controls[ctrl_id] = {
772
+ "control_id": ctrl_id,
773
+ "control_name": ctrl.get("control_name", ctrl_id),
774
+ "status": status,
775
+ "severity": ctrl.get("severity", "medium"),
776
+ "regimes": [],
777
+ "categories": [],
778
+ }
779
+ seen_controls[ctrl_id]["regimes"].append(regime_id)
780
+ if cat.get("category_name") not in seen_controls[ctrl_id]["categories"]:
781
+ seen_controls[ctrl_id]["categories"].append(cat.get("category_name", ""))
782
+
783
+ # Build POAM entries with timelines
784
+ severity_timelines = {
785
+ "critical": {"days": 30, "priority": "P1"},
786
+ "high": {"days": 90, "priority": "P2"},
787
+ "medium": {"days": 180, "priority": "P3"},
788
+ "low": {"days": 365, "priority": "P4"},
789
+ }
790
+
791
+ now = datetime.now(timezone.utc)
792
+ for ctrl_id, ctrl_data in seen_controls.items():
793
+ sev = ctrl_data["severity"]
794
+ timeline = severity_timelines.get(sev, severity_timelines["medium"])
795
+
796
+ due_date = datetime.fromtimestamp(
797
+ now.timestamp() + timeline["days"] * 86400, tz=timezone.utc
798
+ ).strftime("%Y-%m-%d")
799
+
800
+ # Get recommendation if available
801
+ rec = REMEDIATION_ACTIONS.get(
802
+ _extract_control_family(ctrl_id) or "",
803
+ {}
804
+ )
805
+
806
+ entry = {
807
+ "poam_id": f"POAM-AE-{ctrl_id.replace('.', '-')}",
808
+ "control_id": ctrl_id,
809
+ "control_name": ctrl_data["control_name"],
810
+ "weakness_description": f"Control {ctrl_id} is {'not implemented' if ctrl_data['status'] == 'fail' else 'partially implemented'}",
811
+ "severity": sev,
812
+ "priority": timeline["priority"],
813
+ "status": "Open",
814
+ "affected_regimes": ctrl_data["regimes"],
815
+ "regime_count": len(ctrl_data["regimes"]),
816
+ "scheduled_completion": due_date,
817
+ "timeline_days": timeline["days"],
818
+ "milestones": _generate_milestones(ctrl_id, rec, timeline["days"]),
819
+ "remediation_type": rec.get("action_type", "manual"),
820
+ "auto_fixable": ctrl_id in {
821
+ _extract_control_family(k) or k
822
+ for k in REMEDIATION_ACTIONS
823
+ } if _extract_control_family(ctrl_id) else False,
824
+ "resources_required": rec.get("description", "Manual assessment required"),
825
+ }
826
+ entries.append(entry)
827
+
828
+ # Sort by priority then regime count
829
+ entries.sort(key=lambda e: (e["priority"], -e["regime_count"]))
830
+
831
+ # Write POAM to DB if possible
832
+ poam_stored = False
833
+ if get_connection and project_id:
834
+ try:
835
+ with get_connection() as conn:
836
+ for entry in entries:
837
+ conn.execute(
838
+ """INSERT INTO audit_trail (event_type, event_data, timestamp, classification)
839
+ VALUES (?, ?, ?, ?)""",
840
+ (
841
+ "audit_engine_poam_generated",
842
+ json.dumps(entry),
843
+ now.isoformat(),
844
+ "CUI",
845
+ ),
846
+ )
847
+ poam_stored = True
848
+ except Exception:
849
+ pass
850
+
851
+ return {
852
+ "success": True,
853
+ "project_id": project_id,
854
+ "timestamp": now.isoformat(),
855
+ "total_entries": len(entries),
856
+ "by_priority": {
857
+ p: len([e for e in entries if e["priority"] == p])
858
+ for p in ("P1", "P2", "P3", "P4")
859
+ },
860
+ "excluded_controls": len(excluded),
861
+ "poam_entries": entries,
862
+ "stored": poam_stored,
863
+ }
864
+
865
+
866
+ def _generate_milestones(
867
+ ctrl_id: str, rec: Dict, total_days: int
868
+ ) -> List[Dict]:
869
+ """Generate milestone schedule for a POAM entry."""
870
+ milestones = [
871
+ {
872
+ "milestone": "Assessment & Planning",
873
+ "target_date_offset_days": max(7, total_days // 6),
874
+ "description": f"Assess current state of {ctrl_id} and develop remediation plan",
875
+ },
876
+ {
877
+ "milestone": "Implementation",
878
+ "target_date_offset_days": max(14, total_days // 2),
879
+ "description": rec.get("description", f"Implement remediation for {ctrl_id}"),
880
+ },
881
+ {
882
+ "milestone": "Verification & Testing",
883
+ "target_date_offset_days": max(21, total_days * 3 // 4),
884
+ "description": f"Verify {ctrl_id} implementation and run compliance check",
885
+ },
886
+ {
887
+ "milestone": "Closure",
888
+ "target_date_offset_days": total_days,
889
+ "description": f"Close POAM entry after successful re-audit of {ctrl_id}",
890
+ },
891
+ ]
892
+ return milestones
893
+
894
+
895
+ # ---------------------------------------------------------------
896
+ # Helpers
897
+ # ---------------------------------------------------------------
898
+
899
+ def _extract_control_family(control_id: str) -> Optional[str]:
900
+ """Extract NIST control family from control ID.
901
+
902
+ Handles multiple ID formats:
903
+ - NIST 800-53: AC-2, AU-3, SI-10, AC-2(1)
904
+ - CMMC: AC.L2-3.1.1, SI.L2-3.14.1
905
+ - CISA SBD: SBD-MS-01, SBD-VT-02
906
+ - NIST 800-171: 3.1.1, 3.5.2
907
+ - DoD CSSP/other: CSSP-1.1, etc.
908
+ """
909
+ family_map = {
910
+ "AC": "AC-6", "AU": "AU-2", "CM": "CM-6", "IA": "IA-5",
911
+ "SI": "SI-10", "SC": "SC-13", "SA": "SA-11", "RA": "RA-5",
912
+ "SR": "SA-11", "AT": "AU-2", "MP": "SC-13", "PE": "AC-6",
913
+ "PL": "SA-11", "PS": "AC-6", "CA": "RA-5", "CP": "CM-6",
914
+ "IR": "SI-2", "MA": "CM-6", "PM": "RA-5",
915
+ }
916
+
917
+ # NIST 800-53 style: AC-2, AU-3, SI-10
918
+ m = re.match(r"^([A-Z]{2})-(\d+)", control_id)
919
+ if m:
920
+ return f"{m.group(1)}-{m.group(2)}"
921
+
922
+ # CMMC style: AC.L2-3.1.1, SI.L2-3.14.1
923
+ m = re.match(r"^([A-Z]{2})\.L\d+-", control_id)
924
+ if m:
925
+ return family_map.get(m.group(1))
926
+
927
+ # CISA SBD style: SBD-MS-01, SBD-VT-02, etc.
928
+ sbd_to_nist = {
929
+ "MS": "CM-6", # Memory Safety -> Config Mgmt
930
+ "VT": "RA-5", # Vulnerability Transparency -> Risk Assessment
931
+ "SD": "SA-11", # Secure Development -> Dev Testing
932
+ "DF": "CM-6", # Default Security -> Config Mgmt
933
+ "MF": "IA-5", # Multi-Factor Auth -> Auth Mgmt
934
+ "IL": "AU-2", # Intrusion Logging -> Audit Logging
935
+ "EP": "SI-2", # Evidence Patching -> Flaw Remediation
936
+ "DP": "SC-8", # Data Protection -> Comms Protection
937
+ "CV": "SA-11", # CVD Policy -> Dev Testing
938
+ }
939
+ m = re.match(r"^SBD-([A-Z]{2})-\d+", control_id)
940
+ if m:
941
+ return sbd_to_nist.get(m.group(1), "SA-11")
942
+
943
+ # NIST 800-171 style: 3.1.1, 3.5.2 — map chapter to NIST family
944
+ nist171_chapter_map = {
945
+ "1": "AC-6", # Access Control
946
+ "2": "AU-2", # Awareness & Training
947
+ "3": "AU-2", # Audit & Accountability
948
+ "4": "CM-6", # Configuration Mgmt
949
+ "5": "IA-5", # Identification & Auth
950
+ "6": "SI-2", # Incident Response
951
+ "7": "CM-6", # Maintenance
952
+ "8": "SC-13", # Media Protection
953
+ "9": "AC-6", # Physical Protection
954
+ "10": "AC-6", # Personnel Security
955
+ "11": "RA-5", # Risk Assessment
956
+ "12": "RA-5", # Security Assessment
957
+ "13": "SC-13", # System & Comms Protection
958
+ "14": "SI-2", # System & Info Integrity
959
+ }
960
+ m = re.match(r"^3\.(\d+)\.\d+", control_id)
961
+ if m:
962
+ return nist171_chapter_map.get(m.group(1), "SA-11")
963
+
964
+ # Try just the family prefix (e.g., XX-something)
965
+ m = re.match(r"^([A-Z]{2})-", control_id)
966
+ if m:
967
+ return family_map.get(m.group(1))
968
+
969
+ return None
970
+
971
+
972
+ def _count_affected_regimes(audit_result: Dict, control_family: str) -> int:
973
+ """Count how many regimes have failing controls in this family."""
974
+ count = 0
975
+ prefix = control_family.split("-")[0] if "-" in control_family else control_family
976
+
977
+ for regime_data in audit_result.get("regime_scores", {}).values():
978
+ if regime_data.get("error"):
979
+ continue
980
+ for cat in regime_data.get("categories", []):
981
+ for ctrl in cat.get("controls", []):
982
+ ctrl_id = ctrl.get("control_id", "")
983
+ if ctrl_id.startswith(prefix) and ctrl.get("status") in ("fail", "partial"):
984
+ count += 1
985
+ break
986
+ return count
987
+
988
+
989
+ def _log_remediation(result: Dict):
990
+ """Log remediation action to audit trail (append-only)."""
991
+ if not get_connection:
992
+ return
993
+ try:
994
+ with get_connection() as conn:
995
+ conn.execute(
996
+ """INSERT INTO audit_trail (event_type, event_data, timestamp, classification)
997
+ VALUES (?, ?, ?, ?)""",
998
+ (
999
+ "audit_engine_self_heal",
1000
+ json.dumps({
1001
+ "control_id": result["control_id"],
1002
+ "action_title": result["action_title"],
1003
+ "files_modified": result.get("files_modified", 0),
1004
+ "target_path": result["target_path"],
1005
+ "dry_run": result["dry_run"],
1006
+ }),
1007
+ result["timestamp"],
1008
+ "CUI",
1009
+ ),
1010
+ )
1011
+ except Exception:
1012
+ pass # Audit trail table may not exist for BYOS
1013
+
1014
+
1015
+ if __name__ == "__main__":
1016
+ import argparse
1017
+
1018
+ parser = argparse.ArgumentParser(description="Audit Engine Self-Heal")
1019
+ parser.add_argument("--control", required=True, help="Control ID to remediate")
1020
+ parser.add_argument("--target", default=".", help="Target directory")
1021
+ parser.add_argument("--project-id", help="Project ID")
1022
+ parser.add_argument("--dry-run", action="store_true", help="Preview without applying")
1023
+ parser.add_argument("--list", action="store_true", help="List available actions")
1024
+ parser.add_argument("--json", action="store_true", help="JSON output")
1025
+ args = parser.parse_args()
1026
+
1027
+ if args.list:
1028
+ print(json.dumps(list(REMEDIATION_ACTIONS.values()), indent=2))
1029
+ else:
1030
+ result = execute_remediation(args.control, args.target, args.project_id, args.dry_run)
1031
+ if args.json:
1032
+ print(json.dumps(result, indent=2))
1033
+ else:
1034
+ status = "SUCCESS" if result["success"] else "FAILED"
1035
+ print(f"\n{status}: {result.get('action_title', args.control)}")
1036
+ if result.get("error"):
1037
+ print(f" Error: {result['error']}")
1038
+ for c in result.get("changes", []):
1039
+ applied = "APPLIED" if c.get("applied") else "PREVIEW"
1040
+ print(f" [{applied}] {c.get('file', '')} — {c.get('action', '')}")
1041
+ if c.get("note"):
1042
+ print(f" {c['note']}")