{ "module": "mesh-knowledge", "version": "1", "slug": "knowledge", "requires": [ "postgres-database" ], "contributes": { "postgres-database": { "name": "knowledge" } }, "binds": { "postgres-database": "${dir:state}/database.json" }, "secrets": { "postgres-database": "${dir:state}/database.secret" }, "seats": [ { "name": "knowledge-base", "scope": "mesh", "serves": [ "ask", "get", "holds", "links", "history", "reserve", "propose", "import", "return" ] } ], "claims": [ { "name": "knowledge-base", "scope": "mesh", "serves": [ "ask", "get", "holds", "links", "history", "reserve", "propose", "import", "return" ] } ], "tools": [ "knowledge_health", "knowledge_highest" ], "emits": [ "reserved", "proposed", "reviewed", "accepted", "changed", "imported", "drafted", "confirmed", "returned" ], "uses": [ "operator-channel" ], "invokes": [ "seat:issue-tracker.reserve", "claude-code.claude_code_judge", "claude-code.claude_code_judged", "records.records_status", "records.records_list", "records.records_read", "seat:operator-channel.notify" ], "config": { "judge-model": { "type": "string", "description": "The model the knowledge base's drafting and confirming judgements ask, by the agent's name for it, such as sonnet; empty is sonnet.", "default": "sonnet" }, "drafting": { "type": "string", "description": "Whether the knowledge base drafts and confirms clauses itself: off stops it, anything else is on.", "default": "on" }, "reserved-for": { "type": "string", "description": "How long a reserved number waits for its proposal before it is withdrawn, as a duration such as 168h; empty is the knowledge base's own default.", "pattern": "|[0-9]+(\\.[0-9]+)?(ns|us|µs|ms|s|m|h)([0-9]+(\\.[0-9]+)?(ns|us|µs|ms|s|m|h))*", "default": "168h" } }, "resources": [ { "id": "state", "type": "directory", "mode": "0700", "place": "." }, { "id": "database-url", "type": "file", "path": "${dir:state}/database.url", "mode": "0600", "template": "files/database.url" }, { "id": "settings", "trusted": false, "type": "file", "path": "${dir:state}/settings.json", "mode": "0600", "takes-config": ["judge-model", "drafting", "reserved-for"], "merge": "json", "template": "files/settings.json" }, { "id": "prepare", "type": "process", "name": "mesh-knowledge-prepare", "artifact": "tools", "run": [ "./mesh-knowledge", "prepare" ], "run-once": true, "env": { "DATABASE_URL_FILE": "${dir:state}/database.url" }, "restart-on": [ "database-url" ] }, { "id": "keep", "type": "process", "name": "mesh-knowledge-keep", "artifact": "tools", "run": [ "./mesh-knowledge", "keep" ], "env": { "DATABASE_URL_FILE": "${dir:state}/database.url" }, "restart-on": [ "database-url" ], "health": { "kind": "unit" } }, { "id": "watch", "type": "process", "name": "mesh-knowledge-watch", "artifact": "tools", "run": [ "./mesh-knowledge", "watch" ], "user": "${machine:account}", "env": { "DATABASE_URL_FILE": "${dir:state}/database.url", "MESH_KNOWLEDGE_STATUS": "${dir:state}/health.json" }, "restart-on": [ "database-url" ], "health": { "kind": "tool", "tool": "knowledge_health", "needs": "postgres-database", "interval": "60s", "timeout": "10s", "looks": 2, "grace": "180s" } } ], "build": { "artifacts": [ { "name": "tools", "kind": "bundle", "language": "go", "system": "arch", "from": "cmd/mesh-knowledge", "binary": "mesh-knowledge", "loads": [ "mesh-knowledge" ], "env": { "DATABASE_URL_FILE": "${dir:state}/database.url", "MESH_KNOWLEDGE_SETTINGS": "${dir:state}/settings.json", "MESH_KNOWLEDGE_STATUS": "${dir:state}/health.json" } }, { "name": "files", "kind": "archive", "from": "files" } ] } }