bog-agents 0.5.2__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 (118) hide show
  1. bog_agents-0.5.2/PKG-INFO +183 -0
  2. bog_agents-0.5.2/README.md +150 -0
  3. bog_agents-0.5.2/bog_agents/__init__.py +120 -0
  4. bog_agents-0.5.2/bog_agents/_models.py +81 -0
  5. bog_agents-0.5.2/bog_agents/_version.py +3 -0
  6. bog_agents-0.5.2/bog_agents/backends/__init__.py +24 -0
  7. bog_agents-0.5.2/bog_agents/backends/composite.py +741 -0
  8. bog_agents-0.5.2/bog_agents/backends/filesystem.py +726 -0
  9. bog_agents-0.5.2/bog_agents/backends/local_shell.py +359 -0
  10. bog_agents-0.5.2/bog_agents/backends/protocol.py +518 -0
  11. bog_agents-0.5.2/bog_agents/backends/sandbox.py +445 -0
  12. bog_agents-0.5.2/bog_agents/backends/state.py +232 -0
  13. bog_agents-0.5.2/bog_agents/backends/store.py +627 -0
  14. bog_agents-0.5.2/bog_agents/backends/utils.py +560 -0
  15. bog_agents-0.5.2/bog_agents/base_prompt.md +50 -0
  16. bog_agents-0.5.2/bog_agents/feature_config.py +221 -0
  17. bog_agents-0.5.2/bog_agents/graph.py +868 -0
  18. bog_agents-0.5.2/bog_agents/middleware/__init__.py +234 -0
  19. bog_agents-0.5.2/bog_agents/middleware/_utils.py +23 -0
  20. bog_agents-0.5.2/bog_agents/middleware/adaptive_context.py +341 -0
  21. bog_agents-0.5.2/bog_agents/middleware/agent_replay.py +585 -0
  22. bog_agents-0.5.2/bog_agents/middleware/agent_teams.py +215 -0
  23. bog_agents-0.5.2/bog_agents/middleware/air_gapped.py +382 -0
  24. bog_agents-0.5.2/bog_agents/middleware/approval_gates.py +372 -0
  25. bog_agents-0.5.2/bog_agents/middleware/architect.py +198 -0
  26. bog_agents-0.5.2/bog_agents/middleware/audit_trail.py +371 -0
  27. bog_agents-0.5.2/bog_agents/middleware/auto_quality.py +366 -0
  28. bog_agents-0.5.2/bog_agents/middleware/automations.py +205 -0
  29. bog_agents-0.5.2/bog_agents/middleware/browser_agent.py +194 -0
  30. bog_agents-0.5.2/bog_agents/middleware/browser_agent_fa.py +193 -0
  31. bog_agents-0.5.2/bog_agents/middleware/checkpointing.py +287 -0
  32. bog_agents-0.5.2/bog_agents/middleware/citations.py +456 -0
  33. bog_agents-0.5.2/bog_agents/middleware/client_knowledge_base.py +404 -0
  34. bog_agents-0.5.2/bog_agents/middleware/client_reports.py +274 -0
  35. bog_agents-0.5.2/bog_agents/middleware/cloud_sandbox.py +187 -0
  36. bog_agents-0.5.2/bog_agents/middleware/code_intelligence.py +476 -0
  37. bog_agents-0.5.2/bog_agents/middleware/code_review.py +284 -0
  38. bog_agents-0.5.2/bog_agents/middleware/collaborative_sessions.py +265 -0
  39. bog_agents-0.5.2/bog_agents/middleware/competitive_intel.py +300 -0
  40. bog_agents-0.5.2/bog_agents/middleware/computer_use.py +180 -0
  41. bog_agents-0.5.2/bog_agents/middleware/context_packing.py +323 -0
  42. bog_agents-0.5.2/bog_agents/middleware/conversation_branch.py +232 -0
  43. bog_agents-0.5.2/bog_agents/middleware/cost_tracker.py +390 -0
  44. bog_agents-0.5.2/bog_agents/middleware/dashboard.py +362 -0
  45. bog_agents-0.5.2/bog_agents/middleware/deep_research.py +349 -0
  46. bog_agents-0.5.2/bog_agents/middleware/dlp.py +339 -0
  47. bog_agents-0.5.2/bog_agents/middleware/due_diligence.py +269 -0
  48. bog_agents-0.5.2/bog_agents/middleware/earnings_analysis.py +376 -0
  49. bog_agents-0.5.2/bog_agents/middleware/enhanced_skills.py +486 -0
  50. bog_agents-0.5.2/bog_agents/middleware/enterprise.py +376 -0
  51. bog_agents-0.5.2/bog_agents/middleware/fact_check.py +447 -0
  52. bog_agents-0.5.2/bog_agents/middleware/filesystem.py +1386 -0
  53. bog_agents-0.5.2/bog_agents/middleware/financial_data.py +306 -0
  54. bog_agents-0.5.2/bog_agents/middleware/firm_deployment.py +345 -0
  55. bog_agents-0.5.2/bog_agents/middleware/git_tools.py +215 -0
  56. bog_agents-0.5.2/bog_agents/middleware/hallucination_detection.py +425 -0
  57. bog_agents-0.5.2/bog_agents/middleware/hot_reload_skills.py +245 -0
  58. bog_agents-0.5.2/bog_agents/middleware/http_hooks.py +414 -0
  59. bog_agents-0.5.2/bog_agents/middleware/image_input.py +203 -0
  60. bog_agents-0.5.2/bog_agents/middleware/image_pdf_input.py +187 -0
  61. bog_agents-0.5.2/bog_agents/middleware/knowledge_graph.py +436 -0
  62. bog_agents-0.5.2/bog_agents/middleware/lifecycle_hooks.py +363 -0
  63. bog_agents-0.5.2/bog_agents/middleware/market_sentiment.py +275 -0
  64. bog_agents-0.5.2/bog_agents/middleware/meeting_prep.py +430 -0
  65. bog_agents-0.5.2/bog_agents/middleware/memory.py +354 -0
  66. bog_agents-0.5.2/bog_agents/middleware/messaging_integration.py +239 -0
  67. bog_agents-0.5.2/bog_agents/middleware/model_cascade.py +405 -0
  68. bog_agents-0.5.2/bog_agents/middleware/model_portfolio.py +344 -0
  69. bog_agents-0.5.2/bog_agents/middleware/multi_agent_orchestrator.py +224 -0
  70. bog_agents-0.5.2/bog_agents/middleware/multi_edit.py +173 -0
  71. bog_agents-0.5.2/bog_agents/middleware/multi_model.py +232 -0
  72. bog_agents-0.5.2/bog_agents/middleware/nl_query.py +312 -0
  73. bog_agents-0.5.2/bog_agents/middleware/notifications.py +257 -0
  74. bog_agents-0.5.2/bog_agents/middleware/offline_mode.py +436 -0
  75. bog_agents-0.5.2/bog_agents/middleware/opensearch_rag.py +383 -0
  76. bog_agents-0.5.2/bog_agents/middleware/parallel_agents.py +244 -0
  77. bog_agents-0.5.2/bog_agents/middleware/patch_tool_calls.py +44 -0
  78. bog_agents-0.5.2/bog_agents/middleware/pdf_reader.py +174 -0
  79. bog_agents-0.5.2/bog_agents/middleware/peer_comparison.py +319 -0
  80. bog_agents-0.5.2/bog_agents/middleware/plan_mode.py +160 -0
  81. bog_agents-0.5.2/bog_agents/middleware/plugin_system.py +294 -0
  82. bog_agents-0.5.2/bog_agents/middleware/portfolio_analysis.py +391 -0
  83. bog_agents-0.5.2/bog_agents/middleware/pr_management.py +228 -0
  84. bog_agents-0.5.2/bog_agents/middleware/rbac.py +383 -0
  85. bog_agents-0.5.2/bog_agents/middleware/read_many_files.py +133 -0
  86. bog_agents-0.5.2/bog_agents/middleware/reasoning_chain.py +355 -0
  87. bog_agents-0.5.2/bog_agents/middleware/regulatory_alerts.py +307 -0
  88. bog_agents-0.5.2/bog_agents/middleware/regulatory_impact.py +417 -0
  89. bog_agents-0.5.2/bog_agents/middleware/repo_map.py +349 -0
  90. bog_agents-0.5.2/bog_agents/middleware/safe_tools.py +170 -0
  91. bog_agents-0.5.2/bog_agents/middleware/saved_prompts.py +543 -0
  92. bog_agents-0.5.2/bog_agents/middleware/scenario_engine.py +278 -0
  93. bog_agents-0.5.2/bog_agents/middleware/scheduled_reports.py +358 -0
  94. bog_agents-0.5.2/bog_agents/middleware/scheduled_runs.py +574 -0
  95. bog_agents-0.5.2/bog_agents/middleware/security_audit.py +645 -0
  96. bog_agents-0.5.2/bog_agents/middleware/self_improving.py +423 -0
  97. bog_agents-0.5.2/bog_agents/middleware/skills.py +834 -0
  98. bog_agents-0.5.2/bog_agents/middleware/smart_approvals.py +387 -0
  99. bog_agents-0.5.2/bog_agents/middleware/smart_context.py +270 -0
  100. bog_agents-0.5.2/bog_agents/middleware/sso_auth.py +370 -0
  101. bog_agents-0.5.2/bog_agents/middleware/subagents.py +692 -0
  102. bog_agents-0.5.2/bog_agents/middleware/summarization.py +1505 -0
  103. bog_agents-0.5.2/bog_agents/middleware/tax_optimization.py +348 -0
  104. bog_agents-0.5.2/bog_agents/middleware/test_generation.py +220 -0
  105. bog_agents-0.5.2/bog_agents/middleware/version_control.py +250 -0
  106. bog_agents-0.5.2/bog_agents/middleware/voice_io.py +231 -0
  107. bog_agents-0.5.2/bog_agents/middleware/worktree.py +267 -0
  108. bog_agents-0.5.2/bog_agents/py.typed +0 -0
  109. bog_agents-0.5.2/bog_agents/sandbox/__init__.py +25 -0
  110. bog_agents-0.5.2/bog_agents/sandbox/local_sandbox.py +299 -0
  111. bog_agents-0.5.2/bog_agents/serve.py +471 -0
  112. bog_agents-0.5.2/bog_agents.egg-info/PKG-INFO +183 -0
  113. bog_agents-0.5.2/bog_agents.egg-info/SOURCES.txt +116 -0
  114. bog_agents-0.5.2/bog_agents.egg-info/dependency_links.txt +1 -0
  115. bog_agents-0.5.2/bog_agents.egg-info/requires.txt +10 -0
  116. bog_agents-0.5.2/bog_agents.egg-info/top_level.txt +1 -0
  117. bog_agents-0.5.2/pyproject.toml +244 -0
  118. bog_agents-0.5.2/setup.cfg +4 -0
