@basicmemory/openclaw-basic-memory 0.1.0-alpha.2 → 0.1.0-alpha.8

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 CHANGED
@@ -55,6 +55,17 @@ If `uv` is not installed, the `bm` CLI setup is skipped gracefully during instal
55
55
  bash ~/.openclaw/extensions/openclaw-basic-memory/scripts/setup-bm.sh
56
56
  ```
57
57
 
58
+ ### Basic Memory Cloud
59
+
60
+ Everything works locally — cloud adds cross-device, team, and production capabilities:
61
+
62
+ - **Your agent's memory travels with you** — same knowledge graph on laptop, desktop, and hosted environments
63
+ - **Team knowledge sharing** — org workspaces let multiple agents and team members build on a shared knowledge base
64
+ - **Durable memory for production agents** — persistent memory that survives CI teardowns and container restarts
65
+ - **Multi-agent coordination** — multiple agents can read and write to the same graph
66
+
67
+ Cloud extends local-first — still plain markdown, still yours. Start with a [7-day free trial](https://basicmemory.com) and use code `BMCLAW` for 20% off for 3 months. See [BASIC_MEMORY.md](./BASIC_MEMORY.md) for cloud setup.
68
+
58
69
  ### Development (local directory)
59
70
 
60
71
  For plugin development, clone and link locally:
@@ -287,17 +298,6 @@ After each agent turn (when `autoCapture: true`), the plugin:
287
298
  2. Appends them as timestamped entries to a daily conversation note (`conversations-YYYY-MM-DD`)
288
299
  3. Skips very short exchanges (< `captureMinChars` chars each, default 10)
289
300
 
290
- ### Basic Memory Cloud
291
-
292
- Everything works locally — cloud adds cross-device, team, and production capabilities:
293
-
294
- - **Your agent's memory travels with you** — same knowledge graph on laptop, desktop, and hosted environments
295
- - **Team knowledge sharing** — org workspaces let multiple agents and team members build on a shared knowledge base
296
- - **Durable memory for production agents** — persistent memory that survives CI teardowns and container restarts
297
- - **Multi-agent coordination** — multiple agents can read and write to the same graph
298
-
299
- Cloud extends local-first — still plain markdown, still yours. Start with a [7-day free trial](https://basicmemory.com) and use code `BMCLAW` for 20% off for 3 months. See [BASIC_MEMORY.md](./BASIC_MEMORY.md) for setup, or visit [basicmemory.com](https://basicmemory.com) for more info.
300
-
301
301
  ## Agent Tools
302
302
 
303
303
  All content tools accept an optional `project` parameter to operate on a different project than the default (cross-project operations).
package/config.ts CHANGED
@@ -6,6 +6,11 @@ export type CloudConfig = {
6
6
  api_key: string
7
7
  }
8
8
 
9
+ export type DashboardConfig = {
10
+ enabled: boolean
11
+ port: number
12
+ }
13
+
9
14
  export type BasicMemoryConfig = {
10
15
  project: string
11
16
  bmPath: string
@@ -18,6 +23,7 @@ export type BasicMemoryConfig = {
18
23
  recallPrompt: string
19
24
  debug: boolean
20
25
  cloud?: CloudConfig
26
+ dashboard: DashboardConfig
21
27
  }
22
28
 
23
29
  const ALLOWED_KEYS = [
@@ -37,6 +43,7 @@ const ALLOWED_KEYS = [
37
43
  "recall_prompt",
38
44
  "debug",
39
45
  "cloud",
46
+ "dashboard",
40
47
  ]
41
48
 
42
49
  function assertAllowedKeys(
@@ -106,6 +113,22 @@ export function parseConfig(raw: unknown): BasicMemoryConfig {
106
113
  }
107
114
  }
108
115
 
116
+ let dashboard: DashboardConfig = { enabled: false, port: 3838 }
117
+ if (
118
+ cfg.dashboard &&
119
+ typeof cfg.dashboard === "object" &&
120
+ !Array.isArray(cfg.dashboard)
121
+ ) {
122
+ const d = cfg.dashboard as Record<string, unknown>
123
+ dashboard = {
124
+ enabled: typeof d.enabled === "boolean" ? d.enabled : false,
125
+ port:
126
+ typeof d.port === "number" && d.port > 0 && d.port < 65536
127
+ ? d.port
128
+ : 3838,
129
+ }
130
+ }
131
+
109
132
  return {
110
133
  project:
111
134
  typeof cfg.project === "string" && cfg.project.length > 0
@@ -144,6 +167,7 @@ export function parseConfig(raw: unknown): BasicMemoryConfig {
144
167
  : "Check for active tasks and recent activity. Summarize anything relevant to the current session.",
145
168
  debug: typeof cfg.debug === "boolean" ? cfg.debug : false,
146
169
  cloud,
170
+ dashboard,
147
171
  }
148
172
  }
149
173
 
package/index.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import type { Server } from "node:http"
1
2
  import type { OpenClawPluginApi } from "openclaw/plugin-sdk"
2
3
  import { BmClient } from "./bm-client.ts"
3
4
  import { registerCli } from "./commands/cli.ts"
@@ -8,6 +9,7 @@ import {
8
9
  parseConfig,
9
10
  resolveProjectPath,
10
11
  } from "./config.ts"
12
+ import { createDashboardServer } from "./dashboard/server.ts"
11
13
  import { buildCaptureHandler } from "./hooks/capture.ts"
12
14
  import { buildRecallHandler } from "./hooks/recall.ts"
13
15
  import { initLogger, log } from "./logger.ts"
@@ -80,6 +82,8 @@ export default {
80
82
  registerCli(api, client, cfg)
81
83
 
82
84
  // --- Service lifecycle ---
85
+ let dashboardServer: Server | undefined
86
+
83
87
  api.registerService({
84
88
  id: "openclaw-basic-memory",
85
89
  start: async (ctx: { config?: unknown; workspaceDir?: string }) => {
@@ -108,10 +112,30 @@ export default {
108
112
 
109
113
  setWorkspaceDir(workspace)
110
114
 
115
+ // Start dashboard if enabled
116
+ if (cfg.dashboard.enabled) {
117
+ dashboardServer = createDashboardServer({
118
+ port: cfg.dashboard.port,
119
+ client,
120
+ })
121
+ dashboardServer.listen(cfg.dashboard.port, () => {
122
+ log.info(
123
+ `dashboard running at http://localhost:${cfg.dashboard.port}`,
124
+ )
125
+ })
126
+ }
127
+
111
128
  log.info("connected — BM MCP stdio session running")
