agent_os_kernel 3.1.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (337) hide show
  1. agent_control_plane/__init__.py +662 -0
  2. agent_control_plane/a2a_adapter.py +543 -0
  3. agent_control_plane/adapter.py +417 -0
  4. agent_control_plane/agent_hibernation.py +394 -0
  5. agent_control_plane/agent_kernel.py +470 -0
  6. agent_control_plane/compliance.py +720 -0
  7. agent_control_plane/constraint_graphs.py +478 -0
  8. agent_control_plane/control_plane.py +854 -0
  9. agent_control_plane/example_executors.py +195 -0
  10. agent_control_plane/execution_engine.py +231 -0
  11. agent_control_plane/flight_recorder.py +846 -0
  12. agent_control_plane/governance_layer.py +435 -0
  13. agent_control_plane/hf_utils.py +563 -0
  14. agent_control_plane/interfaces/__init__.py +55 -0
  15. agent_control_plane/interfaces/kernel_interface.py +361 -0
  16. agent_control_plane/interfaces/plugin_interface.py +497 -0
  17. agent_control_plane/interfaces/protocol_interfaces.py +387 -0
  18. agent_control_plane/kernel_space.py +1009 -0
  19. agent_control_plane/langchain_adapter.py +424 -0
  20. agent_control_plane/lifecycle.py +3113 -0
  21. agent_control_plane/mcp_adapter.py +653 -0
  22. agent_control_plane/ml_safety.py +563 -0
  23. agent_control_plane/multimodal.py +727 -0
  24. agent_control_plane/mute_agent.py +422 -0
  25. agent_control_plane/observability.py +787 -0
  26. agent_control_plane/orchestrator.py +482 -0
  27. agent_control_plane/plugin_registry.py +750 -0
  28. agent_control_plane/policy_engine.py +954 -0
  29. agent_control_plane/process_isolation.py +777 -0
  30. agent_control_plane/shadow_mode.py +310 -0
  31. agent_control_plane/signals.py +493 -0
  32. agent_control_plane/supervisor_agents.py +430 -0
  33. agent_control_plane/time_travel_debugger.py +557 -0
  34. agent_control_plane/tool_registry.py +452 -0
  35. agent_control_plane/vfs.py +697 -0
  36. agent_kernel/__init__.py +69 -0
  37. agent_kernel/analyzer.py +435 -0
  38. agent_kernel/auditor.py +36 -0
  39. agent_kernel/completeness_auditor.py +237 -0
  40. agent_kernel/detector.py +203 -0
  41. agent_kernel/kernel.py +744 -0
  42. agent_kernel/memory_manager.py +85 -0
  43. agent_kernel/models.py +374 -0
  44. agent_kernel/nudge_mechanism.py +263 -0
  45. agent_kernel/outcome_analyzer.py +338 -0
  46. agent_kernel/patcher.py +582 -0
  47. agent_kernel/semantic_analyzer.py +316 -0
  48. agent_kernel/semantic_purge.py +349 -0
  49. agent_kernel/simulator.py +449 -0
  50. agent_kernel/teacher.py +85 -0
  51. agent_kernel/triage.py +152 -0
  52. agent_os/__init__.py +409 -0
  53. agent_os/_adversarial_impl.py +200 -0
  54. agent_os/_circuit_breaker_impl.py +232 -0
  55. agent_os/_mcp_metrics.py +193 -0
  56. agent_os/adversarial.py +20 -0
  57. agent_os/agents_compat.py +490 -0
  58. agent_os/audit_logger.py +135 -0
  59. agent_os/base_agent.py +651 -0
  60. agent_os/circuit_breaker.py +34 -0
  61. agent_os/cli/__init__.py +659 -0
  62. agent_os/cli/cmd_audit.py +128 -0
  63. agent_os/cli/cmd_init.py +152 -0
  64. agent_os/cli/cmd_policy.py +41 -0
  65. agent_os/cli/cmd_policy_gen.py +180 -0
  66. agent_os/cli/cmd_validate.py +258 -0
  67. agent_os/cli/mcp_scan.py +265 -0
  68. agent_os/cli/output.py +192 -0
  69. agent_os/cli/policy_checker.py +330 -0
  70. agent_os/compat.py +74 -0
  71. agent_os/constraint_graph.py +234 -0
  72. agent_os/content_governance.py +140 -0
  73. agent_os/context_budget.py +305 -0
  74. agent_os/credential_redactor.py +224 -0
  75. agent_os/diff_policy.py +89 -0
  76. agent_os/egress_policy.py +159 -0
  77. agent_os/escalation.py +276 -0
  78. agent_os/event_bus.py +124 -0
  79. agent_os/exceptions.py +180 -0
  80. agent_os/execution_context_policy.py +141 -0
  81. agent_os/github_enterprise.py +96 -0
  82. agent_os/health.py +20 -0
  83. agent_os/integrations/__init__.py +279 -0
  84. agent_os/integrations/a2a_adapter.py +279 -0
  85. agent_os/integrations/agent_lightning/__init__.py +30 -0
  86. agent_os/integrations/anthropic_adapter.py +420 -0
  87. agent_os/integrations/autogen_adapter.py +620 -0
  88. agent_os/integrations/base.py +1137 -0
  89. agent_os/integrations/compat.py +229 -0
  90. agent_os/integrations/config.py +98 -0
  91. agent_os/integrations/conversation_guardian.py +957 -0
  92. agent_os/integrations/crewai_adapter.py +467 -0
  93. agent_os/integrations/drift_detector.py +425 -0
  94. agent_os/integrations/dry_run.py +124 -0
  95. agent_os/integrations/escalation.py +582 -0
  96. agent_os/integrations/gemini_adapter.py +364 -0
  97. agent_os/integrations/google_adk_adapter.py +633 -0
  98. agent_os/integrations/guardrails_adapter.py +394 -0
  99. agent_os/integrations/health.py +197 -0
  100. agent_os/integrations/langchain_adapter.py +654 -0
  101. agent_os/integrations/llamafirewall.py +343 -0
  102. agent_os/integrations/llamaindex_adapter.py +188 -0
  103. agent_os/integrations/logging.py +191 -0
  104. agent_os/integrations/maf_adapter.py +631 -0
  105. agent_os/integrations/mistral_adapter.py +365 -0
  106. agent_os/integrations/openai_adapter.py +816 -0
  107. agent_os/integrations/openai_agents_sdk.py +406 -0
  108. agent_os/integrations/policy_compose.py +171 -0
  109. agent_os/integrations/profiling.py +144 -0
  110. agent_os/integrations/pydantic_ai_adapter.py +420 -0
  111. agent_os/integrations/rate_limiter.py +130 -0
  112. agent_os/integrations/rbac.py +143 -0
  113. agent_os/integrations/registry.py +113 -0
  114. agent_os/integrations/scope_guard.py +303 -0
  115. agent_os/integrations/semantic_kernel_adapter.py +769 -0
  116. agent_os/integrations/smolagents_adapter.py +629 -0
  117. agent_os/integrations/templates.py +178 -0
  118. agent_os/integrations/token_budget.py +134 -0
  119. agent_os/integrations/tool_aliases.py +190 -0
  120. agent_os/integrations/webhooks.py +177 -0
  121. agent_os/lite.py +208 -0
  122. agent_os/mcp_gateway.py +385 -0
  123. agent_os/mcp_message_signer.py +273 -0
  124. agent_os/mcp_protocols.py +161 -0
  125. agent_os/mcp_response_scanner.py +232 -0
  126. agent_os/mcp_security.py +924 -0
  127. agent_os/mcp_session_auth.py +231 -0
  128. agent_os/mcp_sliding_rate_limiter.py +184 -0
  129. agent_os/memory_guard.py +409 -0
  130. agent_os/metrics.py +134 -0
  131. agent_os/mute.py +428 -0
  132. agent_os/mute_agent.py +209 -0
  133. agent_os/policies/__init__.py +77 -0
  134. agent_os/policies/async_evaluator.py +275 -0
  135. agent_os/policies/backends.py +670 -0
  136. agent_os/policies/bridge.py +169 -0
  137. agent_os/policies/budget.py +85 -0
  138. agent_os/policies/cli.py +294 -0
  139. agent_os/policies/conflict_resolution.py +270 -0
  140. agent_os/policies/data_classification.py +252 -0
  141. agent_os/policies/evaluator.py +239 -0
  142. agent_os/policies/policy_schema.json +228 -0
  143. agent_os/policies/rate_limiting.py +145 -0
  144. agent_os/policies/schema.py +115 -0
  145. agent_os/policies/shared.py +331 -0
  146. agent_os/prompt_injection.py +694 -0
  147. agent_os/providers.py +182 -0
  148. agent_os/py.typed +0 -0
  149. agent_os/retry.py +81 -0
  150. agent_os/reversibility.py +251 -0
  151. agent_os/sandbox.py +432 -0
  152. agent_os/sandbox_provider.py +140 -0
  153. agent_os/secure_codegen.py +525 -0
  154. agent_os/security_skills.py +538 -0
  155. agent_os/semantic_policy.py +422 -0
  156. agent_os/server/__init__.py +15 -0
  157. agent_os/server/__main__.py +25 -0
  158. agent_os/server/app.py +277 -0
  159. agent_os/server/models.py +104 -0
  160. agent_os/shift_left_metrics.py +130 -0
  161. agent_os/stateless.py +742 -0
  162. agent_os/supervisor.py +148 -0
  163. agent_os/task_outcome.py +148 -0
  164. agent_os/transparency.py +181 -0
  165. agent_os/trust_root.py +128 -0
  166. agent_os_kernel-3.1.0.dist-info/METADATA +1269 -0
  167. agent_os_kernel-3.1.0.dist-info/RECORD +337 -0
  168. agent_os_kernel-3.1.0.dist-info/WHEEL +4 -0
  169. agent_os_kernel-3.1.0.dist-info/entry_points.txt +2 -0
  170. agent_os_kernel-3.1.0.dist-info/licenses/LICENSE +21 -0
  171. agent_os_observability/__init__.py +27 -0
  172. agent_os_observability/dashboards.py +898 -0
  173. agent_os_observability/metrics.py +398 -0
  174. agent_os_observability/server.py +223 -0
  175. agent_os_observability/tracer.py +232 -0
  176. agent_primitives/__init__.py +24 -0
  177. agent_primitives/failures.py +84 -0
  178. agent_primitives/py.typed +0 -0
  179. amb_core/__init__.py +177 -0
  180. amb_core/adapters/__init__.py +57 -0
  181. amb_core/adapters/aws_sqs_broker.py +376 -0
  182. amb_core/adapters/azure_servicebus_broker.py +340 -0
  183. amb_core/adapters/kafka_broker.py +260 -0
  184. amb_core/adapters/nats_broker.py +285 -0
  185. amb_core/adapters/rabbitmq_broker.py +235 -0
  186. amb_core/adapters/redis_broker.py +262 -0
  187. amb_core/broker.py +145 -0
  188. amb_core/bus.py +481 -0
  189. amb_core/cloudevents.py +509 -0
  190. amb_core/dlq.py +345 -0
  191. amb_core/hf_utils.py +536 -0
  192. amb_core/memory_broker.py +410 -0
  193. amb_core/models.py +141 -0
  194. amb_core/persistence.py +529 -0
  195. amb_core/schema.py +294 -0
  196. amb_core/tracing.py +358 -0
  197. atr/__init__.py +640 -0
  198. atr/access.py +348 -0
  199. atr/composition.py +645 -0
  200. atr/decorator.py +357 -0
  201. atr/executor.py +384 -0
  202. atr/health.py +557 -0
  203. atr/hf_utils.py +449 -0
  204. atr/injection.py +422 -0
  205. atr/metrics.py +440 -0
  206. atr/policies.py +403 -0
  207. atr/py.typed +2 -0
  208. atr/registry.py +452 -0
  209. atr/schema.py +480 -0
  210. atr/tools/safe/__init__.py +75 -0
  211. atr/tools/safe/calculator.py +467 -0
  212. atr/tools/safe/datetime_tool.py +443 -0
  213. atr/tools/safe/file_reader.py +402 -0
  214. atr/tools/safe/http_client.py +316 -0
  215. atr/tools/safe/json_parser.py +374 -0
  216. atr/tools/safe/text_tool.py +537 -0
  217. atr/tools/safe/toolkit.py +175 -0
  218. caas/__init__.py +162 -0
  219. caas/api/__init__.py +7 -0
  220. caas/api/server.py +1328 -0
  221. caas/caching.py +834 -0
  222. caas/cli.py +210 -0
  223. caas/conversation.py +223 -0
  224. caas/decay.py +72 -0
  225. caas/detection/__init__.py +9 -0
  226. caas/detection/detector.py +238 -0
  227. caas/enrichment.py +130 -0
  228. caas/gateway/__init__.py +27 -0
  229. caas/gateway/trust_gateway.py +474 -0
  230. caas/hf_utils.py +479 -0
  231. caas/ingestion/__init__.py +23 -0
  232. caas/ingestion/processors.py +253 -0
  233. caas/ingestion/structure_parser.py +188 -0
  234. caas/models.py +356 -0
  235. caas/pragmatic_truth.py +444 -0
  236. caas/routing/__init__.py +10 -0
  237. caas/routing/heuristic_router.py +58 -0
  238. caas/storage/__init__.py +9 -0
  239. caas/storage/store.py +389 -0
  240. caas/triad.py +213 -0
  241. caas/tuning/__init__.py +9 -0
  242. caas/tuning/tuner.py +329 -0
  243. caas/vfs/__init__.py +14 -0
  244. caas/vfs/filesystem.py +452 -0
  245. cmvk/__init__.py +218 -0
  246. cmvk/audit.py +402 -0
  247. cmvk/benchmarks.py +478 -0
  248. cmvk/constitutional.py +904 -0
  249. cmvk/hf_utils.py +301 -0
  250. cmvk/metrics.py +473 -0
  251. cmvk/profiles.py +300 -0
  252. cmvk/py.typed +0 -0
  253. cmvk/types.py +12 -0
  254. cmvk/verification.py +956 -0
  255. emk/__init__.py +89 -0
  256. emk/causal.py +352 -0
  257. emk/hf_utils.py +421 -0
  258. emk/indexer.py +83 -0
  259. emk/py.typed +0 -0
  260. emk/schema.py +204 -0
  261. emk/sleep_cycle.py +347 -0
  262. emk/store.py +281 -0
  263. iatp/__init__.py +166 -0
  264. iatp/attestation.py +461 -0
  265. iatp/cli.py +317 -0
  266. iatp/hf_utils.py +472 -0
  267. iatp/ipc_pipes.py +580 -0
  268. iatp/main.py +412 -0
  269. iatp/models/__init__.py +447 -0
  270. iatp/policy_engine.py +337 -0
  271. iatp/py.typed +2 -0
  272. iatp/recovery.py +321 -0
  273. iatp/security/__init__.py +270 -0
  274. iatp/sidecar/__init__.py +519 -0
  275. iatp/telemetry/__init__.py +164 -0
  276. iatp/tests/__init__.py +1 -0
  277. iatp/tests/test_attestation.py +370 -0
  278. iatp/tests/test_cli.py +131 -0
  279. iatp/tests/test_ed25519_attestation.py +211 -0
  280. iatp/tests/test_models.py +130 -0
  281. iatp/tests/test_policy_engine.py +347 -0
  282. iatp/tests/test_recovery.py +281 -0
  283. iatp/tests/test_security.py +222 -0
  284. iatp/tests/test_sidecar.py +167 -0
  285. iatp/tests/test_telemetry.py +175 -0
  286. mcp_kernel_server/__init__.py +28 -0
  287. mcp_kernel_server/cli.py +274 -0
  288. mcp_kernel_server/resources.py +217 -0
  289. mcp_kernel_server/server.py +564 -0
  290. mcp_kernel_server/tools.py +1174 -0
  291. mute_agent/__init__.py +68 -0
  292. mute_agent/core/__init__.py +1 -0
  293. mute_agent/core/execution_agent.py +166 -0
  294. mute_agent/core/handshake_protocol.py +201 -0
  295. mute_agent/core/reasoning_agent.py +238 -0
  296. mute_agent/knowledge_graph/__init__.py +1 -0
  297. mute_agent/knowledge_graph/graph_elements.py +65 -0
  298. mute_agent/knowledge_graph/multidimensional_graph.py +170 -0
  299. mute_agent/knowledge_graph/subgraph.py +224 -0
  300. mute_agent/listener/__init__.py +43 -0
  301. mute_agent/listener/adapters/__init__.py +31 -0
  302. mute_agent/listener/adapters/base_adapter.py +189 -0
  303. mute_agent/listener/adapters/caas_adapter.py +344 -0
  304. mute_agent/listener/adapters/control_plane_adapter.py +436 -0
  305. mute_agent/listener/adapters/iatp_adapter.py +332 -0
  306. mute_agent/listener/adapters/scak_adapter.py +251 -0
  307. mute_agent/listener/listener.py +610 -0
  308. mute_agent/listener/state_observer.py +436 -0
  309. mute_agent/listener/threshold_config.py +313 -0
  310. mute_agent/super_system/__init__.py +1 -0
  311. mute_agent/super_system/router.py +204 -0
  312. mute_agent/visualization/__init__.py +10 -0
  313. mute_agent/visualization/graph_debugger.py +502 -0
  314. nexus/README.md +60 -0
  315. nexus/__init__.py +51 -0
  316. nexus/arbiter.py +359 -0
  317. nexus/client.py +466 -0
  318. nexus/dmz.py +444 -0
  319. nexus/escrow.py +430 -0
  320. nexus/exceptions.py +286 -0
  321. nexus/pyproject.toml +36 -0
  322. nexus/registry.py +393 -0
  323. nexus/reputation.py +425 -0
  324. nexus/schemas/__init__.py +51 -0
  325. nexus/schemas/compliance.py +276 -0
  326. nexus/schemas/escrow.py +251 -0
  327. nexus/schemas/manifest.py +225 -0
  328. nexus/schemas/receipt.py +208 -0
  329. nexus/tests/__init__.py +0 -0
  330. nexus/tests/conftest.py +146 -0
  331. nexus/tests/test_arbiter.py +192 -0
  332. nexus/tests/test_dmz.py +194 -0
  333. nexus/tests/test_escrow.py +276 -0
  334. nexus/tests/test_exceptions.py +225 -0
  335. nexus/tests/test_registry.py +232 -0
  336. nexus/tests/test_reputation.py +328 -0
  337. nexus/tests/test_schemas.py +295 -0
