prismal-ai 3.0.0__tar.gz

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 (355) hide show
  1. prismal_ai-3.0.0/.codegraph/.gitignore +16 -0
  2. prismal_ai-3.0.0/.codegraph/codegraph.db +0 -0
  3. prismal_ai-3.0.0/.gitignore +76 -0
  4. prismal_ai-3.0.0/.gitleaks.toml +69 -0
  5. prismal_ai-3.0.0/.pre-commit-config.yaml +316 -0
  6. prismal_ai-3.0.0/.python-version +1 -0
  7. prismal_ai-3.0.0/.trivyignore +61 -0
  8. prismal_ai-3.0.0/CHANGELOG.md +229 -0
  9. prismal_ai-3.0.0/CLAUDE.md +189 -0
  10. prismal_ai-3.0.0/CONTRIBUTING.md +279 -0
  11. prismal_ai-3.0.0/LICENSE +21 -0
  12. prismal_ai-3.0.0/PKG-INFO +670 -0
  13. prismal_ai-3.0.0/PLAN_MIGRACION.md +200 -0
  14. prismal_ai-3.0.0/README.md +506 -0
  15. prismal_ai-3.0.0/assets/prismal-logo-icon.svg +37 -0
  16. prismal_ai-3.0.0/assets/prismal-logo.svg +72 -0
  17. prismal_ai-3.0.0/config/mcp_servers.yaml +74 -0
  18. prismal_ai-3.0.0/env.example +407 -0
  19. prismal_ai-3.0.0/examples/README.md +292 -0
  20. prismal_ai-3.0.0/examples/extension/custom_node.py +36 -0
  21. prismal_ai-3.0.0/examples/extension/custom_subgraph.py +45 -0
  22. prismal_ai-3.0.0/examples/extension/discover_plugins_demo.py +53 -0
  23. prismal_ai-3.0.0/examples/extension/langchain_migration.py +35 -0
  24. prismal_ai-3.0.0/examples/multimodal/01_vision_agent.py +206 -0
  25. prismal_ai-3.0.0/examples/multimodal/02_audio_agent.py +196 -0
  26. prismal_ai-3.0.0/examples/multimodal/03_video_agent.py +223 -0
  27. prismal_ai-3.0.0/examples/multimodal/04_modality_router.py +162 -0
  28. prismal_ai-3.0.0/examples/multimodal/05_multimodal_fusion.py +195 -0
  29. prismal_ai-3.0.0/examples/multimodal_pipeline.py +70 -0
  30. prismal_ai-3.0.0/examples/patterns/01_tree_of_thoughts.py +221 -0
  31. prismal_ai-3.0.0/examples/patterns/02_debate.py +165 -0
  32. prismal_ai-3.0.0/examples/patterns/03_lats.py +284 -0
  33. prismal_ai-3.0.0/examples/patterns/04_llm_compiler.py +355 -0
  34. prismal_ai-3.0.0/examples/patterns/05_mixture_of_agents.py +198 -0
  35. prismal_ai-3.0.0/examples/patterns/06_reflection_loop.py +273 -0
  36. prismal_ai-3.0.0/examples/patterns/07_constitutional_ai.py +249 -0
  37. prismal_ai-3.0.0/examples/patterns/08_swarm.py +304 -0
  38. prismal_ai-3.0.0/examples/patterns/09_parallel_dispatcher.py +310 -0
  39. prismal_ai-3.0.0/examples/plugin_template/README.md +47 -0
  40. prismal_ai-3.0.0/examples/plugin_template/pyproject.toml +21 -0
  41. prismal_ai-3.0.0/examples/plugin_template/src/prismal_x_example/__init__.py +5 -0
  42. prismal_ai-3.0.0/examples/plugin_template/src/prismal_x_example/nodes.py +12 -0
  43. prismal_ai-3.0.0/examples/plugin_template/src/prismal_x_example/plugin.py +34 -0
  44. prismal_ai-3.0.0/examples/plugin_template/tests/test_plugin.py +19 -0
  45. prismal_ai-3.0.0/examples/rag/01_crag.py +280 -0
  46. prismal_ai-3.0.0/examples/rag/02_adaptive_rag.py +303 -0
  47. prismal_ai-3.0.0/examples/rag/03_self_rag.py +270 -0
  48. prismal_ai-3.0.0/examples/rag/04_hyde.py +328 -0
  49. prismal_ai-3.0.0/examples/rag/05_hybrid_search.py +332 -0
  50. prismal_ai-3.0.0/examples/rag/06_hierarchical_rag.py +305 -0
  51. prismal_ai-3.0.0/examples/rag/07_rag_fusion.py +318 -0
  52. prismal_ai-3.0.0/examples/rag/08_multi_vector_rag.py +319 -0
  53. prismal_ai-3.0.0/examples/rag/09_multimodal_rag.py +312 -0
  54. prismal_ai-3.0.0/examples/subgraphs/01_ml_pipeline.py +177 -0
  55. prismal_ai-3.0.0/examples/subgraphs/02_financial_analyst.py +266 -0
  56. prismal_ai-3.0.0/examples/subgraphs/03_dev_pipeline.py +366 -0
  57. prismal_ai-3.0.0/examples/subgraphs/04_code_review.py +777 -0
  58. prismal_ai-3.0.0/examples/subgraphs/05_data_etl.py +580 -0
  59. prismal_ai-3.0.0/examples/subgraphs/06_customer_service.py +471 -0
  60. prismal_ai-3.0.0/examples/subgraphs/07_document_generation.py +484 -0
  61. prismal_ai-3.0.0/examples/subgraphs/08_debate_consensus.py +454 -0
  62. prismal_ai-3.0.0/examples/subgraphs/09_hitl_approval.py +801 -0
  63. prismal_ai-3.0.0/examples/subgraphs/10_analysis_orchestrator.py +883 -0
  64. prismal_ai-3.0.0/examples/subgraphs/11_engineering_orchestrator.py +340 -0
  65. prismal_ai-3.0.0/examples/subgraphs/12_research_orchestrator.py +290 -0
  66. prismal_ai-3.0.0/examples/tool_provider_custom.py +71 -0
  67. prismal_ai-3.0.0/examples/tool_provider_host.py +99 -0
  68. prismal_ai-3.0.0/examples/visualize_graphs.py +52 -0
  69. prismal_ai-3.0.0/examples.md +404 -0
  70. prismal_ai-3.0.0/prismal/agents/__init__.py +31 -0
  71. prismal_ai-3.0.0/prismal/agents/codeact_agent.py +638 -0
  72. prismal_ai-3.0.0/prismal/agents/coder.py +185 -0
  73. prismal_ai-3.0.0/prismal/agents/context.py +77 -0
  74. prismal_ai-3.0.0/prismal/agents/critic.py +200 -0
  75. prismal_ai-3.0.0/prismal/agents/cron_manager.py +172 -0
  76. prismal_ai-3.0.0/prismal/agents/cua_agent.py +558 -0
  77. prismal_ai-3.0.0/prismal/agents/data_analyst.py +170 -0
  78. prismal_ai-3.0.0/prismal/agents/domain_supervisor.py +334 -0
  79. prismal_ai-3.0.0/prismal/agents/extension/__init__.py +81 -0
  80. prismal_ai-3.0.0/prismal/agents/extension/_middleware.py +304 -0
  81. prismal_ai-3.0.0/prismal/agents/extension/_registry.py +41 -0
  82. prismal_ai-3.0.0/prismal/agents/extension/adapters.py +136 -0
  83. prismal_ai-3.0.0/prismal/agents/extension/builder.py +263 -0
  84. prismal_ai-3.0.0/prismal/agents/extension/decorators.py +164 -0
  85. prismal_ai-3.0.0/prismal/agents/extension/plugins.py +335 -0
  86. prismal_ai-3.0.0/prismal/agents/extension/ports.py +146 -0
  87. prismal_ai-3.0.0/prismal/agents/extension/providers.py +363 -0
  88. prismal_ai-3.0.0/prismal/agents/factory.py +480 -0
  89. prismal_ai-3.0.0/prismal/agents/file_manager.py +155 -0
  90. prismal_ai-3.0.0/prismal/agents/graph.py +806 -0
  91. prismal_ai-3.0.0/prismal/agents/intent_router.py +160 -0
  92. prismal_ai-3.0.0/prismal/agents/meta_learner.py +300 -0
  93. prismal_ai-3.0.0/prismal/agents/multimodal/__init__.py +45 -0
  94. prismal_ai-3.0.0/prismal/agents/multimodal/audio_agent.py +200 -0
  95. prismal_ai-3.0.0/prismal/agents/multimodal/ingestion.py +178 -0
  96. prismal_ai-3.0.0/prismal/agents/multimodal/modality_router.py +252 -0
  97. prismal_ai-3.0.0/prismal/agents/multimodal/multimodal_fusion.py +172 -0
  98. prismal_ai-3.0.0/prismal/agents/multimodal/video_agent.py +268 -0
  99. prismal_ai-3.0.0/prismal/agents/multimodal/vision_agent.py +188 -0
  100. prismal_ai-3.0.0/prismal/agents/network_supervisor.py +247 -0
  101. prismal_ai-3.0.0/prismal/agents/parallel_research.py +221 -0
  102. prismal_ai-3.0.0/prismal/agents/patterns/__init__.py +38 -0
  103. prismal_ai-3.0.0/prismal/agents/patterns/constitutional.py +330 -0
  104. prismal_ai-3.0.0/prismal/agents/patterns/debate.py +353 -0
  105. prismal_ai-3.0.0/prismal/agents/patterns/lats.py +342 -0
  106. prismal_ai-3.0.0/prismal/agents/patterns/llm_compiler.py +399 -0
  107. prismal_ai-3.0.0/prismal/agents/patterns/mixture_of_agents.py +199 -0
  108. prismal_ai-3.0.0/prismal/agents/patterns/nodes.py +486 -0
  109. prismal_ai-3.0.0/prismal/agents/patterns/parallel.py +166 -0
  110. prismal_ai-3.0.0/prismal/agents/patterns/reflection.py +255 -0
  111. prismal_ai-3.0.0/prismal/agents/patterns/swarm.py +171 -0
  112. prismal_ai-3.0.0/prismal/agents/patterns/tree_of_thoughts.py +476 -0
  113. prismal_ai-3.0.0/prismal/agents/planner.py +365 -0
  114. prismal_ai-3.0.0/prismal/agents/rag_agent.py +339 -0
  115. prismal_ai-3.0.0/prismal/agents/researcher.py +243 -0
  116. prismal_ai-3.0.0/prismal/agents/skill_creator.py +512 -0
  117. prismal_ai-3.0.0/prismal/agents/skill_manager.py +725 -0
  118. prismal_ai-3.0.0/prismal/agents/spawner.py +115 -0
  119. prismal_ai-3.0.0/prismal/agents/state.py +163 -0
  120. prismal_ai-3.0.0/prismal/agents/subgraphs/__init__.py +22 -0
  121. prismal_ai-3.0.0/prismal/agents/subgraphs/analysis_orchestrator/__init__.py +13 -0
  122. prismal_ai-3.0.0/prismal/agents/subgraphs/analysis_orchestrator/builder.py +222 -0
  123. prismal_ai-3.0.0/prismal/agents/subgraphs/artifacts.py +94 -0
  124. prismal_ai-3.0.0/prismal/agents/subgraphs/code_review/__init__.py +55 -0
  125. prismal_ai-3.0.0/prismal/agents/subgraphs/code_review/builder.py +110 -0
  126. prismal_ai-3.0.0/prismal/agents/subgraphs/code_review/linter_node.py +68 -0
  127. prismal_ai-3.0.0/prismal/agents/subgraphs/code_review/logic_reviewer_node.py +66 -0
  128. prismal_ai-3.0.0/prismal/agents/subgraphs/code_review/report_generator_node.py +111 -0
  129. prismal_ai-3.0.0/prismal/agents/subgraphs/code_review/security_scanner_node.py +69 -0
  130. prismal_ai-3.0.0/prismal/agents/subgraphs/code_review/suggester_node.py +82 -0
  131. prismal_ai-3.0.0/prismal/agents/subgraphs/code_review/types.py +52 -0
  132. prismal_ai-3.0.0/prismal/agents/subgraphs/customer_service/__init__.py +44 -0
  133. prismal_ai-3.0.0/prismal/agents/subgraphs/customer_service/builder.py +149 -0
  134. prismal_ai-3.0.0/prismal/agents/subgraphs/customer_service/classifier_node.py +81 -0
  135. prismal_ai-3.0.0/prismal/agents/subgraphs/customer_service/escalation_node.py +62 -0
  136. prismal_ai-3.0.0/prismal/agents/subgraphs/customer_service/faq_retrieval_node.py +80 -0
  137. prismal_ai-3.0.0/prismal/agents/subgraphs/customer_service/response_generator_node.py +74 -0
  138. prismal_ai-3.0.0/prismal/agents/subgraphs/customer_service/ticket_creator_node.py +66 -0
  139. prismal_ai-3.0.0/prismal/agents/subgraphs/data_etl/__init__.py +35 -0
  140. prismal_ai-3.0.0/prismal/agents/subgraphs/data_etl/auditor_node.py +83 -0
  141. prismal_ai-3.0.0/prismal/agents/subgraphs/data_etl/builder.py +120 -0
  142. prismal_ai-3.0.0/prismal/agents/subgraphs/data_etl/extractor_node.py +90 -0
  143. prismal_ai-3.0.0/prismal/agents/subgraphs/data_etl/loader_node.py +87 -0
  144. prismal_ai-3.0.0/prismal/agents/subgraphs/data_etl/transformer_node.py +123 -0
  145. prismal_ai-3.0.0/prismal/agents/subgraphs/data_etl/validator_node.py +92 -0
  146. prismal_ai-3.0.0/prismal/agents/subgraphs/debate_consensus/__init__.py +44 -0
  147. prismal_ai-3.0.0/prismal/agents/subgraphs/debate_consensus/_helpers.py +97 -0
  148. prismal_ai-3.0.0/prismal/agents/subgraphs/debate_consensus/builder.py +106 -0
  149. prismal_ai-3.0.0/prismal/agents/subgraphs/debate_consensus/consensus_node.py +88 -0
  150. prismal_ai-3.0.0/prismal/agents/subgraphs/debate_consensus/moderator_node.py +33 -0
  151. prismal_ai-3.0.0/prismal/agents/subgraphs/debate_consensus/opponent_node.py +32 -0
  152. prismal_ai-3.0.0/prismal/agents/subgraphs/debate_consensus/proponent_node.py +31 -0
  153. prismal_ai-3.0.0/prismal/agents/subgraphs/dev_pipeline/__init__.py +0 -0
  154. prismal_ai-3.0.0/prismal/agents/subgraphs/dev_pipeline/architect_agent.py +153 -0
  155. prismal_ai-3.0.0/prismal/agents/subgraphs/dev_pipeline/builder.py +196 -0
  156. prismal_ai-3.0.0/prismal/agents/subgraphs/dev_pipeline/developer_agent.py +173 -0
  157. prismal_ai-3.0.0/prismal/agents/subgraphs/dev_pipeline/parallel_unit_test.py +254 -0
  158. prismal_ai-3.0.0/prismal/agents/subgraphs/dev_pipeline/po_agent.py +271 -0
  159. prismal_ai-3.0.0/prismal/agents/subgraphs/dev_pipeline/qa_agent.py +158 -0
  160. prismal_ai-3.0.0/prismal/agents/subgraphs/dev_pipeline/reviewer_agent.py +162 -0
  161. prismal_ai-3.0.0/prismal/agents/subgraphs/dev_pipeline/unit_test_agent.py +159 -0
  162. prismal_ai-3.0.0/prismal/agents/subgraphs/document_generation/__init__.py +43 -0
  163. prismal_ai-3.0.0/prismal/agents/subgraphs/document_generation/builder.py +121 -0
  164. prismal_ai-3.0.0/prismal/agents/subgraphs/document_generation/editor_node.py +69 -0
  165. prismal_ai-3.0.0/prismal/agents/subgraphs/document_generation/formatter_node.py +71 -0
  166. prismal_ai-3.0.0/prismal/agents/subgraphs/document_generation/planner_node.py +92 -0
  167. prismal_ai-3.0.0/prismal/agents/subgraphs/document_generation/researcher_node.py +98 -0
  168. prismal_ai-3.0.0/prismal/agents/subgraphs/document_generation/writer_node.py +75 -0
  169. prismal_ai-3.0.0/prismal/agents/subgraphs/engineering_orchestrator/__init__.py +13 -0
  170. prismal_ai-3.0.0/prismal/agents/subgraphs/engineering_orchestrator/builder.py +153 -0
  171. prismal_ai-3.0.0/prismal/agents/subgraphs/factory.py +168 -0
  172. prismal_ai-3.0.0/prismal/agents/subgraphs/financial/__init__.py +0 -0
  173. prismal_ai-3.0.0/prismal/agents/subgraphs/financial/artifacts.py +213 -0
  174. prismal_ai-3.0.0/prismal/agents/subgraphs/financial/builder.py +442 -0
  175. prismal_ai-3.0.0/prismal/agents/subgraphs/financial/fundamental_analyst.py +190 -0
  176. prismal_ai-3.0.0/prismal/agents/subgraphs/financial/market_data_collector.py +263 -0
  177. prismal_ai-3.0.0/prismal/agents/subgraphs/financial/report_generator.py +229 -0
  178. prismal_ai-3.0.0/prismal/agents/subgraphs/financial/risk_sentiment_analyst.py +190 -0
  179. prismal_ai-3.0.0/prismal/agents/subgraphs/financial/technical_analyst.py +252 -0
  180. prismal_ai-3.0.0/prismal/agents/subgraphs/financial/tools_finance.py +252 -0
  181. prismal_ai-3.0.0/prismal/agents/subgraphs/gates.py +420 -0
  182. prismal_ai-3.0.0/prismal/agents/subgraphs/ml_pipeline/__init__.py +0 -0
  183. prismal_ai-3.0.0/prismal/agents/subgraphs/ml_pipeline/artifacts.py +163 -0
  184. prismal_ai-3.0.0/prismal/agents/subgraphs/ml_pipeline/builder.py +135 -0
  185. prismal_ai-3.0.0/prismal/agents/subgraphs/ml_pipeline/data_ingester.py +193 -0
  186. prismal_ai-3.0.0/prismal/agents/subgraphs/ml_pipeline/eda_analyst.py +194 -0
  187. prismal_ai-3.0.0/prismal/agents/subgraphs/ml_pipeline/feature_engineer.py +192 -0
  188. prismal_ai-3.0.0/prismal/agents/subgraphs/ml_pipeline/model_evaluator.py +217 -0
  189. prismal_ai-3.0.0/prismal/agents/subgraphs/ml_pipeline/model_exporter.py +210 -0
  190. prismal_ai-3.0.0/prismal/agents/subgraphs/ml_pipeline/model_trainer.py +217 -0
  191. prismal_ai-3.0.0/prismal/agents/subgraphs/ml_pipeline/tools_ml.py +945 -0
  192. prismal_ai-3.0.0/prismal/agents/subgraphs/multimodal_pipeline/__init__.py +18 -0
  193. prismal_ai-3.0.0/prismal/agents/subgraphs/multimodal_pipeline/builder.py +324 -0
  194. prismal_ai-3.0.0/prismal/agents/subgraphs/registry.py +206 -0
  195. prismal_ai-3.0.0/prismal/agents/subgraphs/research_orchestrator/__init__.py +21 -0
  196. prismal_ai-3.0.0/prismal/agents/subgraphs/research_orchestrator/builder.py +170 -0
  197. prismal_ai-3.0.0/prismal/agents/supervisor.py +1114 -0
  198. prismal_ai-3.0.0/prismal/agents/tool_registry.py +987 -0
  199. prismal_ai-3.0.0/prismal/agents/tools.py +1247 -0
  200. prismal_ai-3.0.0/prismal/agents/visualization.py +131 -0
  201. prismal_ai-3.0.0/prismal/core/__init__.py +48 -0
  202. prismal_ai-3.0.0/prismal/core/config.py +1385 -0
  203. prismal_ai-3.0.0/prismal/core/database.py +236 -0
  204. prismal_ai-3.0.0/prismal/core/env_compat.py +62 -0
  205. prismal_ai-3.0.0/prismal/core/exceptions.py +664 -0
  206. prismal_ai-3.0.0/prismal/core/logging.py +176 -0
  207. prismal_ai-3.0.0/prismal/core/users.py +298 -0
  208. prismal_ai-3.0.0/prismal/data/__init__.py +36 -0
  209. prismal_ai-3.0.0/prismal/data/duckdb_engine.py +187 -0
  210. prismal_ai-3.0.0/prismal/data/polars_utils.py +320 -0
  211. prismal_ai-3.0.0/prismal/events/__init__.py +20 -0
  212. prismal_ai-3.0.0/prismal/events/file_watcher.py +251 -0
  213. prismal_ai-3.0.0/prismal/events/webhook_dispatcher.py +190 -0
  214. prismal_ai-3.0.0/prismal/langgraph.py +61 -0
  215. prismal_ai-3.0.0/prismal/mcp/__init__.py +32 -0
  216. prismal_ai-3.0.0/prismal/mcp/adapter.py +342 -0
  217. prismal_ai-3.0.0/prismal/mcp/client.py +441 -0
  218. prismal_ai-3.0.0/prismal/mcp/connection.py +675 -0
  219. prismal_ai-3.0.0/prismal/mcp/servers/__init__.py +10 -0
  220. prismal_ai-3.0.0/prismal/mcp/servers/datetime_server.py +595 -0
  221. prismal_ai-3.0.0/prismal/memory/__init__.py +36 -0
  222. prismal_ai-3.0.0/prismal/memory/chat_session_store.py +185 -0
  223. prismal_ai-3.0.0/prismal/memory/conversation_history.py +156 -0
  224. prismal_ai-3.0.0/prismal/memory/long_term.py +387 -0
  225. prismal_ai-3.0.0/prismal/memory/long_term_store.py +327 -0
  226. prismal_ai-3.0.0/prismal/memory/mongodb_store.py +340 -0
  227. prismal_ai-3.0.0/prismal/memory/preferences.py +351 -0
  228. prismal_ai-3.0.0/prismal/memory/profile.py +271 -0
  229. prismal_ai-3.0.0/prismal/memory/session_registry.py +222 -0
  230. prismal_ai-3.0.0/prismal/memory/short_term.py +125 -0
  231. prismal_ai-3.0.0/prismal/monitoring/__init__.py +15 -0
  232. prismal_ai-3.0.0/prismal/monitoring/_settings_proxy.py +22 -0
  233. prismal_ai-3.0.0/prismal/monitoring/cost_tracker.py +399 -0
  234. prismal_ai-3.0.0/prismal/monitoring/langfuse_client.py +217 -0
  235. prismal_ai-3.0.0/prismal/monitoring/otel.py +363 -0
  236. prismal_ai-3.0.0/prismal/plugins.py +112 -0
  237. prismal_ai-3.0.0/prismal/providers/__init__.py +44 -0
  238. prismal_ai-3.0.0/prismal/providers/cross_modal_embeddings.py +149 -0
  239. prismal_ai-3.0.0/prismal/providers/multimodal.py +44 -0
  240. prismal_ai-3.0.0/prismal/providers/registry.py +321 -0
  241. prismal_ai-3.0.0/prismal/providers/stt.py +227 -0
  242. prismal_ai-3.0.0/prismal/providers/tts.py +275 -0
  243. prismal_ai-3.0.0/prismal/providers/vision.py +45 -0
  244. prismal_ai-3.0.0/prismal/rag/__init__.py +99 -0
  245. prismal_ai-3.0.0/prismal/rag/adaptive.py +326 -0
  246. prismal_ai-3.0.0/prismal/rag/crag.py +320 -0
  247. prismal_ai-3.0.0/prismal/rag/embeddings.py +94 -0
  248. prismal_ai-3.0.0/prismal/rag/engine.py +293 -0
  249. prismal_ai-3.0.0/prismal/rag/federated.py +226 -0
  250. prismal_ai-3.0.0/prismal/rag/fusion.py +232 -0
  251. prismal_ai-3.0.0/prismal/rag/hierarchical.py +281 -0
  252. prismal_ai-3.0.0/prismal/rag/hybrid.py +239 -0
  253. prismal_ai-3.0.0/prismal/rag/hyde.py +177 -0
  254. prismal_ai-3.0.0/prismal/rag/loaders/__init__.py +26 -0
  255. prismal_ai-3.0.0/prismal/rag/loaders/audio_loader.py +101 -0
  256. prismal_ai-3.0.0/prismal/rag/loaders/document_loader.py +180 -0
  257. prismal_ai-3.0.0/prismal/rag/loaders/image_loader.py +53 -0
  258. prismal_ai-3.0.0/prismal/rag/loaders/video_loader.py +96 -0
  259. prismal_ai-3.0.0/prismal/rag/multi_vector.py +295 -0
  260. prismal_ai-3.0.0/prismal/rag/multimodal.py +220 -0
  261. prismal_ai-3.0.0/prismal/rag/self_rag.py +273 -0
  262. prismal_ai-3.0.0/prismal/rag/vector_store.py +213 -0
  263. prismal_ai-3.0.0/prismal/sandbox/__init__.py +10 -0
  264. prismal_ai-3.0.0/prismal/sandbox/executor.py +507 -0
  265. prismal_ai-3.0.0/prismal/sandbox/installer.py +307 -0
  266. prismal_ai-3.0.0/prismal/sandbox/isolation.py +1369 -0
  267. prismal_ai-3.0.0/prismal/sandbox/manager.py +205 -0
  268. prismal_ai-3.0.0/prismal/sandbox/tools.py +305 -0
  269. prismal_ai-3.0.0/prismal/scheduler/__init__.py +60 -0
  270. prismal_ai-3.0.0/prismal/scheduler/cron_manager.py +699 -0
  271. prismal_ai-3.0.0/prismal/scheduler/datetime_service.py +333 -0
  272. prismal_ai-3.0.0/prismal/scheduler/executor.py +504 -0
  273. prismal_ai-3.0.0/prismal/scheduler/heartbeat_delivery.py +201 -0
  274. prismal_ai-3.0.0/prismal/scheduler/notifier.py +211 -0
  275. prismal_ai-3.0.0/prismal/scheduler/prefect_flows.py +184 -0
  276. prismal_ai-3.0.0/prismal/security/__init__.py +43 -0
  277. prismal_ai-3.0.0/prismal/security/action_interceptor.py +205 -0
  278. prismal_ai-3.0.0/prismal/security/audit.py +320 -0
  279. prismal_ai-3.0.0/prismal/security/filesystem_guard.py +99 -0
  280. prismal_ai-3.0.0/prismal/security/guardrails.py +227 -0
  281. prismal_ai-3.0.0/prismal/security/media_validator.py +260 -0
  282. prismal_ai-3.0.0/prismal/security/nemo_rails.py +265 -0
  283. prismal_ai-3.0.0/prismal/security/patterns/__init__.py +0 -0
  284. prismal_ai-3.0.0/prismal/security/patterns/injection_patterns.yaml +83 -0
  285. prismal_ai-3.0.0/prismal/security/permissions.py +159 -0
  286. prismal_ai-3.0.0/prismal/security/pii_sanitizer.py +90 -0
  287. prismal_ai-3.0.0/prismal/security/prompt_builder.py +75 -0
  288. prismal_ai-3.0.0/prismal/security/sanitizer.py +154 -0
  289. prismal_ai-3.0.0/prismal/skills/__init__.py +32 -0
  290. prismal_ai-3.0.0/prismal/skills/available/__init__.py +0 -0
  291. prismal_ai-3.0.0/prismal/skills/available/calendar/__init__.py +0 -0
  292. prismal_ai-3.0.0/prismal/skills/available/calendar/skill.py +166 -0
  293. prismal_ai-3.0.0/prismal/skills/available/code_executor/__init__.py +0 -0
  294. prismal_ai-3.0.0/prismal/skills/available/code_executor/skill.py +130 -0
  295. prismal_ai-3.0.0/prismal/skills/available/database_query/__init__.py +0 -0
  296. prismal_ai-3.0.0/prismal/skills/available/database_query/skill.py +158 -0
  297. prismal_ai-3.0.0/prismal/skills/available/email_reader/__init__.py +0 -0
  298. prismal_ai-3.0.0/prismal/skills/available/email_reader/skill.py +212 -0
  299. prismal_ai-3.0.0/prismal/skills/available/spec_driven_design/SKILL.md +123 -0
  300. prismal_ai-3.0.0/prismal/skills/available/spec_driven_design/references/01-PLANTILLA-PRD.md +159 -0
  301. prismal_ai-3.0.0/prismal/skills/available/spec_driven_design/references/02-PLANTILLA-API-SPEC.md +320 -0
  302. prismal_ai-3.0.0/prismal/skills/available/spec_driven_design/references/03-PLANTILLA-TECHNICAL-DESIGN.md +227 -0
  303. prismal_ai-3.0.0/prismal/skills/available/spec_driven_design/references/04-PLANTILLA-DATA-MODEL.md +190 -0
  304. prismal_ai-3.0.0/prismal/skills/available/spec_driven_design/references/05-PLANTILLA-IMPLEMENTATION-PLAN.md +205 -0
  305. prismal_ai-3.0.0/prismal/skills/available/spec_driven_design/references/06-GUIA-LLENADO.md +284 -0
  306. prismal_ai-3.0.0/prismal/skills/available/spec_driven_design/scripts/validate_specs.py +204 -0
  307. prismal_ai-3.0.0/prismal/skills/available/spec_driven_design/skill.py +46 -0
  308. prismal_ai-3.0.0/prismal/skills/available/weather/__init__.py +0 -0
  309. prismal_ai-3.0.0/prismal/skills/available/weather/skill.py +137 -0
  310. prismal_ai-3.0.0/prismal/skills/available/web_search/__init__.py +0 -0
  311. prismal_ai-3.0.0/prismal/skills/available/web_search/skill.py +163 -0
  312. prismal_ai-3.0.0/prismal/skills/base.py +573 -0
  313. prismal_ai-3.0.0/prismal/skills/manager.py +638 -0
  314. prismal_ai-3.0.0/prismal/skills/remote_installer.py +613 -0
  315. prismal_ai-3.0.0/prismal/utils/__init__.py +0 -0
  316. prismal_ai-3.0.0/pyproject.toml +475 -0
  317. prismal_ai-3.0.0/setup.cfg +29 -0
  318. prismal_ai-3.0.0/specs/a2a-interop/ARCHITECTURE.md +237 -0
  319. prismal_ai-3.0.0/specs/a2a-interop/PLAN.md +289 -0
  320. prismal_ai-3.0.0/specs/a2a-interop/SPEC.md +278 -0
  321. prismal_ai-3.0.0/specs/a2a-interop/TASKS.md +165 -0
  322. prismal_ai-3.0.0/specs/advanced-architectures/ARCHITECTURE.md +538 -0
  323. prismal_ai-3.0.0/specs/advanced-architectures/PRD.md +445 -0
  324. prismal_ai-3.0.0/specs/advanced-architectures/SPEC.md +1517 -0
  325. prismal_ai-3.0.0/specs/advanced-architectures/TASKS.md +749 -0
  326. prismal_ai-3.0.0/specs/agent-eval-harness/PLAN.md +113 -0
  327. prismal_ai-3.0.0/specs/agent-identity-governance/PLAN.md +118 -0
  328. prismal_ai-3.0.0/specs/composition-root/ARCHITECTURE.md +242 -0
  329. prismal_ai-3.0.0/specs/composition-root/PLAN.md +267 -0
  330. prismal_ai-3.0.0/specs/composition-root/SPEC.md +228 -0
  331. prismal_ai-3.0.0/specs/composition-root/TASKS.md +172 -0
  332. prismal_ai-3.0.0/specs/cost-budget-governance/PLAN.md +116 -0
  333. prismal_ai-3.0.0/specs/dependency-security-remediation/ARCHITECTURE.md +209 -0
  334. prismal_ai-3.0.0/specs/dependency-security-remediation/PLAN.md +229 -0
  335. prismal_ai-3.0.0/specs/dependency-security-remediation/SPEC.md +211 -0
  336. prismal_ai-3.0.0/specs/dependency-security-remediation/TASKS.md +209 -0
  337. prismal_ai-3.0.0/specs/dependency-security-remediation/remediation-tracker.csv +19 -0
  338. prismal_ai-3.0.0/specs/extension-surface/ARCHITECTURE.md +601 -0
  339. prismal_ai-3.0.0/specs/extension-surface/PLAN.md +375 -0
  340. prismal_ai-3.0.0/specs/extension-surface/SPEC.md +855 -0
  341. prismal_ai-3.0.0/specs/extension-surface/TASKS.md +458 -0
  342. prismal_ai-3.0.0/specs/multimodal-agents/ARCHITECTURE.md +584 -0
  343. prismal_ai-3.0.0/specs/multimodal-agents/PLAN.md +319 -0
  344. prismal_ai-3.0.0/specs/multimodal-agents/SPEC.md +996 -0
  345. prismal_ai-3.0.0/specs/multimodal-agents/TASKS.md +480 -0
  346. prismal_ai-3.0.0/specs/tool-provider-injection/ARCHITECTURE.md +320 -0
  347. prismal_ai-3.0.0/specs/tool-provider-injection/PLAN.md +370 -0
  348. prismal_ai-3.0.0/specs/tool-provider-injection/SPEC.md +380 -0
  349. prismal_ai-3.0.0/specs/tool-provider-injection/TASKS.md +272 -0
  350. prismal_ai-3.0.0/specs/vector-store-port/ARCHITECTURE.md +281 -0
  351. prismal_ai-3.0.0/specs/vector-store-port/PLAN.md +300 -0
  352. prismal_ai-3.0.0/specs/vector-store-port/SPEC.md +293 -0
  353. prismal_ai-3.0.0/specs/vector-store-port/TASKS.md +200 -0
  354. prismal_ai-3.0.0/ty.toml +126 -0
  355. prismal_ai-3.0.0/uv.lock +8567 -0
