@echomem/mcp 1.4.30 → 1.4.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/dist/index.js CHANGED
@@ -1578,7 +1578,7 @@ Details: ${m.details || "N/A"}`)
1578
1578
  const receipt = sharing?.hasGroup !== true
1579
1579
  ? "Saved to your private memory."
1580
1580
  : sharing?.decision === null || sharing?.decision === undefined
1581
- ? `Saved to your private memory. Ask once: “Share memories saved from this session with ${readString(sharingGroup, "name") ?? "your current group"}?” Then call set_group_session_sharing with the confirmed answer.`
1581
+ ? `Saved to your private memory. Ask: “Share memories saved from this session with ${readString(sharingGroup, "name") ?? "your current group"}?” Silence leaves the state unset, so ask again at a later qualifying checkpoint until the user explicitly answers Yes or No; do not repeat the prompt in the same response.`
1582
1582
  : sharing.decision === "private"
1583
1583
  ? "Saved to your private memory."
1584
1584
  : sync?.synced === true
@@ -2019,7 +2019,7 @@ Details: ${m.details || "N/A"}`;
2019
2019
  return {
2020
2020
  content: [{
2021
2021
  type: "text",
2022
- text: `No sharing decision exists for this session. Ask once: “Share memories saved from this session with ${readString(group, "name") ?? "your group"}?” Then call set_group_session_sharing with the explicit Yes/No answer.`,
2022
+ text: `No sharing decision exists for this session. Ask: “Share memories saved from this session with ${readString(group, "name") ?? "your group"}?” Silence is not a No: leave the state unset and ask again at a later qualifying checkpoint until the user explicitly answers Yes or No, without repeating the prompt in the same response. Then call set_group_session_sharing with that explicit answer; an explicit No stops later prompts for this exact session.`,
2023
2023
  }],
2024
2024
  };
2025
2025
  }
