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.
- olav-0.10.0/.gitignore +126 -0
- olav-0.10.0/LICENSE +147 -0
- olav-0.10.0/PKG-INFO +311 -0
- olav-0.10.0/README.md +223 -0
- olav-0.10.0/pyproject.toml +301 -0
- olav-0.10.0/src/olav/__init__.py +38 -0
- olav-0.10.0/src/olav/__main__.py +14 -0
- olav-0.10.0/src/olav/agents/__init__.py +12 -0
- olav-0.10.0/src/olav/agents/_deepagents_bridge.py +164 -0
- olav-0.10.0/src/olav/agents/agent.py +574 -0
- olav-0.10.0/src/olav/agents/delegate_tool.py +87 -0
- olav-0.10.0/src/olav/agents/query_runner.py +326 -0
- olav-0.10.0/src/olav/agents/remote_subagents.py +114 -0
- olav-0.10.0/src/olav/api/__init__.py +1 -0
- olav-0.10.0/src/olav/api/server.py +458 -0
- olav-0.10.0/src/olav/api/static/index.html +515 -0
- olav-0.10.0/src/olav/api/static/login.html +65 -0
- olav-0.10.0/src/olav/cli/__init__.py +33 -0
- olav-0.10.0/src/olav/cli/admin.py +495 -0
- olav-0.10.0/src/olav/cli/banner.py +64 -0
- olav-0.10.0/src/olav/cli/commands/__init__.py +5 -0
- olav-0.10.0/src/olav/cli/commands/admin_users.py +208 -0
- olav-0.10.0/src/olav/cli/commands/base.py +91 -0
- olav-0.10.0/src/olav/cli/commands/builtin.py +395 -0
- olav-0.10.0/src/olav/cli/commands/config_evolve.py +350 -0
- olav-0.10.0/src/olav/cli/commands/export.py +216 -0
- olav-0.10.0/src/olav/cli/commands/init.py +189 -0
- olav-0.10.0/src/olav/cli/commands/registry.py +348 -0
- olav-0.10.0/src/olav/cli/commands/service.py +272 -0
- olav-0.10.0/src/olav/cli/commands/service_registry.py +164 -0
- olav-0.10.0/src/olav/cli/commands/services/__init__.py +5 -0
- olav-0.10.0/src/olav/cli/commands/services/daemon_svc.py +148 -0
- olav-0.10.0/src/olav/cli/commands/services/logs.py +320 -0
- olav-0.10.0/src/olav/cli/commands/services/web.py +242 -0
- olav-0.10.0/src/olav/cli/commands/shell_runner.py +181 -0
- olav-0.10.0/src/olav/cli/commands/skill.py +540 -0
- olav-0.10.0/src/olav/cli/commands/trace_review.py +131 -0
- olav-0.10.0/src/olav/cli/commands/workspace.py +458 -0
- olav-0.10.0/src/olav/cli/daemon.py +271 -0
- olav-0.10.0/src/olav/cli/display.py +213 -0
- olav-0.10.0/src/olav/cli/input_parser.py +60 -0
- olav-0.10.0/src/olav/cli/log_cmd.py +127 -0
- olav-0.10.0/src/olav/cli/main.py +1497 -0
- olav-0.10.0/src/olav/core/__init__.py +46 -0
- olav-0.10.0/src/olav/core/agent_registry.py +310 -0
- olav-0.10.0/src/olav/core/api_action_service.py +225 -0
- olav-0.10.0/src/olav/core/api_operation_policy.py +164 -0
- olav-0.10.0/src/olav/core/api_registry.py +697 -0
- olav-0.10.0/src/olav/core/audit_logger.py +147 -0
- olav-0.10.0/src/olav/core/audit_recorder.py +458 -0
- olav-0.10.0/src/olav/core/auth/__init__.py +11 -0
- olav-0.10.0/src/olav/core/auth/authz.py +233 -0
- olav-0.10.0/src/olav/core/auth/identity.py +31 -0
- olav-0.10.0/src/olav/core/auth/ldap_provider.py +119 -0
- olav-0.10.0/src/olav/core/auth/os_identity.py +22 -0
- olav-0.10.0/src/olav/core/auth/provider.py +64 -0
- olav-0.10.0/src/olav/core/auth/server_token.py +97 -0
- olav-0.10.0/src/olav/core/auth/token.py +143 -0
- olav-0.10.0/src/olav/core/checkpointer.py +173 -0
- olav-0.10.0/src/olav/core/config.py +814 -0
- olav-0.10.0/src/olav/core/database.py +109 -0
- olav-0.10.0/src/olav/core/defaults.py +110 -0
- olav-0.10.0/src/olav/core/embedder.py +126 -0
- olav-0.10.0/src/olav/core/hooks.py +147 -0
- olav-0.10.0/src/olav/core/ingest_manager.py +200 -0
- olav-0.10.0/src/olav/core/knowledge/__init__.py +426 -0
- olav-0.10.0/src/olav/core/llm.py +192 -0
- olav-0.10.0/src/olav/core/memory/__init__.py +1014 -0
- olav-0.10.0/src/olav/core/memory/guardrails.py +289 -0
- olav-0.10.0/src/olav/core/memory/langgraph_adapter.py +267 -0
- olav-0.10.0/src/olav/core/memory/middleware.py +541 -0
- olav-0.10.0/src/olav/core/migrations/__init__.py +1 -0
- olav-0.10.0/src/olav/core/migrations/v0_12_users.py +57 -0
- olav-0.10.0/src/olav/core/migrations/v0_13_rbac.py +65 -0
- olav-0.10.0/src/olav/core/platform_registry.py +157 -0
- olav-0.10.0/src/olav/core/router.py +476 -0
- olav-0.10.0/src/olav/core/schema_mutation_service.py +438 -0
- olav-0.10.0/src/olav/core/tool_discovery.py +197 -0
- olav-0.10.0/src/olav/core/utils.py +119 -0
- olav-0.10.0/src/olav/core/version.py +291 -0
- olav-0.10.0/src/olav/core/watermark.py +96 -0
- olav-0.10.0/src/olav/core/workspace.py +167 -0
- olav-0.10.0/src/olav/data/__init__.py +1 -0
- olav-0.10.0/src/olav/data/yang/__init__.py +1 -0
- olav-0.10.0/src/olav/data/yang/openconfig_reference.txt +74 -0
- olav-0.10.0/src/olav/lib/__init__.py +1 -0
- olav-0.10.0/src/olav/platform/__init__.py +34 -0
- olav-0.10.0/src/olav/platform/agent_base.py +119 -0
- olav-0.10.0/src/olav/platform/execution/__init__.py +26 -0
- olav-0.10.0/src/olav/platform/execution/base.py +101 -0
- olav-0.10.0/src/olav/platform/execution/docker_compose.py +52 -0
- olav-0.10.0/src/olav/platform/execution/local.py +82 -0
- olav-0.10.0/src/olav/platform/execution/ssh.py +141 -0
- olav-0.10.0/src/olav/platform/extensions.py +73 -0
- olav-0.10.0/src/olav/platform/ingest_base.py +196 -0
- olav-0.10.0/src/olav/platform/safety/__init__.py +17 -0
- olav-0.10.0/src/olav/platform/safety/approval.py +277 -0
- olav-0.10.0/src/olav/platform/safety/injection_scanner.py +224 -0
- olav-0.10.0/src/olav/platform/safety/patterns.py +36 -0
- olav-0.10.0/src/olav/platform/safety/permissions.py +41 -0
- olav-0.10.0/src/olav/platform/safety/sandbox_guard.py +166 -0
- olav-0.10.0/src/olav/platform/sandbox.py +232 -0
- olav-0.10.0/src/olav/platform/services/__init__.py +21 -0
- olav-0.10.0/src/olav/platform/services/client.py +221 -0
- olav-0.10.0/src/olav/platform/services/registry.py +270 -0
- olav-0.10.0/src/olav/platform/services/response_extractor.py +226 -0
- olav-0.10.0/src/olav/platform/services/tool_generator.py +486 -0
- olav-0.10.0/src/olav/plugins/__init__.py +57 -0
- olav-0.10.0/src/olav/plugins/base.py +49 -0
- olav-0.10.0/src/olav/plugins/callbacks/__init__.py +1 -0
- olav-0.10.0/src/olav/plugins/callbacks/audit.py +342 -0
- olav-0.10.0/src/olav/plugins/middleware/__init__.py +1 -0
- olav-0.10.0/src/olav/plugins/middleware/guardrails.py +98 -0
- olav-0.10.0/src/olav/plugins/middleware/memory_capture.py +94 -0
- olav-0.10.0/src/olav/plugins/middleware/memory_recall.py +67 -0
- olav-0.10.0/src/olav/plugins/middleware/safety.py +224 -0
- olav-0.10.0/src/olav/plugins/registry.py +50 -0
- olav-0.10.0/src/olav/py.typed +0 -0
- olav-0.10.0/src/olav/services/__init__.py +1 -0
- olav-0.10.0/src/olav/services/netconf_collector.py +281 -0
- 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> ·
|
|
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>
|