@scitrera/memorylayer-cc-plugin 0.1.22 → 0.2.0

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.
Files changed (53) hide show
  1. package/LICENSE +177 -0
  2. package/README.md +11 -4
  3. package/dist/bin/memorylayer-hook.js +27 -9
  4. package/dist/bin/memorylayer-hook.js.map +1 -1
  5. package/dist/src/hooks/client.d.ts +21 -0
  6. package/dist/src/hooks/client.d.ts.map +1 -0
  7. package/dist/src/hooks/client.js +57 -0
  8. package/dist/src/hooks/client.js.map +1 -0
  9. package/dist/src/hooks/formatters.d.ts +33 -0
  10. package/dist/src/hooks/formatters.d.ts.map +1 -0
  11. package/dist/src/hooks/formatters.js +187 -0
  12. package/dist/src/hooks/formatters.js.map +1 -0
  13. package/dist/src/hooks/handlers/post-tool.d.ts +10 -0
  14. package/dist/src/hooks/handlers/post-tool.d.ts.map +1 -0
  15. package/dist/src/hooks/handlers/post-tool.js +98 -0
  16. package/dist/src/hooks/handlers/post-tool.js.map +1 -0
  17. package/dist/src/hooks/handlers/pre-compact.d.ts +5 -0
  18. package/dist/src/hooks/handlers/pre-compact.d.ts.map +1 -0
  19. package/dist/src/hooks/handlers/pre-compact.js +117 -0
  20. package/dist/src/hooks/handlers/pre-compact.js.map +1 -0
  21. package/dist/src/hooks/handlers/pre-tool.d.ts +10 -0
  22. package/dist/src/hooks/handlers/pre-tool.d.ts.map +1 -0
  23. package/dist/src/hooks/handlers/pre-tool.js +114 -0
  24. package/dist/src/hooks/handlers/pre-tool.js.map +1 -0
  25. package/dist/src/hooks/handlers/session-start.d.ts +10 -0
  26. package/dist/src/hooks/handlers/session-start.d.ts.map +1 -0
  27. package/dist/src/hooks/handlers/session-start.js +111 -0
  28. package/dist/src/hooks/handlers/session-start.js.map +1 -0
  29. package/dist/src/hooks/handlers/stop.d.ts +14 -0
  30. package/dist/src/hooks/handlers/stop.d.ts.map +1 -0
  31. package/dist/src/hooks/handlers/stop.js +49 -0
  32. package/dist/src/hooks/handlers/stop.js.map +1 -0
  33. package/dist/src/hooks/handlers/user-prompt.d.ts +10 -0
  34. package/dist/src/hooks/handlers/user-prompt.d.ts.map +1 -0
  35. package/dist/src/hooks/handlers/user-prompt.js +128 -0
  36. package/dist/src/hooks/handlers/user-prompt.js.map +1 -0
  37. package/dist/src/hooks/index.d.ts +18 -0
  38. package/dist/src/hooks/index.d.ts.map +1 -0
  39. package/dist/src/hooks/index.js +23 -0
  40. package/dist/src/hooks/index.js.map +1 -0
  41. package/dist/src/hooks/observation.d.ts +59 -0
  42. package/dist/src/hooks/observation.d.ts.map +1 -0
  43. package/dist/src/hooks/observation.js +421 -0
  44. package/dist/src/hooks/observation.js.map +1 -0
  45. package/dist/src/hooks/state.d.ts +73 -0
  46. package/dist/src/hooks/state.d.ts.map +1 -0
  47. package/dist/src/hooks/state.js +168 -0
  48. package/dist/src/hooks/state.js.map +1 -0
  49. package/dist/src/hooks/types.d.ts +86 -0
  50. package/dist/src/hooks/types.d.ts.map +1 -0
  51. package/dist/src/hooks/types.js +14 -0
  52. package/dist/src/hooks/types.js.map +1 -0
  53. package/package.json +9 -5