@@ -2098,8 +2098,8 @@ Details: ${m.details || "N/A"}`;
2098
2098
  content: [{
2099
2099
  type: "text",
2100
2100
  text: payload?.alreadyMember
2101
- ? `You are already a member of ${payload?.group?.name ?? "this group"}. No memories were published. Use prepare_group_publication to review memories and propose any missing title or responsibility fields, then call get_group_session_sharing and ask once if this session has no decision.`
2102
- : `Joined ${payload?.group?.name ?? "the company group"}. No memories were published. Next use prepare_group_publication to review candidates, infer a proposed title and responsibility summary, and ask the user to confirm that profile together with the publication preview. Also call get_group_session_sharing; if unset, ask once whether memories saved from this session should be shared.`,
2101
+ ? `You are already a member of ${payload?.group?.name ?? "this group"}. No memories were published. Use prepare_group_publication to review memories and propose any missing title or responsibility fields, then call get_group_session_sharing and, if unset, ask again at later qualifying checkpoints until the user explicitly answers Yes or No.`
2102
+ : `Joined ${payload?.group?.name ?? "the company group"}. No memories were published. Next use prepare_group_publication to review candidates, infer a proposed title and responsibility summary, and ask the user to confirm that profile together with the publication preview. Also call get_group_session_sharing; if unset, ask whether memories saved from this session should be shared and ask again at a later qualifying checkpoint after silence until an explicit Yes or No.`,
2103
2103
  }],
2104
2104
  };
2105
2105
  }
@@ -30,7 +30,7 @@ export const MCP_SERVER_INSTRUCTIONS = [
30
30
  "Use echomem_update_status to check whether npm has a newer bridge; it is cached and non-blocking during normal tool listing.",
31
31
  "Do not auto-update on every MCP startup; this bridge is intentionally stable between explicit updates.",
32
32
  "Before the final response for work that produced a durable decision, confirmed preference, implementation, resolved bug, commit, passing verification, release, or project milestone, call save_conversation. This is a private checkpoint and does not require a separate user request. Skip secrets, incidental chatter, and trivial read-only work. If an encrypted vault is locked, tell the user to run echomem-mcp unlock rather than silently skipping the checkpoint.",
33
- "For a user with a company group, call get_group_session_sharing near session start or after the first qualifying private save. If this exact session has no decision, ask once whether memories saved from the session should be shared with the current group, then store only the explicit Yes/No answer with set_group_session_sharing. A Yes decision syncs eligible memories after each private save; a No decision keeps later saves private. Flagged memories stay private.",
33
+ "For a user with a company group, call get_group_session_sharing near session start or after a qualifying private save. If this exact session has no decision, ask whether memories saved from the session should be shared with the current group. Silence is not a No: leave the state unset and ask again at a later qualifying checkpoint until the user explicitly answers Yes or No, without repeating the prompt in the same response. Store only the explicit answer with set_group_session_sharing. A Yes decision syncs eligible memories after each private save; a No decision keeps later saves private and stops later prompts for this exact session. Flagged memories stay private.",
34
34
  "For company-group sharing, use get_group_context for orientation; create_memory_group/create_group_invite/join_memory_group for membership; and prepare_group_publication as a no-publication preview.",
35
35
  "After joining or when profile fields are missing, use candidate memory evidence to propose a title and responsibility summary. Ask the user to confirm that proposal together with the publication preview, then call update_group_profile and complete_group_publication.",
36
36
  "Use one canonical https://echoknows.com/memory/<memory-id> link for private, group, and friend evidence. Label it with the memory key; the site resolves the authorized representation.",
@@ -7,8 +7,8 @@ const CHECKPOINT_REASON = [
7
7
  "Run EchoMem's private completion checkpoint before finishing this turn.",
8
8
  "Review the work that just completed. If it produced a durable decision, confirmed preference, implementation, resolved bug, commit, passing verification, release, or project milestone, call `save_conversation` now with a concise structured summary of the outcome, reasoning, relevant files, and constraints.",
9
9
  "Do not save secrets or incidental chatter. If the work was not durable, do not call the tool and finish normally.",
10
- "Private persistence happens first. For a user with a company group, call `get_group_session_sharing` near session start or after this first qualifying private save.",
11
- "If this exact session has no decision, ask once whether memories saved from the session should be shared with the current group, then call `set_group_session_sharing` only with the explicit Yes/No answer. A Yes decision automatically syncs eligible memories after later private saves; a No decision keeps later saves private.",
10
+ "Private persistence happens first. For a user with a company group, call `get_group_session_sharing` near session start or after a qualifying private save.",
11
+ "If this exact session has no decision, ask whether memories saved from the session should be shared with the current group. Silence leaves the state unset, so ask again at a later qualifying checkpoint until the user explicitly answers Yes or No; do not repeat the prompt in the same response. Call `set_group_session_sharing` only with that explicit answer. A Yes decision automatically syncs eligible memories after later private saves; a No decision keeps later saves private and stops later prompts for this exact session.",
12
12
  "Flagged memories are withheld from automatic session sync and remain private.",
13
13
  "If EchoMem reports that the encrypted vault is locked, tell the user to run `echomem-mcp unlock`; never silently skip a qualifying checkpoint.",
14
14
  ].join(" ");
package/dist/setup.js CHANGED
@@ -391,7 +391,7 @@ function echomemGuidanceBlock() {
391
391
  "- Before re-deriving past decisions, project context, or anything the user likely settled before: call `search_memories` first.",
392
392
  '- If the final user-facing answer materially relies on one or more EchoMem memories, end it with a compact `EchoMem sources:` list containing only the memories actually used. Link each memory key to its canonical `https://echoknows.com/memory/<memory-id>` URL. Do not cite memories that were merely retrieved, and omit the section when no memory informed the answer.',
