@agentmemory/agentmemory 0.9.29 → 0.9.31
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.env.example +102 -35
- package/AGENTS.md +19 -26
- package/README.md +417 -525
- package/dist/.env.example +102 -35
- package/dist/cli.d.mts.map +1 -1
- package/dist/cli.mjs +2316 -655
- package/dist/cli.mjs.map +1 -1
- package/dist/compression-recovery-CnhLQC6N.mjs +5912 -0
- package/dist/compression-recovery-CnhLQC6N.mjs.map +1 -0
- package/dist/{connect-Qaeq15TQ.mjs → connect-BSLIAMpw.mjs} +900 -302
- package/dist/connect-BSLIAMpw.mjs.map +1 -0
- package/dist/hooks/_capture.d.mts +25 -0
- package/dist/hooks/_capture.d.mts.map +1 -0
- package/dist/hooks/_capture.mjs +944 -0
- package/dist/hooks/_capture.mjs.map +1 -0
- package/dist/hooks/antigravity-bridge.d.mts +1 -1
- package/dist/hooks/antigravity-bridge.d.mts.map +1 -1
- package/dist/hooks/antigravity-bridge.mjs +24 -15
- package/dist/hooks/antigravity-bridge.mjs.map +1 -1
- package/dist/hooks/notification.mjs +35 -29
- package/dist/hooks/notification.mjs.map +1 -1
- package/dist/hooks/post-commit.mjs +91 -1
- package/dist/hooks/post-commit.mjs.map +1 -1
- package/dist/hooks/post-tool-failure.mjs +71 -29
- package/dist/hooks/post-tool-failure.mjs.map +1 -1
- package/dist/hooks/post-tool-use.mjs +99 -39
- package/dist/hooks/post-tool-use.mjs.map +1 -1
- package/dist/hooks/pre-compact.mjs +113 -6
- package/dist/hooks/pre-compact.mjs.map +1 -1
- package/dist/hooks/pre-tool-use.mjs +91 -1
- package/dist/hooks/pre-tool-use.mjs.map +1 -1
- package/dist/hooks/prompt-submit.mjs +25 -25
- package/dist/hooks/prompt-submit.mjs.map +1 -1
- package/dist/hooks/session-end.mjs +67 -31
- package/dist/hooks/session-end.mjs.map +1 -1
- package/dist/hooks/session-start.mjs +110 -6
- package/dist/hooks/session-start.mjs.map +1 -1
- package/dist/hooks/stop.mjs +80 -8
- package/dist/hooks/stop.mjs.map +1 -1
- package/dist/hooks/subagent-start.mjs +28 -29
- package/dist/hooks/subagent-start.mjs.map +1 -1
- package/dist/hooks/subagent-stop.mjs +33 -29
- package/dist/hooks/subagent-stop.mjs.map +1 -1
- package/dist/hooks/task-completed.mjs +31 -31
- package/dist/hooks/task-completed.mjs.map +1 -1
- package/dist/{image-refs-BKLmp_sD.mjs → image-refs-BaT-9oMU.mjs} +2 -2
- package/dist/image-refs-BaT-9oMU.mjs.map +1 -0
- package/dist/{image-refs-CJgZmb9X.mjs → image-refs-Cyta4Lf9.mjs} +3 -3
- package/dist/image-refs-Cyta4Lf9.mjs.map +1 -0
- package/dist/{keyed-mutex-DTHtcZrt.mjs → image-store-BsN4vyjr.mjs} +2 -14
- package/dist/image-store-BsN4vyjr.mjs.map +1 -0
- package/dist/index.mjs +15180 -4119
- package/dist/index.mjs.map +1 -1
- package/dist/integrations/dsh.d.mts +55 -0
- package/dist/integrations/dsh.d.mts.map +1 -0
- package/dist/integrations/dsh.mjs +1145 -0
- package/dist/integrations/dsh.mjs.map +1 -0
- package/dist/{schema-BFZhNTF7.mjs → keyed-mutex-DCUh7PG-.mjs} +81 -8
- package/dist/keyed-mutex-DCUh7PG-.mjs.map +1 -0
- package/dist/secret-store-D9GwO0xp.mjs +2449 -0
- package/dist/secret-store-D9GwO0xp.mjs.map +1 -0
- package/dist/session-arguments-zxsbbd8y.mjs +113 -0
- package/dist/session-arguments-zxsbbd8y.mjs.map +1 -0
- package/dist/{src-G7yt8gGm.mjs → src-DaMtDzt_.mjs} +8320 -4260
- package/dist/src-DaMtDzt_.mjs.map +1 -0
- package/dist/{standalone-BqNJDJ04.mjs → standalone-BlqshyZ5.mjs} +246 -62
- package/dist/standalone-BlqshyZ5.mjs.map +1 -0
- package/dist/standalone.d.mts +1 -1
- package/dist/standalone.d.mts.map +1 -1
- package/dist/standalone.mjs +866 -78
- package/dist/standalone.mjs.map +1 -1
- package/dist/viewer/index.html +7394 -2816
- package/integrations/hermes/README.md +84 -0
- package/integrations/hermes/__init__.py +669 -0
- package/integrations/hermes/plugin.yaml +27 -0
- package/integrations/omp/LICENSE +190 -0
- package/integrations/omp/README.md +76 -0
- package/integrations/omp/capture.ts +1 -0
- package/integrations/omp/dist/index.mjs +1450 -0
- package/integrations/omp/index.ts +488 -0
- package/integrations/omp/package.json +13 -0
- package/integrations/omp/security.ts +67 -0
- package/integrations/omp/skills/agentmemory-agents/REFERENCE.md +32 -0
- package/integrations/omp/skills/agentmemory-agents/SKILL.md +48 -0
- package/integrations/omp/skills/agentmemory-agents/TROUBLESHOOTING.md +70 -0
- package/integrations/omp/skills/agentmemory-architecture/SKILL.md +33 -0
- package/integrations/omp/skills/agentmemory-architecture/TROUBLESHOOTING.md +70 -0
- package/integrations/omp/skills/agentmemory-config/REFERENCE.md +90 -0
- package/integrations/omp/skills/agentmemory-config/SKILL.md +78 -0
- package/integrations/omp/skills/agentmemory-config/TROUBLESHOOTING.md +70 -0
- package/integrations/omp/skills/agentmemory-hooks/REFERENCE.md +20 -0
- package/integrations/omp/skills/agentmemory-hooks/SKILL.md +49 -0
- package/integrations/omp/skills/agentmemory-hooks/TROUBLESHOOTING.md +70 -0
- package/integrations/omp/skills/agentmemory-mcp-tools/REFERENCE.md +66 -0
- package/integrations/omp/skills/agentmemory-mcp-tools/SKILL.md +42 -0
- package/integrations/omp/skills/agentmemory-mcp-tools/TROUBLESHOOTING.md +70 -0
- package/integrations/omp/skills/agentmemory-rest-api/REFERENCE.md +158 -0
- package/integrations/omp/skills/agentmemory-rest-api/SKILL.md +49 -0
- package/integrations/omp/skills/agentmemory-rest-api/TROUBLESHOOTING.md +70 -0
- package/integrations/omp/skills/commit-context/EXAMPLES.md +71 -0
- package/integrations/omp/skills/commit-context/SKILL.md +64 -0
- package/integrations/omp/skills/commit-context/TROUBLESHOOTING.md +70 -0
- package/integrations/omp/skills/commit-history/EXAMPLES.md +71 -0
- package/integrations/omp/skills/commit-history/SKILL.md +62 -0
- package/integrations/omp/skills/commit-history/TROUBLESHOOTING.md +70 -0
- package/integrations/omp/skills/forget/EXAMPLES.md +40 -0
- package/integrations/omp/skills/forget/SKILL.md +73 -0
- package/integrations/omp/skills/forget/TROUBLESHOOTING.md +70 -0
- package/integrations/omp/skills/handoff/EXAMPLES.md +57 -0
- package/integrations/omp/skills/handoff/SKILL.md +75 -0
- package/integrations/omp/skills/handoff/TROUBLESHOOTING.md +70 -0
- package/integrations/omp/skills/lesson/SKILL.md +64 -0
- package/integrations/omp/skills/lesson/TROUBLESHOOTING.md +70 -0
- package/integrations/omp/skills/memory-discipline/SKILL.md +65 -0
- package/integrations/omp/skills/memory-discipline/TROUBLESHOOTING.md +70 -0
- package/integrations/omp/skills/recall/EXAMPLES.md +74 -0
- package/integrations/omp/skills/recall/SKILL.md +74 -0
- package/integrations/omp/skills/recall/TROUBLESHOOTING.md +70 -0
- package/integrations/omp/skills/recap/EXAMPLES.md +62 -0
- package/integrations/omp/skills/recap/SKILL.md +68 -0
- package/integrations/omp/skills/recap/TROUBLESHOOTING.md +70 -0
- package/integrations/omp/skills/remember/EXAMPLES.md +67 -0
- package/integrations/omp/skills/remember/SKILL.md +66 -0
- package/integrations/omp/skills/remember/TROUBLESHOOTING.md +70 -0
- package/integrations/omp/skills/session-history/EXAMPLES.md +59 -0
- package/integrations/omp/skills/session-history/SKILL.md +67 -0
- package/integrations/omp/skills/session-history/TROUBLESHOOTING.md +70 -0
- package/integrations/omp/skills/write-agentmemory-skill/SKILL.md +41 -0
- package/integrations/omp/skills/write-agentmemory-skill/TROUBLESHOOTING.md +70 -0
- package/integrations/openclaw/LICENSE +190 -0
- package/integrations/openclaw/README.md +88 -0
- package/integrations/openclaw/openclaw.plugin.json +71 -0
- package/integrations/openclaw/package.json +38 -0
- package/integrations/openclaw/plugin.mjs +425 -0
- package/integrations/openclaw/plugin.yaml +26 -0
- package/integrations/openclaw/skills/agentmemory-agents/REFERENCE.md +32 -0
- package/integrations/openclaw/skills/agentmemory-agents/SKILL.md +48 -0
- package/integrations/openclaw/skills/agentmemory-agents/TROUBLESHOOTING.md +70 -0
- package/integrations/openclaw/skills/agentmemory-architecture/SKILL.md +33 -0
- package/integrations/openclaw/skills/agentmemory-architecture/TROUBLESHOOTING.md +70 -0
- package/integrations/openclaw/skills/agentmemory-config/REFERENCE.md +90 -0
- package/integrations/openclaw/skills/agentmemory-config/SKILL.md +78 -0
- package/integrations/openclaw/skills/agentmemory-config/TROUBLESHOOTING.md +70 -0
- package/integrations/openclaw/skills/agentmemory-hooks/REFERENCE.md +20 -0
- package/integrations/openclaw/skills/agentmemory-hooks/SKILL.md +49 -0
- package/integrations/openclaw/skills/agentmemory-hooks/TROUBLESHOOTING.md +70 -0
- package/integrations/openclaw/skills/agentmemory-mcp-tools/REFERENCE.md +66 -0
- package/integrations/openclaw/skills/agentmemory-mcp-tools/SKILL.md +42 -0
- package/integrations/openclaw/skills/agentmemory-mcp-tools/TROUBLESHOOTING.md +70 -0
- package/integrations/openclaw/skills/agentmemory-rest-api/REFERENCE.md +158 -0
- package/integrations/openclaw/skills/agentmemory-rest-api/SKILL.md +49 -0
- package/integrations/openclaw/skills/agentmemory-rest-api/TROUBLESHOOTING.md +70 -0
- package/integrations/openclaw/skills/commit-context/EXAMPLES.md +71 -0
- package/integrations/openclaw/skills/commit-context/SKILL.md +64 -0
- package/integrations/openclaw/skills/commit-context/TROUBLESHOOTING.md +70 -0
- package/integrations/openclaw/skills/commit-history/EXAMPLES.md +71 -0
- package/integrations/openclaw/skills/commit-history/SKILL.md +62 -0
- package/integrations/openclaw/skills/commit-history/TROUBLESHOOTING.md +70 -0
- package/integrations/openclaw/skills/forget/EXAMPLES.md +40 -0
- package/integrations/openclaw/skills/forget/SKILL.md +73 -0
- package/integrations/openclaw/skills/forget/TROUBLESHOOTING.md +70 -0
- package/integrations/openclaw/skills/handoff/EXAMPLES.md +57 -0
- package/integrations/openclaw/skills/handoff/SKILL.md +75 -0
- package/integrations/openclaw/skills/handoff/TROUBLESHOOTING.md +70 -0
- package/integrations/openclaw/skills/lesson/SKILL.md +64 -0
- package/integrations/openclaw/skills/lesson/TROUBLESHOOTING.md +70 -0
- package/integrations/openclaw/skills/memory-discipline/SKILL.md +65 -0
- package/integrations/openclaw/skills/memory-discipline/TROUBLESHOOTING.md +70 -0
- package/integrations/openclaw/skills/recall/EXAMPLES.md +74 -0
- package/integrations/openclaw/skills/recall/SKILL.md +74 -0
- package/integrations/openclaw/skills/recall/TROUBLESHOOTING.md +70 -0
- package/integrations/openclaw/skills/recap/EXAMPLES.md +62 -0
- package/integrations/openclaw/skills/recap/SKILL.md +68 -0
- package/integrations/openclaw/skills/recap/TROUBLESHOOTING.md +70 -0
- package/integrations/openclaw/skills/remember/EXAMPLES.md +67 -0
- package/integrations/openclaw/skills/remember/SKILL.md +66 -0
- package/integrations/openclaw/skills/remember/TROUBLESHOOTING.md +70 -0
- package/integrations/openclaw/skills/session-history/EXAMPLES.md +59 -0
- package/integrations/openclaw/skills/session-history/SKILL.md +67 -0
- package/integrations/openclaw/skills/session-history/TROUBLESHOOTING.md +70 -0
- package/integrations/openclaw/skills/write-agentmemory-skill/SKILL.md +41 -0
- package/integrations/openclaw/skills/write-agentmemory-skill/TROUBLESHOOTING.md +70 -0
- package/integrations/pi/LICENSE +190 -0
- package/integrations/pi/README.md +45 -51
- package/integrations/pi/dist/index.mjs +1379 -0
- package/integrations/pi/index.ts +139 -173
- package/integrations/pi/package.json +16 -6
- package/integrations/pi/security.ts +54 -22
- package/integrations/pi/skills/agentmemory-agents/REFERENCE.md +32 -0
- package/integrations/pi/skills/agentmemory-agents/SKILL.md +48 -0
- package/integrations/pi/skills/agentmemory-agents/TROUBLESHOOTING.md +70 -0
- package/integrations/pi/skills/agentmemory-architecture/SKILL.md +33 -0
- package/integrations/pi/skills/agentmemory-architecture/TROUBLESHOOTING.md +70 -0
- package/integrations/pi/skills/agentmemory-config/REFERENCE.md +90 -0
- package/integrations/pi/skills/agentmemory-config/SKILL.md +78 -0
- package/integrations/pi/skills/agentmemory-config/TROUBLESHOOTING.md +70 -0
- package/integrations/pi/skills/agentmemory-hooks/REFERENCE.md +20 -0
- package/integrations/pi/skills/agentmemory-hooks/SKILL.md +49 -0
- package/integrations/pi/skills/agentmemory-hooks/TROUBLESHOOTING.md +70 -0
- package/integrations/pi/skills/agentmemory-mcp-tools/REFERENCE.md +66 -0
- package/integrations/pi/skills/agentmemory-mcp-tools/SKILL.md +42 -0
- package/integrations/pi/skills/agentmemory-mcp-tools/TROUBLESHOOTING.md +70 -0
- package/integrations/pi/skills/agentmemory-rest-api/REFERENCE.md +158 -0
- package/integrations/pi/skills/agentmemory-rest-api/SKILL.md +49 -0
- package/integrations/pi/skills/agentmemory-rest-api/TROUBLESHOOTING.md +70 -0
- package/integrations/pi/skills/commit-context/EXAMPLES.md +71 -0
- package/integrations/pi/skills/commit-context/SKILL.md +64 -0
- package/integrations/pi/skills/commit-context/TROUBLESHOOTING.md +70 -0
- package/integrations/pi/skills/commit-history/EXAMPLES.md +71 -0
- package/integrations/pi/skills/commit-history/SKILL.md +62 -0
- package/integrations/pi/skills/commit-history/TROUBLESHOOTING.md +70 -0
- package/integrations/pi/skills/forget/EXAMPLES.md +40 -0
- package/integrations/pi/skills/forget/SKILL.md +73 -0
- package/integrations/pi/skills/forget/TROUBLESHOOTING.md +70 -0
- package/integrations/pi/skills/handoff/EXAMPLES.md +57 -0
- package/integrations/pi/skills/handoff/SKILL.md +75 -0
- package/integrations/pi/skills/handoff/TROUBLESHOOTING.md +70 -0
- package/integrations/pi/skills/lesson/SKILL.md +64 -0
- package/integrations/pi/skills/lesson/TROUBLESHOOTING.md +70 -0
- package/integrations/pi/skills/memory-discipline/SKILL.md +65 -0
- package/integrations/pi/skills/memory-discipline/TROUBLESHOOTING.md +70 -0
- package/integrations/pi/skills/recall/EXAMPLES.md +74 -0
- package/integrations/pi/skills/recall/SKILL.md +74 -0
- package/integrations/pi/skills/recall/TROUBLESHOOTING.md +70 -0
- package/integrations/pi/skills/recap/EXAMPLES.md +62 -0
- package/integrations/pi/skills/recap/SKILL.md +68 -0
- package/integrations/pi/skills/recap/TROUBLESHOOTING.md +70 -0
- package/integrations/pi/skills/remember/EXAMPLES.md +67 -0
- package/integrations/pi/skills/remember/SKILL.md +66 -0
- package/integrations/pi/skills/remember/TROUBLESHOOTING.md +70 -0
- package/integrations/pi/skills/session-history/EXAMPLES.md +59 -0
- package/integrations/pi/skills/session-history/SKILL.md +67 -0
- package/integrations/pi/skills/session-history/TROUBLESHOOTING.md +70 -0
- package/integrations/pi/skills/write-agentmemory-skill/SKILL.md +41 -0
- package/integrations/pi/skills/write-agentmemory-skill/TROUBLESHOOTING.md +70 -0
- package/package.json +42 -12
- package/plugin/.claude-plugin/plugin.json +2 -2
- package/plugin/.codex-plugin/plugin.json +27 -4
- package/plugin/.devin-plugin/plugin.json +5 -3
- package/plugin/.mcp.codex.json +12 -0
- package/plugin/.mcp.copilot.json +2 -7
- package/plugin/.mcp.json +2 -7
- package/plugin/assets/icon.svg +35 -0
- package/plugin/cursor/hooks.json +23 -8
- package/plugin/hooks/hooks.copilot.json +11 -11
- package/plugin/hooks.json +67 -0
- package/plugin/opencode/README.md +267 -31
- package/plugin/opencode/agentmemory-capture.ts +594 -11
- package/plugin/opencode/plugin.json +1 -1
- package/plugin/plugin.json +1 -1
- package/plugin/scripts/_capture.d.mts +25 -0
- package/plugin/scripts/_capture.d.mts.map +1 -0
- package/plugin/scripts/_capture.mjs +944 -0
- package/plugin/scripts/_capture.mjs.map +1 -0
- package/plugin/scripts/antigravity-bridge.d.mts +1 -1
- package/plugin/scripts/antigravity-bridge.d.mts.map +1 -1
- package/plugin/scripts/antigravity-bridge.mjs +24 -15
- package/plugin/scripts/antigravity-bridge.mjs.map +1 -1
- package/plugin/scripts/cursor/run-detached.d.mts +1 -0
- package/plugin/scripts/cursor/run-detached.mjs +786 -0
- package/plugin/scripts/cursor/run-detached.mjs.map +1 -0
- package/plugin/scripts/cursor/run-hook.d.mts +1 -0
- package/plugin/scripts/cursor/run-hook.mjs +704 -0
- package/plugin/scripts/cursor/run-hook.mjs.map +1 -0
- package/plugin/scripts/notification.mjs +35 -29
- package/plugin/scripts/notification.mjs.map +1 -1
- package/plugin/scripts/plugin-bridge.mjs +409 -0
- package/plugin/scripts/post-commit.mjs +91 -1
- package/plugin/scripts/post-commit.mjs.map +1 -1
- package/plugin/scripts/post-tool-failure.mjs +71 -29
- package/plugin/scripts/post-tool-failure.mjs.map +1 -1
- package/plugin/scripts/post-tool-use.mjs +99 -39
- package/plugin/scripts/post-tool-use.mjs.map +1 -1
- package/plugin/scripts/pre-compact.mjs +113 -6
- package/plugin/scripts/pre-compact.mjs.map +1 -1
- package/plugin/scripts/pre-tool-use.mjs +91 -1
- package/plugin/scripts/pre-tool-use.mjs.map +1 -1
- package/plugin/scripts/prompt-submit.mjs +25 -25
- package/plugin/scripts/prompt-submit.mjs.map +1 -1
- package/plugin/scripts/session-end.mjs +67 -31
- package/plugin/scripts/session-end.mjs.map +1 -1
- package/plugin/scripts/session-start.mjs +110 -6
- package/plugin/scripts/session-start.mjs.map +1 -1
- package/plugin/scripts/stop.mjs +80 -8
- package/plugin/scripts/stop.mjs.map +1 -1
- package/plugin/scripts/subagent-start.mjs +28 -29
- package/plugin/scripts/subagent-start.mjs.map +1 -1
- package/plugin/scripts/subagent-stop.mjs +33 -29
- package/plugin/scripts/subagent-stop.mjs.map +1 -1
- package/plugin/scripts/task-completed.mjs +31 -31
- package/plugin/scripts/task-completed.mjs.map +1 -1
- package/plugin/skills/_shared/TROUBLESHOOTING.md +42 -12
- package/plugin/skills/agentmemory-agents/REFERENCE.md +10 -9
- package/plugin/skills/agentmemory-agents/SKILL.md +19 -5
- package/plugin/skills/agentmemory-agents/TROUBLESHOOTING.md +70 -0
- package/plugin/skills/agentmemory-architecture/SKILL.md +4 -4
- package/plugin/skills/agentmemory-architecture/TROUBLESHOOTING.md +70 -0
- package/plugin/skills/agentmemory-config/REFERENCE.md +48 -3
- package/plugin/skills/agentmemory-config/SKILL.md +51 -10
- package/plugin/skills/agentmemory-config/TROUBLESHOOTING.md +70 -0
- package/plugin/skills/agentmemory-hooks/SKILL.md +15 -5
- package/plugin/skills/agentmemory-hooks/TROUBLESHOOTING.md +70 -0
- package/plugin/skills/agentmemory-mcp-tools/REFERENCE.md +5 -5
- package/plugin/skills/agentmemory-mcp-tools/SKILL.md +6 -3
- package/plugin/skills/agentmemory-mcp-tools/TROUBLESHOOTING.md +70 -0
- package/plugin/skills/agentmemory-rest-api/REFERENCE.md +18 -2
- package/plugin/skills/agentmemory-rest-api/SKILL.md +12 -6
- package/plugin/skills/agentmemory-rest-api/TROUBLESHOOTING.md +70 -0
- package/plugin/skills/commit-context/SKILL.md +1 -1
- package/plugin/skills/commit-context/TROUBLESHOOTING.md +70 -0
- package/plugin/skills/commit-history/SKILL.md +1 -1
- package/plugin/skills/commit-history/TROUBLESHOOTING.md +70 -0
- package/plugin/skills/forget/EXAMPLES.md +19 -54
- package/plugin/skills/forget/SKILL.md +16 -12
- package/plugin/skills/forget/TROUBLESHOOTING.md +70 -0
- package/plugin/skills/handoff/EXAMPLES.md +5 -4
- package/plugin/skills/handoff/SKILL.md +13 -6
- package/plugin/skills/handoff/TROUBLESHOOTING.md +70 -0
- package/plugin/skills/lesson/SKILL.md +1 -1
- package/plugin/skills/lesson/TROUBLESHOOTING.md +70 -0
- package/plugin/skills/memory-discipline/SKILL.md +14 -6
- package/plugin/skills/memory-discipline/TROUBLESHOOTING.md +70 -0
- package/plugin/skills/recall/SKILL.md +18 -7
- package/plugin/skills/recall/TROUBLESHOOTING.md +70 -0
- package/plugin/skills/recap/EXAMPLES.md +5 -3
- package/plugin/skills/recap/SKILL.md +11 -6
- package/plugin/skills/recap/TROUBLESHOOTING.md +70 -0
- package/plugin/skills/remember/EXAMPLES.md +3 -3
- package/plugin/skills/remember/SKILL.md +1 -1
- package/plugin/skills/remember/TROUBLESHOOTING.md +70 -0
- package/plugin/skills/session-history/EXAMPLES.md +2 -2
- package/plugin/skills/session-history/SKILL.md +10 -4
- package/plugin/skills/session-history/TROUBLESHOOTING.md +70 -0
- package/plugin/skills/write-agentmemory-skill/SKILL.md +2 -1
- package/plugin/skills/write-agentmemory-skill/TROUBLESHOOTING.md +70 -0
- package/dist/connect-Qaeq15TQ.mjs.map +0 -1
- package/dist/docker-compose.yml +0 -47
- package/dist/iii-config.docker.yaml +0 -53
- package/dist/iii-config.yaml +0 -61
- package/dist/image-refs-BKLmp_sD.mjs.map +0 -1
- package/dist/image-refs-CJgZmb9X.mjs.map +0 -1
- package/dist/keyed-mutex-DTHtcZrt.mjs.map +0 -1
- package/dist/logger-BEB7pCI9.mjs +0 -43
- package/dist/logger-BEB7pCI9.mjs.map +0 -1
- package/dist/schema-BFZhNTF7.mjs.map +0 -1
- package/dist/src-G7yt8gGm.mjs.map +0 -1
- package/dist/standalone-BqNJDJ04.mjs.map +0 -1
- package/dist/tools-registry-BV_2bu7z.mjs +0 -1405
- package/dist/tools-registry-BV_2bu7z.mjs.map +0 -1
- package/docker-compose.yml +0 -47
- package/iii-config.docker.yaml +0 -53
- package/iii-config.yaml +0 -61
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { s as generateId } from "./keyed-mutex-DCUh7PG-.mjs";
|
|
2
|
+
import { R as getAgentId, Y as getStandalonePersistPath, c as memoryToObservation, i as resolveClientSecret, m as queryAudit, o as buildRecallResponse, tt as isAgentScopeIsolated, u as isSearchLayer, w as VERSION, x as getAllTools } from "./secret-store-D9GwO0xp.mjs";
|
|
3
|
+
import { a as pageAfterCursor, c as sortByKeyDesc, n as parseSearchExpansionIds, t as parseSessionArguments } from "./session-arguments-zxsbbd8y.mjs";
|
|
3
4
|
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
4
5
|
import { dirname } from "node:path";
|
|
5
6
|
//#region src/mcp/in-memory-kv.ts
|
|
@@ -32,20 +33,30 @@ var InMemoryKV = class {
|
|
|
32
33
|
return entries ? Array.from(entries.values()) : [];
|
|
33
34
|
}
|
|
34
35
|
persist() {
|
|
35
|
-
if (!this.persistPath) return;
|
|
36
|
+
if (!this.persistPath) return false;
|
|
36
37
|
try {
|
|
37
38
|
const dir = dirname(this.persistPath);
|
|
38
39
|
if (!existsSync(dir)) mkdirSync(dir, { recursive: true });
|
|
39
40
|
const data = {};
|
|
40
41
|
for (const [scope, entries] of this.store) data[scope] = Object.fromEntries(entries);
|
|
41
42
|
writeFileSync(this.persistPath, JSON.stringify(data), "utf-8");
|
|
43
|
+
return true;
|
|
42
44
|
} catch (err) {
|
|
43
45
|
process.stderr.write(`[@agentmemory/mcp] Persist failed: ${err instanceof Error ? err.message : String(err)}\n`);
|
|
46
|
+
return false;
|
|
44
47
|
}
|
|
45
48
|
}
|
|
46
49
|
};
|
|
47
50
|
//#endregion
|
|
48
51
|
//#region src/mcp/transport.ts
|
|
52
|
+
let activeStdioTransports = 0;
|
|
53
|
+
var JsonRpcError = class extends Error {
|
|
54
|
+
constructor(code, message) {
|
|
55
|
+
super(message);
|
|
56
|
+
this.code = code;
|
|
57
|
+
this.name = "JsonRpcError";
|
|
58
|
+
}
|
|
59
|
+
};
|
|
49
60
|
function isNotification(req) {
|
|
50
61
|
return req.id === void 0 || req.id === null;
|
|
51
62
|
}
|
|
@@ -111,7 +122,7 @@ async function processLine(line, handler, writeOut, writeErr = (msg) => process.
|
|
|
111
122
|
jsonrpc: "2.0",
|
|
112
123
|
id: request.id,
|
|
113
124
|
error: {
|
|
114
|
-
code: -32603,
|
|
125
|
+
code: err instanceof JsonRpcError ? err.code : -32603,
|
|
115
126
|
message: err instanceof Error ? err.message : String(err)
|
|
116
127
|
}
|
|
117
128
|
});
|
|
@@ -191,6 +202,7 @@ function createMessageParser(onMessage, writeErr = (msg) => process.stderr.write
|
|
|
191
202
|
function createStdioTransport(handler) {
|
|
192
203
|
let parser = null;
|
|
193
204
|
let queue = Promise.resolve();
|
|
205
|
+
let active = false;
|
|
194
206
|
const writeResponse = (response) => {
|
|
195
207
|
const formatted = formatResponse(response, parser?.isFramed() ?? false);
|
|
196
208
|
if (typeof formatted === "string") {
|
|
@@ -202,6 +214,10 @@ function createStdioTransport(handler) {
|
|
|
202
214
|
const onData = (chunk) => parser?.push(chunk);
|
|
203
215
|
return {
|
|
204
216
|
start() {
|
|
217
|
+
if (active) return;
|
|
218
|
+
active = true;
|
|
219
|
+
activeStdioTransports += 1;
|
|
220
|
+
process.env["AGENTMEMORY_MCP_STDIO__"] = "1";
|
|
205
221
|
parser = createMessageParser((message) => {
|
|
206
222
|
queue = queue.then(() => processLine(message, handler, writeResponse));
|
|
207
223
|
queue.catch((err) => {
|
|
@@ -212,6 +228,11 @@ function createStdioTransport(handler) {
|
|
|
212
228
|
},
|
|
213
229
|
stop() {
|
|
214
230
|
process.stdin.off("data", onData);
|
|
231
|
+
if (active) {
|
|
232
|
+
active = false;
|
|
233
|
+
activeStdioTransports -= 1;
|
|
234
|
+
if (activeStdioTransports === 0) delete process.env["AGENTMEMORY_MCP_STDIO__"];
|
|
235
|
+
}
|
|
215
236
|
parser = null;
|
|
216
237
|
}
|
|
217
238
|
};
|
|
@@ -228,11 +249,22 @@ function probeTimeoutMs() {
|
|
|
228
249
|
const n = Number(raw);
|
|
229
250
|
return Number.isFinite(n) && n > 0 ? Math.floor(n) : DEFAULT_HEALTH_PROBE_TIMEOUT_MS;
|
|
230
251
|
}
|
|
231
|
-
function
|
|
252
|
+
function isProxyRequired() {
|
|
232
253
|
const raw = process.env["AGENTMEMORY_FORCE_PROXY"];
|
|
233
254
|
return raw === "1" || raw === "true";
|
|
234
255
|
}
|
|
256
|
+
var ProxyCallError = class extends Error {
|
|
257
|
+
status;
|
|
258
|
+
body;
|
|
259
|
+
constructor(message, status, body) {
|
|
260
|
+
super(message);
|
|
261
|
+
this.name = "ProxyCallError";
|
|
262
|
+
this.status = status;
|
|
263
|
+
this.body = body;
|
|
264
|
+
}
|
|
265
|
+
};
|
|
235
266
|
let cached = null;
|
|
267
|
+
let cachedUrl = null;
|
|
236
268
|
let cachedAt = 0;
|
|
237
269
|
let probeInFlight = null;
|
|
238
270
|
function resolveEnvOrEmpty(name) {
|
|
@@ -242,17 +274,25 @@ function resolveEnvOrEmpty(name) {
|
|
|
242
274
|
return raw;
|
|
243
275
|
}
|
|
244
276
|
function baseUrl() {
|
|
245
|
-
|
|
277
|
+
const value = resolveEnvOrEmpty("AGENTMEMORY_URL") || DEFAULT_URL;
|
|
278
|
+
try {
|
|
279
|
+
const parsed = new URL(value);
|
|
280
|
+
if (!["http:", "https:"].includes(parsed.protocol) || !parsed.hostname || parsed.username || parsed.password || /[?#\s]/.test(value)) throw new Error();
|
|
281
|
+
return value.replace(/\/+$/, "");
|
|
282
|
+
} catch {
|
|
283
|
+
throw new Error("AGENTMEMORY_URL must be an HTTP(S) URL without credentials, query, or fragment");
|
|
284
|
+
}
|
|
246
285
|
}
|
|
247
|
-
function authHeader() {
|
|
248
|
-
const secret =
|
|
286
|
+
function authHeader(url) {
|
|
287
|
+
const secret = resolveClientSecret(url);
|
|
249
288
|
return secret ? { authorization: `Bearer ${secret}` } : {};
|
|
250
289
|
}
|
|
251
290
|
const defaultLivezProbe = async (url, timeoutMs, headers) => {
|
|
252
291
|
const res = await fetch(`${url}/agentmemory/livez`, {
|
|
253
292
|
method: "GET",
|
|
254
293
|
headers,
|
|
255
|
-
signal: AbortSignal.timeout(timeoutMs)
|
|
294
|
+
signal: AbortSignal.timeout(timeoutMs),
|
|
295
|
+
redirect: "error"
|
|
256
296
|
});
|
|
257
297
|
return {
|
|
258
298
|
ok: res.ok,
|
|
@@ -264,7 +304,7 @@ let livezProbe = defaultLivezProbe;
|
|
|
264
304
|
async function probe(url) {
|
|
265
305
|
const timeout = probeTimeoutMs();
|
|
266
306
|
try {
|
|
267
|
-
const res = await livezProbe(url, timeout, authHeader());
|
|
307
|
+
const res = await livezProbe(url, timeout, authHeader(url));
|
|
268
308
|
if (!res.ok) process.stderr.write(`[@agentmemory/mcp] livez probe ${url}/agentmemory/livez -> ${res.status ?? "?"} ${res.statusText ?? ""}; falling back to local InMemoryKV (set AGENTMEMORY_FORCE_PROXY=1 to skip the probe)\n`);
|
|
269
309
|
return res.ok;
|
|
270
310
|
} catch (err) {
|
|
@@ -274,52 +314,73 @@ async function probe(url) {
|
|
|
274
314
|
}
|
|
275
315
|
function invalidateHandle() {
|
|
276
316
|
cached = null;
|
|
317
|
+
cachedUrl = null;
|
|
277
318
|
cachedAt = 0;
|
|
278
319
|
}
|
|
279
320
|
async function resolveHandle() {
|
|
280
321
|
const now = Date.now();
|
|
322
|
+
const url = baseUrl();
|
|
323
|
+
if (cached && (cachedUrl !== url || cached.mode === "local" && isProxyRequired())) invalidateHandle();
|
|
281
324
|
if (cached) if (cached.mode === "local" && now - cachedAt >= LOCAL_MODE_TTL_MS) {
|
|
282
325
|
cached = null;
|
|
283
326
|
cachedAt = 0;
|
|
284
327
|
} else return cached;
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
const
|
|
288
|
-
probeInFlight = (async () => {
|
|
328
|
+
const skipProbe = isProxyRequired();
|
|
329
|
+
if (probeInFlight?.url === url && probeInFlight.forceProxy === skipProbe) return probeInFlight.promise;
|
|
330
|
+
const pending = (async () => {
|
|
289
331
|
const up = skipProbe ? true : await probe(url);
|
|
332
|
+
if (baseUrl() !== url || isProxyRequired() !== skipProbe) return resolveHandle();
|
|
290
333
|
if (skipProbe) process.stderr.write(`[@agentmemory/mcp] AGENTMEMORY_FORCE_PROXY set; skipping livez probe and trusting ${url}\n`);
|
|
291
334
|
if (up) {
|
|
292
335
|
const handle = {
|
|
293
336
|
mode: "proxy",
|
|
294
337
|
baseUrl: url,
|
|
295
338
|
call: async (path, init) => {
|
|
339
|
+
if (baseUrl() !== url) throw new Error("AgentMemory endpoint changed; resolve a new proxy handle before retrying.");
|
|
296
340
|
const res = await fetch(`${url}${path}`, {
|
|
297
341
|
...init,
|
|
298
342
|
headers: {
|
|
299
343
|
"content-type": "application/json",
|
|
300
|
-
...authHeader(),
|
|
344
|
+
...authHeader(url),
|
|
301
345
|
...init?.headers
|
|
302
346
|
},
|
|
303
|
-
signal: AbortSignal.timeout(CALL_TIMEOUT_MS)
|
|
347
|
+
signal: AbortSignal.timeout(CALL_TIMEOUT_MS),
|
|
348
|
+
redirect: "error"
|
|
304
349
|
});
|
|
305
|
-
if (!res.ok)
|
|
350
|
+
if (!res.ok) {
|
|
351
|
+
const errText = await res.text().catch(() => "");
|
|
352
|
+
let errBody = void 0;
|
|
353
|
+
if (errText) try {
|
|
354
|
+
errBody = JSON.parse(errText);
|
|
355
|
+
} catch {
|
|
356
|
+
errBody = void 0;
|
|
357
|
+
}
|
|
358
|
+
throw new ProxyCallError(`${init?.method || "GET"} ${path} -> ${res.status} ${res.statusText}`, res.status, errBody);
|
|
359
|
+
}
|
|
306
360
|
const text = await res.text();
|
|
307
361
|
return text ? JSON.parse(text) : null;
|
|
308
362
|
}
|
|
309
363
|
};
|
|
310
364
|
cached = handle;
|
|
365
|
+
cachedUrl = url;
|
|
311
366
|
cachedAt = Date.now();
|
|
312
367
|
return handle;
|
|
313
368
|
}
|
|
314
369
|
const local = { mode: "local" };
|
|
315
370
|
cached = local;
|
|
371
|
+
cachedUrl = url;
|
|
316
372
|
cachedAt = Date.now();
|
|
317
373
|
return local;
|
|
318
374
|
})();
|
|
375
|
+
probeInFlight = {
|
|
376
|
+
url,
|
|
377
|
+
forceProxy: skipProbe,
|
|
378
|
+
promise: pending
|
|
379
|
+
};
|
|
319
380
|
try {
|
|
320
|
-
return await
|
|
381
|
+
return await pending;
|
|
321
382
|
} finally {
|
|
322
|
-
probeInFlight = null;
|
|
383
|
+
if (probeInFlight?.promise === pending) probeInFlight = null;
|
|
323
384
|
}
|
|
324
385
|
}
|
|
325
386
|
//#endregion
|
|
@@ -379,6 +440,9 @@ function textResponse(payload, pretty = false) {
|
|
|
379
440
|
text: JSON.stringify(payload, null, pretty ? 2 : 0)
|
|
380
441
|
}] };
|
|
381
442
|
}
|
|
443
|
+
function isAuthenticationError(error) {
|
|
444
|
+
return error instanceof ProxyCallError && (error.status === 401 || error.status === 403);
|
|
445
|
+
}
|
|
382
446
|
function validate(toolName, args) {
|
|
383
447
|
if (!IMPLEMENTED_TOOLS.has(toolName)) throw new Error(`Unknown tool: ${toolName}`);
|
|
384
448
|
const v = { tool: toolName };
|
|
@@ -396,22 +460,41 @@ function validate(toolName, args) {
|
|
|
396
460
|
}
|
|
397
461
|
case "memory_recall":
|
|
398
462
|
case "memory_smart_search": {
|
|
463
|
+
if (args.targetLayer !== void 0 && !isSearchLayer(args.targetLayer)) throw new Error("targetLayer must be one of: all, memory, observation");
|
|
464
|
+
v.targetLayer = args.targetLayer ?? "all";
|
|
465
|
+
for (const field of [
|
|
466
|
+
"project",
|
|
467
|
+
"cwd",
|
|
468
|
+
"agentId",
|
|
469
|
+
"sessionId",
|
|
470
|
+
"source"
|
|
471
|
+
]) {
|
|
472
|
+
if (args[field] !== void 0 && typeof args[field] !== "string") throw new Error(`${field} must be a string`);
|
|
473
|
+
if (typeof args[field] === "string" && args[field].trim()) v[field] = args[field].trim();
|
|
474
|
+
}
|
|
475
|
+
if (toolName === "memory_smart_search") {
|
|
476
|
+
v.expandIds = parseSearchExpansionIds(args.expandIds);
|
|
477
|
+
if (typeof args.includeLessons === "boolean") v.includeLessons = args.includeLessons;
|
|
478
|
+
}
|
|
399
479
|
const query = args["query"];
|
|
400
|
-
if (typeof query !== "string" || !query.trim())
|
|
401
|
-
|
|
480
|
+
if (typeof query !== "string" || !query.trim()) {
|
|
481
|
+
if (!v.expandIds?.length) throw new Error("query is required unless expandIds is provided");
|
|
482
|
+
} else v.query = query.trim();
|
|
402
483
|
v.limit = parseLimit(args["limit"]);
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
484
|
+
if (toolName === "memory_recall") {
|
|
485
|
+
const format = typeof args.format === "string" ? args.format.trim().toLowerCase() : args.format ?? "full";
|
|
486
|
+
if (format !== "full" && format !== "compact" && format !== "narrative") throw new Error("format must be one of: full, compact, narrative");
|
|
487
|
+
v.format = format;
|
|
488
|
+
if (args.token_budget !== void 0) {
|
|
489
|
+
const budget = typeof args.token_budget === "string" ? Number(args.token_budget) : args.token_budget;
|
|
490
|
+
if (typeof budget !== "number" || !Number.isInteger(budget) || budget < 1) throw new Error("token_budget must be a positive integer");
|
|
491
|
+
v.tokenBudget = budget;
|
|
492
|
+
}
|
|
410
493
|
}
|
|
411
494
|
return v;
|
|
412
495
|
}
|
|
413
496
|
case "memory_sessions":
|
|
414
|
-
v.
|
|
497
|
+
v.sessionQuery = parseSessionArguments(args);
|
|
415
498
|
return v;
|
|
416
499
|
case "memory_governance_delete": {
|
|
417
500
|
const ids = normalizeList(args["memoryIds"]);
|
|
@@ -420,7 +503,22 @@ function validate(toolName, args) {
|
|
|
420
503
|
v.reason = args["reason"] || "plugin skill request";
|
|
421
504
|
return v;
|
|
422
505
|
}
|
|
423
|
-
case "memory_export":
|
|
506
|
+
case "memory_export": {
|
|
507
|
+
const query = new URLSearchParams();
|
|
508
|
+
for (const key of [
|
|
509
|
+
"maxSessions",
|
|
510
|
+
"offset",
|
|
511
|
+
"collectionLimit",
|
|
512
|
+
"collectionOffset"
|
|
513
|
+
]) {
|
|
514
|
+
const n = Number(args[key]);
|
|
515
|
+
const min = key === "maxSessions" || key === "collectionLimit" ? 1 : 0;
|
|
516
|
+
if (args[key] !== void 0 && Number.isInteger(n) && n >= min) query.set(key, String(n));
|
|
517
|
+
}
|
|
518
|
+
if (typeof args["collections"] === "string") query.set("collections", args["collections"]);
|
|
519
|
+
v.exportQuery = query.toString();
|
|
520
|
+
return v;
|
|
521
|
+
}
|
|
424
522
|
case "memory_audit":
|
|
425
523
|
v.limit = parseLimit(args["limit"], 50);
|
|
426
524
|
return v;
|
|
@@ -444,7 +542,11 @@ async function handleProxy(v, handle) {
|
|
|
444
542
|
const body = {
|
|
445
543
|
query: v.query,
|
|
446
544
|
limit: v.limit,
|
|
447
|
-
format: v.format ?? "full"
|
|
545
|
+
format: v.format ?? "full",
|
|
546
|
+
targetLayer: v.targetLayer,
|
|
547
|
+
project: v.project,
|
|
548
|
+
cwd: v.cwd,
|
|
549
|
+
agentId: v.agentId
|
|
448
550
|
};
|
|
449
551
|
if (v.tokenBudget != null) body["token_budget"] = v.tokenBudget;
|
|
450
552
|
return textResponse(await handle.call("/agentmemory/search", {
|
|
@@ -455,16 +557,21 @@ async function handleProxy(v, handle) {
|
|
|
455
557
|
case "memory_smart_search": {
|
|
456
558
|
const body = {
|
|
457
559
|
query: v.query,
|
|
458
|
-
limit: v.limit
|
|
560
|
+
limit: v.limit,
|
|
561
|
+
targetLayer: v.targetLayer,
|
|
562
|
+
project: v.project,
|
|
563
|
+
agentId: v.agentId,
|
|
564
|
+
expandIds: v.expandIds,
|
|
565
|
+
sessionId: v.sessionId,
|
|
566
|
+
source: v.source,
|
|
567
|
+
includeLessons: v.includeLessons
|
|
459
568
|
};
|
|
460
|
-
if (v.format != null) body["format"] = v.format;
|
|
461
|
-
if (v.tokenBudget != null) body["token_budget"] = v.tokenBudget;
|
|
462
569
|
return textResponse(await handle.call("/agentmemory/smart-search", {
|
|
463
570
|
method: "POST",
|
|
464
571
|
body: JSON.stringify(body)
|
|
465
572
|
}), true);
|
|
466
573
|
}
|
|
467
|
-
case "memory_sessions": return textResponse(await handle.call(`/agentmemory/sessions
|
|
574
|
+
case "memory_sessions": return textResponse(await handle.call(`/agentmemory/sessions?${new URLSearchParams(v.sessionQuery)}`, { method: "GET" }), true);
|
|
468
575
|
case "memory_governance_delete": return textResponse(await handle.call("/agentmemory/governance/memories", {
|
|
469
576
|
method: "DELETE",
|
|
470
577
|
body: JSON.stringify({
|
|
@@ -472,11 +579,23 @@ async function handleProxy(v, handle) {
|
|
|
472
579
|
reason: v.reason
|
|
473
580
|
})
|
|
474
581
|
}));
|
|
475
|
-
case "memory_export":
|
|
582
|
+
case "memory_export": try {
|
|
583
|
+
return textResponse(await handle.call(`/agentmemory/export${v.exportQuery ? `?${v.exportQuery}` : ""}`, { method: "GET" }), true);
|
|
584
|
+
} catch (err) {
|
|
585
|
+
if (err instanceof ProxyCallError && err.status === 413 && err.body != null && typeof err.body === "object" && err.body.oversized === true) return textResponse(err.body, true);
|
|
586
|
+
throw err;
|
|
587
|
+
}
|
|
476
588
|
case "memory_audit": return textResponse(await handle.call(`/agentmemory/audit?limit=${v.limit}`, { method: "GET" }), true);
|
|
477
589
|
default: throw new Error(`Unknown tool: ${v.tool}`);
|
|
478
590
|
}
|
|
479
591
|
}
|
|
592
|
+
function localFallbackNotice(persisted) {
|
|
593
|
+
const store = persisted ? "the local fallback file, which the server does not read" : "this process's in-memory fallback store, which is lost when the process exits";
|
|
594
|
+
return {
|
|
595
|
+
storage: "local",
|
|
596
|
+
warning: `agentmemory server at ${displayAgentmemoryUrl()} did not confirm this call, so it ran against ${store}.`
|
|
597
|
+
};
|
|
598
|
+
}
|
|
480
599
|
async function handleLocal(v, kvInstance) {
|
|
481
600
|
switch (v.tool) {
|
|
482
601
|
case "memory_save": {
|
|
@@ -494,34 +613,96 @@ async function handleLocal(v, kvInstance) {
|
|
|
494
613
|
strength: 7,
|
|
495
614
|
version: 1,
|
|
496
615
|
isLatest: true,
|
|
497
|
-
sessionIds: []
|
|
616
|
+
sessionIds: [],
|
|
617
|
+
...v.project !== void 0 && { project: v.project },
|
|
618
|
+
...(v.agentId ?? getAgentId()) !== void 0 && { agentId: v.agentId ?? getAgentId() }
|
|
619
|
+
});
|
|
620
|
+
return textResponse({
|
|
621
|
+
saved: id,
|
|
622
|
+
...localFallbackNotice(kvInstance.persist())
|
|
498
623
|
});
|
|
499
|
-
kvInstance.persist();
|
|
500
|
-
return textResponse({ saved: id });
|
|
501
624
|
}
|
|
502
625
|
case "memory_recall":
|
|
503
626
|
case "memory_smart_search": {
|
|
627
|
+
const isolated = isAgentScopeIsolated();
|
|
628
|
+
const agentId = v.agentId === "*" ? void 0 : v.agentId ?? (isolated ? getAgentId() : void 0);
|
|
629
|
+
if (isolated && v.agentId !== "*" && !agentId) throw new Error("AGENTMEMORY_AGENT_SCOPE=isolated requires an agentId; pass '*' to read across agents");
|
|
504
630
|
const query = (v.query || "").toLowerCase();
|
|
505
631
|
const limit = v.limit ?? DEFAULT_LIMIT;
|
|
632
|
+
const all = v.targetLayer === "observation" ? [] : await kvInstance.list("mem:memories");
|
|
633
|
+
const sessions = v.project || v.cwd ? await kvInstance.list("mem:sessions") : [];
|
|
634
|
+
const sessionsById = new Map(sessions.map((session) => [session.id, session]));
|
|
635
|
+
const scoped = all.filter((memory) => {
|
|
636
|
+
if (memory.isLatest === false || agentId && memory.agentId !== agentId) return false;
|
|
637
|
+
const linkedSessions = (memory.sessionIds ?? []).map((id) => sessionsById.get(id));
|
|
638
|
+
if (v.project && (memory.project ? memory.project !== v.project : !linkedSessions.some((session) => session?.project === v.project))) return false;
|
|
639
|
+
if (v.cwd && !linkedSessions.some((session) => session?.cwd === v.cwd)) return false;
|
|
640
|
+
return true;
|
|
641
|
+
});
|
|
642
|
+
if (v.tool === "memory_smart_search" && v.expandIds?.length) {
|
|
643
|
+
const ids = v.expandIds.map((entry) => typeof entry === "string" ? entry : entry.obsId);
|
|
644
|
+
const byId = new Map(scoped.map((memory) => [memory.id, memory]));
|
|
645
|
+
const eligible = ids.filter((id) => byId.has(id));
|
|
646
|
+
return textResponse({
|
|
647
|
+
mode: "expanded",
|
|
648
|
+
results: eligible.slice(0, 20).map((id) => {
|
|
649
|
+
const observation = memoryToObservation(byId.get(id));
|
|
650
|
+
return {
|
|
651
|
+
obsId: id,
|
|
652
|
+
sessionId: observation.sessionId,
|
|
653
|
+
observation,
|
|
654
|
+
layer: "memory"
|
|
655
|
+
};
|
|
656
|
+
}),
|
|
657
|
+
truncated: eligible.length > 20
|
|
658
|
+
}, true);
|
|
659
|
+
}
|
|
660
|
+
const results = scoped.filter((memory) => {
|
|
661
|
+
const text = [
|
|
662
|
+
memory.title,
|
|
663
|
+
memory.content,
|
|
664
|
+
...memory.files ?? [],
|
|
665
|
+
...memory.concepts ?? [],
|
|
666
|
+
...memory.sessionIds ?? [],
|
|
667
|
+
memory.id
|
|
668
|
+
].join(" ").toLowerCase();
|
|
669
|
+
return query.split(/\s+/).every((word) => text.includes(word));
|
|
670
|
+
}).slice(0, limit);
|
|
671
|
+
if (v.tool === "memory_recall") return textResponse(buildRecallResponse(results.map((memory) => {
|
|
672
|
+
const observation = memoryToObservation(memory);
|
|
673
|
+
return {
|
|
674
|
+
sessionId: observation.sessionId,
|
|
675
|
+
observation,
|
|
676
|
+
score: 1,
|
|
677
|
+
layer: "memory"
|
|
678
|
+
};
|
|
679
|
+
}), v.format ?? "full", v.tokenBudget), true);
|
|
506
680
|
return textResponse({
|
|
507
681
|
mode: "compact",
|
|
508
|
-
results:
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
Array.isArray(m["sessionIds"]) ? m["sessionIds"].join(" ") : "",
|
|
515
|
-
typeof m["id"] === "string" ? m["id"] : ""
|
|
516
|
-
].join(" ").toLowerCase();
|
|
517
|
-
return query.split(/\s+/).every((word) => text.includes(word));
|
|
518
|
-
}).slice(0, limit)
|
|
682
|
+
results: results.map((memory) => ({
|
|
683
|
+
...memory,
|
|
684
|
+
obsId: memory.id,
|
|
685
|
+
sessionId: memory.sessionIds?.[0] ?? "memory",
|
|
686
|
+
layer: "memory"
|
|
687
|
+
}))
|
|
519
688
|
}, true);
|
|
520
689
|
}
|
|
521
690
|
case "memory_sessions": {
|
|
522
|
-
const
|
|
523
|
-
const
|
|
524
|
-
|
|
691
|
+
const query = v.sessionQuery;
|
|
692
|
+
const agentId = query.agentId === "*" ? void 0 : query.agentId ?? (isAgentScopeIsolated() ? getAgentId() : void 0);
|
|
693
|
+
const sessions = (await kvInstance.list("mem:sessions")).filter((session) => session && typeof session.id === "string" && session.id.length > 0).filter((session) => !query.project || session.project === query.project).filter((session) => !agentId || session.agentId === agentId);
|
|
694
|
+
const key = (session) => session.startedAt || "";
|
|
695
|
+
const { page, nextCursor } = pageAfterCursor(sortByKeyDesc(sessions, key, (session) => session.id), key, (session) => session.id, query.cursor, Number(query.limit));
|
|
696
|
+
return textResponse({
|
|
697
|
+
sessions: await Promise.all(page.map(async (session) => {
|
|
698
|
+
const summary = await kvInstance.get("mem:summaries", session.id);
|
|
699
|
+
return summary ? {
|
|
700
|
+
...session,
|
|
701
|
+
summary
|
|
702
|
+
} : session;
|
|
703
|
+
})),
|
|
704
|
+
nextCursor
|
|
705
|
+
}, true);
|
|
525
706
|
}
|
|
526
707
|
case "memory_governance_delete": {
|
|
527
708
|
let deleted = 0;
|
|
@@ -529,11 +710,12 @@ async function handleLocal(v, kvInstance) {
|
|
|
529
710
|
await kvInstance.delete("mem:memories", id);
|
|
530
711
|
deleted++;
|
|
531
712
|
}
|
|
532
|
-
kvInstance.persist();
|
|
713
|
+
const persisted = kvInstance.persist();
|
|
533
714
|
return textResponse({
|
|
534
715
|
deleted,
|
|
535
716
|
requested: (v.memoryIds || []).length,
|
|
536
|
-
reason: v.reason
|
|
717
|
+
reason: v.reason,
|
|
718
|
+
...localFallbackNotice(persisted)
|
|
537
719
|
});
|
|
538
720
|
}
|
|
539
721
|
case "memory_export": return textResponse({
|
|
@@ -541,11 +723,7 @@ async function handleLocal(v, kvInstance) {
|
|
|
541
723
|
memories: await kvInstance.list("mem:memories"),
|
|
542
724
|
sessions: await kvInstance.list("mem:sessions")
|
|
543
725
|
}, true);
|
|
544
|
-
case "memory_audit": {
|
|
545
|
-
const entries = await kvInstance.list("mem:audit");
|
|
546
|
-
const limit = v.limit ?? 50;
|
|
547
|
-
return textResponse({ entries: entries.slice(0, limit) }, true);
|
|
548
|
-
}
|
|
726
|
+
case "memory_audit": return textResponse(await queryAudit(kvInstance, { limit: v.limit ?? 50 }), true);
|
|
549
727
|
default: throw new Error(`Unknown tool: ${v.tool}`);
|
|
550
728
|
}
|
|
551
729
|
}
|
|
@@ -577,6 +755,10 @@ async function handleToolCall(toolName, args, kvInstance = kv) {
|
|
|
577
755
|
if (handle.mode === "proxy") try {
|
|
578
756
|
return await handleProxy(validated, handle);
|
|
579
757
|
} catch (err) {
|
|
758
|
+
if (toolName === "memory_sessions" || isAuthenticationError(err) || isProxyRequired()) {
|
|
759
|
+
invalidateHandle();
|
|
760
|
+
throw err;
|
|
761
|
+
}
|
|
580
762
|
process.stderr.write(`[@agentmemory/mcp] proxy call failed for ${toolName}: ${err instanceof Error ? err.message : String(err)}; invalidating handle and falling back to local KV\n`);
|
|
581
763
|
invalidateHandle();
|
|
582
764
|
}
|
|
@@ -597,10 +779,12 @@ async function handleToolsList() {
|
|
|
597
779
|
if (debug) process.stderr.write(`[@agentmemory/mcp] tools/list: returning ${remote.tools.length} tools from server\n`);
|
|
598
780
|
return { tools: remote.tools };
|
|
599
781
|
}
|
|
782
|
+
if (isProxyRequired()) throw new Error("AgentMemory returned an invalid tool inventory");
|
|
600
783
|
process.stderr.write(`[@agentmemory/mcp] tools/list: server returned unexpected shape (no .tools array); falling back to local IMPLEMENTED_TOOLS list. Set AGENTMEMORY_DEBUG=1 to inspect response.\n`);
|
|
601
784
|
} catch (err) {
|
|
602
|
-
process.stderr.write(`[@agentmemory/mcp] tools/list proxy failed: ${err instanceof Error ? err.message : String(err)}; falling back to local list\n`);
|
|
603
785
|
invalidateHandle();
|
|
786
|
+
if (isAuthenticationError(err) || isProxyRequired()) throw err;
|
|
787
|
+
process.stderr.write(`[@agentmemory/mcp] tools/list proxy failed: ${err instanceof Error ? err.message : String(err)}; falling back to local list\n`);
|
|
604
788
|
}
|
|
605
789
|
const fallback = getAllTools().filter((t) => IMPLEMENTED_TOOLS.has(t.name));
|
|
606
790
|
if (debug) process.stderr.write(`[@agentmemory/mcp] tools/list: returning ${fallback.length} local fallback tools (${fallback.map((t) => t.name).join(",")})\n`);
|
|
@@ -652,4 +836,4 @@ process.on("SIGTERM", () => {
|
|
|
652
836
|
//#endregion
|
|
653
837
|
export {};
|
|
654
838
|
|
|
655
|
-
//# sourceMappingURL=standalone-
|
|
839
|
+
//# sourceMappingURL=standalone-BlqshyZ5.mjs.map
|