@@ -0,0 +1,183 @@
1
+ Metadata-Version: 2.4
2
+ Name: bog-agents
3
+ Version: 0.5.2
4
+ Summary: Bog Agents - batteries-included agent harness for building AI agents. Supports any major provider (Anthropic, OpenAI, AWS Bedrock, Google, etc.) and local models via Ollama. Built on LangGraph.
5
+ Author-email: bogware <support@bogware.com>
6
+ Maintainer-email: bogware <support@bogware.com>
7
+ License: MIT
8
+ Project-URL: Homepage, https://github.com/bogware/bog-agents
9
+ Project-URL: Repository, https://github.com/bogware/bog-agents
10
+ Project-URL: Issues, https://github.com/bogware/bog-agents/issues
11
+ Keywords: agents,ai,llm,langgraph,langchain,bog-agents,sub-agents,agentic,multi-provider,ollama
12
+ Classifier: Development Status :: 5 - Production/Stable
13
+ Classifier: Intended Audience :: Developers
14
+ Classifier: License :: OSI Approved :: MIT License
15
+ Classifier: Programming Language :: Python :: 3
16
+ Classifier: Programming Language :: Python :: 3.11
17
+ Classifier: Programming Language :: Python :: 3.12
18
+ Classifier: Programming Language :: Python :: 3.13
19
+ Classifier: Programming Language :: Python :: 3.14
20
+ Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
21
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
22
+ Requires-Python: <4.0,>=3.11
23
+ Description-Content-Type: text/markdown
24
+ Requires-Dist: langchain-core<2.0.0,>=1.2.18
25
+ Requires-Dist: langchain<2.0.0,>=1.2.11
26
+ Requires-Dist: langchain-anthropic<2.0.0,>=1.3.4
27
+ Requires-Dist: langchain-google-genai<5.0.0,>=4.2.0
28
+ Requires-Dist: wcmatch
29
+ Provides-Extra: serve
30
+ Requires-Dist: starlette>=0.41.0; extra == "serve"
31
+ Requires-Dist: uvicorn>=0.34.0; extra == "serve"
32
+ Requires-Dist: sse-starlette>=2.0.0; extra == "serve"
33
+
34
+ # 🧠🤖 Bog Agents
35
+
36
+ [![PyPI - Version](https://img.shields.io/pypi/v/bog-agents?label=%20)](https://pypi.org/project/bog-agents/#history)
37
+ [![PyPI - License](https://img.shields.io/pypi/l/bog-agents)](https://opensource.org/licenses/MIT)
38
+ [![PyPI - Downloads](https://img.shields.io/pepy/dt/bog-agents)](https://pypistats.org/packages/bog-agents)
39
+ [![Twitter](https://img.shields.io/twitter/url/https/twitter.com/langchain.svg?style=social&label=Follow%20%40LangChain)](https://x.com/langchain)
40
+
41
+ Looking for the JS/TS version? Check out [Bog Agents.js](https://github.com/langchain-ai/bog-agentsjs).
42
+
43
+ To help you ship LangChain apps to production faster, check out [LangSmith](https://smith.langchain.com).
44
+ LangSmith is a unified developer platform for building, testing, and monitoring LLM applications.
45
+
46
+ ## Quick Install
47
+
48
+ ```bash
49
+ pip install bog-agents
50
+ # or
51
+ uv add bog-agents
52
+ ```
53
+
54
+ ## Getting Started
55
+
56
+ 1. **Set your API key** (the default model uses Anthropic):
57
+
58
+ ```bash
59
+ export ANTHROPIC_API_KEY="sk-ant-..."
60
+ ```
61
+
62
+ Or for OpenAI, Google, etc.:
63
+
64
+ ```bash
65
+ export OPENAI_API_KEY="sk-..."
66
+ export GOOGLE_API_KEY="AI..."
67
+ ```
68
+
69
+ 2. **Create and run an agent**:
70
+
71
+ ```python
72
+ from bog_agents import create_agent
73
+
74
+ # Uses Claude Sonnet by default (needs ANTHROPIC_API_KEY)
75
+ agent = create_agent()
76
+
77
+ # Or specify a different provider
78
+ agent = create_agent(model="openai:gpt-4o")
79
+ agent = create_agent(model="google_genai:gemini-2.0-flash")
80
+
81
+ # Run the agent
82
+ result = agent.invoke(
83
+ {"messages": [{"role": "user", "content": "Hello!"}]},
84
+ config={"configurable": {"thread_id": "my-thread"}},
85
+ )
86
+ ```
87
+
88
+ 3. **Run as an HTTP server** (optional):
89
+
90
+ ```bash
91
+ pip install 'bog-agents[serve]'
92
+ ```
93
+
94
+ ```python
95
+ from bog_agents import create_agent
96
+ from bog_agents.serve import AgentServer
97
+
98
+ agent = create_agent()
99
+ server = AgentServer(agent)
100
+ server.run() # Starts on http://127.0.0.1:8420
101
+ ```
102
+
103
+ ## 🤔 What is this?
104
+
105
+ Using an LLM to call tools in a loop is the simplest form of an agent. This architecture, however, can yield agents that are "shallow" and fail to plan and act over longer, more complex tasks.
106
+
107
+ Applications like "Deep Research", "Manus", and "Claude Code" have gotten around this limitation by implementing a combination of four things: a **planning tool**, **sub agents**, access to a **file system**, and a **detailed prompt**.
108
+
109
+ `bog-agents` is a Python package that implements these in a general purpose way so that you can easily create a Bog Agents for your application. For a full overview and quickstart of Bog Agents, the best resource is our [docs](https://docs.langchain.com/oss/python/bog-agents/overview).
110
+
111
+ **Acknowledgements: This project was primarily inspired by Claude Code, and initially was largely an attempt to see what made Claude Code general purpose, and make it even more so.**
112
+
113
+ ## 🚀 Features
114
+
115
+ ### Core Agent
116
+ - **LangGraph-powered** — composable agent with middleware architecture
117
+ - **Multi-model** — works with Anthropic, OpenAI, Google, DeepSeek, and any LangChain-compatible LLM
118
+ - **Sub-agents** — spawn isolated sub-agents for complex tasks
119
+ - **File system** — read, write, edit, search files with pluggable backends
120
+ - **Planning** — built-in todo list and plan mode for structured task execution
121
+
122
+ ### Middleware (Pluggable)
123
+
124
+ | Middleware | Description |
125
+ |-----------|-------------|
126
+ | `FilesystemMiddleware` | File read/write/edit/search + multi-edit and batch read |
127
+ | `GitToolsMiddleware` | 9 git tools: status, diff, log, commit, add, branch, stash, blame, show |
128
+ | `RepoMapMiddleware` | Structural code map with symbol extraction (Python, JS, TS, Rust, Go, Java) |
129
+ | `CheckpointingMiddleware` | Git-based snapshots before mutations, with undo/diff |
130
+ | `CostTrackerMiddleware` | Token usage, cost estimation, budget enforcement, effort levels |
131
+ | `PlanModeMiddleware` | Read-only mode that blocks mutating tools |
132
+ | `AutoQualityMiddleware` | Auto-lint/test after edits with project detection |
133
+ | `ArchitectMiddleware` | Dual-model architect/reviewer with cross-model consultation |
134
+ | `ParallelAgentsMiddleware` | Concurrent sub-agent task execution |
135
+ | `LifecycleHooksMiddleware` | 15 event types for external tool integration |
136
+ | `ContextPackingMiddleware` | Smart structured context compression |
137
+ | `SummarizationMiddleware` | Auto-summarization when context window fills |
138
+ | `MemoryMiddleware` | Persistent AGENTS.md memory across sessions |
139
+ | `SkillsMiddleware` | Custom skill/instruction loading |
140
+ | `SafeToolsConfig` | Per-tool auto-approval rules |
141
+
142
+ ### Security
143
+ - **OS-level sandbox** — bubblewrap (Linux), seatbelt (macOS), landlock isolation
144
+ - **Human-in-the-loop** — configurable tool approval with interrupt handling
145
+
146
+ ## 📦 Quick Start
147
+
148
+ ```python
149
+ from bog_agents import create_agent
150
+
151
+ agent = create_agent(
152
+ model="anthropic:claude-sonnet-4-6",
153
+ enable_git_tools=True,
154
+ enable_repo_map=True,
155
+ enable_checkpointing=True,
156
+ enable_cost_tracking=True,
157
+ enable_plan_mode=True,
158
+ auto_lint=True,
159
+ working_dir="/path/to/project",
160
+ )
161
+
162
+ # Run the agent
163
+ result = await agent.ainvoke(
164
+ {"messages": [{"role": "user", "content": "Fix the failing tests"}]},
165
+ config={"configurable": {"thread_id": "my-session"}},
166
+ )
167
+ ```
168
+
169
+ ## 📖 Resources
170
+
171
+ - **[Documentation](https://docs.langchain.com/oss/python/bog-agents)** — Full documentation
172
+ - **[API Reference](https://reference.langchain.com/python/bog-agents/)** — Full SDK reference documentation
173
+ - **[Chat LangChain](https://chat.langchain.com)** - Chat interactively with the docs
174
+
175
+ ## 📕 Releases & Versioning
176
+
177
+ See our [Releases](https://docs.langchain.com/oss/python/release-policy) and [Versioning](https://docs.langchain.com/oss/python/versioning) policies.
178
+
179
+ ## 💁 Contributing
180
+
181
+ As an open-source project in a rapidly developing field, we are extremely open to contributions, whether it be in the form of a new feature, improved infrastructure, or better documentation.
182
+
183
+ For detailed information on how to contribute, see the [Contributing Guide](https://docs.langchain.com/oss/python/contributing/overview).
@@ -0,0 +1,150 @@
1
+ # 🧠🤖 Bog Agents
2
+
3
+ [![PyPI - Version](https://img.shields.io/pypi/v/bog-agents?label=%20)](https://pypi.org/project/bog-agents/#history)
4
+ [![PyPI - License](https://img.shields.io/pypi/l/bog-agents)](https://opensource.org/licenses/MIT)
5
+ [![PyPI - Downloads](https://img.shields.io/pepy/dt/bog-agents)](https://pypistats.org/packages/bog-agents)
6
+ [![Twitter](https://img.shields.io/twitter/url/https/twitter.com/langchain.svg?style=social&label=Follow%20%40LangChain)](https://x.com/langchain)
7
+
8
+ Looking for the JS/TS version? Check out [Bog Agents.js](https://github.com/langchain-ai/bog-agentsjs).
9
+
10
+ To help you ship LangChain apps to production faster, check out [LangSmith](https://smith.langchain.com).
11
+ LangSmith is a unified developer platform for building, testing, and monitoring LLM applications.
12
+
13
+ ## Quick Install
14
+
15
+ ```bash
16
+ pip install bog-agents
17
+ # or
18
+ uv add bog-agents
19
+ ```
20
+
21
+ ## Getting Started
22
+
23
+ 1. **Set your API key** (the default model uses Anthropic):
24
+
25
+ ```bash
26
+ export ANTHROPIC_API_KEY="sk-ant-..."
27
+ ```
28
+
29
+ Or for OpenAI, Google, etc.:
30
+
31
+ ```bash
32
+ export OPENAI_API_KEY="sk-..."
33
+ export GOOGLE_API_KEY="AI..."
34
+ ```
35
+
36
+ 2. **Create and run an agent**:
37
+
38
+ ```python
39
+ from bog_agents import create_agent
40
+
41
+ # Uses Claude Sonnet by default (needs ANTHROPIC_API_KEY)
42
+ agent = create_agent()
43
+
44
+ # Or specify a different provider
45
+ agent = create_agent(model="openai:gpt-4o")
46
+ agent = create_agent(model="google_genai:gemini-2.0-flash")
47
+
48
+ # Run the agent
49
+ result = agent.invoke(
50
+ {"messages": [{"role": "user", "content": "Hello!"}]},
51
+ config={"configurable": {"thread_id": "my-thread"}},
52
+ )
53
+ ```
54
+
55
+ 3. **Run as an HTTP server** (optional):
56
+
57
+ ```bash
58
+ pip install 'bog-agents[serve]'
59
+ ```
60
+
61
+ ```python
62
+ from bog_agents import create_agent
63
+ from bog_agents.serve import AgentServer
64
+
65
+ agent = create_agent()
66
+ server = AgentServer(agent)
67
+ server.run() # Starts on http://127.0.0.1:8420
68
+ ```
69
+
70
+ ## 🤔 What is this?
71
+
72
+ Using an LLM to call tools in a loop is the simplest form of an agent. This architecture, however, can yield agents that are "shallow" and fail to plan and act over longer, more complex tasks.
73
+
74
+ Applications like "Deep Research", "Manus", and "Claude Code" have gotten around this limitation by implementing a combination of four things: a **planning tool**, **sub agents**, access to a **file system**, and a **detailed prompt**.
75
+
76
+ `bog-agents` is a Python package that implements these in a general purpose way so that you can easily create a Bog Agents for your application. For a full overview and quickstart of Bog Agents, the best resource is our [docs](https://docs.langchain.com/oss/python/bog-agents/overview).
77
+
78
+ **Acknowledgements: This project was primarily inspired by Claude Code, and initially was largely an attempt to see what made Claude Code general purpose, and make it even more so.**
79
+
80
+ ## 🚀 Features
81
+
82
+ ### Core Agent
83
+ - **LangGraph-powered** — composable agent with middleware architecture
84
+ - **Multi-model** — works with Anthropic, OpenAI, Google, DeepSeek, and any LangChain-compatible LLM
85
+ - **Sub-agents** — spawn isolated sub-agents for complex tasks
86
+ - **File system** — read, write, edit, search files with pluggable backends
87
+ - **Planning** — built-in todo list and plan mode for structured task execution
88
+
89
+ ### Middleware (Pluggable)
90
+
91
+ | Middleware | Description |
92
+ |-----------|-------------|
93
+ | `FilesystemMiddleware` | File read/write/edit/search + multi-edit and batch read |
94
+ | `GitToolsMiddleware` | 9 git tools: status, diff, log, commit, add, branch, stash, blame, show |
95
+ | `RepoMapMiddleware` | Structural code map with symbol extraction (Python, JS, TS, Rust, Go, Java) |
96
+ | `CheckpointingMiddleware` | Git-based snapshots before mutations, with undo/diff |
97
+ | `CostTrackerMiddleware` | Token usage, cost estimation, budget enforcement, effort levels |
98
+ | `PlanModeMiddleware` | Read-only mode that blocks mutating tools |
99
+ | `AutoQualityMiddleware` | Auto-lint/test after edits with project detection |
100
+ | `ArchitectMiddleware` | Dual-model architect/reviewer with cross-model consultation |
101
+ | `ParallelAgentsMiddleware` | Concurrent sub-agent task execution |
102
+ | `LifecycleHooksMiddleware` | 15 event types for external tool integration |
103
+ | `ContextPackingMiddleware` | Smart structured context compression |
104
+ | `SummarizationMiddleware` | Auto-summarization when context window fills |
105
+ | `MemoryMiddleware` | Persistent AGENTS.md memory across sessions |
106
+ | `SkillsMiddleware` | Custom skill/instruction loading |
107
+ | `SafeToolsConfig` | Per-tool auto-approval rules |
108
+
109
+ ### Security
110
+ - **OS-level sandbox** — bubblewrap (Linux), seatbelt (macOS), landlock isolation
111
+ - **Human-in-the-loop** — configurable tool approval with interrupt handling
112
+
113
+ ## 📦 Quick Start
114
+
115
+ ```python
116
+ from bog_agents import create_agent
117
+
118
+ agent = create_agent(
119
+ model="anthropic:claude-sonnet-4-6",
120
+ enable_git_tools=True,
121
+ enable_repo_map=True,
122
+ enable_checkpointing=True,
123
+ enable_cost_tracking=True,
124
+ enable_plan_mode=True,
125
+ auto_lint=True,
126
+ working_dir="/path/to/project",
127
+ )
128
+
129
+ # Run the agent
130
+ result = await agent.ainvoke(
131
+ {"messages": [{"role": "user", "content": "Fix the failing tests"}]},
132
+ config={"configurable": {"thread_id": "my-session"}},
133
+ )
134
+ ```
135
+
136
+ ## 📖 Resources
137
+
138
+ - **[Documentation](https://docs.langchain.com/oss/python/bog-agents)** — Full documentation
139
+ - **[API Reference](https://reference.langchain.com/python/bog-agents/)** — Full SDK reference documentation
140
+ - **[Chat LangChain](https://chat.langchain.com)** - Chat interactively with the docs
141
+
142
+ ## 📕 Releases & Versioning
143
+
144
+ See our [Releases](https://docs.langchain.com/oss/python/release-policy) and [Versioning](https://docs.langchain.com/oss/python/versioning) policies.
145
+
146
+ ## 💁 Contributing
147
+
148
+ As an open-source project in a rapidly developing field, we are extremely open to contributions, whether it be in the form of a new feature, improved infrastructure, or better documentation.
149
+
150
+ For detailed information on how to contribute, see the [Contributing Guide](https://docs.langchain.com/oss/python/contributing/overview).
@@ -0,0 +1,120 @@
1
+ """Bog Agents package.
2
+
3
+ Middleware classes are loaded lazily — they are only imported when first accessed.
4
+ This keeps ``import bog_agents`` fast.
5
+ """
6
+
7
+ from bog_agents._version import __version__
8
+ from bog_agents.feature_config import FeatureConfig
9
+ from bog_agents.graph import create_agent
10
+
11
+ # Lazy-loaded symbols: maps exported name → (module_path, attribute_name)
12
+ _LAZY_IMPORTS: dict[str, tuple[str, str]] = {
13
+ "AdaptiveContextMiddleware": ("bog_agents.middleware.adaptive_context", "AdaptiveContextMiddleware"),
14
+ "AgentReplayMiddleware": ("bog_agents.middleware.agent_replay", "AgentReplayMiddleware"),
15
+ "AgentTeamsMiddleware": ("bog_agents.middleware.agent_teams", "AgentTeamsMiddleware"),
16
+ "AirGappedMiddleware": ("bog_agents.middleware.air_gapped", "AirGappedMiddleware"),
17
+ "ApprovalGatesMiddleware": ("bog_agents.middleware.approval_gates", "ApprovalGatesMiddleware"),
18
+ "ArchitectMiddleware": ("bog_agents.middleware.architect", "ArchitectMiddleware"),
19
+ "AuditTrailMiddleware": ("bog_agents.middleware.audit_trail", "AuditTrailMiddleware"),
20
+ "AutoQualityMiddleware": ("bog_agents.middleware.auto_quality", "AutoQualityMiddleware"),
21
+ "AutomationsMiddleware": ("bog_agents.middleware.automations", "AutomationsMiddleware"),
22
+ "BrowserAgentFAMiddleware": ("bog_agents.middleware.browser_agent_fa", "BrowserAgentFAMiddleware"),
23
+ "BrowserAgentMiddleware": ("bog_agents.middleware.browser_agent", "BrowserAgentMiddleware"),
24
+ "CheckpointingMiddleware": ("bog_agents.middleware.checkpointing", "CheckpointingMiddleware"),
25
+ "CitationsMiddleware": ("bog_agents.middleware.citations", "CitationsMiddleware"),
26
+ "ClientKnowledgeBaseMiddleware": ("bog_agents.middleware.client_knowledge_base", "ClientKnowledgeBaseMiddleware"),
27
+ "ClientReportsMiddleware": ("bog_agents.middleware.client_reports", "ClientReportsMiddleware"),
28
+ "CloudSandboxMiddleware": ("bog_agents.middleware.cloud_sandbox", "CloudSandboxMiddleware"),
29
+ "CodeIntelligenceMiddleware": ("bog_agents.middleware.code_intelligence", "CodeIntelligenceMiddleware"),
30
+ "CodeReviewMiddleware": ("bog_agents.middleware.code_review", "CodeReviewMiddleware"),
31
+ "CollaborativeSessionsMiddleware": ("bog_agents.middleware.collaborative_sessions", "CollaborativeSessionsMiddleware"),
32
+ "CompetitiveIntelMiddleware": ("bog_agents.middleware.competitive_intel", "CompetitiveIntelMiddleware"),
33
+ "CompiledSubAgent": ("bog_agents.middleware.subagents", "CompiledSubAgent"),
34
+ "ComputerUseMiddleware": ("bog_agents.middleware.computer_use", "ComputerUseMiddleware"),
35
+ "ContextPackingMiddleware": ("bog_agents.middleware.context_packing", "ContextPackingMiddleware"),
36
+ "ConversationBranchMiddleware": ("bog_agents.middleware.conversation_branch", "ConversationBranchMiddleware"),
37
+ "CostTrackerMiddleware": ("bog_agents.middleware.cost_tracker", "CostTrackerMiddleware"),
38
+ "DLPMiddleware": ("bog_agents.middleware.dlp", "DLPMiddleware"),
39
+ "DashboardMiddleware": ("bog_agents.middleware.dashboard", "DashboardMiddleware"),
40
+ "DeepResearchMiddleware": ("bog_agents.middleware.deep_research", "DeepResearchMiddleware"),
41
+ "DueDiligenceMiddleware": ("bog_agents.middleware.due_diligence", "DueDiligenceMiddleware"),
42
+ "EarningsAnalysisMiddleware": ("bog_agents.middleware.earnings_analysis", "EarningsAnalysisMiddleware"),
43
+ "EnhancedSkillsMiddleware": ("bog_agents.middleware.enhanced_skills", "EnhancedSkillsMiddleware"),
44
+ "EnterpriseMiddleware": ("bog_agents.middleware.enterprise", "EnterpriseMiddleware"),
45
+ "FactCheckMiddleware": ("bog_agents.middleware.fact_check", "FactCheckMiddleware"),
46
+ "FilesystemMiddleware": ("bog_agents.middleware.filesystem", "FilesystemMiddleware"),
47
+ "FinancialDataMiddleware": ("bog_agents.middleware.financial_data", "FinancialDataMiddleware"),
48
+ "FirmDeploymentMiddleware": ("bog_agents.middleware.firm_deployment", "FirmDeploymentMiddleware"),
49
+ "GitToolsMiddleware": ("bog_agents.middleware.git_tools", "GitToolsMiddleware"),
50
+ "HallucinationDetectionMiddleware": ("bog_agents.middleware.hallucination_detection", "HallucinationDetectionMiddleware"),
51
+ "HotReloadSkillsMiddleware": ("bog_agents.middleware.hot_reload_skills", "HotReloadSkillsMiddleware"),
52
+ "HttpHooksMiddleware": ("bog_agents.middleware.http_hooks", "HttpHooksMiddleware"),
53
+ "ImageInputMiddleware": ("bog_agents.middleware.image_input", "ImageInputMiddleware"),
54
+ "ImagePdfInputMiddleware": ("bog_agents.middleware.image_pdf_input", "ImagePdfInputMiddleware"),
55
+ "KnowledgeGraphMiddleware": ("bog_agents.middleware.knowledge_graph", "KnowledgeGraphMiddleware"),
56
+ "LifecycleHooksMiddleware": ("bog_agents.middleware.lifecycle_hooks", "LifecycleHooksMiddleware"),
57
+ "MarketSentimentMiddleware": ("bog_agents.middleware.market_sentiment", "MarketSentimentMiddleware"),
58
+ "MeetingPrepMiddleware": ("bog_agents.middleware.meeting_prep", "MeetingPrepMiddleware"),
59
+ "MemoryMiddleware": ("bog_agents.middleware.memory", "MemoryMiddleware"),
60
+ "MessagingIntegrationMiddleware": ("bog_agents.middleware.messaging_integration", "MessagingIntegrationMiddleware"),
61
+ "ModelCascadeMiddleware": ("bog_agents.middleware.model_cascade", "ModelCascadeMiddleware"),
62
+ "ModelPortfolioMiddleware": ("bog_agents.middleware.model_portfolio", "ModelPortfolioMiddleware"),
63
+ "MultiAgentOrchestratorMiddleware": ("bog_agents.middleware.multi_agent_orchestrator", "MultiAgentOrchestratorMiddleware"),
64
+ "MultiModelMiddleware": ("bog_agents.middleware.multi_model", "MultiModelMiddleware"),
65
+ "NLQueryMiddleware": ("bog_agents.middleware.nl_query", "NLQueryMiddleware"),
66
+ "NotificationsMiddleware": ("bog_agents.middleware.notifications", "NotificationsMiddleware"),
67
+ "OfflineModeMiddleware": ("bog_agents.middleware.offline_mode", "OfflineModeMiddleware"),
68
+ "OpenSearchRAGMiddleware": ("bog_agents.middleware.opensearch_rag", "OpenSearchRAGMiddleware"),
69
+ "PRManagementMiddleware": ("bog_agents.middleware.pr_management", "PRManagementMiddleware"),
70
+ "ParallelAgentsMiddleware": ("bog_agents.middleware.parallel_agents", "ParallelAgentsMiddleware"),
71
+ "PeerComparisonMiddleware": ("bog_agents.middleware.peer_comparison", "PeerComparisonMiddleware"),
72
+ "PlanModeMiddleware": ("bog_agents.middleware.plan_mode", "PlanModeMiddleware"),
73
+ "PluginSystemMiddleware": ("bog_agents.middleware.plugin_system", "PluginSystemMiddleware"),
74
+ "PortfolioAnalysisMiddleware": ("bog_agents.middleware.portfolio_analysis", "PortfolioAnalysisMiddleware"),
75
+ "RBACMiddleware": ("bog_agents.middleware.rbac", "RBACMiddleware"),
76
+ "ReasoningChainMiddleware": ("bog_agents.middleware.reasoning_chain", "ReasoningChainMiddleware"),
77
+ "RegulatoryAlertsMiddleware": ("bog_agents.middleware.regulatory_alerts", "RegulatoryAlertsMiddleware"),
78
+ "RegulatoryImpactMiddleware": ("bog_agents.middleware.regulatory_impact", "RegulatoryImpactMiddleware"),
79
+ "RepoMapMiddleware": ("bog_agents.middleware.repo_map", "RepoMapMiddleware"),
80
+ "SSOAuthMiddleware": ("bog_agents.middleware.sso_auth", "SSOAuthMiddleware"),
81
+ "SafeToolsConfig": ("bog_agents.middleware.safe_tools", "SafeToolsConfig"),
82
+ "SavedPromptsMiddleware": ("bog_agents.middleware.saved_prompts", "SavedPromptsMiddleware"),
83
+ "ScenarioEngineMiddleware": ("bog_agents.middleware.scenario_engine", "ScenarioEngineMiddleware"),
84
+ "ScheduledReportsMiddleware": ("bog_agents.middleware.scheduled_reports", "ScheduledReportsMiddleware"),
85
+ "ScheduledRunsMiddleware": ("bog_agents.middleware.scheduled_runs", "ScheduledRunsMiddleware"),
86
+ "SecurityAuditMiddleware": ("bog_agents.middleware.security_audit", "SecurityAuditMiddleware"),
87
+ "SelfImprovingMiddleware": ("bog_agents.middleware.self_improving", "SelfImprovingMiddleware"),
88
+ "SmartApprovalsMiddleware": ("bog_agents.middleware.smart_approvals", "SmartApprovalsMiddleware"),
89
+ "SmartContextMiddleware": ("bog_agents.middleware.smart_context", "SmartContextMiddleware"),
90
+ "SubAgent": ("bog_agents.middleware.subagents", "SubAgent"),
91
+ "SubAgentMiddleware": ("bog_agents.middleware.subagents", "SubAgentMiddleware"),
92
+ "TaxOptimizationMiddleware": ("bog_agents.middleware.tax_optimization", "TaxOptimizationMiddleware"),
93
+ "TestGenerationMiddleware": ("bog_agents.middleware.test_generation", "TestGenerationMiddleware"),
94
+ "VersionControlMiddleware": ("bog_agents.middleware.version_control", "VersionControlMiddleware"),
95
+ "VoiceIOMiddleware": ("bog_agents.middleware.voice_io", "VoiceIOMiddleware"),
96
+ "WorktreeMiddleware": ("bog_agents.middleware.worktree", "WorktreeMiddleware"),
97
+ }
98
+
99
+
100
+ def __getattr__(name: str) -> object:
101
+ """Lazy-load middleware classes on first access."""
102
+ if name in _LAZY_IMPORTS:
103
+ module_path, attr_name = _LAZY_IMPORTS[name]
104
+ import importlib
105
+
106
+ module = importlib.import_module(module_path)
107
+ value = getattr(module, attr_name)
108
+ # Cache in module namespace so subsequent accesses are fast
109
+ globals()[name] = value
110
+ return value
111
+ msg = f"module {__name__!r} has no attribute {name!r}"
112
+ raise AttributeError(msg)
113
+
114
+
115
+ __all__ = [ # noqa: PLE0604
116
+ "FeatureConfig",
117
+ "__version__",
118
+ "create_agent",
119
+ *_LAZY_IMPORTS,
120
+ ]
@@ -0,0 +1,81 @@
1
+ """Shared helpers for resolving and inspecting chat models."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import Any
6
+
7
+ from langchain.chat_models import init_chat_model
8
+ from langchain_core.language_models import BaseChatModel
9
+
10
+
11
+ def resolve_model(model: str | BaseChatModel) -> BaseChatModel:
12
+ """Resolve a model string to a `BaseChatModel`.
13
+
14
+ If `model` is already a `BaseChatModel`, returns it unchanged.
15
+
16
+ String models are resolved via `init_chat_model`. OpenAI models
17
+ (prefixed with `openai:`) default to the Responses API.
18
+
19
+ Args:
20
+ model: Model string or pre-configured model instance.
21
+
22
+ Returns:
23
+ Resolved `BaseChatModel` instance.
24
+ """
25
+ if isinstance(model, BaseChatModel):
26
+ return model
27
+ if model.startswith("openai:"):
28
+ return init_chat_model(model, use_responses_api=True)
29
+ return init_chat_model(model)
30
+
31
+
32
+ def get_model_identifier(model: BaseChatModel) -> str | None:
33
+ """Extract the provider-native model identifier from a chat model.
34
+
35
+ Providers do not agree on a single field name for the identifier. Some use
36
+ `model_name`, while others use `model`. Reading the serialized model config
37
+ lets us inspect both without relying on reflective attribute access.
38
+
39
+ Args:
40
+ model: Chat model instance to inspect.
41
+
42
+ Returns:
43
+ The configured model identifier, or `None` if it is unavailable.
44
+ """
45
+ config = model.model_dump()
46
+ return _string_value(config, "model_name") or _string_value(config, "model")
47
+
48
+
49
+ def model_matches_spec(model: BaseChatModel, spec: str) -> bool:
50
+ """Check whether a model instance already matches a string model spec.
51
+
52
+ Matching is performed in two ways: first by exact string equality between
53
+ `spec` and the model identifier, then by comparing only the model-name
54
+ portion of a `provider:model` spec against the identifier. For example,
55
+ `"openai:gpt-5"` matches a model with identifier `"gpt-5"`.
56
+
57
+ Assumes the `provider:model` convention (single colon separator).
58
+
59
+ Args:
60
+ model: Chat model instance to inspect.
61
+ spec: Model spec in `provider:model` format (e.g., `openai:gpt-5`).
62
+
63
+ Returns:
64
+ `True` if the model already matches the spec, otherwise `False`.
65
+ """
66
+ current = get_model_identifier(model)
67
+ if current is None:
68
+ return False
69
+ if spec == current:
70
+ return True
71
+
72
+ _, separator, model_name = spec.partition(":")
73
+ return bool(separator) and model_name == current
74
+
75
+
76
+ def _string_value(config: dict[str, Any], key: str) -> str | None:
77
+ """Return a non-empty string value from a serialized model config."""
78
+ value = config.get(key)
79
+ if isinstance(value, str) and value:
80
+ return value
81
+ return None
@@ -0,0 +1,3 @@
1
+ """Version information for `bog-agents` (SDK)."""
2
+
3
+ __version__ = "0.5.2" # x-release-please-version
@@ -0,0 +1,24 @@
1
+ """Memory backends for pluggable file storage."""
2
+
3
+ from bog_agents.backends.composite import CompositeBackend
4
+ from bog_agents.backends.filesystem import FilesystemBackend
5
+ from bog_agents.backends.local_shell import DEFAULT_EXECUTE_TIMEOUT, LocalShellBackend
6
+ from bog_agents.backends.protocol import BackendProtocol
7
+ from bog_agents.backends.state import StateBackend
8
+ from bog_agents.backends.store import (
9
+ BackendContext,
10
+ NamespaceFactory,
11
+ StoreBackend,
12
+ )
13
+
14
+ __all__ = [
15
+ "DEFAULT_EXECUTE_TIMEOUT",
16
+ "BackendContext",
17
+ "BackendProtocol",
18
+ "CompositeBackend",
19
+ "FilesystemBackend",
20
+ "LocalShellBackend",
21
+ "NamespaceFactory",
22
+ "StateBackend",
23
+ "StoreBackend",
24
+ ]