@log0u7/opencode-memory 0.1.1 → 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.
- package/CHANGELOG.md +19 -0
- package/README.md +11 -5
- package/dist/index.d.ts +6 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -2
- package/dist/index.js.map +1 -1
- package/dist/lib/store.d.ts +0 -1
- package/dist/lib/store.d.ts.map +1 -1
- package/dist/lib/store.js +1 -1
- package/dist/lib/store.js.map +1 -1
- package/dist/plugin-v2.d.ts +3 -0
- package/dist/plugin-v2.d.ts.map +1 -0
- package/dist/plugin-v2.js +174 -0
- package/dist/plugin-v2.js.map +1 -0
- package/dist/plugin.d.ts +6 -0
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +7 -10
- package/dist/plugin.js.map +1 -1
- package/dist/types/entry.d.ts +1 -1
- package/dist/types/entry.d.ts.map +1 -1
- package/package.json +6 -5
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,25 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.2.0] - 2026-10-12
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- Dual-export plugin entry for OpenCode 2: one published package runs on both
|
|
15
|
+
OpenCode 1.18 and 2.x (official migration pattern, "Support V1 and V2 from
|
|
16
|
+
one package"). v1 hosts call `server()` (unchanged); v2 hosts call `setup()`
|
|
17
|
+
(`Plugin.define`). Both entries drive the same engine.
|
|
18
|
+
|
|
19
|
+
## [0.1.2] - 2026-09-23
|
|
20
|
+
|
|
21
|
+
### Removed
|
|
22
|
+
|
|
23
|
+
- Over-engineering audit cuts: duplicated `Row` type reused via `Omit<Entry, "tags">`, `dbPath`/`defaultDbPath` merged into one function, `V1PluginModule` alias inlined, `EntryKind` fake union replaced with plain `string` (kind is free-form by design), `validateEntry` unexported (internal-only).
|
|
24
|
+
|
|
25
|
+
### Changed
|
|
26
|
+
|
|
27
|
+
- Install docs describe opencode auto-install into its plugin cache; global npm/pnpm/mise installs are not used for plugin loading.
|
|
28
|
+
|
|
10
29
|
## [0.1.1] - 2026-09-23
|
|
11
30
|
|
|
12
31
|
### Changed
|
package/README.md
CHANGED
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
[](https://github.com/log0u7/opencode-memory/actions/workflows/ci.yml)
|
|
4
4
|
[](https://www.npmjs.com/package/@log0u7/opencode-memory)
|
|
5
|
+
[](https://www.npmjs.com/package/@log0u7/opencode-memory)
|
|
6
|
+
[](https://github.com/log0u7/opencode-memory/blob/main/package.json)
|
|
5
7
|
[](LICENSE)
|
|
6
8
|
|
|
7
9
|
Working memory for [OpenCode](https://opencode.ai): a shared SQLite store that all sessions on a machine read and write, so decisions, facts, and compaction summaries survive session boundaries.
|
|
@@ -10,11 +12,7 @@ Every session gets four tools (`memory_save`, `memory_search`, `memory_list`, `m
|
|
|
10
12
|
|
|
11
13
|
## Install
|
|
12
14
|
|
|
13
|
-
|
|
14
|
-
npm install -g @log0u7/opencode-memory
|
|
15
|
-
```
|
|
16
|
-
|
|
17
|
-
Then register the plugin in `opencode.json`:
|
|
15
|
+
Register the plugin in `opencode.json` (project or global `~/.config/opencode/opencode.json`):
|
|
18
16
|
|
|
19
17
|
```json
|
|
20
18
|
{
|
|
@@ -24,6 +22,14 @@ Then register the plugin in `opencode.json`:
|
|
|
24
22
|
|
|
25
23
|
Restart OpenCode. That is it: the store lives at `~/.local/share/opencode-memory/memory.db` (honors `XDG_DATA_HOME`).
|
|
26
24
|
|
|
25
|
+
The package is installed automatically at startup into opencode's plugin cache (`~/.cache/opencode/packages/`); no global npm/pnpm/mise install is needed (opencode does not consult global installs for plugins). Pin a version if you want upgrades to be explicit:
|
|
26
|
+
|
|
27
|
+
```json
|
|
28
|
+
{
|
|
29
|
+
"plugin": ["@log0u7/opencode-memory@0.1.1"]
|
|
30
|
+
}
|
|
31
|
+
```
|
|
32
|
+
|
|
27
33
|
Note (npm 12): the package ships no lifecycle install scripts and needs no `allowScripts` / allowlist on install.
|
|
28
34
|
|
|
29
35
|
## Usage
|
package/dist/index.d.ts
CHANGED
|
@@ -5,8 +5,13 @@
|
|
|
5
5
|
*
|
|
6
6
|
* @packageDocumentation
|
|
7
7
|
*/
|
|
8
|
-
|
|
8
|
+
/**
|
|
9
|
+
* Dual entrypoint: v1 hosts call `server()`, v2 hosts call `setup()`
|
|
10
|
+
* (see https://opencode.ai/v2/docs/build/plugins/migrate-v1).
|
|
11
|
+
*/
|
|
12
|
+
export declare const pluginModule: {
|
|
9
13
|
id: string;
|
|
14
|
+
setup: (context: import("@opencode/plugin/promise/plugin").Context) => Promise<import("@opencode/plugin/promise/plugin").Cleanup | void> | import("@opencode/plugin/promise/plugin").Cleanup | void;
|
|
10
15
|
server: import("@opencode-ai/plugin").Plugin;
|
|
11
16
|
};
|
|
12
17
|
export default pluginModule;
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH;;;GAGG;AACH,eAAO,MAAM,YAAY;;;;CAGiE,CAAC;eAE5E,YAAY;AAE3B,YAAY,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAErE,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -5,9 +5,14 @@
|
|
|
5
5
|
*
|
|
6
6
|
* @packageDocumentation
|
|
7
7
|
*/
|
|
8
|
+
import { MemoryV2 } from "./plugin-v2.js";
|
|
8
9
|
import { MemoryPlugin } from "./plugin.js";
|
|
9
|
-
|
|
10
|
-
|
|
10
|
+
/**
|
|
11
|
+
* Dual entrypoint: v1 hosts call `server()`, v2 hosts call `setup()`
|
|
12
|
+
* (see https://opencode.ai/v2/docs/build/plugins/migrate-v1).
|
|
13
|
+
*/
|
|
14
|
+
export const pluginModule = {
|
|
15
|
+
...MemoryV2,
|
|
11
16
|
server: MemoryPlugin,
|
|
12
17
|
};
|
|
13
18
|
export default pluginModule;
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,GAAG,QAAQ;IACX,MAAM,EAAE,YAAY;CACoE,CAAC;AAE3F,eAAe,YAAY,CAAC;AAI5B,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC"}
|
package/dist/lib/store.d.ts
CHANGED
|
@@ -3,7 +3,6 @@ import type { Entry, EntryInput } from "../types/entry.js";
|
|
|
3
3
|
export declare class SecretDetectedError extends Error {
|
|
4
4
|
constructor();
|
|
5
5
|
}
|
|
6
|
-
export declare function validateEntry(input: EntryInput): void;
|
|
7
6
|
export declare function save(db: MemoryDb, input: EntryInput, options?: {
|
|
8
7
|
now?: number;
|
|
9
8
|
}): Entry;
|
package/dist/lib/store.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/lib/store.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAY3D,qBAAa,mBAAoB,SAAQ,KAAK;IAC5C,cAGC;CACF;
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/lib/store.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAY3D,qBAAa,mBAAoB,SAAQ,KAAK;IAC5C,cAGC;CACF;AAqBD,wBAAgB,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,GAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,KAAK,CA+B3F;AAED,wBAAgB,MAAM,CACpB,EAAE,EAAE,QAAQ,EACZ,KAAK,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GACpE,KAAK,EAAE,CAcT;AAED,wBAAgB,IAAI,CAClB,EAAE,EAAE,QAAQ,EACZ,KAAK,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GACrD,KAAK,EAAE,CAaT;AAED,wBAAgB,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAavF"}
|
package/dist/lib/store.js
CHANGED
|
@@ -13,7 +13,7 @@ export class SecretDetectedError extends Error {
|
|
|
13
13
|
this.name = "SecretDetectedError";
|
|
14
14
|
}
|
|
15
15
|
}
|
|
16
|
-
|
|
16
|
+
function validateEntry(input) {
|
|
17
17
|
if (input.title.length === 0 || input.title.length > TITLE_MAX) {
|
|
18
18
|
throw new TypeError(`title must be 1..${TITLE_MAX} characters`);
|
|
19
19
|
}
|
package/dist/lib/store.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/lib/store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAKzC,MAAM,SAAS,GAAG,GAAG,CAAC;AACtB,MAAM,QAAQ,GAAG,IAAI,CAAC;AACtB,MAAM,QAAQ,GAAG,EAAE,CAAC;AAEpB,MAAM,eAAe,GAAG;IACtB,2BAA2B;IAC3B,0BAA0B;IAC1B,0BAA0B;CAC3B,CAAC;AAEF,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IAC5C;QACE,KAAK,CAAC,4EAA4E,CAAC,CAAC;QACpF,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACpC,CAAC;CACF;AAED,
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/lib/store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-v2.d.ts","sourceRoot":"","sources":["../src/plugin-v2.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAa1C,eAAO,MAAM,QAAQ,eA0LnB,CAAC"}
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
import { Plugin } from "@opencode/plugin";
|
|
2
|
+
import { openMemoryDb } from "./lib/db.js";
|
|
3
|
+
import { forget, list, save, search, SecretDetectedError } from "./lib/store.js";
|
|
4
|
+
import { SYSTEM_GUIDANCE, COMPACTION_CONTEXT, defaultDbPath, } from "./plugin.js";
|
|
5
|
+
const textPart = (text) => ({ type: "text", text });
|
|
6
|
+
export const MemoryV2 = Plugin.define({
|
|
7
|
+
id: "@log0u7/opencode-memory",
|
|
8
|
+
async setup(ctx) {
|
|
9
|
+
const options = ctx.options;
|
|
10
|
+
let db = null;
|
|
11
|
+
const getDb = () => {
|
|
12
|
+
if (!db) {
|
|
13
|
+
db = openMemoryDb(defaultDbPath(options));
|
|
14
|
+
}
|
|
15
|
+
return db;
|
|
16
|
+
};
|
|
17
|
+
// Tool results are shown to the model: caught errors become readable text, so
|
|
18
|
+
// a rejected save is guidance instead of a crashed tool call.
|
|
19
|
+
const run = async (fn) => {
|
|
20
|
+
try {
|
|
21
|
+
return fn();
|
|
22
|
+
}
|
|
23
|
+
catch (error) {
|
|
24
|
+
if (error instanceof SecretDetectedError) {
|
|
25
|
+
return "refused: the content looks like a credential; secrets must never be stored in memory";
|
|
26
|
+
}
|
|
27
|
+
if (error instanceof Error) {
|
|
28
|
+
return `error: ${error.message}`;
|
|
29
|
+
}
|
|
30
|
+
throw error;
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
// v1 scoped entries per session worktree; the v2 tool context carries no
|
|
34
|
+
// worktree, so entries default to the plugin location's directory.
|
|
35
|
+
const defaultScope = ctx.location.directory;
|
|
36
|
+
await ctx.tool.transform((editor) => {
|
|
37
|
+
editor.add({
|
|
38
|
+
name: "memory_save",
|
|
39
|
+
description: "Save a durable entry to shared working memory (decisions, facts, preferences, gotchas). Never store credentials.",
|
|
40
|
+
input: {
|
|
41
|
+
type: "object",
|
|
42
|
+
properties: {
|
|
43
|
+
kind: {
|
|
44
|
+
type: "string",
|
|
45
|
+
description: "Entry type, e.g. decision, fact, preference, gotcha",
|
|
46
|
+
},
|
|
47
|
+
title: { type: "string", description: "Short title (max 120 chars)" },
|
|
48
|
+
body: { type: "string", description: "Entry content (max 8000 chars)" },
|
|
49
|
+
scope: { type: "string", description: "Scope key; defaults to the project directory" },
|
|
50
|
+
tags: { type: "array", items: { type: "string" }, description: "Optional tags" },
|
|
51
|
+
expires_at: { type: "number", description: "Optional epoch ms expiry" },
|
|
52
|
+
},
|
|
53
|
+
required: ["kind", "title", "body"],
|
|
54
|
+
additionalProperties: false,
|
|
55
|
+
},
|
|
56
|
+
async execute(args) {
|
|
57
|
+
const a = args;
|
|
58
|
+
return {
|
|
59
|
+
content: await run(() => {
|
|
60
|
+
const entry = save(getDb(), {
|
|
61
|
+
scope: a.scope ?? defaultScope,
|
|
62
|
+
kind: a.kind,
|
|
63
|
+
title: a.title,
|
|
64
|
+
body: a.body,
|
|
65
|
+
tags: a.tags ?? [],
|
|
66
|
+
expires_at: a.expires_at ?? null,
|
|
67
|
+
});
|
|
68
|
+
return `saved ${entry.id} (${entry.scope})`;
|
|
69
|
+
}),
|
|
70
|
+
};
|
|
71
|
+
},
|
|
72
|
+
});
|
|
73
|
+
editor.add({
|
|
74
|
+
name: "memory_search",
|
|
75
|
+
description: "Search shared working memory (all sessions on this machine). Results include this project's scope and global entries.",
|
|
76
|
+
input: {
|
|
77
|
+
type: "object",
|
|
78
|
+
properties: {
|
|
79
|
+
query: { type: "string", description: "Free-text query" },
|
|
80
|
+
scope: { type: "string", description: "Scope key; defaults to the project directory" },
|
|
81
|
+
limit: { type: "number", description: "Max results (default 10)" },
|
|
82
|
+
},
|
|
83
|
+
required: ["query"],
|
|
84
|
+
additionalProperties: false,
|
|
85
|
+
},
|
|
86
|
+
async execute(args) {
|
|
87
|
+
const a = args;
|
|
88
|
+
return {
|
|
89
|
+
content: await run(() => {
|
|
90
|
+
const hits = search(getDb(), {
|
|
91
|
+
query: a.query,
|
|
92
|
+
scope: a.scope ?? defaultScope,
|
|
93
|
+
...(a.limit !== undefined ? { limit: a.limit } : {}),
|
|
94
|
+
});
|
|
95
|
+
if (hits.length === 0) {
|
|
96
|
+
return "no matching memory entries";
|
|
97
|
+
}
|
|
98
|
+
return JSON.stringify(hits, null, 2);
|
|
99
|
+
}),
|
|
100
|
+
};
|
|
101
|
+
},
|
|
102
|
+
});
|
|
103
|
+
editor.add({
|
|
104
|
+
name: "memory_list",
|
|
105
|
+
description: "List recent memory entries for a scope (default: the project directory), newest first.",
|
|
106
|
+
input: {
|
|
107
|
+
type: "object",
|
|
108
|
+
properties: {
|
|
109
|
+
scope: { type: "string", description: "Scope key; defaults to the project directory" },
|
|
110
|
+
limit: { type: "number", description: "Max results (default 20)" },
|
|
111
|
+
},
|
|
112
|
+
additionalProperties: false,
|
|
113
|
+
},
|
|
114
|
+
async execute(args) {
|
|
115
|
+
const a = args;
|
|
116
|
+
return {
|
|
117
|
+
content: await run(() => {
|
|
118
|
+
const entries = list(getDb(), {
|
|
119
|
+
scope: a.scope ?? defaultScope,
|
|
120
|
+
...(a.limit !== undefined ? { limit: a.limit } : {}),
|
|
121
|
+
});
|
|
122
|
+
if (entries.length === 0) {
|
|
123
|
+
return "no memory entries";
|
|
124
|
+
}
|
|
125
|
+
return JSON.stringify(entries, null, 2);
|
|
126
|
+
}),
|
|
127
|
+
};
|
|
128
|
+
},
|
|
129
|
+
});
|
|
130
|
+
editor.add({
|
|
131
|
+
name: "memory_forget",
|
|
132
|
+
description: "Delete memory entries by id, or all entries matching a query.",
|
|
133
|
+
input: {
|
|
134
|
+
type: "object",
|
|
135
|
+
properties: {
|
|
136
|
+
id: { type: "string", description: "Entry id to delete" },
|
|
137
|
+
query: { type: "string", description: "Delete every entry matching this query" },
|
|
138
|
+
},
|
|
139
|
+
additionalProperties: false,
|
|
140
|
+
},
|
|
141
|
+
async execute(args) {
|
|
142
|
+
const a = args;
|
|
143
|
+
return {
|
|
144
|
+
content: await run(() => {
|
|
145
|
+
if (a.id !== undefined) {
|
|
146
|
+
const deleted = forget(getDb(), { id: a.id });
|
|
147
|
+
return `deleted ${deleted} entr${deleted === 1 ? "y" : "ies"}`;
|
|
148
|
+
}
|
|
149
|
+
if (a.query !== undefined) {
|
|
150
|
+
const deleted = forget(getDb(), { query: a.query });
|
|
151
|
+
return `deleted ${deleted} entr${deleted === 1 ? "y" : "ies"}`;
|
|
152
|
+
}
|
|
153
|
+
return "provide id or query";
|
|
154
|
+
}),
|
|
155
|
+
};
|
|
156
|
+
},
|
|
157
|
+
});
|
|
158
|
+
});
|
|
159
|
+
// experimental.chat.system.transform -> context hook (edit event.system)
|
|
160
|
+
await ctx.session.hook("context", (event) => {
|
|
161
|
+
event.system.push(textPart(SYSTEM_GUIDANCE));
|
|
162
|
+
});
|
|
163
|
+
// experimental.session.compacting -> compaction hook
|
|
164
|
+
await ctx.session.hook("compaction", (event) => {
|
|
165
|
+
event.system.push(textPart(COMPACTION_CONTEXT));
|
|
166
|
+
});
|
|
167
|
+
const cleanup = async () => {
|
|
168
|
+
db?.close();
|
|
169
|
+
db = null;
|
|
170
|
+
};
|
|
171
|
+
return cleanup;
|
|
172
|
+
},
|
|
173
|
+
});
|
|
174
|
+
//# sourceMappingURL=plugin-v2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-v2.js","sourceRoot":"","sources":["../src/plugin-v2.ts"],"names":[],"mappings":"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"}
|
package/dist/plugin.d.ts
CHANGED
|
@@ -1,3 +1,9 @@
|
|
|
1
1
|
import type { Plugin } from "@opencode-ai/plugin";
|
|
2
|
+
export type PluginOptions = {
|
|
3
|
+
dbPath?: string;
|
|
4
|
+
};
|
|
5
|
+
export declare const SYSTEM_GUIDANCE = "You have persistent working memory shared with all OpenCode sessions on this machine.\nAt the start of a non-trivial task, run memory_search for relevant decisions and facts about this project.\nWhen you make a durable decision or learn a lasting fact, call memory_save (kinds: decision, fact, preference, gotcha).\nNever store credentials, tokens, or API keys in memory; the store refuses them.";
|
|
6
|
+
export declare const COMPACTION_CONTEXT: string;
|
|
7
|
+
export declare function defaultDbPath(options?: PluginOptions): string;
|
|
2
8
|
export declare const MemoryPlugin: Plugin;
|
|
3
9
|
//# sourceMappingURL=plugin.d.ts.map
|
package/dist/plugin.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAS,MAAM,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAS,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAMzD,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,eAAO,MAAM,eAAe,gZAGoD,CAAC;AAEjF,eAAO,MAAM,kBAAkB,QAEoE,CAAC;AAEpG,wBAAgB,aAAa,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,MAAM,CAM7D;AAED,eAAO,MAAM,YAAY,EAAE,MA6H1B,CAAC"}
|
package/dist/plugin.js
CHANGED
|
@@ -1,13 +1,16 @@
|
|
|
1
1
|
import { openMemoryDb } from "./lib/db.js";
|
|
2
2
|
import { forget, list, save, search, SecretDetectedError } from "./lib/store.js";
|
|
3
3
|
import { tool } from "@opencode-ai/plugin";
|
|
4
|
-
const SYSTEM_GUIDANCE = `You have persistent working memory shared with all OpenCode sessions on this machine.
|
|
4
|
+
export const SYSTEM_GUIDANCE = `You have persistent working memory shared with all OpenCode sessions on this machine.
|
|
5
5
|
At the start of a non-trivial task, run memory_search for relevant decisions and facts about this project.
|
|
6
6
|
When you make a durable decision or learn a lasting fact, call memory_save (kinds: decision, fact, preference, gotcha).
|
|
7
7
|
Never store credentials, tokens, or API keys in memory; the store refuses them.`;
|
|
8
|
-
const COMPACTION_CONTEXT = "The session is being compacted. After compaction, call memory_save for every durable decision still relevant " +
|
|
8
|
+
export const COMPACTION_CONTEXT = "The session is being compacted. After compaction, call memory_save for every durable decision still relevant " +
|
|
9
9
|
"(kind=decision) and any newly learned facts (kind=fact), so other sessions keep this knowledge.";
|
|
10
|
-
function defaultDbPath() {
|
|
10
|
+
export function defaultDbPath(options) {
|
|
11
|
+
if (typeof options?.dbPath === "string" && options.dbPath.length > 0) {
|
|
12
|
+
return options.dbPath;
|
|
13
|
+
}
|
|
11
14
|
const dataHome = process.env.XDG_DATA_HOME ?? `${process.env.HOME ?? ""}/.local/share`;
|
|
12
15
|
return `${dataHome}/opencode-memory/memory.db`;
|
|
13
16
|
}
|
|
@@ -15,7 +18,7 @@ export const MemoryPlugin = async (_input, options) => {
|
|
|
15
18
|
let db = null;
|
|
16
19
|
const getDb = () => {
|
|
17
20
|
if (!db) {
|
|
18
|
-
db = openMemoryDb(
|
|
21
|
+
db = openMemoryDb(defaultDbPath(options));
|
|
19
22
|
}
|
|
20
23
|
return db;
|
|
21
24
|
};
|
|
@@ -140,10 +143,4 @@ async function run(fn) {
|
|
|
140
143
|
throw error;
|
|
141
144
|
}
|
|
142
145
|
}
|
|
143
|
-
function dbPath(options) {
|
|
144
|
-
if (typeof options?.dbPath === "string" && options.dbPath.length > 0) {
|
|
145
|
-
return options.dbPath;
|
|
146
|
-
}
|
|
147
|
-
return defaultDbPath();
|
|
148
|
-
}
|
|
149
146
|
//# sourceMappingURL=plugin.js.map
|
package/dist/plugin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAiB,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACjF,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAM3C,MAAM,eAAe,GAAG;;;
|
|
1
|
+
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"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"}
|
package/dist/types/entry.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entry.d.ts","sourceRoot":"","sources":["../../src/types/entry.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"entry.d.ts","sourceRoot":"","sources":["../../src/types/entry.ts"],"names":[],"mappings":"AACA,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC;AAE/B,MAAM,MAAM,KAAK,GAAG;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@log0u7/opencode-memory",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "Working memory for OpenCode: shared SQLite store with hybrid search, shared across all sessions on a machine.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -33,11 +33,12 @@
|
|
|
33
33
|
"node": ">=22.0.0"
|
|
34
34
|
},
|
|
35
35
|
"devDependencies": {
|
|
36
|
-
"@biomejs/biome": "2.5.
|
|
37
|
-
"@opencode-ai/plugin": "1.18.
|
|
38
|
-
"@
|
|
36
|
+
"@biomejs/biome": "2.5.14",
|
|
37
|
+
"@opencode-ai/plugin": "1.18.31",
|
|
38
|
+
"@opencode/plugin": "2.0.26",
|
|
39
|
+
"@types/node": "^26.6.2",
|
|
39
40
|
"@vitest/coverage-v8": "^5.0.1",
|
|
40
|
-
"lefthook": "2.1.
|
|
41
|
+
"lefthook": "2.1.14",
|
|
41
42
|
"typescript": "7.0.2",
|
|
42
43
|
"vitest": "^5.0.0"
|
|
43
44
|
},
|