@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
|
+

|
|
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
|
+

|
|
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
|
+

|
|
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
|
+

|
|
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.
|
|
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.
|
|
4
|
-
"
|
|
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
|
|
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
|
+
}
|
package/openclaw.plugin.json
CHANGED
|
@@ -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.
|
|
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.
|
|
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
|
|
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
|
|