lainux 0.1.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- lainux-0.1.0.dist-info/METADATA +76 -0
- lainux-0.1.0.dist-info/RECORD +6 -0
- lainux-0.1.0.dist-info/WHEEL +5 -0
- lainux-0.1.0.dist-info/entry_points.txt +2 -0
- lainux-0.1.0.dist-info/top_level.txt +1 -0
- lainux.py +73 -0
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: lainux
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: LAInux -- Linux, built for AI agents. Trust enforcement at the OS level.
|
|
5
|
+
Home-page: https://lainux.co.uk
|
|
6
|
+
Author: Raza Sharif
|
|
7
|
+
Author-email: contact@agentsign.dev
|
|
8
|
+
License: BUSL-1.1
|
|
9
|
+
Project-URL: Homepage, https://lainux.co.uk
|
|
10
|
+
Project-URL: Source, https://github.com/razashariff/agentlinux
|
|
11
|
+
Project-URL: Company, https://cybersecai.co.uk
|
|
12
|
+
Keywords: lainux ai agents security trust os linux mcp agentsign cybersecai
|
|
13
|
+
Classifier: Development Status :: 2 - Pre-Alpha
|
|
14
|
+
Classifier: Intended Audience :: Developers
|
|
15
|
+
Classifier: Topic :: Security
|
|
16
|
+
Classifier: Topic :: System :: Operating System
|
|
17
|
+
Classifier: Programming Language :: Python :: 3
|
|
18
|
+
Requires-Python: >=3.8
|
|
19
|
+
Description-Content-Type: text/markdown
|
|
20
|
+
Dynamic: author
|
|
21
|
+
Dynamic: author-email
|
|
22
|
+
Dynamic: classifier
|
|
23
|
+
Dynamic: description
|
|
24
|
+
Dynamic: description-content-type
|
|
25
|
+
Dynamic: home-page
|
|
26
|
+
Dynamic: keywords
|
|
27
|
+
Dynamic: license
|
|
28
|
+
Dynamic: project-url
|
|
29
|
+
Dynamic: requires-python
|
|
30
|
+
Dynamic: summary
|
|
31
|
+
|
|
32
|
+
# LAInux
|
|
33
|
+
|
|
34
|
+
**Linux, built for AI agents.**
|
|
35
|
+
|
|
36
|
+
Trust enforcement at the OS level. Not as a library. Not as middleware. As the operating system itself.
|
|
37
|
+
|
|
38
|
+
- Auto identity -- every agent gets a key pair at process creation
|
|
39
|
+
- Per-operation signing -- every outbound request is signed
|
|
40
|
+
- Trust-gated networking -- untrusted destinations are blocked
|
|
41
|
+
- Data integrity -- model files and RAG documents verified at read time
|
|
42
|
+
- Tamper-evident audit -- hash-chained log of every operation
|
|
43
|
+
|
|
44
|
+
The OS is coming. The components are live today.
|
|
45
|
+
|
|
46
|
+
## Install
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
pip install lainux
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
## Usage
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
# Fetch a URL
|
|
56
|
+
lainux https://example.com
|
|
57
|
+
|
|
58
|
+
# Check trust level of an MCP server
|
|
59
|
+
lainux --trust stripe-mcps
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## Components (live now)
|
|
63
|
+
|
|
64
|
+
- [mcp-secure](https://www.npmjs.com/package/mcp-secure) -- per-message ECDSA signing
|
|
65
|
+
- [agentsign](https://www.npmjs.com/package/agentsign) -- cryptographic agent identity
|
|
66
|
+
- [model-secure](https://www.npmjs.com/package/model-secure) -- AI model file signing
|
|
67
|
+
- [AgenticSearch](https://agentsearch.cybersecai.co.uk) -- trust-scored search engine
|
|
68
|
+
|
|
69
|
+
## Links
|
|
70
|
+
|
|
71
|
+
- **Website**: [lainux.co.uk](https://lainux.co.uk)
|
|
72
|
+
- **IETF**: [draft-sharif-mcps-secure-mcp](https://datatracker.ietf.org/doc/draft-sharif-mcps-secure-mcp/)
|
|
73
|
+
- **OWASP**: [MCP Security Cheat Sheet](https://cheatsheetseries.owasp.org/cheatsheets/MCP_Security_Cheat_Sheet.html)
|
|
74
|
+
|
|
75
|
+
Patent pending. (c) CyberSecAI Ltd.
|
|
76
|
+
contact@agentsign.dev | [cybersecai.co.uk](https://cybersecai.co.uk)
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
lainux.py,sha256=gVvWhmFOyLSIpmk5_LL_H_08S0dzpAVfD7QCgEJZbUE,2349
|
|
2
|
+
lainux-0.1.0.dist-info/METADATA,sha256=Fn5EBHKV-Je7c0FOxznIAiBk0kTv4OyRWzUs28VKgHY,2441
|
|
3
|
+
lainux-0.1.0.dist-info/WHEEL,sha256=aeYiig01lYGDzBgS8HxWXOg3uV61G9ijOsup-k9o1sk,91
|
|
4
|
+
lainux-0.1.0.dist-info/entry_points.txt,sha256=unbmvocAxnx9UuxxeU8LLdJ0fl3Zd0HUSQ1vpu3_PtE,39
|
|
5
|
+
lainux-0.1.0.dist-info/top_level.txt,sha256=Xj6nJQFMxwlhDZN_iETylkFYKijCacFdQJlLmKmVgC4,7
|
|
6
|
+
lainux-0.1.0.dist-info/RECORD,,
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
lainux
|
lainux.py
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"""LAInux -- Linux, built for AI agents. Trust enforcement at the OS level."""
|
|
2
|
+
|
|
3
|
+
import sys
|
|
4
|
+
import json
|
|
5
|
+
import urllib.request
|
|
6
|
+
|
|
7
|
+
BANNER = r"""
|
|
8
|
+
_ _ ___
|
|
9
|
+
| | / \ |_ _|_ __ _ ___ __
|
|
10
|
+
| | / _ \ | || '_ \| | | \ \/ /
|
|
11
|
+
| |___/ ___ \ | || | | | |_| |> <
|
|
12
|
+
|_____/_/ \_\___|_| |_|\__,_/_/\_\
|
|
13
|
+
|
|
14
|
+
Linux, built for AI agents.
|
|
15
|
+
Trust enforcement at the OS level.
|
|
16
|
+
|
|
17
|
+
(c) CyberSecAI Ltd. Patent pending.
|
|
18
|
+
https://lainux.co.uk
|
|
19
|
+
contact@agentsign.dev
|
|
20
|
+
"""
|
|
21
|
+
|
|
22
|
+
def fetch(url, timeout=5):
|
|
23
|
+
req = urllib.request.Request(url, headers={'User-Agent': 'LAInux/0.1'})
|
|
24
|
+
with urllib.request.urlopen(req, timeout=timeout) as r:
|
|
25
|
+
return r.status, r.read().decode('utf-8', errors='replace')
|
|
26
|
+
|
|
27
|
+
def main():
|
|
28
|
+
print(BANNER)
|
|
29
|
+
|
|
30
|
+
args = sys.argv[1:]
|
|
31
|
+
|
|
32
|
+
if not args or args[0] in ('--help', '-h'):
|
|
33
|
+
print(' Usage: lainux <url>')
|
|
34
|
+
print(' lainux --trust <mcp-server-name>')
|
|
35
|
+
print(' lainux --version\n')
|
|
36
|
+
print(' Examples:')
|
|
37
|
+
print(' lainux https://example.com')
|
|
38
|
+
print(' lainux --trust stripe-mcps\n')
|
|
39
|
+
return
|
|
40
|
+
|
|
41
|
+
if args[0] in ('--version', '-v'):
|
|
42
|
+
print(' LAInux 0.1.0')
|
|
43
|
+
print(' The OS is coming. The components are live.\n')
|
|
44
|
+
return
|
|
45
|
+
|
|
46
|
+
if args[0] == '--trust':
|
|
47
|
+
if len(args) < 2:
|
|
48
|
+
print(' Usage: lainux --trust <mcp-server-name>\n')
|
|
49
|
+
return
|
|
50
|
+
target = args[1]
|
|
51
|
+
print(f' Checking trust for: {target}')
|
|
52
|
+
try:
|
|
53
|
+
status, body = fetch(f'https://agentsearch.cybersecai.co.uk/api/warnings?sourceId={urllib.request.quote(target)}')
|
|
54
|
+
data = json.loads(body)
|
|
55
|
+
print(f' Trust Level: {data.get("trustLevel", "UNKNOWN")}')
|
|
56
|
+
print(f' Trust Score: {data.get("trustScore", 0)}/100')
|
|
57
|
+
print(f' Warnings: {len(data.get("warnings", []))}')
|
|
58
|
+
print(f' Has Warnings: {data.get("hasWarnings", False)}\n')
|
|
59
|
+
except Exception as e:
|
|
60
|
+
print(f' Error: {e}\n')
|
|
61
|
+
return
|
|
62
|
+
|
|
63
|
+
url = args[0] if args[0].startswith('http') else 'https://' + args[0]
|
|
64
|
+
print(f' GET {url}\n')
|
|
65
|
+
try:
|
|
66
|
+
status, body = fetch(url)
|
|
67
|
+
print(f' Status: {status}')
|
|
68
|
+
print(f' Body: {body[:500]}{"..." if len(body) > 500 else ""}\n')
|
|
69
|
+
except Exception as e:
|
|
70
|
+
print(f' Error: {e}\n')
|
|
71
|
+
|
|
72
|
+
if __name__ == '__main__':
|
|
73
|
+
main()
|