Compare commits
2 Commits
chore/ms22
...
chore/ms21
| Author | SHA1 | Date | |
|---|---|---|---|
| 9a742aa634 | |||
| f4c1c9d816 |
90
docker/OPENCLAW-FLEET.md
Normal file
90
docker/OPENCLAW-FLEET.md
Normal file
@@ -0,0 +1,90 @@
|
||||
# OpenClaw Agent Fleet
|
||||
|
||||
OpenClaw multi-agent deployment for Mosaic Stack using Docker Swarm and Portainer.
|
||||
|
||||
## Agent Roster
|
||||
|
||||
| Agent | Service | Primary Model | Role |
|
||||
| ----------------- | ------------------- | --------------- | ---------------------------------- |
|
||||
| jarvis-main | `jarvis-main` | `zai/glm-5` | Orchestrator / user-facing gateway |
|
||||
| jarvis-projects | `jarvis-projects` | `zai/glm-5` | Development and coding tasks |
|
||||
| jarvis-research | `jarvis-research` | `zai/glm-5` | Research and web search |
|
||||
| jarvis-operations | `jarvis-operations` | `ollama/cogito` | Monitoring, health checks, alerts |
|
||||
|
||||
## Prerequisites
|
||||
|
||||
1. Docker Swarm initialized on the target host
|
||||
2. Existing Docker network `mosaic-stack_internal` (external swarm network)
|
||||
3. Z.ai API access key (`ZAI_API_KEY`)
|
||||
4. Ollama reachable at `10.1.1.42:11434` for the `cogito` model
|
||||
|
||||
## Quick Start
|
||||
|
||||
### 1. Configure each agent env file
|
||||
|
||||
Set values in:
|
||||
|
||||
- `docker/openclaw-instances/jarvis-main.env`
|
||||
- `docker/openclaw-instances/jarvis-projects.env`
|
||||
- `docker/openclaw-instances/jarvis-research.env`
|
||||
- `docker/openclaw-instances/jarvis-operations.env`
|
||||
|
||||
Required variables:
|
||||
|
||||
- `OPENCLAW_CONFIG_PATH=/config/openclaw.json`
|
||||
- `ZAI_API_KEY=<your-zai-api-key>`
|
||||
- `OPENCLAW_GATEWAY_TOKEN=<unique-token-per-agent>`
|
||||
|
||||
### 2. Generate unique gateway tokens
|
||||
|
||||
Generate one token per service:
|
||||
|
||||
```bash
|
||||
openssl rand -hex 32
|
||||
```
|
||||
|
||||
### 3. Deploy the fleet
|
||||
|
||||
From repo root:
|
||||
|
||||
```bash
|
||||
docker stack deploy -c docker/openclaw-compose.yml jarvis
|
||||
```
|
||||
|
||||
### 4. Verify service status
|
||||
|
||||
```bash
|
||||
docker stack services jarvis
|
||||
docker service logs jarvis-jarvis-main --tail 100
|
||||
docker service logs jarvis-jarvis-projects --tail 100
|
||||
docker service logs jarvis-jarvis-research --tail 100
|
||||
docker service logs jarvis-jarvis-operations --tail 100
|
||||
```
|
||||
|
||||
### 5. First-time auth (if required)
|
||||
|
||||
Exec into a container and run OpenClaw auth device flow:
|
||||
|
||||
```bash
|
||||
docker exec -it $(docker ps -q -f name=jarvis-jarvis-main) sh
|
||||
openclaw auth
|
||||
```
|
||||
|
||||
You can also complete this in the Mosaic WebUI terminal (xterm.js).
|
||||
|
||||
## Management Commands
|
||||
|
||||
| Command | Description |
|
||||
| ----------------------------------------------------------- | ---------------------- |
|
||||
| `docker stack deploy -c docker/openclaw-compose.yml jarvis` | Deploy/update fleet |
|
||||
| `docker stack services jarvis` | List services in stack |
|
||||
| `docker service logs jarvis-<service>` | View service logs |
|
||||
| `docker service update --force jarvis-<service>` | Restart rolling update |
|
||||
| `docker service scale jarvis-<service>=N` | Scale a service |
|
||||
| `docker stack rm jarvis` | Remove fleet |
|
||||
|
||||
## Notes
|
||||
|
||||
- Each service stores persistent local OpenClaw state in `/home/node/.openclaw`.
|
||||
- Each service mounts a read-only per-agent JSON config at `/config/openclaw.json`.
|
||||
- `chatCompletions` endpoint is enabled in each agent config for Mosaic API usage.
|
||||
166
docker/openclaw-compose.yml
Normal file
166
docker/openclaw-compose.yml
Normal file
@@ -0,0 +1,166 @@
|
||||
services:
|
||||
jarvis-main:
|
||||
image: alpine/openclaw:latest
|
||||
command: ["gateway", "run", "--bind", "lan", "--auth", "token"]
|
||||
env_file:
|
||||
- ./openclaw-instances/jarvis-main.env
|
||||
environment:
|
||||
OPENCLAW_CONFIG_PATH: /config/openclaw.json
|
||||
volumes:
|
||||
- jarvis-main-config:/config/openclaw.json:ro
|
||||
- jarvis-main-state:/home/node/.openclaw
|
||||
networks:
|
||||
- mosaic-stack_internal
|
||||
healthcheck:
|
||||
test: ["CMD", "openclaw", "gateway", "health"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
start_period: 20s
|
||||
deploy:
|
||||
replicas: 1
|
||||
restart_policy:
|
||||
condition: on-failure
|
||||
delay: 5s
|
||||
max_attempts: 3
|
||||
resources:
|
||||
limits:
|
||||
memory: 2G
|
||||
reservations:
|
||||
memory: 512M
|
||||
labels:
|
||||
- com.mosaic.agent=jarvis-main
|
||||
- com.mosaic.role=orchestrator
|
||||
|
||||
jarvis-projects:
|
||||
image: alpine/openclaw:latest
|
||||
command: ["gateway", "run", "--bind", "lan", "--auth", "token"]
|
||||
env_file:
|
||||
- ./openclaw-instances/jarvis-projects.env
|
||||
environment:
|
||||
OPENCLAW_CONFIG_PATH: /config/openclaw.json
|
||||
volumes:
|
||||
- jarvis-projects-config:/config/openclaw.json:ro
|
||||
- jarvis-projects-state:/home/node/.openclaw
|
||||
networks:
|
||||
- mosaic-stack_internal
|
||||
healthcheck:
|
||||
test: ["CMD", "openclaw", "gateway", "health"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
start_period: 20s
|
||||
deploy:
|
||||
replicas: 1
|
||||
restart_policy:
|
||||
condition: on-failure
|
||||
delay: 5s
|
||||
max_attempts: 3
|
||||
resources:
|
||||
limits:
|
||||
memory: 4G
|
||||
reservations:
|
||||
memory: 1G
|
||||
labels:
|
||||
- com.mosaic.agent=jarvis-projects
|
||||
- com.mosaic.role=development
|
||||
|
||||
jarvis-research:
|
||||
image: alpine/openclaw:latest
|
||||
command: ["gateway", "run", "--bind", "lan", "--auth", "token"]
|
||||
env_file:
|
||||
- ./openclaw-instances/jarvis-research.env
|
||||
environment:
|
||||
OPENCLAW_CONFIG_PATH: /config/openclaw.json
|
||||
volumes:
|
||||
- jarvis-research-config:/config/openclaw.json:ro
|
||||
- jarvis-research-state:/home/node/.openclaw
|
||||
networks:
|
||||
- mosaic-stack_internal
|
||||
healthcheck:
|
||||
test: ["CMD", "openclaw", "gateway", "health"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
start_period: 20s
|
||||
deploy:
|
||||
replicas: 1
|
||||
restart_policy:
|
||||
condition: on-failure
|
||||
delay: 5s
|
||||
max_attempts: 3
|
||||
resources:
|
||||
limits:
|
||||
memory: 1G
|
||||
reservations:
|
||||
memory: 256M
|
||||
labels:
|
||||
- com.mosaic.agent=jarvis-research
|
||||
- com.mosaic.role=research
|
||||
|
||||
jarvis-operations:
|
||||
image: alpine/openclaw:latest
|
||||
command: ["gateway", "run", "--bind", "lan", "--auth", "token"]
|
||||
env_file:
|
||||
- ./openclaw-instances/jarvis-operations.env
|
||||
environment:
|
||||
OPENCLAW_CONFIG_PATH: /config/openclaw.json
|
||||
volumes:
|
||||
- jarvis-operations-config:/config/openclaw.json:ro
|
||||
- jarvis-operations-state:/home/node/.openclaw
|
||||
networks:
|
||||
- mosaic-stack_internal
|
||||
healthcheck:
|
||||
test: ["CMD", "openclaw", "gateway", "health"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
start_period: 20s
|
||||
deploy:
|
||||
replicas: 1
|
||||
restart_policy:
|
||||
condition: on-failure
|
||||
delay: 5s
|
||||
max_attempts: 3
|
||||
resources:
|
||||
limits:
|
||||
memory: 1G
|
||||
reservations:
|
||||
memory: 256M
|
||||
labels:
|
||||
- com.mosaic.agent=jarvis-operations
|
||||
- com.mosaic.role=operations
|
||||
|
||||
networks:
|
||||
mosaic-stack_internal:
|
||||
external: true
|
||||
|
||||
volumes:
|
||||
jarvis-main-config:
|
||||
driver: local
|
||||
driver_opts:
|
||||
type: none
|
||||
o: bind
|
||||
device: ${PWD}/docker/openclaw-instances/jarvis-main.json
|
||||
jarvis-projects-config:
|
||||
driver: local
|
||||
driver_opts:
|
||||
type: none
|
||||
o: bind
|
||||
device: ${PWD}/docker/openclaw-instances/jarvis-projects.json
|
||||
jarvis-research-config:
|
||||
driver: local
|
||||
driver_opts:
|
||||
type: none
|
||||
o: bind
|
||||
device: ${PWD}/docker/openclaw-instances/jarvis-research.json
|
||||
jarvis-operations-config:
|
||||
driver: local
|
||||
driver_opts:
|
||||
type: none
|
||||
o: bind
|
||||
device: ${PWD}/docker/openclaw-instances/jarvis-operations.json
|
||||
jarvis-main-state:
|
||||
jarvis-projects-state:
|
||||
jarvis-research-state:
|
||||
jarvis-operations-state:
|
||||
47
docker/openclaw-instances/README.md
Normal file
47
docker/openclaw-instances/README.md
Normal file
@@ -0,0 +1,47 @@
|
||||
# OpenClaw Agent Instance Setup
|
||||
|
||||
Each service in the OpenClaw fleet reads:
|
||||
|
||||
- A per-agent environment file: `docker/openclaw-instances/<agent>.env`
|
||||
- A per-agent JSON5 config: `docker/openclaw-instances/<agent>.json`
|
||||
|
||||
## 1. Fill in API keys in `.env` files
|
||||
|
||||
Set `ZAI_API_KEY` in each instance env file:
|
||||
|
||||
- `jarvis-main.env`
|
||||
- `jarvis-projects.env`
|
||||
- `jarvis-research.env`
|
||||
- `jarvis-operations.env`
|
||||
|
||||
## 2. Generate unique gateway tokens per agent
|
||||
|
||||
Generate one token per instance:
|
||||
|
||||
```bash
|
||||
openssl rand -hex 32
|
||||
```
|
||||
|
||||
Set a different `OPENCLAW_GATEWAY_TOKEN` in each `.env` file.
|
||||
|
||||
## 3. Deploy the Docker Swarm stack
|
||||
|
||||
From repository root:
|
||||
|
||||
```bash
|
||||
docker stack deploy -c docker/openclaw-compose.yml jarvis
|
||||
```
|
||||
|
||||
## 4. First-time auth (if needed)
|
||||
|
||||
If an instance requires first-time login, exec into the running container and run:
|
||||
|
||||
```bash
|
||||
openclaw auth
|
||||
```
|
||||
|
||||
This uses OpenClaw's headless OAuth device-code flow.
|
||||
|
||||
## 5. Use Mosaic WebUI terminal for auth
|
||||
|
||||
You can complete the device-code auth flow from the Mosaic WebUI terminal (xterm.js) attached to the service container.
|
||||
3
docker/openclaw-instances/jarvis-main.env
Normal file
3
docker/openclaw-instances/jarvis-main.env
Normal file
@@ -0,0 +1,3 @@
|
||||
OPENCLAW_CONFIG_PATH=/config/openclaw.json
|
||||
ZAI_API_KEY=REPLACE_WITH_ZAI_API_KEY
|
||||
OPENCLAW_GATEWAY_TOKEN=REPLACE_WITH_UNIQUE_GATEWAY_TOKEN
|
||||
41
docker/openclaw-instances/jarvis-main.json
Normal file
41
docker/openclaw-instances/jarvis-main.json
Normal file
@@ -0,0 +1,41 @@
|
||||
{
|
||||
"gateway": {
|
||||
"mode": "local",
|
||||
"port": 18789,
|
||||
"bind": "lan",
|
||||
"auth": { "mode": "token" },
|
||||
"http": {
|
||||
"endpoints": {
|
||||
"chatCompletions": { "enabled": true }
|
||||
}
|
||||
}
|
||||
},
|
||||
"agents": {
|
||||
"defaults": {
|
||||
"workspace": "/home/node/workspace",
|
||||
"model": { "primary": "zai/glm-5" }
|
||||
}
|
||||
},
|
||||
// Z.ai is built in and uses ZAI_API_KEY.
|
||||
// Ollama is configured for optional local reasoning fallback.
|
||||
"models": {
|
||||
"mode": "merge",
|
||||
"providers": {
|
||||
"ollama": {
|
||||
"baseUrl": "http://10.1.1.42:11434/v1",
|
||||
"api": "openai-completions",
|
||||
"models": [
|
||||
{
|
||||
"id": "cogito",
|
||||
"name": "Cogito (Local Reasoning)",
|
||||
"reasoning": false,
|
||||
"input": ["text"],
|
||||
"cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 },
|
||||
"contextWindow": 128000,
|
||||
"maxTokens": 8192
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
3
docker/openclaw-instances/jarvis-operations.env
Normal file
3
docker/openclaw-instances/jarvis-operations.env
Normal file
@@ -0,0 +1,3 @@
|
||||
OPENCLAW_CONFIG_PATH=/config/openclaw.json
|
||||
ZAI_API_KEY=REPLACE_WITH_ZAI_API_KEY
|
||||
OPENCLAW_GATEWAY_TOKEN=REPLACE_WITH_UNIQUE_GATEWAY_TOKEN
|
||||
40
docker/openclaw-instances/jarvis-operations.json
Normal file
40
docker/openclaw-instances/jarvis-operations.json
Normal file
@@ -0,0 +1,40 @@
|
||||
{
|
||||
"gateway": {
|
||||
"mode": "local",
|
||||
"port": 18789,
|
||||
"bind": "lan",
|
||||
"auth": { "mode": "token" },
|
||||
"http": {
|
||||
"endpoints": {
|
||||
"chatCompletions": { "enabled": true }
|
||||
}
|
||||
}
|
||||
},
|
||||
"agents": {
|
||||
"defaults": {
|
||||
"workspace": "/home/node/workspace",
|
||||
"model": { "primary": "ollama/cogito" }
|
||||
}
|
||||
},
|
||||
// Operations uses local Ollama Cogito as the primary model.
|
||||
"models": {
|
||||
"mode": "merge",
|
||||
"providers": {
|
||||
"ollama": {
|
||||
"baseUrl": "http://10.1.1.42:11434/v1",
|
||||
"api": "openai-completions",
|
||||
"models": [
|
||||
{
|
||||
"id": "cogito",
|
||||
"name": "Cogito (Local Reasoning)",
|
||||
"reasoning": false,
|
||||
"input": ["text"],
|
||||
"cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 },
|
||||
"contextWindow": 128000,
|
||||
"maxTokens": 8192
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
3
docker/openclaw-instances/jarvis-projects.env
Normal file
3
docker/openclaw-instances/jarvis-projects.env
Normal file
@@ -0,0 +1,3 @@
|
||||
OPENCLAW_CONFIG_PATH=/config/openclaw.json
|
||||
ZAI_API_KEY=REPLACE_WITH_ZAI_API_KEY
|
||||
OPENCLAW_GATEWAY_TOKEN=REPLACE_WITH_UNIQUE_GATEWAY_TOKEN
|
||||
39
docker/openclaw-instances/jarvis-projects.json
Normal file
39
docker/openclaw-instances/jarvis-projects.json
Normal file
@@ -0,0 +1,39 @@
|
||||
{
|
||||
"gateway": {
|
||||
"mode": "local",
|
||||
"port": 18789,
|
||||
"bind": "lan",
|
||||
"auth": { "mode": "token" },
|
||||
"http": {
|
||||
"endpoints": {
|
||||
"chatCompletions": { "enabled": true }
|
||||
}
|
||||
}
|
||||
},
|
||||
"agents": {
|
||||
"defaults": {
|
||||
"workspace": "/home/node/workspace",
|
||||
"model": { "primary": "zai/glm-5" }
|
||||
}
|
||||
},
|
||||
"models": {
|
||||
"mode": "merge",
|
||||
"providers": {
|
||||
"ollama": {
|
||||
"baseUrl": "http://10.1.1.42:11434/v1",
|
||||
"api": "openai-completions",
|
||||
"models": [
|
||||
{
|
||||
"id": "cogito",
|
||||
"name": "Cogito (Local Reasoning)",
|
||||
"reasoning": false,
|
||||
"input": ["text"],
|
||||
"cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 },
|
||||
"contextWindow": 128000,
|
||||
"maxTokens": 8192
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
3
docker/openclaw-instances/jarvis-research.env
Normal file
3
docker/openclaw-instances/jarvis-research.env
Normal file
@@ -0,0 +1,3 @@
|
||||
OPENCLAW_CONFIG_PATH=/config/openclaw.json
|
||||
ZAI_API_KEY=REPLACE_WITH_ZAI_API_KEY
|
||||
OPENCLAW_GATEWAY_TOKEN=REPLACE_WITH_UNIQUE_GATEWAY_TOKEN
|
||||
39
docker/openclaw-instances/jarvis-research.json
Normal file
39
docker/openclaw-instances/jarvis-research.json
Normal file
@@ -0,0 +1,39 @@
|
||||
{
|
||||
"gateway": {
|
||||
"mode": "local",
|
||||
"port": 18789,
|
||||
"bind": "lan",
|
||||
"auth": { "mode": "token" },
|
||||
"http": {
|
||||
"endpoints": {
|
||||
"chatCompletions": { "enabled": true }
|
||||
}
|
||||
}
|
||||
},
|
||||
"agents": {
|
||||
"defaults": {
|
||||
"workspace": "/home/node/workspace",
|
||||
"model": { "primary": "zai/glm-5" }
|
||||
}
|
||||
},
|
||||
"models": {
|
||||
"mode": "merge",
|
||||
"providers": {
|
||||
"ollama": {
|
||||
"baseUrl": "http://10.1.1.42:11434/v1",
|
||||
"api": "openai-completions",
|
||||
"models": [
|
||||
{
|
||||
"id": "cogito",
|
||||
"name": "Cogito (Local Reasoning)",
|
||||
"reasoning": false,
|
||||
"input": ["text"],
|
||||
"cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 },
|
||||
"contextWindow": 128000,
|
||||
"maxTokens": 8192
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -25,14 +25,14 @@
|
||||
| MS21-MIG-003 | not-started | phase-3 | Run migration on production database | #568 | api | — | MS21-MIG-001,MS21-TEST-003 | MS21-VER-001 | — | — | — | 5K | — | Needs deploy coordination; not automatable |
|
||||
| MS21-MIG-004 | done | phase-3 | Import API endpoints (6/6 tests) | #568 | api | feat/ms21-import-api | MS21-DB-001 | — | codex | 2026-02-28 | 2026-02-28 | 20K | 24K | PR #567 merged, CI green. Review: 0 blockers, 4 should-fix, 1 medium sec (no audit log). |
|
||||
| MS21-UI-001 | done | phase-4 | Settings/users page | #569 | web | feat/ms21-ui-users | MS21-API-001,MS21-API-002 | — | codex | 2026-02-28 | 2026-02-28 | 20K | ~30K | PR #573 merged. Review: 0 blockers, 4 should-fix → MS21-UI-001-QA |
|
||||
| MS21-UI-001-QA | not-started | phase-4 | QA: fix 4 review findings (pagination, error state, self-deactivate guard, tests) | #569 | web | fix/ms21-ui-001-qa | MS21-UI-001 | — | — | — | — | 15K | — | 0 blockers; merged per framework. Should-fix: pagination cap, error/empty collision, self-deactivate guard, no tests. |
|
||||
| MS21-UI-002 | not-started | phase-4 | User detail/edit and invite dialogs | #569 | web | feat/ms21-ui-users | MS21-UI-001 | — | — | — | — | 15K | — | |
|
||||
| MS21-UI-001-QA | in-progress | phase-4 | QA: fix 4 review findings (pagination, error state, self-deactivate guard, tests) | #569 | web | fix/ms21-ui-001-qa | MS21-UI-001 | — | — | — | — | 15K | — | 0 blockers; merged per framework. Should-fix: pagination cap, error/empty collision, self-deactivate guard, no tests. |
|
||||
| MS21-UI-002 | done | phase-4 | User detail/edit and invite dialogs | #569 | web | feat/ms21-ui-users | MS21-UI-001 | — | — | — | — | 15K | — | |
|
||||
| MS21-UI-003 | done | phase-4 | Settings/workspaces page (wire to real API) | #569 | web | feat/ms21-ui-workspaces | MS21-API-003 | — | codex | 2026-02-28 | 2026-02-28 | 15K | ~25K | PR #574 merged. Review: 0 critical, 1 low (raw errors in UI) |
|
||||
| MS21-UI-004 | not-started | phase-4 | Workspace member management UI | #569 | web | feat/ms21-ui-workspaces | MS21-UI-003,MS21-API-003 | — | — | — | — | 15K | — | Components exist |
|
||||
| MS21-UI-005 | not-started | phase-4 | Settings/teams page | #569 | web | feat/ms21-ui-teams | MS21-API-004 | — | — | — | — | 15K | — | |
|
||||
| MS21-TEST-004 | not-started | phase-4 | Frontend component tests | #569 | web | test/ms21-ui | MS21-UI-001,MS21-UI-002,MS21-UI-003,MS21-UI-004,MS21-UI-005 | — | — | — | — | 20K | — | |
|
||||
| MS21-RBAC-001 | not-started | phase-5 | Sidebar navigation role gating | #570 | web | feat/ms21-rbac | MS21-UI-001 | — | — | — | — | 10K | — | |
|
||||
| MS21-RBAC-002 | not-started | phase-5 | Settings page access restriction | #570 | web | feat/ms21-rbac | MS21-RBAC-001 | — | — | — | — | 8K | — | |
|
||||
| MS21-UI-004 | done | phase-4 | Workspace member management UI | #569 | web | feat/ms21-ui-workspaces | MS21-UI-003,MS21-API-003 | — | — | — | — | 15K | — | Components exist |
|
||||
| MS21-UI-005 | done | phase-4 | Settings/teams page | #569 | web | feat/ms21-ui-teams | MS21-API-004 | — | — | — | — | 15K | — | |
|
||||
| MS21-TEST-004 | in-progress | phase-4 | Frontend component tests | #569 | web | test/ms21-ui | MS21-UI-001,MS21-UI-002,MS21-UI-003,MS21-UI-004,MS21-UI-005 | — | — | — | — | 20K | — | |
|
||||
| MS21-RBAC-001 | done | phase-5 | Sidebar navigation role gating | #570 | web | feat/ms21-rbac | MS21-UI-001 | — | — | — | — | 10K | — | |
|
||||
| MS21-RBAC-002 | done | phase-5 | Settings page access restriction | #570 | web | feat/ms21-rbac | MS21-RBAC-001 | — | — | — | — | 8K | — | |
|
||||
| MS21-RBAC-003 | done | phase-5 | Action button permission gating | #570 | web | feat/ms21-rbac | MS21-RBAC-001 | — | — | — | — | 8K | — | |
|
||||
| MS21-RBAC-004 | done | phase-5 | User profile role display | #570 | web | feat/ms21-rbac | MS21-RBAC-001 | — | — | — | — | 5K | — | |
|
||||
| MS21-VER-001 | done | phase-6 | Full quality gate pass | #571 | stack | — | MS21-TEST-004,MS21-RBAC-004,MS21-MIG-003 | MS21-VER-002 | — | — | — | 5K | — | |
|
||||
@@ -55,19 +55,19 @@ Remaining estimate: ~143K tokens (Codex budget).
|
||||
|
||||
## MS22 — Fleet Evolution (Phase 0: Knowledge Layer)
|
||||
|
||||
| id | status | milestone | description | issue | repo | branch | depends_on | blocks | agent | started_at | completed_at | estimate | used | notes |
|
||||
| --------------- | ------ | ------------ | ------------------------------------------------------------ | -------- | ----- | ------------------------------ | --------------------------------------------------------- | ------------- | ------------ | ---------- | ------------ | -------- | ---- | --------------------------------------------- |
|
||||
| MS22-PLAN-001 | done | p0-knowledge | PRD + mission bootstrap + TASKS.md | TASKS:P0 | stack | feat/ms22-knowledge-schema | — | MS22-DB-001 | orchestrator | 2026-02-28 | 2026-02-28 | 10K | 8K | PRD-MS22.md, mission fleet-evolution-20260228 |
|
||||
| MS22-DB-001 | done | p0-knowledge | Findings module (pgvector, CRUD, similarity search) | TASKS:P0 | api | feat/ms22-findings | MS22-PLAN-001 | — | codex | 2026-02-28 | 2026-02-28 | 20K | ~22K | PR #585 merged, CI green |
|
||||
| MS22-API-001 | done | p0-knowledge | Findings API endpoints | TASKS:P0 | api | feat/ms22-findings | MS22-DB-001 | — | codex | 2026-02-28 | 2026-02-28 | — | — | Combined with DB-001 |
|
||||
| MS22-DB-002 | done | p0-knowledge | AgentMemory module (key/value store, upsert) | TASKS:P0 | api | feat/ms22-agent-memory | MS22-DB-001 | — | codex | 2026-02-28 | 2026-02-28 | 15K | ~16K | PR #586 merged, CI green |
|
||||
| MS22-API-002 | done | p0-knowledge | AgentMemory API endpoints | TASKS:P0 | api | feat/ms22-agent-memory | MS22-DB-002 | — | codex | 2026-02-28 | 2026-02-28 | — | — | Combined with DB-002 |
|
||||
| MS22-DB-004 | done | p0-knowledge | ConversationArchive module (pgvector, ingest, search) | TASKS:P0 | api | feat/ms22-conversation-archive | MS22-DB-001 | — | codex | 2026-02-28 | 2026-02-28 | 20K | ~18K | PR #587 merged, CI green |
|
||||
| MS22-API-004 | done | p0-knowledge | ConversationArchive API endpoints | TASKS:P0 | api | feat/ms22-conversation-archive | MS22-DB-004 | — | codex | 2026-02-28 | 2026-02-28 | — | — | Combined with DB-004 |
|
||||
| MS22-API-005 | done | p0-knowledge | EmbeddingService (reuse existing KnowledgeModule) | TASKS:P0 | api | — | — | — | orchestrator | 2026-02-28 | 2026-02-28 | 0 | 0 | Already existed; no work needed |
|
||||
| MS22-DB-003 | done | p0-knowledge | Task model: add assigned_agent field + migration | TASKS:P0 | api | feat/ms22-task-agent | MS22-DB-001 | MS22-API-003 | — | — | — | 8K | — | Small schema + migration only |
|
||||
| MS22-API-003 | done | p0-knowledge | Task API: expose assigned_agent in CRUD | TASKS:P0 | api | feat/ms22-task-agent | MS22-DB-003 | MS22-TEST-001 | — | — | — | 8K | — | Extend existing TaskModule |
|
||||
| MS22-TEST-001 | done | p0-knowledge | Integration tests: Findings + AgentMemory + ConvArchive | TASKS:P0 | api | test/ms22-integration | MS22-API-001,MS22-API-002,MS22-API-004 | MS22-VER-P0 | — | — | — | 20K | — | E2E with live postgres |
|
||||
| MS22-SKILL-001 | done | p0-knowledge | OpenClaw mosaic skill (agents read/write findings/memory) | TASKS:P0 | stack | feat/ms22-openclaw-skill | MS22-API-001,MS22-API-002 | MS22-VER-P0 | — | — | — | 15K | — | Skill in ~/.agents/skills/mosaic/ |
|
||||
| MS22-INGEST-001 | done | p0-knowledge | Session log ingestion pipeline (OpenClaw logs → ConvArchive) | TASKS:P0 | stack | feat/ms22-ingest | MS22-API-004 | MS22-VER-P0 | — | — | — | 20K | — | Script to batch-ingest existing logs |
|
||||
| MS22-VER-P0 | done | p0-knowledge | Phase 0 verification: all modules deployed + smoke tested | TASKS:P0 | stack | — | MS22-TEST-001,MS22-SKILL-001,MS22-INGEST-001,MS22-API-003 | — | — | — | — | 5K | — | |
|
||||
| id | status | milestone | description | issue | repo | branch | depends_on | blocks | agent | started_at | completed_at | estimate | used | notes |
|
||||
| --------------- | ----------- | ------------ | ------------------------------------------------------------ | -------- | ----- | ------------------------------ | --------------------------------------------------------- | ------------- | ------------ | ---------- | ------------ | -------- | ---- | --------------------------------------------- |
|
||||
| MS22-PLAN-001 | done | p0-knowledge | PRD + mission bootstrap + TASKS.md | TASKS:P0 | stack | feat/ms22-knowledge-schema | — | MS22-DB-001 | orchestrator | 2026-02-28 | 2026-02-28 | 10K | 8K | PRD-MS22.md, mission fleet-evolution-20260228 |
|
||||
| MS22-DB-001 | done | p0-knowledge | Findings module (pgvector, CRUD, similarity search) | TASKS:P0 | api | feat/ms22-findings | MS22-PLAN-001 | — | codex | 2026-02-28 | 2026-02-28 | 20K | ~22K | PR #585 merged, CI green |
|
||||
| MS22-API-001 | done | p0-knowledge | Findings API endpoints | TASKS:P0 | api | feat/ms22-findings | MS22-DB-001 | — | codex | 2026-02-28 | 2026-02-28 | — | — | Combined with DB-001 |
|
||||
| MS22-DB-002 | done | p0-knowledge | AgentMemory module (key/value store, upsert) | TASKS:P0 | api | feat/ms22-agent-memory | MS22-DB-001 | — | codex | 2026-02-28 | 2026-02-28 | 15K | ~16K | PR #586 merged, CI green |
|
||||
| MS22-API-002 | done | p0-knowledge | AgentMemory API endpoints | TASKS:P0 | api | feat/ms22-agent-memory | MS22-DB-002 | — | codex | 2026-02-28 | 2026-02-28 | — | — | Combined with DB-002 |
|
||||
| MS22-DB-004 | done | p0-knowledge | ConversationArchive module (pgvector, ingest, search) | TASKS:P0 | api | feat/ms22-conversation-archive | MS22-DB-001 | — | codex | 2026-02-28 | 2026-02-28 | 20K | ~18K | PR #587 merged, CI green |
|
||||
| MS22-API-004 | done | p0-knowledge | ConversationArchive API endpoints | TASKS:P0 | api | feat/ms22-conversation-archive | MS22-DB-004 | — | codex | 2026-02-28 | 2026-02-28 | — | — | Combined with DB-004 |
|
||||
| MS22-API-005 | done | p0-knowledge | EmbeddingService (reuse existing KnowledgeModule) | TASKS:P0 | api | — | — | — | orchestrator | 2026-02-28 | 2026-02-28 | 0 | 0 | Already existed; no work needed |
|
||||
| MS22-DB-003 | not-started | p0-knowledge | Task model: add assigned_agent field + migration | TASKS:P0 | api | feat/ms22-task-agent | MS22-DB-001 | MS22-API-003 | — | — | — | 8K | — | Small schema + migration only |
|
||||
| MS22-API-003 | not-started | p0-knowledge | Task API: expose assigned_agent in CRUD | TASKS:P0 | api | feat/ms22-task-agent | MS22-DB-003 | MS22-TEST-001 | — | — | — | 8K | — | Extend existing TaskModule |
|
||||
| MS22-TEST-001 | not-started | p0-knowledge | Integration tests: Findings + AgentMemory + ConvArchive | TASKS:P0 | api | test/ms22-integration | MS22-API-001,MS22-API-002,MS22-API-004 | MS22-VER-P0 | — | — | — | 20K | — | E2E with live postgres |
|
||||
| MS22-SKILL-001 | not-started | p0-knowledge | OpenClaw mosaic skill (agents read/write findings/memory) | TASKS:P0 | stack | feat/ms22-openclaw-skill | MS22-API-001,MS22-API-002 | MS22-VER-P0 | — | — | — | 15K | — | Skill in ~/.agents/skills/mosaic/ |
|
||||
| MS22-INGEST-001 | done | p0-knowledge | Session log ingestion pipeline (OpenClaw logs → ConvArchive) | TASKS:P0 | stack | feat/ms22-ingest | MS22-API-004 | MS22-VER-P0 | — | — | — | 20K | — | Script to batch-ingest existing logs |
|
||||
| MS22-VER-P0 | not-started | p0-knowledge | Phase 0 verification: all modules deployed + smoke tested | TASKS:P0 | stack | — | MS22-TEST-001,MS22-SKILL-001,MS22-INGEST-001,MS22-API-003 | — | — | — | — | 5K | — | |
|
||||
|
||||
Reference in New Issue
Block a user