factorly 0.1.10__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.
- factorly-0.1.10/PKG-INFO +88 -0
- factorly-0.1.10/README.md +70 -0
- factorly-0.1.10/factorly/__init__.py +3 -0
- factorly-0.1.10/factorly/__main__.py +5 -0
- factorly-0.1.10/factorly/cli.py +125 -0
- factorly-0.1.10/factorly.egg-info/PKG-INFO +88 -0
- factorly-0.1.10/factorly.egg-info/SOURCES.txt +10 -0
- factorly-0.1.10/factorly.egg-info/dependency_links.txt +1 -0
- factorly-0.1.10/factorly.egg-info/entry_points.txt +2 -0
- factorly-0.1.10/factorly.egg-info/top_level.txt +1 -0
- factorly-0.1.10/pyproject.toml +34 -0
- factorly-0.1.10/setup.cfg +4 -0
factorly-0.1.10/PKG-INFO
ADDED
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: factorly
|
|
3
|
+
Version: 0.1.10
|
|
4
|
+
Summary: Security and governance layer for AI agent tool access
|
|
5
|
+
License: MIT
|
|
6
|
+
Project-URL: Homepage, https://github.com/factorly-dev/factorly-cli
|
|
7
|
+
Project-URL: Documentation, https://github.com/factorly-dev/factorly-cli/tree/main/docs
|
|
8
|
+
Project-URL: Repository, https://github.com/factorly-dev/factorly-cli
|
|
9
|
+
Classifier: Development Status :: 4 - Beta
|
|
10
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
11
|
+
Classifier: Programming Language :: Python :: 3
|
|
12
|
+
Classifier: Topic :: Security
|
|
13
|
+
Classifier: Topic :: Software Development :: Libraries
|
|
14
|
+
Classifier: Environment :: Console
|
|
15
|
+
Classifier: Intended Audience :: Developers
|
|
16
|
+
Requires-Python: >=3.8
|
|
17
|
+
Description-Content-Type: text/markdown
|
|
18
|
+
|
|
19
|
+
```
|
|
20
|
+
░█▀▀░█▀█░█▀▀░▀█▀░█▀█░█▀▄░█░░█░█
|
|
21
|
+
░█▀▀░█▀█░█░░░░█░░█░█░█▀▄░█░░░█░
|
|
22
|
+
░▀░░░▀░▀░▀▀▀░░▀░░▀▀▀░▀░▀░▀▀▀░▀░
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
# Factorly
|
|
26
|
+
|
|
27
|
+
Your agent calls tools. Factorly holds the keys.
|
|
28
|
+
|
|
29
|
+
A security and governance layer between AI agents and the tools they use. REST APIs, CLI commands, MCP servers — one config, one audit log, one set of rules.
|
|
30
|
+
|
|
31
|
+
## Install
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
pip install factorly
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
Or with pipx:
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
pipx install factorly
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## Try It in 10 Seconds
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
# Run any command with compression + logging
|
|
47
|
+
factorly exec -- git status
|
|
48
|
+
|
|
49
|
+
# Wrap any MCP server with zero config
|
|
50
|
+
factorly wrap -- npx @modelcontextprotocol/server-everything
|
|
51
|
+
|
|
52
|
+
# Install a template for a service you use
|
|
53
|
+
factorly tools import templates github
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## Quick Start
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
factorly init # set up a project
|
|
60
|
+
factorly vault set GITHUB_TOKEN ghp_xxx # store a secret
|
|
61
|
+
factorly sync # connect to Claude Code / Cursor
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
## What You Get
|
|
65
|
+
|
|
66
|
+
- **Credential isolation** — secrets in encrypted vault, agent never sees them
|
|
67
|
+
- **Governance** — deny, confirm, rate limit, loop detection per tool
|
|
68
|
+
- **Audit log** — every call logged with params, response, and governance outcome
|
|
69
|
+
- **36 templates** — pre-built configs for GitHub, Slack, Stripe, Gmail, Linear, and more
|
|
70
|
+
- **Zero-config proxy** — `factorly wrap` and `factorly exec` add safety instantly
|
|
71
|
+
|
|
72
|
+
## Supported Platforms
|
|
73
|
+
|
|
74
|
+
| OS | Architecture |
|
|
75
|
+
|----|-------------|
|
|
76
|
+
| Linux | x64 |
|
|
77
|
+
| macOS | x64, arm64 |
|
|
78
|
+
| Windows | x64 |
|
|
79
|
+
|
|
80
|
+
The pip package downloads the pre-built Go binary for your platform on first run.
|
|
81
|
+
|
|
82
|
+
## Documentation
|
|
83
|
+
|
|
84
|
+
Full docs at [github.com/factorly-dev/factorly-cli](https://github.com/factorly-dev/factorly-cli)
|
|
85
|
+
|
|
86
|
+
## License
|
|
87
|
+
|
|
88
|
+
MIT
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
```
|
|
2
|
+
░█▀▀░█▀█░█▀▀░▀█▀░█▀█░█▀▄░█░░█░█
|
|
3
|
+
░█▀▀░█▀█░█░░░░█░░█░█░█▀▄░█░░░█░
|
|
4
|
+
░▀░░░▀░▀░▀▀▀░░▀░░▀▀▀░▀░▀░▀▀▀░▀░
|
|
5
|
+
```
|
|
6
|
+
|
|
7
|
+
# Factorly
|
|
8
|
+
|
|
9
|
+
Your agent calls tools. Factorly holds the keys.
|
|
10
|
+
|
|
11
|
+
A security and governance layer between AI agents and the tools they use. REST APIs, CLI commands, MCP servers — one config, one audit log, one set of rules.
|
|
12
|
+
|
|
13
|
+
## Install
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
pip install factorly
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
Or with pipx:
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
pipx install factorly
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Try It in 10 Seconds
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
# Run any command with compression + logging
|
|
29
|
+
factorly exec -- git status
|
|
30
|
+
|
|
31
|
+
# Wrap any MCP server with zero config
|
|
32
|
+
factorly wrap -- npx @modelcontextprotocol/server-everything
|
|
33
|
+
|
|
34
|
+
# Install a template for a service you use
|
|
35
|
+
factorly tools import templates github
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## Quick Start
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
factorly init # set up a project
|
|
42
|
+
factorly vault set GITHUB_TOKEN ghp_xxx # store a secret
|
|
43
|
+
factorly sync # connect to Claude Code / Cursor
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## What You Get
|
|
47
|
+
|
|
48
|
+
- **Credential isolation** — secrets in encrypted vault, agent never sees them
|
|
49
|
+
- **Governance** — deny, confirm, rate limit, loop detection per tool
|
|
50
|
+
- **Audit log** — every call logged with params, response, and governance outcome
|
|
51
|
+
- **36 templates** — pre-built configs for GitHub, Slack, Stripe, Gmail, Linear, and more
|
|
52
|
+
- **Zero-config proxy** — `factorly wrap` and `factorly exec` add safety instantly
|
|
53
|
+
|
|
54
|
+
## Supported Platforms
|
|
55
|
+
|
|
56
|
+
| OS | Architecture |
|
|
57
|
+
|----|-------------|
|
|
58
|
+
| Linux | x64 |
|
|
59
|
+
| macOS | x64, arm64 |
|
|
60
|
+
| Windows | x64 |
|
|
61
|
+
|
|
62
|
+
The pip package downloads the pre-built Go binary for your platform on first run.
|
|
63
|
+
|
|
64
|
+
## Documentation
|
|
65
|
+
|
|
66
|
+
Full docs at [github.com/factorly-dev/factorly-cli](https://github.com/factorly-dev/factorly-cli)
|
|
67
|
+
|
|
68
|
+
## License
|
|
69
|
+
|
|
70
|
+
MIT
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
"""Factorly CLI wrapper — downloads and runs the Go binary."""
|
|
2
|
+
|
|
3
|
+
import os
|
|
4
|
+
import platform
|
|
5
|
+
import stat
|
|
6
|
+
import subprocess
|
|
7
|
+
import sys
|
|
8
|
+
import urllib.request
|
|
9
|
+
|
|
10
|
+
from factorly import __version__
|
|
11
|
+
|
|
12
|
+
REPO = "factorly-dev/factorly-cli"
|
|
13
|
+
|
|
14
|
+
PLATFORM_MAP = {
|
|
15
|
+
"Darwin": "darwin",
|
|
16
|
+
"Linux": "linux",
|
|
17
|
+
"Windows": "windows",
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
ARCH_MAP = {
|
|
21
|
+
"x86_64": "amd64",
|
|
22
|
+
"AMD64": "amd64",
|
|
23
|
+
"aarch64": "arm64",
|
|
24
|
+
"arm64": "arm64",
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def get_bin_dir():
|
|
29
|
+
"""Return the directory where the binary is stored."""
|
|
30
|
+
return os.path.join(os.path.dirname(os.path.abspath(__file__)), "bin")
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def get_binary_path():
|
|
34
|
+
"""Return the full path to the factorly binary."""
|
|
35
|
+
ext = ".exe" if platform.system() == "Windows" else ""
|
|
36
|
+
return os.path.join(get_bin_dir(), f"factorly{ext}")
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def get_binary_name():
|
|
40
|
+
"""Return the platform-specific binary name for download."""
|
|
41
|
+
plat = PLATFORM_MAP.get(platform.system())
|
|
42
|
+
arch = ARCH_MAP.get(platform.machine())
|
|
43
|
+
|
|
44
|
+
if not plat:
|
|
45
|
+
print(f"Unsupported platform: {platform.system()}", file=sys.stderr)
|
|
46
|
+
sys.exit(1)
|
|
47
|
+
if not arch:
|
|
48
|
+
print(f"Unsupported architecture: {platform.machine()}", file=sys.stderr)
|
|
49
|
+
sys.exit(1)
|
|
50
|
+
|
|
51
|
+
ext = ".exe" if platform.system() == "Windows" else ""
|
|
52
|
+
return f"factorly-{plat}-{arch}{ext}"
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
def is_installed():
|
|
56
|
+
"""Check if the correct version is already installed."""
|
|
57
|
+
binary = get_binary_path()
|
|
58
|
+
if not os.path.exists(binary):
|
|
59
|
+
return False
|
|
60
|
+
try:
|
|
61
|
+
result = subprocess.run(
|
|
62
|
+
[binary, "version"],
|
|
63
|
+
capture_output=True,
|
|
64
|
+
text=True,
|
|
65
|
+
timeout=5,
|
|
66
|
+
)
|
|
67
|
+
return __version__ in result.stdout
|
|
68
|
+
except Exception:
|
|
69
|
+
return False
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
def download_binary():
|
|
73
|
+
"""Download the factorly binary from GitHub Releases."""
|
|
74
|
+
binary_name = get_binary_name()
|
|
75
|
+
url = f"https://github.com/{REPO}/releases/download/v{__version__}/{binary_name}"
|
|
76
|
+
|
|
77
|
+
print(f"Downloading factorly {__version__} for {platform.system()}/{platform.machine()}...")
|
|
78
|
+
print(f" {url}")
|
|
79
|
+
|
|
80
|
+
bin_dir = get_bin_dir()
|
|
81
|
+
os.makedirs(bin_dir, exist_ok=True)
|
|
82
|
+
binary_path = get_binary_path()
|
|
83
|
+
|
|
84
|
+
try:
|
|
85
|
+
req = urllib.request.Request(url, headers={"User-Agent": "factorly-pip-installer"})
|
|
86
|
+
with urllib.request.urlopen(req) as response:
|
|
87
|
+
data = response.read()
|
|
88
|
+
except urllib.error.HTTPError as e:
|
|
89
|
+
print(f"Download failed: HTTP {e.code}", file=sys.stderr)
|
|
90
|
+
print(f"", file=sys.stderr)
|
|
91
|
+
print(f"Install manually from:", file=sys.stderr)
|
|
92
|
+
print(f" https://github.com/{REPO}/releases/tag/v{__version__}", file=sys.stderr)
|
|
93
|
+
sys.exit(1)
|
|
94
|
+
except Exception as e:
|
|
95
|
+
print(f"Download failed: {e}", file=sys.stderr)
|
|
96
|
+
sys.exit(1)
|
|
97
|
+
|
|
98
|
+
with open(binary_path, "wb") as f:
|
|
99
|
+
f.write(data)
|
|
100
|
+
|
|
101
|
+
# Make executable
|
|
102
|
+
if platform.system() != "Windows":
|
|
103
|
+
st = os.stat(binary_path)
|
|
104
|
+
os.chmod(binary_path, st.st_mode | stat.S_IEXEC | stat.S_IXGRP | stat.S_IXOTH)
|
|
105
|
+
|
|
106
|
+
print(f"Installed factorly to {binary_path}")
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
def main():
|
|
110
|
+
"""Entry point: ensure binary exists, then run it."""
|
|
111
|
+
if not is_installed():
|
|
112
|
+
download_binary()
|
|
113
|
+
|
|
114
|
+
binary = get_binary_path()
|
|
115
|
+
if not os.path.exists(binary):
|
|
116
|
+
print("factorly binary not found after download attempt.", file=sys.stderr)
|
|
117
|
+
print("Run: pip install --force-reinstall factorly", file=sys.stderr)
|
|
118
|
+
sys.exit(127)
|
|
119
|
+
|
|
120
|
+
result = subprocess.run([binary] + sys.argv[1:])
|
|
121
|
+
sys.exit(result.returncode)
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
if __name__ == "__main__":
|
|
125
|
+
main()
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: factorly
|
|
3
|
+
Version: 0.1.10
|
|
4
|
+
Summary: Security and governance layer for AI agent tool access
|
|
5
|
+
License: MIT
|
|
6
|
+
Project-URL: Homepage, https://github.com/factorly-dev/factorly-cli
|
|
7
|
+
Project-URL: Documentation, https://github.com/factorly-dev/factorly-cli/tree/main/docs
|
|
8
|
+
Project-URL: Repository, https://github.com/factorly-dev/factorly-cli
|
|
9
|
+
Classifier: Development Status :: 4 - Beta
|
|
10
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
11
|
+
Classifier: Programming Language :: Python :: 3
|
|
12
|
+
Classifier: Topic :: Security
|
|
13
|
+
Classifier: Topic :: Software Development :: Libraries
|
|
14
|
+
Classifier: Environment :: Console
|
|
15
|
+
Classifier: Intended Audience :: Developers
|
|
16
|
+
Requires-Python: >=3.8
|
|
17
|
+
Description-Content-Type: text/markdown
|
|
18
|
+
|
|
19
|
+
```
|
|
20
|
+
░█▀▀░█▀█░█▀▀░▀█▀░█▀█░█▀▄░█░░█░█
|
|
21
|
+
░█▀▀░█▀█░█░░░░█░░█░█░█▀▄░█░░░█░
|
|
22
|
+
░▀░░░▀░▀░▀▀▀░░▀░░▀▀▀░▀░▀░▀▀▀░▀░
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
# Factorly
|
|
26
|
+
|
|
27
|
+
Your agent calls tools. Factorly holds the keys.
|
|
28
|
+
|
|
29
|
+
A security and governance layer between AI agents and the tools they use. REST APIs, CLI commands, MCP servers — one config, one audit log, one set of rules.
|
|
30
|
+
|
|
31
|
+
## Install
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
pip install factorly
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
Or with pipx:
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
pipx install factorly
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## Try It in 10 Seconds
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
# Run any command with compression + logging
|
|
47
|
+
factorly exec -- git status
|
|
48
|
+
|
|
49
|
+
# Wrap any MCP server with zero config
|
|
50
|
+
factorly wrap -- npx @modelcontextprotocol/server-everything
|
|
51
|
+
|
|
52
|
+
# Install a template for a service you use
|
|
53
|
+
factorly tools import templates github
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## Quick Start
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
factorly init # set up a project
|
|
60
|
+
factorly vault set GITHUB_TOKEN ghp_xxx # store a secret
|
|
61
|
+
factorly sync # connect to Claude Code / Cursor
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
## What You Get
|
|
65
|
+
|
|
66
|
+
- **Credential isolation** — secrets in encrypted vault, agent never sees them
|
|
67
|
+
- **Governance** — deny, confirm, rate limit, loop detection per tool
|
|
68
|
+
- **Audit log** — every call logged with params, response, and governance outcome
|
|
69
|
+
- **36 templates** — pre-built configs for GitHub, Slack, Stripe, Gmail, Linear, and more
|
|
70
|
+
- **Zero-config proxy** — `factorly wrap` and `factorly exec` add safety instantly
|
|
71
|
+
|
|
72
|
+
## Supported Platforms
|
|
73
|
+
|
|
74
|
+
| OS | Architecture |
|
|
75
|
+
|----|-------------|
|
|
76
|
+
| Linux | x64 |
|
|
77
|
+
| macOS | x64, arm64 |
|
|
78
|
+
| Windows | x64 |
|
|
79
|
+
|
|
80
|
+
The pip package downloads the pre-built Go binary for your platform on first run.
|
|
81
|
+
|
|
82
|
+
## Documentation
|
|
83
|
+
|
|
84
|
+
Full docs at [github.com/factorly-dev/factorly-cli](https://github.com/factorly-dev/factorly-cli)
|
|
85
|
+
|
|
86
|
+
## License
|
|
87
|
+
|
|
88
|
+
MIT
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
README.md
|
|
2
|
+
pyproject.toml
|
|
3
|
+
factorly/__init__.py
|
|
4
|
+
factorly/__main__.py
|
|
5
|
+
factorly/cli.py
|
|
6
|
+
factorly.egg-info/PKG-INFO
|
|
7
|
+
factorly.egg-info/SOURCES.txt
|
|
8
|
+
factorly.egg-info/dependency_links.txt
|
|
9
|
+
factorly.egg-info/entry_points.txt
|
|
10
|
+
factorly.egg-info/top_level.txt
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
factorly
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["setuptools>=64"]
|
|
3
|
+
build-backend = "setuptools.build_meta"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "factorly"
|
|
7
|
+
version = "0.1.10"
|
|
8
|
+
description = "Security and governance layer for AI agent tool access"
|
|
9
|
+
readme = "README.md"
|
|
10
|
+
license = {text = "MIT"}
|
|
11
|
+
requires-python = ">=3.8"
|
|
12
|
+
classifiers = [
|
|
13
|
+
"Development Status :: 4 - Beta",
|
|
14
|
+
"License :: OSI Approved :: MIT License",
|
|
15
|
+
"Programming Language :: Python :: 3",
|
|
16
|
+
"Topic :: Security",
|
|
17
|
+
"Topic :: Software Development :: Libraries",
|
|
18
|
+
"Environment :: Console",
|
|
19
|
+
"Intended Audience :: Developers",
|
|
20
|
+
]
|
|
21
|
+
|
|
22
|
+
[project.scripts]
|
|
23
|
+
factorly = "factorly.cli:main"
|
|
24
|
+
|
|
25
|
+
[project.urls]
|
|
26
|
+
Homepage = "https://github.com/factorly-dev/factorly-cli"
|
|
27
|
+
Documentation = "https://github.com/factorly-dev/factorly-cli/tree/main/docs"
|
|
28
|
+
Repository = "https://github.com/factorly-dev/factorly-cli"
|
|
29
|
+
|
|
30
|
+
[tool.setuptools.packages.find]
|
|
31
|
+
include = ["factorly*"]
|
|
32
|
+
|
|
33
|
+
[tool.setuptools.package-data]
|
|
34
|
+
factorly = ["bin/*"]
|