112
129
  },
113
130
  stop: async () => {
114
131
  log.info("stopping BM MCP session...")
132
+ if (dashboardServer) {
133
+ await new Promise<void>((resolve) =>
134
+ dashboardServer?.close(() => resolve()),
135
+ )
136
+ dashboardServer = undefined
137
+ log.info("dashboard stopped")
138
+ }
115
139
  await client.stop()
116
140
  log.info("stopped")
117
141
  },
@@ -56,6 +56,11 @@
56
56
  "label": "Cloud Backend",
57
57
  "help": "Optional cloud backend config (url + api_key). If present, uses cloud instead of local BM.",
58
58
  "advanced": true
59
+ },
60
+ "dashboard": {
61
+ "label": "Dashboard",
62
+ "help": "Web dashboard for visualizing the knowledge graph (enabled, port)",
63
+ "advanced": true
59
64
  }
60
65
  },
61
66
  "configSchema": {
@@ -76,6 +81,13 @@
76
81
  "url": { "type": "string" },
77
82
  "api_key": { "type": "string" }
78
83
  }
84
+ },
85
+ "dashboard": {
86
+ "type": "object",
87
+ "properties": {
88
+ "enabled": { "type": "boolean" },
89
+ "port": { "type": "number", "minimum": 1, "maximum": 65535 }
90
+ }
79
91
  }
80
92
  },
81
93
  "required": []
package/package.json CHANGED
@@ -1,9 +1,13 @@
1
1
  {
2
2
  "name": "@basicmemory/openclaw-basic-memory",
3
- "version": "0.1.0-alpha.2",
3
+ "version": "0.1.0-alpha.8",
4
4
  "type": "module",
5
5
  "description": "Basic Memory plugin for OpenClaw — local-first knowledge graph for agent memory",
6
6
  "license": "MIT",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "https://github.com/basicmachines-co/openclaw-basic-memory"
10
+ },
7
11
  "files": [
8
12
  "index.ts",
9
13
  "bm-client.ts",