getbased-agent-stack 0.5.1__tar.gz → 0.5.3__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.
- getbased_agent_stack-0.5.3/LICENSE +20 -0
- {getbased_agent_stack-0.5.1 → getbased_agent_stack-0.5.3}/PKG-INFO +39 -15
- getbased_agent_stack-0.5.1/src/getbased_agent_stack.egg-info/PKG-INFO → getbased_agent_stack-0.5.3/README.md +33 -28
- {getbased_agent_stack-0.5.1 → getbased_agent_stack-0.5.3}/pyproject.toml +6 -6
- {getbased_agent_stack-0.5.1 → getbased_agent_stack-0.5.3}/src/getbased_agent_stack/__init__.py +1 -1
- {getbased_agent_stack-0.5.1 → getbased_agent_stack-0.5.3}/src/getbased_agent_stack/cli.py +21 -3
- {getbased_agent_stack-0.5.1 → getbased_agent_stack-0.5.3}/src/getbased_agent_stack/mcp_configs.py +4 -3
- getbased_agent_stack-0.5.1/README.md → getbased_agent_stack-0.5.3/src/getbased_agent_stack.egg-info/PKG-INFO +52 -9
- getbased_agent_stack-0.5.3/src/getbased_agent_stack.egg-info/requires.txt +11 -0
- {getbased_agent_stack-0.5.1 → getbased_agent_stack-0.5.3}/tests/test_cli.py +2 -0
- getbased_agent_stack-0.5.1/LICENSE +0 -22
- getbased_agent_stack-0.5.1/src/getbased_agent_stack.egg-info/requires.txt +0 -11
- {getbased_agent_stack-0.5.1 → getbased_agent_stack-0.5.3}/setup.cfg +0 -0
- {getbased_agent_stack-0.5.1 → getbased_agent_stack-0.5.3}/src/getbased_agent_stack/env_file.py +0 -0
- {getbased_agent_stack-0.5.1 → getbased_agent_stack-0.5.3}/src/getbased_agent_stack/systemd/getbased-dashboard.service +0 -0
- {getbased_agent_stack-0.5.1 → getbased_agent_stack-0.5.3}/src/getbased_agent_stack/systemd/getbased-rag.service +0 -0
- {getbased_agent_stack-0.5.1 → getbased_agent_stack-0.5.3}/src/getbased_agent_stack/units.py +0 -0
- {getbased_agent_stack-0.5.1 → getbased_agent_stack-0.5.3}/src/getbased_agent_stack.egg-info/SOURCES.txt +0 -0
- {getbased_agent_stack-0.5.1 → getbased_agent_stack-0.5.3}/src/getbased_agent_stack.egg-info/dependency_links.txt +0 -0
- {getbased_agent_stack-0.5.1 → getbased_agent_stack-0.5.3}/src/getbased_agent_stack.egg-info/entry_points.txt +0 -0
- {getbased_agent_stack-0.5.1 → getbased_agent_stack-0.5.3}/src/getbased_agent_stack.egg-info/top_level.txt +0 -0
- {getbased_agent_stack-0.5.1 → getbased_agent_stack-0.5.3}/tests/test_env_file.py +0 -0
- {getbased_agent_stack-0.5.1 → getbased_agent_stack-0.5.3}/tests/test_integration.py +0 -0
- {getbased_agent_stack-0.5.1 → getbased_agent_stack-0.5.3}/tests/test_mcp_configs.py +0 -0
- {getbased_agent_stack-0.5.1 → getbased_agent_stack-0.5.3}/tests/test_systemd_units.py +0 -0
- {getbased_agent_stack-0.5.1 → getbased_agent_stack-0.5.3}/tests/test_units.py +0 -0
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
GNU AFFERO GENERAL PUBLIC LICENSE
|
|
2
|
+
Version 3, 19 November 2007
|
|
3
|
+
|
|
4
|
+
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
|
|
5
|
+
Everyone is permitted to copy and distribute verbatim copies
|
|
6
|
+
of this license document, but changing it is not allowed.
|
|
7
|
+
|
|
8
|
+
Preamble
|
|
9
|
+
|
|
10
|
+
The GNU Affero General Public License is a free, copyleft license for
|
|
11
|
+
software and other kinds of works, specifically designed to ensure
|
|
12
|
+
cooperation with the community in the case of network server software.
|
|
13
|
+
|
|
14
|
+
The licenses for most software and other practical works are designed
|
|
15
|
+
to take away your freedom to share and change the works. By contrast,
|
|
16
|
+
our General Public Licenses are intended to guarantee your freedom to
|
|
17
|
+
share and change all versions of a program--to make sure it remains free
|
|
18
|
+
software for all its users.
|
|
19
|
+
|
|
20
|
+
For the full license text, see <https://www.gnu.org/licenses/agpl-3.0.txt>
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: getbased-agent-stack
|
|
3
|
-
Version: 0.5.
|
|
3
|
+
Version: 0.5.3
|
|
4
4
|
Summary: One-command install of the full getbased agent stack — getbased-mcp + getbased-rag + getbased-dashboard
|
|
5
|
-
License-Expression:
|
|
5
|
+
License-Expression: AGPL-3.0-or-later
|
|
6
6
|
Requires-Python: >=3.10
|
|
7
7
|
Description-Content-Type: text/markdown
|
|
8
8
|
License-File: LICENSE
|
|
9
|
-
Requires-Dist: getbased-mcp>=0.2.
|
|
10
|
-
Requires-Dist: getbased-rag>=0.7.
|
|
11
|
-
Requires-Dist: getbased-dashboard>=0.6.
|
|
9
|
+
Requires-Dist: getbased-mcp>=0.2.6
|
|
10
|
+
Requires-Dist: getbased-rag>=0.7.2
|
|
11
|
+
Requires-Dist: getbased-dashboard>=0.6.4
|
|
12
12
|
Provides-Extra: full
|
|
13
|
-
Requires-Dist: getbased-rag[full]>=0.7.
|
|
13
|
+
Requires-Dist: getbased-rag[full]>=0.7.2; extra == "full"
|
|
14
14
|
Provides-Extra: test
|
|
15
15
|
Requires-Dist: pytest>=8.0; extra == "test"
|
|
16
16
|
Requires-Dist: httpx>=0.27; extra == "test"
|
|
@@ -25,21 +25,34 @@ Part of the [getbased-agents monorepo](https://github.com/elkimek/getbased-agent
|
|
|
25
25
|
|
|
26
26
|
## Install
|
|
27
27
|
|
|
28
|
+
Linux, one command:
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
curl -sSL https://getbased.health/install.sh | bash
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
Runs end-to-end: installs `getbased-agent-stack[full]` via whichever of `uv` or `pipx` is available, exposes sibling binaries, runs `getbased-stack init --yes`, and starts rag + dashboard as systemd user services. [Read the script first](https://github.com/elkimek/get-based-site/blob/main/install.sh) if you're cautious.
|
|
35
|
+
|
|
36
|
+
Manual — pipx:
|
|
37
|
+
|
|
28
38
|
```bash
|
|
29
39
|
pipx install --include-deps "getbased-agent-stack[full]"
|
|
30
40
|
```
|
|
31
41
|
|
|
32
42
|
The `--include-deps` flag is required — it exposes `getbased-mcp`, `lens`, and `getbased-dashboard` alongside `getbased-stack` on your PATH. Without it, pipx only links the stack's own entry point and the MCP/rag/dashboard binaries stay hidden inside the venv.
|
|
33
43
|
|
|
34
|
-
|
|
44
|
+
Manual — uv (0.11+):
|
|
35
45
|
|
|
36
46
|
```bash
|
|
37
|
-
uv tool install
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
47
|
+
uv tool install \
|
|
48
|
+
--with-executables-from getbased-rag \
|
|
49
|
+
--with-executables-from getbased-dashboard \
|
|
50
|
+
--with-executables-from getbased-mcp \
|
|
51
|
+
"getbased-agent-stack[full]"
|
|
41
52
|
```
|
|
42
53
|
|
|
54
|
+
`--with-executables-from` is uv's equivalent of pipx's `--include-deps` — one tool venv, all four binaries on PATH.
|
|
55
|
+
|
|
43
56
|
Pulls:
|
|
44
57
|
|
|
45
58
|
- [`getbased-mcp`](https://github.com/elkimek/getbased-agents/tree/main/packages/mcp) — stdio MCP server that Claude Code / Hermes / OpenClaw spawn
|
|
@@ -52,17 +65,27 @@ Total install: ~500 MB (the ML deps dominate). Smaller installs available — `p
|
|
|
52
65
|
|
|
53
66
|
## Quickstart — one command
|
|
54
67
|
|
|
68
|
+
Interactive wizard:
|
|
69
|
+
|
|
55
70
|
```bash
|
|
56
71
|
getbased-stack init
|
|
57
72
|
```
|
|
58
73
|
|
|
74
|
+
Non-interactive (for scripted installs and curl | bash; `install.sh` uses this):
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
getbased-stack init --yes
|
|
78
|
+
```
|
|
79
|
+
|
|
59
80
|
The wizard (~30 seconds):
|
|
60
81
|
|
|
61
|
-
1. Prompts for your `GETBASED_TOKEN` (skip if you don't use
|
|
82
|
+
1. Prompts for your `GETBASED_TOKEN` and `GETBASED_AGENT_CONTEXT_KEY` (skip if you don't use Agent Access; `--yes` keeps current values and lets you set them later with `getbased-stack set ...`)
|
|
62
83
|
2. Generates a rag API key if one doesn't exist
|
|
63
84
|
3. Writes `~/.config/getbased/env` (mode 0600) — the shared config file
|
|
64
85
|
4. Installs systemd user units for rag + dashboard, enables them, starts them
|
|
65
86
|
|
|
87
|
+
On non-systemd hosts (Docker, macOS, WSL1) step 4 writes the unit files but skips activation with a clear message instead of crashing — re-run on a systemd-enabled host or start `lens serve` + `getbased-dashboard serve` manually.
|
|
88
|
+
|
|
66
89
|
Then paste one line into your MCP client:
|
|
67
90
|
|
|
68
91
|
```bash
|
|
@@ -99,7 +122,8 @@ sudo loginctl enable-linger $USER
|
|
|
99
122
|
|
|
100
123
|
```bash
|
|
101
124
|
getbased-stack status # env file, unit state, linger
|
|
102
|
-
getbased-stack set GETBASED_TOKEN=new
|
|
125
|
+
getbased-stack set GETBASED_TOKEN=new
|
|
126
|
+
getbased-stack set GETBASED_AGENT_CONTEXT_KEY=new
|
|
103
127
|
getbased-stack install # re-apply unit files after package upgrade
|
|
104
128
|
getbased-stack uninstall # stop + disable + remove units
|
|
105
129
|
```
|
|
@@ -126,7 +150,7 @@ sync GW getbased-rag ◀──────────────┘ g
|
|
|
126
150
|
|
|
127
151
|
The MCP holds no persistent state; it's a thin translator between MCP tool calls and two HTTP backends:
|
|
128
152
|
|
|
129
|
-
- `sync.getbased.health/api/context` —
|
|
153
|
+
- `sync.getbased.health/api/context` — encrypted lab context pushed by your PWA session (authorized by Agent Access token, decrypted locally with Agent Context key)
|
|
130
154
|
- `localhost:8322` (getbased-rag) — your local research library
|
|
131
155
|
|
|
132
156
|
The dashboard is likewise stateless — it proxies rag for Knowledge operations, imports `getbased_mcp` to introspect env/config, and spawns the MCP binary on demand to verify it works.
|
|
@@ -154,4 +178,4 @@ The integration test (`tests/test_integration.py`) spins up `lens serve` in a su
|
|
|
154
178
|
|
|
155
179
|
## Licence
|
|
156
180
|
|
|
157
|
-
|
|
181
|
+
AGPL-3.0-or-later, matching the siblings.
|
|
@@ -1,22 +1,3 @@
|
|
|
1
|
-
Metadata-Version: 2.4
|
|
2
|
-
Name: getbased-agent-stack
|
|
3
|
-
Version: 0.5.1
|
|
4
|
-
Summary: One-command install of the full getbased agent stack — getbased-mcp + getbased-rag + getbased-dashboard
|
|
5
|
-
License-Expression: GPL-3.0-only
|
|
6
|
-
Requires-Python: >=3.10
|
|
7
|
-
Description-Content-Type: text/markdown
|
|
8
|
-
License-File: LICENSE
|
|
9
|
-
Requires-Dist: getbased-mcp>=0.2.3
|
|
10
|
-
Requires-Dist: getbased-rag>=0.7.1
|
|
11
|
-
Requires-Dist: getbased-dashboard>=0.6.1
|
|
12
|
-
Provides-Extra: full
|
|
13
|
-
Requires-Dist: getbased-rag[full]>=0.7.1; extra == "full"
|
|
14
|
-
Provides-Extra: test
|
|
15
|
-
Requires-Dist: pytest>=8.0; extra == "test"
|
|
16
|
-
Requires-Dist: httpx>=0.27; extra == "test"
|
|
17
|
-
Requires-Dist: pytest-timeout>=2.3; extra == "test"
|
|
18
|
-
Dynamic: license-file
|
|
19
|
-
|
|
20
1
|
# getbased-agent-stack
|
|
21
2
|
|
|
22
3
|
Meta-package bundling the full [getbased](https://getbased.health) agent stack into one install: the MCP adapter, the RAG engine, the browser dashboard, an orchestration CLI (`init` / `install` / `mcp-config`), hardened systemd units for rag + dashboard, and paste-ready configs for Claude Desktop/Code, Cursor, Cline, and Hermes.
|
|
@@ -25,21 +6,34 @@ Part of the [getbased-agents monorepo](https://github.com/elkimek/getbased-agent
|
|
|
25
6
|
|
|
26
7
|
## Install
|
|
27
8
|
|
|
9
|
+
Linux, one command:
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
curl -sSL https://getbased.health/install.sh | bash
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
Runs end-to-end: installs `getbased-agent-stack[full]` via whichever of `uv` or `pipx` is available, exposes sibling binaries, runs `getbased-stack init --yes`, and starts rag + dashboard as systemd user services. [Read the script first](https://github.com/elkimek/get-based-site/blob/main/install.sh) if you're cautious.
|
|
16
|
+
|
|
17
|
+
Manual — pipx:
|
|
18
|
+
|
|
28
19
|
```bash
|
|
29
20
|
pipx install --include-deps "getbased-agent-stack[full]"
|
|
30
21
|
```
|
|
31
22
|
|
|
32
23
|
The `--include-deps` flag is required — it exposes `getbased-mcp`, `lens`, and `getbased-dashboard` alongside `getbased-stack` on your PATH. Without it, pipx only links the stack's own entry point and the MCP/rag/dashboard binaries stay hidden inside the venv.
|
|
33
24
|
|
|
34
|
-
|
|
25
|
+
Manual — uv (0.11+):
|
|
35
26
|
|
|
36
27
|
```bash
|
|
37
|
-
uv tool install
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
28
|
+
uv tool install \
|
|
29
|
+
--with-executables-from getbased-rag \
|
|
30
|
+
--with-executables-from getbased-dashboard \
|
|
31
|
+
--with-executables-from getbased-mcp \
|
|
32
|
+
"getbased-agent-stack[full]"
|
|
41
33
|
```
|
|
42
34
|
|
|
35
|
+
`--with-executables-from` is uv's equivalent of pipx's `--include-deps` — one tool venv, all four binaries on PATH.
|
|
36
|
+
|
|
43
37
|
Pulls:
|
|
44
38
|
|
|
45
39
|
- [`getbased-mcp`](https://github.com/elkimek/getbased-agents/tree/main/packages/mcp) — stdio MCP server that Claude Code / Hermes / OpenClaw spawn
|
|
@@ -52,17 +46,27 @@ Total install: ~500 MB (the ML deps dominate). Smaller installs available — `p
|
|
|
52
46
|
|
|
53
47
|
## Quickstart — one command
|
|
54
48
|
|
|
49
|
+
Interactive wizard:
|
|
50
|
+
|
|
55
51
|
```bash
|
|
56
52
|
getbased-stack init
|
|
57
53
|
```
|
|
58
54
|
|
|
55
|
+
Non-interactive (for scripted installs and curl | bash; `install.sh` uses this):
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
getbased-stack init --yes
|
|
59
|
+
```
|
|
60
|
+
|
|
59
61
|
The wizard (~30 seconds):
|
|
60
62
|
|
|
61
|
-
1. Prompts for your `GETBASED_TOKEN` (skip if you don't use
|
|
63
|
+
1. Prompts for your `GETBASED_TOKEN` and `GETBASED_AGENT_CONTEXT_KEY` (skip if you don't use Agent Access; `--yes` keeps current values and lets you set them later with `getbased-stack set ...`)
|
|
62
64
|
2. Generates a rag API key if one doesn't exist
|
|
63
65
|
3. Writes `~/.config/getbased/env` (mode 0600) — the shared config file
|
|
64
66
|
4. Installs systemd user units for rag + dashboard, enables them, starts them
|
|
65
67
|
|
|
68
|
+
On non-systemd hosts (Docker, macOS, WSL1) step 4 writes the unit files but skips activation with a clear message instead of crashing — re-run on a systemd-enabled host or start `lens serve` + `getbased-dashboard serve` manually.
|
|
69
|
+
|
|
66
70
|
Then paste one line into your MCP client:
|
|
67
71
|
|
|
68
72
|
```bash
|
|
@@ -99,7 +103,8 @@ sudo loginctl enable-linger $USER
|
|
|
99
103
|
|
|
100
104
|
```bash
|
|
101
105
|
getbased-stack status # env file, unit state, linger
|
|
102
|
-
getbased-stack set GETBASED_TOKEN=new
|
|
106
|
+
getbased-stack set GETBASED_TOKEN=new
|
|
107
|
+
getbased-stack set GETBASED_AGENT_CONTEXT_KEY=new
|
|
103
108
|
getbased-stack install # re-apply unit files after package upgrade
|
|
104
109
|
getbased-stack uninstall # stop + disable + remove units
|
|
105
110
|
```
|
|
@@ -126,7 +131,7 @@ sync GW getbased-rag ◀──────────────┘ g
|
|
|
126
131
|
|
|
127
132
|
The MCP holds no persistent state; it's a thin translator between MCP tool calls and two HTTP backends:
|
|
128
133
|
|
|
129
|
-
- `sync.getbased.health/api/context` —
|
|
134
|
+
- `sync.getbased.health/api/context` — encrypted lab context pushed by your PWA session (authorized by Agent Access token, decrypted locally with Agent Context key)
|
|
130
135
|
- `localhost:8322` (getbased-rag) — your local research library
|
|
131
136
|
|
|
132
137
|
The dashboard is likewise stateless — it proxies rag for Knowledge operations, imports `getbased_mcp` to introspect env/config, and spawns the MCP binary on demand to verify it works.
|
|
@@ -154,4 +159,4 @@ The integration test (`tests/test_integration.py`) spins up `lens serve` in a su
|
|
|
154
159
|
|
|
155
160
|
## Licence
|
|
156
161
|
|
|
157
|
-
|
|
162
|
+
AGPL-3.0-or-later, matching the siblings.
|
|
@@ -4,23 +4,23 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "getbased-agent-stack"
|
|
7
|
-
version = "0.5.
|
|
7
|
+
version = "0.5.3"
|
|
8
8
|
description = "One-command install of the full getbased agent stack — getbased-mcp + getbased-rag + getbased-dashboard"
|
|
9
9
|
readme = "README.md"
|
|
10
|
-
license = "
|
|
10
|
+
license = "AGPL-3.0-or-later"
|
|
11
11
|
requires-python = ">=3.10"
|
|
12
12
|
# Pulls every sibling package. Bump this meta when a sibling protocol
|
|
13
13
|
# bump requires coordinated release.
|
|
14
14
|
dependencies = [
|
|
15
|
-
"getbased-mcp>=0.2.
|
|
16
|
-
"getbased-rag>=0.7.
|
|
17
|
-
"getbased-dashboard>=0.6.
|
|
15
|
+
"getbased-mcp>=0.2.6",
|
|
16
|
+
"getbased-rag>=0.7.2",
|
|
17
|
+
"getbased-dashboard>=0.6.4",
|
|
18
18
|
]
|
|
19
19
|
|
|
20
20
|
[project.optional-dependencies]
|
|
21
21
|
# `full` includes PDF/DOCX parsers and ONNX acceleration (pre-exported
|
|
22
22
|
# weights — no PyTorch/transformers/optimum dance).
|
|
23
|
-
full = ["getbased-rag[full]>=0.7.
|
|
23
|
+
full = ["getbased-rag[full]>=0.7.2"]
|
|
24
24
|
# For contributors running the integration test harness.
|
|
25
25
|
test = ["pytest>=8.0", "httpx>=0.27", "pytest-timeout>=2.3"]
|
|
26
26
|
|
|
@@ -100,20 +100,28 @@ def cmd_init(args: argparse.Namespace) -> int:
|
|
|
100
100
|
)
|
|
101
101
|
print()
|
|
102
102
|
|
|
103
|
-
# 1.
|
|
103
|
+
# 1. Agent Access secrets (optional)
|
|
104
104
|
existing = env_file.read_env_file()
|
|
105
105
|
current_token = existing.get("GETBASED_TOKEN", "")
|
|
106
|
+
current_context_key = existing.get("GETBASED_AGENT_CONTEXT_KEY", "")
|
|
106
107
|
masked = "****" + current_token[-4:] if current_token else "(unset)"
|
|
107
|
-
|
|
108
|
+
key_masked = "****" + current_context_key[-4:] if current_context_key else "(unset)"
|
|
109
|
+
print(f"[1/4] Agent Access token + context key (token: {masked}, key: {key_masked})")
|
|
108
110
|
if non_interactive:
|
|
109
111
|
token = current_token
|
|
110
|
-
|
|
112
|
+
context_key = current_context_key
|
|
113
|
+
print(" keeping current values (set with `getbased-stack set GETBASED_TOKEN=…` and `getbased-stack set GETBASED_AGENT_CONTEXT_KEY=…` later).")
|
|
111
114
|
else:
|
|
112
115
|
token = _prompt(
|
|
113
116
|
"Paste GETBASED_TOKEN (press Enter to keep current / skip)",
|
|
114
117
|
default=current_token,
|
|
115
118
|
secret=True,
|
|
116
119
|
)
|
|
120
|
+
context_key = _prompt(
|
|
121
|
+
"Paste GETBASED_AGENT_CONTEXT_KEY (press Enter to keep current / skip)",
|
|
122
|
+
default=current_context_key,
|
|
123
|
+
secret=True,
|
|
124
|
+
)
|
|
117
125
|
|
|
118
126
|
# 2. API key
|
|
119
127
|
key_path = Path(existing.get("LENS_API_KEY_FILE", str(_default_api_key_file())))
|
|
@@ -131,6 +139,8 @@ def cmd_init(args: argparse.Namespace) -> int:
|
|
|
131
139
|
merged["GETBASED_STACK_MANAGED"] = "1"
|
|
132
140
|
if token:
|
|
133
141
|
merged["GETBASED_TOKEN"] = token
|
|
142
|
+
if context_key:
|
|
143
|
+
merged["GETBASED_AGENT_CONTEXT_KEY"] = context_key
|
|
134
144
|
merged["LENS_API_KEY_FILE"] = str(key_path)
|
|
135
145
|
merged.setdefault("LENS_URL", "http://127.0.0.1:8322")
|
|
136
146
|
path = env_file.write_env_file(merged)
|
|
@@ -153,6 +163,14 @@ def cmd_init(args: argparse.Namespace) -> int:
|
|
|
153
163
|
_print_linger_hint(strict=False)
|
|
154
164
|
|
|
155
165
|
# 6. MCP config pointers
|
|
166
|
+
print("\nNext steps for Agent Access:")
|
|
167
|
+
print(" 1. In getbased, enable Cross-device Sync and Agent Access.")
|
|
168
|
+
print(" 2. Copy both values from Settings → Agent Access:")
|
|
169
|
+
print(" GETBASED_TOKEN and GETBASED_AGENT_CONTEXT_KEY.")
|
|
170
|
+
print(" 3. Save them here with:")
|
|
171
|
+
print(" getbased-stack set GETBASED_TOKEN=...")
|
|
172
|
+
print(" getbased-stack set GETBASED_AGENT_CONTEXT_KEY=...")
|
|
173
|
+
|
|
156
174
|
print("\nConfigure your MCP client(s):")
|
|
157
175
|
for client in mcp_configs.SUPPORTED_CLIENTS:
|
|
158
176
|
print(f" getbased-stack mcp-config {client}")
|
{getbased_agent_stack-0.5.1 → getbased_agent_stack-0.5.3}/src/getbased_agent_stack/mcp_configs.py
RENAMED
|
@@ -133,9 +133,10 @@ def emit_hermes(resolver: Callable[[str], "str | None"] = shutil.which) -> str:
|
|
|
133
133
|
lines = [
|
|
134
134
|
"# Hermes Agent MCP configuration snippet for ~/.hermes/config.yaml",
|
|
135
135
|
"# See https://github.com/hermes-agent/hermes-agent for the full config schema.",
|
|
136
|
-
"# The getbased stack's shared env file carries GETBASED_TOKEN
|
|
137
|
-
"# api key path; only the
|
|
138
|
-
"#
|
|
136
|
+
"# The getbased stack's shared env file carries GETBASED_TOKEN,",
|
|
137
|
+
"# GETBASED_AGENT_CONTEXT_KEY, rag URL, and api key path; only the",
|
|
138
|
+
"# opt-in flag belongs in Hermes's config.",
|
|
139
|
+
"# (If your Hermes config already sets GETBASED_TOKEN / GETBASED_AGENT_CONTEXT_KEY / LENS_* explicitly,",
|
|
139
140
|
"# drop the env block entirely — the Python loader honors existing env.)",
|
|
140
141
|
]
|
|
141
142
|
if warning:
|
|
@@ -1,3 +1,22 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: getbased-agent-stack
|
|
3
|
+
Version: 0.5.3
|
|
4
|
+
Summary: One-command install of the full getbased agent stack — getbased-mcp + getbased-rag + getbased-dashboard
|
|
5
|
+
License-Expression: AGPL-3.0-or-later
|
|
6
|
+
Requires-Python: >=3.10
|
|
7
|
+
Description-Content-Type: text/markdown
|
|
8
|
+
License-File: LICENSE
|
|
9
|
+
Requires-Dist: getbased-mcp>=0.2.6
|
|
10
|
+
Requires-Dist: getbased-rag>=0.7.2
|
|
11
|
+
Requires-Dist: getbased-dashboard>=0.6.4
|
|
12
|
+
Provides-Extra: full
|
|
13
|
+
Requires-Dist: getbased-rag[full]>=0.7.2; extra == "full"
|
|
14
|
+
Provides-Extra: test
|
|
15
|
+
Requires-Dist: pytest>=8.0; extra == "test"
|
|
16
|
+
Requires-Dist: httpx>=0.27; extra == "test"
|
|
17
|
+
Requires-Dist: pytest-timeout>=2.3; extra == "test"
|
|
18
|
+
Dynamic: license-file
|
|
19
|
+
|
|
1
20
|
# getbased-agent-stack
|
|
2
21
|
|
|
3
22
|
Meta-package bundling the full [getbased](https://getbased.health) agent stack into one install: the MCP adapter, the RAG engine, the browser dashboard, an orchestration CLI (`init` / `install` / `mcp-config`), hardened systemd units for rag + dashboard, and paste-ready configs for Claude Desktop/Code, Cursor, Cline, and Hermes.
|
|
@@ -6,21 +25,34 @@ Part of the [getbased-agents monorepo](https://github.com/elkimek/getbased-agent
|
|
|
6
25
|
|
|
7
26
|
## Install
|
|
8
27
|
|
|
28
|
+
Linux, one command:
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
curl -sSL https://getbased.health/install.sh | bash
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
Runs end-to-end: installs `getbased-agent-stack[full]` via whichever of `uv` or `pipx` is available, exposes sibling binaries, runs `getbased-stack init --yes`, and starts rag + dashboard as systemd user services. [Read the script first](https://github.com/elkimek/get-based-site/blob/main/install.sh) if you're cautious.
|
|
35
|
+
|
|
36
|
+
Manual — pipx:
|
|
37
|
+
|
|
9
38
|
```bash
|
|
10
39
|
pipx install --include-deps "getbased-agent-stack[full]"
|
|
11
40
|
```
|
|
12
41
|
|
|
13
42
|
The `--include-deps` flag is required — it exposes `getbased-mcp`, `lens`, and `getbased-dashboard` alongside `getbased-stack` on your PATH. Without it, pipx only links the stack's own entry point and the MCP/rag/dashboard binaries stay hidden inside the venv.
|
|
14
43
|
|
|
15
|
-
|
|
44
|
+
Manual — uv (0.11+):
|
|
16
45
|
|
|
17
46
|
```bash
|
|
18
|
-
uv tool install
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
47
|
+
uv tool install \
|
|
48
|
+
--with-executables-from getbased-rag \
|
|
49
|
+
--with-executables-from getbased-dashboard \
|
|
50
|
+
--with-executables-from getbased-mcp \
|
|
51
|
+
"getbased-agent-stack[full]"
|
|
22
52
|
```
|
|
23
53
|
|
|
54
|
+
`--with-executables-from` is uv's equivalent of pipx's `--include-deps` — one tool venv, all four binaries on PATH.
|
|
55
|
+
|
|
24
56
|
Pulls:
|
|
25
57
|
|
|
26
58
|
- [`getbased-mcp`](https://github.com/elkimek/getbased-agents/tree/main/packages/mcp) — stdio MCP server that Claude Code / Hermes / OpenClaw spawn
|
|
@@ -33,17 +65,27 @@ Total install: ~500 MB (the ML deps dominate). Smaller installs available — `p
|
|
|
33
65
|
|
|
34
66
|
## Quickstart — one command
|
|
35
67
|
|
|
68
|
+
Interactive wizard:
|
|
69
|
+
|
|
36
70
|
```bash
|
|
37
71
|
getbased-stack init
|
|
38
72
|
```
|
|
39
73
|
|
|
74
|
+
Non-interactive (for scripted installs and curl | bash; `install.sh` uses this):
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
getbased-stack init --yes
|
|
78
|
+
```
|
|
79
|
+
|
|
40
80
|
The wizard (~30 seconds):
|
|
41
81
|
|
|
42
|
-
1. Prompts for your `GETBASED_TOKEN` (skip if you don't use
|
|
82
|
+
1. Prompts for your `GETBASED_TOKEN` and `GETBASED_AGENT_CONTEXT_KEY` (skip if you don't use Agent Access; `--yes` keeps current values and lets you set them later with `getbased-stack set ...`)
|
|
43
83
|
2. Generates a rag API key if one doesn't exist
|
|
44
84
|
3. Writes `~/.config/getbased/env` (mode 0600) — the shared config file
|
|
45
85
|
4. Installs systemd user units for rag + dashboard, enables them, starts them
|
|
46
86
|
|
|
87
|
+
On non-systemd hosts (Docker, macOS, WSL1) step 4 writes the unit files but skips activation with a clear message instead of crashing — re-run on a systemd-enabled host or start `lens serve` + `getbased-dashboard serve` manually.
|
|
88
|
+
|
|
47
89
|
Then paste one line into your MCP client:
|
|
48
90
|
|
|
49
91
|
```bash
|
|
@@ -80,7 +122,8 @@ sudo loginctl enable-linger $USER
|
|
|
80
122
|
|
|
81
123
|
```bash
|
|
82
124
|
getbased-stack status # env file, unit state, linger
|
|
83
|
-
getbased-stack set GETBASED_TOKEN=new
|
|
125
|
+
getbased-stack set GETBASED_TOKEN=new
|
|
126
|
+
getbased-stack set GETBASED_AGENT_CONTEXT_KEY=new
|
|
84
127
|
getbased-stack install # re-apply unit files after package upgrade
|
|
85
128
|
getbased-stack uninstall # stop + disable + remove units
|
|
86
129
|
```
|
|
@@ -107,7 +150,7 @@ sync GW getbased-rag ◀──────────────┘ g
|
|
|
107
150
|
|
|
108
151
|
The MCP holds no persistent state; it's a thin translator between MCP tool calls and two HTTP backends:
|
|
109
152
|
|
|
110
|
-
- `sync.getbased.health/api/context` —
|
|
153
|
+
- `sync.getbased.health/api/context` — encrypted lab context pushed by your PWA session (authorized by Agent Access token, decrypted locally with Agent Context key)
|
|
111
154
|
- `localhost:8322` (getbased-rag) — your local research library
|
|
112
155
|
|
|
113
156
|
The dashboard is likewise stateless — it proxies rag for Knowledge operations, imports `getbased_mcp` to introspect env/config, and spawns the MCP binary on demand to verify it works.
|
|
@@ -135,4 +178,4 @@ The integration test (`tests/test_integration.py`) spins up `lens serve` in a su
|
|
|
135
178
|
|
|
136
179
|
## Licence
|
|
137
180
|
|
|
138
|
-
|
|
181
|
+
AGPL-3.0-or-later, matching the siblings.
|
|
@@ -313,6 +313,8 @@ def test_init_yes_flag_skips_all_prompts(stack_home, fake_shell, monkeypatch):
|
|
|
313
313
|
assert rc == 0
|
|
314
314
|
# Banner reflects the mode so the user sees what happened
|
|
315
315
|
assert "non-interactive" in out.lower()
|
|
316
|
+
assert "GETBASED_TOKEN and GETBASED_AGENT_CONTEXT_KEY" in out
|
|
317
|
+
assert "getbased-stack set GETBASED_AGENT_CONTEXT_KEY" in out
|
|
316
318
|
# Env file + units still land
|
|
317
319
|
assert env_file.env_file_path().exists()
|
|
318
320
|
assert (stack_home / "config" / "systemd" / "user" / "getbased-rag.service").exists()
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
GNU GENERAL PUBLIC LICENSE
|
|
2
|
-
Version 3, 29 June 2007
|
|
3
|
-
|
|
4
|
-
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
|
|
5
|
-
Everyone is permitted to copy and distribute verbatim copies
|
|
6
|
-
of this license document, but changing it is not allowed.
|
|
7
|
-
|
|
8
|
-
Preamble
|
|
9
|
-
|
|
10
|
-
The GNU General Public License is a free, copyleft license for
|
|
11
|
-
software and other kinds of works.
|
|
12
|
-
|
|
13
|
-
The licenses for most software and other practical works are designed
|
|
14
|
-
to take away your freedom to share and change the works. By contrast,
|
|
15
|
-
the GNU General Public License is intended to guarantee your freedom to
|
|
16
|
-
share and change all versions of a program--to make sure it remains free
|
|
17
|
-
software for all its users. We, the Free Software Foundation, use the
|
|
18
|
-
GNU General Public License for most of our software; it applies also to
|
|
19
|
-
any other work released this way by its authors. You can apply it to
|
|
20
|
-
your programs, too.
|
|
21
|
-
|
|
22
|
-
For the full license text, see <https://www.gnu.org/licenses/gpl-3.0.txt>
|
|
File without changes
|
{getbased_agent_stack-0.5.1 → getbased_agent_stack-0.5.3}/src/getbased_agent_stack/env_file.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|