@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.
- package/README.md +178 -0
- package/dist/src/hooks/event.d.ts +15 -0
- package/dist/src/hooks/event.d.ts.map +1 -0
- package/dist/src/hooks/event.js +53 -0
- package/dist/src/hooks/event.js.map +1 -0
- package/dist/src/hooks/message.d.ts +20 -0
- package/dist/src/hooks/message.d.ts.map +1 -0
- package/dist/src/hooks/message.js +128 -0
- package/dist/src/hooks/message.js.map +1 -0
- package/dist/src/hooks/session.d.ts +20 -0
- package/dist/src/hooks/session.d.ts.map +1 -0
- package/dist/src/hooks/session.js +121 -0
- package/dist/src/hooks/session.js.map +1 -0
- package/dist/src/hooks/tool.d.ts +23 -0
- package/dist/src/hooks/tool.d.ts.map +1 -0
- package/dist/src/hooks/tool.js +168 -0
- package/dist/src/hooks/tool.js.map +1 -0
- package/dist/src/index.d.ts +31 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +176 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/shared/client.d.ts +27 -0
- package/dist/src/shared/client.d.ts.map +1 -0
- package/dist/src/shared/client.js +69 -0
- package/dist/src/shared/client.js.map +1 -0
- package/dist/src/shared/formatters.d.ts +33 -0
- package/dist/src/shared/formatters.d.ts.map +1 -0
- package/dist/src/shared/formatters.js +187 -0
- package/dist/src/shared/formatters.js.map +1 -0
- package/dist/src/shared/observation.d.ts +59 -0
- package/dist/src/shared/observation.d.ts.map +1 -0
- package/dist/src/shared/observation.js +406 -0
- package/dist/src/shared/observation.js.map +1 -0
- package/dist/src/shared/state.d.ts +66 -0
- package/dist/src/shared/state.d.ts.map +1 -0
- package/dist/src/shared/state.js +144 -0
- package/dist/src/shared/state.js.map +1 -0
- package/dist/src/shared/types.d.ts +141 -0
- package/dist/src/shared/types.d.ts.map +1 -0
- package/dist/src/shared/types.js +9 -0
- package/dist/src/shared/types.js.map +1 -0
- package/opencode.example.json +15 -0
- package/package.json +52 -0
- package/src/commands/recall.md +55 -0
- package/src/commands/remember.md +37 -0
- package/src/commands/setup.md +47 -0
- package/src/commands/status.md +59 -0
- package/src/hooks/event.ts +63 -0
- package/src/hooks/message.ts +147 -0
- package/src/hooks/session.ts +127 -0
- package/src/hooks/tool.ts +207 -0
- package/src/index.ts +197 -0
- package/src/shared/client.ts +73 -0
- package/src/shared/formatters.ts +237 -0
- package/src/shared/observation.ts +447 -0
- package/src/shared/state.ts +159 -0
- package/src/shared/types.ts +144 -0
- 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":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AACxE,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAG5B,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,cAAc,CAAC,CAAC;AAClD,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;AAEtD,0BAA0B;AAC1B,MAAM,aAAa,GAAc;IAC/B,kBAAkB,EAAE,KAAK;CAC1B,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,aAAa;IAC3B,IAAI,CAAC;QACH,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC5B,OAAO,EAAE,GAAG,aAAa,EAAE,CAAC;QAC9B,CAAC;QACD,MAAM,IAAI,GAAG,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAC/C,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAc,CAAC;IACvC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,GAAG,aAAa,EAAE,CAAC;IAC9B,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,KAAgB;IAC7C,IAAI,CAAC;QACH,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC3B,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5C,CAAC;QACD,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC5D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,CAAC,CAAC;IACtD,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,KAAa;IAC1C,MAAM,KAAK,GAAG,aAAa,EAAE,CAAC;IAC9B,KAAK,CAAC,kBAAkB,GAAG,IAAI,CAAC;IAChC,KAAK,CAAC,YAAY,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC9C,KAAK,CAAC,eAAe,GAAG,KAAK,CAAC;IAC9B,MAAM,OAAO,GAAG,KAAK,CAAC,qBAAqB,IAAI,EAAE,CAAC;IAClD,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACpB,KAAK,CAAC,qBAAqB,GAAG,OAAO,CAAC;IACtC,cAAc,CAAC,KAAK,CAAC,CAAC;AACxB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB;IACnC,MAAM,KAAK,GAAG,aAAa,EAAE,CAAC;IAC9B,OAAO,KAAK,CAAC,kBAAkB,CAAC;AAClC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,wBAAwB,CAAC,KAAa;IACpD,MAAM,KAAK,GAAG,aAAa,EAAE,CAAC;IAC9B,MAAM,OAAO,GAAG,KAAK,CAAC,qBAAqB,IAAI,EAAE,CAAC;IAClD,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACnE,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,UAAU,CAAC,CAAC;AACvF,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB;IAC/B,MAAM,KAAK,GAAG,aAAa,EAAE,CAAC;IAC9B,KAAK,CAAC,kBAAkB,GAAG,KAAK,CAAC;IACjC,KAAK,CAAC,qBAAqB,GAAG,EAAE,CAAC;IACjC,cAAc,CAAC,KAAK,CAAC,CAAC;AACxB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,KAAa;IAC3C,MAAM,KAAK,GAAG,aAAa,EAAE,CAAC;IAC9B,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC;IAC3B,cAAc,CAAC,KAAK,CAAC,CAAC;AACxB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe;IAC7B,OAAO,aAAa,EAAE,CAAC,YAAY,CAAC;AACtC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAc;IAC7C,MAAM,KAAK,GAAG,aAAa,EAAE,CAAC;IAC9B,KAAK,CAAC,aAAa,GAAG,MAAM,CAAC;IAC7B,cAAc,CAAC,KAAK,CAAC,CAAC;AACxB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB;IAC9B,OAAO,aAAa,EAAE,CAAC,aAAa,CAAC;AACvC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,WAAmB,EAAE,SAAkB;IACvE,MAAM,KAAK,GAAG,aAAa,EAAE,CAAC;IAC9B,KAAK,CAAC,WAAW,GAAG,WAAW,CAAC;IAChC,KAAK,CAAC,SAAS,GAAG,SAAS,CAAC;IAC5B,cAAc,CAAC,KAAK,CAAC,CAAC;AACxB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc;IAC5B,OAAO,aAAa,EAAE,CAAC,WAAW,CAAC;AACrC,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAe;IAC9C,mEAAmE;IACnE,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC;IACxD,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,+BAA+B;IAC/B,OAAO,aAAa,EAAE,CAAC,SAAS,CAAC;AACnC,CAAC"}
|
|
@@ -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":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAG3F,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE,CAAC;AAOnD,qDAAqD;AACrD,MAAM,WAAW,WAAW;IAC1B,0BAA0B;IAC1B,MAAM,EAAE,OAAO,CAAC;IAChB,uBAAuB;IACvB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,gCAAgC;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,wBAAwB;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,0BAA0B;IAC1B,SAAS,EAAE,GAAG,CAAC;IACf,yBAAyB;IACzB,CAAC,EAAE,OAAO,CAAC;CACZ;AAED,uDAAuD;AACvD,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEpD,yCAAyC;AACzC,MAAM,WAAW,IAAI;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,uBAAuB;AACvB,MAAM,WAAW,KAAK;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,0DAA0D;IAC1D,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,KAAK,EAAE,aAAa,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAE3D,wDAAwD;IACxD,oCAAoC,CAAC,EAAE,CACrC,KAAK,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,KAAK,CAAA;KAAE,EAC3C,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE,KACzB,OAAO,CAAC,IAAI,CAAC,CAAC;IAEnB,gDAAgD;IAChD,cAAc,CAAC,EAAE,CACf,KAAK,EAAE;QACL,SAAS,EAAE,MAAM,CAAC;QAClB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE;YAAE,UAAU,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE,CAAC;QAChD,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,EACD,MAAM,EAAE;QAAE,OAAO,EAAE,WAAW,CAAC;QAAC,KAAK,EAAE,IAAI,EAAE,CAAA;KAAE,KAC5C,OAAO,CAAC,IAAI,CAAC,CAAC;IAEnB,6CAA6C;IAC7C,qBAAqB,CAAC,EAAE,CACtB,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAC1D,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,KACtC,OAAO,CAAC,IAAI,CAAC,CAAC;IAEnB,0CAA0C;IAC1C,oBAAoB,CAAC,EAAE,CACrB,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,EACzF,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,KACzE,OAAO,CAAC,IAAI,CAAC,CAAC;IAEnB,+CAA+C;IAC/C,iCAAiC,CAAC,EAAE,CAClC,KAAK,EAAE;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,EAC5B,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,EAAE,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,KAC3C,OAAO,CAAC,IAAI,CAAC,CAAC;IAEnB,uDAAuD;IACvD,WAAW,CAAC,EAAE,CACZ,KAAK,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,EAC3D,MAAM,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,KACpC,OAAO,CAAC,IAAI,CAAC,CAAC;IAEnB,4BAA4B;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAE/B,+BAA+B;IAC/B,wBAAwB,CAAC,EAAE,CACzB,KAAK,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,EAChE,MAAM,EAAE;QAAE,KAAK,EAAE,IAAI,EAAE,CAAA;KAAE,KACtB,OAAO,CAAC,IAAI,CAAC,CAAC;CACpB;AAED,+BAA+B;AAC/B,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACrC;AAED,6BAA6B;AAC7B,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,IAAI,EAAE,CAAC;CACf;AAMD,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;CACxB"}
|
|
@@ -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
|