@bamdra/bamdra-user-bind 0.1.10 → 0.1.12

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
@@ -1,9 +1,22 @@
1
1
  # bamdra-user-bind
2
2
 
3
+ ![Bamdra Animated Logo](./docs/assets/bamdra-logo-animated.svg)
4
+
3
5
  The identity and living profile layer for the Bamdra suite.
4
6
 
5
7
  It can run independently, and it is also auto-provisioned by `bamdra-openclaw-memory`.
6
8
 
9
+ Install directly:
10
+
11
+ ```bash
12
+ openclaw plugins install @bamdra/bamdra-user-bind
13
+ ```
14
+
15
+ Release package:
16
+
17
+ - GitHub Releases: https://github.com/bamdra/bamdra-user-bind/releases
18
+ - You can also build a local release bundle with `pnpm package:release`
19
+
7
20
  [中文文档](./README.zh-CN.md)
8
21
 
9
22
  ## What it does
@@ -12,12 +25,20 @@ It can run independently, and it is also auto-provisioned by `bamdra-openclaw-me
12
25
 
13
26
  It also becomes the user's evolving profile layer, including:
14
27
 
15
- - preferred address
28
+ - `userId`-scoped preferred address
16
29
  - timezone
17
30
  - tone preferences
18
31
  - role
19
32
  - long-lived user notes
20
33
 
34
+ ## Profile Policy
35
+
36
+ - `userId` is the primary key for personalization
37
+ - preferred address should live in the bound profile, not in scattered workspace `USER.md` files
38
+ - workspace `USER.md` should stay minimal and only keep environment facts
39
+ - if the current turn explicitly asks for a different address, follow the current turn
40
+ - admin tools are for repair, merge, audit, and sync, not for blind bulk rewriting
41
+
21
42
  ## Why it matters
22
43
 
23
44
  Without an identity layer:
@@ -51,6 +72,11 @@ The Markdown mirror is for humans, so profiles stay editable like a living per-u
51
72
  - keep profile mirrors private
52
73
  - let humans edit the mirror gradually
53
74
  - use admin tools only for audit, merge, repair, and maintenance
75
+ - when updating how someone is addressed, update the bound profile for that `userId` first
76
+
77
+ ## Architecture
78
+
79
+ ![Bamdra Suite Architecture](./docs/assets/architecture-technical-en.svg)
54
80
 
55
81
  ## What it unlocks
56
82
 
@@ -66,3 +92,4 @@ With `bamdra-memory-vector`:
66
92
 
67
93
  - [GitHub organization](https://github.com/bamdra)
68
94
  - [Repository](https://github.com/bamdra/bamdra-user-bind)
95
+ - [Releases](https://github.com/bamdra/bamdra-user-bind/releases)
package/README.zh-CN.md CHANGED
@@ -1,9 +1,22 @@
1
1
  # bamdra-user-bind
2
2
 
3
+ ![Bamdra Animated Logo](./docs/assets/bamdra-logo-animated.svg)
4
+
3
5
  Bamdra 套件中的身份与“活画像”层。
4
6
 
5
7
  它可以独立运行,也会被 `bamdra-openclaw-memory` 自动补齐。
6
8
 
9
+ 单独安装:
10
+
11
+ ```bash
12
+ openclaw plugins install @bamdra/bamdra-user-bind
13
+ ```
14
+
15
+ 发布包下载:
16
+
17
+ - GitHub Releases: https://github.com/bamdra/bamdra-user-bind/releases
18
+ - 本地也可以执行 `pnpm package:release` 生成独立发布包
19
+
7
20
  [English README](./README.md)
8
21
 
9
22
  ## 它做什么
@@ -12,12 +25,20 @@ Bamdra 套件中的身份与“活画像”层。
12
25
 
13
26
  同时,它也会逐渐成为用户持续演化的画像层,包括:
14
27
 
15
- - 应该怎么称呼
28
+ - userid 级别的默认称呼
16
29
  - 时区
17
30
  - 语气偏好
18
31
  - 角色
19
32
  - 长期用户备注
20
33
 
34
+ ## 画像策略
35
+
36
+ - `userId` 是画像的主键
37
+ - 默认称呼应当写入该 `userId` 的画像,而不是散落在各个工作区 `USER.md`
38
+ - `USER.md` 只保留运行环境事实,不负责称呼
39
+ - 当当前会话显式要求不同称呼时,以当前会话为准
40
+ - 管理员只做修复、合并、审计和同步,不做批量越权改写
41
+
21
42
  ## 为什么重要
22
43
 
23
44
  没有身份层时:
@@ -51,6 +72,11 @@ Markdown 镜像则是给人编辑的,让用户画像更像一份活的 per-use
51
72
  - 画像镜像保持私有
52
73
  - 让人逐步维护画像镜像
53
74
  - 管理员能力只用于审计、合并、修复和维护
75
+ - 当你要改称呼时,优先改 `userId` 对应画像,不要去改 workspace 的 `USER.md`
76
+
77
+ ## 架构图
78
+
79
+ ![Bamdra 套件架构图](./docs/assets/architecture-technical-zh.svg)
54
80
 
55
81
  ## 它能解锁什么
56
82
 
@@ -66,3 +92,4 @@ Markdown 镜像则是给人编辑的,让用户画像更像一份活的 per-use
66
92
 
67
93
  - [GitHub 首页](https://github.com/bamdra)
68
94
  - [仓库地址](https://github.com/bamdra/bamdra-user-bind)
95
+ - [Releases](https://github.com/bamdra/bamdra-user-bind/releases)
@@ -3,10 +3,13 @@
3
3
  "type": "tool",
4
4
  "name": "Bamdra User Bind",
5
5
  "description": "Identity resolution, user profile binding, and admin profile tools for OpenClaw channels.",
6
- "version": "0.1.0",
6
+ "version": "0.1.12",
7
7
  "main": "./index.js",
8
+ "skills": [
9
+ "./skills"
10
+ ],
8
11
  "configSchema": {
9
12
  "type": "object",
10
13
  "additionalProperties": true
11
14
  }
12
- }
15
+ }
package/dist/package.json CHANGED
@@ -1,12 +1,41 @@
1
1
  {
2
2
  "name": "@bamdra/bamdra-user-bind",
3
- "version": "0.1.0",
4
- "private": true,
3
+ "version": "0.1.12",
4
+ "description": "Identity resolution, user profile binding, and admin-safe profile tools for OpenClaw channels.",
5
+ "license": "MIT",
6
+ "homepage": "https://www.bamdra.com",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "git+https://github.com/bamdra/bamdra-user-bind.git"
10
+ },
11
+ "bugs": {
12
+ "url": "https://github.com/bamdra/bamdra-user-bind/issues"
13
+ },
5
14
  "type": "commonjs",
6
15
  "main": "./index.js",
7
16
  "types": "./dist/index.d.ts",
17
+ "files": [
18
+ "dist",
19
+ "skills",
20
+ "openclaw.plugin.json",
21
+ "README.md",
22
+ "LICENSE"
23
+ ],
24
+ "keywords": [
25
+ "openclaw",
26
+ "openclaw-plugin",
27
+ "identity",
28
+ "user-profile",
29
+ "feishu",
30
+ "memory"
31
+ ],
32
+ "engines": {
33
+ "node": ">=22"
34
+ },
8
35
  "scripts": {
9
- "bundle": "node ../../scripts/run-local-bin.mjs tsup && node ../../scripts/prepare-plugin-dist.mjs bamdra-user-bind"
36
+ "bundle": "node ../bamdra-openclaw-memory/scripts/run-local-bin.mjs tsup && node -e \"const fs=require('node:fs');const path='./dist/index.js';const text=fs.readFileSync(path,'utf8').replace(/require\\\\(\\\"sqlite\\\"\\\\)/g,'require(\\\"node:sqlite\\\")');fs.writeFileSync(path,text);\" && node ./scripts/prepare-plugin-dist.mjs",
37
+ "prepublishOnly": "pnpm run bundle",
38
+ "package:release": "node ./scripts/package-release.mjs"
10
39
  },
11
40
  "openclaw": {
12
41
  "id": "bamdra-user-bind",
@@ -22,8 +51,11 @@
22
51
  "default": "./dist/index.js"
23
52
  }
24
53
  },
54
+ "publishConfig": {
55
+ "access": "public"
56
+ },
25
57
  "dependencies": {},
26
58
  "devDependencies": {
27
59
  "@types/node": "^24.5.2"
28
60
  }
29
- }
61
+ }
@@ -3,7 +3,7 @@
3
3
  "type": "tool",
4
4
  "name": "Bamdra User Bind",
5
5
  "description": "Identity resolution, user profile binding, and admin profile tools for OpenClaw channels.",
6
- "version": "0.1.10",
6
+ "version": "0.1.12",
7
7
  "main": "./dist/index.js",
8
8
  "skills": ["./skills"],
9
9
  "configSchema": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bamdra/bamdra-user-bind",
3
- "version": "0.1.10",
3
+ "version": "0.1.12",
4
4
  "description": "Identity resolution, user profile binding, and admin-safe profile tools for OpenClaw channels.",
5
5
  "license": "MIT",
6
6
  "homepage": "https://www.bamdra.com",
@@ -33,8 +33,9 @@
33
33
  "node": ">=22"
34
34
  },
35
35
  "scripts": {
36
- "bundle": "node ../bamdra-openclaw-memory/scripts/run-local-bin.mjs tsup && node -e \"const fs=require('node:fs');const path='./dist/index.js';const text=fs.readFileSync(path,'utf8').replace(/require\\\\(\\\"sqlite\\\"\\\\)/g,'require(\\\"node:sqlite\\\")');fs.writeFileSync(path,text);\"",
37
- "prepublishOnly": "pnpm run bundle"
36
+ "bundle": "node ../bamdra-openclaw-memory/scripts/run-local-bin.mjs tsup && node -e \"const fs=require('node:fs');const path='./dist/index.js';const text=fs.readFileSync(path,'utf8').replace(/require\\\\(\\\"sqlite\\\"\\\\)/g,'require(\\\"node:sqlite\\\")');fs.writeFileSync(path,text);\" && node ./scripts/prepare-plugin-dist.mjs",
37
+ "prepublishOnly": "pnpm run bundle",
38
+ "package:release": "node ./scripts/package-release.mjs"
38
39
  },
39
40
  "openclaw": {
40
41
  "id": "bamdra-user-bind",
@@ -12,7 +12,7 @@ Its purpose is operational: inspect user bindings, repair incorrect profile fiel
12
12
  ## Allowed Jobs
13
13
 
14
14
  - query a specific user profile or binding by `userId`
15
- - correct nickname, role, timezone, preferences, or personality fields
15
+ - correct nickname, role, timezone, preferences, personality fields, or preferred address
16
16
  - merge duplicate user records
17
17
  - inspect sync failures and identity resolution issues
18
18
  - request a resync for a known user
@@ -31,6 +31,7 @@ Use the admin tools in natural language:
31
31
 
32
32
  - “查询 user:u_123 的画像和绑定关系”
33
33
  - “把 user:u_123 的称呼改成老板,时区改成 Asia/Shanghai”
34
+ - “把 user:u_123 的默认称呼改成丰哥”
34
35
  - “合并 user:u_old 到 user:u_new”
35
36
  - “列出最近的绑定失败问题”
36
37
 
@@ -24,12 +24,15 @@ The runtime profile comes from `bamdra-user-bind`.
24
24
 
25
25
  Humans can edit the Markdown mirror for the current user, and the plugin will sync that into the controlled store. Treat the bound profile as more authoritative than guesswork.
26
26
 
27
+ Keep per-user address preferences in the bound profile instead of `USER.md`. `USER.md` should stay minimal and only carry environment facts that are not identity-specific.
28
+
27
29
  ## Behavior Rules
28
30
 
29
31
  - personalize naturally when the stored profile clearly helps
30
32
  - use the stored nickname if the user has not asked for a different form of address in the current turn
31
33
  - respect the stored timezone for scheduling, reminders, dates, and time-sensitive explanations
32
34
  - prefer the stored tone/style preferences when shaping responses
35
+ - if the profile contains a preferred address, treat it as the default greeting and do not duplicate it in workspace-level `USER.md`
33
36
  - if the current turn conflicts with the stored profile, follow the current turn
34
37
  - do not invent profile traits that are not present
35
38