olav 0.10.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 (121) hide show
  1. olav-0.10.0/.gitignore +126 -0
  2. olav-0.10.0/LICENSE +147 -0
  3. olav-0.10.0/PKG-INFO +311 -0
  4. olav-0.10.0/README.md +223 -0
  5. olav-0.10.0/pyproject.toml +301 -0
  6. olav-0.10.0/src/olav/__init__.py +38 -0
  7. olav-0.10.0/src/olav/__main__.py +14 -0
  8. olav-0.10.0/src/olav/agents/__init__.py +12 -0
  9. olav-0.10.0/src/olav/agents/_deepagents_bridge.py +164 -0
  10. olav-0.10.0/src/olav/agents/agent.py +574 -0
  11. olav-0.10.0/src/olav/agents/delegate_tool.py +87 -0
  12. olav-0.10.0/src/olav/agents/query_runner.py +326 -0
  13. olav-0.10.0/src/olav/agents/remote_subagents.py +114 -0
  14. olav-0.10.0/src/olav/api/__init__.py +1 -0
  15. olav-0.10.0/src/olav/api/server.py +458 -0
  16. olav-0.10.0/src/olav/api/static/index.html +515 -0
  17. olav-0.10.0/src/olav/api/static/login.html +65 -0
  18. olav-0.10.0/src/olav/cli/__init__.py +33 -0
  19. olav-0.10.0/src/olav/cli/admin.py +495 -0
  20. olav-0.10.0/src/olav/cli/banner.py +64 -0
  21. olav-0.10.0/src/olav/cli/commands/__init__.py +5 -0
  22. olav-0.10.0/src/olav/cli/commands/admin_users.py +208 -0
  23. olav-0.10.0/src/olav/cli/commands/base.py +91 -0
  24. olav-0.10.0/src/olav/cli/commands/builtin.py +395 -0
  25. olav-0.10.0/src/olav/cli/commands/config_evolve.py +350 -0
  26. olav-0.10.0/src/olav/cli/commands/export.py +216 -0
  27. olav-0.10.0/src/olav/cli/commands/init.py +189 -0
  28. olav-0.10.0/src/olav/cli/commands/registry.py +348 -0
  29. olav-0.10.0/src/olav/cli/commands/service.py +272 -0
  30. olav-0.10.0/src/olav/cli/commands/service_registry.py +164 -0
  31. olav-0.10.0/src/olav/cli/commands/services/__init__.py +5 -0
  32. olav-0.10.0/src/olav/cli/commands/services/daemon_svc.py +148 -0
  33. olav-0.10.0/src/olav/cli/commands/services/logs.py +320 -0
  34. olav-0.10.0/src/olav/cli/commands/services/web.py +242 -0
  35. olav-0.10.0/src/olav/cli/commands/shell_runner.py +181 -0
  36. olav-0.10.0/src/olav/cli/commands/skill.py +540 -0
  37. olav-0.10.0/src/olav/cli/commands/trace_review.py +131 -0
  38. olav-0.10.0/src/olav/cli/commands/workspace.py +458 -0
  39. olav-0.10.0/src/olav/cli/daemon.py +271 -0
  40. olav-0.10.0/src/olav/cli/display.py +213 -0
  41. olav-0.10.0/src/olav/cli/input_parser.py +60 -0
  42. olav-0.10.0/src/olav/cli/log_cmd.py +127 -0
  43. olav-0.10.0/src/olav/cli/main.py +1497 -0
  44. olav-0.10.0/src/olav/core/__init__.py +46 -0
  45. olav-0.10.0/src/olav/core/agent_registry.py +310 -0
  46. olav-0.10.0/src/olav/core/api_action_service.py +225 -0
  47. olav-0.10.0/src/olav/core/api_operation_policy.py +164 -0
  48. olav-0.10.0/src/olav/core/api_registry.py +697 -0
  49. olav-0.10.0/src/olav/core/audit_logger.py +147 -0
  50. olav-0.10.0/src/olav/core/audit_recorder.py +458 -0
  51. olav-0.10.0/src/olav/core/auth/__init__.py +11 -0
  52. olav-0.10.0/src/olav/core/auth/authz.py +233 -0
  53. olav-0.10.0/src/olav/core/auth/identity.py +31 -0
  54. olav-0.10.0/src/olav/core/auth/ldap_provider.py +119 -0
  55. olav-0.10.0/src/olav/core/auth/os_identity.py +22 -0
  56. olav-0.10.0/src/olav/core/auth/provider.py +64 -0
  57. olav-0.10.0/src/olav/core/auth/server_token.py +97 -0
  58. olav-0.10.0/src/olav/core/auth/token.py +143 -0
  59. olav-0.10.0/src/olav/core/checkpointer.py +173 -0
  60. olav-0.10.0/src/olav/core/config.py +814 -0
  61. olav-0.10.0/src/olav/core/database.py +109 -0
  62. olav-0.10.0/src/olav/core/defaults.py +110 -0
  63. olav-0.10.0/src/olav/core/embedder.py +126 -0
  64. olav-0.10.0/src/olav/core/hooks.py +147 -0
  65. olav-0.10.0/src/olav/core/ingest_manager.py +200 -0
  66. olav-0.10.0/src/olav/core/knowledge/__init__.py +426 -0
  67. olav-0.10.0/src/olav/core/llm.py +192 -0
  68. olav-0.10.0/src/olav/core/memory/__init__.py +1014 -0
  69. olav-0.10.0/src/olav/core/memory/guardrails.py +289 -0
  70. olav-0.10.0/src/olav/core/memory/langgraph_adapter.py +267 -0
  71. olav-0.10.0/src/olav/core/memory/middleware.py +541 -0
  72. olav-0.10.0/src/olav/core/migrations/__init__.py +1 -0
  73. olav-0.10.0/src/olav/core/migrations/v0_12_users.py +57 -0
  74. olav-0.10.0/src/olav/core/migrations/v0_13_rbac.py +65 -0
  75. olav-0.10.0/src/olav/core/platform_registry.py +157 -0
  76. olav-0.10.0/src/olav/core/router.py +476 -0
  77. olav-0.10.0/src/olav/core/schema_mutation_service.py +438 -0
  78. olav-0.10.0/src/olav/core/tool_discovery.py +197 -0
  79. olav-0.10.0/src/olav/core/utils.py +119 -0
  80. olav-0.10.0/src/olav/core/version.py +291 -0
  81. olav-0.10.0/src/olav/core/watermark.py +96 -0
  82. olav-0.10.0/src/olav/core/workspace.py +167 -0
  83. olav-0.10.0/src/olav/data/__init__.py +1 -0
  84. olav-0.10.0/src/olav/data/yang/__init__.py +1 -0
  85. olav-0.10.0/src/olav/data/yang/openconfig_reference.txt +74 -0
  86. olav-0.10.0/src/olav/lib/__init__.py +1 -0
  87. olav-0.10.0/src/olav/platform/__init__.py +34 -0
  88. olav-0.10.0/src/olav/platform/agent_base.py +119 -0
  89. olav-0.10.0/src/olav/platform/execution/__init__.py +26 -0
  90. olav-0.10.0/src/olav/platform/execution/base.py +101 -0
  91. olav-0.10.0/src/olav/platform/execution/docker_compose.py +52 -0
  92. olav-0.10.0/src/olav/platform/execution/local.py +82 -0
  93. olav-0.10.0/src/olav/platform/execution/ssh.py +141 -0
  94. olav-0.10.0/src/olav/platform/extensions.py +73 -0
  95. olav-0.10.0/src/olav/platform/ingest_base.py +196 -0
  96. olav-0.10.0/src/olav/platform/safety/__init__.py +17 -0
  97. olav-0.10.0/src/olav/platform/safety/approval.py +277 -0
  98. olav-0.10.0/src/olav/platform/safety/injection_scanner.py +224 -0
  99. olav-0.10.0/src/olav/platform/safety/patterns.py +36 -0
  100. olav-0.10.0/src/olav/platform/safety/permissions.py +41 -0
  101. olav-0.10.0/src/olav/platform/safety/sandbox_guard.py +166 -0
  102. olav-0.10.0/src/olav/platform/sandbox.py +232 -0
  103. olav-0.10.0/src/olav/platform/services/__init__.py +21 -0
  104. olav-0.10.0/src/olav/platform/services/client.py +221 -0
  105. olav-0.10.0/src/olav/platform/services/registry.py +270 -0
  106. olav-0.10.0/src/olav/platform/services/response_extractor.py +226 -0
  107. olav-0.10.0/src/olav/platform/services/tool_generator.py +486 -0
  108. olav-0.10.0/src/olav/plugins/__init__.py +57 -0
  109. olav-0.10.0/src/olav/plugins/base.py +49 -0
  110. olav-0.10.0/src/olav/plugins/callbacks/__init__.py +1 -0
  111. olav-0.10.0/src/olav/plugins/callbacks/audit.py +342 -0
  112. olav-0.10.0/src/olav/plugins/middleware/__init__.py +1 -0
  113. olav-0.10.0/src/olav/plugins/middleware/guardrails.py +98 -0
  114. olav-0.10.0/src/olav/plugins/middleware/memory_capture.py +94 -0
  115. olav-0.10.0/src/olav/plugins/middleware/memory_recall.py +67 -0
  116. olav-0.10.0/src/olav/plugins/middleware/safety.py +224 -0
  117. olav-0.10.0/src/olav/plugins/registry.py +50 -0
  118. olav-0.10.0/src/olav/py.typed +0 -0
  119. olav-0.10.0/src/olav/services/__init__.py +1 -0
  120. olav-0.10.0/src/olav/services/netconf_collector.py +281 -0
  121. olav-0.10.0/src/olav/services/syslog_receiver.py +324 -0
