@agentmemory/agentmemory 0.9.29 → 0.9.30
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 +83 -22
- package/AGENTS.md +17 -24
- package/README.md +447 -170
- package/dist/.env.example +83 -22
- package/dist/cli.d.mts.map +1 -1
- package/dist/cli.mjs +1221 -335
- package/dist/cli.mjs.map +1 -1
- package/dist/{connect-Qaeq15TQ.mjs → connect-B4_ca6BD.mjs} +30 -39
- package/dist/connect-B4_ca6BD.mjs.map +1 -0
- package/dist/docker-compose.yml +40 -14
- package/dist/hooks/_capture.d.mts +22 -0
- package/dist/hooks/_capture.d.mts.map +1 -0
- package/dist/hooks/_capture.mjs +908 -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 +17 -25
- package/dist/hooks/notification.mjs.map +1 -1
- package/dist/hooks/post-commit.mjs +71 -1
- package/dist/hooks/post-commit.mjs.map +1 -1
- package/dist/hooks/post-tool-failure.mjs +59 -25
- package/dist/hooks/post-tool-failure.mjs.map +1 -1
- package/dist/hooks/post-tool-use.mjs +87 -35
- package/dist/hooks/post-tool-use.mjs.map +1 -1
- package/dist/hooks/pre-compact.mjs +83 -3
- package/dist/hooks/pre-compact.mjs.map +1 -1
- package/dist/hooks/pre-tool-use.mjs +71 -1
- package/dist/hooks/pre-tool-use.mjs.map +1 -1
- package/dist/hooks/prompt-submit.mjs +13 -21
- package/dist/hooks/prompt-submit.mjs.map +1 -1
- package/dist/hooks/session-end.mjs +25 -20
- package/dist/hooks/session-end.mjs.map +1 -1
- package/dist/hooks/session-start.mjs +80 -3
- package/dist/hooks/session-start.mjs.map +1 -1
- package/dist/hooks/stop.mjs +71 -1
- package/dist/hooks/stop.mjs.map +1 -1
- package/dist/hooks/subagent-start.mjs +16 -25
- package/dist/hooks/subagent-start.mjs.map +1 -1
- package/dist/hooks/subagent-stop.mjs +17 -25
- package/dist/hooks/subagent-stop.mjs.map +1 -1
- package/dist/hooks/task-completed.mjs +19 -27
- package/dist/hooks/task-completed.mjs.map +1 -1
- package/dist/iii-config.docker.yaml +10 -10
- package/dist/iii-config.yaml +3 -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-T_urbwHM.mjs} +3 -3
- package/dist/image-refs-T_urbwHM.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 +12943 -6218
- package/dist/index.mjs.map +1 -1
- package/dist/{schema-BFZhNTF7.mjs → keyed-mutex-DchXsyfP.mjs} +28 -4
- package/dist/keyed-mutex-DchXsyfP.mjs.map +1 -0
- package/dist/secret-store-BnY3A50C.mjs +2348 -0
- package/dist/secret-store-BnY3A50C.mjs.map +1 -0
- package/dist/{src-G7yt8gGm.mjs → src-Jsq9LCeH.mjs} +5941 -2180
- package/dist/src-Jsq9LCeH.mjs.map +1 -0
- package/dist/{standalone-BqNJDJ04.mjs → standalone-DKCdrf1d.mjs} +39 -12
- package/dist/standalone-DKCdrf1d.mjs.map +1 -0
- package/dist/standalone.d.mts.map +1 -1
- package/dist/standalone.mjs +249 -14
- package/dist/standalone.mjs.map +1 -1
- package/dist/status-IRz7ta8-.mjs +2344 -0
- package/dist/status-IRz7ta8-.mjs.map +1 -0
- package/dist/viewer/index.html +7224 -2794
- package/docker-compose.yml +40 -14
- package/iii-config.docker.yaml +10 -10
- package/iii-config.yaml +3 -1
- package/integrations/pi/index.ts +2 -3
- package/integrations/pi/security.ts +52 -0
- package/package.json +13 -4
- package/plugin/.claude-plugin/plugin.json +2 -2
- package/plugin/.codex-plugin/plugin.json +26 -4
- package/plugin/.devin-plugin/plugin.json +1 -1
- 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/hooks/hooks.copilot.json +11 -11
- package/plugin/opencode/README.md +266 -30
- package/plugin/opencode/agentmemory-capture.ts +572 -3
- package/plugin/opencode/plugin.json +1 -1
- package/plugin/plugin.json +1 -1
- package/plugin/scripts/_capture.d.mts +22 -0
- package/plugin/scripts/_capture.d.mts.map +1 -0
- package/plugin/scripts/_capture.mjs +908 -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/notification.mjs +17 -25
- package/plugin/scripts/notification.mjs.map +1 -1
- package/plugin/scripts/plugin-bridge.mjs +378 -0
- package/plugin/scripts/post-commit.mjs +71 -1
- package/plugin/scripts/post-commit.mjs.map +1 -1
- package/plugin/scripts/post-tool-failure.mjs +59 -25
- package/plugin/scripts/post-tool-failure.mjs.map +1 -1
- package/plugin/scripts/post-tool-use.mjs +87 -35
- package/plugin/scripts/post-tool-use.mjs.map +1 -1
- package/plugin/scripts/pre-compact.mjs +83 -3
- package/plugin/scripts/pre-compact.mjs.map +1 -1
- package/plugin/scripts/pre-tool-use.mjs +71 -1
- package/plugin/scripts/pre-tool-use.mjs.map +1 -1
- package/plugin/scripts/prompt-submit.mjs +13 -21
- package/plugin/scripts/prompt-submit.mjs.map +1 -1
- package/plugin/scripts/session-end.mjs +25 -20
- package/plugin/scripts/session-end.mjs.map +1 -1
- package/plugin/scripts/session-start.mjs +80 -3
- package/plugin/scripts/session-start.mjs.map +1 -1
- package/plugin/scripts/stop.mjs +71 -1
- package/plugin/scripts/stop.mjs.map +1 -1
- package/plugin/scripts/subagent-start.mjs +16 -25
- package/plugin/scripts/subagent-start.mjs.map +1 -1
- package/plugin/scripts/subagent-stop.mjs +17 -25
- package/plugin/scripts/subagent-stop.mjs.map +1 -1
- package/plugin/scripts/task-completed.mjs +19 -27
- package/plugin/scripts/task-completed.mjs.map +1 -1
- package/plugin/skills/_shared/TROUBLESHOOTING.md +22 -6
- package/plugin/skills/agentmemory-agents/REFERENCE.md +3 -3
- package/plugin/skills/agentmemory-config/REFERENCE.md +49 -1
- package/plugin/skills/agentmemory-config/SKILL.md +44 -7
- package/plugin/skills/agentmemory-mcp-tools/REFERENCE.md +1 -1
- package/plugin/skills/agentmemory-rest-api/REFERENCE.md +10 -2
- package/plugin/skills/handoff/SKILL.md +4 -2
- package/plugin/skills/memory-discipline/SKILL.md +13 -5
- package/dist/connect-Qaeq15TQ.mjs.map +0 -1
- 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
CHANGED
|
@@ -8,34 +8,60 @@ services:
|
|
|
8
8
|
iii-init:
|
|
9
9
|
image: busybox:1.36
|
|
10
10
|
user: "0:0"
|
|
11
|
+
environment:
|
|
12
|
+
AGENTMEMORY_DOCKER_UID: "${AGENTMEMORY_DOCKER_UID:-65532}"
|
|
13
|
+
AGENTMEMORY_DOCKER_GID: "${AGENTMEMORY_DOCKER_GID:-65532}"
|
|
14
|
+
AGENTMEMORY_DOCKER_SKIP_CHOWN: "${AGENTMEMORY_DOCKER_SKIP_CHOWN:-0}"
|
|
11
15
|
volumes:
|
|
12
16
|
- "${AGENTMEMORY_DATA_DIR:-iii-data}:/data"
|
|
13
|
-
entrypoint: ["sh", "-c", "chown -R
|
|
17
|
+
entrypoint: ["sh", "-c", "if [ \"$${AGENTMEMORY_DOCKER_SKIP_CHOWN}\" = \"1\" ]; then exit 0; fi; chown -R $${AGENTMEMORY_DOCKER_UID}:$${AGENTMEMORY_DOCKER_GID} /data && chmod 755 /data"]
|
|
14
18
|
restart: "no"
|
|
15
19
|
|
|
16
20
|
iii-engine:
|
|
17
|
-
# Pinned to
|
|
18
|
-
# worker
|
|
19
|
-
#
|
|
20
|
-
#
|
|
21
|
-
#
|
|
22
|
-
# refactored to register as a sandboxed worker.
|
|
21
|
+
# Pinned to the same release as agentmemory's iii-sdk dependency
|
|
22
|
+
# (package.json). The worker speaks this engine's wire protocol, so
|
|
23
|
+
# bump the image tag and the SDK together, never one of them alone.
|
|
24
|
+
# 0.22.x is the last line before 0.23 removes the config.yaml worker
|
|
25
|
+
# lifecycle; it keeps HTTP routes owned by the reconnecting worker.
|
|
23
26
|
#
|
|
24
27
|
# Override per-shell or via .env file:
|
|
25
|
-
# AGENTMEMORY_III_VERSION=0.
|
|
26
|
-
image: iiidev/iii:${AGENTMEMORY_III_VERSION:-0.
|
|
27
|
-
user: "65532
|
|
28
|
+
# AGENTMEMORY_III_VERSION=0.22.1 docker compose up
|
|
29
|
+
image: iiidev/iii:${AGENTMEMORY_III_VERSION:-0.22.1}
|
|
30
|
+
user: "${AGENTMEMORY_DOCKER_UID:-65532}:${AGENTMEMORY_DOCKER_GID:-65532}"
|
|
28
31
|
depends_on:
|
|
29
32
|
iii-init:
|
|
30
33
|
condition: service_completed_successfully
|
|
34
|
+
command: ["--config", "/app/config.yaml", "--no-update-check"]
|
|
35
|
+
environment:
|
|
36
|
+
III_TELEMETRY_ENABLED: "${III_TELEMETRY_ENABLED:-false}"
|
|
37
|
+
III_REST_PORT: "${III_REST_PORT:-3111}"
|
|
38
|
+
III_STREAM_PORT: "${III_STREAM_PORT:-3112}"
|
|
39
|
+
III_VIEWER_PORT: "${III_VIEWER_PORT:-3113}"
|
|
40
|
+
III_ENGINE_PORT: "${III_ENGINE_PORT:-49134}"
|
|
41
|
+
AGENTMEMORY_REDIS_URL: "${AGENTMEMORY_REDIS_URL:-}"
|
|
42
|
+
AGENTMEMORY_STATE_SAVE_INTERVAL_MS: "${AGENTMEMORY_STATE_SAVE_INTERVAL_MS:-2000}"
|
|
43
|
+
MALLOC_ARENA_MAX: "${MALLOC_ARENA_MAX:-2}"
|
|
44
|
+
ulimits:
|
|
45
|
+
nofile:
|
|
46
|
+
soft: 10240
|
|
47
|
+
hard: 10240
|
|
31
48
|
ports:
|
|
32
|
-
- "127.0.0.1
|
|
33
|
-
- "127.0.0.1
|
|
34
|
-
- "127.0.0.1
|
|
35
|
-
- "127.0.0.1
|
|
49
|
+
- "127.0.0.1:${III_ENGINE_PORT:-49134}:${III_ENGINE_PORT:-49134}"
|
|
50
|
+
- "127.0.0.1:${III_REST_PORT:-3111}:${III_REST_PORT:-3111}"
|
|
51
|
+
- "127.0.0.1:${III_STREAM_PORT:-3112}:${III_STREAM_PORT:-3112}"
|
|
52
|
+
- "127.0.0.1:${AGENTMEMORY_METRICS_PORT:-9464}:9464"
|
|
36
53
|
volumes:
|
|
37
54
|
- "${AGENTMEMORY_DATA_DIR:-iii-data}:/data"
|
|
38
55
|
- ./iii-config.docker.yaml:/app/config.yaml:ro
|
|
56
|
+
# The engine persists each builtin worker's seeded config block under
|
|
57
|
+
# config/ next to its config file (/app/config in the image) on first
|
|
58
|
+
# boot and treats that copy as the source of truth afterwards. Keeping
|
|
59
|
+
# it on a tmpfs means every container start re-seeds from config.yaml
|
|
60
|
+
# and the III_* env vars, the same behavior the native CLI path has.
|
|
61
|
+
- type: tmpfs
|
|
62
|
+
target: /app/config
|
|
63
|
+
tmpfs:
|
|
64
|
+
mode: 01777
|
|
39
65
|
restart: unless-stopped
|
|
40
66
|
logging:
|
|
41
67
|
driver: json-file
|
package/iii-config.docker.yaml
CHANGED
|
@@ -1,18 +1,23 @@
|
|
|
1
1
|
workers:
|
|
2
2
|
- name: iii-http
|
|
3
3
|
config:
|
|
4
|
-
port: 3111
|
|
4
|
+
port: ${III_REST_PORT:3111}
|
|
5
5
|
host: 0.0.0.0
|
|
6
6
|
default_timeout: 180000
|
|
7
7
|
cors:
|
|
8
|
-
allowed_origins: ["http://localhost:3111", "http://localhost:3113", "http://127.0.0.1:3111", "http://127.0.0.1:3113"]
|
|
8
|
+
allowed_origins: ["http://localhost:${III_REST_PORT:3111}", "http://localhost:${III_VIEWER_PORT:3113}", "http://127.0.0.1:${III_REST_PORT:3111}", "http://127.0.0.1:${III_VIEWER_PORT:3113}"]
|
|
9
9
|
allowed_methods: [GET, POST, PUT, DELETE, OPTIONS]
|
|
10
|
+
- name: iii-worker-manager
|
|
11
|
+
config:
|
|
12
|
+
port: ${III_ENGINE_PORT:49134}
|
|
13
|
+
host: 0.0.0.0
|
|
10
14
|
- name: iii-state
|
|
11
15
|
config:
|
|
12
16
|
adapter:
|
|
13
17
|
name: kv
|
|
14
18
|
config:
|
|
15
19
|
store_method: file_based
|
|
20
|
+
save_interval_ms: ${AGENTMEMORY_STATE_SAVE_INTERVAL_MS:2000}
|
|
16
21
|
file_path: /data/state_store.db
|
|
17
22
|
- name: iii-queue
|
|
18
23
|
config:
|
|
@@ -28,26 +33,21 @@ workers:
|
|
|
28
33
|
name: kv
|
|
29
34
|
- name: iii-stream
|
|
30
35
|
config:
|
|
31
|
-
port: 3112
|
|
36
|
+
port: ${III_STREAM_PORT:3112}
|
|
32
37
|
host: 0.0.0.0
|
|
33
38
|
adapter:
|
|
34
39
|
name: kv
|
|
35
40
|
config:
|
|
36
41
|
store_method: file_based
|
|
42
|
+
save_interval_ms: ${AGENTMEMORY_STATE_SAVE_INTERVAL_MS:2000}
|
|
37
43
|
file_path: /data/stream_store
|
|
38
44
|
- name: iii-observability
|
|
39
45
|
config:
|
|
40
46
|
enabled: true
|
|
41
47
|
service_name: agentmemory
|
|
42
48
|
exporter: memory
|
|
43
|
-
# See iii-config.yaml for the rationale on 0.1 / console-off
|
|
49
|
+
# See iii-config.yaml for the rationale on 0.1 / console-off.
|
|
44
50
|
sampling_ratio: 0.1
|
|
45
51
|
metrics_enabled: true
|
|
46
52
|
logs_enabled: true
|
|
47
53
|
logs_console_output: false
|
|
48
|
-
- name: iii-exec
|
|
49
|
-
config:
|
|
50
|
-
watch:
|
|
51
|
-
- src/**/*.ts
|
|
52
|
-
exec:
|
|
53
|
-
- node dist/index.mjs
|
package/iii-config.yaml
CHANGED
|
@@ -13,6 +13,7 @@ workers:
|
|
|
13
13
|
name: kv
|
|
14
14
|
config:
|
|
15
15
|
store_method: file_based
|
|
16
|
+
save_interval_ms: 2000
|
|
16
17
|
file_path: ./data/state_store.db
|
|
17
18
|
- name: iii-queue
|
|
18
19
|
config:
|
|
@@ -34,6 +35,7 @@ workers:
|
|
|
34
35
|
name: kv
|
|
35
36
|
config:
|
|
36
37
|
store_method: file_based
|
|
38
|
+
save_interval_ms: 2000
|
|
37
39
|
file_path: ./data/stream_store
|
|
38
40
|
- name: iii-observability
|
|
39
41
|
config:
|
|
@@ -45,7 +47,7 @@ workers:
|
|
|
45
47
|
# subscriber lagged" WARN, and that WARN re-enters the same
|
|
46
48
|
# stream the subscriber is failing to drain — a positive
|
|
47
49
|
# feedback loop that wrote 137 GB to daemon.log.new on one user
|
|
48
|
-
# in a few days
|
|
50
|
+
# in a few days.
|
|
49
51
|
sampling_ratio: 0.1
|
|
50
52
|
metrics_enabled: true
|
|
51
53
|
logs_enabled: true
|
package/integrations/pi/index.ts
CHANGED
|
@@ -3,7 +3,7 @@ import { Type } from "typebox";
|
|
|
3
3
|
import path from "node:path";
|
|
4
4
|
import crypto from "node:crypto";
|
|
5
5
|
import { execFileSync } from "node:child_process";
|
|
6
|
-
import { createPlaintextBearerAuthGuard } from "./security.js";
|
|
6
|
+
import { createPlaintextBearerAuthGuard, resolveSecret } from "./security.js";
|
|
7
7
|
|
|
8
8
|
type TextBlock = { type?: string; text?: string };
|
|
9
9
|
type AssistantMessage = { role?: string; content?: unknown };
|
|
@@ -96,7 +96,7 @@ async function callAgentMemory<T>(
|
|
|
96
96
|
const method = options?.method || "POST";
|
|
97
97
|
const url = `${baseUrl}/agentmemory/${pathname.replace(/^\/+/, "")}`;
|
|
98
98
|
const headers: Record<string, string> = {};
|
|
99
|
-
const secret = process.env.AGENTMEMORY_SECRET;
|
|
99
|
+
const secret = resolveSecret(baseUrl, process.env.AGENTMEMORY_SECRET);
|
|
100
100
|
guardPlaintextBearerAuth(baseUrl, secret);
|
|
101
101
|
if (options?.body !== undefined) headers["Content-Type"] = "application/json";
|
|
102
102
|
if (secret) headers.Authorization = `Bearer ${secret}`;
|
|
@@ -393,7 +393,6 @@ export default function agentmemoryExtension(pi: ExtensionAPI) {
|
|
|
393
393
|
// /new, /resume, /fork and reloads fire this too; only quit ends the session.
|
|
394
394
|
if (event.reason !== "quit") return;
|
|
395
395
|
if (!lastHealthOk || !sessionId) return;
|
|
396
|
-
// session/end already fans out the summary server-side (#1203).
|
|
397
396
|
await callAgentMemory("session/end", {
|
|
398
397
|
body: { sessionId },
|
|
399
398
|
timeoutMs: 5_000,
|
|
@@ -1,5 +1,57 @@
|
|
|
1
|
+
import { readFileSync } from "node:fs";
|
|
2
|
+
import { homedir } from "node:os";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
|
|
1
5
|
const LOOPBACK_HOSTS = new Set(["localhost", "127.0.0.1", "::1"]);
|
|
2
6
|
|
|
7
|
+
function usableSecret(value: unknown): string {
|
|
8
|
+
const trimmed = typeof value === "string" ? value.trim() : "";
|
|
9
|
+
if (!trimmed || (trimmed.startsWith("${") && trimmed.endsWith("}"))) return "";
|
|
10
|
+
return trimmed;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
function readAgentmemoryFile(name: string): string {
|
|
14
|
+
try {
|
|
15
|
+
return readFileSync(join(homedir(), ".agentmemory", name), "utf-8");
|
|
16
|
+
} catch {
|
|
17
|
+
return "";
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
function envFileSecret(): string {
|
|
22
|
+
let found = "";
|
|
23
|
+
for (const line of readAgentmemoryFile(".env").split("\n")) {
|
|
24
|
+
const trimmed = line.trim();
|
|
25
|
+
if (trimmed.startsWith("#")) continue;
|
|
26
|
+
const eq = trimmed.indexOf("=");
|
|
27
|
+
if (eq === -1) continue;
|
|
28
|
+
if (trimmed.slice(0, eq).replace(/^export\s+/, "").trim() !== "AGENTMEMORY_SECRET") continue;
|
|
29
|
+
let value = trimmed.slice(eq + 1).trim();
|
|
30
|
+
const quote = value[0];
|
|
31
|
+
const close = quote === '"' || quote === "'" ? value.indexOf(quote, 1) : -1;
|
|
32
|
+
if (close > 0) value = value.slice(1, close);
|
|
33
|
+
else if (value.includes(" #")) value = value.slice(0, value.indexOf(" #"));
|
|
34
|
+
found = usableSecret(value);
|
|
35
|
+
}
|
|
36
|
+
return found;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
function isLoopbackUrl(url: string): boolean {
|
|
40
|
+
try {
|
|
41
|
+
const host = new URL(url).hostname.replace(/^\[|\]$/g, "").toLowerCase();
|
|
42
|
+
return host === "localhost" || host === "::1" || /^127(?:\.\d{1,3}){3}$/.test(host);
|
|
43
|
+
} catch {
|
|
44
|
+
return false;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export function resolveSecret(url: string, explicit?: string): string {
|
|
49
|
+
const configured = usableSecret(explicit);
|
|
50
|
+
if (configured) return configured;
|
|
51
|
+
if (!isLoopbackUrl(url)) return "";
|
|
52
|
+
return envFileSecret() || usableSecret(readAgentmemoryFile("secret"));
|
|
53
|
+
}
|
|
54
|
+
|
|
3
55
|
function normalizedHostname(hostname: string): string {
|
|
4
56
|
return hostname.replace(/^\[|\]$/g, "").toLowerCase();
|
|
5
57
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agentmemory/agentmemory",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.30",
|
|
4
4
|
"description": "Persistent memory for AI coding agents, powered by iii-engine's three primitives",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.mjs",
|
|
@@ -25,9 +25,17 @@
|
|
|
25
25
|
"test:watch": "vitest --exclude test/integration.test.ts",
|
|
26
26
|
"test:integration": "vitest run test/integration.test.ts",
|
|
27
27
|
"test:all": "vitest run",
|
|
28
|
+
"release:gate": "node scripts/release-gate/run.mjs",
|
|
28
29
|
"skills:gen": "tsx scripts/skills/generate.ts",
|
|
30
|
+
"engine:hashes": "node scripts/engine-hashes.mjs",
|
|
29
31
|
"skills:check": "tsx scripts/skills/generate.ts --check && tsx scripts/skills/check.ts",
|
|
32
|
+
"docs:sync": "tsx scripts/docs-sync.ts",
|
|
33
|
+
"docs:check": "tsx scripts/docs-sync.ts --check",
|
|
34
|
+
"plugin:pack:codex": "npm run build && node scripts/plugins/package-codex.mjs",
|
|
35
|
+
"plugin:verify:published": "node scripts/plugins/verify-published.mjs",
|
|
36
|
+
"test:plugin:live": "node scripts/plugins/test-live.mjs",
|
|
30
37
|
"bench:load": "node --import tsx benchmark/load-100k.ts",
|
|
38
|
+
"bench:capture-costs": "node --import tsx benchmark/capture-costs.ts",
|
|
31
39
|
"eval:longmemeval": "tsx eval/runner/longmemeval.ts",
|
|
32
40
|
"eval:coding-life": "tsx eval/runner/coding-life.ts"
|
|
33
41
|
},
|
|
@@ -64,8 +72,9 @@
|
|
|
64
72
|
"@anthropic-ai/claude-agent-sdk": "^0.3.142",
|
|
65
73
|
"@anthropic-ai/sdk": "^0.100.1",
|
|
66
74
|
"@clack/prompts": "^1.2.0",
|
|
67
|
-
"dotenv": "^
|
|
68
|
-
"iii-
|
|
75
|
+
"dotenv": "^18.0.3",
|
|
76
|
+
"@iii-dev/helpers": "0.22.1",
|
|
77
|
+
"iii-sdk": "0.22.1",
|
|
69
78
|
"picocolors": "^1.1.1",
|
|
70
79
|
"zod": "^4.0.0"
|
|
71
80
|
},
|
|
@@ -75,7 +84,7 @@
|
|
|
75
84
|
"tiny-segmenter": "^0.2.0"
|
|
76
85
|
},
|
|
77
86
|
"devDependencies": {
|
|
78
|
-
"@types/node": "^
|
|
87
|
+
"@types/node": "^26.6.2",
|
|
79
88
|
"tsdown": "^0.21.10",
|
|
80
89
|
"tsx": "^4.19.0",
|
|
81
90
|
"typescript": "^6.0.3",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agentmemory",
|
|
3
|
-
"version": "0.9.
|
|
4
|
-
"description": "Persistent memory for AI coding agents -- captures tool usage, compresses via LLM, injects context into future sessions. 12 hooks, 54 MCP tools,
|
|
3
|
+
"version": "0.9.30",
|
|
4
|
+
"description": "Persistent memory for AI coding agents -- captures tool usage, compresses via LLM, injects context into future sessions. 12 hooks, 54 MCP tools, 17 skills, real-time viewer.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Rohit Ghumare",
|
|
7
7
|
"url": "https://github.com/rohitg00"
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agentmemory",
|
|
3
|
-
"version": "0.9.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "0.9.30",
|
|
4
|
+
"description": "Local persistent memory for coding agents. Recall decisions, resume sessions, learn from corrections, and manage memory through 54 MCP tools and 17 skills. Optional capture through 6 Codex hooks.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Rohit Ghumare",
|
|
7
7
|
"url": "https://github.com/rohitg00"
|
|
@@ -10,6 +10,28 @@
|
|
|
10
10
|
"homepage": "https://github.com/rohitg00/agentmemory",
|
|
11
11
|
"repository": "https://github.com/rohitg00/agentmemory",
|
|
12
12
|
"skills": "./skills/",
|
|
13
|
-
"mcpServers": "./.mcp.json",
|
|
14
|
-
"hooks": "./hooks/hooks.codex.json"
|
|
13
|
+
"mcpServers": "./.mcp.codex.json",
|
|
14
|
+
"hooks": "./hooks/hooks.codex.json",
|
|
15
|
+
"interface": {
|
|
16
|
+
"displayName": "Agent Memory",
|
|
17
|
+
"shortDescription": "Memory across coding sessions",
|
|
18
|
+
"longDescription": "Recall past decisions, resume work, save useful context, and learn from corrections across Codex and Claude Code using one local Agent Memory daemon. Includes search, session history, lessons, graph queries, memory maintenance, export, and deletion workflows. Requires Node.js 20+ and a running Agent Memory daemon. Basic keyword recall needs no model key. Embeddings and model-based features require configuration; external providers may receive selected data when enabled. Automatic capture requires trusted, supported hooks. Designed for local Codex sessions.",
|
|
19
|
+
"developerName": "Rohit Ghumare",
|
|
20
|
+
"websiteURL": "https://github.com/rohitg00/agentmemory",
|
|
21
|
+
"supportURL": "https://github.com/rohitg00/agentmemory/issues",
|
|
22
|
+
"category": "Developer Tools",
|
|
23
|
+
"capabilities": ["Local persistent memory", "Session handoff", "Lessons and recall", "Memory management"],
|
|
24
|
+
"defaultPrompt": [
|
|
25
|
+
"Check my local Agent Memory connection and explain which features are enabled.",
|
|
26
|
+
"Recall decisions relevant to this repository, with the evidence for each.",
|
|
27
|
+
"Resume the latest session for this repository and show the recorded next step."
|
|
28
|
+
],
|
|
29
|
+
"logo": "./assets/icon.svg",
|
|
30
|
+
"composerIcon": "./assets/icon.svg"
|
|
31
|
+
},
|
|
32
|
+
"extensions": {
|
|
33
|
+
"com.openai": {
|
|
34
|
+
"onboardingSkill": "./skills/agentmemory-config/SKILL.md"
|
|
35
|
+
}
|
|
36
|
+
}
|
|
15
37
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agentmemory",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.30",
|
|
4
4
|
"description": "Persistent memory for AI coding agents. Captures sessions, recalls with hybrid BM25 + vector + graph search, and exposes 54 memory tools over MCP. Keyless by default, runs on your machine.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Rohit Ghumare",
|
package/plugin/.mcp.copilot.json
CHANGED
|
@@ -2,13 +2,8 @@
|
|
|
2
2
|
"mcpServers": {
|
|
3
3
|
"agentmemory": {
|
|
4
4
|
"type": "local",
|
|
5
|
-
"command": "
|
|
6
|
-
"args": ["-
|
|
7
|
-
"env": {
|
|
8
|
-
"AGENTMEMORY_URL": "${AGENTMEMORY_URL:-http://localhost:3111}",
|
|
9
|
-
"AGENTMEMORY_SECRET": "${AGENTMEMORY_SECRET:-}",
|
|
10
|
-
"AGENTMEMORY_TOOLS": "${AGENTMEMORY_TOOLS:-all}"
|
|
11
|
-
},
|
|
5
|
+
"command": "node",
|
|
6
|
+
"args": ["${COPILOT_PLUGIN_ROOT}/scripts/plugin-bridge.mjs"],
|
|
12
7
|
"tools": ["*"]
|
|
13
8
|
}
|
|
14
9
|
}
|
package/plugin/.mcp.json
CHANGED
|
@@ -1,13 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"mcpServers": {
|
|
3
3
|
"agentmemory": {
|
|
4
|
-
"command": "
|
|
5
|
-
"args": ["-
|
|
6
|
-
"env": {
|
|
7
|
-
"AGENTMEMORY_URL": "${AGENTMEMORY_URL:-http://localhost:3111}",
|
|
8
|
-
"AGENTMEMORY_SECRET": "${AGENTMEMORY_SECRET:-}",
|
|
9
|
-
"AGENTMEMORY_TOOLS": "${AGENTMEMORY_TOOLS:-all}"
|
|
10
|
-
}
|
|
4
|
+
"command": "node",
|
|
5
|
+
"args": ["${CLAUDE_PLUGIN_ROOT}/scripts/plugin-bridge.mjs"]
|
|
11
6
|
}
|
|
12
7
|
}
|
|
13
8
|
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" fill="none">
|
|
2
|
+
<defs>
|
|
3
|
+
<linearGradient id="g" x1="0" y1="0" x2="1" y2="1">
|
|
4
|
+
<stop offset="0%" stop-color="#FF6B35"/>
|
|
5
|
+
<stop offset="100%" stop-color="#FF8F5E"/>
|
|
6
|
+
</linearGradient>
|
|
7
|
+
</defs>
|
|
8
|
+
|
|
9
|
+
<rect width="64" height="64" rx="14" fill="#1A1A1A"/>
|
|
10
|
+
|
|
11
|
+
<!-- 4 memory tiers -->
|
|
12
|
+
<rect x="14" y="40" width="36" height="5" rx="2.5" fill="#333" opacity="0.5"/>
|
|
13
|
+
<rect x="14" y="33" width="36" height="5" rx="2.5" fill="#444" opacity="0.6"/>
|
|
14
|
+
<rect x="14" y="26" width="36" height="5" rx="2.5" fill="#555" opacity="0.7"/>
|
|
15
|
+
<rect x="14" y="19" width="36" height="5" rx="2.5" fill="url(#g)"/>
|
|
16
|
+
|
|
17
|
+
<!-- Active nodes on hot layer -->
|
|
18
|
+
<circle cx="22" cy="21.5" r="1.8" fill="#fff"/>
|
|
19
|
+
<circle cx="32" cy="21.5" r="1.8" fill="#fff"/>
|
|
20
|
+
<circle cx="42" cy="21.5" r="1.8" fill="#fff"/>
|
|
21
|
+
|
|
22
|
+
<!-- Retrieval lines converging up -->
|
|
23
|
+
<line x1="22" y1="19" x2="32" y2="12" stroke="#FF6B35" stroke-width="1" opacity="0.7"/>
|
|
24
|
+
<line x1="32" y1="19" x2="32" y2="12" stroke="#FF6B35" stroke-width="1" opacity="0.5"/>
|
|
25
|
+
<line x1="42" y1="19" x2="32" y2="12" stroke="#FF6B35" stroke-width="1" opacity="0.7"/>
|
|
26
|
+
|
|
27
|
+
<!-- Retrieval point -->
|
|
28
|
+
<circle cx="32" cy="11" r="3" fill="url(#g)"/>
|
|
29
|
+
<circle cx="32" cy="11" r="5" fill="none" stroke="#FF6B35" stroke-width="0.8" opacity="0.3"/>
|
|
30
|
+
|
|
31
|
+
<!-- Fading dots on lower tiers -->
|
|
32
|
+
<circle cx="25" cy="28.5" r="1" fill="#888" opacity="0.4"/>
|
|
33
|
+
<circle cx="39" cy="28.5" r="1" fill="#888" opacity="0.4"/>
|
|
34
|
+
<circle cx="32" cy="35.5" r="0.8" fill="#666" opacity="0.3"/>
|
|
35
|
+
</svg>
|
|
@@ -4,68 +4,68 @@
|
|
|
4
4
|
"sessionStart": [
|
|
5
5
|
{
|
|
6
6
|
"type": "command",
|
|
7
|
-
"command": "node ${COPILOT_PLUGIN_ROOT}/scripts/session-start.mjs"
|
|
7
|
+
"command": "node \"${COPILOT_PLUGIN_ROOT}/scripts/session-start.mjs\""
|
|
8
8
|
}
|
|
9
9
|
],
|
|
10
10
|
"userPromptSubmitted": [
|
|
11
11
|
{
|
|
12
12
|
"type": "command",
|
|
13
|
-
"command": "node ${COPILOT_PLUGIN_ROOT}/scripts/prompt-submit.mjs"
|
|
13
|
+
"command": "node \"${COPILOT_PLUGIN_ROOT}/scripts/prompt-submit.mjs\""
|
|
14
14
|
}
|
|
15
15
|
],
|
|
16
16
|
"preToolUse": [
|
|
17
17
|
{
|
|
18
18
|
"type": "command",
|
|
19
19
|
"matcher": "edit|write|create|read|view|glob|grep",
|
|
20
|
-
"command": "node ${COPILOT_PLUGIN_ROOT}/scripts/pre-tool-use.mjs"
|
|
20
|
+
"command": "node \"${COPILOT_PLUGIN_ROOT}/scripts/pre-tool-use.mjs\""
|
|
21
21
|
}
|
|
22
22
|
],
|
|
23
23
|
"postToolUse": [
|
|
24
24
|
{
|
|
25
25
|
"type": "command",
|
|
26
|
-
"command": "node ${COPILOT_PLUGIN_ROOT}/scripts/post-tool-use.mjs"
|
|
26
|
+
"command": "node \"${COPILOT_PLUGIN_ROOT}/scripts/post-tool-use.mjs\""
|
|
27
27
|
}
|
|
28
28
|
],
|
|
29
29
|
"postToolUseFailure": [
|
|
30
30
|
{
|
|
31
31
|
"type": "command",
|
|
32
|
-
"command": "node ${COPILOT_PLUGIN_ROOT}/scripts/post-tool-failure.mjs"
|
|
32
|
+
"command": "node \"${COPILOT_PLUGIN_ROOT}/scripts/post-tool-failure.mjs\""
|
|
33
33
|
}
|
|
34
34
|
],
|
|
35
35
|
"preCompact": [
|
|
36
36
|
{
|
|
37
37
|
"type": "command",
|
|
38
|
-
"command": "node ${COPILOT_PLUGIN_ROOT}/scripts/pre-compact.mjs"
|
|
38
|
+
"command": "node \"${COPILOT_PLUGIN_ROOT}/scripts/pre-compact.mjs\""
|
|
39
39
|
}
|
|
40
40
|
],
|
|
41
41
|
"agentStop": [
|
|
42
42
|
{
|
|
43
43
|
"type": "command",
|
|
44
|
-
"command": "node ${COPILOT_PLUGIN_ROOT}/scripts/stop.mjs"
|
|
44
|
+
"command": "node \"${COPILOT_PLUGIN_ROOT}/scripts/stop.mjs\""
|
|
45
45
|
}
|
|
46
46
|
],
|
|
47
47
|
"sessionEnd": [
|
|
48
48
|
{
|
|
49
49
|
"type": "command",
|
|
50
|
-
"command": "node ${COPILOT_PLUGIN_ROOT}/scripts/session-end.mjs"
|
|
50
|
+
"command": "node \"${COPILOT_PLUGIN_ROOT}/scripts/session-end.mjs\""
|
|
51
51
|
}
|
|
52
52
|
],
|
|
53
53
|
"subagentStart": [
|
|
54
54
|
{
|
|
55
55
|
"type": "command",
|
|
56
|
-
"command": "node ${COPILOT_PLUGIN_ROOT}/scripts/subagent-start.mjs"
|
|
56
|
+
"command": "node \"${COPILOT_PLUGIN_ROOT}/scripts/subagent-start.mjs\""
|
|
57
57
|
}
|
|
58
58
|
],
|
|
59
59
|
"subagentStop": [
|
|
60
60
|
{
|
|
61
61
|
"type": "command",
|
|
62
|
-
"command": "node ${COPILOT_PLUGIN_ROOT}/scripts/subagent-stop.mjs"
|
|
62
|
+
"command": "node \"${COPILOT_PLUGIN_ROOT}/scripts/subagent-stop.mjs\""
|
|
63
63
|
}
|
|
64
64
|
],
|
|
65
65
|
"notification": [
|
|
66
66
|
{
|
|
67
67
|
"type": "command",
|
|
68
|
-
"command": "node ${COPILOT_PLUGIN_ROOT}/scripts/notification.mjs"
|
|
68
|
+
"command": "node \"${COPILOT_PLUGIN_ROOT}/scripts/notification.mjs\""
|
|
69
69
|
}
|
|
70
70
|
]
|
|
71
71
|
}
|