Initial wiki push - 2026-04-10

This commit is contained in:
Stream AI
2026-04-10 20:14:25 +00:00
commit 0d9afaf05a
43 changed files with 3008 additions and 0 deletions

430
.openclaw-wiki/cache/agent-digest.json vendored Normal file
View File

@@ -0,0 +1,430 @@
{
"pageCounts": {
"entity": 10,
"concept": 5,
"source": 8,
"synthesis": 0,
"report": 6
},
"claimCount": 0,
"claimHealth": {
"freshness": {
"fresh": 0,
"aging": 0,
"stale": 0,
"unknown": 0
},
"contested": 0,
"lowConfidence": 0,
"missingEvidence": 0
},
"contradictionClusters": [],
"pages": [
{
"id": "concept.skill-diagram",
"title": "Skills: diagram-png & diagram-table",
"kind": "concept",
"path": "concepts/skill-diagram.md",
"sourceIds": [
"source.skill"
],
"questions": [],
"contradictions": [],
"freshnessLevel": "fresh",
"lastTouchedAt": "2026-04-10T13:21:00.000Z",
"claimCount": 0,
"topClaims": []
},
{
"id": "concept.skill-ontology",
"title": "Skill: ontology",
"kind": "concept",
"path": "concepts/skill-ontology.md",
"sourceIds": [
"source.skill"
],
"questions": [],
"contradictions": [],
"freshnessLevel": "fresh",
"lastTouchedAt": "2026-04-10T13:21:00.000Z",
"claimCount": 0,
"topClaims": []
},
{
"id": "concept.skill-search",
"title": "Skills: youtube-search & yandex-search",
"kind": "concept",
"path": "concepts/skill-search.md",
"sourceIds": [
"source.skill"
],
"questions": [],
"contradictions": [],
"freshnessLevel": "fresh",
"lastTouchedAt": "2026-04-10T13:21:00.000Z",
"claimCount": 0,
"topClaims": []
},
{
"id": "concept.skill-telegram-collector",
"title": "Skill: telegram-collector",
"kind": "concept",
"path": "concepts/skill-telegram-collector.md",
"sourceIds": [
"source.skill"
],
"questions": [],
"contradictions": [],
"freshnessLevel": "fresh",
"lastTouchedAt": "2026-04-10T13:21:00.000Z",
"claimCount": 0,
"topClaims": []
},
{
"id": "concept.skill-voice-tts",
"title": "Skill: voice-tts",
"kind": "concept",
"path": "concepts/skill-voice-tts.md",
"sourceIds": [
"source.skill"
],
"questions": [],
"contradictions": [],
"freshnessLevel": "fresh",
"lastTouchedAt": "2026-04-10T13:21:00.000Z",
"claimCount": 0,
"topClaims": []
},
{
"id": "entity.project-apps-portal",
"title": "Apps Portal",
"kind": "entity",
"path": "entities/project-apps-portal.md",
"sourceIds": [
"source.dev-task"
],
"questions": [],
"contradictions": [],
"freshnessLevel": "fresh",
"lastTouchedAt": "2026-04-10T13:33:00.000Z",
"claimCount": 0,
"topClaims": []
},
{
"id": "entity.project-flightradar24",
"title": "Карта шумового загрязнения FR24",
"kind": "entity",
"path": "entities/project-flightradar24.md",
"sourceIds": [
"source.project"
],
"questions": [],
"contradictions": [],
"freshnessLevel": "fresh",
"lastTouchedAt": "2026-04-10T13:21:00.000Z",
"claimCount": 0,
"topClaims": []
},
{
"id": "entity.project-ha",
"title": "Home Assistant",
"kind": "entity",
"path": "entities/project-ha.md",
"sourceIds": [
"source.project"
],
"questions": [],
"contradictions": [],
"freshnessLevel": "fresh",
"lastTouchedAt": "2026-04-10T13:21:00.000Z",
"claimCount": 0,
"topClaims": []
},
{
"id": "entity.project-internet-orders",
"title": "Интернет-заказы",
"kind": "entity",
"path": "entities/project-internet-orders.md",
"sourceIds": [
"source.project"
],
"questions": [],
"contradictions": [],
"freshnessLevel": "fresh",
"lastTouchedAt": "2026-04-10T13:21:00.000Z",
"claimCount": 0,
"topClaims": []
},
{
"id": "entity.project-proxy-vm",
"title": "Proxy VM (vpn-srv)",
"kind": "entity",
"path": "entities/project-proxy-vm.md",
"sourceIds": [
"source.project"
],
"questions": [],
"contradictions": [],
"freshnessLevel": "fresh",
"lastTouchedAt": "2026-04-10T13:21:00.000Z",
"claimCount": 0,
"topClaims": []
},
{
"id": "entity.project-snowbike-rag",
"title": "Snowbike RAG",
"kind": "entity",
"path": "entities/project-snowbike-rag.md",
"sourceIds": [
"source.project"
],
"questions": [],
"contradictions": [],
"freshnessLevel": "fresh",
"lastTouchedAt": "2026-04-10T13:33:00.000Z",
"claimCount": 0,
"topClaims": []
},
{
"id": "entity.project-tapo",
"title": "Tapo Camera Monitor",
"kind": "entity",
"path": "entities/project-tapo.md",
"sourceIds": [
"source.project"
],
"questions": [],
"contradictions": [],
"freshnessLevel": "fresh",
"lastTouchedAt": "2026-04-10T13:21:00.000Z",
"claimCount": 0,
"topClaims": []
},
{
"id": "entity.project-telegram-collector",
"title": "Telegram Collector",
"kind": "entity",
"path": "entities/project-telegram-collector.md",
"sourceIds": [
"source.project"
],
"questions": [],
"contradictions": [],
"freshnessLevel": "fresh",
"lastTouchedAt": "2026-04-10T13:21:00.000Z",
"claimCount": 0,
"topClaims": []
},
{
"id": "entity.project-video-notes",
"title": "Видеокружочки",
"kind": "entity",
"path": "entities/project-video-notes.md",
"sourceIds": [
"source.tz"
],
"questions": [],
"contradictions": [],
"freshnessLevel": "fresh",
"lastTouchedAt": "2026-04-10T13:33:00.000Z",
"claimCount": 0,
"topClaims": []
},
{
"id": "entity.project-wiki-memory",
"title": "Wiki & Memory",
"kind": "entity",
"path": "entities/project-wiki-memory.md",
"sourceIds": [
"source.memory"
],
"questions": [],
"contradictions": [],
"freshnessLevel": "fresh",
"lastTouchedAt": "2026-04-10T13:48:00.000Z",
"claimCount": 0,
"topClaims": []
},
{
"id": "report.claim-health",
"title": "Claim Health",
"kind": "report",
"path": "reports/claim-health.md",
"sourceIds": [],
"questions": [],
"contradictions": [],
"freshnessLevel": "fresh",
"lastTouchedAt": "2026-04-09T22:04:02.263Z",
"claimCount": 0,
"topClaims": []
},
{
"id": "report.contradictions",
"title": "Contradictions",
"kind": "report",
"path": "reports/contradictions.md",
"sourceIds": [],
"questions": [],
"contradictions": [],
"freshnessLevel": "fresh",
"lastTouchedAt": "2026-04-09T22:04:02.263Z",
"claimCount": 0,
"topClaims": []
},
{
"id": "report.lint",
"title": "Lint Report",
"kind": "report",
"path": "reports/lint.md",
"sourceIds": [],
"questions": [],
"contradictions": [],
"freshnessLevel": "unknown",
"claimCount": 0,
"topClaims": []
},
{
"id": "report.low-confidence",
"title": "Low Confidence",
"kind": "report",
"path": "reports/low-confidence.md",
"sourceIds": [],
"questions": [],
"contradictions": [],
"freshnessLevel": "fresh",
"lastTouchedAt": "2026-04-09T22:04:02.263Z",
"claimCount": 0,
"topClaims": []
},
{
"id": "report.open-questions",
"title": "Open Questions",
"kind": "report",
"path": "reports/open-questions.md",
"sourceIds": [],
"questions": [],
"contradictions": [],
"freshnessLevel": "fresh",
"lastTouchedAt": "2026-04-09T22:04:02.263Z",
"claimCount": 0,
"topClaims": []
},
{
"id": "report.stale-pages",
"title": "Stale Pages",
"kind": "report",
"path": "reports/stale-pages.md",
"sourceIds": [],
"questions": [],
"contradictions": [],
"freshnessLevel": "fresh",
"lastTouchedAt": "2026-04-10T13:25:24.905Z",
"claimCount": 0,
"topClaims": []
},
{
"id": "source.2026-04-09",
"title": "2026 04 09",
"kind": "source",
"path": "sources/2026-04-09.md",
"sourceIds": [],
"questions": [],
"contradictions": [],
"freshnessLevel": "fresh",
"lastTouchedAt": "2026-04-09T22:04:56.932Z",
"claimCount": 0,
"topClaims": []
},
{
"id": "source.2026-04-10",
"title": "2026 04 10",
"kind": "source",
"path": "sources/2026-04-10.md",
"sourceIds": [],
"questions": [],
"contradictions": [],
"freshnessLevel": "fresh",
"lastTouchedAt": "2026-04-10T15:43:24.102Z",
"claimCount": 0,
"topClaims": []
},
{
"id": "source.brd",
"title": "BRD",
"kind": "source",
"path": "sources/brd.md",
"sourceIds": [],
"questions": [],
"contradictions": [],
"freshnessLevel": "fresh",
"lastTouchedAt": "2026-04-09T22:22:18.682Z",
"claimCount": 0,
"topClaims": []
},
{
"id": "source.dev-task",
"title": "DEV TASK",
"kind": "source",
"path": "sources/dev-task.md",
"sourceIds": [],
"questions": [],
"contradictions": [],
"freshnessLevel": "fresh",
"lastTouchedAt": "2026-04-10T13:37:41.693Z",
"claimCount": 0,
"topClaims": []
},
{
"id": "source.memory",
"title": "MEMORY",
"kind": "source",
"path": "sources/memory.md",
"sourceIds": [],
"questions": [],
"contradictions": [],
"freshnessLevel": "fresh",
"lastTouchedAt": "2026-04-10T15:42:43.804Z",
"claimCount": 0,
"topClaims": []
},
{
"id": "source.project",
"title": "PROJECT",
"kind": "source",
"path": "sources/project.md",
"sourceIds": [],
"questions": [],
"contradictions": [],
"freshnessLevel": "fresh",
"lastTouchedAt": "2026-04-10T15:41:41.998Z",
"claimCount": 0,
"topClaims": []
},
{
"id": "source.skill",
"title": "SKILL",
"kind": "source",
"path": "sources/skill.md",
"sourceIds": [],
"questions": [],
"contradictions": [],
"freshnessLevel": "fresh",
"lastTouchedAt": "2026-04-10T13:17:08.264Z",
"claimCount": 0,
"topClaims": []
},
{
"id": "source.tz",
"title": "TZ",
"kind": "source",
"path": "sources/tz.md",
"sourceIds": [],
"questions": [],
"contradictions": [],
"freshnessLevel": "fresh",
"lastTouchedAt": "2026-04-10T13:36:51.302Z",
"claimCount": 0,
"topClaims": []
}
]
}

1
.openclaw-wiki/cache/claims.jsonl vendored Normal file
View File

@@ -0,0 +1 @@

84
.openclaw-wiki/log.jsonl Normal file
View File