393
393
  "- Before the final response for a task that produced a durable decision, confirmed preference, implementation, resolved bug, commit, passing verification, release, or project milestone: call `save_conversation`. This private checkpoint does not require a separate user request. Do not save secrets, credentials, incidental chatter, or trivial read-only work. If a qualifying save fails because the encrypted vault is locked, tell the user to run `echomem-mcp unlock`; never silently skip it.",
394
- "- For a user with a company group, call `get_group_session_sharing` near session start or after the first qualifying private save. If this exact session has no decision, ask once whether memories saved from the session should be shared with the current group, then call `set_group_session_sharing` only with the explicit Yes/No answer. A Yes decision syncs eligible memories after each private save; a No decision keeps later saves private.",
394
+ "- For a user with a company group, call `get_group_session_sharing` near session start or after a qualifying private save. If this exact session has no decision, ask whether memories saved from the session should be shared with the current group. Silence is not a No: leave the state unset and ask again at a later qualifying checkpoint until the user explicitly answers Yes or No, without repeating the prompt in the same response. Call `set_group_session_sharing` only with that explicit answer. A Yes decision syncs eligible memories after each private save; a No decision keeps later saves private and stops later prompts for this exact session.",
395
395
  "- If the user pastes a session carryover/checkpoint: it may reference `get_checkpoint_by_context` — use it to pull the checkpoint/decision trail when you need more than the snapshot.",
396
396
  "",
397
397
  "### Company group memory",
@@ -260,7 +260,7 @@ export function listToolSpecs(opts = {}) {
260
260
  },
