96 lines
3.0 KiB
Markdown
96 lines
3.0 KiB
Markdown
# Yonexus — Project Plan
|
|
|
|
## 1) Goal
|
|
Build an OpenClaw plugin that models organization hierarchy and agent identities, supports supervisor relationships, provides query tools for agents, and uses shared memory per scope (org/department/team).
|
|
|
|
## 2) Core Concepts
|
|
- **Hierarchy**: Organization → Department → Team → Agent
|
|
- **Supervisor**: each agent may have exactly one supervisor
|
|
- **Identity**: an agent can hold multiple identities across teams/departments
|
|
- **Schema-driven metadata**: configurable fields with per-field queryability
|
|
- **Scope memory**: shared memory for org/department/team (using `memory_store`, compatible with memory-lancedb-pro)
|
|
|
|
## 3) Storage Strategy
|
|
- **Structure & identity data**: in-memory + JSON persistence (no memory_store)
|
|
- **Shared memory**: memory_store keyed by scope (`org:{id}`, `dept:{id}`, `team:{id}`)
|
|
|
|
## 4) Permissions Model (B)
|
|
Roles:
|
|
- Org Admin
|
|
- Dept Admin
|
|
- Team Lead
|
|
- Agent
|
|
|
|
Rules:
|
|
- Supervisor is **not** a role (no inherent permissions)
|
|
- Registration **not** self-service
|
|
- only configured agent list or human via slash command
|
|
|
|
Permission matrix (recommended):
|
|
- create_department → Org Admin
|
|
- create_team → Org Admin, Dept Admin (same dept)
|
|
- assign_identity → Org Admin, Dept Admin (same dept), Team Lead (same team)
|
|
- register_agent → Org Admin, Dept Admin, Team Lead (scope-limited)
|
|
- set_supervisor → Org Admin, Dept Admin (same dept)
|
|
- query → all roles, but only schema fields with `queryable: true`
|
|
|
|
## 5) Schema Configuration (example)
|
|
```json
|
|
{
|
|
"position": { "type": "string", "queryable": true },
|
|
"discord_user_id": { "type": "string", "queryable": true },
|
|
"git_user_name": { "type": "string", "queryable": true },
|
|
"department": { "type": "string", "queryable": false },
|
|
"team": { "type": "string", "queryable": false }
|
|
}
|
|
```
|
|
|
|
## 6) Tool/API Surface (MVP)
|
|
- `create_department(name, orgId)`
|
|
- `create_team(name, deptId)`
|
|
- `register_agent(agentId, name)`
|
|
- `assign_identity(agentId, deptId, teamId, meta)`
|
|
- `set_supervisor(agentId, supervisorId)`
|
|
- `whoami(agentId)` → identities + supervisor + roles
|
|
- `query_agents(filters, options)` → list; supports `eq | contains | regex`
|
|
|
|
Query example:
|
|
```json
|
|
{
|
|
"filters": [
|
|
{"field":"discord_user_id","op":"eq","value":"123"},
|
|
{"field":"git_user_name","op":"regex","value":"^hang"}
|
|
],
|
|
"options": {"limit": 20, "offset": 0}
|
|
}
|
|
```
|
|
|
|
## 7) Data Model (MVP)
|
|
- Organization { id, name }
|
|
- Department { id, name, orgId }
|
|
- Team { id, name, deptId }
|
|
- Agent { id, name, roles[] }
|
|
- Identity { id, agentId, deptId, teamId, meta }
|
|
- Supervisor { agentId, supervisorId }
|
|
|
|
## 8) Milestones
|
|
**Phase 0 (Design)**
|
|
- finalize schema
|
|
- confirm permission rules
|
|
|
|
**Phase 1 (MVP)**
|
|
- storage + JSON persistence
|
|
- core models + tools
|
|
- query DSL
|
|
- scope memory adapter
|
|
|
|
**Phase 2 (v1)**
|
|
- policy refinements
|
|
- better query pagination & filtering
|
|
- management commands & validation
|
|
|
|
## 9) Notes & Decisions
|
|
- Structure data is not stored in memory_store.
|
|
- Shared memory uses memory_store (compatible with memory-lancedb-pro).
|
|
- Queryable fields are whitelisted via schema.
|