mirror of
https://github.com/rohitg00/agentmemory.git
synced 2026-09-14 20:16:33 +08:00
fix/engine-spawn-absolute-paths
4 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
9c82d2aa7d |
chore(release): v0.9.29 with project-scope parity across capture surfaces (#1141)
* chore(release): v0.9.29 with project-scope parity across surfaces Version trio + plugin manifests + supportedVersions + ExportData union bumped to 0.9.29; CHANGELOG entry covering everything since v0.9.28 with upgrade notes for the four visible behavior changes. Fixes the endpoint-count drift on main (130 registered routes vs docs saying 129 after #1132 landed in parallel with #1136). Project-scope parity: OpenCode plugin, Hermes plugin, Pi extension, and JSONL replay now resolve project the same way the hooks do (env override, git toplevel basename, cwd basename) instead of sending raw filesystem paths, closing #903 and #1135 and pre-empting the same bug in pi. The filesystem watcher accepts AGENTMEMORY_PROJECT_NAME with the old AGENTMEMORY_PROJECT kept as a deprecated alias, replay handles Windows-recorded paths, and OpenCode file enrichment matches the agent's lowercase tool names (the capitalized set never matched). Tests: opencode fallback expectations updated to basenames per the canonicalization, git-toplevel resolution covered with a fixture repo, new project-scope-parity suite for replay and fs-watcher. * fix(release): review findings, git-toplevel parity, doc counts - skills generator dedupes routes on method plus path, so the REST reference lists all 130 registered routes instead of hiding the second method on ten dual-method paths (header said 119) - fs-watcher trims AGENTMEMORY_PROJECT_NAME and the deprecated alias, treating whitespace as unset, and derives the git toplevel basename when watching a subdirectory - replay resolves the git toplevel basename when the recorded cwd still exists locally (memoized per cwd), keeping the basename fallback for historical or cross-platform paths; no env override here since a bulk import spans many projects - parity tests for replay git-root resolution, watcher git-root and trim behavior - stat-tests badge updated from 1428+ to 1550+ passing * fix(cli): refuse second-instance boot over a live daemon Closes the class behind issue 1140: agentmemory consolidate (or any unrecognized word) fell through the command table into the full server boot, registering a duplicate worker on the running engine; on iii 0.11.2 the second instance's shutdown tears down the daemon's HTTP trigger routing until a full engine restart. Unknown subcommands now error with the supported list, and main() probes livez on the resolved port and refuses to boot over a live daemon, so multi-instance setups on other ports are unaffected. Verified behaviorally against the built CLI: both paths refuse with exit 1. Also from review: the watcher stamps each event with its own root's project via a per-root map (an explicit config.project still overrides for every root), and replay only accepts a non-empty string cwd from parsed JSONL so malformed entries cannot reach the filesystem probe. * test(watcher): two-repository flush events scope to their own project * chore(release): bump packages/mcp, guard it, refresh CONTRIBUTING packages/mcp was still 0.9.28 after the release bump because nothing guarded it; a consistency test now pins it to package.json. CONTRIBUTING release list corrected to the files a bump actually touches (no tracked lockfile, the two extra plugin manifests, the export test derives from VERSION now), and the subsystems table gains src/cli, integrations/pi, and the generated-manifest note. * fix(export): refuse over-frame export instead of dropping the worker Closes the availability bug in issue 1142: GET /agentmemory/export assembles the full store and returns it through sdk.trigger, so a store whose serialized export passes the engine's 16 MiB WebSocket frame (tungstenite max_frame_size, not raisable under the 0.11.2 pin) dies on the worker->engine hop, drops the worker, and 404s every endpoint for ~1s. The session collections page on maxSessions/offset but ~18 others do not, so a large store hits this at any parameter combination. A shared frame-guard measures the serialized size before returning: mem::export returns a small oversized error instead of the giant object, and api::mesh-export returns 413 (same dead-end as #890). Either way the over-frame payload never crosses the boundary, so the daemon stays up and the failure is one clean request with a hint to narrow the range. Full pagination of the non-session collections is a follow-up. Layer 1 of the fix; verified with a synthetic oversized export returning the error object (tiny) rather than the payload. * ci: collapse to a single npm install to fix Node 24/26 CI The two-step install (npm install --package-lock-only then npm ci) failed only on the Node 24/26 matrix rows: their stricter npm rejects rolldown's optional platform bindings (@rolldown/binding-android-arm64) that a --package-lock-only pass does not fully enumerate. Lockfiles are gitignored, so npm ci re-validation buys no reproducibility here. A single lenient npm install resolves and installs in one pass. * fix(mesh): scope exported memories by project like actions api::mesh-export filtered actions by ?project but returned every project's memories. On a mesh instance federating one project to a peer, the peer pulled other projects' memories (cross-project leak), and those extras could push the payload past the 16 MiB transport frame into a 413 even when the requested project's own slice fit. Memories carry the same optional project field as actions, so filter both before the frame-size guard runs. Adds a regression test asserting a project-scoped export excludes other projects' memories and that an oversized memory in another project no longer 413s the scoped request. * chore(release): credit the Antigravity native hooks adapter in 0.9.29 notes * chore(release): sweep stale 0.9.28 refs for 0.9.29 Deploy Dockerfiles/compose/render pins, AGENTS.md stats header, opencode plugin manifest, website meta snapshot, test-count claims (1,428 -> 1,596) in README/AGENTS/stat SVGs, and the missing 0.9.29 CHANGELOG compare link. * chore(release): sync stat-tests badge to 1596+ and commit bridge exec bit * refactor: trim frame-guard comments and drop issue refs from code |
||
|
|
9be3d2743a |
feat(opencode): allow AGENTMEMORY_PROJECT_NAME to override project name (#1125)
* feat(opencode): allow AGENTMEMORY_PROJECT_NAME to override project name The OpenCode capture plugin resolved the project as ctx.worktree || ctx.project?.id || process.cwd() (a full path) with no way to override it. It now consults AGENTMEMORY_PROJECT_NAME first — the same env var the Claude hooks use in resolveProject() — falling back to the existing resolution when unset. This lets users pin a stable project name and aligns the two plugin ecosystems so OpenCode and Claude sessions can share memory when the env var is set to the same value. Signed-off-by: Abdullah Alaqeel <abdullah.t.aqeel@gmail.com> * test(opencode): replace source-text assertions with runtime project-name tests Execute the plugin end-to-end, fire a session.created event, and assert the /session/start payload's project field. Covers whitespace trimming of AGENTMEMORY_PROJECT_NAME and the documented fallback chain (ctx.worktree -> ctx.project.id -> process.cwd). Signed-off-by: Abdullah Alaqeel <abdullah.t.aqeel@gmail.com> --------- Signed-off-by: Abdullah Alaqeel <abdullah.t.aqeel@gmail.com> |
||
|
|
fd197dfda4 |
chore(release): v0.9.22 (#659)
Bump version across package.json + plugin manifests + version.ts + types.ts ExportFormat union + export-import allow-list. Strip issue-number stamps (// #NNN:) from new-wave source + test files. CHANGELOG.md v0.9.22 entry bundles every PR merged since v0.9.21 across Fixed / Added / Docs / Infrastructure. 1171/1171 vitest pass. |
||
|
|
f027c20309 |
fix(multi): stability pass for #627 #640 #474 #638 #431 #544 #563 (#648)
* fix(multi): stability pass for #627 #640 #474 #638 #431 #544 #563 Six issues, one PR. Each lands with a targeted regression test; 1119/1119 vitest pass. #627 OpenAI thinking-model fallback src/providers/openai.ts now reads message.reasoning_content alongside message.reasoning. DeepSeek V4 / Qwen3 / GLM / Kimi return the underscored field — previously compress silently failed (0/700 calls) and the circuit breaker tripped. #640 + #474 stop reaps the worker process src/index.ts writes ~/.agentmemory/worker.pid on registerWorker, clears it on graceful shutdown. src/cli.ts runStop now reads the worker pidfile and signals SIGTERM alongside the engine pids. Fixes both: the daemon wrapper surviving stop (#640) and the iii engine retaining stale function registrations because the worker reconnected to the new engine (#474). #638 OpenCode session implicit-create on observe src/functions/observe.ts now creates the session record on the first observation when project + cwd are present and no session exists. OpenCode plugins (and any caller that skips POST /session/start) no longer leak observations into a session memory_sessions never lists, and summarize stops bailing with 'Session not found'. #431 OpenCode auto-context (zero-config injection) plugin/opencode/agentmemory-capture.ts captures the context returned by POST /session/start into a per-session cache. The existing experimental.chat.system.transform hook now reads from the cache first, falls back to /context. Cleanup on session.deleted. #544 paginated /memories + /export src/triggers/api.ts adds three query modes to /memories: ?count=true — totals only, viewer status badge ?limit=N&offset=M — paged slice, default unlimited /export now forwards maxSessions + offset query params to mem::export (which already supported them). Viewer dashboard caps the memories fetch at 500; the memories tab at 2000. Both stop the iii invocation timeout from masking real corpora as 0 memories. #563 viewer graph cool-down on >1000 nodes src/viewer/index.html adds tick-decayed damping (coolBoost), per-node velocity caps tiered by node count, and quiescence-based raf parking. Mousedown wakes the parked loop. Dense graphs settle instead of bouncing forever; CPU returns to idle once the layout is quiet. #637 Windows em-dash ByteString — deferred to follow-up Cannot reproduce on macOS / Linux. The user-suggested defensive encoding fix is unsafe without a Windows repro confirming the actual exception path. Will land separately once a Windows runner or the reporter can validate. * fix(multi): address review findings on PR #648 Addresses inline review on PR #648 — verified each finding against current code and fixed the still-valid ones. opencode plugin: snapshot activeSessionId into a local 'sessionId' before await postJson('/session/start') — a second session.created event during the await could rebind activeSessionId and cache the context against the wrong key. The cache write + observe call now use the snapshotted id. src/cli.ts: clearWorkerPidfile() now runs in every stop branch: - Docker engine-not-running early return - Docker stopDockerEngine path - native engine-not-running 'Nothing to stop' - native happy path (was already there) The worker pid is now read up front so the engine-down branch can also reap an orphaned worker process (previously fell through to 'preserve for manual cleanup'). A new dedicated branch reaps the worker and exits cleanly when only the worker is lingering. src/viewer/index.html: wakeGraphSim() shared helper consolidates the quietTicks reset + raf restart pattern. Wheel handler, zoomGraph(), recenterGraph(), and mousedown all now wake the parked simulation so zoom/pan/click feedback is immediate after the layout has settled. graphSim object initializes quietTicks: 0 alongside tickCount: 0. src/functions/observe.ts: dedupe new Date().toISOString() into a single 'ts' local for the implicit-create path so startedAt and updatedAt stay consistent. test/opencode-auto-context.test.ts: regex updated to assert the snapshot-then-cache pattern instead of the previous direct activeSessionId reference. 1119/1119 vitest pass. |