@@ -0,0 +1,16 @@
1
+ # CodeGraph data files
2
+ # These are local to each machine and should not be committed
3
+
4
+ # Database
5
+ *.db
6
+ *.db-wal
7
+ *.db-shm
8
+
9
+ # Cache
10
+ cache/
11
+
12
+ # Logs
13
+ *.log
14
+
15
+ # Hook markers
16
+ .dirty
Binary file
@@ -0,0 +1,76 @@
1
+ # Python
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+ *.so
6
+ .Python
7
+ build/
8
+ develop-eggs/
9
+ dist/
10
+ downloads/
11
+ eggs/
12
+ .eggs/
13
+ lib/
14
+ lib64/
15
+ parts/
16
+ sdist/
17
+ var/
18
+ wheels/
19
+ *.egg-info/
20
+ .installed.cfg
21
+ *.egg
22
+ MANIFEST
23
+
24
+ # Virtual environments
25
+ .env
26
+ .venv
27
+ env/
28
+ venv/
29
+ ENV/
30
+ env.bak/
31
+ venv.bak/
32
+
33
+ # Testing
34
+ .pytest_cache/
35
+ .coverage
36
+ htmlcov/
37
+ coverage.xml
38
+ *.cover
39
+ .hypothesis/
40
+
41
+ # Mypy
42
+ .mypy_cache/
43
+ .dmypy.json
44
+ dmypy.json
45
+
46
+ # Ruff
47
+ .ruff_cache/
48
+
49
+ # IDE
50
+ .idea/
51
+ .vscode/
52
+ *.swp
53
+ *.swo
54
+
55
+ # Data (runtime)
56
+ data/db/
57
+ data/logs/
58
+ data/workspace/
59
+ data/documents/
60
+ data/backups/
61
+
62
+ # Skills (AI-generated, not committed)
63
+ prismal/skills/custom/
64
+ prismal/skills/active/
65
+
66
+ # Secrets
67
+ .env
68
+ env.example
69
+ !env.example
70
+ *.html
71
+ *.pdf
72
+ dist/
73
+ packaging/
74
+ *.pptx
75
+ *.ipynb
76
+ .pypirc.tmp
@@ -0,0 +1,69 @@
1
+ # .gitleaks.toml
2
+ # Prismal — Gitleaks configuration
3
+ # ============================================================
4
+
5
+ title = "Prismal Gitleaks Config"
6
+
7
+ [extend]
8
+ # Hereda todas las reglas por defecto de gitleaks
9
+ useDefault = true
10
+
11
+ # ----------------------------------------------------------
12
+ # Allowlist global — patrones que NO son secretos reales
13
+ # ----------------------------------------------------------
14
+ [allowlist]
15
+ description = "Valores de ejemplo y placeholders"
16
+
17
+ regexes = [
18
+ # Placeholders comunes en documentacion y ejemplos
19
+ '''(?i)(example|placeholder|your[-_]?key|changeme|dummy|fake|test[-_]?key|xxxx+|1234+)''',
20
+ # Variables de entorno sin valor asignado (solo nombre)
21
+ '''^\s*[A-Z_]+=\s*$''',
22
+ # URLs de documentacion
23
+ '''https?://(docs\.|www\.)?''',
24
+ ]
25
+
26
+ paths = [
27
+ # Archivos de ejemplo/plantilla
28
+ '''\.env\.example$''',
29
+ '''\.env\.template$''',
30
+ '''\.env\.sample$''',
31
+ # Tests y fixtures
32
+ '''tests?/.*''',
33
+ '''fixtures?/.*''',
34
+ # Ejemplos / demos — contienen credenciales falsas intencionales
35
+ # usadas como entrada de los subgraphs de code-review y security scan.
36
+ '''examples?/.*''',
37
+ # Documentacion
38
+ '''docs?/.*''',
39
+ '''README.*''',
40
+ '''CHANGELOG.*''',
41
+ # Lock files (no contienen secrets reales)
42
+ '''uv\.lock$''',
43
+ '''package-lock\.json$''',
44
+ ]
45
+
46
+ # ----------------------------------------------------------
47
+ # Reglas adicionales especificas de CuidaSalud
48
+ # ----------------------------------------------------------
49
+
50
+ # Detecta posibles tokens de Mercantil Seguros
51
+ [[rules]]
52
+ description = "Mercantil Seguros API Token"
53
+ id = "mercantil-token"
54
+ regex = '''(?i)mercantil.{0,20}(token|key|secret).{0,5}[=:].{0,5}["']?[A-Za-z0-9+/]{20,}'''
55
+ tags = ["api-key", "mercantil"]
56
+
57
+ # Detecta posibles credenciales de AWS hardcodeadas
58
+ [[rules]]
59
+ description = "AWS Access Key hardcoded"
60
+ id = "aws-access-key-cuida"
61
+ regex = '''(?i)aws.{0,20}(access.?key|secret).{0,5}[=:].{0,5}["']?[A-Za-z0-9/+]{20,}'''
62
+ tags = ["aws", "credentials"]
63
+ [rules.allowlist]
64
+ regexes = [
65
+ # Permite referencias a variables de entorno
66
+ '''\$\{?[A-Z_]+\}?''',
67
+ '''os\.environ''',
68
+ '''os\.getenv''',
69
+ ]
@@ -0,0 +1,316 @@
1
+ # .pre-commit-config.yaml
2
+ # CuidaSalud — cuida-integrations (FastAPI + uv)
3
+ # ============================================================
4
+ # Gate local: lint, tipos, complejidad, SAST, secrets, deps
5
+ # Tests y Trivy quedan en CI (demasiado lentos para pre-commit)
6
+ #
7
+ # Instalacion:
8
+ # uv add --dev pre-commit
9
+ # uv run pre-commit install
10
+ # uv run pre-commit install --hook-type commit-msg
11
+ # uv run pre-commit run --all-files # primera ejecucion completa
12
+ # ============================================================
13
+
14
+ default_language_version:
15
+ python: python3.13
16
+
17
+ # e2e runs on `git push` (pre-push), mutmut only on demand (manual). Install
18
+ # the extra hook type once: uv run pre-commit install --install-hooks
19
+ default_install_hook_types: [pre-commit, pre-push, commit-msg]
20
+
21
+ # Excluye globalmente: venv, migraciones, tests de hooks pesados,
22
+ # plantillas Helm (Jinja, no YAML puro), datos y artefactos runtime.
23
+ exclude: |
24
+ (?x)^(
25
+ \.venv/.*|
26
+ migrations/.*|
27
+ \.git/.*|
28
+ helm/.*|
29
+ data/.*|
30
+ dist/.*|
31
+ docs/.*|
32
+ chat_history/.*|
33
+ assets/.*|
34
+ node_modules/.*
35
+ )$
36
+
37
+
38
+ repos:
39
+
40
+ # ----------------------------------------------------------
41
+ # 1. SECRETS — Gitleaks
42
+ # Detecta API keys, tokens, passwords, JWTs hardcodeados
43
+ # ----------------------------------------------------------
44
+ - repo: https://github.com/gitleaks/gitleaks
45
+ rev: v8.21.2
46
+ hooks:
47
+ - id: gitleaks
48
+ name: "secrets: Gitleaks"
49
+
50
+ # ----------------------------------------------------------
51
+ # 2. CALIDAD GENERAL
52
+ # Hooks estandar: whitespace, EOF, YAML, TOML, JSON, merge
53
+ # ----------------------------------------------------------
54
+ - repo: https://github.com/pre-commit/pre-commit-hooks
55
+ rev: v5.0.0
56
+ hooks:
57
+ - id: trailing-whitespace
58
+ name: "fmt: trailing whitespace"
59
+ - id: end-of-file-fixer
60
+ name: "fmt: end of file"
61
+ - id: check-yaml
62
+ name: "lint: YAML valido"
63
+ args: [--unsafe] # permite tags custom en docker-compose
64
+ - id: check-toml
65
+ name: "lint: TOML valido"
66
+ - id: check-json
67
+ name: "lint: JSON valido"
68
+ - id: check-merge-conflict
69
+ name: "git: sin conflict markers"
70
+ - id: check-added-large-files
71
+ name: "git: archivos grandes (max 500KB)"
72
+ args: [--maxkb=500]
73
+ - id: detect-private-key
74
+ name: "secrets: private keys"
75
+ # file_manager.py docstring lists the PEM header literally as a pattern
76
+ # the agent must refuse to write -- excluded as false positive.
77
+ # Exclude both old path (monolith) and new path (extracted package).
78
+ exclude: ^(prismal/agents/file_manager\.py|packages/prismal/prismal/agents/file_manager\.py)$
79
+ - id: debug-statements
80
+ name: "python: sin breakpoint() / pdb / set_trace()"
81
+ - id: check-ast
82
+ name: "python: AST valido (sintaxis)"
83
+
84
+ # ----------------------------------------------------------
85
+ # 3. DOCKERFILE — Hadolint
86
+ # Malas practicas, instrucciones inseguras, :latest tags
87
+ # ----------------------------------------------------------
88
+ - repo: https://github.com/hadolint/hadolint
89
+ rev: v2.13.1-beta
90
+ hooks:
91
+ - id: hadolint-docker
92
+ name: "docker: Hadolint"
93
+ args:
94
+ - --failure-threshold=warning
95
+ - --ignore=DL3008 # apt-get sin pin version (ok en CI images)
96
+ - --ignore=DL3013 # pip install sin pin version (gestionado por uv.lock en este repo)
97
+ - --ignore=SC2015 # "A && B || C" idiom intencional en Dockerfile
98
+
99
+ # ----------------------------------------------------------
100
+ # 4. LINTING + COMPLEJIDAD CICLOMATICA — Ruff
101
+ # C901: max-complexity = 10 (configurado en pyproject.toml)
102
+ # Tambien aplica formato (reemplaza black + isort)
103
+ # ----------------------------------------------------------
104
+ - repo: https://github.com/astral-sh/ruff-pre-commit
105
+ # Mantener alineado con la version de ruff en uv.lock (la que usa el job
106
+ # `lint` de .github/workflows/ci.yml via `uv run ruff`). Si actualizas el
107
+ # lock, actualiza este rev para evitar drift entre pre-commit y CI.
108
+ rev: v0.15.11
109
+ hooks:
110
+ - id: ruff
111
+ name: "lint: Ruff (lint + C901)"
112
+ args: [--fix, --exit-non-zero-on-fix]
113
+ - id: ruff-format
114
+ name: "fmt: Ruff format"
115
+
116
+ # ----------------------------------------------------------
117
+ # 5. TYPE CHECKING — ty (Astral)
118
+ # Tipos, flujo de datos, None no manejado, retornos incorrectos
119
+ # Solo corre si hay cambios en app/
120
+ # ----------------------------------------------------------
121
+ - repo: local
122
+ hooks:
123
+ - id: ty-check
124
+ name: "types: ty (informational)"
125
+ language: system
126
+ # ty (Astral) aun en alpha v0.0.x — los errores actuales son informativos
127
+ # y no bloquean el commit. El type-check autoritativo es `mypy --strict`
128
+ # (ver CLAUDE.md > "Before Every Commit"). Migrar a `ty` cuando estabilice.
129
+ # Se invoca por path al venv para no depender de `uv` ni del PATH del IDE.
130
+ entry: .venv/bin/ty
131
+ args: [check, --exit-zero, --output-format=concise, prismal/]
132
+ pass_filenames: false
133
+ types: [python]
134
+ files: ^prismal/
135
+
136
+ # ----------------------------------------------------------
137
+ # 6. COMPLEJIDAD COGNITIVA — flake8 + CCR001
138
+ # Complementa Ruff C901 con la metrica cognitiva de SonarSource
139
+ # Umbral: 12 (mas estricto que ciclomatica por su naturaleza)
140
+ # ----------------------------------------------------------
141
+ - repo: https://github.com/PyCQA/flake8
142
+ rev: 7.3.0
143
+ hooks:
144
+ - id: flake8
145
+ name: "complexity: cognitive CCR001 (baseline=100)"
146
+ additional_dependencies:
147
+ - flake8-cognitive-complexity==0.1.0
148
+ args:
149
+ - --select=CCR001
150
+ # Umbral alineado con el peor caso actual (_repl_async: 98).
151
+ # TODO: bajar progresivamente a 12 conforme se refactoren
152
+ # supervisor_node, _repl_async, react_loop, skill_manager_node.
153
+ - --max-cognitive-complexity=100
154
+ files: ^prismal/
155
+ exclude: ^tests/
156
+
157
+ # ----------------------------------------------------------
158
+ # 7. COMPLEJIDAD — Radon (reporte, no bloquea)
159
+ # Muestra funciones con CC >= C (10+) como informacion
160
+ # verbose: true para ver output aunque no falle
161
+ # ----------------------------------------------------------
162
+ - repo: local
163
+ hooks:
164
+ - id: radon-cc
165
+ name: "complexity: Radon CC report (warning)"
166
+ language: system
167
+ # Path al venv en vez de `uv run ...` para no depender de `uv` en el PATH del IDE.
168
+ entry: .venv/bin/radon
169
+ args: [cc, prismal/, -s, -n, C]
170
+ pass_filenames: false
171
+ files: ^prismal/
172
+ verbose: true
173
+
174
+ # ----------------------------------------------------------
175
+ # 8. COMPLEJIDAD — Lizard (bloquea)
176
+ # CCN <= 10 y cognitive <= 12 por funcion
177
+ # Tambien valida parametros (<= 5) y longitud (<= 60 lineas)
178
+ # ----------------------------------------------------------
179
+ - repo: local
180
+ hooks:
181
+ - id: lizard
182
+ name: "complexity: Lizard CCN+args+length (baseline)"
183
+ language: system
184
+ # Umbrales alineados con codebase actual. Meta: CCN=10 / args=5 / length=200.
185
+ # TODO: bajar progresivamente al refactorizar _repl_async, supervisor_node,
186
+ # react_loop, skill_manager_node, cua_node, codeact _validate_imports.
187
+ # Path al venv en vez de `uv run ...` para no depender de `uv` en el PATH del IDE.
188
+ entry: .venv/bin/lizard
189
+ args: [prismal/, --CCN, "40", --arguments, "15", --length, "350", -w]
190
+ pass_filenames: false
191
+ files: ^prismal/
192
+ exclude: ^tests/
193
+
194
+ # ----------------------------------------------------------
195
+ # 9. SAST — Bandit
196
+ # Vulnerabilidades Python: eval, subprocess, shell=True,
197
+ # pickle inseguro, hardcoded passwords, assert en produccion
198
+ # ----------------------------------------------------------
199
+ - repo: https://github.com/PyCQA/bandit
200
+ rev: 1.9.4
201
+ hooks:
202
+ - id: bandit
203
+ name: "sast: Bandit (medium+)"
204
+ additional_dependencies: ["bandit[toml]"]
205
+ args:
206
+ - -r
207
+ - prismal/
208
+ - -c
209
+ - pyproject.toml
210
+ - --severity-level=medium
211
+ - -q
212
+ pass_filenames: false
213
+ files: ^prismal/
214
+ exclude: ^tests/
215
+
216
+ # ----------------------------------------------------------
217
+ # 10. SAST — Semgrep
218
+ # Deshabilitado en pre-commit: opentelemetry-instrumentation (dep. de semgrep)
219
+ # usa pkg_resources que no está disponible en Python 3.13.
220
+ # Semgrep se ejecuta en CI (Bitbucket Pipelines) con todas las reglas:
221
+ # p/python, p/secrets, p/owasp-top-ten, p/fastapi
222
+ # ----------------------------------------------------------
223
+ # - repo: https://github.com/semgrep/semgrep
224
+ # rev: v1.116.0
225
+ # hooks:
226
+ # - id: semgrep
227
+ # name: "sast: Semgrep (python + secrets)"
228
+ # args: [--config=p/python, --config=p/secrets, --error, --quiet, --exclude=tests]
229
+ # pass_filenames: false
230
+
231
+ # ----------------------------------------------------------
232
+ # 11. SEGURIDAD DEPENDENCIAS — pip-audit
233
+ # Solo corre si cambia pyproject.toml o uv.lock
234
+ # CVEs en paquetes del entorno gestionado por uv
235
+ # ----------------------------------------------------------
236
+ - repo: local
237
+ hooks:
238
+ - id: pip-audit
239
+ name: "sca: pip-audit (CVEs en deps)"
240
+ language: system
241
+ # Triage activo de CVEs en `prismal doctor security-check` (Phase 30).
242
+ # Solo CVEs SIN fix upstream aplicable, espejo exacto de `.trivyignore`
243
+ # (ver justificacion + trigger por entrada alli) y de ci.yml
244
+ # (PIP_AUDIT_IGNORES). Remediacion 2026-06:
245
+ # specs/dependency-security-remediation/.
246
+ # Path al venv en vez de `uv run ...` para no depender de `uv` en el PATH del IDE.
247
+ entry: .venv/bin/pip-audit
248
+ args:
249
+ # ecdsa (won't-fix, Minerva) — GHSA + alias CVE
250
+ - --ignore-vuln=GHSA-wj6h-64fc-37mp
251
+ - --ignore-vuln=CVE-2024-23342
252
+ # transformers 4.57.6 (solo rama lock py>=3.14) — mitigado torch>=2.6
253
+ - --ignore-vuln=CVE-2026-1839
254
+ # pip 26.0.1: CVE-2026-3219 sin fix publicado aun
255
+ - --ignore-vuln=CVE-2026-3219
256
+ # chromadb 1.5.8: CVE-2026-45829 sin first_patched_version
257
+ - --ignore-vuln=CVE-2026-45829
258
+ - --skip-editable
259
+ pass_filenames: false
260
+ files: ^(pyproject\.toml|uv\.lock)$
261
+
262
+ # ----------------------------------------------------------
263
+ # 12. CONVENTIONAL COMMITS
264
+ # Formato: feat:, fix:, chore:, docs:, refactor:, test:, ci:
265
+ # Requiere: uv run pre-commit install --hook-type commit-msg
266
+ # ----------------------------------------------------------
267
+ # - repo: https://github.com/compilerla/conventional-pre-commit
268
+ # rev: v3.4.0
269
+ # hooks:
270
+ # - id: conventional-pre-commit
271
+ # name: "git: conventional commit message"
272
+ # stages: [commit-msg]
273
+ # args:
274
+ # - feat
275
+ # - fix
276
+ # - chore
277
+ # - docs
278
+ # - style
279
+ # - refactor
280
+ # - test
281
+ # - ci
282
+ # - perf
283
+ # - revert
284
+
285
+ # ----------------------------------------------------------
286
+ # 13. E2E TESTS — runs on `git push` (pre-push stage)
287
+ # Deterministic end-to-end run of the compiled graph with a mocked LLM.
288
+ # Kept off the per-commit path (tests live in CI) but gates pushes.
289
+ # ----------------------------------------------------------
290
+ - repo: local
291
+ hooks:
292
+ - id: pytest-e2e
293
+ name: "tests: e2e (compiled graph, mocked LLM)"
294
+ language: system
295
+ entry: .venv/bin/pytest
296
+ args: [tests/e2e, -m, e2e, -q]
297
+ pass_filenames: false
298
+ stages: [pre-push]
299
+ types: [python]
300
+
301
+ # ----------------------------------------------------------
302
+ # 14. MUTATION TESTING — mutmut, scoped to prismal/security/
303
+ # Manual stage only (slow). Run on demand:
304
+ # uv run pre-commit run mutmut --hook-stage manual
305
+ # (or directly: uv run mutmut run && uv run mutmut results)
306
+ # ----------------------------------------------------------
307
+ - repo: local
308
+ hooks:
309
+ - id: mutmut
310
+ name: "mutation: mutmut (prismal/security)"
311
+ language: system
312
+ entry: .venv/bin/mutmut
313
+ args: [run]
314
+ pass_filenames: false
315
+ stages: [manual]
316
+ types: [python]
@@ -0,0 +1 @@
1
+ 3.13
@@ -0,0 +1,61 @@
1
+ # .trivyignore — Prismal
2
+ # ============================================================
3
+ # CVEs/GHSAs aceptadas/mitigadas en dependencias SIN fix upstream
4
+ # aplicable. Cada entrada exige: razon, surface, referencia al spec
5
+ # y TRIGGER de re-evaluacion.
6
+ #
7
+ # Mismos IDs que `pip-audit --ignore-vuln` en `.github/workflows/ci.yml`
8
+ # y en `.pre-commit-config.yaml` -> hook `pip-audit`. Mantener los tres
9
+ # espejados (regla de oro).
10
+ #
11
+ # Triage activo: `prismal doctor security-check` (Phase 30 maintenance).
12
+ # Remediacion 2026-06: specs/dependency-security-remediation/ (18 alertas
13
+ # Dependabot; las resueltas por el lock se retiraron de esta lista).
14
+ # ============================================================
15
+
16
+ # --- ecdsa 0.19.2 -> CVE-2024-23342 (Minerva timing attack) --
17
+ # Transitiva (python-jose -> ecdsa). El mantenedor de python-ecdsa
18
+ # declaro publicamente que NO habra fix (GHSA-wj6h-64fc-37mp): la
19
+ # mitigacion completa requiere criptografia en C. Recomienda migrar
20
+ # a `cryptography`. Ya usamos python-jose[cryptography] pero python-jose
21
+ # arrastra `ecdsa` como dep regular. Surface: prismal no realiza firmas
22
+ # ECDSA P-256 sensibles en caliente -> riesgo residual aceptado.
23
+ # Spec: specs/dependency-security-remediation/SPEC.md (SEC-A05, alerta #1).
24
+ # TRIGGER de re-evaluacion: migracion python-jose -> PyJWT (deuda
25
+ # registrada en el spec) o fix upstream en python-ecdsa -> quitar ignore.
26
+ CVE-2024-23342
27
+
28
+ # --- transformers 4.57.6 (marker py>=3.14) -> CVE-2026-1839 --
29
+ # RCE en Trainer._load_rng_state() via torch.load() sin weights_only
30
+ # (GHSA-69w3-r845-3855, fix transformers 5.0.0rc3). MITIGADO:
31
+ # (1) pyproject fija torch>=2.6 (lock: 2.11.0) -> safe_globals() de
32
+ # PyTorch >=2.6 neutraliza el vector de deserializacion;
33
+ # (2) prismal no usa la clase Trainer (solo inferencia/embeddings via
34
+ # sentence-transformers);
35
+ # (3) en py<3.14 el lock ya resuelve transformers 5.5.4 (>=5.0.0rc3);
36
+ # solo la rama del lock para py>=3.14 conserva 4.57.6.
37
+ # Spec: specs/dependency-security-remediation/SPEC.md (SEC-A10, alerta #2).
38
+ # TRIGGER de re-evaluacion: release estable de transformers 5.x soportado
39
+ # por sentence-transformers en py>=3.14 -> subir y quitar este ignore.
40
+ CVE-2026-1839
41
+
42
+ # --- pip 26.0.1 -> CVE-2026-3219 (sin fix upstream aun) ------
43
+ # pip 26.0.1 es el ultimo release publicado y CVE-2026-3219 no tiene
44
+ # first_patched_version. Dependencia del toolchain (pip-audit), no del
45
+ # runtime de prismal.
46
+ # TRIGGER de re-evaluacion: pip publica release con fix -> quitar ignore.
47
+ CVE-2026-3219
48
+
49
+ # --- chromadb 1.5.8 -> CVE-2026-45829 (sin fix upstream) -----
50
+ # CRITICAL — pre-authentication code injection (GHSA-f4j7-r4q5-qw2c). El rango
51
+ # vulnerable es >=1.0.0,<=1.5.9 con first_patched=None: NO existe version
52
+ # parcheada (1.5.9 sigue afectada) y el stack langchain-chroma no admite
53
+ # downgrade a <1.0.0. ChromaDB se usa aqui como vector store local/embebido
54
+ # (SQLite + Chroma), no como servidor HTTP expuesto, lo que limita la
55
+ # explotabilidad pre-auth (verificado: solo `Chroma(persist_directory=...)`
56
+ # en rag/vector_store.py, sin HttpClient ni `chroma run`). Mismo ignore en
57
+ # pip-audit (.pre-commit-config.yaml + ci.yml).
58
+ # Spec: specs/dependency-security-remediation/SPEC.md (SEC-A02, alerta #15).
59
+ # TRIGGER de re-evaluacion: chromadb publica first_patched_version ->
60
+ # quitar ignore y subir. Triage: `prismal doctor security-check`.
61
+ CVE-2026-45829