Files
moeka-project/services/minecraft/docs/repl-self-evolution-roadmap.md
T
Rin 02d3f38663 fix(minecraft): make logging actually meaningful
Ported from commit f8b73bbf (partial - debug files only):
- Add /api/logs endpoint for listing and loading persisted log files
- Add log file selector UI to debug dashboard
- Filter persistEvent to only save relevant event types
- Add refreshFileList and loadPersistedLog methods to LogsPanel
2026-02-18 11:14:07 +08:00

253 lines
7.1 KiB
Markdown

# REPL Self-Evolution Roadmap (Discussion Draft)
## Goal
Turn the current JS planner REPL into a "poor man's coding agent" environment that can:
1. Inspect its own runtime and project code.
2. Read docs (especially Mineflayer docs) from within the REPL.
3. Propose and eventually apply tool/runtime improvements safely.
4. Register event hooks and optional background daemons for long-lived behaviors.
No implementation details in this draft are final; this is a planning artifact for review.
---
## Design Principles
- **Safety-first by default**: proposal mode before apply mode.
- **Auditability**: every introspection and mutation action is logged and replayable.
- **Layered capabilities**: observation -> proposal -> gated execution.
- **Deterministic core loop**: keep turn-based planner behavior stable.
- **Minimal trusted surface**: expose small, explicit APIs rather than raw Node/system access.
---
## Capability Areas
## 1) Self-Introspection Interface (REPL APIs)
Expose a read-oriented introspection namespace in REPL globals.
Proposed APIs:
- `introspect.runtime()` -> model, tool list, limits, feature flags, queue status.
- `introspect.tools()` -> current action/tool signatures and schemas.
- `introspect.memory()` -> mem summary + size stats.
- `introspect.last()` -> previous script/action results.
- `introspect.health()` -> basic diagnostics (event lag, retries, failures).
Notes:
- Start read-only.
- Keep outputs compact and structured.
## 2) Project Code Reading Interface
Expose controlled repository browsing from REPL without full shell.
Proposed APIs:
- `repo.list(path = ".", opts?)` -> file/dir listing (allowlisted roots).
- `repo.read(path, opts?)` -> file snippet with line ranges and size cap.
- `repo.search(query, opts?)` -> ripgrep-backed search with result caps.
- `repo.symbol(path, name)` -> optional simple symbol lookup (later phase).
Guardrails:
- Read-only initially.
- Max file size / line range limits.
- Block secrets and ignored paths (`.env`, keys, tokens, node_modules, build outputs).
## 3) Mineflayer Knowledge Surface
Provide docs/refs to help the agent compose better behavior/tool proposals.
Options:
- Local curated docs bundle (recommended for deterministic behavior).
- Indexed snippets for common APIs (movement, inventory, entities, events).
- Optional "doc cards" in prompt context for high-frequency use.
REPL API:
- `docs.find("pathfinder")`
- `docs.read("mineflayer.bot.chat")`
- `docs.example("collectBlock")`
## 4) Self-Evolution Workflow (Proposal First)
Add a governance pipeline before any self-modification:
1. Agent inspects code/docs/runtime.
2. Agent emits a **Change Proposal** object:
- rationale
- files impacted
- risks
- test plan
- rollback plan
3. Human reviews proposal.
4. Optional apply step (future): patch generation + tests + review gate.
Proposed REPL APIs:
- `evolve.propose(spec)`
- `evolve.listProposals()`
- `evolve.getProposal(id)`
- `evolve.reject(id, reason)` / `evolve.approve(id)` (human-mediated)
## 5) Event Hooks
Support persistent declarative hooks that trigger scripts on conditions.
Hook model:
- Trigger: chat/perception/feedback/time tick/custom.
- Condition: JS predicate over `ctx`/`last`/`mem`.
- Action: script body or tool calls.
- Policy: debounce, cooldown, max executions, priority.
API sketch:
- `hooks.register({ name, on, when, script, policy })`
- `hooks.list()`
- `hooks.disable(name)` / `hooks.enable(name)` / `hooks.remove(name)`
Guardrails:
- Prevent recursive storms (hook triggers caused by own outputs).
- Global execution budget per minute.
- Trace each hook invocation.
## 6) Background Daemons
Allow optional long-running tasks for monitoring/planning loops.
Potential uses:
- Patrol/scan loops.
- Inventory housekeeping.
- Threat watcher with alerts.
- Social etiquette responder.
API sketch:
- `daemon.start({ name, script, intervalMs, policy })`
- `daemon.stop(name)`
- `daemon.status(name)` / `daemon.list()`
Constraints:
- Strict per-daemon CPU/time budgets.
- Kill switch and watchdog timeout.
- No direct world mutation unless via validated tool intents.
---
## Architecture Sketch
## REPL Context Modules
- `ctx` (readonly, per-turn injected)
- `last` (readonly, last outcome)
- `mem` (persistent writable)
- `introspect` (readonly API)
- `repo` (read-only at first)
- `docs` (read-only retrieval)
- `hooks` (managed registration)
- `daemon` (managed lifecycle)
- `evolve` (proposal orchestration)
## Runtime Services (outside REPL sandbox)
- Introspection service
- Repo/document index service
- Hook scheduler
- Daemon supervisor
- Proposal registry + audit log
---
## Rollout Plan
## Phase 0 - Foundation Hardening
- Finalize `ctx/last/mem` conventions and docs.
- Add telemetry on script size, execution time, action count.
- Add rate limits and anti-loop protections.
## Phase 1 - Read-Only Introspection + Repo/Docs Read
- Implement `introspect.*`, `repo.list/read/search`, `docs.find/read`.
- Add allowlist + secret/path guards.
- Add prompt conventions for using these APIs responsibly.
## Phase 2 - Proposal-Only Self-Evolution
- Implement `evolve.propose` and proposal registry.
- Define proposal schema + scoring rubric.
- Add review UI/log stream hooks.
## Phase 3 - Hooks + Daemons (Constrained)
- Implement managed hooks with cooldown/budgets.
- Implement supervised daemon runner.
- Add kill switch + watchdog + per-feature flags.
## Phase 4 - Assisted Apply (Optional)
- Agent can prepare patch candidates + test commands.
- Human approval required before applying.
- Automatic rollback metadata and validation report.
---
## Prompt/Policy Conventions to Add
- Prefer world tools for immediate actions.
- Use `repo/docs/introspect` for understanding before proposing changes.
- Never assume write privileges; use `evolve.propose`.
- Keep hook/daemon logic idempotent and bounded.
- Explain intent in `mem` notes before major behavior changes.
---
## Risk Register
- **Runaway autonomy**: hooks/daemons creating infinite loops.
- **Context bloat**: huge introspection outputs inflating token use.
- **Unsafe self-editing**: bad proposals that degrade behavior.
- **Secret leakage**: repo read accidentally exposing credentials.
- **Operational complexity**: too many async subsystems reducing predictability.
Mitigations:
- Hard limits + quotas + cooldowns.
- Strong allowlists and redaction layers.
- Proposal-only first, human gates later.
- Feature flags for every new subsystem.
- Rich tracing and one-command emergency disable.
---
## Open Questions (For Discussion)
1. Should proposal approval live in chat only, or also in a local UI/CLI queue?
2. How much repo scope should be readable by default?
3. Should hooks/daemons be persisted across restarts?
4. Do we want separate "safe mode" and "experimental mode" presets?
5. What exact success metrics define "self-evolution is helping"?
---
## Suggested First Milestone
Implement only:
- `introspect.runtime/tools/health`
- `repo.list/read/search` (read-only, strict limits)
- `docs.find/read` (curated Mineflayer docs)
- `evolve.propose` registry (no apply)
This gives strong value quickly while keeping risk low.