velaclaw-dev 0.2.0
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.
- package/.gitignore +14 -0
- package/ARCHITECTURE.md +143 -0
- package/README.dev.md +208 -0
- package/README.local-before-remote-sync.md +224 -0
- package/README.md +211 -0
- package/README.public.md +115 -0
- package/RELEASING.md +162 -0
- package/TESTING.md +195 -0
- package/dist/cli.js +213 -0
- package/dist/data.js +2988 -0
- package/dist/server.js +1020 -0
- package/dist/ui.js +1486 -0
- package/members/LAUNCH_CHECKLIST.md +13 -0
- package/members/README.md +17 -0
- package/members/member-template/README.md +9 -0
- package/members/member-template/private-docs/README.md +3 -0
- package/members/member-template/private-memory/README.md +3 -0
- package/members/member-template/private-skills/README.md +4 -0
- package/members/member-template/private-tools/README.md +4 -0
- package/members/member-template/runtime/config/README.md +3 -0
- package/members/member-template/runtime/config/local-plugins/member-quota-guard/index.js +123 -0
- package/members/member-template/runtime/config/local-plugins/member-quota-guard/openclaw.plugin.json +19 -0
- package/members/member-template/runtime/config/local-plugins/member-quota-guard/package.json +10 -0
- package/members/member-template/runtime/config/local-plugins/member-runtime-upgrader/index.js +97 -0
- package/members/member-template/runtime/config/local-plugins/member-runtime-upgrader/openclaw.plugin.json +21 -0
- package/members/member-template/runtime/config/local-plugins/member-runtime-upgrader/package.json +10 -0
- package/members/member-template/runtime/config/local-plugins/shared-asset-injector/index.js +548 -0
- package/members/member-template/runtime/config/local-plugins/shared-asset-injector/openclaw.plugin.json +33 -0
- package/members/member-template/runtime/config/local-plugins/shared-asset-injector/package.json +10 -0
- package/members/member-template/runtime/config/openclaw.json +104 -0
- package/members/member-template/runtime/docker-compose.yml +53 -0
- package/members/member-template/runtime/logs/README.md +3 -0
- package/members/member-template/runtime/secrets/.gitkeep +1 -0
- package/members/member-template/runtime/secrets/README.md +3 -0
- package/members/member-template/runtime/workspace/.gitkeep +1 -0
- package/members/member-template/runtime/workspace/README.md +3 -0
- package/package.json +57 -0
- package/pic/banner.jpg +0 -0
- package/provision-member.md +87 -0
- package/scripts/shared-asset-stack-test.mjs +369 -0
- package/scripts/shared-skill-combo-test.mjs +282 -0
- package/scripts/team-load-test.mjs +358 -0
- package/scripts/verify-install.mjs +44 -0
- package/services/litellm/config.yaml +35 -0
- package/services/litellm/docker-compose.yml +36 -0
- package/services/litellm/litellm.env.example +13 -0
- package/shared-snapshots/README.md +16 -0
- package/shared-snapshots/docs/README.md +3 -0
- package/shared-snapshots/memory/README.md +3 -0
- package/shared-snapshots/skills/README.md +3 -0
- package/shared-snapshots/tools/README.md +4 -0
- package/shared-snapshots/workflows/README.md +3 -0
- package/team-assets/README.md +11 -0
- package/team-assets/policies/README.md +7 -0
- package/team-assets/policies/asset-visibility.md +24 -0
- package/team-assets/policies/high-risk-action-approval.md +18 -0
- package/team-assets/policies/promotion-rules.md +25 -0
- package/team-assets/policies/tool-binding-rules.md +26 -0
- package/team-assets/shared-docs/README.md +3 -0
- package/team-assets/shared-memory/README.md +8 -0
- package/team-assets/shared-skills/README.md +8 -0
- package/team-assets/shared-tools/README.md +8 -0
- package/team-assets/shared-workflows/README.md +9 -0
package/README.md
ADDED
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img src="pic/banner.jpg" alt="Velaclaw — The control plane for team AI" width="100%" />
|
|
3
|
+
</p>
|
|
4
|
+
|
|
5
|
+
<h1 align="center">Velaclaw</h1>
|
|
6
|
+
|
|
7
|
+
<p align="center">
|
|
8
|
+
<strong>The control plane for team AI.</strong><br/>
|
|
9
|
+
<sub>Shared intelligence. Isolated runtimes. Governed by design.</sub>
|
|
10
|
+
</p>
|
|
11
|
+
|
|
12
|
+
<p align="center">
|
|
13
|
+
<a href="#-quick-start">Quick Start</a> ·
|
|
14
|
+
<a href="#-core-capabilities">Core Capabilities</a> ·
|
|
15
|
+
<a href="#-architecture">Architecture</a> ·
|
|
16
|
+
<a href="#-roadmap">Roadmap</a>
|
|
17
|
+
</p>
|
|
18
|
+
|
|
19
|
+
<p align="center">
|
|
20
|
+
<img alt="Status" src="https://img.shields.io/badge/status-early--access-orange" />
|
|
21
|
+
<img alt="Runtime" src="https://img.shields.io/badge/runtime-Docker-blue" />
|
|
22
|
+
<img alt="Built on" src="https://img.shields.io/badge/built%20on-OpenClaw-black" />
|
|
23
|
+
<img alt="License" src="https://img.shields.io/badge/license-MIT-green" />
|
|
24
|
+
</p>
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
> Your team is already using AI.
|
|
29
|
+
> The question isn't whether — it's **who's in control.**
|
|
30
|
+
|
|
31
|
+
Velaclaw is the answer: **one control plane** governing every AI runtime on your team.
|
|
32
|
+
Team assets stay with the team. Member assets stay with the member. High-risk actions go through approval.
|
|
33
|
+
**Runs on a single machine. Today.**
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## 🧩 Core Capabilities
|
|
38
|
+
|
|
39
|
+
<table>
|
|
40
|
+
<tr>
|
|
41
|
+
<td width="50%" valign="top">
|
|
42
|
+
|
|
43
|
+
### 🎛️ Control-Plane First
|
|
44
|
+
|
|
45
|
+
The host is the coordination layer. Team policies, shared assets, and approval decisions live in **one place** instead of being scattered across individual chat windows.
|
|
46
|
+
|
|
47
|
+
</td>
|
|
48
|
+
<td width="50%" valign="top">
|
|
49
|
+
|
|
50
|
+
### 📦 Isolated Member Runtimes
|
|
51
|
+
|
|
52
|
+
One Docker container per member. No host workspace mounts. No Docker socket exposure. **One member crashes — nothing else burns.**
|
|
53
|
+
|
|
54
|
+
</td>
|
|
55
|
+
</tr>
|
|
56
|
+
<tr>
|
|
57
|
+
<td width="50%" valign="top">
|
|
58
|
+
|
|
59
|
+
### 🔐 Shared vs Private, by Default
|
|
60
|
+
|
|
61
|
+
Velaclaw treats memory, skills, tools, workflows, documents, and bindings as **assets**.
|
|
62
|
+
Some assets belong to the team. Others belong to the member. Team assets can be distributed as read-only snapshots, while member assets stay private by default.
|
|
63
|
+
|
|
64
|
+
Shared assets now follow a governed publication flow:
|
|
65
|
+
- members can submit into `drafts/` or `collab/`
|
|
66
|
+
- untrusted roles require approval before publish
|
|
67
|
+
- trusted publishers can publish without review
|
|
68
|
+
- managers can approve, reject, or promote into the live snapshot
|
|
69
|
+
|
|
70
|
+
</td>
|
|
71
|
+
<td width="50%" valign="top">
|
|
72
|
+
|
|
73
|
+
### ✅ Approval for High-Risk Actions
|
|
74
|
+
|
|
75
|
+
Write operations, credential access, and cross-member actions do not execute directly. They go through the control plane first. **Approval is part of the system, not an afterthought.**
|
|
76
|
+
|
|
77
|
+
</td>
|
|
78
|
+
</tr>
|
|
79
|
+
</table>
|
|
80
|
+
|
|
81
|
+
---
|
|
82
|
+
|
|
83
|
+
## 🏗️ Architecture
|
|
84
|
+
|
|
85
|
+
```
|
|
86
|
+
┌─────────────────────────────────────────────────┐
|
|
87
|
+
│ Control Plane (Host) │
|
|
88
|
+
│ │
|
|
89
|
+
│ policies · shared-assets · approvals │
|
|
90
|
+
│ asset-distribution · audit │
|
|
91
|
+
└──────────┬──────────┬──────────┬─────────────────┘
|
|
92
|
+
│ │ │
|
|
93
|
+
┌─────▼────┐┌────▼─────┐┌──▼───────┐
|
|
94
|
+
│ Member A ││ Member B ││ Member C │
|
|
95
|
+
│ (Docker) ││ (Docker) ││ (Docker) │
|
|
96
|
+
│ ││ ││ │
|
|
97
|
+
│ private ││ private ││ private │
|
|
98
|
+
│ assets ││ assets ││ assets │
|
|
99
|
+
│ runtime ││ runtime ││ runtime │
|
|
100
|
+
│ secrets ││ secrets ││ secrets │
|
|
101
|
+
└──────────┘└──────────┘└──────────┘
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
> **🛡️ Security boundary**
|
|
105
|
+
> Member containers never mount the host Docker socket, never touch the primary workspace, never access team secrets directly. Team assets are distributed via **read-only snapshots** — no writable shared mounts.
|
|
106
|
+
|
|
107
|
+
---
|
|
108
|
+
|
|
109
|
+
## 🚀 Quick Start
|
|
110
|
+
|
|
111
|
+
```bash
|
|
112
|
+
# 1. Clone the repo
|
|
113
|
+
git clone https://github.com/Zavianx/velaclaw-dev.git
|
|
114
|
+
cd velaclaw-dev
|
|
115
|
+
|
|
116
|
+
# 2. Read the architecture
|
|
117
|
+
cat ARCHITECTURE.md
|
|
118
|
+
|
|
119
|
+
# 3. Provision your first member runtime
|
|
120
|
+
cat provision-member.md
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
---
|
|
124
|
+
|
|
125
|
+
## 📁 Project Structure
|
|
126
|
+
|
|
127
|
+
```text
|
|
128
|
+
velaclaw-dev/
|
|
129
|
+
├── ARCHITECTURE.md # Control plane + member runtime design
|
|
130
|
+
├── provision-member.md # Member runtime provisioning guide
|
|
131
|
+
├── team-assets/ # System/global shared team asset sources
|
|
132
|
+
│ ├── policies/ # Team policies
|
|
133
|
+
│ ├── shared-memory/ # Shared memory assets
|
|
134
|
+
│ ├── shared-skills/ # Shared skill assets
|
|
135
|
+
│ ├── shared-tools/ # Shared tool assets
|
|
136
|
+
│ ├── shared-workflows/ # Shared workflow assets
|
|
137
|
+
│ └── shared-docs/ # Shared document assets
|
|
138
|
+
├── members/ # Per-member runtime templates and private assets
|
|
139
|
+
├── teams/ # Team-scoped governed asset workspaces
|
|
140
|
+
│ └── <slug>/
|
|
141
|
+
│ └── assets/
|
|
142
|
+
│ ├── drafts/
|
|
143
|
+
│ ├── collab/
|
|
144
|
+
│ ├── approvals/
|
|
145
|
+
│ ├── published/
|
|
146
|
+
│ │ └── releases/
|
|
147
|
+
│ └── current/
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
---
|
|
151
|
+
|
|
152
|
+
## 🗺️ Roadmap
|
|
153
|
+
|
|
154
|
+
**Shipped**
|
|
155
|
+
- [x] Control plane + member runtime architecture
|
|
156
|
+
- [x] Team / member asset directory separation
|
|
157
|
+
- [x] Member runtime provisioning flow
|
|
158
|
+
- [x] Read-only snapshot distribution
|
|
159
|
+
- [x] Team-scoped governed asset directories
|
|
160
|
+
- [x] Member proposal -> approval -> publish workflow
|
|
161
|
+
- [x] Direct publish for trusted roles
|
|
162
|
+
- [x] Manager promote / approve / reject controls
|
|
163
|
+
|
|
164
|
+
**Next**
|
|
165
|
+
- [ ] Asset sync API
|
|
166
|
+
- [ ] Rich approval workflow UI
|
|
167
|
+
- [ ] Web Dashboard
|
|
168
|
+
- [ ] Multi-machine deployment
|
|
169
|
+
|
|
170
|
+
---
|
|
171
|
+
|
|
172
|
+
## 💡 Why Velaclaw?
|
|
173
|
+
|
|
174
|
+
<table>
|
|
175
|
+
<thead>
|
|
176
|
+
<tr>
|
|
177
|
+
<th width="50%">Today</th>
|
|
178
|
+
<th width="50%">With Velaclaw</th>
|
|
179
|
+
</tr>
|
|
180
|
+
</thead>
|
|
181
|
+
<tbody>
|
|
182
|
+
<tr>
|
|
183
|
+
<td>Everyone runs their own AI — no one knows who did what</td>
|
|
184
|
+
<td><strong>One shared system</strong> for the team to work from</td>
|
|
185
|
+
</tr>
|
|
186
|
+
<tr>
|
|
187
|
+
<td>Team knowledge and workflows are scattered across chat windows</td>
|
|
188
|
+
<td><strong>Shared assets</strong> the team can keep building on together</td>
|
|
189
|
+
</tr>
|
|
190
|
+
<tr>
|
|
191
|
+
<td>AI can touch code, credentials, and files directly</td>
|
|
192
|
+
<td><strong>Isolated runtimes + approval gates</strong> around high-risk actions</td>
|
|
193
|
+
</tr>
|
|
194
|
+
<tr>
|
|
195
|
+
<td>Structure gets added later, if at all</td>
|
|
196
|
+
<td><strong>Assets and boundaries are built in from the start</strong></td>
|
|
197
|
+
</tr>
|
|
198
|
+
</tbody>
|
|
199
|
+
</table>
|
|
200
|
+
|
|
201
|
+
---
|
|
202
|
+
|
|
203
|
+
<p align="center">
|
|
204
|
+
<strong>Built on <a href="https://github.com/openclaw/openclaw">OpenClaw</a></strong>
|
|
205
|
+
</p>
|
|
206
|
+
<p align="center">
|
|
207
|
+
<em>A better way for teams to work with AI.</em>
|
|
208
|
+
</p>
|
|
209
|
+
<p align="center">
|
|
210
|
+
<sub>Made for teams that take AI seriously.</sub>
|
|
211
|
+
</p>
|
package/README.public.md
ADDED
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img src="pic/banner.jpg" alt="Velaclaw — A better way for teams to work with AI" width="100%" />
|
|
3
|
+
</p>
|
|
4
|
+
|
|
5
|
+
<h1 align="center">Velaclaw</h1>
|
|
6
|
+
|
|
7
|
+
<p align="center">
|
|
8
|
+
<strong>A better way for teams to work with AI.</strong><br/>
|
|
9
|
+
<sub>Shared where it should be. Private where it must be.</sub>
|
|
10
|
+
</p>
|
|
11
|
+
|
|
12
|
+
<p align="center">
|
|
13
|
+
<img alt="Status" src="https://img.shields.io/badge/status-early--access-orange" />
|
|
14
|
+
<img alt="Runtime" src="https://img.shields.io/badge/runtime-Docker-blue" />
|
|
15
|
+
<img alt="Built on" src="https://img.shields.io/badge/built%20on-OpenClaw-black" />
|
|
16
|
+
</p>
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
> Teams are already using AI.
|
|
21
|
+
> Velaclaw gives them a better way to work together.
|
|
22
|
+
|
|
23
|
+
Velaclaw is a system for teams that want to work with AI together without turning everything into one shared trust boundary.
|
|
24
|
+
It brings collaboration, structure, and clear asset boundaries into the same place.
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## What Velaclaw is
|
|
29
|
+
|
|
30
|
+
Velaclaw is built around three ideas:
|
|
31
|
+
|
|
32
|
+
- **shared assets** the team can build on together
|
|
33
|
+
- **private member runtimes** for work that should stay isolated
|
|
34
|
+
- **approvals and boundaries** for actions that carry real risk
|
|
35
|
+
|
|
36
|
+
In Velaclaw, memory, skills, tools, workflows, documents, and bindings are all treated as **assets**.
|
|
37
|
+
Some belong to the team. Others belong to the member.
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## Why it exists
|
|
42
|
+
|
|
43
|
+
Most teams already use AI across chat windows, scripts, agents, and tools.
|
|
44
|
+
What they usually do not have is a good shared system around it.
|
|
45
|
+
|
|
46
|
+
Velaclaw is meant to change that.
|
|
47
|
+
|
|
48
|
+
It helps teams:
|
|
49
|
+
|
|
50
|
+
- build on shared assets over time
|
|
51
|
+
- keep member-specific work private where it should be
|
|
52
|
+
- introduce structure without turning collaboration into chaos
|
|
53
|
+
- put approvals around high-risk actions
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
## Core capabilities
|
|
58
|
+
|
|
59
|
+
- **Shared assets** for team memory, skills, tools, workflows, and docs
|
|
60
|
+
- **Private runtimes** for member-specific execution
|
|
61
|
+
- **Read-only asset distribution** for controlled sharing
|
|
62
|
+
- **Approval-aware operations** for higher-risk actions
|
|
63
|
+
- **Docker-based isolation** for practical deployment today
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## Architecture
|
|
68
|
+
|
|
69
|
+
```text
|
|
70
|
+
┌─────────────────────────────────────────────────┐
|
|
71
|
+
│ Control Plane (Host) │
|
|
72
|
+
│ │
|
|
73
|
+
│ policies · shared-assets · approvals │
|
|
74
|
+
│ asset-distribution · audit │
|
|
75
|
+
└──────────┬──────────┬──────────┬─────────────────┘
|
|
76
|
+
│ │ │
|
|
77
|
+
┌─────▼────┐┌────▼─────┐┌──▼───────┐
|
|
78
|
+
│ Member A ││ Member B ││ Member C │
|
|
79
|
+
│ (Docker) ││ (Docker) ││ (Docker) │
|
|
80
|
+
│ ││ ││ │
|
|
81
|
+
│ private ││ private ││ private │
|
|
82
|
+
│ assets ││ assets ││ assets │
|
|
83
|
+
│ runtime ││ runtime ││ runtime │
|
|
84
|
+
│ secrets ││ secrets ││ secrets │
|
|
85
|
+
└──────────┘└──────────┘└──────────┘
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
## Current focus
|
|
91
|
+
|
|
92
|
+
Velaclaw is still early.
|
|
93
|
+
Current work is focused on:
|
|
94
|
+
|
|
95
|
+
- control-plane foundations
|
|
96
|
+
- asset modeling
|
|
97
|
+
- isolated member runtimes
|
|
98
|
+
- provisioning flow
|
|
99
|
+
- approval-aware operations
|
|
100
|
+
|
|
101
|
+
---
|
|
102
|
+
|
|
103
|
+
## Status
|
|
104
|
+
|
|
105
|
+
Velaclaw is in active development.
|
|
106
|
+
The public repository is intended to communicate the product direction, architecture, and design principles as the system takes shape.
|
|
107
|
+
|
|
108
|
+
---
|
|
109
|
+
|
|
110
|
+
<p align="center">
|
|
111
|
+
<strong>Built on <a href="https://github.com/openclaw/openclaw">OpenClaw</a></strong>
|
|
112
|
+
</p>
|
|
113
|
+
<p align="center">
|
|
114
|
+
<em>A better way for teams to work with AI.</em>
|
|
115
|
+
</p>
|
package/RELEASING.md
ADDED
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
# Velaclaw Dev Release Flow
|
|
2
|
+
|
|
3
|
+
This is the formal dev-side flow for preparing a testable build for other people.
|
|
4
|
+
|
|
5
|
+
## 1. Update The Working Tree
|
|
6
|
+
|
|
7
|
+
Before cutting a tester build:
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
git status --short
|
|
11
|
+
npm run build
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
Do not publish a tester build from a broken tree.
|
|
15
|
+
|
|
16
|
+
## 2. Bring Up Local Dependencies
|
|
17
|
+
|
|
18
|
+
LiteLLM:
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
docker compose -f services/litellm/docker-compose.yml up -d
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
Velaclaw:
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
npm run start
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## 3. Run The Minimum Release Checks
|
|
31
|
+
|
|
32
|
+
Required:
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
npm run release:check
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
Recommended before a real tester cut:
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
npm run smoke:skills
|
|
42
|
+
npm run smoke:assets
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
Optional for larger drops:
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
npm run load:test-team
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## 4. Check The Outputs
|
|
52
|
+
|
|
53
|
+
You should have:
|
|
54
|
+
|
|
55
|
+
- a healthy control plane on `127.0.0.1:4318`
|
|
56
|
+
- a healthy LiteLLM stack on `127.0.0.1:4000`
|
|
57
|
+
- fresh smoke artifacts in `artifacts/`
|
|
58
|
+
|
|
59
|
+
At minimum, inspect:
|
|
60
|
+
|
|
61
|
+
- latest `shared-skill-combo-test-*.json`
|
|
62
|
+
- latest `shared-asset-stack-test-*.json`
|
|
63
|
+
|
|
64
|
+
## 5. Sanity Check The Main Team
|
|
65
|
+
|
|
66
|
+
Before handing the build to testers, confirm your real bots were not broken by the release candidate:
|
|
67
|
+
|
|
68
|
+
- `testjjabot`
|
|
69
|
+
- `Erwinyu_bot`
|
|
70
|
+
- `Xiaoananabot`
|
|
71
|
+
|
|
72
|
+
Expected state:
|
|
73
|
+
|
|
74
|
+
- runtime container exists
|
|
75
|
+
- runtime health is `healthy`
|
|
76
|
+
- `/team` still loads
|
|
77
|
+
|
|
78
|
+
## 6. Publish To npm
|
|
79
|
+
|
|
80
|
+
Public npm:
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
npm login
|
|
84
|
+
npm run publish:npm
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
GitHub Actions:
|
|
88
|
+
|
|
89
|
+
- workflow: `.github/workflows/publish-npm.yml`
|
|
90
|
+
- required secret: `NPM_TOKEN`
|
|
91
|
+
|
|
92
|
+
## 7. Publish To A Private Registry
|
|
93
|
+
|
|
94
|
+
Local shell path:
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
npm config set registry <private-registry-url>
|
|
98
|
+
npm config set //<private-registry-host>/:_authToken <token>
|
|
99
|
+
npm run publish:private
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
GitHub Actions path:
|
|
103
|
+
|
|
104
|
+
- workflow: `.github/workflows/publish-private-registry.yml`
|
|
105
|
+
- required secret: `PRIVATE_NPM_TOKEN`
|
|
106
|
+
- workflow input: `registry_url`
|
|
107
|
+
|
|
108
|
+
## 8. Publish The Tester Instructions
|
|
109
|
+
|
|
110
|
+
Always ship the published package together with:
|
|
111
|
+
|
|
112
|
+
- [TESTING.md](/home/ubuntu/.openclaw/workspace/velaclaw/TESTING.md)
|
|
113
|
+
- [services/litellm/litellm.env.example](/home/ubuntu/.openclaw/workspace/velaclaw/services/litellm/litellm.env.example)
|
|
114
|
+
|
|
115
|
+
And for the npm path, tell testers to start with:
|
|
116
|
+
|
|
117
|
+
```bash
|
|
118
|
+
npm install -g velaclaw-dev
|
|
119
|
+
velaclaw init velaclaw-test
|
|
120
|
+
cd velaclaw-test
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
Do not assume the tester knows:
|
|
124
|
+
|
|
125
|
+
- where LiteLLM secrets live
|
|
126
|
+
- startup order
|
|
127
|
+
- which smoke scripts matter
|
|
128
|
+
- what is intentionally unsupported
|
|
129
|
+
|
|
130
|
+
## 9. Suggested Release Note Format
|
|
131
|
+
|
|
132
|
+
Use a short note like this:
|
|
133
|
+
|
|
134
|
+
```text
|
|
135
|
+
Velaclaw Dev Tester Build
|
|
136
|
+
|
|
137
|
+
Included:
|
|
138
|
+
- control plane
|
|
139
|
+
- team/member onboarding
|
|
140
|
+
- shared skills
|
|
141
|
+
- shared memory
|
|
142
|
+
- shared workflows
|
|
143
|
+
|
|
144
|
+
Not included:
|
|
145
|
+
- MCP/server assets
|
|
146
|
+
- multi-host deployment
|
|
147
|
+
|
|
148
|
+
Start here:
|
|
149
|
+
- npm install -g velaclaw-dev
|
|
150
|
+
- velaclaw init velaclaw-test
|
|
151
|
+
- TESTING.md
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
## 10. Exit Criteria
|
|
155
|
+
|
|
156
|
+
A tester build is ready only if all of these are true:
|
|
157
|
+
|
|
158
|
+
- `npm run release:check` passes
|
|
159
|
+
- `npm run smoke:skills` passes
|
|
160
|
+
- `npm run smoke:assets` passes
|
|
161
|
+
- latest artifacts exist in `artifacts/`
|
|
162
|
+
- the main team’s member runtimes still come back `healthy`
|
package/TESTING.md
ADDED
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
# Velaclaw Tester Install Guide
|
|
2
|
+
|
|
3
|
+
This guide is the formal path for bringing up a local Velaclaw test environment for external testers.
|
|
4
|
+
|
|
5
|
+
It assumes:
|
|
6
|
+
|
|
7
|
+
- one Linux host
|
|
8
|
+
- Docker Engine + Compose v2
|
|
9
|
+
- Node.js 22+
|
|
10
|
+
- a reachable upstream OpenAI-compatible endpoint for LiteLLM
|
|
11
|
+
|
|
12
|
+
The current supported test scope is:
|
|
13
|
+
|
|
14
|
+
- control plane at `http://127.0.0.1:4318`
|
|
15
|
+
- LiteLLM on `http://127.0.0.1:4000`
|
|
16
|
+
- team creation
|
|
17
|
+
- invite acceptance
|
|
18
|
+
- member runtime provisioning
|
|
19
|
+
- Telegram/Discord member setup
|
|
20
|
+
- shared `skills`, `memory`, and `workflows`
|
|
21
|
+
|
|
22
|
+
Not part of the formal tester flow:
|
|
23
|
+
|
|
24
|
+
- MCP/server assets
|
|
25
|
+
- multi-host deployment
|
|
26
|
+
- production HA setup
|
|
27
|
+
|
|
28
|
+
## 1. Install The CLI
|
|
29
|
+
|
|
30
|
+
Preferred path:
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
npm install -g velaclaw-dev
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
Then initialize a local workspace:
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
velaclaw init velaclaw-test
|
|
40
|
+
cd velaclaw-test
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
If you are testing from a local checkout instead of npm:
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
git clone <your-private-dev-repo-url> velaclaw-dev
|
|
47
|
+
cd velaclaw-dev
|
|
48
|
+
npm install
|
|
49
|
+
npm run build
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
## 2. Prerequisites
|
|
53
|
+
|
|
54
|
+
Install:
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
sudo apt-get update
|
|
58
|
+
sudo apt-get install -y git curl jq docker-compose-v2 docker-buildx
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
Verify:
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
docker compose version
|
|
65
|
+
docker buildx version
|
|
66
|
+
node --version
|
|
67
|
+
npm --version
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
## 3. Configure LiteLLM
|
|
71
|
+
|
|
72
|
+
Create the local config directory:
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
mkdir -p ~/.config/velaclaw
|
|
76
|
+
cp services/litellm/litellm.env.example ~/.config/velaclaw/litellm.env
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
Edit `~/.config/velaclaw/litellm.env` and set:
|
|
80
|
+
|
|
81
|
+
- `POSTGRES_PASSWORD`
|
|
82
|
+
- `DATABASE_URL`
|
|
83
|
+
- `OPENAI_API_KEY`
|
|
84
|
+
- `LITELLM_MASTER_KEY`
|
|
85
|
+
|
|
86
|
+
Expected format:
|
|
87
|
+
|
|
88
|
+
```dotenv
|
|
89
|
+
POSTGRES_PASSWORD=change-me
|
|
90
|
+
DATABASE_URL=postgresql://litellm:change-me@postgres:5432/litellm
|
|
91
|
+
OPENAI_API_KEY=replace-with-your-upstream-key
|
|
92
|
+
LITELLM_MASTER_KEY=replace-with-a-long-random-secret
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
Start LiteLLM:
|
|
96
|
+
|
|
97
|
+
```bash
|
|
98
|
+
docker compose -f services/litellm/docker-compose.yml up -d
|
|
99
|
+
docker ps --format 'table {{.Names}}\t{{.Status}}' | grep velaclaw-litellm
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
## 4. Start Velaclaw
|
|
103
|
+
|
|
104
|
+
Run the control plane:
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
velaclaw start
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
Default port:
|
|
111
|
+
|
|
112
|
+
```text
|
|
113
|
+
http://127.0.0.1:4318
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
If you want a different port:
|
|
117
|
+
|
|
118
|
+
```bash
|
|
119
|
+
velaclaw start --port 4318
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
## 5. Verify The Stack
|
|
123
|
+
|
|
124
|
+
Basic verification:
|
|
125
|
+
|
|
126
|
+
```bash
|
|
127
|
+
velaclaw verify
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
Manual checks:
|
|
131
|
+
|
|
132
|
+
```bash
|
|
133
|
+
curl -fsS http://127.0.0.1:4318/health
|
|
134
|
+
curl -fsS http://127.0.0.1:4318/api/teams
|
|
135
|
+
open http://127.0.0.1:4318/team
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
## 6. Tester Workflow
|
|
139
|
+
|
|
140
|
+
Recommended manual test path:
|
|
141
|
+
|
|
142
|
+
1. Open `/team`
|
|
143
|
+
2. Create a test team
|
|
144
|
+
3. Create an invite for a test email
|
|
145
|
+
4. Open `/invite/<code>`
|
|
146
|
+
5. Accept the invite
|
|
147
|
+
6. Configure a Telegram or Discord bot on the member page
|
|
148
|
+
7. Start the member runtime
|
|
149
|
+
8. Send the bot a message
|
|
150
|
+
9. Verify the member responds
|
|
151
|
+
|
|
152
|
+
## 7. Automated Smoke Tests
|
|
153
|
+
|
|
154
|
+
Shared skills:
|
|
155
|
+
|
|
156
|
+
```bash
|
|
157
|
+
velaclaw smoke skills
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
Shared skills + memory + workflow:
|
|
161
|
+
|
|
162
|
+
```bash
|
|
163
|
+
velaclaw smoke assets
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
Large team control-plane load test:
|
|
167
|
+
|
|
168
|
+
```bash
|
|
169
|
+
velaclaw smoke load-test
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
Artifacts are written to:
|
|
173
|
+
|
|
174
|
+
```text
|
|
175
|
+
artifacts/
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
## 8. Current Known Limits
|
|
179
|
+
|
|
180
|
+
- Default stable model path is `gpt-4.1-mini`
|
|
181
|
+
- GPT-5 family support is not the default test path
|
|
182
|
+
- MCP/server assets are intentionally out of scope
|
|
183
|
+
- This guide is for a single-host setup, not a production cluster
|
|
184
|
+
|
|
185
|
+
## 9. What Testers Should Report
|
|
186
|
+
|
|
187
|
+
Ask testers to include:
|
|
188
|
+
|
|
189
|
+
- host OS and Docker version
|
|
190
|
+
- whether LiteLLM started cleanly
|
|
191
|
+
- whether `/health` and `/api/teams` worked
|
|
192
|
+
- whether invite acceptance succeeded
|
|
193
|
+
- whether member runtime reached `healthy`
|
|
194
|
+
- whether Telegram/Discord messages were answered
|
|
195
|
+
- the exact artifact file if a smoke script was run
|