refactor(opencode): native SDK tools, drop MCP, trim skills, expand telemetry
Reworks @mem0/opencode-plugin to expose memory operations as native OpenCode tools (via the @opencode-ai/plugin `tool()` helper, backed by the mem0ai SDK) instead of delegating to the remote MCP server. Skills load via the `config` hook (`skills.paths`) instead of being copied into the project `.opencode/`. - Drop MCP: remove the regex-based MCP tool interception, the bundled opencode.json MCP registration, and the cli.ts installer (mem0-opencode bin). - Native tools: add_memory, search_memories, get_memories, get_memory, update_memory, delete_memory, delete_all_memories, delete_entities, list_entities, get_event_status. - Trim skills 16 -> 8 (context-loader, dream, forget, health, peek, pin, remember, tour); remove import, export, memory-reviewer, mem0, list-projects, switch-project, stats, onboard. De-MCP/onboard wording in kept skills. - Telemetry: emit the full shared plugin.* schema (adds user_prompt, bash_error, pre_compact, session_stop alongside session_start, tool_use); tool_use now fires from inside each native tool; add project_hash + os_version props. - Fix duplicate error-search (single topK:6); correct the documented experimental.chat.messages.transform hook name. - Bump to 0.2.0.
This commit is contained in:
@@ -13,11 +13,13 @@
|
||||
* installs without a key emit nothing). Disable with MEM0_TELEMETRY=false.
|
||||
*
|
||||
* Never sends: memory content, API keys, raw user/project IDs. Only sends:
|
||||
* event type, platform, plugin version, anonymized hash of the API key.
|
||||
* event type, platform, plugin version, and anonymized hashes of the API key
|
||||
* and project ID.
|
||||
*/
|
||||
|
||||
import { createHash } from "node:crypto";
|
||||
import { readFileSync } from "node:fs";
|
||||
import { release } from "node:os";
|
||||
|
||||
const POSTHOG_API_KEY = "phc_hgJkUVJFYtmaJqrvf6CYN67TIQ8yhXAkWzUn9AMU4yX";
|
||||
const POSTHOG_HOST = "https://us.i.posthog.com/i/v0/e/";
|
||||
@@ -62,6 +64,7 @@ export function buildEvent(
|
||||
eventType: string,
|
||||
properties: Record<string, unknown>,
|
||||
apiKey: string | undefined,
|
||||
projectId?: string,
|
||||
): Record<string, unknown> | null {
|
||||
if (!isTelemetryEnabled() || !apiKey) return null;
|
||||
return {
|
||||
@@ -74,9 +77,14 @@ export function buildEvent(
|
||||
platform: "opencode",
|
||||
plugin_version: PLUGIN_VERSION,
|
||||
os: process.platform,
|
||||
os_version: release(),
|
||||
sample_rate: 1.0,
|
||||
$process_person_profile: false,
|
||||
$lib: "posthog-node",
|
||||
// Anonymized project segmentation, matching telemetry.py's project_hash.
|
||||
...(projectId
|
||||
? { project_hash: createHash("sha256").update(projectId).digest("hex") }
|
||||
: {}),
|
||||
},
|
||||
};
|
||||
}
|
||||
@@ -86,8 +94,9 @@ export function captureEvent(
|
||||
eventType: string,
|
||||
properties: Record<string, unknown>,
|
||||
apiKey: string | undefined,
|
||||
projectId?: string,
|
||||
): void {
|
||||
const payload = buildEvent(eventType, properties, apiKey);
|
||||
const payload = buildEvent(eventType, properties, apiKey, projectId);
|
||||
if (!payload) return;
|
||||
try {
|
||||
void fetch(POSTHOG_HOST, {
|
||||
|
||||
Reference in New Issue
Block a user