@@ -0,0 +1,84 @@
{"type":"init","timestamp":"2026-04-09T22:02:40.331Z","details":{"createdDirectories":[".","entities","concepts","syntheses","sources","reports","_attachments","_views",".openclaw-wiki",".openclaw-wiki/locks",".openclaw-wiki/cache"],"createdFiles":["AGENTS.md","WIKI.md","index.md","inbox.md",".openclaw-wiki/state.json",".openclaw-wiki/log.jsonl"]}}
{"type":"compile","timestamp":"2026-04-09T22:04:02.293Z","details":{"pageCounts":{"entity":0,"concept":0,"source":0,"synthesis":0,"report":5},"updatedFiles":["reports/open-questions.md","reports/contradictions.md","reports/low-confidence.md","reports/claim-health.md","reports/stale-pages.md",".openclaw-wiki/cache/agent-digest.json",".openclaw-wiki/cache/claims.jsonl","index.md","sources/index.md","entities/index.md","concepts/index.md","syntheses/index.md","reports/index.md"]}}
{"type":"ingest","timestamp":"2026-04-09T22:04:31.399Z","details":{"inputPath":"/home/node/.openclaw/workspace/MEMORY.md","pageId":"source.memory","pagePath":"sources/memory.md","bytes":11705,"created":true}}
{"type":"compile","timestamp":"2026-04-09T22:04:31.431Z","details":{"pageCounts":{"entity":0,"concept":0,"source":1,"synthesis":0,"report":5},"updatedFiles":["sources/memory.md",".openclaw-wiki/cache/agent-digest.json","index.md","sources/index.md"]}}
{"type":"ingest","timestamp":"2026-04-09T22:04:56.932Z","details":{"inputPath":"/home/node/.openclaw/workspace/memory/2026-04-09.md","pageId":"source.2026-04-09","pagePath":"sources/2026-04-09.md","bytes":4183,"created":true}}
{"type":"compile","timestamp":"2026-04-09T22:04:56.969Z","details":{"pageCounts":{"entity":0,"concept":0,"source":2,"synthesis":0,"report":5},"updatedFiles":["sources/2026-04-09.md",".openclaw-wiki/cache/agent-digest.json","index.md","sources/index.md"]}}
{"type":"ingest","timestamp":"2026-04-09T22:16:05.170Z","details":{"inputPath":"/home/node/.openclaw/workspace/tasks/flightradar24/PROJECT.md","pageId":"source.project","pagePath":"sources/project.md","bytes":2949,"created":true}}
{"type":"compile","timestamp":"2026-04-09T22:16:05.214Z","details":{"pageCounts":{"entity":0,"concept":0,"source":3,"synthesis":0,"report":5},"updatedFiles":["sources/project.md",".openclaw-wiki/cache/agent-digest.json","index.md","sources/index.md"]}}
{"type":"ingest","timestamp":"2026-04-09T22:16:30.227Z","details":{"inputPath":"/home/node/.openclaw/workspace/tasks/ha/PROJECT.md","pageId":"source.project","pagePath":"sources/project.md","bytes":4244,"created":false}}
{"type":"compile","timestamp":"2026-04-09T22:16:30.263Z","details":{"pageCounts":{"entity":0,"concept":0,"source":3,"synthesis":0,"report":5},"updatedFiles":["sources/project.md",".openclaw-wiki/cache/agent-digest.json"]}}
{"type":"ingest","timestamp":"2026-04-09T22:16:55.754Z","details":{"inputPath":"/home/node/.openclaw/workspace/tasks/internet-orders/PROJECT.md","pageId":"source.project","pagePath":"sources/project.md","bytes":4933,"created":false}}
{"type":"compile","timestamp":"2026-04-09T22:16:55.794Z","details":{"pageCounts":{"entity":0,"concept":0,"source":3,"synthesis":0,"report":5},"updatedFiles":["sources/project.md",".openclaw-wiki/cache/agent-digest.json"]}}
{"type":"ingest","timestamp":"2026-04-09T22:17:21.034Z","details":{"inputPath":"/home/node/.openclaw/workspace/tasks/telegram-collector/PROJECT.md","pageId":"source.project","pagePath":"sources/project.md","bytes":2344,"created":false}}
{"type":"compile","timestamp":"2026-04-09T22:17:21.070Z","details":{"pageCounts":{"entity":0,"concept":0,"source":3,"synthesis":0,"report":5},"updatedFiles":["sources/project.md",".openclaw-wiki/cache/agent-digest.json"]}}
{"type":"ingest","timestamp":"2026-04-09T22:22:18.682Z","details":{"inputPath":"/home/node/.openclaw/workspace/tasks/snowbike-rag/BRD.md","pageId":"source.brd","pagePath":"sources/brd.md","bytes":5102,"created":true}}
{"type":"compile","timestamp":"2026-04-09T22:22:18.719Z","details":{"pageCounts":{"entity":0,"concept":0,"source":4,"synthesis":0,"report":5},"updatedFiles":["sources/brd.md",".openclaw-wiki/cache/agent-digest.json","index.md","sources/index.md"]}}
{"type":"ingest","timestamp":"2026-04-09T22:22:44.441Z","details":{"inputPath":"/home/node/.openclaw/workspace/tasks/snowbike-rag/DEV-TASK.md","pageId":"source.dev-task","pagePath":"sources/dev-task.md","bytes":3372,"created":true}}
{"type":"compile","timestamp":"2026-04-09T22:22:44.483Z","details":{"pageCounts":{"entity":0,"concept":0,"source":5,"synthesis":0,"report":5},"updatedFiles":["sources/dev-task.md",".openclaw-wiki/cache/agent-digest.json","index.md","sources/index.md"]}}
{"type":"ingest","timestamp":"2026-04-09T22:23:09.779Z","details":{"inputPath":"/home/node/.openclaw/workspace/tasks/apps-portal/DEV-TASK.md","pageId":"source.dev-task","pagePath":"sources/dev-task.md","bytes":2574,"created":false}}
{"type":"compile","timestamp":"2026-04-09T22:23:09.820Z","details":{"pageCounts":{"entity":0,"concept":0,"source":5,"synthesis":0,"report":5},"updatedFiles":["sources/dev-task.md",".openclaw-wiki/cache/agent-digest.json"]}}
{"type":"ingest","timestamp":"2026-04-09T22:23:35.509Z","details":{"inputPath":"/home/node/.openclaw/workspace/tasks/video-notes/TZ.md","pageId":"source.tz","pagePath":"sources/tz.md","bytes":8806,"created":true}}
{"type":"compile","timestamp":"2026-04-09T22:23:35.547Z","details":{"pageCounts":{"entity":0,"concept":0,"source":6,"synthesis":0,"report":5},"updatedFiles":["sources/tz.md",".openclaw-wiki/cache/agent-digest.json","index.md","sources/index.md"]}}
{"type":"ingest","timestamp":"2026-04-09T22:25:47.780Z","details":{"inputPath":"/home/node/.openclaw/workspace/tasks/proxy-vm/PROJECT.md","pageId":"source.project","pagePath":"sources/project.md","bytes":1165,"created":false}}
{"type":"compile","timestamp":"2026-04-09T22:25:47.818Z","details":{"pageCounts":{"entity":0,"concept":0,"source":6,"synthesis":0,"report":5},"updatedFiles":["sources/project.md",".openclaw-wiki/cache/agent-digest.json"]}}
{"type":"ingest","timestamp":"2026-04-09T22:26:13.374Z","details":{"inputPath":"/home/node/.openclaw/workspace/tasks/tapo/PROJECT.md","pageId":"source.project","pagePath":"sources/project.md","bytes":524,"created":false}}
{"type":"compile","timestamp":"2026-04-09T22:26:13.419Z","details":{"pageCounts":{"entity":0,"concept":0,"source":6,"synthesis":0,"report":5},"updatedFiles":["sources/project.md",".openclaw-wiki/cache/agent-digest.json"]}}
{"type":"lint","timestamp":"2026-04-10T07:09:42.554Z","details":{"issueCount":0,"reportPath":"reports/lint.md"}}
{"type":"compile","timestamp":"2026-04-10T07:16:23.292Z","details":{"pageCounts":{"entity":0,"concept":0,"source":6,"synthesis":0,"report":6},"updatedFiles":[".openclaw-wiki/cache/agent-digest.json","index.md","reports/index.md"]}}
{"type":"lint","timestamp":"2026-04-10T08:37:22.445Z","details":{"issueCount":0,"reportPath":"reports/lint.md"}}
{"type":"ingest","timestamp":"2026-04-10T13:05:53.981Z","details":{"inputPath":"/home/node/.openclaw/workspace/MEMORY.md","pageId":"source.memory","pagePath":"sources/memory.md","bytes":13897,"created":false}}
{"type":"compile","timestamp":"2026-04-10T13:05:54.063Z","details":{"pageCounts":{"entity":0,"concept":0,"source":6,"synthesis":0,"report":6},"updatedFiles":["sources/memory.md",".openclaw-wiki/cache/agent-digest.json"]}}
{"type":"ingest","timestamp":"2026-04-10T13:06:37.656Z","details":{"inputPath":"/home/node/.openclaw/workspace/tasks/internet-orders/PROJECT.md","pageId":"source.project","pagePath":"sources/project.md","bytes":4933,"created":false}}
{"type":"compile","timestamp":"2026-04-10T13:06:37.702Z","details":{"pageCounts":{"entity":0,"concept":0,"source":6,"synthesis":0,"report":6},"updatedFiles":["sources/project.md",".openclaw-wiki/cache/agent-digest.json"]}}
{"type":"ingest","timestamp":"2026-04-10T13:07:17.907Z","details":{"inputPath":"/home/node/.openclaw/workspace/tasks/telegram-collector/PROJECT.md","pageId":"source.project","pagePath":"sources/project.md","bytes":2344,"created":false}}
{"type":"compile","timestamp":"2026-04-10T13:07:17.985Z","details":{"pageCounts":{"entity":0,"concept":0,"source":6,"synthesis":0,"report":6},"updatedFiles":["sources/project.md",".openclaw-wiki/cache/agent-digest.json"]}}
{"type":"ingest","timestamp":"2026-04-10T13:07:58.581Z","details":{"inputPath":"/home/node/.openclaw/workspace/tasks/flightradar24/PROJECT.md","pageId":"source.project","pagePath":"sources/project.md","bytes":2949,"created":false}}
{"type":"compile","timestamp":"2026-04-10T13:07:58.658Z","details":{"pageCounts":{"entity":0,"concept":0,"source":6,"synthesis":0,"report":6},"updatedFiles":["sources/project.md",".openclaw-wiki/cache/agent-digest.json"]}}
{"type":"ingest","timestamp":"2026-04-10T13:08:39.062Z","details":{"inputPath":"/home/node/.openclaw/workspace/tasks/proxy-vm/PROJECT.md","pageId":"source.project","pagePath":"sources/project.md","bytes":1165,"created":false}}
{"type":"compile","timestamp":"2026-04-10T13:08:39.099Z","details":{"pageCounts":{"entity":0,"concept":0,"source":6,"synthesis":0,"report":6},"updatedFiles":["sources/project.md",".openclaw-wiki/cache/agent-digest.json"]}}
{"type":"ingest","timestamp":"2026-04-10T13:09:19.902Z","details":{"inputPath":"/home/node/.openclaw/workspace/tasks/tapo/PROJECT.md","pageId":"source.project","pagePath":"sources/project.md","bytes":524,"created":false}}
{"type":"compile","timestamp":"2026-04-10T13:09:19.984Z","details":{"pageCounts":{"entity":0,"concept":0,"source":6,"synthesis":0,"report":6},"updatedFiles":["sources/project.md",".openclaw-wiki/cache/agent-digest.json"]}}
{"type":"ingest","timestamp":"2026-04-10T13:10:01.102Z","details":{"inputPath":"/home/node/.openclaw/workspace/tasks/ha/PROJECT.md","pageId":"source.project","pagePath":"sources/project.md","bytes":4244,"created":false}}
{"type":"compile","timestamp":"2026-04-10T13:10:01.181Z","details":{"pageCounts":{"entity":0,"concept":0,"source":6,"synthesis":0,"report":6},"updatedFiles":["sources/project.md",".openclaw-wiki/cache/agent-digest.json"]}}
{"type":"ingest","timestamp":"2026-04-10T13:10:59.081Z","details":{"inputPath":"/home/node/.openclaw/workspace/skills/ontology/SKILL.md","pageId":"source.skill","pagePath":"sources/skill.md","bytes":6703,"created":true}}
{"type":"compile","timestamp":"2026-04-10T13:10:59.293Z","details":{"pageCounts":{"entity":0,"concept":0,"source":7,"synthesis":0,"report":6},"updatedFiles":["sources/skill.md",".openclaw-wiki/cache/agent-digest.json","index.md","sources/index.md"]}}
{"type":"ingest","timestamp":"2026-04-10T13:12:15.696Z","details":{"inputPath":"/home/node/.openclaw/workspace/skills/youtube-search/SKILL.md","pageId":"source.skill","pagePath":"sources/skill.md","bytes":1565,"created":false}}
{"type":"compile","timestamp":"2026-04-10T13:12:15.804Z","details":{"pageCounts":{"entity":0,"concept":0,"source":7,"synthesis":0,"report":6},"updatedFiles":["sources/skill.md",".openclaw-wiki/cache/agent-digest.json"]}}
{"type":"ingest","timestamp":"2026-04-10T13:12:58.401Z","details":{"inputPath":"/home/node/.openclaw/workspace/skills/telegram-collector/SKILL.md","pageId":"source.skill","pagePath":"sources/skill.md","bytes":6707,"created":false}}
{"type":"compile","timestamp":"2026-04-10T13:12:58.478Z","details":{"pageCounts":{"entity":0,"concept":0,"source":7,"synthesis":0,"report":6},"updatedFiles":["sources/skill.md",".openclaw-wiki/cache/agent-digest.json"]}}
{"type":"ingest","timestamp":"2026-04-10T13:13:38.508Z","details":{"inputPath":"/home/node/.openclaw/workspace/skills/yandex-search/SKILL.md","pageId":"source.skill","pagePath":"sources/skill.md","bytes":1317,"created":false}}
{"type":"compile","timestamp":"2026-04-10T13:13:38.591Z","details":{"pageCounts":{"entity":0,"concept":0,"source":7,"synthesis":0,"report":6},"updatedFiles":["sources/skill.md",".openclaw-wiki/cache/agent-digest.json"]}}
{"type":"ingest","timestamp":"2026-04-10T13:14:21.288Z","details":{"inputPath":"/home/node/.openclaw/workspace/skills/heygen-video/SKILL.md","pageId":"source.skill","pagePath":"sources/skill.md","bytes":5499,"created":false}}
{"type":"compile","timestamp":"2026-04-10T13:14:21.368Z","details":{"pageCounts":{"entity":0,"concept":0,"source":7,"synthesis":0,"report":6},"updatedFiles":["sources/skill.md",".openclaw-wiki/cache/agent-digest.json"]}}
{"type":"ingest","timestamp":"2026-04-10T13:15:02.705Z","details":{"inputPath":"/home/node/.openclaw/workspace/skills/diagram-table/SKILL.md","pageId":"source.skill","pagePath":"sources/skill.md","bytes":3890,"created":false}}
{"type":"compile","timestamp":"2026-04-10T13:15:02.785Z","details":{"pageCounts":{"entity":0,"concept":0,"source":7,"synthesis":0,"report":6},"updatedFiles":["sources/skill.md",".openclaw-wiki/cache/agent-digest.json"]}}
{"type":"ingest","timestamp":"2026-04-10T13:15:45.383Z","details":{"inputPath":"/home/node/.openclaw/skills/voice-tts/SKILL.md","pageId":"source.skill","pagePath":"sources/skill.md","bytes":3207,"created":false}}
{"type":"compile","timestamp":"2026-04-10T13:15:45.463Z","details":{"pageCounts":{"entity":0,"concept":0,"source":7,"synthesis":0,"report":6},"updatedFiles":["sources/skill.md",".openclaw-wiki/cache/agent-digest.json"]}}
{"type":"ingest","timestamp":"2026-04-10T13:16:27.500Z","details":{"inputPath":"/home/node/.openclaw/skills/diagram-png/SKILL.md","pageId":"source.skill","pagePath":"sources/skill.md","bytes":12695,"created":false}}
{"type":"compile","timestamp":"2026-04-10T13:16:27.586Z","details":{"pageCounts":{"entity":0,"concept":0,"source":7,"synthesis":0,"report":6},"updatedFiles":["sources/skill.md",".openclaw-wiki/cache/agent-digest.json"]}}
{"type":"ingest","timestamp":"2026-04-10T13:17:08.264Z","details":{"inputPath":"/home/node/.openclaw/skills/diagram-table/SKILL.md","pageId":"source.skill","pagePath":"sources/skill.md","bytes":3890,"created":false}}
{"type":"compile","timestamp":"2026-04-10T13:17:08.311Z","details":{"pageCounts":{"entity":0,"concept":0,"source":7,"synthesis":0,"report":6},"updatedFiles":["sources/skill.md",".openclaw-wiki/cache/agent-digest.json"]}}
{"type":"lint","timestamp":"2026-04-10T13:21:39.597Z","details":{"issueCount":0,"reportPath":"reports/lint.md"}}
{"type":"compile","timestamp":"2026-04-10T13:23:49.284Z","details":{"pageCounts":{"entity":6,"concept":5,"source":7,"synthesis":0,"report":6},"updatedFiles":["entities/project-ha.md","sources/project.md","entities/project-proxy-vm.md","sources/skill.md","concepts/skill-ontology.md","concepts/skill-telegram-collector.md","concepts/skill-voice-tts.md","concepts/skill-diagram.md","concepts/skill-search.md","entities/project-tapo.md","entities/project-telegram-collector.md","entities/project-internet-orders.md","entities/project-flightradar24.md","reports/stale-pages.md",".openclaw-wiki/cache/agent-digest.json","index.md","entities/index.md","concepts/index.md"]}}
{"type":"lint","timestamp":"2026-04-10T13:24:29.750Z","details":{"issueCount":22,"reportPath":"reports/lint.md"}}
{"type":"compile","timestamp":"2026-04-10T13:25:24.966Z","details":{"pageCounts":{"entity":6,"concept":5,"source":7,"synthesis":0,"report":6},"updatedFiles":["reports/stale-pages.md",".openclaw-wiki/cache/agent-digest.json"]}}
{"type":"lint","timestamp":"2026-04-10T13:26:05.292Z","details":{"issueCount":0,"reportPath":"reports/lint.md"}}
{"type":"compile","timestamp":"2026-04-10T13:34:23.302Z","details":{"pageCounts":{"entity":9,"concept":5,"source":7,"synthesis":0,"report":6},"updatedFiles":["entities/project-apps-portal.md","entities/project-ha.md","sources/project.md","entities/project-proxy-vm.md","entities/project-snowbike-rag.md","entities/project-tapo.md","entities/project-telegram-collector.md","entities/project-video-notes.md","entities/project-internet-orders.md","entities/project-flightradar24.md",".openclaw-wiki/cache/agent-digest.json","index.md","entities/index.md"]}}
{"type":"lint","timestamp":"2026-04-10T13:35:05.759Z","details":{"issueCount":2,"reportPath":"reports/lint.md"}}
{"type":"ingest","timestamp":"2026-04-10T13:36:51.302Z","details":{"inputPath":"/home/node/.openclaw/workspace/tasks/video-notes/TZ.md","pageId":"source.tz","pagePath":"sources/tz.md","bytes":8806,"created":false}}
{"type":"compile","timestamp":"2026-04-10T13:36:51.409Z","details":{"pageCounts":{"entity":9,"concept":5,"source":7,"synthesis":0,"report":6},"updatedFiles":["sources/tz.md",".openclaw-wiki/cache/agent-digest.json"]}}
{"type":"ingest","timestamp":"2026-04-10T13:37:41.693Z","details":{"inputPath":"/home/node/.openclaw/workspace/tasks/apps-portal/DEV-TASK.md","pageId":"source.dev-task","pagePath":"sources/dev-task.md","bytes":2574,"created":false}}
{"type":"compile","timestamp":"2026-04-10T13:37:41.794Z","details":{"pageCounts":{"entity":9,"concept":5,"source":7,"synthesis":0,"report":6},"updatedFiles":["sources/dev-task.md",".openclaw-wiki/cache/agent-digest.json"]}}
{"type":"compile","timestamp":"2026-04-10T13:38:30.284Z","details":{"pageCounts":{"entity":9,"concept":5,"source":7,"synthesis":0,"report":6},"updatedFiles":["entities/project-apps-portal.md","sources/dev-task.md","sources/tz.md","entities/project-video-notes.md",".openclaw-wiki/cache/agent-digest.json"]}}
{"type":"lint","timestamp":"2026-04-10T13:39:11.453Z","details":{"issueCount":0,"reportPath":"reports/lint.md"}}
{"type":"compile","timestamp":"2026-04-10T13:49:57.707Z","details":{"pageCounts":{"entity":10,"concept":5,"source":7,"synthesis":0,"report":6},"updatedFiles":["sources/memory.md","entities/project-wiki-memory.md",".openclaw-wiki/cache/agent-digest.json","index.md","entities/index.md"]}}
{"type":"lint","timestamp":"2026-04-10T13:50:40.769Z","details":{"issueCount":0,"reportPath":"reports/lint.md"}}
{"type":"ingest","timestamp":"2026-04-10T14:25:18.403Z","details":{"inputPath":"/home/node/.openclaw/workspace/tasks/proxy-vm/PROJECT.md","pageId":"source.project","pagePath":"sources/project.md","bytes":7374,"created":false}}
{"type":"compile","timestamp":"2026-04-10T14:25:18.509Z","details":{"pageCounts":{"entity":10,"concept":5,"source":7,"synthesis":0,"report":6},"updatedFiles":["sources/project.md",".openclaw-wiki/cache/agent-digest.json"]}}
{"type":"ingest","timestamp":"2026-04-10T15:41:41.998Z","details":{"inputPath":"/home/node/.openclaw/workspace/tasks/proxy-vm/PROJECT.md","pageId":"source.project","pagePath":"sources/project.md","bytes":7909,"created":false}}
{"type":"compile","timestamp":"2026-04-10T15:41:42.100Z","details":{"pageCounts":{"entity":10,"concept":5,"source":7,"synthesis":0,"report":6},"updatedFiles":["sources/project.md",".openclaw-wiki/cache/agent-digest.json"]}}
{"type":"ingest","timestamp":"2026-04-10T15:42:43.804Z","details":{"inputPath":"/home/node/.openclaw/workspace/MEMORY.md","pageId":"source.memory","pagePath":"sources/memory.md","bytes":15593,"created":false}}
{"type":"compile","timestamp":"2026-04-10T15:42:43.906Z","details":{"pageCounts":{"entity":10,"concept":5,"source":7,"synthesis":0,"report":6},"updatedFiles":["sources/memory.md",".openclaw-wiki/cache/agent-digest.json"]}}
{"type":"ingest","timestamp":"2026-04-10T15:43:24.102Z","details":{"inputPath":"/home/node/.openclaw/workspace/memory/2026-04-10.md","pageId":"source.2026-04-10","pagePath":"sources/2026-04-10.md","bytes":10904,"created":true}}
{"type":"compile","timestamp":"2026-04-10T15:43:24.202Z","details":{"pageCounts":{"entity":10,"concept":5,"source":8,"synthesis":0,"report":6},"updatedFiles":["sources/2026-04-10.md",".openclaw-wiki/cache/agent-digest.json","index.md","sources/index.md"]}}