261
261
  {
262
262
  name: canonicalToolNames.save,
263
- description: "Save durable knowledge from this conversation into the user's private EchoMem (durable memories are extracted automatically). Call before the final response when work produced a durable decision, confirmed preference, implementation, resolved bug, commit, passing verification, release, or project milestone; this private checkpoint does not require a separate user request. Omit secrets, incidental chatter, and trivial read-only work. If the encrypted vault is locked, tell the user to run `echomem-mcp unlock` and never silently skip a qualifying checkpoint. Private persistence happens first. If this MCP session has confirmed group sharing, eligible memories are then synced to the current group automatically; flagged memories stay private. If the session has no decision yet, ask once whether to share memories saved from this session. New extraction input uses the plan's weekly processing allowance; if the limit is reached, nothing is saved. passthrough=true stores the text verbatim as a session capsule.",
263
+ description: "Save durable knowledge from this conversation into the user's private EchoMem (durable memories are extracted automatically). Call before the final response when work produced a durable decision, confirmed preference, implementation, resolved bug, commit, passing verification, release, or project milestone; this private checkpoint does not require a separate user request. Omit secrets, incidental chatter, and trivial read-only work. If the encrypted vault is locked, tell the user to run `echomem-mcp unlock` and never silently skip a qualifying checkpoint. Private persistence happens first. If this MCP session has confirmed group sharing, eligible memories are then synced to the current group automatically; flagged memories stay private. If the session has no decision yet, ask whether to share. Silence leaves it unset, so ask again at a later qualifying checkpoint until the user explicitly answers Yes or No; do not repeat the prompt in the same response. New extraction input uses the plan's weekly processing allowance; if the limit is reached, nothing is saved. passthrough=true stores the text verbatim as a session capsule.",
264
264
  inputSchema: {
265
265
  type: "object",
266
266
  properties: {
@@ -503,7 +503,7 @@ export function listToolSpecs(opts = {}) {
503
503
  },
504
504
  {
505
505
  name: canonicalToolNames.getGroupSessionSharing,
506
- description: "Read the confirmed sharing decision for this exact MCP session. Call near session start or after the first private save. If the user has a group and no decision exists, ask once: “Share memories saved from this session with <group>?” Never infer the answer.",
506
+ description: "Read the confirmed sharing decision for this exact MCP session. Call near session start or after a qualifying private save. If the user has a group and no decision exists, ask: “Share memories saved from this session with <group>?” Silence leaves the state unset; ask again at a later qualifying checkpoint until the user explicitly answers Yes or No, but never repeat the prompt in the same response or infer the answer. An explicit No stops later prompts for this exact session.",
507
507
  inputSchema: {
508
508
  type: "object",
509
509
  properties: {
@@ -552,7 +552,7 @@ export function listToolSpecs(opts = {}) {
552
552
  },
553
553
  {
554
554
  name: canonicalToolNames.joinGroup,
555
- description: "Join a company memory group using an invite code after the user explicitly asks to join. Joining never publishes memories. Next call prepare_group_publication, infer a proposed title and responsibility summary from the user's own candidate memories, and ask the user to confirm the profile together with the publication preview. Also call get_group_session_sharing and, if unset, ask once whether memories saved from this session should be shared.",
555
+ description: "Join a company memory group using an invite code after the user explicitly asks to join. Joining never publishes memories. Next call prepare_group_publication, infer a proposed title and responsibility summary from the user's own candidate memories, and ask the user to confirm the profile together with the publication preview. Also call get_group_session_sharing and, if unset, ask whether memories saved from this session should be shared. Silence stays unset and should be prompted again at a later qualifying checkpoint until an explicit Yes or No.",
556
556
  inputSchema: {
557
557
  type: "object",
558
558
  properties: {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@echomem/mcp",
3
- "version": "1.4.30",
3
+ "version": "1.4.31",
4
4
  "description": "EchoMem MCP bridge: cloud-first memory tools, local context HUD, and the Agent Doctor workspace forensics report (cost ledger + 3D repo city)",
5
5
  "main": "dist/index.js",
6
6
  "type": "module",
@@ -18,7 +18,10 @@ Use the `save_conversation` tool from the `echomem` MCP server.
18
18
  read-only work and incidental chatter.
19
19
  7. If the encrypted vault is locked, tell the user to run `echomem-mcp unlock`; never silently skip a
20
20
  qualifying checkpoint.
21
- 8. For a user with a company group, call `get_group_session_sharing` near session start or after the
22
- first qualifying private save. If unset, ask once whether memories saved from this session should be
23
- shared, then call `set_group_session_sharing` with the explicit Yes/No answer. A Yes decision syncs
24
- eligible memories after private persistence; flagged memories remain private.
21
+ 8. For a user with a company group, call `get_group_session_sharing` near session start or after a
22
+ qualifying private save. If unset, ask whether memories saved from this session should be shared.
23
+ Silence is not a No: leave the state unset and ask again at a later qualifying checkpoint until the
24
+ user explicitly answers Yes or No, without repeating the prompt in the same response. Then call
25
+ `set_group_session_sharing` with that explicit answer. A Yes decision syncs eligible memories after
26
+ private persistence; a No decision stops later prompts for this exact session; flagged memories
27
+ remain private.
@@ -18,8 +18,10 @@ This project has EchoMem connected — the user's long-term memory across all th
18
18
  `save_conversation`. This private checkpoint does not require a separate user request. Save a
19
19
  concise structured outcome rather than the full transcript. Never save secrets, credentials,
20
20
  incidental chatter, or trivial read-only work. This does not authorize company-group publication.
21
- - For a user with a company group, call `get_group_session_sharing` near session start or after the
22
- first qualifying private save. If this exact session has no decision, ask once whether memories
23
- saved from it should be shared, then store only the explicit Yes/No answer with
24
- `set_group_session_sharing`. A Yes decision syncs eligible memories after private persistence;
25
- flagged memories stay private.
21
+ - For a user with a company group, call `get_group_session_sharing` near session start or after a
22
+ qualifying private save. If this exact session has no decision, ask whether memories saved from it
23
+ should be shared. Silence is not a No: leave the state unset and ask again at a later qualifying
24
+ checkpoint until the user explicitly answers Yes or No, without repeating the prompt in the same
25
+ response. Store only the explicit answer with `set_group_session_sharing`. A Yes decision syncs
26
+ eligible memories after private persistence; a No decision stops later prompts for this exact
27
+ session; flagged memories stay private.