@@ -0,0 +1,168 @@
1
+ /**
2
+ * Hook state management - persists state between hook invocations
3
+ */
4
+ import { readFileSync, writeFileSync, mkdirSync, existsSync } from "fs";
5
+ import { homedir } from "os";
6
+ import { join } from "path";
7
+ const STATE_DIR = join(homedir(), ".memorylayer");
8
+ const STATE_FILE = join(STATE_DIR, "hook-state.json");
9
+ /** Default empty state */
10
+ const DEFAULT_STATE = {
11
+ recallDoneThisTurn: false,
12
+ };
13
+ /**
14
+ * Read current hook state from disk
15
+ */
16
+ export function readHookState() {
17
+ try {
18
+ if (!existsSync(STATE_FILE)) {
19
+ return { ...DEFAULT_STATE };
20
+ }
21
+ const data = readFileSync(STATE_FILE, "utf-8");
22
+ return JSON.parse(data);
23
+ }
24
+ catch {
25
+ return { ...DEFAULT_STATE };
26
+ }
27
+ }
28
+ /**
29
+ * Write hook state to disk
30
+ */
31
+ export function writeHookState(state) {
32
+ try {
33
+ if (!existsSync(STATE_DIR)) {
34
+ mkdirSync(STATE_DIR, { recursive: true });
35
+ }
36
+ writeFileSync(STATE_FILE, JSON.stringify(state, null, 2));
37
+ }
38
+ catch (error) {
39
+ console.error("Failed to write hook state:", error);
40
+ }
41
+ }
42
+ /**
43
+ * Mark that recall has been done this turn for a specific query
44
+ */
45
+ export function markRecallDone(query) {
46
+ const state = readHookState();
47
+ state.recallDoneThisTurn = true;
48
+ state.lastRecallAt = new Date().toISOString();
49
+ state.lastRecallQuery = query;
50
+ const queries = state.recallQueriesThisTurn || [];
51
+ queries.push(query);
52
+ state.recallQueriesThisTurn = queries;
53
+ writeHookState(state);
54
+ }
55
+ /**
56
+ * Check if recall was already done this turn (any query)
57
+ */
58
+ export function wasRecallDoneThisTurn() {
59
+ const state = readHookState();
60
+ return state.recallDoneThisTurn;
61
+ }
62
+ /**
63
+ * Check if a specific query (or similar) was already recalled this turn.
64
+ * Allows different queries to proceed even if a recall was already done.
65
+ */
66
+ export function wasQueryRecalledThisTurn(query) {
67
+ const state = readHookState();
68
+ const queries = state.recallQueriesThisTurn || [];
69
+ const normalized = query.toLowerCase().trim().replace(/\s+/g, " ");
70
+ return queries.some(q => q.toLowerCase().trim().replace(/\s+/g, " ") === normalized);
71
+ }
72
+ /**
73
+ * Reset recall status for new turn
74
+ */
75
+ export function resetRecallStatus() {
76
+ const state = readHookState();
77
+ state.recallDoneThisTurn = false;
78
+ state.recallQueriesThisTurn = [];
79
+ writeHookState(state);
80
+ }
81
+ /**
82
+ * Store the user's current topic for cross-hook context
83
+ */
84
+ export function setCurrentTopic(topic) {
85
+ const state = readHookState();
86
+ state.currentTopic = topic;
87
+ writeHookState(state);
88
+ }
89
+ /**
90
+ * Get the user's current topic (set by UserPromptSubmit)
91
+ */
92
+ export function getCurrentTopic() {
93
+ return readHookState().currentTopic;
94
+ }
95
+ /**
96
+ * Store the user's current prompt for cross-hook context
97
+ */
98
+ export function setCurrentPrompt(prompt) {
99
+ const state = readHookState();
100
+ state.currentPrompt = prompt;
101
+ writeHookState(state);
102
+ }
103
+ /**
104
+ * Get the user's current prompt (set by UserPromptSubmit)
105
+ */
106
+ export function getCurrentPrompt() {
107
+ return readHookState().currentPrompt;
108
+ }
109
+ /**
110
+ * Update workspace/session info
111
+ */
112
+ export function updateSessionInfo(workspaceId, sessionId) {
113
+ const state = readHookState();
114
+ state.workspaceId = workspaceId;
115
+ state.sessionId = sessionId;
116
+ writeHookState(state);
117
+ }
118
+ /** Return the last durably acknowledged byte boundary for this transcript. */
119
+ export function getCheckpointBoundary(sessionId, transcriptPath) {
120
+ const entry = readHookState().checkpointBoundaries?.[sessionId];
121
+ return entry?.transcriptPath === transcriptPath ? entry.boundary : 0;
122
+ }
123
+ /** Advance a transcript boundary only after the server acknowledges raw capture. */
124
+ export function acknowledgeCheckpointBoundary(sessionId, transcriptPath, boundary) {
125
+ const state = readHookState();
126
+ const boundaries = state.checkpointBoundaries ?? {};
127
+ boundaries[sessionId] = { transcriptPath, boundary };
128
+ const retained = Object.entries(boundaries).slice(-50);
129
+ state.checkpointBoundaries = Object.fromEntries(retained);
130
+ writeHookState(state);
131
+ }
132
+ /**
133
+ * Get current workspace ID from state
134
+ */
135
+ export function getWorkspaceId() {
136
+ return readHookState().workspaceId;
137
+ }
138
+ /**
139
+ * Get current session ID from hook-state.json (disk read, singleton).
140
+ * Prefer resolveSessionId() which checks env first and avoids disk I/O.
141
+ */
142
+ export function getSessionIdFromHookState() {
143
+ return readHookState().sessionId;
144
+ }
145
+ /**
146
+ * Resolve session ID with env-first strategy.
147
+ *
148
+ * Prefers process.env.MEMORYLAYER_SESSION_ID (session-scoped via CLAUDE_ENV_FILE)
149
+ * over hook-state.json (singleton, shared across concurrent sessions).
150
+ * Only falls back to disk read if env var is not set.
151
+ *
152
+ * @param caller - label for diagnostic logging (e.g. "post-tool", "stop")
153
+ */
154
+ export function resolveSessionId(caller) {
155
+ const envSessionId = process.env.MEMORYLAYER_SESSION_ID;
156
+ if (envSessionId) {
157
+ console.error(`[${caller}] session=${envSessionId} source=env`);
158
+ return envSessionId;
159
+ }
160
+ const stateSessionId = getSessionIdFromHookState();
161
+ if (stateSessionId) {
162
+ console.error(`[${caller}] session=${stateSessionId} source=hook-state (env not set)`);
163
+ return stateSessionId;
164
+ }
165
+ console.error(`[${caller}] no session ID available (env or hook-state)`);
166
+ return undefined;
167
+ }
168
+ //# sourceMappingURL=state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../../../src/hooks/state.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,86 @@
1
+ /**
2
+ * Hook type definitions for MemoryLayer Claude Code hooks
3
+ */
4
+ /** Hook event types that Claude Code can trigger */
5
+ export declare enum HookEvent {
6
+ SessionStart = "SessionStart",
7
+ Stop = "Stop",
8
+ PreCompact = "PreCompact",
9
+ PreToolUse = "PreToolUse",
10
+ PostToolUse = "PostToolUse",
11
+ UserPromptSubmit = "UserPromptSubmit"
12
+ }
13
+ /** Input provided by Claude Code to hook commands via stdin */
14
+ export interface HookInput {
15
+ /** The hook event type */
16
+ hook_type: HookEvent;
17
+ /** Session ID if available */
18
+ session_id?: string;
19
+ /** Transcript context (recent messages) */
20
+ transcript?: TranscriptMessage[];
21
+ /** Claude Code JSONL transcript path, available to compaction hooks. */
22
+ transcript_path?: string;
23
+ /** For tool hooks: the tool being used */
24
+ tool_name?: string;
25
+ /** For tool hooks: tool input arguments */
26
+ tool_input?: Record<string, unknown>;
27
+ /** For tool hooks: tool output (PostToolUse only) */
28
+ tool_output?: string;
29
+ /** For UserPromptSubmit: the user's prompt */
30
+ user_prompt?: string;
31
+ }
32
+ export interface TranscriptMessage {
33
+ role: "user" | "assistant";
34
+ content: string;
35
+ }
36
+ /** Hook-specific output nested inside the response */
37
+ export interface HookSpecificOutput {
38
+ /** Must match the hook event name */
39
+ hookEventName: string;
40
+ /** Content to inject into assistant context */
41
+ additionalContext?: string;
42
+ }
43
+ /** Output from hook command, written to stdout as JSON */
44
+ export interface HookOutput {
45
+ /** Decision: "approve", "block", or "skip" */
46
+ decision?: "approve" | "block" | "skip";
47
+ /** Reason for the decision */
48
+ reason?: string;
49
+ /** Hook-specific output containing additionalContext (proper format) */
50
+ hookSpecificOutput?: HookSpecificOutput;
51
+ /** Whether hook execution succeeded (for error reporting) */
52
+ success?: boolean;
53
+ /** Error message if failed */
54
+ error?: string;
55
+ /** Legacy: Content to inject (CLI converts to hookSpecificOutput) */
56
+ additionalContext?: string;
57
+ /** Legacy: Whether to block (CLI converts to decision) */
58
+ block?: boolean;
59
+ /** Legacy: Reason for blocking */
60
+ blockReason?: string;
61
+ }
62
+ /** State tracked between hook invocations */
63
+ export interface HookState {
64
+ /** Current session ID */
65
+ sessionId?: string;
66
+ /** Workspace ID being used */
67
+ workspaceId?: string;
68
+ /** Whether recall has been done this conversation turn */
69
+ recallDoneThisTurn: boolean;
70
+ /** Timestamp of last recall */
71
+ lastRecallAt?: string;
72
+ /** Query used for last recall */
73
+ lastRecallQuery?: string;
74
+ /** Queries already performed this turn (for query-aware dedup) */
75
+ recallQueriesThisTurn?: string[];
76
+ /** User's current topic from most recent prompt */
77
+ currentTopic?: string;
78
+ /** User's current prompt text for intent detection */
79
+ currentPrompt?: string;
80
+ /** Last durably acknowledged transcript byte boundary per server session. */
81
+ checkpointBoundaries?: Record<string, {
82
+ transcriptPath: string;
83
+ boundary: number;
84
+ }>;
85
+ }
86
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/hooks/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,oDAAoD;AACpD,oBAAY,SAAS;IACnB,YAAY,iBAAiB;IAC7B,IAAI,SAAS;IACb,UAAU,eAAe;IACzB,UAAU,eAAe;IACzB,WAAW,gBAAgB;IAC3B,gBAAgB,qBAAqB;CACtC;AAED,+DAA+D;AAC/D,MAAM,WAAW,SAAS;IACxB,0BAA0B;IAC1B,SAAS,EAAE,SAAS,CAAC;IACrB,8BAA8B;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,2CAA2C;IAC3C,UAAU,CAAC,EAAE,iBAAiB,EAAE,CAAC;IACjC,wEAAwE;IACxE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,0CAA0C;IAC1C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2CAA2C;IAC3C,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,qDAAqD;IACrD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,8CAA8C;IAC9C,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,sDAAsD;AACtD,MAAM,WAAW,kBAAkB;IACjC,qCAAqC;IACrC,aAAa,EAAE,MAAM,CAAC;IACtB,+CAA+C;IAC/C,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,0DAA0D;AAC1D,MAAM,WAAW,UAAU;IACzB,8CAA8C;IAC9C,QAAQ,CAAC,EAAE,SAAS,GAAG,OAAO,GAAG,MAAM,CAAC;IACxC,8BAA8B;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,wEAAwE;IACxE,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IACxC,6DAA6D;IAC7D,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,8BAA8B;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qEAAqE;IACrE,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,0DAA0D;IAC1D,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,kCAAkC;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,6CAA6C;AAC7C,MAAM,WAAW,SAAS;IACxB,yBAAyB;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,8BAA8B;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0DAA0D;IAC1D,kBAAkB,EAAE,OAAO,CAAC;IAC5B,+BAA+B;IAC/B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iCAAiC;IACjC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,kEAAkE;IAClE,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC;IACjC,mDAAmD;IACnD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,sDAAsD;IACtD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,6EAA6E;IAC7E,oBAAoB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,cAAc,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACrF"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Hook type definitions for MemoryLayer Claude Code hooks
3
+ */
4
+ /** Hook event types that Claude Code can trigger */
5
+ export var HookEvent;
6
+ (function (HookEvent) {
7
+ HookEvent["SessionStart"] = "SessionStart";
8
+ HookEvent["Stop"] = "Stop";
9
+ HookEvent["PreCompact"] = "PreCompact";
10
+ HookEvent["PreToolUse"] = "PreToolUse";
11
+ HookEvent["PostToolUse"] = "PostToolUse";
12
+ HookEvent["UserPromptSubmit"] = "UserPromptSubmit";
13
+ })(HookEvent || (HookEvent = {}));
14
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/hooks/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,oDAAoD;AACpD,MAAM,CAAN,IAAY,SAOX;AAPD,WAAY,SAAS;IACnB,0CAA6B,CAAA;IAC7B,0BAAa,CAAA;IACb,sCAAyB,CAAA;IACzB,sCAAyB,CAAA;IACzB,wCAA2B,CAAA;IAC3B,kDAAqC,CAAA;AACvC,CAAC,EAPW,SAAS,KAAT,SAAS,QAOpB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@scitrera/memorylayer-cc-plugin",
3
- "version": "0.1.22",
3
+ "version": "0.2.0",
4
4
  "description": "Claude Code plugin for MemoryLayer.ai - persistent memory hooks",