View File

@@ -0,0 +1,4 @@
{
"version": 1,
"entries": {}
}

View File

@@ -0,0 +1,5 @@
{
"version": 1,
"createdAt": "2026-04-09T22:02:40.331Z",
"renderMode": "native"
}

7
AGENTS.md Normal file
View File

@@ -0,0 +1,7 @@
# Memory Wiki Agent Guide
- Treat generated blocks as plugin-owned.
- Preserve human notes outside managed markers.
- Prefer source-backed claims over wiki-to-wiki citation loops.
- Prefer structured `claims` with evidence over burying key beliefs only in prose.
- Use `.openclaw-wiki/cache/agent-digest.json` and `claims.jsonl` for machine reads; markdown pages are the human view.

16
WIKI.md Normal file
View File

@@ -0,0 +1,16 @@
# Memory Wiki
This vault is maintained by the OpenClaw memory-wiki plugin.
- Vault mode: `bridge`
- Render mode: `native`
- Search corpus default: `all`
## Architecture
- Raw sources remain the evidence layer.
- Wiki pages are the human-readable synthesis layer.
- `.openclaw-wiki/cache/agent-digest.json` is the agent-facing compiled digest.
## Notes
<!-- openclaw:human:start -->
<!-- openclaw:human:end -->

10
concepts/index.md Normal file
View File

@@ -0,0 +1,10 @@
# Concepts
## Generated
<!-- openclaw:wiki:concepts:index:start -->
- [Skill: ontology](concepts/skill-ontology.md)
- [Skill: telegram-collector](concepts/skill-telegram-collector.md)
- [Skill: voice-tts](concepts/skill-voice-tts.md)
- [Skills: diagram-png & diagram-table](concepts/skill-diagram.md)
- [Skills: youtube-search & yandex-search](concepts/skill-search.md)
<!-- openclaw:wiki:concepts:index:end -->

36
concepts/skill-diagram.md Normal file
View File

@@ -0,0 +1,36 @@
---
pageType: concept
id: concept.skill-diagram
title: "Skills: diagram-png & diagram-table"
sourceIds: [source.skill]
updatedAt: 2026-04-10T13:21:00.000Z
tags: [skill, diagram, png, table, pillow]
---
# Skills: diagram-png & diagram-table
<!-- openclaw:wiki:managed:start -->
## diagram-png
Генерация PNG-диаграмм из JSON. Используй вместо ASCII-арта. `~/.openclaw/skills/diagram-png/`
## diagram-table
Таблицы в PNG из JSON (Pillow, dark/light). Для Telegram — **обязательно** вместо markdown-таблиц.
- `generate_table.py` (stdin→PNG)
- `send_table.py` (PNG→Telegram)
- Требует `TELEGRAM_BOT_TOKEN` и `TELEGRAM_CHAT_ID` в `.env`
- Расположение: `~/.openclaw/skills/diagram-table/` и `~/.openclaw/workspace/skills/diagram-table/`
<!-- openclaw:wiki:managed:end -->
## Related
<!-- openclaw:wiki:related:start -->
### Sources
- [SKILL](sources/skill.md)
### Related Pages
- [Skill: ontology](concepts/skill-ontology.md)
- [Skill: telegram-collector](concepts/skill-telegram-collector.md)
- [Skill: voice-tts](concepts/skill-voice-tts.md)
- [Skills: youtube-search & yandex-search](concepts/skill-search.md)
<!-- openclaw:wiki:related:end -->

View File

@@ -0,0 +1,42 @@
---
pageType: concept
id: concept.skill-ontology
title: "Skill: ontology"
sourceIds: [source.skill]
updatedAt: 2026-04-10T13:21:00.000Z
tags: [skill, ontology, knowledge-graph, memory]
---
# Skill: ontology
<!-- openclaw:wiki:managed:start -->
## Описание
Граф знаний для структурированной памяти агента. Сущности: Person, Project, Task, Event, Document. CRUD + запросы.
## Расположение
`~/.openclaw/workspace/skills/ontology/`
## Ключевые файлы
- `memory/ontology/graph.jsonl` — граф
- `memory/ontology/schema.yaml` — схема типов
- `memory/ontology/RULES.md` — правила ведения
## Правила
- Стрим — единственный writer
- Все изменения — только с ОК Славы
- Обязательно при работе с проектами/задачами
<!-- openclaw:wiki:managed:end -->
## Related
<!-- openclaw:wiki:related:start -->
### Sources
- [SKILL](sources/skill.md)
### Related Pages
- [Skill: telegram-collector](concepts/skill-telegram-collector.md)
- [Skill: voice-tts](concepts/skill-voice-tts.md)
- [Skills: diagram-png & diagram-table](concepts/skill-diagram.md)
- [Skills: youtube-search & yandex-search](concepts/skill-search.md)
<!-- openclaw:wiki:related:end -->

34
concepts/skill-search.md Normal file
View File

@@ -0,0 +1,34 @@
---
pageType: concept
id: concept.skill-search
title: "Skills: youtube-search & yandex-search"
sourceIds: [source.skill]
updatedAt: 2026-04-10T13:21:00.000Z
tags: [skill, search, youtube, yandex, api]
---
# Skills: youtube-search & yandex-search
<!-- openclaw:wiki:managed:start -->
## youtube-search
YouTube Data API v3. Поиск видео, метаданные каналов. Ключ: `YOUTUBE_API_KEY` в `.env`.
`~/.openclaw/workspace/skills/youtube-search/`
## yandex-search
Yandex Search API v2. Для русскоязычных запросов, российских магазинов (Ozon, Перекрёсток, Яндекс.Маркет). Ключ: `YANDEX_API_KEY` в `.env`.
`~/.openclaw/workspace/skills/yandex-search/`
<!-- openclaw:wiki:managed:end -->
## Related
<!-- openclaw:wiki:related:start -->
### Sources
- [SKILL](sources/skill.md)
### Related Pages
- [Skill: ontology](concepts/skill-ontology.md)
- [Skill: telegram-collector](concepts/skill-telegram-collector.md)
- [Skill: voice-tts](concepts/skill-voice-tts.md)
- [Skills: diagram-png & diagram-table](concepts/skill-diagram.md)
<!-- openclaw:wiki:related:end -->

View File

@@ -0,0 +1,32 @@
---
pageType: concept
id: concept.skill-telegram-collector
title: "Skill: telegram-collector"
sourceIds: [source.skill]
updatedAt: 2026-04-10T13:21:00.000Z
tags: [skill, telegram, collector, data]
---
# Skill: telegram-collector
<!-- openclaw:wiki:managed:start -->
## Описание
Сбор и анализ информации из Telegram-групп и каналов. Построение тематических баз знаний, интеграция в память.
## Расположение
`~/.openclaw/workspace/skills/telegram-collector/`
<!-- openclaw:wiki:managed:end -->
## Related
<!-- openclaw:wiki:related:start -->
### Sources
- [SKILL](sources/skill.md)
### Related Pages
- [Skill: ontology](concepts/skill-ontology.md)
- [Skill: voice-tts](concepts/skill-voice-tts.md)
- [Skills: diagram-png & diagram-table](concepts/skill-diagram.md)
- [Skills: youtube-search & yandex-search](concepts/skill-search.md)
<!-- openclaw:wiki:related:end -->

View File

@@ -0,0 +1,36 @@
---
pageType: concept
id: concept.skill-voice-tts
title: "Skill: voice-tts"
sourceIds: [source.skill]
updatedAt: 2026-04-10T13:21:00.000Z
tags: [skill, voice, tts, elevenlabs, yandex]
---
# Skill: voice-tts
<!-- openclaw:wiki:managed:start -->
## Описание
Голосовые сообщения через ElevenLabs TTS с fallback на Yandex SpeechKit. Генерирует OGG Opus для Telegram.
## Расположение
`~/.openclaw/skills/voice-tts/`
## Когда использовать
- "отправь голосовым", "озвучь", "say it with voice"
- Когда Слава отправляет голосовое — отвечать И текстом, И голосом
<!-- openclaw:wiki:managed:end -->
## Related
<!-- openclaw:wiki:related:start -->
### Sources
- [SKILL](sources/skill.md)
### Related Pages
- [Skill: ontology](concepts/skill-ontology.md)
- [Skill: telegram-collector](concepts/skill-telegram-collector.md)
- [Skills: diagram-png & diagram-table](concepts/skill-diagram.md)
- [Skills: youtube-search & yandex-search](concepts/skill-search.md)
<!-- openclaw:wiki:related:end -->

15
entities/index.md Normal file
View File

@@ -0,0 +1,15 @@
# Entities
## Generated
<!-- openclaw:wiki:entities:index:start -->
- [Apps Portal](entities/project-apps-portal.md)
- [Home Assistant](entities/project-ha.md)
- [Proxy VM (vpn-srv)](entities/project-proxy-vm.md)
- [Snowbike RAG](entities/project-snowbike-rag.md)
- [Tapo Camera Monitor](entities/project-tapo.md)
- [Telegram Collector](entities/project-telegram-collector.md)
- [Wiki & Memory](entities/project-wiki-memory.md)
- [Видеокружочки](entities/project-video-notes.md)
- [Интернет-заказы](entities/project-internet-orders.md)
- [Карта шумового загрязнения FR24](entities/project-flightradar24.md)
<!-- openclaw:wiki:entities:index:end -->

View File

@@ -0,0 +1,32 @@
---
pageType: entity
id: entity.project-apps-portal
title: "Apps Portal"
entityType: Project
status: active
updatedAt: 2026-04-10T13:33:00.000Z
sourceIds: [source.dev-task]
tags: [project, portal, web]
---
# Apps Portal
<!-- openclaw:wiki:managed:start -->
## Ключевые факты
- **Статус:** active
- **Папка:** `tasks/apps-portal/`
- **URL:** apps.mva154.duckdns.org
## Описание
Портал-лендинг с карточками веб-приложений.
## Открытые задачи
- Запустить Apps Portal (medium, dev)
<!-- openclaw:wiki:managed:end -->
## Related
<!-- openclaw:wiki:related:start -->
### Sources
- [DEV TASK](sources/dev-task.md)
<!-- openclaw:wiki:related:end -->

View File

@@ -0,0 +1,45 @@
---
pageType: entity
id: entity.project-flightradar24
title: "Карта шумового загрязнения FR24"
entityType: Project
status: paused
sourceIds: [source.project]
updatedAt: 2026-04-10T13:21:00.000Z
tags: [project, flightradar24, noisemap]
---
# Карта шумового загрязнения FR24
<!-- openclaw:wiki:managed:start -->
## Ключевые факты
- **Старт:** 22 марта 2026
- **Статус:** прототип v0.3 работает, FR24 кредиты закончились
- **URL:** https://openclaw.mva154.duckdns.org/noisemap/
- **Порт:** 5555 (Flask)
- **Папка:** `tasks/flightradar24/`
- **Следующий шаг:** переход на RTL-SDR
## Описание
Карта шумового загрязнения от авиации на базе данных Flightradar24. Flask-приложение визуализирует плотность полётов над районом.
## Связи
- Watchdog: HEARTBEAT.md проверяет порт 5555
- API: FR24 Explorer, 60K кредитов/мес (промо до 31.05.2026: 120K)
<!-- openclaw:wiki:managed:end -->
## Related
<!-- openclaw:wiki:related:start -->
### Sources
- [PROJECT](sources/project.md)
### Related Pages
- [Home Assistant](entities/project-ha.md)
- [Proxy VM (vpn-srv)](entities/project-proxy-vm.md)
- [Snowbike RAG](entities/project-snowbike-rag.md)
- [Tapo Camera Monitor](entities/project-tapo.md)
- [Telegram Collector](entities/project-telegram-collector.md)
- [Интернет-заказы](entities/project-internet-orders.md)
<!-- openclaw:wiki:related:end -->

43
entities/project-ha.md Normal file
View File

@@ -0,0 +1,43 @@
---
pageType: entity
id: entity.project-ha
title: "Home Assistant"
entityType: Project
status: active
sourceIds: [source.project]
updatedAt: 2026-04-10T13:21:00.000Z
tags: [project, home-assistant, automation]
---
# Home Assistant
<!-- openclaw:wiki:managed:start -->
## Ключевые факты
- **URL:** https://ha.homenet542.keenetic.pro
- **IP:** 192.168.2.139:8123
- **Папка:** `tasks/ha/`
- **Платформа:** Proxmox VM
## Описание
Локальное управление умным домом через Home Assistant. Zigbee через Sonoff донгл + Zigbee2MQTT.
## Правила
- Любые изменения конфигов — только с ОК Славы
- Читать состояния/логи — без подтверждения
<!-- openclaw:wiki:managed:end -->
## Related
<!-- openclaw:wiki:related:start -->
### Sources
- [PROJECT](sources/project.md)
### Related Pages
- [Proxy VM (vpn-srv)](entities/project-proxy-vm.md)
- [Snowbike RAG](entities/project-snowbike-rag.md)
- [Tapo Camera Monitor](entities/project-tapo.md)
- [Telegram Collector](entities/project-telegram-collector.md)
- [Интернет-заказы](entities/project-internet-orders.md)
- [Карта шумового загрязнения FR24](entities/project-flightradar24.md)
<!-- openclaw:wiki:related:end -->

View File

