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/models.py ADDED
@@ -0,0 +1,356 @@
1
+ # Copyright (c) Microsoft Corporation.
2
+ # Licensed under the MIT License.
3
+ """
4
+ Data models for Context-as-a-Service.
5
+ """
6
+
7
+ from enum import Enum
8
+ from typing import Dict, List, Optional, Any
9
+ from pydantic import BaseModel, Field
10
+
11
+
12
+ class ContentTier(str, Enum):
13
+ """Content importance tiers for structure-aware indexing."""
14
+ TIER_1_HIGH = "tier_1_high" # High Value: Titles, Headers, Class Definitions, API Contracts
15
+ TIER_2_MEDIUM = "tier_2_medium" # Medium Value: Body text, Function logic
16
+ TIER_3_LOW = "tier_3_low" # Low Value: Footnotes, Comments, Disclaimers
17
+
18
+
19
+ class ContextLayer(str, Enum):
20
+ """Context tiers defined by intimacy and access policy."""
21
+ HOT = "hot" # L1: The Situation - current conversation, active data (overrides everything)
22
+ WARM = "warm" # L2: The Persona - user profile, preferences (always-on filter)
23
+ COLD = "cold" # L3: The Archive - historical data (on-demand only)
24
+
25
+
26
+ class DocumentType(str, Enum):
27
+ """Detected document types."""
28
+ LEGAL_CONTRACT = "legal_contract"
29
+ TECHNICAL_DOCUMENTATION = "technical_documentation"
30
+ SOURCE_CODE = "source_code"
31
+ RESEARCH_PAPER = "research_paper"
32
+ ARTICLE = "article"
33
+ TUTORIAL = "tutorial"
34
+ API_DOCUMENTATION = "api_documentation"
35
+ UNKNOWN = "unknown"
36
+
37
+
38
+ class ContentFormat(str, Enum):
39
+ """Supported content formats."""
40
+ PDF = "pdf"
41
+ HTML = "html"
42
+ CODE = "code"
43
+ MARKDOWN = "markdown"
44
+ TEXT = "text"
45
+
46
+
47
+ class SourceType(str, Enum):
48
+ """Source types."""
49
+ OFFICIAL_DOCS = "official_docs" # Official documentation, specs, formal docs
50
+ PRACTICAL_LOGS = "practical_logs" # Server logs, error logs, system logs
51
+ TEAM_CHAT = "team_chat" # Slack, Teams, chat conversations
52
+ CODE_COMMENTS = "code_comments" # Inline code comments and TODOs
53
+ TICKET_SYSTEM = "ticket_system" # Jira, GitHub issues, bug reports
54
+ RUNBOOK = "runbook" # Operational runbooks, troubleshooting guides
55
+ WIKI = "wiki" # Internal wiki, knowledge base
56
+ MEETING_NOTES = "meeting_notes" # Meeting notes, decisions
57
+ UNKNOWN = "unknown" # Unknown or unspecified source
58
+
59
+
60
+ class SourceCitation(BaseModel):
61
+ """Citation for source tracking."""
62
+ source_type: SourceType
63
+ source_name: str # e.g., "API Documentation v2.1", "Slack #engineering 2024-01-03"
64
+ source_url: Optional[str] = None # Link to original source if available
65
+ timestamp: Optional[str] = None # When the information was created/updated
66
+ excerpt: Optional[str] = None # Brief excerpt from source
67
+ confidence: float = Field(default=1.0, ge=0.0, le=1.0) # Confidence in the information (0-1)
68
+
69
+
70
+ class Section(BaseModel):
71
+ """Represents a section of a document."""
72
+ title: str
73
+ content: str
74
+ weight: float = 1.0
75
+ tier: Optional['ContentTier'] = None
76
+ importance_score: float = 0.0
77
+ start_pos: int = 0
78
+ end_pos: int = 0
79
+ parent_section: Optional[str] = None # Parent section title for hierarchical context
80
+ chapter: Optional[str] = None # Chapter or major section name
81
+ source_citation: Optional[SourceCitation] = None # Citation for source tracking
82
+
83
+
84
+ class Document(BaseModel):
85
+ """Represents a processed document."""
86
+ id: str
87
+ title: str
88
+ content: str
89
+ format: ContentFormat
90
+ detected_type: DocumentType
91
+ sections: List[Section] = []
92
+ metadata: Dict[str, Any] = {}
93
+ weights: Dict[str, float] = {}
94
+ ingestion_timestamp: Optional[str] = None
95
+ source_citation: Optional[SourceCitation] = None # Document-level citation
96
+
97
+
98
+ class ContextRequest(BaseModel):
99
+ """Request for context extraction."""
100
+ document_id: Optional[str] = None
101
+ query: str
102
+ max_tokens: int = Field(default=2000, gt=0, le=10000)
103
+ include_metadata: bool = True
104
+ enable_time_decay: bool = Field(
105
+ default=True,
106
+ description="Apply time-based decay to prioritize recent content (default: True)"
107
+ )
108
+ decay_rate: float = Field(
109
+ default=1.0,
110
+ ge=0.01,
111
+ le=10.0,
112
+ description="Rate of time decay. Higher = faster decay (default: 1.0)"
113
+ )
114
+ enable_citations: bool = Field(
115
+ default=True,
116
+ description="Include source citations for transparency (default: True)"
117
+ )
118
+ detect_conflicts: bool = Field(
119
+ default=True,
120
+ description="Detect conflicts between official and practical sources (default: True)"
121
+ )
122
+
123
+
124
+ class ContextResponse(BaseModel):
125
+ """Response containing extracted context."""
126
+ document_id: str
127
+ document_type: DocumentType
128
+ context: str
129
+ sections_used: List[str] = []
130
+ total_tokens: int
131
+ weights_applied: Dict[str, float] = {}
132
+ metadata: Dict[str, Any] = {}
133
+ source_citations: List[SourceCitation] = Field(
134
+ default=[],
135
+ description="Citations for all sources used in the context"
136
+ )
137
+ source_conflicts: List[Dict[str, Any]] = Field(
138
+ default=[],
139
+ description="Conflicts between official and practical sources"
140
+ )
141
+
142
+
143
+ class ContextTriadItem(BaseModel):
144
+ """Represents an item in a context layer."""
145
+ id: str
146
+ layer: ContextLayer
147
+ content: str
148
+ metadata: Dict[str, Any] = {}
149
+ timestamp: Optional[str] = None
150
+ priority: float = 1.0
151
+
152
+
153
+ class ContextTriadState(BaseModel):
154
+ """Represents the complete tiered context state."""
155
+ hot_context: List[ContextTriadItem] = [] # Current situation (conversation, errors)
156
+ warm_context: List[ContextTriadItem] = [] # User persona (profile, preferences)
157
+ cold_context: List[ContextTriadItem] = [] # Historical archive (old tickets, PRs)
158
+
159
+
160
+ class ContextTriadRequest(BaseModel):
161
+ """Request for tiered context retrieval."""
162
+ include_hot: bool = Field(default=True, description="Include hot context (current situation)")
163
+ include_warm: bool = Field(default=True, description="Include warm context (user persona)")
164
+ include_cold: bool = Field(default=False, description="Include cold context (historical archive) - on-demand only")
165
+ max_tokens_per_layer: Dict[str, int] = Field(
166
+ default={"hot": 1000, "warm": 500, "cold": 1000},
167
+ description="Token limits per layer"
168
+ )
169
+ query: Optional[str] = Field(default=None, description="Optional query for cold context retrieval")
170
+
171
+
172
+ class AddContextRequest(BaseModel):
173
+ """Request for adding context to a layer."""
174
+ content: str = Field(description="The context content to add")
175
+ metadata: Optional[Dict[str, Any]] = Field(default=None, description="Optional metadata")
176
+ priority: float = Field(default=1.0, ge=0.0, le=10.0, description="Priority level (0-10)")
177
+
178
+
179
+ class ContextTriadResponse(BaseModel):
180
+ """Response containing tiered context data."""
181
+ hot_context: str = ""
182
+ warm_context: str = ""
183
+ cold_context: str = ""
184
+ total_tokens: int
185
+ layers_included: List[str]
186
+ metadata: Dict[str, Any] = {}
187
+
188
+
189
+ class SourceConflict(BaseModel):
190
+ """Represents a conflict between official and practical sources."""
191
+ topic: str # What the conflict is about
192
+ official_answer: str # What official docs say
193
+ official_source: SourceCitation # Citation for official answer
194
+ practical_answer: str # What practical sources say (logs, chat, etc.)
195
+ practical_source: SourceCitation # Citation for practical answer
196
+ recommendation: str # Which to trust and why
197
+ conflict_severity: str = Field(
198
+ default="medium",
199
+ description="Severity: low, medium, high"
200
+ )
201
+
202
+
203
+ class ModelTier(str, Enum):
204
+ """Model tiers for heuristic routing decisions."""
205
+ CANNED = "canned" # Canned response, zero cost
206
+ FAST = "fast" # Fast model (e.g., GPT-4o-mini)
207
+ SMART = "smart" # Smart model (e.g., GPT-4o)
208
+
209
+
210
+ class RoutingDecision(BaseModel):
211
+ """Represents a routing decision made by the heuristic router."""
212
+ model_config = {'protected_namespaces': ()} # Avoid pydantic warning for model_tier
213
+
214
+ model_tier: ModelTier
215
+ reason: str # Why this tier was chosen
216
+ confidence: float = Field(ge=0.0, le=1.0) # Confidence in the decision (0-1)
217
+ query_length: int # Length of the query
218
+ matched_keywords: List[str] = [] # Keywords that triggered the decision
219
+ suggested_model: str # Suggested model name (e.g., "gpt-4o-mini", "gpt-4o")
220
+ estimated_cost: str # Estimated cost category (zero, low, medium, high)
221
+
222
+
223
+ class RouteRequest(BaseModel):
224
+ """Request for routing a query to the appropriate model."""
225
+ query: str = Field(description="The user query to route")
226
+
227
+
228
+ class ConversationTurn(BaseModel):
229
+ """Represents a single turn in a conversation (user message + AI response)."""
230
+ id: str
231
+ user_message: str
232
+ ai_response: Optional[str] = None
233
+ timestamp: str
234
+ metadata: Dict[str, Any] = {}
235
+
236
+
237
+ class ConversationState(BaseModel):
238
+ """Represents the conversation history with sliding window."""
239
+ turns: List[ConversationTurn] = []
240
+ max_turns: int = Field(default=10, ge=1, le=100)
241
+ total_turns_ever: int = 0 # Track total turns including deleted ones
242
+
243
+
244
+ class AddTurnRequest(BaseModel):
245
+ """Request to add a conversation turn."""
246
+ user_message: str = Field(description="The user's message")
247
+ ai_response: Optional[str] = Field(default=None, description="The AI's response (optional)")
248
+ metadata: Optional[Dict[str, Any]] = Field(default_factory=dict, description="Optional metadata")
249
+
250
+
251
+ class UpdateTurnRequest(BaseModel):
252
+ """Request to update a turn's AI response."""
253
+ ai_response: str = Field(description="The AI response to add/update")
254
+
255
+
256
+ class ConversationHistoryResponse(BaseModel):
257
+ """Response containing conversation history."""
258
+ turns: List[ConversationTurn]
259
+ total_turns: int
260
+ max_turns: int
261
+ total_turns_ever: int
262
+ oldest_turn_timestamp: Optional[str] = None
263
+ newest_turn_timestamp: Optional[str] = None
264
+
265
+
266
+ # ============================================================================
267
+ # Virtual File System Models
268
+ # ============================================================================
269
+
270
+
271
+ class FileType(str, Enum):
272
+ """Types of file system nodes."""
273
+ FILE = "file"
274
+ DIRECTORY = "directory"
275
+
276
+
277
+ class FileEdit(BaseModel):
278
+ """Represents an edit to a file."""
279
+ agent_id: str = Field(description="ID of the agent that made the edit")
280
+ timestamp: str = Field(description="ISO timestamp of the edit")
281
+ content: str = Field(description="Content after this edit")
282
+ message: Optional[str] = Field(default=None, description="Optional commit-like message")
283
+
284
+
285
+ class FileNode(BaseModel):
286
+ """Represents a file or directory in the virtual file system."""
287
+ path: str = Field(description="Full path of the file/directory")
288
+ file_type: FileType = Field(description="Type of node (file or directory)")
289
+ content: str = Field(default="", description="Content of the file (empty for directories)")
290
+ metadata: Dict[str, Any] = Field(default_factory=dict, description="Additional metadata")
291
+ created_by: str = Field(description="Agent ID that created this file")
292
+ created_at: str = Field(description="ISO timestamp of creation")
293
+ modified_by: str = Field(description="Agent ID that last modified this file")
294
+ modified_at: str = Field(description="ISO timestamp of last modification")
295
+ edit_history: List[FileEdit] = Field(default_factory=list, description="History of edits")
296
+
297
+
298
+ class VFSState(BaseModel):
299
+ """Represents the complete virtual file system state."""
300
+ files: Dict[str, FileNode] = Field(
301
+ default_factory=dict,
302
+ description="Mapping of file paths to FileNode objects"
303
+ )
304
+ root_path: str = Field(default="/", description="Root path of the file system")
305
+
306
+
307
+ class CreateFileRequest(BaseModel):
308
+ """Request to create a file in the VFS."""
309
+ path: str = Field(description="Path of the file to create")
310
+ content: str = Field(default="", description="Initial content of the file")
311
+ agent_id: str = Field(description="ID of the agent creating the file")
312
+ metadata: Optional[Dict[str, Any]] = Field(default_factory=dict, description="Optional metadata")
313
+
314
+
315
+ class UpdateFileRequest(BaseModel):
316
+ """Request to update a file in the VFS."""
317
+ path: str = Field(description="Path of the file to update")
318
+ content: str = Field(description="New content of the file")
319
+ agent_id: str = Field(description="ID of the agent updating the file")
320
+ message: Optional[str] = Field(default=None, description="Optional commit-like message")
321
+
322
+
323
+ class ReadFileRequest(BaseModel):
324
+ """Request to read a file from the VFS."""
325
+ path: str = Field(description="Path of the file to read")
326
+
327
+
328
+ class DeleteFileRequest(BaseModel):
329
+ """Request to delete a file from the VFS."""
330
+ path: str = Field(description="Path of the file to delete")
331
+ agent_id: str = Field(description="ID of the agent deleting the file")
332
+
333
+
334
+ class ListFilesRequest(BaseModel):
335
+ """Request to list files in the VFS."""
336
+ path: str = Field(default="/", description="Path to list files from")
337
+ recursive: bool = Field(default=False, description="Whether to list files recursively")
338
+
339
+
340
+ class FileResponse(BaseModel):
341
+ """Response containing file information."""
342
+ path: str
343
+ file_type: FileType
344
+ content: str
345
+ metadata: Dict[str, Any]
346
+ created_by: str
347
+ created_at: str
348
+ modified_by: str
349
+ modified_at: str
350
+ edit_count: int = Field(description="Number of edits made to this file")
351
+
352
+
353
+ class FileListResponse(BaseModel):
354
+ """Response containing a list of files."""
355
+ files: List[FileResponse]
356
+ total_count: int