olav-0.10.0/.gitignore ADDED
@@ -0,0 +1,126 @@
1
+ # ══════════════════════════════════════════════════════════════════════════════
2
+ # OLAV Platform .gitignore
3
+ #
4
+ # AUTO-GENERATED from ownership_manifest.yaml
5
+ # Do not edit manually — run: uv run python scripts/gen_gitignore.py --write
6
+ # ══════════════════════════════════════════════════════════════════════════════
7
+
8
+ # ── python ──
9
+ __pycache__/
10
+ *.py[cod]
11
+ *.so
12
+ *.egg-info/
13
+ *.egg
14
+ build/
15
+ sdist/
16
+ wheels/
17
+ MANIFEST
18
+
19
+ # ── venv ──
20
+ venv/
21
+ env/
22
+
23
+ # ── ide ──
24
+ .idea/
25
+ *.swp
26
+ *.swo
27
+ *~
28
+ .DS_Store
29
+
30
+ # ── lint_cache ──
31
+ htmlcov/
32
+ .tox/
33
+ .hypothesis/
34
+ .mypy_cache/
35
+ .pyright_cache/
36
+ MagicMock/
37
+
38
+ # ── misc ──
39
+ *.log
40
+ logs/
41
+ agent_outputs/
42
+ node_modules/
43
+
44
+ # ── temp_scripts ──
45
+ demo_*.py
46
+ parse_test.py
47
+ fix_openconfig_closure.py
48
+ test_playwright.py
49
+ test_watermark_integration.py
50
+ WATERMARK_IMPLEMENTATION_REPORT.md
51
+ TRAINING_DATA_*.md
52
+
53
+ # ── Paths ignored by manifest rules ──
54
+
55
+ # platform
56
+ uv.lock
57
+ CHANGELOG.md
58
+ PARTNERS.md
59
+ .dockerignore
60
+ dev_docs/
61
+ scripts/
62
+ run/
63
+ .vscode/
64
+ .claude/
65
+
66
+ # testing
67
+ tests/
68
+
69
+ # generated
70
+ dist/
71
+ exports/
72
+ tmp/
73
+ .coverage
74
+ .pytest_cache/
75
+ .ruff_cache/
76
+ .venv/
77
+ .agent/
78
+ olav-post/
79
+ olav-netops/exports/
80
+ olav-doc/site/
81
+ olav-web/dist/
82
+ olav-web/node_modules/
83
+ olav-web/.wrangler/
84
+ .olav/databases/
85
+ .olav/logs/
86
+
87
+ # legacy
88
+ _legacy_archived/
89
+
90
+ # netops
91
+ olav-netops/
92
+ .olav/workspace/ops/
93
+ .olav/workspace/ops-lab/
94
+
95
+ # enterprise
96
+ olav-ent/
97
+
98
+ # docs
99
+ olav-doc/
100
+
101
+ # website
102
+ olav-web/
103
+
104
+ # runtime-workspace
105
+ .olav/
106
+
107
+ # ── Whitelist (tracked paths inside ignored parents) ──
108
+ !.olav/
109
+ .olav/*
110
+ !.olav/config/
111
+ !.olav/config/*.example
112
+ !.olav/config/schemas/
113
+ !.olav/workspace/
114
+ .olav/workspace/*
115
+ !.olav/workspace/config/
116
+ !.olav/workspace/core/
117
+
118
+ # ── Secrets (NEVER commit) ──
119
+ .env
120
+ .pypirc
121
+ .pypirc_test
122
+ .env.local
123
+ .env.*.local
124
+ *.token
125
+ *.key
126
+ *.pem
olav-0.10.0/LICENSE ADDED
@@ -0,0 +1,147 @@
1
+ # Business Source License 1.1
2
+
3
+ **Parameters**
4
+
5
+ * **Version:** 0.10.0
6
+ * **Last Updated:** 2026-03-06
7
+ * **Licensor:** DATATECHIE PTY LTD
8
+ * **Registered Address:** Footscray, VIC 3011, Australia
9
+ * **Copyright:** Copyright © 2026-2030 DATATECHIE PTY LTD. All rights reserved.
10
+ * **Software:** olav (including all core orchestration logic, agent skills, and middleware)
11
+ * **Change Date:** 2030-01-01
12
+ * **Change License:** Apache License, Version 2.0
13
+ * **Additional Use Grant:** See section "Additional Use Grant" below.
14
+ * **Partner Program:** Commercial licensing details at [olavai.com/partners](https://olavai.com/partners) (TBA).
15
+
16
+ ---
17
+
18
+ ## 1. The License Text
19
+
20
+ The Licensor hereby grants you the right to copy, modify, create derivative works, redistribute, and make non-production use of the Software.
21
+
22
+ **Production use** is allowed ONLY under the conditions specified in the **Additional Use Grant** below.
23
+
24
+ Any use of the Software in production for purposes not explicitly permitted by the Additional Use Grant requires a separate commercial license as part of the **olav Partner Program**.
25
+
26
+ ---
27
+
28
+ ## 2. Additional Use Grant
29
+
30
+ You are authorized to use the Software in a production environment under the following conditions:
31
+
32
+ ### A. Internal Expert Use (Free)
33
+
34
+ 1. **Personal Use:** You may use the Software for personal, non-commercial research and experimentation.
35
+ 2. **Internal Enterprise Use:** Organizations may use the Software for their **own internal infrastructure management**, provided that:
36
+ * The Software is used to manage infrastructure **owned or leased by that organization**.
37
+ * The use is not intended to provide services to any third party.
38
+ * Contractors, consultants, and part-time staff acting **on behalf of and under the direction of** the organization are permitted to operate the Software for that organization's internal use.
39
+
40
+
41
+
42
+ ### B. Prohibited Commercial Use (Partner License Required)
43
+
44
+ The following use cases are **EXPRESSLY PROHIBITED** under this Free Grant and require joining the **olav Partner Program**:
45
+
46
+ * **Managed Service Providers (MSP):** Using olav to manage, monitor, or operate infrastructure belonging to third-party clients.
47
+ * **Cloud Service Providers (CSP):** Offering olav as a hosted service, managed instance, or via an API to external customers.
48
+ * **Outsourced Operations:** A third-party firm using the Software to manage **another organization's** infrastructure as a commercial service (note: contractors working under the direction of the infrastructure owner for internal use are permitted under §A.2).
49
+ * **Bundling & Resale:** Packaging olav within a commercial product, hardware appliance, or proprietary software suite.
50
+ * **Commercial Consulting:** Selling "olav Implementation" or "Expert Skill Tuning" as a paid service to third parties.
51
+
52
+ ---
53
+
54
+ ## 3. Vision & Philosophy
55
+
56
+ The licensing model of **olav** reflects our core architectural values:
57
+
58
+ * **Empowerment over Displacement:** olav is designed to liberate engineers from trivial, repetitive tasks, not to serve as an interface for cutting professional labor costs.
59
+ * **Robustness over Cost:** We believe expertise is the only true firewall. By restricting use to direct employees or certified partners, we ensure that critical infrastructure is managed by those with the skin in the game and the necessary domain depth.
60
+ * **Professional Respect:** We prioritize the technical sovereignty of the individual architect. If you are a professional making your own network more robust, this tool is yours. If you are a corporation seeking to arbitrage professional knowledge through cheap labor, you must contribute back to the ecosystem.
61
+
62
+ ---
63
+
64
+ ## 4. Partner Program & Licensing
65
+
66
+ Organizations that fall under the "Prohibited Commercial Use" category must obtain a **Commercial Partner License**. Benefits include:
67
+
68
+ * Legal right to resell/package olav-based services.
69
+ * Direct architectural support and audit trails for compliance.
70
+
71
+ For inquiries, contact: **james@olavai.com**
72
+
73
+ ---
74
+
75
+ ## 5. Change License
76
+
77
+ On the **Change Date (2030-01-01)**, this license will automatically convert to the **Apache License, Version 2.0**. This ensures the long-term openness of the core framework while protecting the initial phase of expert-led innovation.
78
+
79
+ ---
80
+
81
+ ## 6. Disclaimer & Limitation of Liability
82
+
83
+ ### AS-IS Provision
84
+
85
+ **THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND**, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT.
86
+
87
+ DATATECHIE PTY LTD makes no representations or warranties regarding:
88
+ * The accuracy, completeness, or reliability of the Software
89
+ * The suitability of the Software for any particular purpose
90
+ * The absence of errors, defects, or malicious code
91
+ * The uninterrupted or error-free operation of the Software
92
+
93
+ ### AI-Generated Output Notice
94
+
95
+ The Software uses large language models (LLMs) to generate responses, tool calls, and operational recommendations. **AI-generated outputs are non-deterministic and may contain errors.** Users must:
96
+
97
+ * **Review all AI-generated actions** before applying them to production infrastructure
98
+ * **Not rely solely on AI outputs** for critical infrastructure decisions without human verification
99
+ * Understand that the Software's Agent Harness provides safety layers (HITL approval, sandbox isolation, read-only enforcement) but **cannot guarantee the correctness of LLM-generated content**
100
+
101
+ ### User's Responsibility
102
+
103
+ By downloading, installing, or using the Software, you acknowledge and accept responsibility for:
104
+
105
+ * Reviewing and approving all actions the Software takes in your infrastructure
106
+ * All data processed, modified, or deleted by the Software
107
+ * Configuration errors that may result in unintended network changes
108
+ * Security vulnerabilities you may fail to patch
109
+ * Compliance with local regulations in your jurisdiction
110
+
111
+ ### Limitation of Liability
112
+
113
+ **TO THE MAXIMUM EXTENT PERMITTED BY LAW**, DATATECHIE PTY LTD SHALL NOT BE LIABLE FOR ANY OF THE FOLLOWING, WHETHER BASED ON WARRANTY, CONTRACT, TORT, STRICT LIABILITY, OR ANY OTHER LEGAL THEORY:
114
+
115
+ * **Indirect Damages:** Loss of profits, revenue, data, goodwill, or business opportunity
116
+ * **Special/Consequential Damages:** Damages arising from network downtime, unauthorized access, or third-party claims
117
+ * **Direct Damages Cap:** The total liability of DATATECHIE PTY LTD shall not exceed the amount paid for the license (if Partner tier), or zero dollars (if Free Grant users)
118
+
119
+ This limitation applies even if DATATECHIE PTY LTD has been advised of the possibility of such damages.
120
+
121
+ ### Indemnification
122
+
123
+ Users using the Software shall **indemnify and hold harmless** DATATECHIE PTY LTD, its officers, employees, and partners from any third-party claims, damages, or costs (including legal fees) arising from:
124
+ * User's use of the Software
125
+ * User's breach of this License
126
+ * User's negligence or misuse of the Software
127
+ * User's unauthorized modification or redistribution
128
+
129
+ ### Acceptance of Terms
130
+
131
+ **Use of the Software constitutes acceptance of this entire License.** You agree that:
132
+ * You have read and understood all terms
133
+ * You assume all risks of using the Software
134
+ * You will not hold DATATECHIE PTY LTD liable for any damages
135
+ * DATATECHIE PTY LTD is not liable for third-party claims against you
136
+
137
+ If you do not accept these terms, **you must cease use of the Software immediately and delete all copies**.
138
+
139
+ ---
140
+
141
+ ## 7. Governing Law & Jurisdiction
142
+
143
+ This License shall be governed by and construed in accordance with the laws of **Victoria, Australia**, without regard to its conflict of laws principles.
144
+
145
+ * **Jurisdiction:** Exclusive jurisdiction for any disputes lies with the courts of Victoria, Australia
146
+ * **Dispute Resolution:** Before initiating legal proceedings, parties agree to attempt good-faith negotiation
147
+ * **Attorney's Fees:** The prevailing party in any legal proceeding shall be entitled to recover reasonable attorney's fees and costs
olav-0.10.0/PKG-INFO ADDED
@@ -0,0 +1,311 @@
1
+ Metadata-Version: 2.4
2
+ Name: olav
3
+ Version: 0.10.0
4
+ Summary: OLAV — AI-native platform for autonomous operations with domain-aware agents, API-as-Tool, and Agent Harness
5
+ Project-URL: Homepage, https://github.com/olav-ai/olav
6
+ Project-URL: Repository, https://github.com/olav-ai/olav
7
+ Author: OLAV Team
8
+ License: BSL-1.1
9
+ License-File: LICENSE
10
+ Keywords: agent,agentic-platform,aiops,api-as-tool,deepagents,langgraph
11
+ Classifier: Development Status :: 4 - Beta
12
+ Classifier: Intended Audience :: Developers
13
+ Classifier: Intended Audience :: System Administrators
14
+ Classifier: Operating System :: POSIX :: Linux
15
+ Classifier: Programming Language :: Python :: 3
16
+ Classifier: Programming Language :: Python :: 3.11
17
+ Classifier: Programming Language :: Python :: 3.12
18
+ Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
19
+ Classifier: Topic :: System :: Networking :: Monitoring
20
+ Requires-Python: >=3.11
21
+ Requires-Dist: ddgs>=9.11.4
22
+ Requires-Dist: deepagents<1.0,>=0.4.11
23
+ Requires-Dist: duckdb-engine>=0.17.0
24
+ Requires-Dist: duckdb>=0.8.0
25
+ Requires-Dist: duckduckgo-search>=3.0.0
26
+ Requires-Dist: fastapi>=0.109.0
27
+ Requires-Dist: httpx>=0.24.0
28
+ Requires-Dist: lancedb>=0.29.2
29
+ Requires-Dist: langchain-community>=0.4.1
30
+ Requires-Dist: langchain-core>=0.1.0
31
+ Requires-Dist: langchain-ollama>=0.1.0
32
+ Requires-Dist: langchain-openai>=0.0.1
33
+ Requires-Dist: langchain>=0.1.0
34
+ Requires-Dist: langgraph-checkpoint-sqlite>=3.0.0
35
+ Requires-Dist: langgraph>=1.0.8
36
+ Requires-Dist: markdownify>=0.13.0
37
+ Requires-Dist: ncclient>=0.7.1
38
+ Requires-Dist: nest-asyncio>=1.5.0
39
+ Requires-Dist: netutils>=1.17.1
40
+ Requires-Dist: networkx>=3.6.1
41
+ Requires-Dist: ntc-templates>=9.0.0
42
+ Requires-Dist: numpy>=2.4.1
43
+ Requires-Dist: pandas>=3.0.1
44
+ Requires-Dist: pdfplumber>=0.11.9
45
+ Requires-Dist: prompt-toolkit>=3.0.0
46
+ Requires-Dist: pyang>=2.7.1
47
+ Requires-Dist: pydantic-settings>=2.0
48
+ Requires-Dist: pydantic>=2.0
49
+ Requires-Dist: pygnmi>=0.8.15
50
+ Requires-Dist: pyjwt>=2.12.1
51
+ Requires-Dist: pypdf2>=3.0.0
52
+ Requires-Dist: python-crontab>=3.0.0
53
+ Requires-Dist: python-dateutil>=2.8.0
54
+ Requires-Dist: python-frontmatter>=1.1.0
55
+ Requires-Dist: pytz>=2024.1
56
+ Requires-Dist: pyyaml>=6.0
57
+ Requires-Dist: requests>=2.31.0
58
+ Requires-Dist: rich>=13.0
59
+ Requires-Dist: ruptures>=1.1.10
60
+ Requires-Dist: scikit-learn>=1.8.0
61
+ Requires-Dist: scipy>=1.17.1
62
+ Requires-Dist: sentence-transformers>=5.2.3
63
+ Requires-Dist: sqlalchemy>=2.0
64
+ Requires-Dist: tavily-python>=0.3.0
65
+ Requires-Dist: tenacity>=8.0
66
+ Requires-Dist: textfsm>=1.1.3
67
+ Requires-Dist: typer>=0.9.0
68
+ Requires-Dist: uvicorn[standard]>=0.27.0
69
+ Requires-Dist: xmltodict>=1.0.4
70
+ Requires-Dist: yangson>=1.6.7
71
+ Provides-Extra: dev
72
+ Requires-Dist: black>=23.0; extra == 'dev'
73
+ Requires-Dist: mypy>=1.5.0; extra == 'dev'
74
+ Requires-Dist: pytest-asyncio>=0.21.0; extra == 'dev'
75
+ Requires-Dist: pytest-cov>=4.0; extra == 'dev'
76
+ Requires-Dist: pytest-timeout>=2.4.0; extra == 'dev'
77
+ Requires-Dist: pytest>=7.0; extra == 'dev'
78
+ Requires-Dist: ruff>=0.1.0; extra == 'dev'
79
+ Provides-Extra: enterprise
80
+ Requires-Dist: pyjwt>=2.8.0; extra == 'enterprise'
81
+ Requires-Dist: tink>=1.14.1; extra == 'enterprise'
82
+ Provides-Extra: gnmi
83
+ Requires-Dist: pygnmi>=0.8.0; extra == 'gnmi'
84
+ Provides-Extra: ldap
85
+ Requires-Dist: ldap3>=2.9; extra == 'ldap'
86
+ Provides-Extra: netops
87
+ Description-Content-Type: text/markdown
88
+
89
+ <p align="center">
90
+ <img src="src/olav_logo.webp" alt="OLAV Logo" width="200">
91
+ </p>
92
+
93
+ <h1 align="center">OLAV 🐺</h1>
94
+
95
+ <p align="center">
96
+ <strong>Online Analytical Vertex for Agentic Operations</strong><br>
97
+ AI-native platform for autonomous infrastructure operations.
98
+ </p>
99
+
100
+ <p align="center">
101
+ <a href="">
102
+ <img src="https://img.shields.io/badge/version-v0.10.0-blue" alt="Version">
103
+ </a>
104
+ <a href="">
105
+ <img src="https://img.shields.io/badge/license-BSL--1.1-green" alt="License">
106
+ </a>
107
+ <a href="">
108
+ <img src="https://img.shields.io/badge/python-3.11+-yellow" alt="Python">
109
+ </a>
110
+ <a href="https://docs.olavai.com">
111
+ <img src="https://img.shields.io/badge/docs-docs.olavai.com-blue" alt="Docs">
112
+ </a>
113
+ <a href="https://discord.gg/AXnDtURJ">
114
+ <img src="https://img.shields.io/badge/Discord-join-5865F2?logo=discord&logoColor=white" alt="Discord">
115
+ </a>
116
+ </p>
117
+
118
+ <p align="center">
119
+ <a href="https://olavai.com">🌐 olavai.com</a> &nbsp;·&nbsp;
120
+ <a href="src/README_ZH.md">中文文档</a>
121
+ </p>
122
+
123
+ > Control your infrastructure with natural language. Connect any API, deploy specialized AI agents, orchestrate operational workflows — without writing SQL or memorizing CLI flags.
124
+
125
+ ```bash
126
+ olav "how many devices are online?"
127
+ olav "which BGP neighbors are down?"
128
+ olav --agent core "run a health check on all endpoints"
129
+ ```
130
+
131
+ [Quick Start](#quick-start) | [中文](src/README_ZH.md)
132
+
133
+ ---
134
+
135
+ ## Why OLAV?
136
+
137
+ ### API-as-Tool — Any API Becomes an Agent Tool in One Command
138
+
139
+ No code, no MCP servers. Register an OpenAPI service once, query it in natural language forever:
140
+
141
+ ```bash
142
+ olav registry register http://netbox.example.com/api/schema/
143
+ olav "how many devices are in rack A1?" # works immediately
144
+ ```
145
+
146
+ The Creator Agent can also generate editable Python `@tool` functions from any OpenAPI schema for deep customization.
147
+
148
+ ### Agent Harness — Four-Layer Execution Governance
149
+
150
+ Every Agent decision passes through a mandatory execution control layer:
151
+
152
+ ```
153
+ Layer 0: AAA Token/LDAP/OIDC auth → RBAC → full audit trail
154
+ Layer 1: Middleware HITL dangerous-command interception + memory injection
155
+ Layer 2: Sandbox Pre-scan → DuckDB read-only enforcement → network namespace isolation
156
+ Layer 3: Output Credential auto-redaction + SSE JSON encoding + HttpOnly cookies
157
+ ```
158
+
159
+ Hard constraints (DuckDB read-only) cannot be bypassed. Soft constraints (injection scanning, network isolation) are configurable.
160
+
161
+ ### Self-Improving Loop — Agents Get Better Over Time
162
+
163
+ ```
164
+ Use OLAV → audit log captures every tool call and error
165
+ → /trace-review extracts failure constraints → writes to LanceDB memory
166
+ → future runs recall constraints before acting → known pitfalls avoided
167
+ ```
168
+
169
+ Data-driven improvement, not manual prompt tuning.
170
+
171
+ ### Multi-Layer Cache — Measured 2000x+ Speedup
172
+
173
+ ```
174
+ Tier-0: SemanticCache (LanceDB vector similarity, ~10ms)
175
+ Tier-1: LLM SQLiteCache (exact prompt match, <1ms, 0 tokens)
176
+ Tier-2: LLM API call (real network request)
177
+ ```
178
+
179
+ Per-user isolation. Anthropic models automatically use prompt caching (system prompt billed once).
180
+
181
+ ### Federated Specialist Agents
182
+
183
+ Not one omniscient Agent — **multiple specialists collaborating**:
184
+
185
+ - Semantic router dispatches queries to the best-fit Agent based on `route_keywords`
186
+ - Each Agent holds only its own tools (least privilege)
187
+ - Per-Agent model assignment: cheap models for frequent queries, powerful models for complex analysis — 40-70% token cost reduction
188
+ - Hot-swappable Skills: `olav skill install` extends capabilities instantly
189
+
190
+ ### AAA — Authentication, Authorization, Audit
191
+
192
+ - **Auth**: none / token / LDAP / AD / OIDC; tokens stored as salted SHA256 hashes
193
+ - **RBAC**: 3 roles (admin/user/readonly) × 5 actions, fine-grained per Agent/Skill
194
+ - **Audit**: Every operation recorded to DuckDB (4 tables), SHA256 tamper-proofing (NIST AU-9), credentials auto-redacted
195
+
196
+ ### Full-Stack Observability — Audit as Data Asset
197
+
198
+ Audit logs are not just compliance — they're a **continuously growing data asset**:
199
+
200
+ - Query any dimension with DuckDB SQL (token usage, cache hit rate, tool call frequency, error patterns)
201
+ - Multi-user concurrent-safe (DuckDB atomic writes, each record tagged with `user_id`)
202
+
203
+ ---
204
+
205
+ ## Quick Start
206
+
207
+ === "pip install (recommended)"
208
+ ```bash
209
+ # 1. Install
210
+ pip install olav
211
+
212
+ # 2. Initialize project
213
+ olav init # creates .olav/ with config skeleton
214
+
215
+ # 3. Configure API key (edit the generated file)
216
+ # Set shared.api_key in .olav/config/api.json
217
+ # Or use environment variables:
218
+ export OLAV_LLM_API_KEY="sk-..." # your LLM provider API key
219
+
220
+ # 4. Connect a service and start querying
221
+ olav registry register http://netbox.example.com/api/schema/
222
+ olav "how many devices are in rack A1?"
223
+
224
+ # Or install a community skill
225
+ olav skill install https://github.com/olav-ai/skill-netbox
226
+ olav "list all sites in Europe"
227
+ ```
228
+
229
+ === "From source (development)"
230
+ ```bash
231
+ # 1. Clone and install
232
+ git clone https://github.com/olav-ai/olav.git && cd olav
233
+ uv sync
234
+
235
+ # 2. Initialize and configure
236
+ uv run olav init # creates .olav/ with config skeleton
237
+ # Edit .olav/config/api.json → set shared.api_key
238
+ # Or: export OLAV_LLM_API_KEY="sk-..."
239
+ uv run olav registry register http://netbox.example.com/api/schema/
240
+ uv run olav "how many devices are in rack A1?"
241
+ ```
242
+
243
+ ### Other ways to use
244
+
245
+ ```bash
246
+ olav # interactive TUI (multi-turn conversations)
247
+ olav service web start # web UI at http://localhost:2280
248
+ olav --agent core "run: df -h" # execute shell commands via Core Agent
249
+ ```
250
+
251
+ ---
252
+
253
+ ## Three Interfaces
254
+
255
+ | Interface | Command | Best For |
256
+ |-----------|---------|----------|
257
+ | **CLI** | `olav "your query"` | Scripting, one-off queries, CI/CD |
258
+ | **TUI** | `olav` | Multi-turn conversations, exploration |
259
+ | **Web UI** | `olav service web start` | Team sharing, browser access |
260
+
261
+ ---
262
+
263
+ ## Architecture
264
+
265
+ ```
266
+ User Query
267
+
268
+ Semantic Router → selects best Agent (or --agent override)
269
+
270
+ Agent Harness → AAA → Middleware → Sandbox
271
+
272
+ LLM + Tool Loop (calls tools, gets results, synthesizes response)
273
+
274
+ Response + Audit Log (automatic, every run)
275
+ ```
276
+
277
+ **Tech Stack**: LangChain + LangGraph + DeepAgents + DuckDB + LanceDB + FastAPI
278
+
279
+ ---
280
+
281
+ ## Repository Structure
282
+
283
+ ```
284
+ src/olav/ ← OLAV core platform (this repo)
285
+ src/README_ZH.md ← 中文文档
286
+ src/olav_logo.png ← Logo
287
+ .olav/workspace/ ← Platform agent definitions (config/ + core/)
288
+ .olav/config/ ← Runtime config (gitignored — contains API keys)
289
+ .olav/databases/ ← Runtime data (gitignored — audit logs, domain data)
290
+ ```
291
+
292
+ ---
293
+
294
+ ## Documentation
295
+
296
+ Documentation site: [docs.olavai.com](https://docs.olavai.com)
297
+
298
+ ---
299
+
300
+ ## License
301
+
302
+ [BSL-1.1](LICENSE) — Business Source License 1.1
303
+
304
+ ---
305
+
306
+ ## Community
307
+
308
+ <p align="center">
309
+ <strong>WeChat Official Account</strong><br>
310
+ <img src="src/wechat.jpeg" alt="WeChat QR Code" width="160">
311
+ </p>