@@ -0,0 +1,42 @@
---
pageType: entity
id: entity.project-internet-orders
title: "Интернет-заказы"
entityType: Project
status: active
sourceIds: [source.project]
updatedAt: 2026-04-10T13:21:00.000Z
tags: [project, orders, vprok]
---
# Интернет-заказы
<!-- openclaw:wiki:managed:start -->
## Ключевые факты
- **Старт:** 31 марта 2026
- **Статус:** relay-сервер запущен (185.130.212.192:5000), Windows-клиент готов, ожидает первого теста
- **Папка:** `tasks/internet-orders/`
## Описание
Голосовое управление заказом продуктов. Слава говорит → ИИ подбирает товары → скрипт заполняет корзину на vprok.ru → Слава только оплачивает.
## Компоненты
- Relay-сервер: 185.130.212.192:5000
- Windows-клиент: windows_client.py
<!-- openclaw:wiki:managed:end -->
## Related
<!-- openclaw:wiki:related:start -->
### Sources
- [PROJECT](sources/project.md)
### Related Pages
- [Home Assistant](entities/project-ha.md)
- [Proxy VM (vpn-srv)](entities/project-proxy-vm.md)
- [Snowbike RAG](entities/project-snowbike-rag.md)
- [Tapo Camera Monitor](entities/project-tapo.md)
- [Telegram Collector](entities/project-telegram-collector.md)
- [Карта шумового загрязнения FR24](entities/project-flightradar24.md)
<!-- openclaw:wiki:related:end -->

View File

@@ -0,0 +1,48 @@
---
pageType: entity
id: entity.project-proxy-vm
title: "Proxy VM (vpn-srv)"
entityType: Project
status: active
sourceIds: [source.project]
updatedAt: 2026-04-10T13:21:00.000Z
tags: [project, vpn, proxy, frp]
---
# Proxy VM (vpn-srv)
<!-- openclaw:wiki:managed:start -->
## Ключевые факты
- **Статус:** работает
- **IP:** 192.168.2.200 (внутренний), туннель через 185.130.212.192:3322
- **Папка:** `tasks/proxy-vm/`
## Описание
Ubuntu VM для прокси HA Telegram + прозрачный шлюз для Wi-Fi ТВ (Homenet_vpn).
## Компоненты
- FRP туннель: relay 185.130.212.192:7000, port 3322 → vpn-srv:22
- Xray VLESS Reality: port 12345 tproxy → 43.245.226.231:53903
- Wi-Fi сеть: Homenet_vpn, 192.168.4.0/24
- Watchdog: HEARTBEAT.md проверяет port 3322
## Доступ
- SSH: `ssh -i ha_ssh_key -o Port=3322 vpn@185.130.212.192`
- Пароль: meNt85doC
<!-- openclaw:wiki:managed:end -->
## Related
<!-- openclaw:wiki:related:start -->
### Sources
- [PROJECT](sources/project.md)
### Related Pages
- [Home Assistant](entities/project-ha.md)
- [Snowbike RAG](entities/project-snowbike-rag.md)
- [Tapo Camera Monitor](entities/project-tapo.md)
- [Telegram Collector](entities/project-telegram-collector.md)
- [Интернет-заказы](entities/project-internet-orders.md)
- [Карта шумового загрязнения FR24](entities/project-flightradar24.md)
<!-- openclaw:wiki:related:end -->

View File

@@ -0,0 +1,48 @@
---
pageType: entity
id: entity.project-snowbike-rag
title: "Snowbike RAG"
entityType: Project
status: active
updatedAt: 2026-04-10T13:33:00.000Z
sourceIds: [source.project]
tags: [project, snowbike, rag, meilisearch, chromadb]
---
# Snowbike RAG
<!-- openclaw:wiki:managed:start -->
## Ключевые факты
- **Старт:** 20 марта 2026
- **Статус:** active
- **Папка:** `tasks/snowbike-rag/`
- **URL:** https://openclaw.mva154.duckdns.org/snowbike-rag/
- **Порт:** 5557
## Описание
База знаний сноубайков — Telegram коллектор + RAG поиск. Источник: @snowbikerussia (155K сообщений).
## Компоненты
- Meilisearch: localhost:7700, 140059 документов (UP)
- ChromaDB: localhost:8000, 136428 документов
- Watchdog: HEARTBEAT.md проверяет порт 5557
## Открытые задачи
- Регулярное инкрементальное обновление RAG (high, dev)
<!-- openclaw:wiki:managed:end -->
## Related
<!-- openclaw:wiki:related:start -->
### Sources
- [PROJECT](sources/project.md)
### Related Pages
- [Home Assistant](entities/project-ha.md)
- [Proxy VM (vpn-srv)](entities/project-proxy-vm.md)
- [Tapo Camera Monitor](entities/project-tapo.md)
- [Telegram Collector](entities/project-telegram-collector.md)
- [Интернет-заказы](entities/project-internet-orders.md)
- [Карта шумового загрязнения FR24](entities/project-flightradar24.md)
<!-- openclaw:wiki:related:end -->

37
entities/project-tapo.md Normal file
View File

@@ -0,0 +1,37 @@
---
pageType: entity
id: entity.project-tapo
title: "Tapo Camera Monitor"
entityType: Project
status: active
sourceIds: [source.project]
updatedAt: 2026-04-10T13:21:00.000Z
tags: [project, camera, tapo, ai]
---
# Tapo Camera Monitor
<!-- openclaw:wiki:managed:start -->
## Ключевые факты
- **Папка:** `tasks/tapo/`
- **Камеры:** TP-Link Tapo C520WS / C320WS
## Описание
Мониторинг камер TP-Link Tapo с анализом через AI и уведомлениями в Telegram.
<!-- openclaw:wiki:managed:end -->
## Related
<!-- openclaw:wiki:related:start -->
### Sources
- [PROJECT](sources/project.md)
### Related Pages
- [Home Assistant](entities/project-ha.md)
- [Proxy VM (vpn-srv)](entities/project-proxy-vm.md)
- [Snowbike RAG](entities/project-snowbike-rag.md)
- [Telegram Collector](entities/project-telegram-collector.md)
- [Интернет-заказы](entities/project-internet-orders.md)
- [Карта шумового загрязнения FR24](entities/project-flightradar24.md)
<!-- openclaw:wiki:related:end -->

View File

@@ -0,0 +1,42 @@
---
pageType: entity
id: entity.project-telegram-collector
title: "Telegram Collector"
entityType: Project
status: active
sourceIds: [source.project]
updatedAt: 2026-04-10T13:21:00.000Z
tags: [project, telegram, collector]
---
# Telegram Collector
<!-- openclaw:wiki:managed:start -->
## Ключевые факты
- **Старт:** 20 марта 2026
- **Статус:** активен, ежедневный инкремент
- **Папка:** `tasks/telegram-collector/`, `skills/telegram-collector/`
- **Загружено:** @snowbikerussia (155K сообщений)
## Описание
Сбор, анализ и структурирование сообщений из Telegram-групп и каналов. Builds topic databases, integrates with memory.
## Связи
- Skill: telegram-collector
<!-- openclaw:wiki:managed:end -->
## Related
<!-- openclaw:wiki:related:start -->
### Sources
- [PROJECT](sources/project.md)
### Related Pages
- [Home Assistant](entities/project-ha.md)
- [Proxy VM (vpn-srv)](entities/project-proxy-vm.md)
- [Snowbike RAG](entities/project-snowbike-rag.md)
- [Tapo Camera Monitor](entities/project-tapo.md)
- [Интернет-заказы](entities/project-internet-orders.md)
- [Карта шумового загрязнения FR24](entities/project-flightradar24.md)
<!-- openclaw:wiki:related:end -->

View File

@@ -0,0 +1,32 @@
---
pageType: entity
id: entity.project-video-notes
title: "Видеокружочки"
entityType: Project
status: active
updatedAt: 2026-04-10T13:33:00.000Z
sourceIds: [source.tz]
tags: [project, video, tts, heygen, telegram]
---
# Видеокружочки
<!-- openclaw:wiki:managed:start -->
## Ключевые факты
- **Статус:** active
- **Папка:** `tasks/video-notes/`
## Описание
Генерация video notes: ElevenLabs TTS + fal.ai (lip sync) → Telegram. Текущая реализация: fal.ai Fabric 1.0.
## Открытые задачи
- Переделать с fal.ai на HeyGen (medium, Слава)
- Создать talking photo в HeyGen → сохранить HEYGEN_TALKING_PHOTO_ID в .env
<!-- openclaw:wiki:managed:end -->
## Related
<!-- openclaw:wiki:related:start -->
### Sources
- [TZ](sources/tz.md)
<!-- openclaw:wiki:related:end -->

View File

@@ -0,0 +1,178 @@
---
pageType: entity
id: entity.project-wiki-memory
title: "Wiki & Memory"
entityType: Project
status: active
updatedAt: 2026-04-10T13:48:00.000Z
sourceIds: [source.memory]
tags: [project, wiki, memory, qmd, setup]
---
# Wiki & Memory
<!-- openclaw:wiki:managed:start -->
## Ключевые факты
- **Дата настройки:** 10 апреля 2026
- **Статус:** active
- **Папка:** `tasks/wiki-memory/`
## Описание
Комплексная настройка системы памяти OpenClaw: замена встроенного SQLite на QMD sidecar + инициализация Memory Wiki vault с entities/concepts для всех проектов и скиллов.
---
## Архитектура системы памяти
### Схема работы
```
Файлы workspace/ QMD sidecar (Gemma-300M) Агент
─────────────────── ──────────────────────── ──────
MEMORY.md memory-root-main (159 docs) memory_search
memory/YYYY-MM-DD.md → memory-dir-main (33 docs) → BM25 + vector
tasks/**/*.md tasks-main (104 docs) reranking
skills/**/*.md skills-main (10 docs) ↓
agents/main/sessions/ sessions-main (111 docs) релевантные чанки
```
```
Wiki vault Агент (каждый запрос)
───────────────────── ──────────────────────
sources/ (ingest файлов) includeCompiledDigestPrompt: true
entities/ (проекты, люди) → → → agent-digest.json → системный промпт
concepts/ (скиллы, правила) wiki_search / wiki_get (по запросу)
syntheses/
reports/ (lint, health)
```
### Два независимых слоя памяти
| Слой | Инструмент | Для чего |
|------|-----------|----------|
| **QMD** | `memory_search` | Полнотекстовый + семантический поиск по всем файлам |
| **Wiki** | `wiki_search`, digest в промпте | Структурированные знания: entities, concepts |
---
## QMD Backend
### Конфигурация (openclaw.json, корневой ключ `memory`)
```json
{
"memory": {
"backend": "qmd",
"qmd": {
"command": "/home/node/.local/bin/qmd",
"paths": [
{ "name": "tasks", "path": "~/.openclaw/workspace/tasks", "pattern": "**/*.md" },
{ "name": "skills", "path": "~/.openclaw/workspace/skills", "pattern": "**/*.md" }
],
"sessions": { "enabled": true }
}
}
}
```
### Коллекции (main агент)
| Коллекция | Документов |
|---|---|
| memory-root-main (workspace/) | 159 |
| sessions-main (транскрипты) | 111 |
| tasks-main (workspace/tasks/) | 104 |
| memory-dir-main (workspace/memory/) | 33 |
| skills-main (workspace/skills/) | 10 |
| **Итого** | **417 документов** |
### Эмбеддинги
- Модель: `embeddinggemma-300M-Q8_0.gguf` (~328MB)
- Только CPU → индексация ~30-60 мин на 400+ чанков
- После завершения: Vector: ready автоматически
- Все агенты (main, dev, legal, feda): Vector ready ✅
### Известная проблема: memory-alt-main
QMD создаёт `memory-root-main` с `**/*.md`, OpenClaw ищет `memory-alt-main`.
**Фикс:**
```yaml
# ~/.openclaw/agents/main/qmd/xdg-config/qmd/index.yml
memory-alt-main:
path: /home/node/.openclaw/workspace
pattern: "memory.md"
```
Затем: `rm ~/.openclaw/agents/main/qmd/xdg-cache/qmd/index.sqlite* && openclaw memory index --force`
---
## Memory Wiki
### Конфигурация (openclaw.json)
```json
// plugins.entries.memory-wiki.config:
{
"bridge": { "enabled": true, "readMemoryArtifacts": true, ... },
"context": { "includeCompiledDigestPrompt": true }
}
// agents.list[main].tools.allow:
["wiki_status", "wiki_search", "wiki_get", "wiki_apply", "wiki_lint"]
```
### Bridge mode — не работает (known limitation)
OpenClaw использует jiti vm-контексты для изоляции плагинов. memory-core и memory-wiki
загружаются в разных контекстах → `memoryPluginState` разные объекты → capability не видна.
`openclaw wiki bridge import` всегда возвращает 0 артефактов. Это архитектурная проблема
версии 2026.4.9, не баг конфига. Workaround: ручной ingest.
### Как пополнять wiki (рабочий процесс)
```bash
# 1. Добавить источник
openclaw wiki ingest ~/.openclaw/workspace/MEMORY.md
openclaw wiki ingest ~/.openclaw/workspace/tasks/*/PROJECT.md
# 2. Создать entity/concept страницу (wiki_apply или вручную в vault)
# Файл: ~/.openclaw/wiki/main/entities/project-xxx.md
# 3. Скомпилировать и проверить
openclaw wiki compile
openclaw wiki lint
```
### Текущий vault (10.04.2026)
- **Vault:** `/home/node/.openclaw/wiki/main`
- **Режим:** bridge (формально), фактически manual ingest
- **Страниц:** 27 (9 entities, 5 concepts, 7 sources, 6 reports)
- **Lint:** 0 issues ✅
### Entities (проекты)
- Snowbike RAG, Telegram Collector, Карта шумового загрязнения FR24
- Интернет-заказы, Home Assistant, Proxy VM, Tapo Camera Monitor
- Apps Portal, Видеокружочки
### Concepts (скиллы)
- voice-tts, telegram-collector, ontology, diagram-png/table, youtube/yandex-search
---
## Задачи
### ✅ Первичная настройка (done, 10.04.2026)
- Установка QMD, настройка коллекций, эмбеддинги
- Инициализация wiki vault, добавление wiki_* инструментов
- Ingest ключевых файлов (MEMORY.md, PROJECT.md × 6, SKILL.md × 9)
- Создание 9 entities + 5 concepts
- Синхронизация с онтологией
### Открытые вопросы
- Bridge mode: ждём фикса в OpenClaw (jiti-изоляция плагинов)
- Wiki не обновляется автоматически — нужен ручной `ingest + compile` при изменениях
- Dreaming отключён (можно включить для ночной синтез-генерации)
<!-- openclaw:wiki:managed:end -->
## Related
<!-- openclaw:wiki:related:start -->
### Sources
- [MEMORY](sources/memory.md)
<!-- openclaw:wiki:related:end -->

3
inbox.md Normal file
View File

@@ -0,0 +1,3 @@
# Inbox
Drop raw ideas, questions, and source links here.

53
index.md Normal file
View File

@@ -0,0 +1,53 @@
# Wiki Index
## Generated
<!-- openclaw:wiki:index:start -->
- Render mode: `native`
- Total pages: 29
- Claims: 0
- Sources: 8
- Entities: 10
- Concepts: 5
- Syntheses: 0
- Reports: 6
### Sources
- [2026 04 09](sources/2026-04-09.md)
- [2026 04 10](sources/2026-04-10.md)
- [BRD](sources/brd.md)
- [DEV TASK](sources/dev-task.md)
- [MEMORY](sources/memory.md)
- [PROJECT](sources/project.md)
- [SKILL](sources/skill.md)
- [TZ](sources/tz.md)
### Entities
- [Apps Portal](entities/project-apps-portal.md)
- [Home Assistant](entities/project-ha.md)
- [Proxy VM (vpn-srv)](entities/project-proxy-vm.md)
- [Snowbike RAG](entities/project-snowbike-rag.md)
- [Tapo Camera Monitor](entities/project-tapo.md)
- [Telegram Collector](entities/project-telegram-collector.md)
- [Wiki & Memory](entities/project-wiki-memory.md)
- [Видеокружочки](entities/project-video-notes.md)
- [Интернет-заказы](entities/project-internet-orders.md)
- [Карта шумового загрязнения FR24](entities/project-flightradar24.md)
### Concepts
- [Skill: ontology](concepts/skill-ontology.md)
- [Skill: telegram-collector](concepts/skill-telegram-collector.md)
- [Skill: voice-tts](concepts/skill-voice-tts.md)
- [Skills: diagram-png & diagram-table](concepts/skill-diagram.md)
- [Skills: youtube-search & yandex-search](concepts/skill-search.md)
### Syntheses
- No syntheses yet.
### Reports
- [Claim Health](reports/claim-health.md)
- [Contradictions](reports/contradictions.md)
- [Lint Report](reports/lint.md)
- [Low Confidence](reports/low-confidence.md)
- [Open Questions](reports/open-questions.md)
- [Stale Pages](reports/stale-pages.md)
<!-- openclaw:wiki:index:end -->