5
5
  "type": "module",
6
6
  "main": "dist/src/index.js",
@@ -11,7 +11,8 @@
11
11
  "scripts": {
12
12
  "build": "tsc",
13
13
  "dev": "tsc --watch",
14
- "prepublishOnly": "npm run build"
14
+ "prepublishOnly": "npm run build",
15
+ "check": "tsc --noEmit"
15
16
  },
16
17
  "author": "scitrera.ai",
17
18
  "homepage": "https://memorylayer.ai",
@@ -19,10 +20,10 @@
19
20
  "repository": {
20
21
  "type": "git",
21
22
  "url": "https://github.com/scitrera/memorylayer",
22
- "directory": "oss/memorylayer-cc-plugin"
23
+ "directory": "memorylayer-cc-plugin"
23
24
  },
24
25
  "dependencies": {
25
- "@scitrera/memorylayer-mcp-server": "^0.1.22"
26
+ "@scitrera/memorylayer-mcp-server": "0.2.0"
26
27
  },
27
28
  "devDependencies": {
28
29
  "@types/node": "^20.0.0",
@@ -30,5 +31,8 @@
30
31
  },
31
32
  "engines": {
32
33
  "node": ">=18.0.0"
33
- }
34
+ },
35
+ "files": [
36
+ "dist/"
37
+ ]
34
38
  }