Phase 5 of plans/autonomous-survival-bot-prd.md. Make the bot feel
present in chat without ever becoming a command executor.
New: runtime/social/
- intent.js: classifyIntent({text, botName}) returns one of GREETING /
STATUS_QUESTION / ADDRESSED_BANTER / COMMAND_LIKE / UNSAFE_REQUEST /
AMBIENT. Unicode-aware word boundaries so cyrillic + latin both work
("Привет всем" → GREETING, "build me a tower" → AMBIENT unless
addressed).
- reply.js: generateReply({intent, speaker, snapshot, diaryTail}) →
short templated response, or {send: null, escalate: true} for the
caller to decide whether to spend Pi tokens.
- memory.js: createChatMemory() — per-speaker LRU buffer of recent
lines; redacts password / api_key / JWT-shaped tokens at append
time, so the buffer can be safely fed back into any future prompt.
- social.test.js: 12 tests (intent edges, memory eviction, redaction,
reply routing). npm test now 40/40.
state-store.js additions:
- readDiaryTail(n) — reads the last N lines of today's diary; used by
status replies.
- writeEscalation({from, request, whyUnsure, wouldHave}) /
listEscalations() — JSONL log under state/<host>/escalations.jsonl
for UNSAFE_REQUEST classifications and future operator review.
bot.js: handleChat() now routes through social/intent + social/reply
(replacing the Phase-0 inline regexes), records every line into
chatMemory, and writes an escalation when classifyIntent returns
UNSAFE_REQUEST. Command-like notice + dialog-only behaviour from
Phase 0 are preserved.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
50 lines
1.4 KiB
JSON
50 lines
1.4 KiB
JSON
{
|
|
"name": "pepa-pi-bot",
|
|
"version": "0.0.1",
|
|
"private": true,
|
|
"description": "An autonomous, self-extending Minecraft player powered by Pi and Mineflayer.",
|
|
"license": "MIT",
|
|
"type": "module",
|
|
"engines": {
|
|
"node": ">=20"
|
|
},
|
|
"scripts": {
|
|
"agent": "pi",
|
|
"agent:resume": "pi -c",
|
|
"bot": "node runtime/supervisor.js",
|
|
"bot:bare": "node runtime/bot.js",
|
|
"tui": "tsx tui/tui.tsx",
|
|
"propose:apply": "node scripts/propose-apply.js",
|
|
"stop": "bash scripts/stop.sh",
|
|
"test": "node --test runtime/skills/contract.test.js runtime/skills/groups.test.js runtime/curriculum.test.js runtime/social/social.test.js"
|
|
},
|
|
"dependencies": {
|
|
"dotenv": "^16.4.5",
|
|
"ink": "^7.0.4",
|
|
"ink-text-input": "^6.0.0",
|
|
"minecraft-data": "^3.110.2",
|
|
"mineflayer": "^4.37.1",
|
|
"mineflayer-armor-manager": "^2.0.1",
|
|
"mineflayer-auto-eat": "^5.0.3",
|
|
"mineflayer-collectblock": "^1.6.0",
|
|
"mineflayer-pathfinder": "^2.4.5",
|
|
"mineflayer-pvp": "^1.3.2",
|
|
"mineflayer-tool": "^1.2.0",
|
|
"prismarine-item": "^1.18.0",
|
|
"react": "^19.2.6",
|
|
"vec3": "^0.2.0"
|
|
},
|
|
"repository": {
|
|
"type": "git",
|
|
"url": "git+https://github.com/xmatic-squad/pepa-pi-bot.git"
|
|
},
|
|
"bugs": {
|
|
"url": "https://github.com/xmatic-squad/pepa-pi-bot/issues"
|
|
},
|
|
"homepage": "https://github.com/xmatic-squad/pepa-pi-bot#readme",
|
|
"devDependencies": {
|
|
"@types/react": "^19.2.15",
|
|
"tsx": "^4.22.3"
|
|
}
|
|
}
|