14
reports/claim-health.md Normal file
View File

@@ -0,0 +1,14 @@
---
pageType: report
id: report.claim-health
title: Claim Health
status: active
updatedAt: 2026-04-09T22:04:02.263Z
---
# Claim Health
## Generated
<!-- openclaw:wiki:claim-health:start -->
- No claim health issues right now.
<!-- openclaw:wiki:claim-health:end -->

14
reports/contradictions.md Normal file
View File

@@ -0,0 +1,14 @@
---
pageType: report
id: report.contradictions
title: Contradictions
status: active
updatedAt: 2026-04-09T22:04:02.263Z
---
# Contradictions
## Generated
<!-- openclaw:wiki:contradictions:start -->
- No contradictions flagged right now.
<!-- openclaw:wiki:contradictions:end -->

11
reports/index.md Normal file
View File

@@ -0,0 +1,11 @@
# Reports
## Generated
<!-- openclaw:wiki:reports:index:start -->
- [Claim Health](reports/claim-health.md)
- [Contradictions](reports/contradictions.md)
- [Lint Report](reports/lint.md)
- [Low Confidence](reports/low-confidence.md)
- [Open Questions](reports/open-questions.md)
- [Stale Pages](reports/stale-pages.md)
<!-- openclaw:wiki:reports:index:end -->

13
reports/lint.md Normal file
View File

@@ -0,0 +1,13 @@
---
pageType: report
id: report.lint
title: Lint Report
status: active
---
# Lint Report
## Generated
<!-- openclaw:wiki:lint:start -->
No issues found.
<!-- openclaw:wiki:lint:end -->

14
reports/low-confidence.md Normal file
View File

@@ -0,0 +1,14 @@
---
pageType: report
id: report.low-confidence
title: Low Confidence
status: active
updatedAt: 2026-04-09T22:04:02.263Z
---
# Low Confidence
## Generated
<!-- openclaw:wiki:low-confidence:start -->
- No low-confidence pages or claims right now.
<!-- openclaw:wiki:low-confidence:end -->

14
reports/open-questions.md Normal file
View File

@@ -0,0 +1,14 @@
---
pageType: report
id: report.open-questions
title: Open Questions
status: active
updatedAt: 2026-04-09T22:04:02.263Z
---
# Open Questions
## Generated
<!-- openclaw:wiki:open-questions:start -->
- No open questions right now.
<!-- openclaw:wiki:open-questions:end -->

14
reports/stale-pages.md Normal file
View File

@@ -0,0 +1,14 @@
---
pageType: report
id: report.stale-pages
title: Stale Pages
status: active
updatedAt: 2026-04-10T13:25:24.905Z
---
# Stale Pages
## Generated
<!-- openclaw:wiki:stale-pages:start -->
- No aging or stale pages older than 30 days.
<!-- openclaw:wiki:stale-pages:end -->

106
sources/2026-04-09.md Normal file
View File

@@ -0,0 +1,106 @@
---
pageType: source
id: source.2026-04-09
title: 2026 04 09
sourceType: local-file
sourcePath: /home/node/.openclaw/workspace/memory/2026-04-09.md
ingestedAt: 2026-04-09T22:04:56.932Z
updatedAt: 2026-04-09T22:04:56.932Z
status: active
---
# 2026 04 09
## Source
- Type: `local-file`
- Path: `/home/node/.openclaw/workspace/memory/2026-04-09.md`
- Bytes: 4183
- Updated: 2026-04-09T22:04:56.932Z
## Content
```text
# 2026-04-09 — Дневник
## Анекдоты голосом
Слава просил анекдоты голосом — несколько раундов:
1. IT-шники (весело, грустно, соблазнительно) — 6 штук
2. Новый набор (весело, грозно, соблазнительно) — Python/JS, production down, git pull
3. Про айтишников: баги в баре, float-пиво, дежавю у врача
4. Про гастроном: хлеба нет
5. Про мотоциклиста и гаишника
6. Про кота который пьёт водку перед работой
## windows_client.py
Отправлен Славе в Telegram (message_id=4146) для теста на Windows
## Онтология — мелкие правки
- Видеокружочки → status: active (было planned)
- Добавлена таска: «Переделать с fal.ai на HeyGen» (medium, Dev)
- Добавлен description с реализацией через fal.ai
## Отправлены голосовые: message_id 4127, 4134, 4136, 4138, 4175, 4178, 4181, 4184, 4187
# 2026-04-09 — Дневник
## Анекдоты голосом
Слава просил анекдоты голосом — несколько раундов:
1. IT-шники (весело, грустно, соблазнительно) — 6 штук
2. Новый набор (весело, грозно, соблазнительно) — Python/JS, production down, git pull
3. Про айтишников: баги в баре, float-пиво, дежавю у врача
4. Про гастроном: хлеба нет
5. Про мотоциклиста и гаишника
6. Про кота который пьёт водку перед работой
## windows_client.py
Отправлен Славе в Telegram (message_id=4146) для теста на Windows
## Онтология — мелкие правки
- Видеокружочки → status: active (было planned)
- Добавлена таска: «Переделать с fal.ai на HeyGen» (medium, Dev)
- Добавлен description с реализацией через fal.ai
## Отправлены голосовые: message_id 4127, 4134, 4136, 4138, 4175, 4178, 4181, 4184, 4187
## Онтология — RULES.md и правила ведения
Создан файл `memory/ontology/RULES.md` — правила ведения онтологии:
- Когда использовать (обязательно для проектов/задач)
- Стрим = единственный writer, остальные агенты через sessions_send
- Изменения — только после подтверждения Славы
- Привязан к AGENTS.md (секция Session Startup)
**Структура:**
- SKILL.md — техдокументация для агентов
- RULES.md — правила ведения (для куратора)
- schema.yaml — структура данных (типы и поля)
## SSH доступ к хосту mva154
- Работает через ha_ssh_key → slin@82.22.50.71
- Команды: `ssh -i /home/node/.openclaw/ha_ssh_key slin@82.22.50.71 "команда"`
- Вижу контейнеры: openclaw-gateway, xray, n8n
- Стрим может управлять контейнерами на хосте через SSH
## Таблица задач (обновлена)
- Добавлены колонки: Статус, Описание
- 12 задач, 9 проектов
- Snowbike RAG: ChromaDB и incremental — DONE
## Новые таски в онтологии:
- «Упорядочить SSH ключи доступа» (medium, Слава) — pending
## Добавлен атрибут folder в Project
- Путь к документации: `tasks/{project}/`
- Добавлен в schema.yaml (строка 28)
- Все 9 проектов получили свои folder
## Сессия с control-ui
Вопрос от control-ui про обновление OpenClaw через контейнер — ответ дан
```
## Notes
<!-- openclaw:human:start -->
<!-- openclaw:human:end -->
## Related
<!-- openclaw:wiki:related:start -->
- No related pages yet.
<!-- openclaw:wiki:related:end -->

272
sources/2026-04-10.md Normal file
View File

@@ -0,0 +1,272 @@
---
pageType: source
id: source.2026-04-10
title: 2026 04 10
sourceType: local-file
sourcePath: /home/node/.openclaw/workspace/memory/2026-04-10.md
ingestedAt: 2026-04-10T15:43:24.102Z
updatedAt: 2026-04-10T15:43:24.102Z
status: active
---
# 2026 04 10
## Source
- Type: `local-file`
- Path: `/home/node/.openclaw/workspace/memory/2026-04-10.md`
- Bytes: 10904
- Updated: 2026-04-10T15:43:24.102Z
## Content
````text
# 2026-04-10 — Настройка Memory Wiki + QMD
## Что делали
Полный аудит и реконфигурация системы памяти OpenClaw. Сессия ~5 часов (07:0512:57 UTC) через webchat.
---
## Memory Wiki (memory-wiki plugin)
### Диагноз bridge mode
Обнаружили что `openclaw wiki bridge import` всегда возвращает 0 артефактов. Провели глубокое расследование:
- Bridge mode требует что memory-core зарегистрировал capability через `api.registerMemoryCapability()`
- `listActiveMemoryPublicArtifacts()` читает из `memoryPluginState` в `memory-state-BqTSwHeB.js`
- **Root cause:** OpenClaw использует jiti vm-контексты для изоляции плагинов. memory-core и memory-wiki загружаются в разных jiti-контекстах → их `memoryPluginState` — разные объекты → capability не видна
- CLI-команда дополнительно запускается в новом процессе без gateway-контекста
- **Вывод:** bridge mode в 2026.4.9 для bundled plugins не работает — архитектурная проблема, не баг конфига
### Что настроили в openclaw.json
```json
// plugins.entries.memory-wiki.config:
"bridge": {
"enabled": true,
"readMemoryArtifacts": true,
"indexDailyNotes": true,
"indexMemoryRoot": true,
"indexDreamReports": true, // добавлено
"followMemoryEvents": true // добавлено
},
"context": {
"includeCompiledDigestPrompt": true // добавлено — wiki digest в промптах
}
// agents.list[main].tools.allow — добавлены:
"wiki_status", "wiki_search", "wiki_get", "wiki_apply", "wiki_lint"
```
### Текущий статус wiki
- Vault: `/home/node/.openclaw/wiki/main`
- Mode: bridge (формально), фактически работает через manual ingest
- Sources: 6 (MEMORY.md, PROJECT.md файлы)
- Entities/Concepts/Syntheses: 0 (не наполнено)
- `openclaw wiki compile` и `openclaw wiki lint` работают
- `wiki_*` инструменты добавлены в allowed tools main агента
---
## QMD — установка и настройка
### Конфиг (добавлен корневой ключ `memory` в openclaw.json)
```json
"memory": {
"backend": "qmd",
"qmd": {
"command": "/home/node/.local/bin/qmd",
"paths": [
{ "name": "tasks", "path": "~/.openclaw/workspace/tasks", "pattern": "**/*.md" },
{ "name": "skills", "path": "~/.openclaw/workspace/skills", "pattern": "**/*.md" }
],
"sessions": { "enabled": true }
}
}
```
Ключевой момент: `memory` — корневой ключ, НЕ под `agents.defaults`. `agents.defaults.memory` — невалидный ключ (проверено).
### Проблема с коллекциями
QMD создавал `memory-root-main` с паттерном `**/*.md`, хотя OpenClaw ожидает `MEMORY.md`. Затем не мог создать `memory-alt-main` для того же пути.
**Фикс:** вручную добавить `memory-alt-main` в `~/.openclaw/agents/main/qmd/xdg-config/qmd/index.yml`:
```yaml
memory-alt-main:
path: /home/node/.openclaw/workspace
pattern: "memory.md"
```
После этого удалить sqlite и переиндексировать:
```bash
rm ~/.openclaw/agents/main/qmd/xdg-cache/qmd/index.sqlite*
openclaw memory index --force
```
### Эмбеддинги
- Модель: `embeddinggemma-300M-Q8_0.gguf` (~328MB, скачана)
- Только CPU, без GPU → embed одного батча занимает 30+ минут
- OpenClaw таймаутит на 120 сек и помечает Vector: unavailable, но фоновый процесс продолжает
- После завершения: Vector: ready автоматически
### Итоговые коллекции (main агент)
| Коллекция | Путь | Документов |
|---|---|---|
| memory-root-main | workspace/ | 159 |
| sessions-main | agents/main/qmd/sessions/ | 111 |
| tasks-main | workspace/tasks/ | 104 |
| memory-dir-main | workspace/memory/ | 33 |
| skills-main | workspace/skills/ | 10 |
| memory-alt-main | workspace/ (memory.md) | 0 (Linux, нет файла) |
Итого: 417 документов, 448+ векторов (>100% — чанкинг больших файлов)
### Статус всех агентов
- main: Vector ready ✅
- dev: Vector ready ✅
- legal: Vector ready ✅
- feda: Vector ready ✅
### Тест поиска (результат)
```
openclaw memory search --query "vprok интернет заказы relay"
→ 0.96 tasks/internet-orders/project.md ✅
memory_search (через инструмент) "vprok интернет заказы relay"
→ provider: qmd, score: 0.96 ✅
```
---
## Итог дня
### До
- builtin SQLite, 33 файла, 101 чанк
- Только BM25 + vector (OpenAI API)
- Нет sessions, нет tasks/, нет skills/
- Нет wiki инструментов
### После
- QMD sidecar, 417 документов, 448+ векторов
- BM25 + Gemma-300M (локально) + reranking
- Sessions, tasks/, skills/ проиндексированы
- wiki_* инструменты подключены
- includeCompiledDigestPrompt включён
### Открытые вопросы
- Bridge mode не работает (jiti-изоляция) — ждём фикса в OpenClaw или переходим на unsafe-local
- Wiki не наполнена (0 entities/concepts) — следующий шаг
- Dreaming отключён — можно включить
- embed медленный на CPU — при следующем полном сбросе индекса ждать 30-60 мин
---
## Сессия вечер: Прозрачный прокси (Wi-Fi + HA Telegram) — 13:0015:00 UTC
### Задача #1: Wi-Fi homenet-vpn (192.168.4.0/24) через VLESS tproxy
**Статус:** НЕ ЗАВЕРШЕНА. TCP через tproxy не работает.
**Причина проблемы:**
- Ключевой конфликт: `flow: "xtls-rprx-vision"` несовместим с redirect/tproxy mode на принятых сокетах
- Без flow — VLESS не соединяется (сервер требует xtls-rprx-vision)
- С flow — Xray падает `failed to set IP_TRANSPARENT` для redirect mode
- **Итог:** tproxy redirect mode + xtls-rprx-vision = incompatible
**Текущее состояние iptables на vpn-srv:**
- `TV_REDIRECT` в nat PREROUTING — REDIRECT src 192.168.4.0/24 tcp → port 12345
- `REDSOCKS_HA` в nat PREROUTING — REDIRECT src 192.168.2.0/24 tcp → port 12350 (redsocks → SOCKS5 1080)
- `MASQUERADE` для 192.168.2.0/24 и 192.168.4.0/24 в POSTROUTING
**Xray config текущий:**
- flow: `xtls-rprx-vision` (ВОССТАНОВЛЕН)
- loglevel: debug
- tproxy-in: port 12345, mode redirect
- HTTP proxy: 8888, SOCKS5: 1080
**Что работает:** HTTP proxy (8888) и SOCKS5 (1080) через Xray → VLESS → работают (проверено curl 200)
---
### Задача #2: HA Telegram через SOCKS5 прокси
**HA:** `ha.homenet542.keenetic.pro`, IP 192.168.2.139, HAOS 17.1, gateway → Keenetic (192.168.2.1)
**SSH доступ к HA:** через vpn-srv → HA SSH add-on
```
ssh -i /tmp/ha_key -o StrictHostKeyChecking=no root@192.168.2.139
```
(ha_ssh_key скопирован на vpn-srv как /tmp/ha_key)
**Что сделали:**
- Добавили в `/homeassistant/configuration.yaml` блок telegram_bot с `proxy_url: socks5://192.168.2.200:1080`
- Удалили UI-configured config entry (01K6SDHYX559FSXC1M25ATSSYE)
- Перезапустили HA Core
- `notify.telegram_notifier` появился, `telegram_bot/send_message` → HTTP 200 ✅
**Бот:** `ha542_bot`, token: `8251509944:AAGkRr_5ZIIQNd4XrlI5QI9DYZS8JUPhcxY`
**❗ ЗАМЕЧАНИЕ Славы (голосовое, 14:44 UTC):**
- Через прокси должен ходить ТОЛЬКО Telegram, не весь трафик HA
- Прокси для Telegram настраивается через UI интеграции в HA (не через кастомные компоненты)
- Нужно найти proxy_url настройку в UI telegram_bot интеграции
- Текущая YAML-конфигурация может быть корректной (proxy_url только для telegram_bot), но нужно проверить
**Статус на 15:00 UTC:** Telegram работает через SOCKS5, но Слава указал что подход должен быть через UI. Нужно уточнить.
---
### SSH доступ к инфраструктуре (актуально)
- **vpn-srv:** `ssh -i /home/node/.openclaw/ha_ssh_key -o StrictHostKeyChecking=no -p 3322 vpn@185.130.212.192`
- **HA (через vpn-srv):** `ssh -i /tmp/ha_key root@192.168.2.139` (с vpn-srv)
- **mva154:** `ssh -i /home/node/.openclaw/ha_ssh_key slin@82.22.50.71`
### Конфиги
- Xray: `/etc/xray/config.json` (bak5 = последний бэкап до удаления flow, bak3/bak4 старые)
- iptables: `/etc/iptables/rules.v4` (outdated — не пересохранены после сегодняшних изменений!)
- HA config: `/homeassistant/configuration.yaml` (бэкап: `.bak-20260410-XXXXXX`)
### TODO
- [ ] Сохранить текущие iptables rules.v4 (сегодняшние изменения не сохранены!)
- [ ] Проверить как настраивается proxy в UI telegram_bot интеграции
- [ ] Либо оставить YAML-config с proxy_url (только Telegram через прокси), либо вернуть UI с proxy
- [ ] Задача Wi-Fi tproxy для 192.168.4.0/24 — остаётся незакрытой
---
## Задача #2 ЗАВЕРШЕНА — 15:25 UTC
**HA Telegram через VLESS работает!** Слава подтвердил получение сообщений.
**Финальная конфигурация:**
- UI-интеграция telegram_bot с `proxy_url: socks5://192.168.2.200:1080`
- Только Telegram через прокси, остальное напрямую
- Config entry ID: `01KNVZDDM3ZNJS1WX309K7E1EN`
- Notify entity: `notify.telegram_bot_8251509944_126472752`
**Задокументировано в:** `tasks/proxy-vm/PROJECT.md`
**Задача #1** (Wi-Fi transparent proxy) продолжится когда Слава вернётся домой.
````
## Notes
<!-- openclaw:human:start -->
<!-- openclaw:human:end -->
## Related
<!-- openclaw:wiki:related:start -->
- No related pages yet.
<!-- openclaw:wiki:related:end -->

