@scitrera/memorylayer-opencode-plugin 0.1.22

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 (58) hide show
  1. package/README.md +178 -0
  2. package/dist/src/hooks/event.d.ts +15 -0
  3. package/dist/src/hooks/event.d.ts.map +1 -0
  4. package/dist/src/hooks/event.js +53 -0
  5. package/dist/src/hooks/event.js.map +1 -0
  6. package/dist/src/hooks/message.d.ts +20 -0
  7. package/dist/src/hooks/message.d.ts.map +1 -0
  8. package/dist/src/hooks/message.js +128 -0
  9. package/dist/src/hooks/message.js.map +1 -0
  10. package/dist/src/hooks/session.d.ts +20 -0
  11. package/dist/src/hooks/session.d.ts.map +1 -0
  12. package/dist/src/hooks/session.js +121 -0
  13. package/dist/src/hooks/session.js.map +1 -0
  14. package/dist/src/hooks/tool.d.ts +23 -0
  15. package/dist/src/hooks/tool.d.ts.map +1 -0
  16. package/dist/src/hooks/tool.js +168 -0
  17. package/dist/src/hooks/tool.js.map +1 -0
  18. package/dist/src/index.d.ts +31 -0
  19. package/dist/src/index.d.ts.map +1 -0
  20. package/dist/src/index.js +176 -0
  21. package/dist/src/index.js.map +1 -0
  22. package/dist/src/shared/client.d.ts +27 -0
  23. package/dist/src/shared/client.d.ts.map +1 -0
  24. package/dist/src/shared/client.js +69 -0
  25. package/dist/src/shared/client.js.map +1 -0
  26. package/dist/src/shared/formatters.d.ts +33 -0
  27. package/dist/src/shared/formatters.d.ts.map +1 -0
  28. package/dist/src/shared/formatters.js +187 -0
  29. package/dist/src/shared/formatters.js.map +1 -0
  30. package/dist/src/shared/observation.d.ts +59 -0
  31. package/dist/src/shared/observation.d.ts.map +1 -0
  32. package/dist/src/shared/observation.js +406 -0
  33. package/dist/src/shared/observation.js.map +1 -0
  34. package/dist/src/shared/state.d.ts +66 -0
  35. package/dist/src/shared/state.d.ts.map +1 -0
  36. package/dist/src/shared/state.js +144 -0
  37. package/dist/src/shared/state.js.map +1 -0
  38. package/dist/src/shared/types.d.ts +141 -0
  39. package/dist/src/shared/types.d.ts.map +1 -0
  40. package/dist/src/shared/types.js +9 -0
  41. package/dist/src/shared/types.js.map +1 -0
  42. package/opencode.example.json +15 -0
  43. package/package.json +52 -0
  44. package/src/commands/recall.md +55 -0
  45. package/src/commands/remember.md +37 -0
  46. package/src/commands/setup.md +47 -0
  47. package/src/commands/status.md +59 -0
  48. package/src/hooks/event.ts +63 -0
  49. package/src/hooks/message.ts +147 -0
  50. package/src/hooks/session.ts +127 -0
  51. package/src/hooks/tool.ts +207 -0
  52. package/src/index.ts +197 -0
  53. package/src/shared/client.ts +73 -0
  54. package/src/shared/formatters.ts +237 -0
  55. package/src/shared/observation.ts +447 -0
  56. package/src/shared/state.ts +159 -0
  57. package/src/shared/types.ts +144 -0
  58. package/tsconfig.json +24 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"observation.js","sourceRoot":"","sources":["../../../src/shared/observation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Hook state management - persists state between hook invocations.
3
+ *
4
+ * Adapted from the CC plugin's state module. Removes CLAUDE_ENV_FILE
5
+ * logic since OpenCode uses a different environment mechanism.
6
+ */
7
+ import type { HookState } from "./types.js";
8
+ /**
9
+ * Read current hook state from disk
10
+ */
11
+ export declare function readHookState(): HookState;
12
+ /**
13
+ * Write hook state to disk
14
+ */
15
+ export declare function writeHookState(state: HookState): void;
16
+ /**
17
+ * Mark that recall has been done this turn for a specific query
18
+ */
19
+ export declare function markRecallDone(query: string): void;
20
+ /**
21
+ * Check if recall was already done this turn (any query)
22
+ */
23
+ export declare function wasRecallDoneThisTurn(): boolean;
24
+ /**
25
+ * Check if a specific query (or similar) was already recalled this turn.
26
+ * Allows different queries to proceed even if a recall was already done.
27
+ */
28
+ export declare function wasQueryRecalledThisTurn(query: string): boolean;
29
+ /**
30
+ * Reset recall status for new turn
31
+ */
32
+ export declare function resetRecallStatus(): void;
33
+ /**
34
+ * Store the user's current topic for cross-hook context
35
+ */
36
+ export declare function setCurrentTopic(topic: string): void;
37
+ /**
38
+ * Get the user's current topic (set by chat.message hook)
39
+ */
40
+ export declare function getCurrentTopic(): string | undefined;
41
+ /**
42
+ * Store the user's current prompt for cross-hook context
43
+ */
44
+ export declare function setCurrentPrompt(prompt: string): void;
45
+ /**
46
+ * Get the user's current prompt
47
+ */
48
+ export declare function getCurrentPrompt(): string | undefined;
49
+ /**
50
+ * Update workspace/session info
51
+ */
52
+ export declare function updateSessionInfo(workspaceId: string, sessionId?: string): void;
53
+ /**
54
+ * Get current workspace ID from state
55
+ */
56
+ export declare function getWorkspaceId(): string | undefined;
57
+ /**
58
+ * Resolve session ID from hook state.
59
+ *
60
+ * Unlike the CC plugin which checks CLAUDE_ENV_FILE first, OpenCode
61
+ * plugins receive session IDs directly via hook input parameters.
62
+ * This function serves as a fallback for hooks that need the session
63
+ * ID but don't receive it directly.
64
+ */
65
+ export declare function resolveSessionId(_caller: string): string | undefined;
66
+ //# sourceMappingURL=state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../../src/shared/state.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAU5C;;GAEG;AACH,wBAAgB,aAAa,IAAI,SAAS,CAUzC;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,CASrD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CASlD;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,OAAO,CAG/C;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAK/D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,IAAI,CAKxC;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAInD;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,MAAM,GAAG,SAAS,CAEpD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAIrD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,GAAG,SAAS,CAErD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAK/E;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,MAAM,GAAG,SAAS,CAEnD;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CASpE"}
@@ -0,0 +1,144 @@
1
+ /**
2
+ * Hook state management - persists state between hook invocations.
3
+ *
4
+ * Adapted from the CC plugin's state module. Removes CLAUDE_ENV_FILE
5
+ * logic since OpenCode uses a different environment mechanism.
6
+ */
7
+ import { readFileSync, writeFileSync, mkdirSync, existsSync } from "fs";
8
+ import { homedir } from "os";
9
+ import { join } from "path";
10
+ const STATE_DIR = join(homedir(), ".memorylayer");
11
+ const STATE_FILE = join(STATE_DIR, "hook-state.json");
12
+ /** Default empty state */
13
+ const DEFAULT_STATE = {
14
+ recallDoneThisTurn: false,
15
+ };
16
+ /**
17
+ * Read current hook state from disk
18
+ */
19
+ export function readHookState() {
20
+ try {
21
+ if (!existsSync(STATE_FILE)) {
22
+ return { ...DEFAULT_STATE };
23
+ }
24
+ const data = readFileSync(STATE_FILE, "utf-8");
25
+ return JSON.parse(data);
26
+ }
27
+ catch {
28
+ return { ...DEFAULT_STATE };
29
+ }
30
+ }
31
+ /**
32
+ * Write hook state to disk
33
+ */
34
+ export function writeHookState(state) {
35
+ try {
36
+ if (!existsSync(STATE_DIR)) {
37
+ mkdirSync(STATE_DIR, { recursive: true });
38
+ }
39
+ writeFileSync(STATE_FILE, JSON.stringify(state, null, 2));
40
+ }
41
+ catch (error) {
42
+ console.error("Failed to write hook state:", error);
43
+ }
44
+ }
45
+ /**
46
+ * Mark that recall has been done this turn for a specific query
47
+ */
48
+ export function markRecallDone(query) {
49
+ const state = readHookState();
50
+ state.recallDoneThisTurn = true;
51
+ state.lastRecallAt = new Date().toISOString();
52
+ state.lastRecallQuery = query;
53
+ const queries = state.recallQueriesThisTurn || [];
54
+ queries.push(query);
55
+ state.recallQueriesThisTurn = queries;
56
+ writeHookState(state);
57
+ }
58
+ /**
59
+ * Check if recall was already done this turn (any query)
60
+ */
61
+ export function wasRecallDoneThisTurn() {
62
+ const state = readHookState();
63
+ return state.recallDoneThisTurn;
64
+ }
65
+ /**
66
+ * Check if a specific query (or similar) was already recalled this turn.
67
+ * Allows different queries to proceed even if a recall was already done.
68
+ */
69
+ export function wasQueryRecalledThisTurn(query) {
70
+ const state = readHookState();
71
+ const queries = state.recallQueriesThisTurn || [];
72
+ const normalized = query.toLowerCase().trim().replace(/\s+/g, " ");
73
+ return queries.some(q => q.toLowerCase().trim().replace(/\s+/g, " ") === normalized);
74
+ }
75
+ /**
76
+ * Reset recall status for new turn
77
+ */
78
+ export function resetRecallStatus() {
79
+ const state = readHookState();
80
+ state.recallDoneThisTurn = false;
81
+ state.recallQueriesThisTurn = [];
82
+ writeHookState(state);
83
+ }
84
+ /**
85
+ * Store the user's current topic for cross-hook context
86
+ */
87
+ export function setCurrentTopic(topic) {
88
+ const state = readHookState();
89
+ state.currentTopic = topic;
90
+ writeHookState(state);
91
+ }
92
+ /**
93
+ * Get the user's current topic (set by chat.message hook)
94
+ */
95
+ export function getCurrentTopic() {
96
+ return readHookState().currentTopic;
97
+ }
98
+ /**
99
+ * Store the user's current prompt for cross-hook context
100
+ */
101
+ export function setCurrentPrompt(prompt) {
102
+ const state = readHookState();
103
+ state.currentPrompt = prompt;
104
+ writeHookState(state);
105
+ }
106
+ /**
107
+ * Get the user's current prompt
108
+ */
109
+ export function getCurrentPrompt() {
110
+ return readHookState().currentPrompt;
111
+ }
112
+ /**
113
+ * Update workspace/session info
114
+ */
115
+ export function updateSessionInfo(workspaceId, sessionId) {
116
+ const state = readHookState();
117
+ state.workspaceId = workspaceId;
118
+ state.sessionId = sessionId;
119
+ writeHookState(state);
120
+ }
121
+ /**
122
+ * Get current workspace ID from state
123
+ */
124
+ export function getWorkspaceId() {
125
+ return readHookState().workspaceId;
126
+ }
127
+ /**
128
+ * Resolve session ID from hook state.
129
+ *
130
+ * Unlike the CC plugin which checks CLAUDE_ENV_FILE first, OpenCode
131
+ * plugins receive session IDs directly via hook input parameters.
132
+ * This function serves as a fallback for hooks that need the session
133
+ * ID but don't receive it directly.
134
+ */
135
+ export function resolveSessionId(_caller) {
136
+ // Check environment variable first (may be set via shell.env hook)
137
+ const envSessionId = process.env.MEMORYLAYER_SESSION_ID;
138
+ if (envSessionId) {
139
+ return envSessionId;
140
+ }
141
+ // Fall back to persisted state
142
+ return readHookState().sessionId;
143
+ }
144
+ //# sourceMappingURL=state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../../../src/shared/state.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,141 @@
1
+ /**
2
+ * Type definitions for MemoryLayer OpenCode plugin.
3
+ *
4
+ * OpenCode plugins receive a PluginInput context and return a Hooks object.
5
+ * Hooks follow an (input, output) => Promise<void> pattern where you mutate
6
+ * the output object to inject changes.
7
+ */
8
+ import type { Memory, RecallResult, ToolResponse } from "@scitrera/memorylayer-mcp-server";
9
+ export type { Memory, RecallResult, ToolResponse };
10
+ /** Context provided to the plugin server function */
11
+ export interface PluginInput {
12
+ /** OpenCode SDK client */
13
+ client: unknown;
14
+ /** Project metadata */
15
+ project: Record<string, unknown>;
16
+ /** Current working directory */
17
+ directory: string;
18
+ /** Git worktree root */
19
+ worktree: string;
20
+ /** OpenCode server URL */
21
+ serverUrl: URL;
22
+ /** Bun shell instance */
23
+ $: unknown;
24
+ }
25
+ /** Optional plugin configuration from opencode.json */
26
+ export type PluginOptions = Record<string, unknown>;
27
+ /** Message part for context injection */
28
+ export interface Part {
29
+ type: "text";
30
+ text: string;
31
+ }
32
+ /** Model descriptor */
33
+ export interface Model {
34
+ providerID: string;
35
+ modelID: string;
36
+ }
37
+ /**
38
+ * Hook definitions returned by the plugin.
39
+ * Only the hooks we actually implement are typed here.
40
+ */
41
+ export interface MemoryLayerHooks {
42
+ /** Listen to OpenCode events (session lifecycle, etc.) */
43
+ event?: (input: {
44
+ event: OpenCodeEvent;
45
+ }) => Promise<void>;
46
+ /** Modify the system prompt to inject memory context */
47
+ "experimental.chat.system.transform"?: (input: {
48
+ sessionID?: string;
49
+ model: Model;
50
+ }, output: {
51
+ system: string[];
52
+ }) => Promise<void>;
53
+ /** Hook into user messages to perform recall */
54
+ "chat.message"?: (input: {
55
+ sessionID: string;
56
+ agent?: string;
57
+ model?: {
58
+ providerID: string;
59
+ modelID: string;
60
+ };
61
+ messageID?: string;
62
+ variant?: string;
63
+ }, output: {
64
+ message: UserMessage;
65
+ parts: Part[];
66
+ }) => Promise<void>;
67
+ /** Modify tool arguments before execution */
68
+ "tool.execute.before"?: (input: {
69
+ tool: string;
70
+ sessionID: string;
71
+ callID: string;
72
+ }, output: {
73
+ args: Record<string, unknown>;
74
+ }) => Promise<void>;
75
+ /** Capture tool output after execution */
76
+ "tool.execute.after"?: (input: {
77
+ tool: string;
78
+ sessionID: string;
79
+ callID: string;
80
+ args: Record<string, unknown>;
81
+ }, output: {
82
+ title: string;
83
+ output: string;
84
+ metadata: Record<string, unknown>;
85
+ }) => Promise<void>;
86
+ /** Inject context before context compaction */
87
+ "experimental.session.compacting"?: (input: {
88
+ sessionID: string;
89
+ }, output: {
90
+ context: string[];
91
+ prompt?: string;
92
+ }) => Promise<void>;
93
+ /** Inject environment variables into shell commands */
94
+ "shell.env"?: (input: {
95
+ cwd: string;
96
+ sessionID?: string;
97
+ callID?: string;
98
+ }, output: {
99
+ env: Record<string, string>;
100
+ }) => Promise<void>;
101
+ /** Register custom tools */
102
+ tool?: Record<string, unknown>;
103
+ /** Intercept slash commands */
104
+ "command.execute.before"?: (input: {
105
+ command: string;
106
+ sessionID: string;
107
+ arguments: string;
108
+ }, output: {
109
+ parts: Part[];
110
+ }) => Promise<void>;
111
+ }
112
+ /** OpenCode event structure */
113
+ export interface OpenCodeEvent {
114
+ type: string;
115
+ properties: Record<string, unknown>;
116
+ }
117
+ /** User message structure */
118
+ export interface UserMessage {
119
+ role: "user";
120
+ parts: Part[];
121
+ }
122
+ /** State tracked between hook invocations */
123
+ export interface HookState {
124
+ /** Current session ID */
125
+ sessionId?: string;
126
+ /** Workspace ID being used */
127
+ workspaceId?: string;
128
+ /** Whether recall has been done this conversation turn */
129
+ recallDoneThisTurn: boolean;
130
+ /** Timestamp of last recall */
131
+ lastRecallAt?: string;
132
+ /** Query used for last recall */
133
+ lastRecallQuery?: string;
134
+ /** Queries already performed this turn (for query-aware dedup) */
135
+ recallQueriesThisTurn?: string[];
136
+ /** User's current topic from most recent prompt */
137
+ currentTopic?: string;
138
+ /** User's current prompt text for intent detection */
139
+ currentPrompt?: string;
140
+ }
141
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/shared/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Type definitions for MemoryLayer OpenCode plugin.
3
+ *
4
+ * OpenCode plugins receive a PluginInput context and return a Hooks object.
5
+ * Hooks follow an (input, output) => Promise<void> pattern where you mutate
6
+ * the output object to inject changes.
7
+ */
8
+ export {};
9
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/shared/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
@@ -0,0 +1,15 @@
1
+ {
2
+ "$schema": "https://opencode.ai/config.json",
3
+ "mcp": {
4
+ "memorylayer": {
5
+ "type": "local",
6
+ "command": ["npx", "@scitrera/memorylayer-mcp-server"],
7
+ "environment": {
8
+ "MEMORYLAYER_URL": "{env:MEMORYLAYER_URL}",
9
+ "MEMORYLAYER_API_KEY": "{env:MEMORYLAYER_API_KEY}"
10
+ },
11
+ "enabled": true
12
+ }
13
+ },
14
+ "plugin": ["@scitrera/memorylayer-opencode-plugin"]
15
+ }
package/package.json ADDED
@@ -0,0 +1,52 @@
1
+ {
2
+ "name": "@scitrera/memorylayer-opencode-plugin",
3
+ "version": "0.1.22",
4
+ "description": "OpenCode plugin for MemoryLayer.ai - persistent memory hooks and context injection",
5
+ "type": "module",
6
+ "main": "dist/src/index.js",
7
+ "types": "dist/src/index.d.ts",
8
+ "scripts": {
9
+ "build": "tsc",
10
+ "dev": "tsc --watch",
11
+ "prepublishOnly": "npm run build"
12
+ },
13
+ "author": "Scitrera LLC",
14
+ "license": "Apache-2.0",
15
+ "repository": {
16
+ "type": "git",
17
+ "url": "https://github.com/scitrera/memorylayer",
18
+ "directory": "oss/memorylayer-opencode-plugin"
19
+ },
20
+ "homepage": "https://memorylayer.ai",
21
+ "keywords": [
22
+ "opencode",
23
+ "memorylayer",
24
+ "memory",
25
+ "context",
26
+ "persistence",
27
+ "knowledge-graph",
28
+ "recall",
29
+ "agent",
30
+ "llm",
31
+ "ai",
32
+ "mcp"
33
+ ],
34
+ "dependencies": {
35
+ "@scitrera/memorylayer-mcp-server": "^0.1.22"
36
+ },
37
+ "devDependencies": {
38
+ "@types/node": "^20.0.0",
39
+ "typescript": "^5.9.3"
40
+ },
41
+ "peerDependencies": {
42
+ "@opencode-ai/plugin": ">=0.1.0"
43
+ },
44
+ "peerDependenciesMeta": {
45
+ "@opencode-ai/plugin": {
46
+ "optional": true
47
+ }
48
+ },
49
+ "engines": {
50
+ "node": ">=18.0.0"
51
+ }
52
+ }
@@ -0,0 +1,55 @@
1
+ # /memorylayer-recall
2
+
3
+ Quick command to search memories.
4
+
5
+ ## Usage
6
+
7
+ ```
8
+ /memorylayer-recall <query>
9
+ ```
10
+
11
+ ## Examples
12
+
13
+ ```
14
+ /memorylayer-recall database decisions
15
+ /memorylayer-recall authentication bugs
16
+ /memorylayer-recall user preferences
17
+ /memorylayer-recall what do we know about the API
18
+ ```
19
+
20
+ ## Behavior
21
+
22
+ When this command is invoked:
23
+
24
+ 1. Use `memory_recall` with the provided query
25
+ 2. Display results in a readable format
26
+ 3. Show relevance scores and key metadata
27
+
28
+ ## Response Format
29
+
30
+ ```
31
+ Found 3 relevant memories:
32
+
33
+ 1. [0.89] We decided to use PostgreSQL for better JSON support
34
+ Type: semantic | Tags: postgresql, database
35
+ Stored: 2 days ago
36
+
37
+ 2. [0.76] Database connection pooling set to max 20 connections
38
+ Type: procedural | Tags: database, config
39
+ Stored: 1 week ago
40
+
41
+ 3. [0.71] User prefers PostgreSQL over MySQL for new projects
42
+ Type: semantic | Tags: database, preference
43
+ Stored: 3 weeks ago
44
+ ```
45
+
46
+ If no results:
47
+
48
+ ```
49
+ No memories found matching "your query"
50
+
51
+ Try:
52
+ - Broader search terms
53
+ - Check /memorylayer-status for connection issues
54
+ - Use /memorylayer-remember to store new memories
55
+ ```
@@ -0,0 +1,37 @@
1
+ # /memorylayer-remember
2
+
3
+ Quick command to store a memory.
4
+
5
+ ## Usage
6
+
7
+ ```
8
+ /memorylayer-remember <content>
9
+ ```
10
+
11
+ ## Examples
12
+
13
+ ```
14
+ /memorylayer-remember We decided to use PostgreSQL for better JSON support
15
+ /memorylayer-remember The auth bug was caused by missing token refresh
16
+ /memorylayer-remember User prefers detailed commit messages
17
+ ```
18
+
19
+ ## Behavior
20
+
21
+ When this command is invoked:
22
+
23
+ 1. Take the provided content and store it using `memory_remember`
24
+ 2. Auto-detect appropriate settings:
25
+ - **Type**: Infer from content (decision -> semantic, fix -> procedural, preference -> semantic)
26
+ - **Importance**: Default to 0.7, adjust based on keywords (critical -> 0.9, minor -> 0.5)
27
+ - **Tags**: Extract from content (technology names, component names)
28
+
29
+ 3. Confirm storage with memory ID
30
+
31
+ ## Response
32
+
33
+ ```
34
+ Stored memory: mem_abc123
35
+ Type: semantic | Importance: 0.7
36
+ Tags: postgresql, database, architecture
37
+ ```
@@ -0,0 +1,47 @@
1
+ # /memorylayer-setup
2
+
3
+ Automated setup and verification for MemoryLayer with OpenCode.
4
+
5
+ ## Usage
6
+
7
+ ```
8
+ /memorylayer-setup
9
+ ```
10
+
11
+ ## Behavior
12
+
13
+ This command performs a fully automated setup sequence:
14
+
15
+ 1. **Check server** -- Run `curl -sf http://localhost:61001/health`. If unreachable, offer to install and start: `pip install memorylayer-server && memorylayer serve &`
16
+
17
+ 2. **Verify MCP tools** -- Call `memory_briefing` to confirm tools are connected and the server is responding.
18
+
19
+ 3. **Smoke test** -- Store a test memory, recall it, then forget it to verify the full read/write cycle.
20
+
21
+ 4. **Verify opencode.json** -- Check that the MCP server and plugin are configured in `opencode.json`:
22
+
23
+ ```json
24
+ {
25
+ "mcp": {
26
+ "memorylayer": {
27
+ "type": "local",
28
+ "command": ["npx", "@scitrera/memorylayer-mcp-server"],
29
+ "environment": {
30
+ "MEMORYLAYER_URL": "{env:MEMORYLAYER_URL}",
31
+ "MEMORYLAYER_API_KEY": "{env:MEMORYLAYER_API_KEY}"
32
+ },
33
+ "enabled": true
34
+ }
35
+ },
36
+ "plugin": ["@scitrera/memorylayer-opencode-plugin"]
37
+ }
38
+ ```
39
+
40
+ 5. **Status summary** -- Print server URL, workspace, session, tool count, and active hooks.
41
+
42
+ ## When to Use
43
+
44
+ - First time using MemoryLayer with OpenCode
45
+ - After installation or upgrade
46
+ - When memories aren't being stored/recalled properly
47
+ - To verify configuration is correct