{"_id":"@dashhuang/conversation-archive","_rev":"4-0cf700eb464f33b64c25027a340c0a36","name":"@dashhuang/conversation-archive","dist-tags":{"latest":"0.2.0"},"versions":{"0.1.1":{"name":"@dashhuang/conversation-archive","version":"0.1.1","keywords":["openclaw","openclaw-plugin","conversation-archive","chat-history","history-retrieval"],"license":"MIT","_id":"@dashhuang/conversation-archive@0.1.1","maintainers":[{"name":"dashhuang","email":"dashhuang@gmail.com"}],"homepage":"https://github.com/dashhuang/openclaw-conversation-archive#readme","bugs":{"url":"https://github.com/dashhuang/openclaw-conversation-archive/issues"},"bin":{"openclaw-conversation-archive-health":"scripts/check_archive.py","openclaw-conversation-archive-search":"scripts/search_archive.py"},"dist":{"shasum":"e5f646ac3f693b7f0d667e28f6465bdecdd43845","tarball":"https://registry.npmjs.org/@dashhuang/conversation-archive/-/conversation-archive-0.1.1.tgz","fileCount":9,"integrity":"sha512-bEQYBtP1gYg9uXJy8NMCRq6PhTPe7FPlWCiNqlcvFelvqtewVgi00uRQttPDXc9f600ATOWA+aMl63FcjpZqDQ==","signatures":[{"sig":"MEYCIQDQAOWYiqYY55qvXnpLZxVIVID/QRWlhWWyoxCdCXqsVQIhAPbxh/SDyN2VP8sseLbesFH34qBhKVTX1Ct21WhS01LL","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":40906},"type":"module","engines":{"node":">=22"},"exports":{".":"./index.js"},"gitHead":"8b038a80c0551a81af497b40f5a1e0d56b0ff2f9","scripts":{"test":"node --test ./tests/conversation-archive.test.mjs && python3 ./tests/test_search_archive.py"},"_npmUser":{"name":"dashhuang","email":"dashhuang@gmail.com"},"openclaw":{"extensions":["./index.js"]},"repository":{"url":"git+https://github.com/dashhuang/openclaw-conversation-archive.git","type":"git"},"_npmVersion":"10.9.2","description":"Workspace-local conversation archive and retrieval plugin for OpenClaw","directories":{},"_nodeVersion":"23.11.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/conversation-archive_0.1.1_1773576796230_0.7381091441324659","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@dashhuang/conversation-archive","version":"0.1.2","keywords":["openclaw","openclaw-plugin","conversation-archive","chat-history","history-retrieval"],"license":"MIT","_id":"@dashhuang/conversation-archive@0.1.2","maintainers":[{"name":"dashhuang","email":"dashhuang@gmail.com"}],"homepage":"https://github.com/dashhuang/openclaw-conversation-archive#readme","bugs":{"url":"https://github.com/dashhuang/openclaw-conversation-archive/issues"},"bin":{"openclaw-conversation-archive-health":"scripts/check_archive.py","openclaw-conversation-archive-search":"scripts/search_archive.py"},"dist":{"shasum":"6918b932ac0bc5613912828af1b57c55e7f25136","tarball":"https://registry.npmjs.org/@dashhuang/conversation-archive/-/conversation-archive-0.1.2.tgz","fileCount":9,"integrity":"sha512-T866I9aI4q9rRf742JaIndPBdA2D1EFD4rL9CJOScgJc3l0Wqtm0sE2LWpbOg/tjlIIefKXIA45++11dz/NlVQ==","signatures":[{"sig":"MEQCIGf3fEkkL1c5tRCnEbfGde2XCqDc18TPZvYA0ivabUKuAiAZB/6h7MdtcIE/qDnn9ztglNQ38MrYfRQTuKeivRjJPA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":41659},"type":"module","engines":{"node":">=22"},"exports":{".":"./index.js"},"gitHead":"7eca0a271f0b7c858536dda3c49f22d20221e930","scripts":{"test":"node --test ./tests/conversation-archive.test.mjs && python3 ./tests/test_search_archive.py"},"_npmUser":{"name":"dashhuang","email":"dashhuang@gmail.com"},"openclaw":{"extensions":["./index.js"]},"repository":{"url":"git+https://github.com/dashhuang/openclaw-conversation-archive.git","type":"git"},"_npmVersion":"10.9.2","description":"Workspace-local conversation archive and retrieval plugin for OpenClaw","directories":{},"_nodeVersion":"23.11.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/conversation-archive_0.1.2_1773815098792_0.07497633389334579","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@dashhuang/conversation-archive","version":"0.1.3","keywords":["openclaw","openclaw-plugin","conversation-archive","chat-history","history-retrieval"],"license":"MIT","_id":"@dashhuang/conversation-archive@0.1.3","maintainers":[{"name":"dashhuang","email":"dashhuang@gmail.com"}],"homepage":"https://github.com/dashhuang/openclaw-conversation-archive#readme","bugs":{"url":"https://github.com/dashhuang/openclaw-conversation-archive/issues"},"bin":{"openclaw-conversation-archive-health":"scripts/check_archive.py","openclaw-conversation-archive-search":"scripts/search_archive.py"},"dist":{"shasum":"e230f85157f2bdafd8c0c9b67a45e60ebde23268","tarball":"https://registry.npmjs.org/@dashhuang/conversation-archive/-/conversation-archive-0.1.3.tgz","fileCount":9,"integrity":"sha512-2asmdwblgTw3sOpqZ1gjKqnj/LjC/3ukiQe7OJ3cJJuoAvV7mbpYFLJAeijXGz7qjTfIdP+WWZgHBOQM+hLOCg==","signatures":[{"sig":"MEYCIQCXyIxckDn1XOrMUUEl3gn5S+u6QXgyZY0ExXnqwes2eAIhAKXRCVA7V1vY46Xzz36lIMBQWkTcgmpsX+5tVKsdICZr","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":58018},"type":"module","engines":{"node":">=22"},"exports":{".":"./index.js"},"gitHead":"d565be992407a346e856cd1cc38611f928452276","scripts":{"test":"node --test ./tests/conversation-archive.test.mjs && python3 ./tests/test_search_archive.py"},"_npmUser":{"name":"dashhuang","email":"dashhuang@gmail.com"},"openclaw":{"extensions":["./index.js"]},"repository":{"url":"git+https://github.com/dashhuang/openclaw-conversation-archive.git","type":"git"},"_npmVersion":"11.6.2","description":"Workspace-local conversation archive and retrieval plugin for OpenClaw","directories":{},"_nodeVersion":"24.13.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/conversation-archive_0.1.3_1774760378864_0.592993208227754","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@dashhuang/conversation-archive","version":"0.2.0","description":"Workspace-local conversation archive and retrieval plugin for OpenClaw","type":"module","license":"MIT","repository":{"type":"git","url":"git+https://github.com/dashhuang/openclaw-conversation-archive.git"},"homepage":"https://github.com/dashhuang/openclaw-conversation-archive#readme","bugs":{"url":"https://github.com/dashhuang/openclaw-conversation-archive/issues"},"keywords":["openclaw","openclaw-plugin","conversation-archive","chat-history","history-retrieval"],"exports":{".":"./index.js"},"publishConfig":{"access":"public"},"bin":{"openclaw-conversation-archive-search":"scripts/search_archive.py","openclaw-conversation-archive-health":"scripts/check_archive.py"},"openclaw":{"extensions":["./index.js"]},"scripts":{"test":"node --test ./tests/conversation-archive.test.mjs && python3 ./tests/test_search_archive.py"},"engines":{"node":">=22"},"_id":"@dashhuang/conversation-archive@0.2.0","gitHead":"47597e57107098e2382b4dbf9be61e8e39dac54f","_nodeVersion":"22.14.0","_npmVersion":"10.9.2","dist":{"integrity":"sha512-cJ5tHgCqTvE0AQYXjB6PvRwMbXovIV4puWKpXU7Gu3x7PAQRfqtMiq1oiJUuElWgSsFkjpPiAn49gS9bc+xnhg==","shasum":"2c4a55d25376592e92e56b57eb62633c55a531ae","tarball":"https://registry.npmjs.org/@dashhuang/conversation-archive/-/conversation-archive-0.2.0.tgz","fileCount":8,"unpackedSize":62195,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIA1efs9z8y9WikSuFKv9zqS8qsdiEfhxRdox8S3KeqXQAiBsaOjjjOrApnpEAqflUzzHa6PkT6+C228CkKsPt9VYUw=="}]},"_npmUser":{"name":"dashhuang","email":"dashhuang@gmail.com"},"directories":{},"maintainers":[{"name":"dashhuang","email":"dashhuang@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/conversation-archive_0.2.0_1775775768083_0.4378560226871926"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-15T12:13:16.157Z","modified":"2026-04-09T23:02:48.350Z","0.1.1":"2026-03-15T12:13:16.409Z","0.1.2":"2026-03-18T06:24:58.920Z","0.1.3":"2026-03-29T04:59:39.000Z","0.2.0":"2026-04-09T23:02:48.227Z"},"bugs":{"url":"https://github.com/dashhuang/openclaw-conversation-archive/issues"},"license":"MIT","homepage":"https://github.com/dashhuang/openclaw-conversation-archive#readme","keywords":["openclaw","openclaw-plugin","conversation-archive","chat-history","history-retrieval"],"repository":{"type":"git","url":"git+https://github.com/dashhuang/openclaw-conversation-archive.git"},"description":"Workspace-local conversation archive and retrieval plugin for OpenClaw","maintainers":[{"name":"dashhuang","email":"dashhuang@gmail.com"}],"readme":"# Conversation Archive\n\nConversation Archive is an OpenClaw plugin for canonical message archiving, pipeline event capture, and later history retrieval.\n\nIt keeps curated memory lean while preserving a searchable JSONL archive for exact recall.\n\n## What it does\n\n- archives canonical inbound and outbound messages into workspace-local JSONL files\n- writes gateway-stage hook records into a separate event log tree when internal hooks are enabled\n- enriches canonical archive entries with preprocessed inbound text and internal sent-message payloads\n- keeps image messages simple: preserve caption/text when present, otherwise store a plain media placeholder\n- keeps curated memory and live session context lean\n- supports later retrieval when users need exact wording, chronology, or speaker attribution\n- bundles a skill that tells agents when to search raw history instead of guessing\n- exposes built-in tools:\n  - `conversation_archive_search`\n  - `conversation_archive_health`\n\n## Install\n\nPublished package target:\n\n```bash\nopenclaw plugins install @dashhuang/conversation-archive@0.2.0 --pin\nopenclaw gateway restart\n```\n\nLocal checkout:\n\n```bash\nopenclaw plugins install .\n```\n\nDetailed installation notes live in `INSTALL.md`.\n\n## Modes\n\n### Standard mode\n\nDefault install path.\n\n- no OpenClaw core patches required\n- archives all messages that reach official plugin hooks\n- best for public plugin distribution\n\n### Full-fidelity mode\n\nOptional advanced path.\n\n- adds channel-specific source patches\n- also archives messages dropped before later hook stages\n- matches the current local production system more closely\n- intended for self-hosted operators who can carry a small patch layer\n\nCurrent known Standard mode blind spot:\n\n- group messages dropped by channel-level `requireMention` / mention gating before later hook stages\n\n## Upgrade Notes\n\n### 0.2.0\n\n- `logs/message-archive-raw/` now means canonical chat messages only\n- gateway / pipeline stage rows are written to `logs/message-archive-events/`\n- internal-hook installs no longer double-write the same message into the main archive tree\n- existing mixed archives can be backfilled with:\n\n```bash\npython3 extensions/conversation-archive/scripts/canonicalize_archive.py \\\n  --archive-root logs/message-archive-raw \\\n  --event-root logs/message-archive-events \\\n  --apply\n```\n\nHow to implement it:\n\n- see `FULL_FIDELITY.md`\n\n## Archive layout\n\nCanonical message files are appended under each workspace:\n\n```text\nlogs/message-archive-raw/<channel>/<chat_type>/<conversation_slug>/<YYYY-MM-DD>.jsonl\n```\n\nGateway/pipeline event traces are written separately under:\n\n```text\nlogs/message-archive-events/<channel>/<chat_type>/<conversation_slug>/<YYYY-MM-DD>.jsonl\n```\n\nThe JSONL record shape stays compatible across both trees so operators can migrate gradually and backfill older mixed archives.\n\n## Bundled pieces\n\n- `index.js`\n  - archive plugin, built-in search tool, and internal-hook enrichment\n- `skills/conversation-history/`\n  - guidance for agents to search raw history when memory is insufficient\n- `scripts/search_archive.py`\n  - JSONL search utility for operator workflows and compatibility\n- `scripts/check_archive.py`\n  - archive health check\n- `scripts/canonicalize_archive.py`\n  - moves lower-priority duplicate rows out of the canonical archive tree and into the event log tree\n- `INSTALL.md`\n  - standard-mode and full-fidelity install guidance\n\n## Status\n\nThis repository is the standalone public package source.\n","readmeFilename":"README.md"}