132
sources/brd.md Normal file
View File

@@ -0,0 +1,132 @@
---
pageType: source
id: source.brd
title: BRD
sourceType: local-file
sourcePath: /home/node/.openclaw/workspace/tasks/snowbike-rag/BRD.md
ingestedAt: 2026-04-09T22:22:18.682Z
updatedAt: 2026-04-09T22:22:18.682Z
status: active
---
# BRD
## Source
- Type: `local-file`
- Path: `/home/node/.openclaw/workspace/tasks/snowbike-rag/BRD.md`
- Bytes: 5102
- Updated: 2026-04-09T22:22:18.682Z
## Content
```text
# Бизнес-требования: Семантический поиск по данным Telegram (Сноубайк Россия)
## 1. Проблема
У нас есть 155 000 сообщений из Telegram-группы «Сноубайк Россия» (12 топиков). Сейчас поиск работает только по точным словам внутри Telegram — найти нужный ответ среди тысяч сообщений практически невозможно.
**Пример:** чтобы узнать, какое масло рекомендуют для Polaris 850, нужно:
- Знать точную формулировку
- Листать сотни сообщений вручную
- Объединять ответы из разных обсуждений
---
## 2. Что хотим получить
Систему, которая **отвечает на вопросы** по базе знаний, а не просто ищет сообщения.
**Примеры запросов:**
• «Какое масло рекомендуют для Polaris 850?»
• «Где лучше кататься зимой в Подмосковье?»
• «Какие гусеницы подходят на Timber S800?»
• «Кто продавал запчасти для Lynx в Китае?»
• «Какие проблемы бывают с Yamaha Mountain Max?»
---
## 3. Как должен работать
1. Пользователь задаёт вопрос на русском языке
2. Система находит 1020 самых релевантных сообщений (по смыслу, не по точным словам)
3. LLM формирует ответ на основе найденных сообщений
4. В ответе указаны источники: дата, автор, топик
5. Если информации недостаточно — система честно говорит об этом
---
## 4. Ключевые требования
### 4.1 Поиск
• Понимать смысл запроса (не только точные слова)
• Допускать опечатки и синонимы
• Искать по всем 12 топикам одновременно
• Фильтровать по конкретному топику (опционально)
• Сортировать по релевантности или дате
### 4.2 Ответы
На русском языке
• Краткие и по существу
С указанием источников (кто, когда, в каком топике)
• Агрегированные (если 5 человек рекомендуют одно масло — обобщить)
### 4.3 Данные
• Работать с сырыми данными Telegram Collector
• Обновляться ежедневно после загрузки новых сообщений
Не ломать существующую систему сбора данных
### 4.4 Скорость
• Ответ на запрос: до 3 секунд
• Индексация новых сообщений: до 1 минуты в день
### 4.5 Стоимость
• LLM: ~$0.005 за запрос (приемлемо)
• Embeddings: бесплатно (локальная модель)
• Хранение: ~1.5 ГБ дополнительно (приемлемо)
---
## 5. Что НЕ входит в эту задачу
• Голосовой интерфейс (добавим позже)
• Поиск по медиа-файлам (фото, видео)
• Учёт пользователей и авторизация
• Мобильное приложение
• Перевод на другие языки
---
## 6. Пользователи
• **Слава** — основной пользователь
• Потенциально: друзья, участники группы (позже, через веб-интерфейс)
---
## 7. Критерии приёмки
✅ Ответ на вопрос «какое масло для Polaris 850» — содержит конкретные рекомендации с источниками
✅ Ответ на вопрос «где кататься в Подмосковье» — содержит локации из чата
✅ Система честно говорит «не знаю», когда информации нет
✅ Ежедневно обновляется после cron-загрузки
✅ Работает без интернета (embeddings), кроме LLM
---
## 8. Приоритет и этапы
**Этап 1 (MVP):** Индексация + поиск + LLM ответ — **сейчас**
**Этап 2:** Веб-интерфейс (Flask UI) — **позже**
**Этап 3:** Голосовой запрос — **позже**
**Этап 4:** Множественные источники (другие каналы) — **когда понадобится**
```
## Notes
<!-- openclaw:human:start -->
<!-- openclaw:human:end -->
## Related
<!-- openclaw:wiki:related:start -->
- No related pages yet.
<!-- openclaw:wiki:related:end -->

99
sources/dev-task.md Normal file
View File

@@ -0,0 +1,99 @@
---
pageType: source
id: source.dev-task
title: DEV TASK
sourceType: local-file
sourcePath: /home/node/.openclaw/workspace/tasks/apps-portal/DEV-TASK.md
ingestedAt: 2026-04-10T13:37:41.693Z
updatedAt: 2026-04-10T13:37:41.693Z
status: active
---
# DEV TASK
## Source
- Type: `local-file`
- Path: `/home/node/.openclaw/workspace/tasks/apps-portal/DEV-TASK.md`
- Bytes: 2574
- Updated: 2026-04-10T13:37:41.693Z
## Content
```text
# DEV-TASK: Портал приложений (apps.mva154.duckdns.org)
## Контекст
Нужен портал-лендинг с карточками веб-приложений. Светлая тема, автогенерация аватарок.
**Документация:**
- Бизнес-требования: `tasks/apps-portal/docs/BRD.md`
- Техническое задание: `tasks/apps-portal/docs/TZ.md`
---
## Задача
### Шаг 1: Инфраструктура
1. Создать `config/apps.json` с двумя приложениями (noisemap, snowbike-rag)
2. Создать `requirements.txt` (flask, pillow)
### Шаг 2: Автогенерация аватарок
3. Реализовать функцию `generate_avatars()`:
- Читает `config/apps.json`
- Для каждого приложения проверяет `static/avatars/{id}.png`
- Если файла нет — генерирует: градиентный фон (по хэшу name) + emoji/icon по центру
- PNG 200×200
### Шаг 3: Flask сервер
4. Создать `server.py`:
- GET `/` — главная (рендерит index.html с apps)
- GET `/api/apps` — JSON
- GET `/static/avatars/` — файлы
- При старте: `generate_avatars()`
### Шаг 4: Главная страница
5. Создать `templates/index.html`:
- Светлая тема (#F8FAFC фон, белые карточки)
- Tailwind CSS через CDN, шрифт Inter
- Карточки: аватарка 80×80, название, описание
- Клик → переход на url приложения
- Адаптивно: 4 → 2 → 1 колонка
- Hover: lift-эффект, синяя рамка
### Шаг 5: Тест
6. Запустить `python server.py`
7. Проверить http://localhost:5560/
8. Добавить третье приложение в apps.json — проверить автогенерацию аватарки
---
## Критерии приёмки
- [ ] http://localhost:5560/ — портал с карточками
- [ ] Клик — переход на приложение
- [ ] Аватарки в static/avatars/ сгенерированы
- [ ] Светлая тема, красиво
- [ ] Адаптивно на мобильном
- [ ] /api/apps — JSON
---
## Важно
• Всё в `tasks/apps-portal/`
• Порт 5560
• Pillow для аватарок (pip install pillow)
Не трогать другие приложения
```
## Notes
<!-- openclaw:human:start -->
<!-- openclaw:human:end -->
## Related
<!-- openclaw:wiki:related:start -->
### Referenced By
- [Apps Portal](entities/project-apps-portal.md)
<!-- openclaw:wiki:related:end -->

13
sources/index.md Normal file
View File

@@ -0,0 +1,13 @@
# Sources
## Generated
<!-- openclaw:wiki:sources:index:start -->
- [2026 04 09](sources/2026-04-09.md)
- [2026 04 10](sources/2026-04-10.md)
- [BRD](sources/brd.md)
- [DEV TASK](sources/dev-task.md)
- [MEMORY](sources/memory.md)
- [PROJECT](sources/project.md)
- [SKILL](sources/skill.md)
- [TZ](sources/tz.md)
<!-- openclaw:wiki:sources:index:end -->

250
sources/memory.md Normal file
View File

