Initial wiki push - 2026-04-10
This commit is contained in:
430
.openclaw-wiki/cache/agent-digest.json
vendored
Normal file
430
.openclaw-wiki/cache/agent-digest.json
vendored
Normal 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
1
.openclaw-wiki/cache/claims.jsonl
vendored
Normal file
@@ -0,0 +1 @@
|
||||
|
||||
84
.openclaw-wiki/log.jsonl
Normal file
84
.openclaw-wiki/log.jsonl
Normal 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"]}}
|
||||
4
.openclaw-wiki/source-sync.json
Normal file
4
.openclaw-wiki/source-sync.json
Normal file
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"version": 1,
|
||||
"entries": {}
|
||||
}
|
||||
5
.openclaw-wiki/state.json
Normal file
5
.openclaw-wiki/state.json
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"version": 1,
|
||||
"createdAt": "2026-04-09T22:02:40.331Z",
|
||||
"renderMode": "native"
|
||||
}
|
||||
7
AGENTS.md
Normal file
7
AGENTS.md
Normal 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
16
WIKI.md
Normal 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
10
concepts/index.md
Normal 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
36
concepts/skill-diagram.md
Normal 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 -->
|
||||
42
concepts/skill-ontology.md
Normal file
42
concepts/skill-ontology.md
Normal 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
34
concepts/skill-search.md
Normal 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 -->
|
||||
32
concepts/skill-telegram-collector.md
Normal file
32
concepts/skill-telegram-collector.md
Normal 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 -->
|
||||
36
concepts/skill-voice-tts.md
Normal file
36
concepts/skill-voice-tts.md
Normal 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
15
entities/index.md
Normal 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 -->
|
||||
32
entities/project-apps-portal.md
Normal file
32
entities/project-apps-portal.md
Normal 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 -->
|
||||
45
entities/project-flightradar24.md
Normal file
45
entities/project-flightradar24.md
Normal 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
43
entities/project-ha.md
Normal 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 -->
|
||||
42
entities/project-internet-orders.md
Normal file
42
entities/project-internet-orders.md
Normal 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 -->
|
||||
48
entities/project-proxy-vm.md
Normal file
48
entities/project-proxy-vm.md
Normal 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 -->
|
||||
48
entities/project-snowbike-rag.md
Normal file
48
entities/project-snowbike-rag.md
Normal 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
37
entities/project-tapo.md
Normal 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 -->
|
||||
42
entities/project-telegram-collector.md
Normal file
42
entities/project-telegram-collector.md
Normal 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 -->
|
||||
32
entities/project-video-notes.md
Normal file
32
entities/project-video-notes.md
Normal 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 -->
|
||||
178
entities/project-wiki-memory.md
Normal file
178
entities/project-wiki-memory.md
Normal 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
3
inbox.md
Normal file
@@ -0,0 +1,3 @@
|
||||
# Inbox
|
||||
|
||||
Drop raw ideas, questions, and source links here.
|
||||
53
index.md
Normal file
53
index.md
Normal 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
14
reports/claim-health.md
Normal 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
14
reports/contradictions.md
Normal 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
11
reports/index.md
Normal 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
13
reports/lint.md
Normal 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
14
reports/low-confidence.md
Normal 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
14
reports/open-questions.md
Normal 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
14
reports/stale-pages.md
Normal 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
106
sources/2026-04-09.md
Normal 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
272
sources/2026-04-10.md
Normal 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:05–12: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:00–15: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
132
sources/brd.md
Normal 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. Система находит 10–20 самых релевантных сообщений (по смыслу, не по точным словам)
|
||||
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
99
sources/dev-task.md
Normal 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
13
sources/index.md
Normal 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
250
sources/memory.md
Normal 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
258
sources/project.md
Normal 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
171
sources/skill.md
Normal 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
252
sources/tz.md
Normal 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.01–0.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
6
syntheses/index.md
Normal file
@@ -0,0 +1,6 @@
|
||||
# Syntheses
|
||||
|
||||
## Generated
|
||||
<!-- openclaw:wiki:syntheses:index:start -->
|
||||
- No syntheses yet.
|
||||
<!-- openclaw:wiki:syntheses:index:end -->
|
||||
Reference in New Issue
Block a user