opcode-pg-memory 2.2.7 → 2.3.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/dist/cli.js +21 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +30 -20981
- package/dist/index.js.map +1 -0
- package/dist/mcp-server.js +26 -6
- package/dist/mcp-server.js.map +1 -0
- package/dist/src/cache/semantic-cache.js +399 -0
- package/dist/src/cache/semantic-cache.js.map +1 -0
- package/dist/src/cli.js +404 -0
- package/dist/src/cli.js.map +1 -0
- package/dist/src/config.d.ts +5 -0
- package/dist/src/config.d.ts.map +1 -1
- package/dist/src/config.js +89 -0
- package/dist/src/config.js.map +1 -0
- package/dist/src/db/init-db.js +545 -0
- package/dist/src/db/init-db.js.map +1 -0
- package/dist/src/hooks/message-part-updated.js +203 -0
- package/dist/src/hooks/message-part-updated.js.map +1 -0
- package/dist/src/hooks/message-updated.js +347 -0
- package/dist/src/hooks/message-updated.js.map +1 -0
- package/dist/src/hooks/session-compacting.js +179 -0
- package/dist/src/hooks/session-compacting.js.map +1 -0
- package/dist/src/hooks/session-completed.js +337 -0
- package/dist/src/hooks/session-completed.js.map +1 -0
- package/dist/src/hooks/session-created.js +206 -0
- package/dist/src/hooks/session-created.js.map +1 -0
- package/dist/src/hooks/tool-execute.js +267 -0
- package/dist/src/hooks/tool-execute.js.map +1 -0
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +643 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/mcp/hindsight-reflect-omo.js +318 -0
- package/dist/src/mcp/hindsight-reflect-omo.js.map +1 -0
- package/dist/src/mcp/hindsight-reflect.js +838 -0
- package/dist/src/mcp/hindsight-reflect.js.map +1 -0
- package/dist/src/mcp/recall-memory-omo.js +263 -0
- package/dist/src/mcp/recall-memory-omo.js.map +1 -0
- package/dist/src/mcp/recall-memory.d.ts +6 -0
- package/dist/src/mcp/recall-memory.d.ts.map +1 -1
- package/dist/src/mcp/recall-memory.js +900 -0
- package/dist/src/mcp/recall-memory.js.map +1 -0
- package/dist/src/omo/adapter.js +583 -0
- package/dist/src/omo/adapter.js.map +1 -0
- package/dist/src/omo/types.js +44 -0
- package/dist/src/omo/types.js.map +1 -0
- package/dist/src/services/db-polling.d.ts +30 -0
- package/dist/src/services/db-polling.d.ts.map +1 -0
- package/dist/src/services/db-polling.js +97 -0
- package/dist/src/services/db-polling.js.map +1 -0
- package/dist/src/services/event-synchronizer.d.ts +15 -0
- package/dist/src/services/event-synchronizer.d.ts.map +1 -0
- package/dist/src/services/event-synchronizer.js +119 -0
- package/dist/src/services/event-synchronizer.js.map +1 -0
- package/dist/src/services/keyword.js +29 -0
- package/dist/src/services/keyword.js.map +1 -0
- package/dist/src/services/logger.js +42 -0
- package/dist/src/services/logger.js.map +1 -0
- package/dist/src/services/opencode-schema-adapter.d.ts +34 -0
- package/dist/src/services/opencode-schema-adapter.d.ts.map +1 -0
- package/dist/src/services/opencode-schema-adapter.js +96 -0
- package/dist/src/services/opencode-schema-adapter.js.map +1 -0
- package/dist/src/services/privacy.js +23 -0
- package/dist/src/services/privacy.js.map +1 -0
- package/dist/src/topic/segment-manager.js +447 -0
- package/dist/src/topic/segment-manager.js.map +1 -0
- package/dist/src/types.d.ts +20 -2
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/types.js +8 -0
- package/dist/src/types.js.map +1 -0
- package/dist/src/utils/embedding.js +180 -0
- package/dist/src/utils/embedding.js.map +1 -0
- package/dist/src/utils/token-budget.js +152 -0
- package/dist/src/utils/token-budget.js.map +1 -0
- package/package.json +6 -6
package/dist/src/cli.js
ADDED
|
@@ -0,0 +1,404 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
4
|
+
if (k2 === undefined) k2 = k;
|
|
5
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
6
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
7
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
8
|
+
}
|
|
9
|
+
Object.defineProperty(o, k2, desc);
|
|
10
|
+
}) : (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
o[k2] = m[k];
|
|
13
|
+
}));
|
|
14
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
15
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
16
|
+
}) : function(o, v) {
|
|
17
|
+
o["default"] = v;
|
|
18
|
+
});
|
|
19
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
20
|
+
var ownKeys = function(o) {
|
|
21
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
22
|
+
var ar = [];
|
|
23
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
24
|
+
return ar;
|
|
25
|
+
};
|
|
26
|
+
return ownKeys(o);
|
|
27
|
+
};
|
|
28
|
+
return function (mod) {
|
|
29
|
+
if (mod && mod.__esModule) return mod;
|
|
30
|
+
var result = {};
|
|
31
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
32
|
+
__setModuleDefault(result, mod);
|
|
33
|
+
return result;
|
|
34
|
+
};
|
|
35
|
+
})();
|
|
36
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
37
|
+
const node_fs_1 = require("node:fs");
|
|
38
|
+
const node_path_1 = require("node:path");
|
|
39
|
+
const node_os_1 = require("node:os");
|
|
40
|
+
const OPENCODE_CONFIG_DIR = (0, node_path_1.join)((0, node_os_1.homedir)(), ".config", "opencode");
|
|
41
|
+
const OPENCODE_COMMAND_DIR = (0, node_path_1.join)(OPENCODE_CONFIG_DIR, "command");
|
|
42
|
+
const OPENCODE_SKILLS_DIR = (0, node_path_1.join)((0, node_os_1.homedir)(), ".config", "opencode", "skills");
|
|
43
|
+
const PLUGIN_NAME = "opcode-pg-memory";
|
|
44
|
+
const REPO_URL = "https://github.com/Vbs313/opcode-pg-memory";
|
|
45
|
+
const OPENCODE_CACHE_DIR = (0, node_path_1.join)((0, node_os_1.homedir)(), ".cache", "opencode", "packages", "opcode-pg-memory@latest");
|
|
46
|
+
const PG_MEMORY_INIT_COMMAND = `---
|
|
47
|
+
description: Initialize pg-memory with codebase knowledge
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
# Initializing PG Memory
|
|
51
|
+
|
|
52
|
+
You are bootstrapping the pg-memory plugin for this project. This plugin provides:
|
|
53
|
+
|
|
54
|
+
- **Semantic memory search** via recall_memory MCP tool
|
|
55
|
+
- **Automatic observation recording** from tool executions
|
|
56
|
+
- **Topic segmentation** within sessions
|
|
57
|
+
- **Cross-session reflection** via hindsight_reflect
|
|
58
|
+
|
|
59
|
+
## Steps
|
|
60
|
+
|
|
61
|
+
1. Run \`recall_memory\` with a test query to verify connectivity
|
|
62
|
+
2. The plugin will automatically start recording observations as you work
|
|
63
|
+
3. After significant work, run \`hindsight_reflect\` to generate reflections
|
|
64
|
+
|
|
65
|
+
## Setup Verification
|
|
66
|
+
\`\`\`bash
|
|
67
|
+
opencode --print-logs --log-level INFO | findstr "PG Memory"
|
|
68
|
+
\`\`\`
|
|
69
|
+
`;
|
|
70
|
+
// Helper: strip JSONC comments (copied from supermemory pattern)
|
|
71
|
+
function stripJsoncComments(content) {
|
|
72
|
+
return content
|
|
73
|
+
.replace(/\/\/.*$/gm, "") // single-line
|
|
74
|
+
.replace(/\/\*[\s\S]*?\*\//g, ""); // multi-line
|
|
75
|
+
}
|
|
76
|
+
function findOpencodeConfig() {
|
|
77
|
+
const candidates = [
|
|
78
|
+
(0, node_path_1.join)(OPENCODE_CONFIG_DIR, "opencode.jsonc"),
|
|
79
|
+
(0, node_path_1.join)(OPENCODE_CONFIG_DIR, "opencode.json"),
|
|
80
|
+
];
|
|
81
|
+
for (const path of candidates) {
|
|
82
|
+
if ((0, node_fs_1.existsSync)(path))
|
|
83
|
+
return path;
|
|
84
|
+
}
|
|
85
|
+
return null;
|
|
86
|
+
}
|
|
87
|
+
function addPluginToConfig(configPath) {
|
|
88
|
+
try {
|
|
89
|
+
const content = (0, node_fs_1.readFileSync)(configPath, "utf-8");
|
|
90
|
+
if (content.includes(PLUGIN_NAME)) {
|
|
91
|
+
console.log("Plugin already registered");
|
|
92
|
+
return true;
|
|
93
|
+
}
|
|
94
|
+
const jsonContent = stripJsoncComments(content);
|
|
95
|
+
let config;
|
|
96
|
+
try {
|
|
97
|
+
config = JSON.parse(jsonContent);
|
|
98
|
+
}
|
|
99
|
+
catch {
|
|
100
|
+
console.error("Failed to parse config");
|
|
101
|
+
return false;
|
|
102
|
+
}
|
|
103
|
+
const plugins = config.plugin || [];
|
|
104
|
+
plugins.push(PLUGIN_NAME);
|
|
105
|
+
config.plugin = plugins;
|
|
106
|
+
if (configPath.endsWith(".jsonc")) {
|
|
107
|
+
if (content.includes('"plugin"')) {
|
|
108
|
+
const newContent = content.replace(/("plugin"\s*:\s*\[)([^\]]*?)(\])/, (_match, start, middle, end) => {
|
|
109
|
+
const trimmed = middle.trim();
|
|
110
|
+
return trimmed === ""
|
|
111
|
+
? `${start}\n "${PLUGIN_NAME}"\n ${end}`
|
|
112
|
+
: `${start}${middle.trimEnd()},\n "${PLUGIN_NAME}"\n ${end}`;
|
|
113
|
+
});
|
|
114
|
+
(0, node_fs_1.writeFileSync)(configPath, newContent);
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
const newContent = content.replace(/^(\s*\{)/, `$1\n "plugin": ["${PLUGIN_NAME}"],`);
|
|
118
|
+
(0, node_fs_1.writeFileSync)(configPath, newContent);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
(0, node_fs_1.writeFileSync)(configPath, JSON.stringify(config, null, 2));
|
|
123
|
+
}
|
|
124
|
+
console.log(`Added plugin to ${configPath}`);
|
|
125
|
+
return true;
|
|
126
|
+
}
|
|
127
|
+
catch (err) {
|
|
128
|
+
console.error("Failed to update config:", err);
|
|
129
|
+
return false;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
function createNewConfig() {
|
|
133
|
+
const configPath = (0, node_path_1.join)(OPENCODE_CONFIG_DIR, "opencode.jsonc");
|
|
134
|
+
(0, node_fs_1.mkdirSync)(OPENCODE_CONFIG_DIR, { recursive: true });
|
|
135
|
+
const config = `{\n "plugin": ["${PLUGIN_NAME}"]\n}\n`;
|
|
136
|
+
(0, node_fs_1.writeFileSync)(configPath, config);
|
|
137
|
+
console.log(`Created ${configPath}`);
|
|
138
|
+
return true;
|
|
139
|
+
}
|
|
140
|
+
function createInitCommand() {
|
|
141
|
+
(0, node_fs_1.mkdirSync)(OPENCODE_COMMAND_DIR, { recursive: true });
|
|
142
|
+
const initPath = (0, node_path_1.join)(OPENCODE_COMMAND_DIR, "pg-memory-init.md");
|
|
143
|
+
(0, node_fs_1.writeFileSync)(initPath, PG_MEMORY_INIT_COMMAND);
|
|
144
|
+
console.log("Created /pg-memory-init command");
|
|
145
|
+
return true;
|
|
146
|
+
}
|
|
147
|
+
const PG_MEMORY_SYNC_COMMAND = `---
|
|
148
|
+
description: Sync OpenCode sessions from SQLite to PostgreSQL
|
|
149
|
+
---
|
|
150
|
+
|
|
151
|
+
# PG Memory Sync
|
|
152
|
+
|
|
153
|
+
Run this command to sync historical OpenCode sessions into the pg-memory database:
|
|
154
|
+
|
|
155
|
+
\`\`\`bash
|
|
156
|
+
bunx opcode-pg-memory sync
|
|
157
|
+
\`\`\`
|
|
158
|
+
|
|
159
|
+
This imports all historical OpenCode sessions into the pg-memory PostgreSQL database for future retrieval.
|
|
160
|
+
`;
|
|
161
|
+
function createSyncCommand() {
|
|
162
|
+
(0, node_fs_1.mkdirSync)(OPENCODE_COMMAND_DIR, { recursive: true });
|
|
163
|
+
const syncPath = (0, node_path_1.join)(OPENCODE_COMMAND_DIR, "pg-memory-sync.md");
|
|
164
|
+
(0, node_fs_1.writeFileSync)(syncPath, PG_MEMORY_SYNC_COMMAND);
|
|
165
|
+
console.log("Created /pg-memory-sync command");
|
|
166
|
+
return true;
|
|
167
|
+
}
|
|
168
|
+
const PG_MEMORY_REFLECT_COMMAND = `---
|
|
169
|
+
description: Reflect on current session to extract patterns and insights
|
|
170
|
+
---
|
|
171
|
+
|
|
172
|
+
# PG Memory Reflect
|
|
173
|
+
|
|
174
|
+
Summarize and reflect on the current session to extract reusable patterns, lessons, and insights.
|
|
175
|
+
|
|
176
|
+
## Instructions
|
|
177
|
+
|
|
178
|
+
1. Determine the current session ID
|
|
179
|
+
2. Call the \`hindsight_reflect\` MCP tool with the session ID
|
|
180
|
+
3. Present the results in a clear format: error patterns, tool usage, success patterns, recommendations
|
|
181
|
+
`;
|
|
182
|
+
function createReflectCommand() {
|
|
183
|
+
(0, node_fs_1.mkdirSync)(OPENCODE_COMMAND_DIR, { recursive: true });
|
|
184
|
+
const reflectPath = (0, node_path_1.join)(OPENCODE_COMMAND_DIR, "pg-memory-reflect.md");
|
|
185
|
+
(0, node_fs_1.writeFileSync)(reflectPath, PG_MEMORY_REFLECT_COMMAND);
|
|
186
|
+
console.log("Created /pg-memory-reflect command");
|
|
187
|
+
return true;
|
|
188
|
+
}
|
|
189
|
+
const PG_MEMORY_NOTE_COMMAND = `---
|
|
190
|
+
description: Record an observation for the current session
|
|
191
|
+
---
|
|
192
|
+
|
|
193
|
+
# PG Memory Note
|
|
194
|
+
|
|
195
|
+
Record the recent work as an observation in the pg-memory database.
|
|
196
|
+
|
|
197
|
+
Determine the current session ID, then insert:
|
|
198
|
+
\`\`\`bash
|
|
199
|
+
psql -h localhost -U opencode -d PGOMO -c "INSERT INTO observations (session_map_id, tool_name, tool_input_summary, tool_output_summary, importance) SELECT sm.id, 'TOOL_NAME', 'INPUT_SUMMARY', 'RESULT_SUMMARY', IMPORTANCE FROM session_map sm WHERE sm.opencode_session_id = 'ses_SESSION_ID';"
|
|
200
|
+
\`\`\`
|
|
201
|
+
`;
|
|
202
|
+
function createNoteCommand() {
|
|
203
|
+
(0, node_fs_1.mkdirSync)(OPENCODE_COMMAND_DIR, { recursive: true });
|
|
204
|
+
const notePath = (0, node_path_1.join)(OPENCODE_COMMAND_DIR, "pg-memory-note.md");
|
|
205
|
+
(0, node_fs_1.writeFileSync)(notePath, PG_MEMORY_NOTE_COMMAND);
|
|
206
|
+
console.log("Created /pg-memory-note command");
|
|
207
|
+
return true;
|
|
208
|
+
}
|
|
209
|
+
const PG_MEMORY_SKILL = `# pg-memory — Long-term Memory for OpenCode
|
|
210
|
+
|
|
211
|
+
You have access to persistent long-term memory via the pg-memory plugin. Use it to search historical knowledge and reflect on completed work.
|
|
212
|
+
|
|
213
|
+
## Available Tools
|
|
214
|
+
|
|
215
|
+
### recall_memory — Search Historical Memories
|
|
216
|
+
Search for relevant entities, observations, and reflections from past sessions.
|
|
217
|
+
Call BEFORE starting any new task.
|
|
218
|
+
- recall_memory({ query: "your task goal" })
|
|
219
|
+
|
|
220
|
+
### hindsight_reflect — Summarize Session
|
|
221
|
+
Extract reusable patterns and lessons.
|
|
222
|
+
Call AFTER completing significant work.
|
|
223
|
+
- hindsight_reflect({ trigger_type: "manual" })
|
|
224
|
+
|
|
225
|
+
## Best Practice
|
|
226
|
+
Always call recall_memory(query=<current task goal>) before working on a new problem.
|
|
227
|
+
`;
|
|
228
|
+
function createSkill() {
|
|
229
|
+
(0, node_fs_1.mkdirSync)(OPENCODE_SKILLS_DIR, { recursive: true });
|
|
230
|
+
const skillPath = (0, node_path_1.join)(OPENCODE_SKILLS_DIR, "pg-memory.md");
|
|
231
|
+
(0, node_fs_1.writeFileSync)(skillPath, PG_MEMORY_SKILL);
|
|
232
|
+
console.log("Created pg-memory skill");
|
|
233
|
+
return true;
|
|
234
|
+
}
|
|
235
|
+
const PG_MEMORY_AGENTS_TEMPLATE = `# PG Memory — Long-term Memory System
|
|
236
|
+
|
|
237
|
+
本项目已安装 pg-memory 插件。你有以下记忆工具可用:
|
|
238
|
+
|
|
239
|
+
## 自动功能(无需你调用)
|
|
240
|
+
- 工具执行记录 — 每次工具调用自动保存为观察
|
|
241
|
+
- 实体提取 — 从代码中自动提取函数、类、文件等实体
|
|
242
|
+
- 话题段隔离 — 话题切换时自动分段
|
|
243
|
+
- 首条消息注入 — 新会话自动注入历史相关记忆
|
|
244
|
+
|
|
245
|
+
## 手动工具
|
|
246
|
+
- recall_memory({ query: "你的任务目标" }) — 处理新任务前检索历史经验
|
|
247
|
+
- /pg-memory-reflect — 完成重要工作后总结模式
|
|
248
|
+
|
|
249
|
+
## OmO 子代理策略
|
|
250
|
+
OmO 子代理无 MCP 直接访问。主代理应先调用 recall_memory 再将结果传给子代理。
|
|
251
|
+
`;
|
|
252
|
+
function createAgentsTemplate() {
|
|
253
|
+
(0, node_fs_1.mkdirSync)(OPENCODE_SKILLS_DIR, { recursive: true });
|
|
254
|
+
const agentsPath = (0, node_path_1.join)(OPENCODE_SKILLS_DIR, "pg-memory-agents.template.md");
|
|
255
|
+
(0, node_fs_1.writeFileSync)(agentsPath, PG_MEMORY_AGENTS_TEMPLATE);
|
|
256
|
+
console.log("Created AGENTS.md template (copy to project root)");
|
|
257
|
+
return true;
|
|
258
|
+
}
|
|
259
|
+
function printHelp() {
|
|
260
|
+
console.log(`
|
|
261
|
+
pg-memory - PostgreSQL-backed long-term memory for OpenCode
|
|
262
|
+
|
|
263
|
+
Commands:
|
|
264
|
+
install Register plugin and create commands
|
|
265
|
+
sync Sync OpenCode sessions from SQLite to PostgreSQL
|
|
266
|
+
|
|
267
|
+
Examples:
|
|
268
|
+
bunx opcode-pg-memory install
|
|
269
|
+
bunx opcode-pg-memory sync
|
|
270
|
+
git clone ${REPO_URL} && cd opcode-pg-memory && bun run build
|
|
271
|
+
|
|
272
|
+
After installation, configure the MCP server in opencode.jsonc:
|
|
273
|
+
"mcp": {
|
|
274
|
+
"pg-memory": {
|
|
275
|
+
"type": "local",
|
|
276
|
+
"command": ["bun", "path/to/dist/mcp-server.js"],
|
|
277
|
+
"enabled": true,
|
|
278
|
+
"environment": { ... }
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
`);
|
|
282
|
+
}
|
|
283
|
+
const args = process.argv.slice(2);
|
|
284
|
+
const cmd = args[0];
|
|
285
|
+
if (!cmd || cmd === "help" || cmd === "--help" || cmd === "-h") {
|
|
286
|
+
printHelp();
|
|
287
|
+
process.exit(0);
|
|
288
|
+
}
|
|
289
|
+
function populateOpencodeCache() {
|
|
290
|
+
// When running via `bunx opcode-pg-memory`, __dirname is inside the npm tgz
|
|
291
|
+
// Copy dist/ files to OpenCode's package cache so the plugin loads from npm name
|
|
292
|
+
const cacheDist = (0, node_path_1.join)(OPENCODE_CACHE_DIR, "dist");
|
|
293
|
+
const sourceDist = (0, node_path_1.join)(__dirname, "..", "dist");
|
|
294
|
+
if (!(0, node_fs_1.existsSync)(sourceDist)) {
|
|
295
|
+
console.log(" dist/ not found at", sourceDist, "- plugin not running from npm package, skipping cache");
|
|
296
|
+
return false;
|
|
297
|
+
}
|
|
298
|
+
if (!(0, node_fs_1.existsSync)(cacheDist)) {
|
|
299
|
+
(0, node_fs_1.mkdirSync)(cacheDist, { recursive: true });
|
|
300
|
+
}
|
|
301
|
+
function copyDir(src, dest) {
|
|
302
|
+
(0, node_fs_1.mkdirSync)(dest, { recursive: true });
|
|
303
|
+
for (const entry of (0, node_fs_1.readdirSync)(src)) {
|
|
304
|
+
const srcPath = (0, node_path_1.join)(src, entry);
|
|
305
|
+
const destPath = (0, node_path_1.join)(dest, entry);
|
|
306
|
+
if ((0, node_fs_1.statSync)(srcPath).isDirectory()) {
|
|
307
|
+
copyDir(srcPath, destPath);
|
|
308
|
+
}
|
|
309
|
+
else {
|
|
310
|
+
(0, node_fs_1.copyFileSync)(srcPath, destPath);
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
copyDir(sourceDist, cacheDist);
|
|
315
|
+
console.log(` Populated OpenCode cache: ${cacheDist}`);
|
|
316
|
+
// Also copy config files needed by the cache
|
|
317
|
+
const cacheDir = OPENCODE_CACHE_DIR;
|
|
318
|
+
const sourceFiles = [".env.example", "README.md", "LICENSE", "scripts/migration-v2.sql", "package.json"];
|
|
319
|
+
for (const file of sourceFiles) {
|
|
320
|
+
const srcFile = (0, node_path_1.join)(__dirname, "..", file);
|
|
321
|
+
const destFile = (0, node_path_1.join)(cacheDir, file);
|
|
322
|
+
const destDir = (0, node_path_1.dirname)(destFile);
|
|
323
|
+
if ((0, node_fs_1.existsSync)(srcFile)) {
|
|
324
|
+
(0, node_fs_1.mkdirSync)(destDir, { recursive: true });
|
|
325
|
+
(0, node_fs_1.copyFileSync)(srcFile, destFile);
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
return true;
|
|
329
|
+
}
|
|
330
|
+
if (cmd === "install") {
|
|
331
|
+
console.log("\nOpenCode PG Memory installer\n");
|
|
332
|
+
const configPath = findOpencodeConfig();
|
|
333
|
+
if (configPath) {
|
|
334
|
+
console.log(`Found config: ${configPath}`);
|
|
335
|
+
addPluginToConfig(configPath);
|
|
336
|
+
}
|
|
337
|
+
else {
|
|
338
|
+
console.log("No config found, creating...");
|
|
339
|
+
createNewConfig();
|
|
340
|
+
}
|
|
341
|
+
createInitCommand();
|
|
342
|
+
createSyncCommand();
|
|
343
|
+
createReflectCommand();
|
|
344
|
+
createNoteCommand();
|
|
345
|
+
createSkill();
|
|
346
|
+
createAgentsTemplate();
|
|
347
|
+
populateOpencodeCache();
|
|
348
|
+
console.log("\nSetup complete!");
|
|
349
|
+
console.log("\nNext steps:");
|
|
350
|
+
console.log(` 1. cd ${process.cwd()}`);
|
|
351
|
+
console.log(" 2. cp .env.example .env && edit .env");
|
|
352
|
+
console.log(" 3. bun install && bun run build");
|
|
353
|
+
console.log(" 4. Restart OpenCode\n");
|
|
354
|
+
process.exit(0);
|
|
355
|
+
}
|
|
356
|
+
if (cmd === "sync") {
|
|
357
|
+
syncSessions().then(code => process.exit(code));
|
|
358
|
+
}
|
|
359
|
+
async function syncSessions() {
|
|
360
|
+
console.log("\nSyncing OpenCode sessions to PostgreSQL...\n");
|
|
361
|
+
try {
|
|
362
|
+
// @ts-ignore - bun:sqlite is a built-in bun module
|
|
363
|
+
const { Database } = await Promise.resolve().then(() => __importStar(require("bun:sqlite")));
|
|
364
|
+
const { Pool } = await Promise.resolve().then(() => __importStar(require("pg")));
|
|
365
|
+
const opencodeDb = (0, node_path_1.join)((0, node_os_1.homedir)(), ".local", "share", "opencode", "opencode.db");
|
|
366
|
+
if (!(0, node_fs_1.existsSync)(opencodeDb)) {
|
|
367
|
+
console.error("OpenCode database not found at:", opencodeDb);
|
|
368
|
+
return 1;
|
|
369
|
+
}
|
|
370
|
+
const sqlite = new Database(opencodeDb);
|
|
371
|
+
const rows = sqlite.query("SELECT id, title FROM session").all();
|
|
372
|
+
console.log(`OpenCode sessions: ${rows.length}`);
|
|
373
|
+
const pgPool = new Pool({
|
|
374
|
+
host: process.env.PG_HOST || "localhost",
|
|
375
|
+
port: parseInt(process.env.PG_PORT || "5432"),
|
|
376
|
+
database: process.env.PG_DATABASE || "PGOMO",
|
|
377
|
+
user: process.env.PG_USER || "opencode",
|
|
378
|
+
password: process.env.PG_PASSWORD || "",
|
|
379
|
+
});
|
|
380
|
+
const existing = await pgPool.query("SELECT opencode_session_id FROM session_map");
|
|
381
|
+
const existingIds = new Set(existing.rows.map((r) => r.opencode_session_id));
|
|
382
|
+
console.log(`PG sessions: ${existingIds.size}`);
|
|
383
|
+
let inserted = 0;
|
|
384
|
+
for (const row of rows) {
|
|
385
|
+
if (!existingIds.has(row.id)) {
|
|
386
|
+
await pgPool.query("INSERT INTO session_map (opencode_session_id) VALUES ($1) ON CONFLICT DO NOTHING", [row.id]);
|
|
387
|
+
inserted++;
|
|
388
|
+
console.log(` + ${row.id} ${(row.title || "").substring(0, 50)}`);
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
console.log(`\nInserted: ${inserted}, Total: ${existingIds.size + inserted}`);
|
|
392
|
+
await pgPool.end();
|
|
393
|
+
sqlite.close();
|
|
394
|
+
return 0;
|
|
395
|
+
}
|
|
396
|
+
catch (err) {
|
|
397
|
+
console.error("Sync failed:", err.message);
|
|
398
|
+
return 1;
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
console.error(`Unknown command: ${cmd}`);
|
|
402
|
+
printHelp();
|
|
403
|
+
process.exit(1);
|
|
404
|
+
//# sourceMappingURL=cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/src/config.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { SyncMode } from "./types";
|
|
1
2
|
export interface PgMemoryConfig {
|
|
2
3
|
pgHost?: string;
|
|
3
4
|
pgPort?: number;
|
|
@@ -12,6 +13,8 @@ export interface PgMemoryConfig {
|
|
|
12
13
|
maxMemories?: number;
|
|
13
14
|
logLevel?: "debug" | "info" | "warn" | "error";
|
|
14
15
|
compactionThreshold?: number;
|
|
16
|
+
syncMode?: SyncMode;
|
|
17
|
+
pollingIntervalMs?: number;
|
|
15
18
|
}
|
|
16
19
|
export declare const CONFIG: {
|
|
17
20
|
pgHost: string;
|
|
@@ -27,6 +30,8 @@ export declare const CONFIG: {
|
|
|
27
30
|
maxMemories: number;
|
|
28
31
|
logLevel: "debug" | "info" | "warn" | "error";
|
|
29
32
|
compactionThreshold: number;
|
|
33
|
+
syncMode: SyncMode;
|
|
34
|
+
pollingIntervalMs: number;
|
|
30
35
|
};
|
|
31
36
|
export declare function isConfigured(): boolean;
|
|
32
37
|
export declare function getDatabaseConfig(): {
|
package/dist/src/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAUxC,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,QAAQ,GAAG,UAAU,GAAG,QAAQ,CAAC;IACrD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;IAC/C,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAgDD,eAAO,MAAM,MAAM;;;;;;uBAMoG,QAAQ,GAAG,UAAU,GAAG,QAAQ;;;;;;cAM1D,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO;;cAE5C,QAAQ;;CAE3F,CAAC;AAEF,wBAAgB,YAAY,IAAI,OAAO,CAEtC;AAED,wBAAgB,iBAAiB;;;;;;EAQhC"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CONFIG = void 0;
|
|
4
|
+
exports.isConfigured = isConfigured;
|
|
5
|
+
exports.getDatabaseConfig = getDatabaseConfig;
|
|
6
|
+
/**
|
|
7
|
+
* Centralized configuration for pg-memory plugin.
|
|
8
|
+
*
|
|
9
|
+
* Priority: env vars > ~/.config/opencode/pg-memory.jsonc > defaults
|
|
10
|
+
* Pattern: follows opencode-supermemory config.ts
|
|
11
|
+
*/
|
|
12
|
+
const node_fs_1 = require("node:fs");
|
|
13
|
+
const node_path_1 = require("node:path");
|
|
14
|
+
const node_os_1 = require("node:os");
|
|
15
|
+
const CONFIG_DIR = (0, node_path_1.join)((0, node_os_1.homedir)(), ".config", "opencode");
|
|
16
|
+
const CONFIG_FILES = [
|
|
17
|
+
(0, node_path_1.join)(CONFIG_DIR, "pg-memory.jsonc"),
|
|
18
|
+
(0, node_path_1.join)(CONFIG_DIR, "pg-memory.json"),
|
|
19
|
+
];
|
|
20
|
+
// ── Defaults ──────────────────────────────────────────
|
|
21
|
+
const DEFAULTS = {
|
|
22
|
+
pgHost: "localhost",
|
|
23
|
+
pgPort: 5432,
|
|
24
|
+
pgDatabase: "PGOMO",
|
|
25
|
+
pgUser: "opencode",
|
|
26
|
+
embeddingProvider: "ollama",
|
|
27
|
+
embeddingModel: "qwen3-embedding:0.6b",
|
|
28
|
+
embeddingDimensions: 1024,
|
|
29
|
+
embeddingBatchSize: 10,
|
|
30
|
+
similarityThreshold: 0.6,
|
|
31
|
+
maxMemories: 10,
|
|
32
|
+
logLevel: "info",
|
|
33
|
+
compactionThreshold: 0.80,
|
|
34
|
+
syncMode: "hybrid",
|
|
35
|
+
pollingIntervalMs: 5000,
|
|
36
|
+
};
|
|
37
|
+
// ── Helpers ───────────────────────────────────────────
|
|
38
|
+
function stripJsoncComments(content) {
|
|
39
|
+
return content
|
|
40
|
+
.replace(/\/\/.*$/gm, "")
|
|
41
|
+
.replace(/\/\*[\s\S]*?\*\//g, "");
|
|
42
|
+
}
|
|
43
|
+
function loadFileConfig() {
|
|
44
|
+
for (const path of CONFIG_FILES) {
|
|
45
|
+
if ((0, node_fs_1.existsSync)(path)) {
|
|
46
|
+
try {
|
|
47
|
+
const content = (0, node_fs_1.readFileSync)(path, "utf-8");
|
|
48
|
+
const json = stripJsoncComments(content);
|
|
49
|
+
return JSON.parse(json);
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
// invalid config, fall through to defaults
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return {};
|
|
57
|
+
}
|
|
58
|
+
const fileConfig = loadFileConfig();
|
|
59
|
+
// ── Exported Config ───────────────────────────────────
|
|
60
|
+
exports.CONFIG = {
|
|
61
|
+
pgHost: process.env.PG_HOST || fileConfig.pgHost || DEFAULTS.pgHost,
|
|
62
|
+
pgPort: parseInt(process.env.PG_PORT || String(fileConfig.pgPort || DEFAULTS.pgPort), 10),
|
|
63
|
+
pgDatabase: process.env.PG_DATABASE || fileConfig.pgDatabase || DEFAULTS.pgDatabase,
|
|
64
|
+
pgUser: process.env.PG_USER || fileConfig.pgUser || DEFAULTS.pgUser,
|
|
65
|
+
pgPassword: process.env.PG_PASSWORD || fileConfig.pgPassword || "",
|
|
66
|
+
embeddingProvider: (process.env.EMBEDDING_PROVIDER || fileConfig.embeddingProvider || DEFAULTS.embeddingProvider),
|
|
67
|
+
embeddingModel: process.env.EMBEDDING_MODEL || fileConfig.embeddingModel || DEFAULTS.embeddingModel,
|
|
68
|
+
embeddingDimensions: parseInt(process.env.EMBEDDING_DIMENSIONS || String(fileConfig.embeddingDimensions || DEFAULTS.embeddingDimensions), 10),
|
|
69
|
+
embeddingBatchSize: parseInt(process.env.EMBEDDING_BATCH_SIZE || String(fileConfig.embeddingBatchSize || DEFAULTS.embeddingBatchSize), 10),
|
|
70
|
+
similarityThreshold: fileConfig.similarityThreshold ?? DEFAULTS.similarityThreshold,
|
|
71
|
+
maxMemories: fileConfig.maxMemories ?? DEFAULTS.maxMemories,
|
|
72
|
+
logLevel: (process.env.PG_MEMORY_LOG_LEVEL || fileConfig.logLevel || DEFAULTS.logLevel),
|
|
73
|
+
compactionThreshold: fileConfig.compactionThreshold ?? DEFAULTS.compactionThreshold,
|
|
74
|
+
syncMode: (process.env.PG_MEMORY_SYNC_MODE || fileConfig.syncMode || 'hybrid'),
|
|
75
|
+
pollingIntervalMs: parseInt(process.env.PG_MEMORY_POLL_INTERVAL || String(fileConfig.pollingIntervalMs || '5000'), 10),
|
|
76
|
+
};
|
|
77
|
+
function isConfigured() {
|
|
78
|
+
return !!exports.CONFIG.pgPassword;
|
|
79
|
+
}
|
|
80
|
+
function getDatabaseConfig() {
|
|
81
|
+
return {
|
|
82
|
+
host: exports.CONFIG.pgHost,
|
|
83
|
+
port: exports.CONFIG.pgPort,
|
|
84
|
+
database: exports.CONFIG.pgDatabase,
|
|
85
|
+
user: exports.CONFIG.pgUser,
|
|
86
|
+
password: exports.CONFIG.pgPassword,
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"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"}
|