@@ -0,0 +1,250 @@
---
pageType: source
id: source.memory
title: MEMORY
sourceType: local-file
sourcePath: /home/node/.openclaw/workspace/MEMORY.md
ingestedAt: 2026-04-10T15:42:43.804Z
updatedAt: 2026-04-10T15:42:43.804Z
status: active
---
# MEMORY
## Source
- Type: `local-file`
- Path: `/home/node/.openclaw/workspace/MEMORY.md`
- Bytes: 15593
- Updated: 2026-04-10T15:42:43.804Z
## Content
````text
# MEMORY.md - Долгосрочная память
## О себе
- Имя: Стрим 🌊
- Стиль: дружелюбная ассистентка с юмором
- Фокус: работа с потоками информации - сбор, анализ, структурирование
## Правила форматирования
### Телеграм
- **Таблицы — через diagram-table** (PNG картинка), НЕ markdown-таблицы — они криво отображаются
- Вместо таблиц: списки с буллетами, нумерованные списки, или структурированный текст с разделителями
- Эмодзи для наглядности: ✅❌⚠️🔥💡🎯🌊
- **Голосовые сообщения:** когда Слава отправляет голосовое — отвечать И текстом, И голосовым сообщением (через voice-tts)
## Люди
### Слава
- Имя: Слава
- Обращение: неформальное, дружеское, с юмором
- Интересы: сбор, анализ и суммаризация информации из разных источников (Телеграм-чаты, интернет)
- Предпочитает общение на русском языке
- Первая встреча: 18 марта 2026
## Правила работы
### 🏠 Home Assistant — только с подтверждения
- **Любое изменение в HA** (конфиги, автоматизации, настройки, перезапуски) — только после явного подтверждения Славы
- Читать состояния, логи, статусы — можно без подтверждения
- Отправка сообщений через telegram_bot — можно без подтверждения (тесты)
- Всё остальное: объяснить что хочу сделать → получить ОК → действовать
### ⛔ Разработка — только через Dev-агента
- **Стрим НЕ пишет код самостоятельно.** Никогда. Даже если задача кажется мелкой.
- Роль Стрим: обсуждение, постановка задачи, ТЗ, проверка результата, документация
- Роль Dev: вся реализация (новые файлы, правки кода, скрипты)
- Когда задача дошла до «приступай» → передать ТЗ Dev-агенту через `sessions_spawn`
- Нарушение зафиксировано: 27.03.2026 — слой плотности noisemap реализован Стримом напрямую
### Документация
- **Обязательно**: при любом изменении функционала немедленно обновлять документацию
- Документация всегда должна быть в актуальном состоянии - не "потом", а сразу после изменения
- Порядок работы: изменение → тест → документация → упаковка/коммит
### Управление ключами и секретами
- Ключи в `openclaw.json` (botToken, gateway.auth.token, tools.web.search.apiKey) — НЕ ТРОГАТЬ
- **Все остальные секреты** — только в `~/.openclaw/.env`
- Никогда не дублировать ключи в SKILL.md, скриптах или других файлах
### Структура workspace
- `tasks/{project}/` — каждый проект в своей папке, там же `PROJECT.md` с деталями
- `tasks/scripts/` и `tasks/reports/` — общие скрипты и отчёты
- `skills/` — готовые AgentSkills с полной документацией
- `data/` — выходные данные (`data/{skill-name}/`)
- `memory/` — дневные записи (`YYYY-MM-DD.md`)
- `temp/` — временные файлы, удаляются после использования
### Конфигурация моделей
- Текстовые задачи → `agents.defaults.model.primary`
- Анализ изображений → `agents.defaults.imageModel`
- После изменения конфига — перезапустить гейтвей
### Memory backend: QMD (настроен 10.04.2026)
- Конфиг: корневой ключ `memory` в openclaw.json (НЕ под `agents.defaults`!)
- QMD бинарник: `/home/node/.local/bin/qmd` — явно прописан в `memory.qmd.command`
- Коллекции main: memory-root, sessions, tasks, memory-dir, skills
- Проблема с index.yml: QMD создаёт `memory-root-main` с `**/*.md`, OpenClaw ищет `memory-alt-main`
- Фикс: вручную добавить в `~/.openclaw/agents/main/qmd/xdg-config/qmd/index.yml` запись `memory-alt-main`
- После фикса: `rm ~/.openclaw/agents/main/qmd/xdg-cache/qmd/index.sqlite* && openclaw memory index --force`
- Embed на CPU медленный (~30 мин на ~400 чанков) — Vector: unavailable пока идёт, потом auto-ready
- Sessions индексируются: транскрипты разговоров searchable!
### Memory Wiki (настроен 10.04.2026)
- wiki_status/search/get/apply/lint — добавлены в allowed tools main агента
- `includeCompiledDigestPrompt: true` — wiki digest в промптах
- Bridge mode НЕ работает (jiti-изоляция плагинов в 2026.4.9) — known limitation
- `openclaw wiki bridge import` всегда 0 артефактов — не баг конфига
- Workaround: ручной ingest (`openclaw wiki ingest <file>`) или unsafe-local режим
- Wiki пуста (0 entities/concepts) — нужно наполнять через `wiki_apply`
- Дневник по настройке: `memory/2026-04-10.md`
### Учёт токенов Dev-агента
- Реальные данные — из OpenRouter dashboard
- Формула: `(input×$3 + output×$15) / 1M` (Sonnet 4.6)
- Лог: `tasks/token-log.md`, формат: `DEV-XXX | XK in / XK out → $X.XX`
## Проекты
## Proxy VM — vpn-srv (прокси-сервер)
- **Документация:** `tasks/proxy-vm/PROJECT.md`
- **vpn-srv:** 192.168.2.200, FRP туннель через 185.130.212.192:7000, SSH port 3322
- **Доступ:** `ssh -i ha_ssh_key -o Port=3322 vpn@185.130.212.192`, sudo: `echo meNt85doC | sudo -S`
- **VLESS:** 43.245.226.231:53903, yahoo.com SNI, **flow: xtls-rprx-vision** (обязателен!)
- **Xray порты:** 12345 (tproxy), 1080 (SOCKS5), 8888 (HTTP proxy)
### Задача #1: Homenet-VPN Wi-Fi (в работе 🔄)
- **Старт:** 05.04.2026
- **Цель:** 192.168.4.0/24 → весь трафик через VLESS (прозрачный прокси)
- **Схема:** Device → iptables REDIRECT → redsocks:12350 → Xray SOCKS5:1080 → VLESS
- **Wi-Fi:** 192.168.4.0/24, шлюз 192.168.4.1 (ens19, netplan)
- **DNS:** UDP/53 → 1.1.1.1 напрямую (утечка допустима)
- **Проблема:** TCP через transparent proxy не работает — конфликт xtls-rprx-vision + redirect mode. Продолжение когда Слава дома.
### Задача #2: HA Telegram через VLESS (готово ✅)
- **Дата:** 10.04.2026
- **Схема:** HA telegram_bot → SOCKS5 (192.168.2.200:1080) → VLESS → api.telegram.org
- **Только Telegram** через прокси, остальной трафик HA — напрямую
- **HA:** `ha.homenet542.keenetic.pro` (HAOS 17.1, IP 192.168.2.139)
- **Бот:** `@ha542_bot` (8251509944), chat_id Славы: 126472752
- **Entity:** `notify.telegram_bot_8251509944_126472752`
- **Сервис:** `notify.send_message` → `entity_id: notify.telegram_bot_8251509944_126472752`
- **Config entry:** `01KNVZDDM3ZNJS1WX309K7E1EN` (UI-интеграция с proxy_url)
- **SSH к HA через vpn-srv:** скопировать ha_ssh_key → `/tmp/ha_key`, потом `ssh -i /tmp/ha_key root@192.168.2.139`
### Интернет-заказы (vprok.ru)
- **Старт:** 31 марта 2026
- **Детали:** `tasks/internet-orders/PROJECT.md`
- **Статус:** relay-сервер запущен (185.130.212.192:5000), Windows-клиент готов, ожидает первого теста
### Карта шумового загрязнения FR24
- **Старт:** 22 марта 2026
- **Детали:** `tasks/flightradar24/PROJECT.md`
- **Статус:** прототип v0.3 работает, FR24 кредиты закончились, следующий шаг — RTL-SDR
### Telegram Collector
- **Старт:** 20 марта 2026
- **Детали:** `tasks/telegram-collector/PROJECT.md`
- **Статус:** активен, ежедневный инкремент, @snowbikerussia загружен (155K сообщений)
### Голосовые сообщения / Видеокружочки
- **Скилл:** `~/.openclaw/skills/voice-tts/SKILL.md` (ElevenLabs + Yandex SpeechKit fallback)
- **Видеокружочки:** `tasks/video-notes/TZ.md`, pipeline ElevenLabs → fal.ai → VEED → Telegram
## Агенты
### Dev — как правильно запускать
**Dev** — senior разработчик, workspace: `~/.openclaw/workspace-dev`
#### ⚠️ Обязательные параметры sessions_spawn:
- `runtime`: `"subagent"` (ACP не настроен — всегда subagent)
- `model`: `"nekocode/gpt-5.4"` (если Слава не указал другую)
- `cwd`: `"/home/node/.openclaw/workspace-dev"` — **критично!** Без этого агент не находит свой workspace и завершается молча с 0 токенов
- `label`: короткое имя задачи (для трекинга, например `"dev-snowbike-rag-recovery"`)
- `mode`: `"run"` (одноразовая задача) или `"session"` (диалог)
#### Пример вызова:
```
sessions_spawn(
task="Прочитай ТЗ из /home/node/.openclaw/workspace/tasks/...\n\nСделай X, Y, Z.\n\nВерни отчёт.",
runtime="subagent",
model="nekocode/gpt-5.4",
cwd="/home/node/.openclaw/workspace-dev",
label="dev-taskname"
)
```
#### Что включать в task:
1. Ссылка на ТЗ-файл (абсолютный путь) или полный текст задачи
2. Путь к проекту (где лежат исходники)
3. Ограничения (например: "полную переиндексацию не запускать")
4. Формат ожидаемого отчёта
#### Модели:
- **Основная:** `nekocode/gpt-5.4` — если Слава не указал другую
- **Fallback при rate limit:** `openrouter/minimax/minimax-m2.7` — проверено, работает для dev-задач (2026-04-07)
- Rate limit gpt-5.4 проявляется как: агент стартует нормально, но отвечает `{"code":"rate_limited",...}`
- Если rate limit — не ждать, сразу переключаться на MiniMax или Sonnet 4.6
#### Частые ошибки:
- **Не указывать `cwd`** → агент завершается за 5 сек с 0 токенов (молчаливый фейл)
- **`streamTo: "parent"`** → работает только с `runtime=acp`, не с subagent
- **runtime=acp** → не настроен, всегда падает с ошибкой
#### Dev vs Legal:
- **Dev** (id: `dev`) — разработка, дебаг, скрипты
- **Юрист** (id: `legal`) — юридические вопросы по РФ, workspace: `~/.openclaw/workspace-legal`
- **Федя (Fedia)** — агент, workspace: `~/.openclaw/workspace-fedia`
## Скиллы
### Общие (`~/.openclaw/skills/`) — доступны всем агентам
- **voice-tts** — голосовые сообщения (ElevenLabs + Yandex SpeechKit)
- **diagram-png** — генерация PNG-диаграмм из JSON
- **diagram-table** — таблицы в PNG из JSON (Pillow, dark/light). Скрипты: `generate_table.py` (stdin→PNG), `send_table.py` (PNG→Telegram). Требует `TELEGRAM_BOT_TOKEN` и `TELEGRAM_CHAT_ID` в `.env`
### Мои личные (`workspace/skills/`) — только для Стрим
- **ontology** — граф знаний (сущности, связи, запросы)
- **telegram-collector** — сбор данных из Telegram-каналов
- **youtube-search** — YouTube Data API v3. Ключ: `YOUTUBE_API_KEY`
- **yandex-search** — Yandex Search API v2. Ключ: `YANDEX_API_KEY`
- **ontology** — граф знаний (сущности, связи, запросы)
- **Онтология — общая база знаний**: `memory/ontology/`
- `graph.jsonl` — сущности и связи
- `schema.yaml` — схема типов
- `RULES.md` — правила ведения (обязательны)
- **Стрим — единственный writer**: все изменения — только через Стрим
- ⚠️ **Правило (10.04.2026):** При работе с проектами всегда автоматически обновлять онтологию (create/update) и запускать `openclaw wiki ingest` для документации — без напоминания Славы
- **Другие агенты (Dev, Legal, Feda) — читатели**: запрашивают через `sessions_send`
- **Изменения — только с подтверждения Славы**
- **При работе с проектами/задачами — всегда использовать онтологию** (правила: `memory/ontology/RULES.md`)
- Запуск из workspace: `python3 skills/ontology/scripts/ontology.py <command>`
- Storage: `memory/ontology/graph.jsonl` + `memory/ontology/schema.yaml`
- PyYAML не установлен — validate暂时 не работает
## Интеграции
- **Flightradar24 API** — тариф Explorer, 60K кредитов/мес (до 31.05.2026 промо 120K)
- **GigaChat API** — через gpt2giga прокси
- gpt2giga: `185.130.212.192:8443` (baseUrl в openclaw.json)
- Xray VLESS outbound: `43.245.226.231:15281` (Франкфурт), UUID b8d92081-..., Reality+chrome, SNI google.com
- Xray конфиг: `/home/slin/openclaw/xray-config.json`
- OpenClaw получает `HTTPS_PROXY=socks5://xray:10808` через docker-compose environment
- Цепочка: OpenClaw (mva154) → Xray VLESS → ??? → gpt2giga → GigaChat API
- Примечание: прямое подключение из контейнера к 185.130.212.192:8443 недоступно (timeout), трафик идёт через host-сеть
- ⚠️ **TODO:** Слава проверит схему — точно ли Xray участвует в цепочке к gpt2giga или это отдельный маршрут
- Локальный gpt2giga НЕ используется, удалён (08.04.2026)
````
## Notes
<!-- openclaw:human:start -->
<!-- openclaw:human:end -->
## Related
<!-- openclaw:wiki:related:start -->
### Referenced By
- [Wiki & Memory](entities/project-wiki-memory.md)
<!-- openclaw:wiki:related:end -->

258
sources/project.md Normal file
View File

@@ -0,0 +1,258 @@
---
pageType: source
id: source.project
title: PROJECT
sourceType: local-file
sourcePath: /home/node/.openclaw/workspace/tasks/proxy-vm/PROJECT.md
ingestedAt: 2026-04-10T15:41:41.998Z
updatedAt: 2026-04-10T15:41:41.998Z
status: active
---
# PROJECT
## Source
- Type: `local-file`
- Path: `/home/node/.openclaw/workspace/tasks/proxy-vm/PROJECT.md`
- Bytes: 7909
- Updated: 2026-04-10T15:41:41.998Z
## Content
````text
# ProxyVM — Документация проекта
**Статус:** active
**Дата запуска:** 04.04.2026
**Обновлено:** 10.04.2026
---
## Цели проекта
1. **Задача #1: Homenet-VPN** — Wi-Fi сеть 192.168.4.0/24, весь TCP/UDP трафик через Xray VLESS Reality (прозрачный прокси). Статус: **в работе** 🔄
2. **Задача #2: HA Telegram** — Home Assistant отправляет Telegram-уведомления через VLESS. Остальной трафик HA — напрямую. Статус: **ГОТОВО** ✅
---
## Задача #2 — HA Telegram через VLESS (ЗАВЕРШЕНА ✅)
**Дата:** 10.04.2026
### Схема работы
```
Home Assistant (192.168.2.139, gateway = Keenetic 192.168.2.1)
│ SOCKS5 proxy (только telegram_bot интеграция)
vpn-srv SOCKS5 (192.168.2.200:1080) ← Xray
│ VLESS Reality (xtls-rprx-vision)
VLESS Server (43.245.226.231:53903)
api.telegram.org
```
Важно: только `telegram_bot` интеграция ходит через прокси. Остальной трафик HA идёт напрямую через Keenetic.
### Конфигурация в HA
Интеграция `telegram_bot` настроена через UI (Настройки → Интеграции → Telegram Bot):
| Параметр | Значение |
|----------|----------|
| Platform | polling |
| API Key | `8251509944:AAGkRr_5ZIIQNd4XrlI5QI9DYZS8JUPhcxY` |
| Proxy URL | `socks5://192.168.2.200:1080` |
| API Endpoint | `https://api.telegram.org` |
| Allowed Chat ID | 126472752 (Слава) |
| Config Entry ID | `01KNVZDDM3ZNJS1WX309K7E1EN` |
### Бот
- **Username:** `@ha542_bot`
- **Bot ID:** 8251509944
- **Notify Entity:** `notify.telegram_bot_8251509944_126472752`
### Как отправить сообщение из HA
```yaml
service: notify.send_message
target:
entity_id: notify.telegram_bot_8251509944_126472752
data:
message: "Текст уведомления"
```
Или через Developer Tools → Services.
### Доступ к HAOS
- **URL:** `https://ha.homenet542.keenetic.pro`
- **IP в LAN:** 192.168.2.139
- **HAOS Version:** 17.1 | HA Core: 2026.3.4
- **HA Token:** `HA_TOKEN` в `~/.openclaw/.env`
- **SSH через vpn-srv:**
```bash
# Шаг 1: Скопировать ключ на vpn-srv
scp -i /home/node/.openclaw/ha_ssh_key -P 3322 /home/node/.openclaw/ha_ssh_key vpn@185.130.212.192:/tmp/ha_key
# Шаг 2: SSH к HA
ssh -i /home/node/.openclaw/ha_ssh_key -p 3322 vpn@185.130.212.192 \
"ssh -i /tmp/ha_key root@192.168.2.139"
```
---
## Задача #1 — Wi-Fi Homenet_vpn transparent proxy (В РАБОТЕ 🔄)
**Цель:** Устройства в сети 192.168.4.0/24 (телевизор и др.) автоматически используют VLESS прокси без настройки на устройстве.
### Архитектура
```
Телевизор/телефон
│ Wi-Fi "Homenet_vpn" (SSID)
Keenetic (DHCP: gateway=192.168.4.1, DNS=192.168.4.1)
│ VLAN/bridge → ens19
vpn-srv (192.168.4.1 на ens19)
│ iptables REDIRECT → redsocks:12350
redsocks (localhost:12350, type=socks5)
│ SOCKS5 → 127.0.0.1:1080
Xray (localhost:1080 SOCKS5 / 8888 HTTP / 12345 tproxy-in)
│ VLESS Reality (xtls-rprx-vision)
VLESS Server (43.245.226.231:53903)
🌐 Internet
```
**Что работает:** DNS (UDP/53 → 1.1.1.1), ping, UDP
**Что не работает:** TCP через REDIRECT → ошибка на стороне HA/клиента
**Корень проблемы:** Конфликт `xtls-rprx-vision` flow + redirect/tproxy mode. Xray падает с `operation not supported` при установке IP_TRANSPARENT на принятых сокетах. Проверка продолжится когда Слава дома.
---
## Инфраструктура vpn-srv
### Доступ
```bash
ssh -i /home/node/.openclaw/ha_ssh_key -o StrictHostKeyChecking=no -p 3322 vpn@185.130.212.192
# sudo через пайп:
echo meNt85doC | sudo -S <команда>
```
| Параметр | Значение |
|----------|----------|
| IP (LAN) | 192.168.2.200/24 (ens18) |
| IP (VPN subnet) | 192.168.4.1/24 (ens19) |
| OS | Ubuntu 22.04 |
| Sudo password | meNt85doC |
### Сервисы на vpn-srv
| Сервис | Порт | Статус |
|--------|------|--------|
| frpc | → relay:7000 | ✅ enabled |
| xray | 12345 (tproxy), 1080 (socks5), 8888 (http) | ✅ enabled |
| redsocks | 12350 | запущен вручную |
| netfilter-persistent | — | ✅ enabled |
### FRP туннель
- **relay:** `185.130.212.192:7000`, token: `frp_vpnsrv_2026_secret`
- **SSH через relay:** порт 3322 → vpn-srv:22
- **relay root SSH:** `root@185.130.212.192`, пароль `AR5f7_T-bA`
### VLESS сервер
```
vless://009625cc-588f-4cba-941f-ab8c960efa04@43.245.226.231:53903
?type=tcp&encryption=none&security=reality
&pbk=fgKnOtQWS5FErVT8E-roZgQOG6XQzDxB9-N5pRoAyBI
&fp=chrome&sni=yahoo.com&sid=d00e60e4&spx=%2F
&flow=xtls-rprx-vision
```
### Конфигурационные файлы
| Файл | Описание |
|------|----------|
| `/etc/xray/config.json` | Конфиг Xray (tproxy + SOCKS5 + HTTP + VLESS out) |
| `/etc/iptables/rules.v4` | iptables правила (⚠️ не актуальны после 10.04!) |
| `/etc/frp/frpc.toml` | FRP клиент |
| `/etc/netplan/99-vpn-alias.yaml` | IP 192.168.4.1 на ens19 |
| `/home/vpn/transparent-proxy.sh` | Скрипт настройки tproxy (устарел) |
### iptables (текущее состояние на 10.04)
```bash
# DNS для VPN-сети → 1.1.1.1
iptables -t nat -A PREROUTING -s 192.168.4.0/24 -p udp --dport 53 -j DNAT --to-destination 1.1.1.1
# TCP для VPN-сети → redsocks (12350)
# Цепочка TV_REDIRECT: исключения для VLESS сервера и приватных сетей, затем REDIRECT
iptables -t nat -A PREROUTING -j TV_REDIRECT
# TCP для HA-сети → redsocks (12350)
# Цепочка REDSOCKS_HA: исключения для приватных сетей, затем REDIRECT
iptables -t nat -A PREROUTING -s 192.168.2.0/24 -j REDSOCKS_HA
# MASQUERADE
iptables -t nat -A POSTROUTING -s 192.168.4.0/24 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -j MASQUERADE
```
⚠️ **rules.v4 не обновлён** — нужно пересохранить после завершения отладки.
---
## TODO
- [ ] **Задача #1:** Разобраться с TCP через transparent proxy для 192.168.4.0/24 (конфликт xtls-rprx-vision + tproxy/redirect)
- [ ] Обновить `/etc/iptables/rules.v4` после финализации правил
- [ ] Убедиться что redsocks запускается при загрузке vpn-srv (добавить в systemd)
- [ ] Очистить `/homeassistant/custom_components/set_proxy/` (создан случайно, не нужен)
---
## Хронология
| Дата | Событие |
|------|---------|
| 04.04.2026 | Создан сегмент Homenet_vpn в Keenetic, настроен Proxmox VLAN |
| 05.04.2026 | Установлен Xray, настроен tproxy |
| 10.04.2026 | Полная отладка: frpc, redsocks, netplan, iptables-persistent |
| 10.04.2026 | DNS ✅, ping ✅, UDP ✅ — TCP через tproxy ❌ (конфликт flow) |
| 10.04.2026 | **Задача #2 DONE:** HA Telegram через SOCKS5 proxy → VLESS ✅ |
````
## Notes
<!-- openclaw:human:start -->
<!-- openclaw:human:end -->
## Related
<!-- openclaw:wiki:related:start -->
### Referenced By
- [Home Assistant](entities/project-ha.md)
- [Proxy VM (vpn-srv)](entities/project-proxy-vm.md)
- [Snowbike RAG](entities/project-snowbike-rag.md)
- [Tapo Camera Monitor](entities/project-tapo.md)
- [Telegram Collector](entities/project-telegram-collector.md)
- [Интернет-заказы](entities/project-internet-orders.md)
- [Карта шумового загрязнения FR24](entities/project-flightradar24.md)
<!-- openclaw:wiki:related:end -->

