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,1715 @@
1
+ #!/usr/bin/env python3
2
+ # CUI // SP-CTI
3
+ """Generate project directory structure based on project type.
4
+
5
+ Supports: webapp, microservice, api, cli, data_pipeline, iac.
6
+ Creates language-appropriate scaffolding with CUI markings, compliance directories,
7
+ CI/CD pipelines, Dockerfiles, and test scaffolding.
8
+
9
+ Usage:
10
+ python tools/project/project_scaffold.py --project-dir /path/to/project --type webapp
11
+ python tools/project/project_scaffold.py --project-dir /path/to/project --type microservice --classification CUI
12
+ """
13
+
14
+ import argparse
15
+ import json
16
+ from pathlib import Path
17
+
18
+ BASE_DIR = Path(__file__).resolve().parent.parent.parent
19
+
20
+ # CUI banner applied to the top of generated source files
21
+ CUI_HEADER_PYTHON = '''# //CUI
22
+ # CONTROLLED UNCLASSIFIED INFORMATION
23
+ # Authorized distribution limited to authorized personnel only.
24
+ # Handling: CUI Basic per 32 CFR Part 2002
25
+ # //CUI
26
+ '''
27
+
28
+ CUI_HEADER_JS = '''// //CUI
29
+ // CONTROLLED UNCLASSIFIED INFORMATION
30
+ // Authorized distribution limited to authorized personnel only.
31
+ // Handling: CUI Basic per 32 CFR Part 2002
32
+ // //CUI
33
+ '''
34
+
35
+ CUI_HEADER_YAML = '''# //CUI
36
+ # CONTROLLED UNCLASSIFIED INFORMATION
37
+ # Authorized distribution limited to authorized personnel only.
38
+ # Handling: CUI Basic per 32 CFR Part 2002
39
+ # //CUI
40
+ '''
41
+
42
+ CUI_HEADER_DOCKERFILE = '''# //CUI
43
+ # CONTROLLED UNCLASSIFIED INFORMATION
44
+ # Authorized distribution limited to authorized personnel only.
45
+ # Handling: CUI Basic per 32 CFR Part 2002
46
+ # //CUI
47
+ '''
48
+
49
+ CUI_HEADER_MARKDOWN = '''<!-- //CUI -->
50
+ <!-- CONTROLLED UNCLASSIFIED INFORMATION -->
51
+ <!-- Authorized distribution limited to authorized personnel only. -->
52
+ <!-- Handling: CUI Basic per 32 CFR Part 2002 -->
53
+ <!-- //CUI -->
54
+ '''
55
+
56
+
57
+ def get_cui_header(file_ext: str, classification: str = "CUI") -> str:
58
+ """Return the appropriate CUI header comment for a file extension."""
59
+ if classification.upper() == "PUBLIC":
60
+ return ""
61
+ headers = {
62
+ ".py": CUI_HEADER_PYTHON,
63
+ ".js": CUI_HEADER_JS,
64
+ ".ts": CUI_HEADER_JS,
65
+ ".jsx": CUI_HEADER_JS,
66
+ ".tsx": CUI_HEADER_JS,
67
+ ".yml": CUI_HEADER_YAML,
68
+ ".yaml": CUI_HEADER_YAML,
69
+ ".tf": CUI_HEADER_PYTHON, # Terraform uses # comments
70
+ ".sh": CUI_HEADER_PYTHON,
71
+ ".md": CUI_HEADER_MARKDOWN,
72
+ }
73
+ return headers.get(file_ext, "")
74
+
75
+
76
+ def write_file(path: Path, content: str, classification: str = "CUI") -> None:
77
+ """Write a file, prepending CUI header if applicable."""
78
+ path.parent.mkdir(parents=True, exist_ok=True)
79
+ header = get_cui_header(path.suffix, classification)
80
+ with open(path, "w", encoding="utf-8", newline="\n") as f:
81
+ if header:
82
+ f.write(header)
83
+ f.write("\n")
84
+ f.write(content)
85
+
86
+
87
+ def scaffold_common(project_dir: Path, project_name: str, classification: str) -> list:
88
+ """Create directories and files common to all project types. Returns list of created paths."""
89
+ created = []
90
+
91
+ # Compliance directory for ATO + CSSP artifacts
92
+ compliance_dirs = [
93
+ project_dir / "compliance",
94
+ project_dir / "compliance" / "ssp",
95
+ project_dir / "compliance" / "poam",
96
+ project_dir / "compliance" / "stig",
97
+ project_dir / "compliance" / "sbom",
98
+ project_dir / "compliance" / "evidence",
99
+ project_dir / "compliance" / "cssp",
100
+ project_dir / "compliance" / "xacta-exports",
101
+ project_dir / "compliance" / "sbd",
102
+ project_dir / "compliance" / "ivv",
103
+ project_dir / "compliance" / "rtm",
104
+ project_dir / "siem",
105
+ project_dir / "security",
106
+ ]
107
+ for d in compliance_dirs:
108
+ d.mkdir(parents=True, exist_ok=True)
109
+ created.append(str(d))
110
+
111
+ # README with CUI markings
112
+ readme_content = f"""# {project_name}
113
+
114
+ > **Classification: {classification}**
115
+
116
+ ## Overview
117
+
118
+ *Project description goes here.*
119
+
120
+ ## Getting Started
121
+
122
+ ### Prerequisites
123
+
124
+ *List prerequisites here.*
125
+
126
+ ### Installation
127
+
128
+ ```bash
129
+ # Installation steps
130
+ ```
131
+
132
+ ## Testing
133
+
134
+ ```bash
135
+ # Test commands
136
+ ```
137
+
138
+ ## Deployment
139
+
140
+ See `compliance/` directory for ATO artifacts and deployment authorization documentation.
141
+
142
+ ## Compliance
143
+
144
+ This project maintains the following compliance artifacts in `compliance/`:
145
+
146
+ - **SSP** - System Security Plan
147
+ - **POA&M** - Plan of Action and Milestones
148
+ - **STIG** - Security Technical Implementation Guide findings
149
+ - **SBOM** - Software Bill of Materials
150
+ - **CSSP** - Cybersecurity Service Provider assessment (DI 8530.01)
151
+ - **SbD** - Secure by Design assessment (CISA, DoDI 5000.87)
152
+ - **IV&V** - Independent Verification & Validation (IEEE 1012)
153
+ - **RTM** - Requirements Traceability Matrix
154
+ - **Evidence** - CSSP evidence artifacts
155
+ - **Xacta Exports** - OSCAL/CSV exports for Xacta 360
156
+
157
+ Additional security/operational artifacts:
158
+ - `siem/` - SIEM forwarding configs (Splunk, ELK)
159
+ - `security/` - Incident Response Plan, security procedures
160
+
161
+ ## Classification
162
+
163
+ This project is classified as **{classification}**. Handle all materials in accordance
164
+ with applicable handling requirements.
165
+ """
166
+ write_file(project_dir / "README.md", readme_content, classification)
167
+ created.append(str(project_dir / "README.md"))
168
+
169
+ # .gitignore
170
+ gitignore_content = """# Python
171
+ __pycache__/
172
+ *.py[cod]
173
+ *$py.class
174
+ *.egg-info/
175
+ dist/
176
+ build/
177
+ .eggs/
178
+ *.egg
179
+ .venv/
180
+ venv/
181
+ env/
182
+
183
+ # Node
184
+ node_modules/
185
+ npm-debug.log*
186
+ yarn-debug.log*
187
+ yarn-error.log*
188
+ .npm
189
+
190
+ # IDE
191
+ .vscode/
192
+ .idea/
193
+ *.swp
194
+ *.swo
195
+ *~
196
+
197
+ # Environment
198
+ .env
199
+ .env.local
200
+ .env.*.local
201
+
202
+ # OS
203
+ .DS_Store
204
+ Thumbs.db
205
+
206
+ # Testing
207
+ .coverage
208
+ htmlcov/
209
+ .pytest_cache/
210
+ coverage/
211
+
212
+ # Build artifacts
213
+ *.tfstate
214
+ *.tfstate.backup
215
+ .terraform/
216
+
217
+ # Secrets - NEVER commit
218
+ *.pem
219
+ *.key
220
+ credentials.json
221
+ """
222
+ write_file(project_dir / ".gitignore", gitignore_content)
223
+ created.append(str(project_dir / ".gitignore"))
224
+
225
+ return created
226
+
227
+
228
+ def scaffold_python_webapp(project_dir: Path, project_name: str, classification: str) -> list:
229
+ """Scaffold a Python web application (Flask/FastAPI)."""
230
+ created = scaffold_common(project_dir, project_name, classification)
231
+ slug = project_name.lower().replace(" ", "_").replace("-", "_")
232
+
233
+ # Source directories
234
+ src_dirs = [
235
+ project_dir / "src",
236
+ project_dir / "src" / slug,
237
+ project_dir / "src" / slug / "api",
238
+ project_dir / "src" / slug / "models",
239
+ project_dir / "src" / slug / "services",
240
+ project_dir / "src" / slug / "templates",
241
+ project_dir / "src" / slug / "static",
242
+ ]
243
+ for d in src_dirs:
244
+ d.mkdir(parents=True, exist_ok=True)
245
+ created.append(str(d))
246
+
247
+ # Test directories (BDD)
248
+ test_dirs = [
249
+ project_dir / "tests",
250
+ project_dir / "tests" / "features",
251
+ project_dir / "tests" / "steps",
252
+ project_dir / "tests" / "unit",
253
+ project_dir / "tests" / "integration",
254
+ ]
255
+ for d in test_dirs:
256
+ d.mkdir(parents=True, exist_ok=True)
257
+ created.append(str(d))
258
+
259
+ # src/__init__.py
260
+ write_file(
261
+ project_dir / "src" / slug / "__init__.py",
262
+ f'"""SPARKPILOT Project: {project_name}"""\n\n__version__ = "0.1.0"\n',
263
+ classification,
264
+ )
265
+ created.append(str(project_dir / "src" / slug / "__init__.py"))
266
+
267
+ # src/api/__init__.py
268
+ write_file(
269
+ project_dir / "src" / slug / "api" / "__init__.py",
270
+ '"""API routes."""\n',
271
+ classification,
272
+ )
273
+ created.append(str(project_dir / "src" / slug / "api" / "__init__.py"))
274
+
275
+ # src/models/__init__.py
276
+ write_file(
277
+ project_dir / "src" / slug / "models" / "__init__.py",
278
+ '"""Data models."""\n',
279
+ classification,
280
+ )
281
+ created.append(str(project_dir / "src" / slug / "models" / "__init__.py"))
282
+
283
+ # src/services/__init__.py
284
+ write_file(
285
+ project_dir / "src" / slug / "services" / "__init__.py",
286
+ '"""Business logic services."""\n',
287
+ classification,
288
+ )
289
+ created.append(str(project_dir / "src" / slug / "services" / "__init__.py"))
290
+
291
+ # Main application entry point
292
+ app_content = f'''"""Main application entry point for {project_name}."""
293
+
294
+ import os
295
+
296
+ from flask import Flask
297
+
298
+
299
+ def create_app(config_name: str = None) -> Flask:
300
+ """Application factory pattern."""
301
+ app = Flask(__name__)
302
+
303
+ config_name = config_name or os.environ.get("FLASK_CONFIG", "development")
304
+
305
+ # Register blueprints
306
+ # from .api import api_bp
307
+ # app.register_blueprint(api_bp, url_prefix="/api/v1")
308
+
309
+ @app.route("/health")
310
+ def health():
311
+ return {{"status": "healthy", "service": "{project_name}"}}, 200
312
+
313
+ return app
314
+
315
+
316
+ if __name__ == "__main__":
317
+ app = create_app()
318
+ app.run(host="0.0.0.0", port=int(os.environ.get("PORT", 8080)))
319
+ '''
320
+ write_file(project_dir / "src" / slug / "app.py", app_content, classification)
321
+ created.append(str(project_dir / "src" / slug / "app.py"))
322
+
323
+ # conftest.py
324
+ conftest_content = f'''"""Pytest configuration and shared fixtures for {project_name}."""
325
+
326
+ import pytest
327
+
328
+ from src.{slug}.app import create_app
329
+
330
+
331
+ @pytest.fixture
332
+ def app():
333
+ """Create application for testing."""
334
+ app = create_app("testing")
335
+ yield app
336
+
337
+
338
+ @pytest.fixture
339
+ def client(app):
340
+ """Create test client."""
341
+ return app.test_client()
342
+
343
+
344
+ @pytest.fixture
345
+ def runner(app):
346
+ """Create test CLI runner."""
347
+ return app.test_cli_runner()
348
+ '''
349
+ write_file(project_dir / "conftest.py", conftest_content, classification)
350
+ created.append(str(project_dir / "conftest.py"))
351
+
352
+ # Sample BDD feature file
353
+ feature_content = """Feature: Health Check
354
+ As a system administrator
355
+ I want to verify the application is running
356
+ So that I can confirm the deployment is successful
357
+
358
+ Scenario: Health endpoint returns OK
359
+ Given the application is running
360
+ When I request the health endpoint
361
+ Then I should receive a 200 status code
362
+ And the response should contain "healthy"
363
+ """
364
+ write_file(project_dir / "tests" / "features" / "health.feature", feature_content)
365
+ created.append(str(project_dir / "tests" / "features" / "health.feature"))
366
+
367
+ # BDD step definitions
368
+ steps_content = '''"""Step definitions for health check feature."""
369
+
370
+ from pytest_bdd import given, when, then, parsers, scenarios
371
+
372
+ scenarios("../features/health.feature")
373
+
374
+
375
+ @given("the application is running")
376
+ def app_running(client):
377
+ """Ensure app is available via test client fixture."""
378
+ pass
379
+
380
+
381
+ @when("I request the health endpoint", target_fixture="response")
382
+ def request_health(client):
383
+ return client.get("/health")
384
+
385
+
386
+ @then("I should receive a 200 status code")
387
+ def check_status(response):
388
+ assert response.status_code == 200
389
+
390
+
391
+ @then(parsers.parse('the response should contain "{text}"'))
392
+ def check_content(response, text):
393
+ assert text in response.get_data(as_text=True)
394
+ '''
395
+ write_file(project_dir / "tests" / "steps" / "test_health.py", steps_content, classification)
396
+ created.append(str(project_dir / "tests" / "steps" / "test_health.py"))
397
+
398
+ # pyproject.toml
399
+ pyproject_content = f"""[build-system]
400
+ requires = ["setuptools>=68.0", "wheel"]
401
+ build-backend = "setuptools.backends._legacy:_Backend"
402
+
403
+ [project]
404
+ name = "{slug}"
405
+ version = "0.1.0"
406
+ description = "{project_name} - SPARKPILOT managed project"
407
+ requires-python = ">=3.11"
408
+ dependencies = [
409
+ "flask>=3.0",
410
+ "gunicorn>=21.2",
411
+ ]
412
+
413
+ [project.optional-dependencies]
414
+ dev = [
415
+ "pytest>=7.4",
416
+ "pytest-bdd>=7.0",
417
+ "pytest-cov>=4.1",
418
+ "flake8>=7.0",
419
+ "black>=24.0",
420
+ "bandit>=1.7",
421
+ ]
422
+
423
+ [tool.pytest.ini_options]
424
+ testpaths = ["tests"]
425
+ python_files = ["test_*.py"]
426
+ addopts = "--cov=src --cov-report=html --cov-report=term-missing"
427
+
428
+ [tool.black]
429
+ line-length = 100
430
+ target-version = ["py311"]
431
+
432
+ [tool.bandit]
433
+ exclude_dirs = ["tests", ".venv"]
434
+ """
435
+ write_file(project_dir / "pyproject.toml", pyproject_content)
436
+ created.append(str(project_dir / "pyproject.toml"))
437
+
438
+ # Dockerfile (STIG-hardened base)
439
+ dockerfile_content = f"""FROM python:3.11-slim AS base
440
+
441
+ LABEL maintainer="SPARKPILOT System"
442
+ LABEL classification="{classification}"
443
+
444
+ # STIG: V-222656 - Remove unnecessary packages
445
+ RUN apt-get update && \\
446
+ apt-get upgrade -y && \\
447
+ apt-get install -y --no-install-recommends \\
448
+ ca-certificates \\
449
+ curl && \\
450
+ apt-get autoremove -y && \\
451
+ apt-get clean && \\
452
+ rm -rf /var/lib/apt/lists/*
453
+
454
+ # STIG: V-222657 - Run as non-root user
455
+ RUN groupadd -r appuser && useradd -r -g appuser -d /app -s /sbin/nologin appuser
456
+
457
+ WORKDIR /app
458
+
459
+ COPY pyproject.toml .
460
+ RUN pip install --no-cache-dir --upgrade pip && \\
461
+ pip install --no-cache-dir .
462
+
463
+ COPY src/ ./src/
464
+
465
+ # STIG: V-222658 - Set restrictive file permissions
466
+ RUN chown -R appuser:appuser /app && \\
467
+ chmod -R 750 /app
468
+
469
+ USER appuser
470
+
471
+ EXPOSE 8080
472
+
473
+ HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \\
474
+ CMD curl -f http://localhost:8080/health || exit 1
475
+
476
+ CMD ["gunicorn", "--bind", "0.0.0.0:8080", "--workers", "4", "src.{slug}.app:create_app()"]
477
+ """
478
+ write_file(project_dir / "Dockerfile", dockerfile_content, classification)
479
+ created.append(str(project_dir / "Dockerfile"))
480
+
481
+ # .gitlab-ci.yml
482
+ gitlab_ci_content = f"""stages:
483
+ - test
484
+ - security
485
+ - compliance
486
+ - build
487
+ - deploy
488
+
489
+ variables:
490
+ PIP_CACHE_DIR: "$CI_PROJECT_DIR/.cache/pip"
491
+
492
+ cache:
493
+ paths:
494
+ - .cache/pip
495
+ - .venv
496
+
497
+ # --- Test Stage ---
498
+ unit-tests:
499
+ stage: test
500
+ image: python:3.11-slim
501
+ script:
502
+ - pip install --upgrade pip
503
+ - pip install .[dev]
504
+ - pytest --junitxml=report.xml --cov=src --cov-report=xml
505
+ artifacts:
506
+ reports:
507
+ junit: report.xml
508
+ coverage_report:
509
+ coverage_format: cobertura
510
+ path: coverage.xml
511
+
512
+ # --- Security Stage ---
513
+ sast-scan:
514
+ stage: security
515
+ image: python:3.11-slim
516
+ script:
517
+ - pip install bandit
518
+ - bandit -r src/ -f json -o bandit-report.json || true
519
+ artifacts:
520
+ paths:
521
+ - bandit-report.json
522
+
523
+ dependency-audit:
524
+ stage: security
525
+ image: python:3.11-slim
526
+ script:
527
+ - pip install pip-audit
528
+ - pip-audit --format=json --output=pip-audit-report.json || true
529
+ artifacts:
530
+ paths:
531
+ - pip-audit-report.json
532
+
533
+ secret-detection:
534
+ stage: security
535
+ image: python:3.11-slim
536
+ script:
537
+ - pip install detect-secrets
538
+ - detect-secrets scan --all-files > secrets-report.json || true
539
+ artifacts:
540
+ paths:
541
+ - secrets-report.json
542
+
543
+ # --- Compliance Stage ---
544
+ compliance-check:
545
+ stage: compliance
546
+ image: python:3.11-slim
547
+ script:
548
+ - echo "Compliance checks run by SPARKPILOT compliance engine"
549
+ - echo "Classification: {classification}"
550
+ allow_failure: true
551
+
552
+ # --- Build Stage ---
553
+ build-image:
554
+ stage: build
555
+ image: docker:24
556
+ services:
557
+ - docker:24-dind
558
+ script:
559
+ - docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA .
560
+ - docker tag $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA $CI_REGISTRY_IMAGE:latest
561
+ - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
562
+ - docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
563
+ - docker push $CI_REGISTRY_IMAGE:latest
564
+ only:
565
+ - main
566
+ - develop
567
+
568
+ # --- Deploy Stage ---
569
+ deploy-dev:
570
+ stage: deploy
571
+ image: bitnami/kubectl:latest
572
+ script:
573
+ - echo "Deploying to dev environment"
574
+ environment:
575
+ name: development
576
+ only:
577
+ - develop
578
+
579
+ deploy-staging:
580
+ stage: deploy
581
+ image: bitnami/kubectl:latest
582
+ script:
583
+ - echo "Deploying to staging environment"
584
+ environment:
585
+ name: staging
586
+ only:
587
+ - main
588
+ when: manual
589
+ """
590
+ write_file(project_dir / ".gitlab-ci.yml", gitlab_ci_content, classification)
591
+ created.append(str(project_dir / ".gitlab-ci.yml"))
592
+
593
+ return created
594
+
595
+
596
+ def scaffold_microservice(project_dir: Path, project_name: str, classification: str) -> list:
597
+ """Scaffold a Python microservice (FastAPI-based)."""
598
+ created = scaffold_common(project_dir, project_name, classification)
599
+ slug = project_name.lower().replace(" ", "_").replace("-", "_")
600
+
601
+ # Source directories
602
+ for d in [
603
+ project_dir / "src",
604
+ project_dir / "src" / slug,
605
+ project_dir / "src" / slug / "api",
606
+ project_dir / "src" / slug / "models",
607
+ project_dir / "src" / slug / "services",
608
+ project_dir / "tests",
609
+ project_dir / "tests" / "features",
610
+ project_dir / "tests" / "steps",
611
+ project_dir / "tests" / "unit",
612
+ project_dir / "tests" / "integration",
613
+ ]:
614
+ d.mkdir(parents=True, exist_ok=True)
615
+ created.append(str(d))
616
+
617
+ # __init__.py files
618
+ write_file(project_dir / "src" / slug / "__init__.py", f'"""Microservice: {project_name}"""\n\n__version__ = "0.1.0"\n', classification)
619
+ write_file(project_dir / "src" / slug / "api" / "__init__.py", '"""API routes."""\n', classification)
620
+ write_file(project_dir / "src" / slug / "models" / "__init__.py", '"""Data models."""\n', classification)
621
+ write_file(project_dir / "src" / slug / "services" / "__init__.py", '"""Services."""\n', classification)
622
+
623
+ # Main FastAPI app
624
+ main_content = f'''"""FastAPI microservice entry point for {project_name}."""
625
+
626
+ import os
627
+
628
+ from fastapi import FastAPI
629
+ from fastapi.middleware.cors import CORSMiddleware
630
+
631
+
632
+ app = FastAPI(
633
+ title="{project_name}",
634
+ version="0.1.0",
635
+ docs_url="/docs" if os.environ.get("ENVIRONMENT") != "production" else None,
636
+ )
637
+
638
+ app.add_middleware(
639
+ CORSMiddleware,
640
+ allow_origins=os.environ.get("CORS_ORIGINS", "").split(",") if os.environ.get("CORS_ORIGINS") else [],
641
+ allow_methods=["GET", "POST", "PUT", "DELETE"],
642
+ allow_headers=["*"],
643
+ )
644
+
645
+
646
+ @app.get("/health")
647
+ async def health():
648
+ """Health check endpoint."""
649
+ return {{"status": "healthy", "service": "{project_name}", "version": "0.1.0"}}
650
+
651
+
652
+ @app.get("/ready")
653
+ async def readiness():
654
+ """Readiness probe for Kubernetes."""
655
+ return {{"ready": True}}
656
+ '''
657
+ write_file(project_dir / "src" / slug / "main.py", main_content, classification)
658
+
659
+ # pyproject.toml for microservice
660
+ pyproject_content = f"""[build-system]
661
+ requires = ["setuptools>=68.0", "wheel"]
662
+ build-backend = "setuptools.backends._legacy:_Backend"
663
+
664
+ [project]
665
+ name = "{slug}"
666
+ version = "0.1.0"
667
+ description = "{project_name} microservice - SPARKPILOT managed"
668
+ requires-python = ">=3.11"
669
+ dependencies = [
670
+ "fastapi>=0.104",
671
+ "uvicorn[standard]>=0.24",
672
+ "pydantic>=2.5",
673
+ ]
674
+
675
+ [project.optional-dependencies]
676
+ dev = [
677
+ "pytest>=7.4",
678
+ "pytest-bdd>=7.0",
679
+ "pytest-cov>=4.1",
680
+ "pytest-asyncio>=0.23",
681
+ "httpx>=0.25",
682
+ "flake8>=7.0",
683
+ "black>=24.0",
684
+ "bandit>=1.7",
685
+ ]
686
+
687
+ [tool.pytest.ini_options]
688
+ testpaths = ["tests"]
689
+ python_files = ["test_*.py"]
690
+ addopts = "--cov=src --cov-report=html --cov-report=term-missing"
691
+ asyncio_mode = "auto"
692
+
693
+ [tool.black]
694
+ line-length = 100
695
+ target-version = ["py311"]
696
+ """
697
+ write_file(project_dir / "pyproject.toml", pyproject_content)
698
+
699
+ # conftest.py
700
+ conftest_content = f'''"""Pytest configuration for {project_name} microservice."""
701
+
702
+ import pytest
703
+ from httpx import AsyncClient, ASGITransport
704
+
705
+ from src.{slug}.main import app
706
+
707
+
708
+ @pytest.fixture
709
+ async def async_client():
710
+ """Async test client for FastAPI."""
711
+ transport = ASGITransport(app=app)
712
+ async with AsyncClient(transport=transport, base_url="http://test") as client:
713
+ yield client
714
+ '''
715
+ write_file(project_dir / "conftest.py", conftest_content, classification)
716
+
717
+ # Dockerfile
718
+ dockerfile_content = f"""FROM python:3.11-slim AS base
719
+
720
+ LABEL maintainer="SPARKPILOT System"
721
+ LABEL classification="{classification}"
722
+
723
+ RUN apt-get update && \\
724
+ apt-get upgrade -y && \\
725
+ apt-get install -y --no-install-recommends ca-certificates curl && \\
726
+ apt-get autoremove -y && apt-get clean && rm -rf /var/lib/apt/lists/*
727
+
728
+ RUN groupadd -r appuser && useradd -r -g appuser -d /app -s /sbin/nologin appuser
729
+
730
+ WORKDIR /app
731
+ COPY pyproject.toml .
732
+ RUN pip install --no-cache-dir --upgrade pip && pip install --no-cache-dir .
733
+ COPY src/ ./src/
734
+
735
+ RUN chown -R appuser:appuser /app && chmod -R 750 /app
736
+ USER appuser
737
+ EXPOSE 8080
738
+
739
+ HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \\
740
+ CMD curl -f http://localhost:8080/health || exit 1
741
+
742
+ CMD ["uvicorn", "src.{slug}.main:app", "--host", "0.0.0.0", "--port", "8080", "--workers", "4"]
743
+ """
744
+ write_file(project_dir / "Dockerfile", dockerfile_content, classification)
745
+
746
+ # .gitlab-ci.yml (same structure as webapp)
747
+ gitlab_ci_content = """stages:
748
+ - test
749
+ - security
750
+ - compliance
751
+ - build
752
+ - deploy
753
+
754
+ variables:
755
+ PIP_CACHE_DIR: "$CI_PROJECT_DIR/.cache/pip"
756
+
757
+ cache:
758
+ paths:
759
+ - .cache/pip
760
+
761
+ unit-tests:
762
+ stage: test
763
+ image: python:3.11-slim
764
+ script:
765
+ - pip install --upgrade pip && pip install .[dev]
766
+ - pytest --junitxml=report.xml --cov=src --cov-report=xml
767
+ artifacts:
768
+ reports:
769
+ junit: report.xml
770
+ coverage_report:
771
+ coverage_format: cobertura
772
+ path: coverage.xml
773
+
774
+ sast-scan:
775
+ stage: security
776
+ image: python:3.11-slim
777
+ script:
778
+ - pip install bandit
779
+ - bandit -r src/ -f json -o bandit-report.json || true
780
+ artifacts:
781
+ paths: [bandit-report.json]
782
+
783
+ dependency-audit:
784
+ stage: security
785
+ image: python:3.11-slim
786
+ script:
787
+ - pip install pip-audit
788
+ - pip-audit --format=json --output=pip-audit-report.json || true
789
+ artifacts:
790
+ paths: [pip-audit-report.json]
791
+
792
+ build-image:
793
+ stage: build
794
+ image: docker:24
795
+ services: [docker:24-dind]
796
+ script:
797
+ - docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA .
798
+ - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
799
+ - docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
800
+ only: [main, develop]
801
+ """
802
+ write_file(project_dir / ".gitlab-ci.yml", gitlab_ci_content, classification)
803
+
804
+ created.extend([
805
+ str(project_dir / "src" / slug / "__init__.py"),
806
+ str(project_dir / "src" / slug / "main.py"),
807
+ str(project_dir / "pyproject.toml"),
808
+ str(project_dir / "conftest.py"),
809
+ str(project_dir / "Dockerfile"),
810
+ str(project_dir / ".gitlab-ci.yml"),
811
+ ])
812
+ return created
813
+
814
+
815
+ def scaffold_api(project_dir: Path, project_name: str, classification: str) -> list:
816
+ """Scaffold a REST API project (Python FastAPI, similar to microservice but API-focused)."""
817
+ # API is structurally similar to microservice with additional OpenAPI focus
818
+ created = scaffold_microservice(project_dir, project_name, classification)
819
+
820
+ slug = project_name.lower().replace(" ", "_").replace("-", "_")
821
+
822
+ # Add API-specific schema models file
823
+ schema_content = '''"""Pydantic schemas for API request/response models."""
824
+
825
+ from pydantic import BaseModel, Field
826
+ from typing import Optional
827
+ from datetime import datetime, timezone
828
+
829
+
830
+ class HealthResponse(BaseModel):
831
+ """Health check response."""
832
+ status: str = Field(description="Service status")
833
+ service: str = Field(description="Service name")
834
+ version: str = Field(description="Service version")
835
+
836
+
837
+ class ErrorResponse(BaseModel):
838
+ """Standard error response."""
839
+ error: str = Field(description="Error type")
840
+ message: str = Field(description="Human-readable error message")
841
+ detail: Optional[str] = Field(default=None, description="Additional detail")
842
+ timestamp: datetime = Field(default_factory=datetime.utcnow)
843
+ '''
844
+ write_file(project_dir / "src" / slug / "models" / "schemas.py", schema_content, classification)
845
+ created.append(str(project_dir / "src" / slug / "models" / "schemas.py"))
846
+
847
+ return created
848
+
849
+
850
+ def scaffold_cli(project_dir: Path, project_name: str, classification: str) -> list:
851
+ """Scaffold a CLI tool project (Python with Click)."""
852
+ created = scaffold_common(project_dir, project_name, classification)
853
+ slug = project_name.lower().replace(" ", "_").replace("-", "_")
854
+
855
+ for d in [
856
+ project_dir / "src",
857
+ project_dir / "src" / slug,
858
+ project_dir / "src" / slug / "commands",
859
+ project_dir / "tests",
860
+ project_dir / "tests" / "unit",
861
+ ]:
862
+ d.mkdir(parents=True, exist_ok=True)
863
+ created.append(str(d))
864
+
865
+ # __init__.py
866
+ write_file(project_dir / "src" / slug / "__init__.py", f'"""CLI tool: {project_name}"""\n\n__version__ = "0.1.0"\n', classification)
867
+ write_file(project_dir / "src" / slug / "commands" / "__init__.py", '"""CLI commands."""\n', classification)
868
+
869
+ # Main CLI entry
870
+ cli_content = f'''"""CLI entry point for {project_name}."""
871
+
872
+ import click
873
+
874
+
875
+ @click.group()
876
+ @click.version_option(version="0.1.0")
877
+ def cli():
878
+ """{project_name} - SPARKPILOT managed CLI tool."""
879
+ pass
880
+
881
+
882
+ @cli.command()
883
+ @click.option("--verbose", "-v", is_flag=True, help="Enable verbose output")
884
+ def status(verbose: bool):
885
+ """Show current status."""
886
+ click.echo("Status: OK")
887
+ if verbose:
888
+ click.echo("Verbose mode enabled")
889
+
890
+
891
+ if __name__ == "__main__":
892
+ cli()
893
+ '''
894
+ write_file(project_dir / "src" / slug / "cli.py", cli_content, classification)
895
+
896
+ # pyproject.toml
897
+ pyproject_content = f"""[build-system]
898
+ requires = ["setuptools>=68.0", "wheel"]
899
+ build-backend = "setuptools.backends._legacy:_Backend"
900
+
901
+ [project]
902
+ name = "{slug}"
903
+ version = "0.1.0"
904
+ description = "{project_name} CLI tool - SPARKPILOT managed"
905
+ requires-python = ">=3.11"
906
+ dependencies = [
907
+ "click>=8.1",
908
+ "rich>=13.0",
909
+ ]
910
+
911
+ [project.scripts]
912
+ {slug} = "src.{slug}.cli:cli"
913
+
914
+ [project.optional-dependencies]
915
+ dev = [
916
+ "pytest>=7.4",
917
+ "pytest-cov>=4.1",
918
+ "flake8>=7.0",
919
+ "black>=24.0",
920
+ "bandit>=1.7",
921
+ ]
922
+
923
+ [tool.pytest.ini_options]
924
+ testpaths = ["tests"]
925
+ addopts = "--cov=src --cov-report=term-missing"
926
+
927
+ [tool.black]
928
+ line-length = 100
929
+ """
930
+ write_file(project_dir / "pyproject.toml", pyproject_content)
931
+
932
+ # conftest.py
933
+ conftest_content = f'''"""Pytest config for {project_name} CLI."""
934
+
935
+ import pytest
936
+ from click.testing import CliRunner
937
+
938
+
939
+ @pytest.fixture
940
+ def runner():
941
+ """Click CLI test runner."""
942
+ return CliRunner()
943
+ '''
944
+ write_file(project_dir / "conftest.py", conftest_content, classification)
945
+
946
+ # Dockerfile
947
+ dockerfile_content = f"""FROM python:3.11-slim
948
+
949
+ LABEL maintainer="SPARKPILOT System"
950
+ LABEL classification="{classification}"
951
+
952
+ RUN groupadd -r appuser && useradd -r -g appuser -d /app -s /sbin/nologin appuser
953
+ WORKDIR /app
954
+ COPY pyproject.toml .
955
+ RUN pip install --no-cache-dir --upgrade pip && pip install --no-cache-dir .
956
+ COPY src/ ./src/
957
+ RUN chown -R appuser:appuser /app && chmod -R 750 /app
958
+ USER appuser
959
+
960
+ ENTRYPOINT ["{slug}"]
961
+ """
962
+ write_file(project_dir / "Dockerfile", dockerfile_content, classification)
963
+
964
+ # .gitlab-ci.yml
965
+ gitlab_ci_content = """stages:
966
+ - test
967
+ - security
968
+ - build
969
+
970
+ unit-tests:
971
+ stage: test
972
+ image: python:3.11-slim
973
+ script:
974
+ - pip install --upgrade pip && pip install .[dev]
975
+ - pytest --junitxml=report.xml --cov=src --cov-report=xml
976
+ artifacts:
977
+ reports:
978
+ junit: report.xml
979
+
980
+ sast-scan:
981
+ stage: security
982
+ image: python:3.11-slim
983
+ script:
984
+ - pip install bandit
985
+ - bandit -r src/ -f json -o bandit-report.json || true
986
+ artifacts:
987
+ paths: [bandit-report.json]
988
+
989
+ build-image:
990
+ stage: build
991
+ image: docker:24
992
+ services: [docker:24-dind]
993
+ script:
994
+ - docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA .
995
+ - docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
996
+ only: [main]
997
+ """
998
+ write_file(project_dir / ".gitlab-ci.yml", gitlab_ci_content, classification)
999
+
1000
+ created.extend([
1001
+ str(project_dir / "src" / slug / "__init__.py"),
1002
+ str(project_dir / "src" / slug / "cli.py"),
1003
+ str(project_dir / "pyproject.toml"),
1004
+ str(project_dir / "conftest.py"),
1005
+ str(project_dir / "Dockerfile"),
1006
+ str(project_dir / ".gitlab-ci.yml"),
1007
+ ])
1008
+ return created
1009
+
1010
+
1011
+ def scaffold_data_pipeline(project_dir: Path, project_name: str, classification: str) -> list:
1012
+ """Scaffold a data pipeline project."""
1013
+ created = scaffold_common(project_dir, project_name, classification)
1014
+ slug = project_name.lower().replace(" ", "_").replace("-", "_")
1015
+
1016
+ for d in [
1017
+ project_dir / "src",
1018
+ project_dir / "src" / slug,
1019
+ project_dir / "src" / slug / "extractors",
1020
+ project_dir / "src" / slug / "transformers",
1021
+ project_dir / "src" / slug / "loaders",
1022
+ project_dir / "dags",
1023
+ project_dir / "tests",
1024
+ project_dir / "tests" / "unit",
1025
+ project_dir / "tests" / "integration",
1026
+ project_dir / "data" / "raw",
1027
+ project_dir / "data" / "processed",
1028
+ project_dir / "data" / "staging",
1029
+ ]:
1030
+ d.mkdir(parents=True, exist_ok=True)
1031
+ created.append(str(d))
1032
+
1033
+ # __init__.py files
1034
+ write_file(project_dir / "src" / slug / "__init__.py", f'"""Data Pipeline: {project_name}"""\n\n__version__ = "0.1.0"\n', classification)
1035
+ write_file(project_dir / "src" / slug / "extractors" / "__init__.py", '"""Data extractors."""\n', classification)
1036
+ write_file(project_dir / "src" / slug / "transformers" / "__init__.py", '"""Data transformers."""\n', classification)
1037
+ write_file(project_dir / "src" / slug / "loaders" / "__init__.py", '"""Data loaders."""\n', classification)
1038
+
1039
+ # Pipeline entry point
1040
+ pipeline_content = f'''"""Main pipeline orchestration for {project_name}."""
1041
+
1042
+ import logging
1043
+ from datetime import datetime, timezone
1044
+ from pathlib import Path
1045
+
1046
+ logger = logging.getLogger(__name__)
1047
+
1048
+
1049
+ class Pipeline:
1050
+ """ETL pipeline orchestrator."""
1051
+
1052
+ def __init__(self, name: str = "{project_name}"):
1053
+ self.name = name
1054
+ self.started_at = None
1055
+ self.completed_at = None
1056
+
1057
+ def extract(self, source: str) -> dict:
1058
+ """Extract data from source."""
1059
+ logger.info("Extracting from %s", source)
1060
+ return {{"source": source, "rows": [], "extracted_at": datetime.now(timezone.utc).isoformat()}}
1061
+
1062
+ def transform(self, data: dict) -> dict:
1063
+ """Transform extracted data."""
1064
+ logger.info("Transforming %d rows", len(data.get("rows", [])))
1065
+ return {{**data, "transformed": True, "transformed_at": datetime.now(timezone.utc).isoformat()}}
1066
+
1067
+ def load(self, data: dict, target: str) -> dict:
1068
+ """Load transformed data to target."""
1069
+ logger.info("Loading to %s", target)
1070
+ return {{**data, "target": target, "loaded_at": datetime.now(timezone.utc).isoformat()}}
1071
+
1072
+ def run(self, source: str, target: str) -> dict:
1073
+ """Execute full ETL pipeline."""
1074
+ self.started_at = datetime.now(timezone.utc)
1075
+ logger.info("Pipeline '%s' starting", self.name)
1076
+
1077
+ data = self.extract(source)
1078
+ data = self.transform(data)
1079
+ result = self.load(data, target)
1080
+
1081
+ self.completed_at = datetime.now(timezone.utc)
1082
+ result["duration_seconds"] = (self.completed_at - self.started_at).total_seconds()
1083
+ logger.info("Pipeline '%s' completed in %.2fs", self.name, result["duration_seconds"])
1084
+ return result
1085
+
1086
+
1087
+ if __name__ == "__main__":
1088
+ logging.basicConfig(level=logging.INFO)
1089
+ pipeline = Pipeline()
1090
+ result = pipeline.run(source="input", target="output")
1091
+ print(result)
1092
+ '''
1093
+ write_file(project_dir / "src" / slug / "pipeline.py", pipeline_content, classification)
1094
+
1095
+ # pyproject.toml
1096
+ pyproject_content = f"""[build-system]
1097
+ requires = ["setuptools>=68.0", "wheel"]
1098
+ build-backend = "setuptools.backends._legacy:_Backend"
1099
+
1100
+ [project]
1101
+ name = "{slug}"
1102
+ version = "0.1.0"
1103
+ description = "{project_name} data pipeline - SPARKPILOT managed"
1104
+ requires-python = ">=3.11"
1105
+ dependencies = [
1106
+ "pandas>=2.1",
1107
+ "sqlalchemy>=2.0",
1108
+ ]
1109
+
1110
+ [project.optional-dependencies]
1111
+ dev = [
1112
+ "pytest>=7.4",
1113
+ "pytest-cov>=4.1",
1114
+ "flake8>=7.0",
1115
+ "black>=24.0",
1116
+ "bandit>=1.7",
1117
+ ]
1118
+
1119
+ [tool.pytest.ini_options]
1120
+ testpaths = ["tests"]
1121
+ addopts = "--cov=src --cov-report=term-missing"
1122
+ """
1123
+ write_file(project_dir / "pyproject.toml", pyproject_content)
1124
+
1125
+ # conftest.py
1126
+ conftest_content = f'''"""Pytest config for {project_name} pipeline."""
1127
+
1128
+ import pytest
1129
+
1130
+ from src.{slug}.pipeline import Pipeline
1131
+
1132
+
1133
+ @pytest.fixture
1134
+ def pipeline():
1135
+ """Create a pipeline instance for testing."""
1136
+ return Pipeline(name="test-pipeline")
1137
+ '''
1138
+ write_file(project_dir / "conftest.py", conftest_content, classification)
1139
+
1140
+ # Dockerfile
1141
+ dockerfile_content = f"""FROM python:3.11-slim
1142
+
1143
+ LABEL maintainer="SPARKPILOT System"
1144
+ LABEL classification="{classification}"
1145
+
1146
+ RUN groupadd -r appuser && useradd -r -g appuser -d /app -s /sbin/nologin appuser
1147
+ WORKDIR /app
1148
+ COPY pyproject.toml .
1149
+ RUN pip install --no-cache-dir --upgrade pip && pip install --no-cache-dir .
1150
+ COPY src/ ./src/
1151
+ RUN chown -R appuser:appuser /app && chmod -R 750 /app
1152
+ USER appuser
1153
+
1154
+ CMD ["python", "-m", "src.{slug}.pipeline"]
1155
+ """
1156
+ write_file(project_dir / "Dockerfile", dockerfile_content, classification)
1157
+
1158
+ # .gitlab-ci.yml
1159
+ gitlab_ci_content = """stages:
1160
+ - test
1161
+ - security
1162
+ - build
1163
+
1164
+ unit-tests:
1165
+ stage: test
1166
+ image: python:3.11-slim
1167
+ script:
1168
+ - pip install --upgrade pip && pip install .[dev]
1169
+ - pytest --junitxml=report.xml --cov=src --cov-report=xml
1170
+ artifacts:
1171
+ reports:
1172
+ junit: report.xml
1173
+
1174
+ sast-scan:
1175
+ stage: security
1176
+ image: python:3.11-slim
1177
+ script:
1178
+ - pip install bandit
1179
+ - bandit -r src/ -f json -o bandit-report.json || true
1180
+ artifacts:
1181
+ paths: [bandit-report.json]
1182
+
1183
+ build-image:
1184
+ stage: build
1185
+ image: docker:24
1186
+ services: [docker:24-dind]
1187
+ script:
1188
+ - docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA .
1189
+ - docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
1190
+ only: [main]
1191
+ """
1192
+ write_file(project_dir / ".gitlab-ci.yml", gitlab_ci_content, classification)
1193
+
1194
+ created.extend([
1195
+ str(project_dir / "src" / slug / "__init__.py"),
1196
+ str(project_dir / "src" / slug / "pipeline.py"),
1197
+ str(project_dir / "pyproject.toml"),
1198
+ str(project_dir / "conftest.py"),
1199
+ str(project_dir / "Dockerfile"),
1200
+ str(project_dir / ".gitlab-ci.yml"),
1201
+ ])
1202
+ return created
1203
+
1204
+
1205
+ def scaffold_iac(project_dir: Path, project_name: str, classification: str) -> list:
1206
+ """Scaffold an Infrastructure-as-Code project (Terraform + Ansible)."""
1207
+ created = scaffold_common(project_dir, project_name, classification)
1208
+ project_name.lower().replace(" ", "_").replace("-", "_")
1209
+
1210
+ for d in [
1211
+ project_dir / "terraform" / "modules",
1212
+ project_dir / "terraform" / "environments" / "dev",
1213
+ project_dir / "terraform" / "environments" / "staging",
1214
+ project_dir / "terraform" / "environments" / "prod",
1215
+ project_dir / "ansible" / "roles",
1216
+ project_dir / "ansible" / "inventory",
1217
+ project_dir / "ansible" / "playbooks",
1218
+ project_dir / "k8s" / "base",
1219
+ project_dir / "k8s" / "overlays" / "dev",
1220
+ project_dir / "k8s" / "overlays" / "staging",
1221
+ project_dir / "k8s" / "overlays" / "prod",
1222
+ project_dir / "scripts",
1223
+ project_dir / "tests",
1224
+ ]:
1225
+ d.mkdir(parents=True, exist_ok=True)
1226
+ created.append(str(d))
1227
+
1228
+ # Terraform main.tf
1229
+ tf_main_content = f'''terraform {{
1230
+ required_version = ">= 1.5.0"
1231
+
1232
+ required_providers {{
1233
+ aws = {{
1234
+ source = "hashicorp/aws"
1235
+ version = "~> 5.0"
1236
+ }}
1237
+ }}
1238
+
1239
+ backend "s3" {{
1240
+ # Configure per environment in environments/*/backend.hcl
1241
+ }}
1242
+ }}
1243
+
1244
+ provider "aws" {{
1245
+ region = var.aws_region
1246
+
1247
+ default_tags {{
1248
+ tags = {{
1249
+ Project = "{project_name}"
1250
+ Environment = var.environment
1251
+ Classification = "{classification}"
1252
+ ManagedBy = "terraform"
1253
+ Owner = "SPARKPILOT"
1254
+ }}
1255
+ }}
1256
+ }}
1257
+ '''
1258
+ write_file(project_dir / "terraform" / "main.tf", tf_main_content, classification)
1259
+
1260
+ # Terraform variables.tf
1261
+ tf_vars_content = f'''variable "aws_region" {{
1262
+ description = "AWS GovCloud region"
1263
+ type = string
1264
+ default = "us-gov-west-1"
1265
+ }}
1266
+
1267
+ variable "environment" {{
1268
+ description = "Deployment environment"
1269
+ type = string
1270
+ validation {{
1271
+ condition = contains(["dev", "staging", "prod"], var.environment)
1272
+ error_message = "Environment must be dev, staging, or prod."
1273
+ }}
1274
+ }}
1275
+
1276
+ variable "project_name" {{
1277
+ description = "Project name"
1278
+ type = string
1279
+ default = "{project_name}"
1280
+ }}
1281
+
1282
+ variable "classification" {{
1283
+ description = "Data classification level"
1284
+ type = string
1285
+ default = "{classification}"
1286
+ }}
1287
+ '''
1288
+ write_file(project_dir / "terraform" / "variables.tf", tf_vars_content, classification)
1289
+
1290
+ # Terraform outputs.tf
1291
+ tf_outputs_content = '''output "project_name" {
1292
+ description = "Project name"
1293
+ value = var.project_name
1294
+ }
1295
+
1296
+ output "environment" {
1297
+ description = "Current environment"
1298
+ value = var.environment
1299
+ }
1300
+ '''
1301
+ write_file(project_dir / "terraform" / "outputs.tf", tf_outputs_content, classification)
1302
+
1303
+ # Ansible inventory
1304
+ inventory_content = """[all:vars]
1305
+ ansible_user=ec2-user
1306
+ ansible_ssh_private_key_file=~/.ssh/id_rsa
1307
+
1308
+ [webservers]
1309
+ # Add hosts here
1310
+
1311
+ [databases]
1312
+ # Add hosts here
1313
+ """
1314
+ write_file(project_dir / "ansible" / "inventory" / "hosts.ini", inventory_content)
1315
+
1316
+ # Ansible site.yml
1317
+ site_content = f"""---
1318
+ # Site-wide playbook for {project_name}
1319
+ # Classification: {classification}
1320
+
1321
+ - name: Configure base security hardening
1322
+ hosts: all
1323
+ become: true
1324
+ roles:
1325
+ - role: security-baseline
1326
+
1327
+ - name: Configure web servers
1328
+ hosts: webservers
1329
+ become: true
1330
+ roles: []
1331
+ """
1332
+ write_file(project_dir / "ansible" / "playbooks" / "site.yml", site_content, classification)
1333
+
1334
+ # K8s kustomization.yaml
1335
+ k8s_base_content = """apiVersion: kustomize.config.k8s.io/v1beta1
1336
+ kind: Kustomization
1337
+
1338
+ resources: []
1339
+
1340
+ commonLabels:
1341
+ app.kubernetes.io/managed-by: sparkpilot
1342
+ """
1343
+ write_file(project_dir / "k8s" / "base" / "kustomization.yaml", k8s_base_content, classification)
1344
+
1345
+ # .gitlab-ci.yml for IaC
1346
+ gitlab_ci_content = """stages:
1347
+ - validate
1348
+ - plan
1349
+ - apply
1350
+ - verify
1351
+
1352
+ terraform-validate:
1353
+ stage: validate
1354
+ image: hashicorp/terraform:1.6
1355
+ script:
1356
+ - cd terraform
1357
+ - terraform init -backend=false
1358
+ - terraform validate
1359
+ - terraform fmt -check
1360
+
1361
+ terraform-plan:
1362
+ stage: plan
1363
+ image: hashicorp/terraform:1.6
1364
+ script:
1365
+ - cd terraform
1366
+ - terraform init
1367
+ - terraform plan -out=tfplan
1368
+ artifacts:
1369
+ paths: [terraform/tfplan]
1370
+ only: [main, develop]
1371
+
1372
+ terraform-apply:
1373
+ stage: apply
1374
+ image: hashicorp/terraform:1.6
1375
+ script:
1376
+ - cd terraform
1377
+ - terraform init
1378
+ - terraform apply -auto-approve tfplan
1379
+ dependencies: [terraform-plan]
1380
+ only: [main]
1381
+ when: manual
1382
+
1383
+ ansible-lint:
1384
+ stage: validate
1385
+ image: python:3.11-slim
1386
+ script:
1387
+ - pip install ansible-lint
1388
+ - ansible-lint ansible/
1389
+ allow_failure: true
1390
+ """
1391
+ write_file(project_dir / ".gitlab-ci.yml", gitlab_ci_content, classification)
1392
+
1393
+ created.extend([
1394
+ str(project_dir / "terraform" / "main.tf"),
1395
+ str(project_dir / "terraform" / "variables.tf"),
1396
+ str(project_dir / "terraform" / "outputs.tf"),
1397
+ str(project_dir / "ansible" / "inventory" / "hosts.ini"),
1398
+ str(project_dir / "ansible" / "playbooks" / "site.yml"),
1399
+ str(project_dir / "k8s" / "base" / "kustomization.yaml"),
1400
+ str(project_dir / ".gitlab-ci.yml"),
1401
+ ])
1402
+ return created
1403
+
1404
+
1405
+ def scaffold_js_frontend(project_dir: Path, project_name: str, classification: str) -> list:
1406
+ """Scaffold a JavaScript/TypeScript frontend project (React)."""
1407
+ created = scaffold_common(project_dir, project_name, classification)
1408
+ slug = project_name.lower().replace(" ", "-")
1409
+
1410
+ for d in [
1411
+ project_dir / "src",
1412
+ project_dir / "src" / "components",
1413
+ project_dir / "src" / "pages",
1414
+ project_dir / "src" / "hooks",
1415
+ project_dir / "src" / "services",
1416
+ project_dir / "src" / "utils",
1417
+ project_dir / "src" / "types",
1418
+ project_dir / "tests",
1419
+ project_dir / "tests" / "unit",
1420
+ project_dir / "tests" / "integration",
1421
+ project_dir / "public",
1422
+ ]:
1423
+ d.mkdir(parents=True, exist_ok=True)
1424
+ created.append(str(d))
1425
+
1426
+ # package.json
1427
+ package_json = {
1428
+ "name": slug,
1429
+ "version": "0.1.0",
1430
+ "private": True,
1431
+ "description": f"{project_name} - SPARKPILOT managed frontend",
1432
+ "scripts": {
1433
+ "dev": "vite",
1434
+ "build": "tsc && vite build",
1435
+ "preview": "vite preview",
1436
+ "test": "vitest run",
1437
+ "test:watch": "vitest",
1438
+ "test:coverage": "vitest run --coverage",
1439
+ "lint": "eslint src/ --ext .ts,.tsx",
1440
+ "format": "prettier --write src/"
1441
+ },
1442
+ "dependencies": {
1443
+ "react": "^18.2.0",
1444
+ "react-dom": "^18.2.0",
1445
+ "react-router-dom": "^6.20.0"
1446
+ },
1447
+ "devDependencies": {
1448
+ "@types/react": "^18.2.0",
1449
+ "@types/react-dom": "^18.2.0",
1450
+ "@vitejs/plugin-react": "^4.2.0",
1451
+ "typescript": "^5.3.0",
1452
+ "vite": "^5.0.0",
1453
+ "vitest": "^1.0.0",
1454
+ "@testing-library/react": "^14.1.0",
1455
+ "@testing-library/jest-dom": "^6.1.0",
1456
+ "eslint": "^8.55.0",
1457
+ "prettier": "^3.1.0"
1458
+ }
1459
+ }
1460
+ pkg_path = project_dir / "package.json"
1461
+ pkg_path.parent.mkdir(parents=True, exist_ok=True)
1462
+ with open(pkg_path, "w", encoding="utf-8", newline="\n") as f:
1463
+ json.dump(package_json, f, indent=2)
1464
+ f.write("\n")
1465
+ created.append(str(pkg_path))
1466
+
1467
+ # src/App.tsx
1468
+ app_content = f'''import React from 'react';
1469
+
1470
+ const App: React.FC = () => {{
1471
+ return (
1472
+ <div className="app">
1473
+ <header>
1474
+ <h1>{project_name}</h1>
1475
+ <p>Classification: {classification}</p>
1476
+ </header>
1477
+ <main>
1478
+ <p>Application content goes here.</p>
1479
+ </main>
1480
+ </div>
1481
+ );
1482
+ }};
1483
+
1484
+ export default App;
1485
+ '''
1486
+ write_file(project_dir / "src" / "App.tsx", app_content, classification)
1487
+
1488
+ # src/main.tsx
1489
+ main_content = '''import React from 'react';
1490
+ import ReactDOM from 'react-dom/client';
1491
+ import App from './App';
1492
+
1493
+ ReactDOM.createRoot(document.getElementById('root')!).render(
1494
+ <React.StrictMode>
1495
+ <App />
1496
+ </React.StrictMode>
1497
+ );
1498
+ '''
1499
+ write_file(project_dir / "src" / "main.tsx", main_content, classification)
1500
+
1501
+ # tsconfig.json
1502
+ tsconfig = {
1503
+ "compilerOptions": {
1504
+ "target": "ES2020",
1505
+ "useDefineForClassFields": True,
1506
+ "lib": ["ES2020", "DOM", "DOM.Iterable"],
1507
+ "module": "ESNext",
1508
+ "skipLibCheck": True,
1509
+ "moduleResolution": "bundler",
1510
+ "allowImportingTsExtensions": True,
1511
+ "resolveJsonModule": True,
1512
+ "isolatedModules": True,
1513
+ "noEmit": True,
1514
+ "jsx": "react-jsx",
1515
+ "strict": True,
1516
+ "noUnusedLocals": True,
1517
+ "noUnusedParameters": True,
1518
+ "noFallthroughCasesInSwitch": True
1519
+ },
1520
+ "include": ["src"],
1521
+ "references": [{"path": "./tsconfig.node.json"}]
1522
+ }
1523
+ ts_path = project_dir / "tsconfig.json"
1524
+ with open(ts_path, "w", encoding="utf-8", newline="\n") as f:
1525
+ json.dump(tsconfig, f, indent=2)
1526
+ f.write("\n")
1527
+ created.append(str(ts_path))
1528
+
1529
+ # Dockerfile
1530
+ dockerfile_content = f"""FROM node:20-slim AS build
1531
+
1532
+ LABEL maintainer="SPARKPILOT System"
1533
+ LABEL classification="{classification}"
1534
+
1535
+ WORKDIR /app
1536
+ COPY package.json package-lock.json* ./
1537
+ RUN npm ci --ignore-scripts
1538
+ COPY . .
1539
+ RUN npm run build
1540
+
1541
+ FROM nginx:1.25-alpine
1542
+
1543
+ COPY --from=build /app/dist /usr/share/nginx/html
1544
+
1545
+ RUN addgroup -S appuser && adduser -S appuser -G appuser
1546
+ RUN chown -R appuser:appuser /usr/share/nginx/html && \\
1547
+ chmod -R 750 /usr/share/nginx/html
1548
+
1549
+ EXPOSE 80
1550
+
1551
+ HEALTHCHECK --interval=30s --timeout=5s --retries=3 \\
1552
+ CMD wget -q --spider http://localhost:80/ || exit 1
1553
+
1554
+ CMD ["nginx", "-g", "daemon off;"]
1555
+ """
1556
+ write_file(project_dir / "Dockerfile", dockerfile_content, classification)
1557
+
1558
+ # .gitlab-ci.yml
1559
+ gitlab_ci_content = """stages:
1560
+ - test
1561
+ - security
1562
+ - build
1563
+ - deploy
1564
+
1565
+ cache:
1566
+ paths:
1567
+ - node_modules/
1568
+
1569
+ unit-tests:
1570
+ stage: test
1571
+ image: node:20-slim
1572
+ script:
1573
+ - npm ci --ignore-scripts
1574
+ - npm run test:coverage
1575
+ artifacts:
1576
+ reports:
1577
+ coverage_report:
1578
+ coverage_format: cobertura
1579
+ path: coverage/cobertura-coverage.xml
1580
+
1581
+ lint:
1582
+ stage: test
1583
+ image: node:20-slim
1584
+ script:
1585
+ - npm ci --ignore-scripts
1586
+ - npm run lint
1587
+
1588
+ dependency-audit:
1589
+ stage: security
1590
+ image: node:20-slim
1591
+ script:
1592
+ - npm audit --json > npm-audit-report.json || true
1593
+ artifacts:
1594
+ paths: [npm-audit-report.json]
1595
+
1596
+ build-image:
1597
+ stage: build
1598
+ image: docker:24
1599
+ services: [docker:24-dind]
1600
+ script:
1601
+ - docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA .
1602
+ - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
1603
+ - docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
1604
+ only: [main, develop]
1605
+ """
1606
+ write_file(project_dir / ".gitlab-ci.yml", gitlab_ci_content, classification)
1607
+
1608
+ created.extend([
1609
+ str(project_dir / "src" / "App.tsx"),
1610
+ str(project_dir / "src" / "main.tsx"),
1611
+ str(project_dir / "Dockerfile"),
1612
+ str(project_dir / ".gitlab-ci.yml"),
1613
+ ])
1614
+ return created
1615
+
1616
+
1617
+ # Dispatcher mapping project types to scaffold functions
1618
+ SCAFFOLDERS = {
1619
+ "webapp": scaffold_python_webapp,
1620
+ "microservice": scaffold_microservice,
1621
+ "api": scaffold_api,
1622
+ "cli": scaffold_cli,
1623
+ "data_pipeline": scaffold_data_pipeline,
1624
+ "iac": scaffold_iac,
1625
+ "frontend": scaffold_js_frontend,
1626
+ }
1627
+
1628
+
1629
+ def scaffold_project(project_dir: str, project_type: str, project_name: str = None, classification: str = "CUI") -> dict:
1630
+ """Main entry point: scaffold a project of the given type.
1631
+
1632
+ Args:
1633
+ project_dir: Path to the project directory (will be created if needed).
1634
+ project_type: One of webapp, microservice, api, cli, data_pipeline, iac, frontend.
1635
+ project_name: Human-readable project name (derived from dir if omitted).
1636
+ classification: Data classification (CUI, FOUO, Public).
1637
+
1638
+ Returns:
1639
+ dict with project_dir, type, classification, and list of created files/dirs.
1640
+ """
1641
+ project_path = Path(project_dir)
1642
+ project_path.mkdir(parents=True, exist_ok=True)
1643
+
1644
+ if not project_name:
1645
+ project_name = project_path.name.replace("-", " ").replace("_", " ").title()
1646
+
1647
+ if project_type not in SCAFFOLDERS:
1648
+ raise ValueError(f"Unknown project type '{project_type}'. Supported: {list(SCAFFOLDERS.keys())}")
1649
+
1650
+ scaffolder = SCAFFOLDERS[project_type]
1651
+ created = scaffolder(project_path, project_name, classification)
1652
+
1653
+ return {
1654
+ "project_dir": str(project_path),
1655
+ "project_name": project_name,
1656
+ "type": project_type,
1657
+ "classification": classification,
1658
+ "files_created": len(created),
1659
+ "paths": created,
1660
+ }
1661
+
1662
+
1663
+ def main():
1664
+ parser = argparse.ArgumentParser(
1665
+ description="Generate project directory structure based on type"
1666
+ )
1667
+ parser.add_argument(
1668
+ "--project-dir", required=True,
1669
+ help="Path to the project directory to scaffold"
1670
+ )
1671
+ parser.add_argument(
1672
+ "--type", required=True, choices=list(SCAFFOLDERS.keys()),
1673
+ help="Project type"
1674
+ )
1675
+ parser.add_argument(
1676
+ "--name",
1677
+ help="Project name (defaults to directory name)"
1678
+ )
1679
+ parser.add_argument(
1680
+ "--classification", default="CUI", choices=["CUI", "FOUO", "Public"],
1681
+ help="Data classification level"
1682
+ )
1683
+ parser.add_argument(
1684
+ "--format", choices=["text", "json"], default="text",
1685
+ help="Output format"
1686
+ )
1687
+ parser.add_argument("--json", action="store_true", dest="json_output", help="JSON output")
1688
+ args = parser.parse_args()
1689
+
1690
+ result = scaffold_project(
1691
+ project_dir=args.project_dir,
1692
+ project_type=args.type,
1693
+ project_name=args.name,
1694
+ classification=args.classification,
1695
+ )
1696
+
1697
+ if args.format == "json":
1698
+ print(json.dumps(result, indent=2))
1699
+ else:
1700
+ print(f"Scaffolded {result['type']} project: {result['project_name']}")
1701
+ print(f" Directory: {result['project_dir']}")
1702
+ print(f" Classification: {result['classification']}")
1703
+ print(f" Files/dirs created: {result['files_created']}")
1704
+ print()
1705
+ for p in result["paths"]:
1706
+ # Show relative path from project dir for readability
1707
+ try:
1708
+ rel = Path(p).relative_to(result["project_dir"])
1709
+ print(f" {rel}")
1710
+ except ValueError:
1711
+ print(f" {p}")
1712
+
1713
+
1714
+ if __name__ == "__main__":
1715
+ main()