caas/tuning/tuner.py ADDED
@@ -0,0 +1,329 @@
1
+ # Copyright (c) Microsoft Corporation.
2
+ # Licensed under the MIT License.
3
+ """
4
+ Auto-tuning module for optimizing context weights.
5
+ """
6
+
7
+ import re
8
+ from typing import Dict, List, Any
9
+ from collections import Counter
10
+
11
+ from caas.models import Document, DocumentType, Section, ContentTier
12
+
13
+
14
+ # Basic tier weight mapping (replaces StructureParser.get_tier_base_weight)
15
+ _TIER_WEIGHTS = {
16
+ ContentTier.TIER_1_HIGH: 2.0,
17
+ ContentTier.TIER_2_MEDIUM: 1.0,
18
+ ContentTier.TIER_3_LOW: 0.5,
19
+ }
20
+
21
+
22
+ class WeightTuner:
23
+ """Automatically tunes weights for document sections."""
24
+
25
+ def __init__(self):
26
+ """Initialize the weight tuner."""
27
+ pass
28
+
29
+ # Base weights for different document types
30
+ TYPE_SPECIFIC_WEIGHTS = {
31
+ DocumentType.LEGAL_CONTRACT: {
32
+ "definitions": 2.0,
33
+ "terms": 1.8,
34
+ "obligations": 1.7,
35
+ "termination": 1.5,
36
+ "liability": 1.6,
37
+ "governing law": 1.4,
38
+ "default": 1.0,
39
+ },
40
+ DocumentType.TECHNICAL_DOCUMENTATION: {
41
+ "api": 1.8,
42
+ "parameters": 1.6,
43
+ "examples": 1.7,
44
+ "configuration": 1.5,
45
+ "installation": 1.4,
46
+ "quickstart": 1.9,
47
+ "default": 1.0,
48
+ },
49
+ DocumentType.SOURCE_CODE: {
50
+ "class": 1.6,
51
+ "function": 1.5,
52
+ "main": 1.8,
53
+ "api": 1.7,
54
+ "default": 1.0,
55
+ },
56
+ DocumentType.RESEARCH_PAPER: {
57
+ "abstract": 2.0,
58
+ "introduction": 1.5,
59
+ "methodology": 1.4,
60
+ "results": 1.7,
61
+ "conclusion": 1.8,
62
+ "default": 1.0,
63
+ },
64
+ DocumentType.TUTORIAL: {
65
+ "getting started": 1.9,
66
+ "step": 1.6,
67
+ "example": 1.7,
68
+ "exercise": 1.4,
69
+ "default": 1.0,
70
+ },
71
+ DocumentType.API_DOCUMENTATION: {
72
+ "endpoint": 1.8,
73
+ "authentication": 1.9,
74
+ "request": 1.6,
75
+ "response": 1.6,
76
+ "example": 1.7,
77
+ "default": 1.0,
78
+ },
79
+ }
80
+
81
+ def tune(self, document: Document) -> Document:
82
+ """
83
+ Auto-tune weights for document sections based on content analysis.
84
+
85
+ Uses structure-aware indexing to assign tiers and calculate weights.
86
+ Tier 1 (High): Titles, Headers, Class Definitions, API Contracts
87
+ Tier 2 (Medium): Body text, Function logic
88
+ Tier 3 (Low): Footnotes, Comments, Disclaimers
89
+
90
+ Args:
91
+ document: The document to tune
92
+
93
+ Returns:
94
+ Document with optimized weights
95
+ """
96
+ # Assign default tier to sections that don't have one
97
+ for section in document.sections:
98
+ if not section.tier:
99
+ section.tier = ContentTier.TIER_2_MEDIUM
100
+
101
+ # Get base weights for document type
102
+ base_weights = self.TYPE_SPECIFIC_WEIGHTS.get(
103
+ document.detected_type,
104
+ {"default": 1.0}
105
+ )
106
+
107
+ # Calculate weights for each section
108
+ for section in document.sections:
109
+ weight = self._calculate_section_weight(
110
+ section,
111
+ document.detected_type,
112
+ base_weights,
113
+ document
114
+ )
115
+ section.weight = weight
116
+ section.importance_score = self._calculate_importance_score(section)
117
+
118
+ # Store overall weights in document
119
+ document.weights = {
120
+ section.title: section.weight
121
+ for section in document.sections
122
+ }
123
+
124
+ return document
125
+
126
+ def _calculate_section_weight(
127
+ self,
128
+ section: Section,
129
+ doc_type: DocumentType,
130
+ base_weights: Dict[str, float],
131
+ document: Document
132
+ ) -> float:
133
+ """Calculate weight for a specific section using tier-based approach."""
134
+ title_lower = section.title.lower()
135
+
136
+ # Start with tier-based base weight
137
+ if section.tier:
138
+ weight = _TIER_WEIGHTS.get(section.tier, 1.0)
139
+ else:
140
+ # Fallback to default if tier not assigned
141
+ weight = base_weights.get("default", 1.0)
142
+
143
+ # Apply type-specific keyword boosts on top of tier weight (additive, not multiplicative)
144
+ keyword_boost = 0.0
145
+ for keyword, keyword_weight in base_weights.items():
146
+ if keyword != "default" and keyword in title_lower:
147
+ keyword_boost = max(keyword_boost, keyword_weight - 1.0)
148
+ break # Only apply one keyword boost
149
+
150
+ # Add keyword boost instead of multiplying (prevents excessive amplification)
151
+ weight = weight + keyword_boost
152
+
153
+ # Adjust based on content analysis
154
+ content_factors = self._analyze_content_factors(section)
155
+
156
+ # Apply content-based adjustments
157
+ if content_factors["has_code_examples"]:
158
+ weight *= 1.2
159
+
160
+ if content_factors["has_definitions"]:
161
+ weight *= 1.3
162
+
163
+ if content_factors["has_important_markers"]:
164
+ weight *= 1.15
165
+
166
+ # Boost weight for longer, more substantial sections (but not for Tier 3)
167
+ if len(section.content) > 500 and section.tier != ContentTier.TIER_3_LOW:
168
+ weight *= 1.1
169
+
170
+ # Position-based adjustment (first and last sections often important)
171
+ section_index = document.sections.index(section)
172
+ total_sections = len(document.sections)
173
+
174
+ if section_index == 0 and section.tier != ContentTier.TIER_3_LOW:
175
+ weight *= 1.15
176
+ elif section_index == total_sections - 1 and section.tier != ContentTier.TIER_3_LOW:
177
+ weight *= 1.1
178
+
179
+ return round(weight, 2)
180
+
181
+ def _calculate_importance_score(self, section: Section) -> float:
182
+ """Calculate an importance score for a section (0-1)."""
183
+ factors = self._analyze_content_factors(section)
184
+
185
+ score = 0.5 # Base score
186
+
187
+ if factors["has_code_examples"]:
188
+ score += 0.15
189
+ if factors["has_definitions"]:
190
+ score += 0.15
191
+ if factors["has_important_markers"]:
192
+ score += 0.1
193
+ if factors["keyword_density"] > 0.02:
194
+ score += 0.1
195
+
196
+ # Length factor
197
+ if len(section.content) > 300:
198
+ score += 0.05
199
+
200
+ return min(1.0, score)
201
+
202
+ def _analyze_content_factors(self, section: Section) -> Dict[str, Any]:
203
+ """Analyze content to identify important factors."""
204
+ content = section.content.lower()
205
+
206
+ # Check for code examples
207
+ has_code = bool(
208
+ re.search(r'```|<code>|def |function |class ', content)
209
+ )
210
+
211
+ # Check for definitions
212
+ has_definitions = bool(
213
+ re.search(r'defined as|definition|means|refers to', content)
214
+ )
215
+
216
+ # Check for importance markers
217
+ has_important = bool(
218
+ re.search(r'\b(important|critical|must|required|essential)\b', content)
219
+ )
220
+
221
+ # Calculate keyword density
222
+ important_words = [
223
+ 'important', 'critical', 'must', 'required', 'key', 'essential'
224
+ ]
225
+ words = content.split()
226
+ keyword_count = sum(1 for w in words if w in important_words)
227
+ keyword_density = keyword_count / len(words) if words else 0
228
+
229
+ return {
230
+ "has_code_examples": has_code,
231
+ "has_definitions": has_definitions,
232
+ "has_important_markers": has_important,
233
+ "keyword_density": keyword_density,
234
+ }
235
+
236
+
237
+ class CorpusAnalyzer:
238
+ """Analyzes corpus of documents to optimize global weights."""
239
+
240
+ def __init__(self):
241
+ self.documents: List[Document] = []
242
+
243
+ def add_document(self, document: Document):
244
+ """Add a document to the corpus."""
245
+ self.documents.append(document)
246
+
247
+ def analyze_corpus(self) -> Dict[str, Any]:
248
+ """
249
+ Analyze the entire corpus to identify patterns.
250
+
251
+ Returns:
252
+ Analysis results including common patterns and optimization suggestions
253
+ """
254
+ if not self.documents:
255
+ return {"status": "empty_corpus"}
256
+
257
+ # Count document types
258
+ type_counts = Counter(doc.detected_type for doc in self.documents)
259
+
260
+ # Analyze section patterns
261
+ section_patterns = self._analyze_section_patterns()
262
+
263
+ # Calculate average weights
264
+ average_weights = self._calculate_average_weights()
265
+
266
+ return {
267
+ "total_documents": len(self.documents),
268
+ "document_types": dict(type_counts),
269
+ "common_sections": section_patterns,
270
+ "average_weights": average_weights,
271
+ "optimization_suggestions": self._generate_suggestions(),
272
+ }
273
+
274
+ def _analyze_section_patterns(self) -> Dict[str, int]:
275
+ """Analyze common section patterns across documents."""
276
+ section_counter = Counter()
277
+
278
+ for doc in self.documents:
279
+ for section in doc.sections:
280
+ # Normalize section title
281
+ normalized = section.title.lower().strip()
282
+ section_counter[normalized] += 1
283
+
284
+ # Return top 10 most common sections
285
+ return dict(section_counter.most_common(10))
286
+
287
+ def _calculate_average_weights(self) -> Dict[str, float]:
288
+ """Calculate average weights across all documents."""
289
+ weight_sums: Dict[str, List[float]] = {}
290
+
291
+ for doc in self.documents:
292
+ for section in doc.sections:
293
+ title = section.title.lower()
294
+ if title not in weight_sums:
295
+ weight_sums[title] = []
296
+ weight_sums[title].append(section.weight)
297
+
298
+ # Calculate averages
299
+ averages = {}
300
+ for title, weights in weight_sums.items():
301
+ if weights:
302
+ averages[title] = round(sum(weights) / len(weights), 2)
303
+
304
+ return averages
305
+
306
+ def _generate_suggestions(self) -> List[str]:
307
+ """Generate optimization suggestions based on corpus analysis."""
308
+ suggestions = []
309
+
310
+ if len(self.documents) < 5:
311
+ suggestions.append(
312
+ "Add more documents to improve weight optimization accuracy"
313
+ )
314
+
315
+ # Check for document type diversity
316
+ type_counts = Counter(doc.detected_type for doc in self.documents)
317
+ if len(type_counts) == 1:
318
+ suggestions.append(
319
+ "Corpus contains only one document type; consider adding variety"
320
+ )
321
+
322
+ # Check for common patterns
323
+ section_patterns = self._analyze_section_patterns()
324
+ if len(section_patterns) > 20:
325
+ suggestions.append(
326
+ "High section diversity detected; consider standardizing section names"
327
+ )
328
+
329
+ return suggestions
caas/vfs/__init__.py ADDED
@@ -0,0 +1,14 @@
1
+ # Copyright (c) Microsoft Corporation.
2
+ # Licensed under the MIT License.
3
+ """
4
+ Virtual File System module for Context-as-a-Service.
5
+
6
+ Provides a lightweight in-memory file system that maintains project state
7
+ shared across multiple SDLC agents, allowing agents to see each other's edits.
8
+ """
9
+
10
+ from caas.vfs.filesystem import VirtualFileSystem
11
+
12
+ __all__ = [
13
+ "VirtualFileSystem",
14
+ ]