171
sources/skill.md Normal file
View File

@@ -0,0 +1,171 @@
---
pageType: source
id: source.skill
title: SKILL
sourceType: local-file
sourcePath: /home/node/.openclaw/skills/diagram-table/SKILL.md
ingestedAt: 2026-04-10T13:17:08.264Z
updatedAt: 2026-04-10T13:17:08.264Z
status: active
---
# SKILL
## Source
- Type: `local-file`
- Path: `/home/node/.openclaw/skills/diagram-table/SKILL.md`
- Bytes: 3890
- Updated: 2026-04-10T13:17:08.264Z
## Content
````text
# SKILL.md — diagram-table
## Назначение
Генерация таблиц в виде PNG-картинок для отправки в Telegram. Таблицы в текстовом формате плохо читаются в Telegram (моноширинный шрифт, смещения), поэтому конвертируем их в красивую картинку.
---
## Архитектура
```
Вход: JSON/текстовая таблица
Генерация PNG (Pillow)
Отправка в Telegram (или сохранение в файл)
```
---
## Файлы
- `SKILL.md` — этот файл
- `scripts/generate_table.py` — генерация PNG из таблицы
- `scripts/send_table.py` — отправка таблицы в Telegram
---
## generate_table.py
**Вход (JSON):**
```json
{
"headers": ["Проект", "Статус", "Исполнитель"],
"rows": [
["Snowbike RAG", "active", "Dev-агент"],
["Noisemap FR24", "paused", "Слава"]
],
"title": "Бэклог проектов",
"width": 800,
"theme": "dark"
}
```
**Параметры:**
- `headers` — список заголовков (обязательно)
- `rows` — список строк (обязательно)
- `title` — заголовок таблицы (опционально)
- `width` — ширина картинки (по умолчанию 800)
- `theme` — `dark` (по умолчанию) или `light`
**Выход:** PNG файл
**Цвета (dark theme):**
- Фон: `#0d1117`
- Заголовок: `#1a3a2a` (зелёный)
- Чередование строк: `#161b22` / `#0d1117`
- Текст: `#e6edf3`
- Границы: `#30363d`
**Цвета (light theme):**
- Фон: `#ffffff`
- Заголовок: `#238636`
- Чередование строк: `#f6f8fa` / `#ffffff`
- Текст: `#24292f`
- Границы: `#d0d7de`
---
## send_table.py
**Использование:**
```bash
./send_table.py "Бэклог" '{"headers":[...], "rows":[...]}' [BOT_TOKEN] [CHAT_ID]
```
**Или через stdin:**
```bash
echo '{"headers":[...], "rows":[...]}' | ./send_table.py "Заголовок"
```
**Параметры:**
- Аргумент 1: заголовок таблицы (или JSON, если 2 аргумента)
- Аргумент 2: JSON (если 1й аргумент — заголовок)
- BOT_TOKEN: из ~/.openclaw/.env если не передан
- CHAT_ID: из ~/.openclaw/.env если не передан
---
## Пример использования в агенте
```python
import subprocess
import json
table_data = {
"headers": ["Проект", "Статус", "Исполнитель"],
"rows": [
["Snowbike RAG", "active", "Dev-агент"],
["Noisemap FR24", "paused", "Слава"]
],
"title": "Бэклог проектов"
}
result = subprocess.run(
["python3", "skills/diagram-table/scripts/generate_table.py"],
input=json.dumps(table_data),
capture_output=True
)
# result.stdout — путь к PNG файлу
```
---
## Шрифты
- Заголовок: DejaVu Sans Bold, 16px
- Ячейки: DejaVu Sans, 14px
- Путь к шрифтам: системные `/usr/share/fonts/truetype/dejavu/` или встроенный fallback
---
##Marginals
- Минимум 1 колонка, 1 строка
- Максимум 20 колонок, 100 строк
- Если строк > 20 — разбивает на несколько страниц внутри одного PNG (часть N/M)
- Высота картинки — автоматическая (по количеству строк)
## Ограничения send_table.py
- BOT_TOKEN и CHAT_ID должны быть в `~/.openclaw/.env`
- Формат: `TELEGRAM_BOT_TOKEN=<token>`, `TELEGRAM_CHAT_ID=<id>`
````
## Notes
<!-- openclaw:human:start -->
<!-- openclaw:human:end -->
## Related
<!-- openclaw:wiki:related:start -->
### Referenced By
- [Skill: ontology](concepts/skill-ontology.md)
- [Skill: telegram-collector](concepts/skill-telegram-collector.md)
- [Skill: voice-tts](concepts/skill-voice-tts.md)
- [Skills: diagram-png & diagram-table](concepts/skill-diagram.md)
- [Skills: youtube-search & yandex-search](concepts/skill-search.md)
<!-- openclaw:wiki:related:end -->

252
sources/tz.md Normal file
View File

@@ -0,0 +1,252 @@
---
pageType: source
id: source.tz
title: TZ
sourceType: local-file
sourcePath: /home/node/.openclaw/workspace/tasks/video-notes/TZ.md
ingestedAt: 2026-04-10T13:36:51.302Z
updatedAt: 2026-04-10T13:36:51.302Z
status: active
---
# TZ
## Source
- Type: `local-file`
- Path: `/home/node/.openclaw/workspace/tasks/video-notes/TZ.md`
- Bytes: 8806
- Updated: 2026-04-10T13:36:51.302Z
## Content
````text
# ТЗ: Видеокружочки в Telegram (lip sync)
## Общее описание
Система генерации и отправки анимированных видеокружочков (video notes) в Telegram.
Аватарка «говорит» голосом ElevenLabs с синхронизацией губ через VEED Fabric 1.0.
---
## Архитектура
```
Пользователь → Текст → send_video_note.sh → Telegram кружочек
├── Шаг 1: ElevenLabs TTS (текст → MP3)
├── Шаг 2: fal.ai Upload (фото + MP3 → URLs)
├── Шаг 3: VEED Fabric 1.0 (фото + MP3 → MP4 с lip sync)
├── Шаг 4: FFmpeg (MP4 → 512×512 квадрат)
└── Шаг 5: Telegram sendVideoNote (MP4 → кружочек)
```
---
## Компоненты
### 1. ElevenLabs TTS API
- **Назначение:** генерация голоса из текста
- **Endpoint:** `https://api.elevenlabs.io/v1/text-to-speech/{voice_id}`
- **Голос:** `TPIitICAZ8CqlGZ81AKm` (голос Стрим)
- **Модель:** `eleven_multilingual_v2`
- **Вход:** текст (до 5000 символов)
- **Выход:** MP3 файл
- **Ключ:** `ELEVENLABS_API_KEY` в `~/.openclaw/.env`
### 2. fal.ai Upload API
- **Назначение:** загрузка файлов на storage fal.ai
- **Endpoint:** `https://gateway.fal.ai/storage/upload`
- **Аутентификация:** `Authorization: Key {key_id}:{key_secret}`
- **Вход:** файл (изображение или аудио)
- **Выход:** публичный URL файла на fal.ai storage
- **Ключ:** `FAL_KEY` в `~/.openclaw/.env` (формат: `key_id:key_secret`)
- **Fallback:** если upload не работает — кодирование в base64 и передача как data URL
### 3. VEED Fabric 1.0 API (fal.ai)
- **Назначение:** генерация видео с lip sync из фото и аудио
- **Endpoint:** `https://queue.fal.run/veed/fabric-1.0`
- **Аутентификация:** `Authorization: Key {key_id}:{key_secret}`
- **Вход:**
- `image_url` — URL фото аватарки (или base64 data URL)
- `audio_url` — URL MP3 файла с голосом (или base64 data URL)
- `resolution` — разрешение видео (`"720p"` или `"480p"`)
- **Выход:** JSON с URL готового MP4 видео
- **Архитектура:** асинхронная (queue + poll)
1. POST → получает `request_id` + статус `IN_QUEUE`
2. GET poll → статусы: `IN_QUEUE` → `IN_PROGRESS` → `COMPLETED`
3. GET result → URL MP4 файла
- **Таймаут:** 300 секунд (5 минут)
- **Стоимость:** ~$0.40 за минуту видео
### 4. FFmpeg
- **Назначение:** конвертация видео в квадрат 512×512
- **Путь:** `/home/node/bin/ffmpeg-7.0.2-amd64-static/ffmpeg`
- **Операции:**
- Масштабирование до 512×512 с обрезкой по центру
- Конвертация в MP4 (H.264)
- Округление длительности до целых секунд
### 5. Telegram sendVideoNote API
- **Назначение:** отправка кружочка в Telegram
- **Endpoint:** `https://api.telegram.org/bot{token}/sendVideoNote`
- **Параметры:**
- `chat_id` — ID чата получателя
- `video_note` — MP4 файл
- `length` — размер кружочка (512 пикселей)
- `duration` — длительность в секундах
- **Токен бота:** читается из `~/.openclaw/openclaw.json`
---
## Скрипт: send_video_note.sh
**Расположение:** `/home/node/.openclaw/workspace/scripts/send_video_note.sh`
**Использование:**
```bash
./send_video_note.sh "Текст для озвучки"
./send_video_note.sh "Текст" [VOICE_ID] [CHAT_ID]
```
**Параметры:**
- `Текст` — текст для озвучки (обязательный)
- `VOICE_ID` — ID голоса ElevenLabs (по умолчанию: `TPIitICAZ8CqlGZ81AKm`)
- `CHAT_ID` — ID Telegram чата (по умолчанию: `126472752`)
**Зависимости:**
- curl
- python3
- ffmpeg (статический, путь в переменной `FFMPEG_BIN`)
- Переменные в `~/.openclaw/.env`: `ELEVENLABS_API_KEY`, `FAL_KEY`
**Временные файлы:**
- Все промежуточные файлы создаются в `/tmp/video_note_*`
- Автоматически удаляются после завершения
---
## Pipeline (подробно)
### Шаг 1: Генерация голоса (ElevenLabs TTS)
```
POST https://api.elevenlabs.io/v1/text-to-speech/{voice_id}
Headers: xi-api-key, Content-Type: application/json
Body: {"text": "...", "model_id": "eleven_multilingual_v2"}
Output: MP3 файл
```
### Шаг 2: Определение длительности аудио
```
ffprobe -v error -show_entries format=duration -of csv=p=0 tts.mp3
Output: длительность в секундах (float)
```
### Шаг 3: Загрузка файлов на fal.ai
```
POST https://gateway.fal.ai/storage/upload
Headers: Authorization: Key {key_id}:{key_secret}, Content-Type: application/octet-stream
Body: бинарные данные файла
Output: {"file_url": "https://..."}
```
Для каждого файла: аватарка (JPG) и аудио (MP3).
### Шаг 4: Отправка задачи VEED Fabric 1.0
```
POST https://queue.fal.run/veed/fabric-1.0
Headers: Authorization: Key {key_id}:{key_secret}, Content-Type: application/json
Body: {"image_url": "...", "audio_url": "...", "resolution": "480p"}
Output: {"request_id": "...", "status": "IN_QUEUE"}
```
### Шаг 5: Ожидание результата (poll)
```
GET https://queue.fal.run/veed/fabric-10/requests/{request_id}/status
Headers: Authorization: Key {key_id}:{key_secret}
Цикл: каждые 5 секунд, до 300 секунд
Статусы: IN_QUEUE → IN_PROGRESS → COMPLETED
```
### Шаг 6: Получение результата
```
GET https://queue.fal.run/veed/fabric-1.0/requests/{request_id}
Headers: Authorization: Key {key_id}:{key_secret}
Output: {"video": {"url": "https://v3b.fal.media/..."}}
```
### Шаг 7: Скачивание видео
```
curl -L -o lipsync_raw.mp4 "{video_url}"
```
### Шаг 8: Конвертация в квадрат 512×512
```
ffmpeg -i lipsync_raw.mp4 \
-vf "crop='min(iw,ih)':'min(iw,ih)',scale=512:512" \
-c:v libx264 -preset fast -crf 23 \
-an -t {duration} -y video_note.mp4
```
### Шаг 9: Отправка в Telegram
```
POST https://api.telegram.org/bot{token}/sendVideoNote
Body (multipart):
- chat_id: 126472752
- video_note: @video_note.mp4
- length: 512
- duration: {duration_int}
```
---
## Аватарка
**Расположение:** `/home/node/.openclaw/workspace/data/avatars/stream-avatar.jpg`
**Требования к аватарке:**
- Формат: JPG или PNG
- Лицо: анфас, хорошо видно
- Размер: не менее 512×512 пикселей
- Фон: нейтральный или любой
**Для смены аватарки:** заменить файл `stream-avatar.jpg`
---
## Ограничения
- **Длительность:** до 60 секунд (лимит Telegram video note)
- **Размер:** до 50 МБ (лимит Telegram)
- **Стоимость VEED:** ~$0.40 за минуту видео
- **Стоимость ElevenLabs:** зависит от тарифа (символы)
- **Время обработки:** ~80 секунд на 8 секунд видео (VEED Fabric 1.0)
- **Разрешение:** 512×512 (квадрат, как требует Telegram)
---
## Интеграция в OpenClaw
**Через Стрим (координатор):**
- Стрим вызывает скрипт через `exec`: `send_video_note.sh "текст"`
- Или передаёт задачу Dev-агенту через `sessions_spawn`
**Через Dev-агента:**
- Dev может вызывать скрипт из любого проекта
- Передаёт текст и получает отправленный кружочек
**Стоимость за вызов:**
- ElevenLabs TTS: ~$0.010.03 за 10 секунд голоса
- VEED Fabric 1.0: ~$0.07 за 10 секунд видео
- **Итого: ~$0.10 за один кружочек**
````
## Notes
<!-- openclaw:human:start -->
<!-- openclaw:human:end -->
## Related
<!-- openclaw:wiki:related:start -->
### Referenced By
- [Видеокружочки](entities/project-video-notes.md)
<!-- openclaw:wiki:related:end -->

6
syntheses/index.md Normal file
View File

@@ -0,0 +1,6 @@
# Syntheses
## Generated
<!-- openclaw:wiki:syntheses:index:start -->
- No syntheses yet.
<!-- openclaw:wiki:syntheses:index:end -->