@everme/claude-code 0.1.0 → 0.2.1

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.
@@ -10,7 +10,7 @@
10
10
  "name": "everme",
11
11
  "source": "./",
12
12
  "description": "Automatic memory recall for Claude Code through the EverMe gateway. Saves and recalls per-session context using your EverMe account credentials.",
13
- "version": "0.1.0",
13
+ "version": "0.2.0",
14
14
  "homepage": "https://everme.evermind.ai",
15
15
  "license": "Apache-2.0"
16
16
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "everme",
3
- "version": "0.1.0",
3
+ "version": "0.2.0",
4
4
  "description": "EverMe — automatic memory recall for Claude Code. Recalls relevant context from past sessions before each prompt and saves new turns through the EverMe gateway.",
5
5
  "author": {
6
6
  "name": "EverMind AI",
package/README.md CHANGED
@@ -76,9 +76,9 @@ In a new Claude Code session:
76
76
  ## Files
77
77
 
78
78
  ```
79
- plugin.json plugin metadata
80
- .claude-plugin/.mcp.json MCP server registration
79
+ .claude-plugin/plugin.json plugin metadata
81
80
  .claude-plugin/marketplace.json marketplace listing
81
+ .mcp.json MCP server registration
82
82
  hooks/hooks.json SessionStart / UserPromptSubmit / Stop / SessionEnd wiring
83
83
  hooks/scripts/inject-memories.js UserPromptSubmit handler
84
84
  hooks/scripts/store-memories.js Stop handler
@@ -48,6 +48,7 @@ async function main() {
48
48
  // where there is no prompt, but per-turn inject goes through search.
49
49
  let block = "";
50
50
  let count = 0;
51
+ let degraded = null;
51
52
  try {
52
53
  const res = await searchMemories(prompt, { topK: TOP_K });
53
54
  // EverOS frequently returns score=null on episodic hits (decoded as
@@ -77,11 +78,22 @@ async function main() {
77
78
  const inner = buildMemoryPrompt(bundle, { wrapInCodeBlock: false });
78
79
  if (inner) block = `<everme_recall>\n${inner}\n</everme_recall>`;
79
80
  } catch (err) {
80
- debug("inject", "search failed:", redactError(err?.message));
81
+ const reason = redactError(err?.message || String(err));
82
+ degraded = reason;
83
+ debug("inject", "search failed:", reason);
81
84
  }
82
85
 
83
86
  if (!block || count === 0) {
84
- debug("inject", "no memories above threshold");
87
+ if (degraded) {
88
+ // Visible single-line WARN — the hook is by design non-blocking,
89
+ // but a fully silent failure means the user thinks EverMe is
90
+ // running while every recall is dropped. Surface it once per
91
+ // hook invocation so persistent issues (expired token, backend
92
+ // unreachable) bubble up without forcing EVERME_DEBUG=1.
93
+ process.stderr.write(`EverMe inject hook degraded: ${degraded}\n`);
94
+ } else {
95
+ debug("inject", "no memories above threshold");
96
+ }
85
97
  return process.exit(0);
86
98
  }
87
99
 
@@ -53,7 +53,7 @@ const handlers = {
53
53
  initialize: () => ({
54
54
  protocolVersion: "2024-11-05",
55
55
  capabilities: { tools: { listChanged: false } },
56
- serverInfo: { name: "everme", version: "0.1.0" },
56
+ serverInfo: { name: "everme", version: "0.2.0" },
57
57
  }),
58
58
  "tools/list": () => ({ tools: TOOLS }),
59
59
  "tools/call": async (params) => {
@@ -68,11 +68,20 @@ async function main() {
68
68
  });
69
69
  debug("store", `ok agent-memory status=${res?.status || "unknown"} flushed=${!!res?.flushed} messages=${res?.messageCount || tail.length}`);
70
70
  } catch (err) {
71
+ // Visible single-line WARN — Stop hook is non-blocking by design,
72
+ // but silently dropping every turn means a misconfigured machine
73
+ // looks healthy while EverMe never receives a write. Surface
74
+ // it once per Stop so persistent issues (401, network, schema
75
+ // drift) bubble up without forcing EVERME_DEBUG=1.
76
+ let reason;
71
77
  if (err instanceof EvermeError) {
78
+ reason = `${err.type}: ${redactError(err.message)}`;
72
79
  debug("store", `failed type=${err.type}:`, redactError(err.message));
73
80
  } else {
74
- debug("store", "unexpected:", redactError(err?.message || String(err)));
81
+ reason = redactError(err?.message || String(err));
82
+ debug("store", "unexpected:", reason);
75
83
  }
84
+ process.stderr.write(`EverMe store hook degraded: ${reason}\n`);
76
85
  }
77
86
  process.exit(0);
78
87
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@everme/claude-code",
3
- "version": "0.1.0",
3
+ "version": "0.2.1",
4
4
  "type": "module",
5
5
  "description": "EverMe native plugin for Claude Code — automatic memory recall via SessionStart/UserPromptSubmit/Stop/SessionEnd hooks, plus /recall slash + bundled MCP server.",
6
6
  "license": "Apache-2.0",
@@ -8,11 +8,11 @@
8
8
  "node": ">=18.0.0"
9
9
  },
10
10
  "scripts": {
11
- "test": "node --test tests/redact.test.js tests/config.test.js tests/transcript.test.js"
11
+ "test": "node --test tests/redact.test.js tests/config.test.js tests/transcript.test.js tests/hooks.test.js"
12
12
  },
13
13
  "files": [
14
- "plugin.json",
15
14
  ".claude-plugin/",
15
+ ".mcp.json",
16
16
  "hooks/",
17
17
  "commands/",
18
18
  "skills/",
@@ -21,10 +21,20 @@
21
21
  "README.md"
22
22
  ],
23
23
  "dependencies": {
24
- "@everme/agent-sdk": "^0.1.0"
24
+ "@everme/agent-sdk": "^0.2.1"
25
25
  },
26
- "keywords": ["evermind", "everme", "claude-code", "claude", "anthropic", "memory", "ai", "agent", "mcp"],
27
- "homepage": "https://everme.ai",
26
+ "keywords": [
27
+ "evermind",
28
+ "everme",
29
+ "claude-code",
30
+ "claude",
31
+ "anthropic",
32
+ "memory",
33
+ "ai",
34
+ "agent",
35
+ "mcp"
36
+ ],
37
+ "homepage": "https://everme.evermind.ai",
28
38
  "repository": {
29
39
  "type": "git",
30
40
  "url": "git+https://github.com/alwaysday1/everme.git",
File without changes