Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ All notable changes to MeMesh are documented here.

### Fixed

- `learn` can now be told which project a lesson belongs to (#527): the MCP tool and `POST /v1/learn` take an optional `project`, and `memesh learn` takes `--project`. Without one, the MCP tool and `memesh learn` still use the project of the process's working directory, as `task_state` does; `POST /v1/learn` now requires `project` and answers 400 (storing nothing) when it is missing, instead of filing the lesson under the directory `memesh serve` was started in. An empty project, or one written as a path (`/Users/me/proj`, `C:\proj`, `a/b`, `./foo`, `../foo`, `~/foo`), is now refused with an error naming the field by `learn`, `task_state`, `briefing`, `memesh learn`, `memesh task`, `memesh briefing` and `memesh import --notes`; a bare name such as `.ssh` is still accepted, and a project you pass is stored exactly as you wrote it. The read routes `GET /v1/task-state` and `GET /v1/briefing-index` still read a project key exactly as sent, so a legacy path-shaped key already in the database stays readable; they refuse a blank or over-long one, and `learn`, `task_state` and `briefing` accept no path (messaging and `kg rename-project` project rules are unchanged). The PreCompact hook no longer uses its own working directory when the payload has no usable `cwd`, and no longer writes payloads without a usable `session_id` into one shared `pre-compact-unknown` memory: a missing, blank or non-text `cwd` or `session_id` makes it skip and record the reason. `briefing`, like `learn` and `task_state`, now looks a project up exactly as written (no trimming, no Unicode normalising), so a lesson stored under a padded or accented project name shows in that project's briefing. When the MCP server's working directory is the directory it runs from (Codex starts a plugin's MCP server in the plugin root, so the working directory is not the user's workspace; a workspace is not affected, even when it is another MeMesh checkout; a server run from the very checkout it is started in, such as `claude --plugin-dir <checkout>` or `npm link`, counts as its own directory), `learn`, `task_state` and `briefing` without a `project` are refused with a one-line error asking for the project from the SessionStart briefing, instead of filing under the plugin directory's project. Memories already stored under a path-shaped project tag are left as they are.
- A message sent through the MCP `message` tool keeps every `null` in its JSON payload. Before, the MCP boundary removed each null-valued key at any depth of the payload while `send` still reported success, so the recipient got different data than the CLI or HTTP would have stored (#517). A null-valued top-level tool parameter still means "left blank", except `payload`, whose null is a value (#553).
- The MCP `message` tool accepts `payload: null` on `send`, as its schema and the HTTP API already did; it was refused with `payload: Invalid input` (#553).

Expand Down
1 change: 1 addition & 0 deletions dist/core/agent-scope-id.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ export declare function canonicalAgentScopeId(value: string): string;
export declare function isFilesystemPathScopeId(value: string): boolean;
export declare function lastPathSegment(value: string): string | null;
export declare function agentScopeIdRejection(field: string, value: string): string | null;
export declare function projectScopeRejection(value: string): string | null;
export declare const AGENT_MESSAGE_SCOPE_COLUMNS: ReadonlyArray<{
readonly table: string;
readonly columns: readonly string[];
Expand Down
2 changes: 1 addition & 1 deletion dist/core/agent-scope-id.d.ts.map

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

14 changes: 14 additions & 0 deletions dist/core/agent-scope-id.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion dist/core/agent-scope-id.js.map

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion dist/core/operations.d.ts.map

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion dist/core/operations.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading