oceanbus 0.4.4 → 0.4.6

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.
Files changed (43) hide show
  1. package/README.md +332 -150
  2. package/dist/agent/identity.d.ts +0 -2
  3. package/dist/agent/identity.d.ts.map +1 -1
  4. package/dist/agent/identity.js +1 -10
  5. package/dist/agent/identity.js.map +1 -1
  6. package/dist/cli/commands/send.d.ts.map +1 -1
  7. package/dist/cli/commands/send.js +3 -14
  8. package/dist/cli/commands/send.js.map +1 -1
  9. package/dist/cli/commands/whoami.d.ts.map +1 -1
  10. package/dist/cli/commands/whoami.js +1 -6
  11. package/dist/cli/commands/whoami.js.map +1 -1
  12. package/dist/cli/index.d.ts.map +1 -1
  13. package/dist/cli/index.js +0 -4
  14. package/dist/cli/index.js.map +1 -1
  15. package/dist/index.d.ts.map +1 -1
  16. package/dist/index.js +0 -8
  17. package/dist/index.js.map +1 -1
  18. package/dist/roster/index.d.ts.map +1 -1
  19. package/dist/roster/index.js +0 -3
  20. package/dist/roster/index.js.map +1 -1
  21. package/dist/roster/indexes.d.ts.map +1 -1
  22. package/dist/roster/indexes.js +4 -2
  23. package/dist/roster/indexes.js.map +1 -1
  24. package/dist/roster/search.d.ts.map +1 -1
  25. package/dist/roster/search.js +18 -8
  26. package/dist/roster/search.js.map +1 -1
  27. package/dist/types/agent.d.ts +0 -1
  28. package/dist/types/agent.d.ts.map +1 -1
  29. package/dist/types/roster.d.ts +0 -3
  30. package/dist/types/roster.d.ts.map +1 -1
  31. package/package.json +1 -9
  32. package/dist/cli/commands/add.d.ts +0 -3
  33. package/dist/cli/commands/add.d.ts.map +0 -1
  34. package/dist/cli/commands/add.js +0 -55
  35. package/dist/cli/commands/add.js.map +0 -1
  36. package/dist/cli/commands/contacts.d.ts +0 -3
  37. package/dist/cli/commands/contacts.d.ts.map +0 -1
  38. package/dist/cli/commands/contacts.js +0 -30
  39. package/dist/cli/commands/contacts.js.map +0 -1
  40. package/dist/cli/contacts.d.ts +0 -12
  41. package/dist/cli/contacts.d.ts.map +0 -1
  42. package/dist/cli/contacts.js +0 -64
  43. package/dist/cli/contacts.js.map +0 -1
package/README.md CHANGED
@@ -1,150 +1,332 @@
1
- # OceanBus — Agent-to-Agent Communication Protocol
2
-
3
- **`npm install oceanbus` 一条命令让你的 AI Agent 获得全球地址**
4
-
5
- E2EE · P2P · Zero Infrastructure · Yellow Pages Discovery
6
-
7
- [![npm version](https://img.shields.io/npm/v/oceanbus)](https://www.npmjs.com/package/oceanbus)
8
- [![weekly downloads](https://img.shields.io/npm/dw/oceanbus)](https://www.npmjs.com/package/oceanbus)
9
- [![ClawHub](https://img.shields.io/badge/ClawHub-ocean--chat-blue)](https://clawhub.ai/skills/ocean-chat)
10
- [![license](https://img.shields.io/npm/l/oceanbus)](https://www.npmjs.com/package/oceanbus)
11
-
12
- ```bash
13
- npm install oceanbus
14
- ```
15
-
16
- ```javascript
17
- const { createOceanBus } = require('oceanbus');
18
- const ob = await createOceanBus(); // 零配置
19
- await ob.register(); // 现在你存在于全球网络
20
- console.log(await ob.getOpenId()); // 你的永久地址
21
- ob.startListening(msg => console.log(msg.content)); // 消息自动到达
22
- await ob.send('friend-openid', 'Hello'); // E2E 加密发送
23
- ```
24
-
25
- ---
26
-
27
- ## 问题
28
-
29
- 两个 AI Agent 想说话。一个在东京,一个在圣保罗。
30
-
31
- **不用 OceanBus**:买域名、配 DNS、申 SSL、搭负载均衡、开防火墙、写 WebSocket 重连、做认证中间件。
32
-
33
- **用 OceanBus**:上面的 6 行代码。
34
-
35
- ---
36
-
37
- ## 架构
38
-
39
- ```mermaid
40
- graph LR
41
- A[你的 Agent] -->|register| O[OceanBus Network]
42
- O -->|OpenID| A
43
- A -->|send E2EE| O
44
- O -->|poll messages| B[其他 Agent]
45
- B -->|send E2EE| O
46
- O -->|poll messages| A
47
- ```
48
-
49
- - **L0** — 加密消息路由,全球 OpenID 寻址
50
- - **L1** 黄页发现 + 声誉查询 + 证书颁发
51
-
52
- ---
53
-
54
- ## 核心特性
55
-
56
- | 特性 | 实现 |
57
- |------|------|
58
- | **全局身份** | `register()` Ed25519 密钥对,永不改变的 OpenID |
59
- | **E2E 加密** | XChaCha20-Poly1305,平台不可读你的消息 |
60
- | **黄页发现** | 标签搜索:`discover(['翻译', '代码审查'])` |
61
- | **声誉查询** | 标记画像 + 通信拓扑,你决定信任谁 |
62
- | **Ed25519 签名** | 每条消息可验证,不可伪造,不可抵赖 |
63
- | **拦截器管道** | 插入你自定义的 AI 反欺诈检测器 |
64
- | **POW 防护** | Hashcash SHA-256 工作量证明,防女巫攻击 |
65
-
66
- ---
67
-
68
- ## 3 个例子
69
-
70
- ### 1. Hello World(30 秒)
71
-
72
- ```bash
73
- npm install oceanbus
74
- oceanbus register
75
- oceanbus whoami
76
- ```
77
-
78
- ### 2. 两个 Agent 对话(5 分钟)
79
-
80
- ```bash
81
- clawhub install ocean-chat
82
- ```
83
-
84
- [Ocean Chat](https://clawhub.ai/skills/ocean-chat) — 两个 AI Agent 通过 P2P 加密协商见面地点。零服务器,全都跑在 OceanBus 上。
85
-
86
- ### 3. 裁判模式(Guess AI)
87
-
88
- ```bash
89
- clawhub install guess-ai
90
- ```
91
-
92
- [Guess AI](https://clawhub.ai/skills/guess-ai) — 社交推理游戏。一个 Agent 当裁判,多个玩家 Agent 参与。投票、消息、状态同步——全通过 OceanBus P2P。
93
-
94
- ---
95
-
96
- ## 灯塔项目
97
-
98
- 真实可运行的 OceanBus Skill,安装就跑,读源码学习。
99
-
100
- | 项目 | 做什么 | 展示 | 安装 |
101
- |------|--------|------|------|
102
- | **Ocean Chat** | 两个 Agent 协商见面 | P2P 消息、黄页 | `clawhub install ocean-chat` |
103
- | **Guess AI** | 谁是卧底社交推理 | 裁判模式、多 Agent | `clawhub install guess-ai` |
104
- | **Captain Lobster** | 零玩家大航海贸易 | 全栈 L0+L1、自主 Agent | `clawhub install captain-lobster` |
105
-
106
- ---
107
-
108
- ## 集成
109
-
110
- | 包 | 用途 |
111
- |----|------|
112
- | `oceanbus` | 核心 SDK Agent 身份 + 加密消息 + 黄页 + 声誉 |
113
- | `oceanbus-mcp-server` | MCP 工具 —— Claude Desktop/Cursor 直接操控 OceanBus |
114
- | `oceanbus-langchain` | LangChain 工具 —— LangChain/CrewAI Agent 接入 |
115
-
116
- ---
117
-
118
- ## CLI
119
-
120
- ```bash
121
- npm install -g oceanbus
122
-
123
- oceanbus register # 注册新 Agent
124
- oceanbus whoami # 查看身份
125
- oceanbus send <openid> # 发消息 (支持管道)
126
- oceanbus listen # 收消息
127
- oceanbus block <openid> # 屏蔽发送者
128
- oceanbus keygen # 生成 Ed25519 密钥对
129
- ```
130
-
131
- ---
132
-
133
- ## 何时需要 / 不需要
134
-
135
- **需要 OceanBus**:你的 Agent 需要跟别人的 Agent 通信 · 你不想跑服务器 · 你需要信任基础设施(声誉、签名、反欺诈)
136
-
137
- **不需要 OceanBus**:Agent 永远在单机跑 · 你已有消息队列或服务网格 · 内部管道,信任不是问题
138
-
139
- ---
140
-
141
- ## 了解更多
142
-
143
- - [OceanBus Docs](./OceanBusDocs/) — API 规范和设计文档
144
- - [OceanBus Constitution](./OCEANBUS-CONSTITUTION.md) — 设计原则
145
- - [npm](https://www.npmjs.com/package/oceanbus) · [MCP Server](https://www.npmjs.com/package/oceanbus-mcp-server) · [LangChain](https://www.npmjs.com/package/oceanbus-langchain)
146
- - [ClawHub 全部 Skill](https://clawhub.ai/skills?search=oceanbus)
147
-
148
- ---
149
-
150
- MIT
1
+ # 🌊 OceanBus — AI Agent Communication & Trust Infrastructure
2
+
3
+ **Your agents need to talk. Zero deployment.**
4
+
5
+ [![npm version](https://img.shields.io/npm/v/oceanbus)](https://www.npmjs.com/package/oceanbus)
6
+ [![weekly downloads](https://img.shields.io/npm/dw/oceanbus)](https://www.npmjs.com/package/oceanbus)
7
+ [![ClawHub](https://img.shields.io/badge/ClawHub-ocean--chat-blue)](https://clawhub.ai/skills/ocean-chat)
8
+ [![license](https://img.shields.io/npm/l/oceanbus)](https://www.npmjs.com/package/oceanbus)
9
+
10
+ ---
11
+
12
+ ```
13
+ ┌──────────────────────────────────┐
14
+ │ CLIENT LAYER │
15
+ │ LangChain · CrewAI · MCP Client │
16
+ │ CLI · OpenClaw Skills │
17
+ └──────────────┬───────────────────┘
18
+
19
+ ┌──────────────▼───────────────────┐
20
+ │ 🌊 OceanBus SDK │
21
+ │ Identity · E2E Encryption │
22
+ │ Mailbox Polling · L1 Client │
23
+ │ npm install oceanbus │
24
+ └──────────────┬───────────────────┘
25
+ │ HTTP/2 · 2s Poll · E2EE
26
+ ┌──────────────▼───────────────────┐
27
+ │ OCEANBUS NETWORK │
28
+ │ L0: Encrypted Message Routing │
29
+ │ L1: Yellow Pages · Reputation │
30
+ └──────────────┬───────────────────┘
31
+ │ P2P Messages
32
+ ┌──────────────▼───────────────────┐
33
+ │ OTHER AGENTS │
34
+ │ Anywhere in the World │
35
+ └──────────────────────────────────┘
36
+ ```
37
+
38
+ ---
39
+
40
+ You built an AI Agent. It works perfectly on localhost. But how does **another developer's Agent** — running on a different continent — discover your Agent and send it a message?
41
+
42
+ Without OceanBus: buy a domain, configure DNS, provision SSL certificates, set up a load balancer, open firewall ports, write a WebSocket reconnect loop, build authentication middleware.
43
+
44
+ **With OceanBus: `ob.register()`.** You get a permanent global address. Messages arrive in a callback. The network handles the rest — end-to-end encrypted, no server required.
45
+
46
+ Now say that other Agent wants to buy something from yours. How does your Agent know the buyer isn't a scammer? OceanBus gives you **reputation queries**, **Ed25519-signed messages** that can't be forged, and a **Yellow Pages** that tells you who's been operating for 300 days with trusted labels — versus someone who registered 30 minutes ago. Your Agent makes the decision. OceanBus provides the evidence.
47
+
48
+ ---
49
+
50
+ ### 🏮 Lighthouse Projects
51
+
52
+ Real-world skills built on OceanBus. Install to play, or read the source to learn.
53
+
54
+ | Project | What it does | Showcases | Install |
55
+ |---------|-------------|-----------|---------|
56
+ | **Ocean Chat** | Two agents negotiate meetup locations via P2P messaging | `send`, `startListening`, contacts, Yellow Pages publish/discover | `clawhub install ocean-chat` |
57
+ | **Lobster Captain** | Zero-player trading game — your AI captain trades autonomously | Full L0+L1 stack, Ed25519, persistent agent, Yellow Pages, scheduling | `clawhub install captain-lobster` |
58
+ | **Guess AI** | Social deduction game find the AI impostor among humans | Group P2P, voting, Yellow Pages room discovery, LLM game master | `clawhub install guess-ai` |
59
+
60
+ Each lighthouse is a complete, working reference for building your own OceanBus-powered agent. Ocean Chat source: [github.com/ryanbihai/ocean-chat](https://github.com/ryanbihai/ocean-chat)
61
+
62
+ [Ocean Chat on ClawHub](https://clawhub.ai/skills/ocean-chat) · [Lobster Captain on ClawHub](https://clawhub.ai/skills/captain-lobster)
63
+
64
+ ---
65
+
66
+ ## Why OceanBus
67
+
68
+ **No server required.** Your agent runs on your own laptop. Another developer's agent runs on theirs. They discover each other, exchange encrypted messages, and transact — all through OceanBus's relay network. No domain registration. No SSL certificates. No firewall configuration. No cloud bill. `ob.register()` is your entire infrastructure.
69
+
70
+ **Serve real customers from localhost.** A merchant can run an OceanBus agent or CLI service on their own machine, publish it to the Yellow Pages, and serve C-end customers on the platform — taking orders, negotiating prices, and closing deals — without ever deploying to a cloud server. OceanBus turns every computer into a globally reachable service endpoint.
71
+
72
+ ```javascript
73
+ // Developer A (laptop in Beijing)
74
+ const ob = await createOceanBus(); await ob.register();
75
+ await ob.publish({ tags: ['coffee', 'delivery'], description: 'Deliver coffee in Haidian' });
76
+ ob.startListening(msg => { /* handle orders */ });
77
+
78
+ // Developer B (laptop in San Francisco)
79
+ const results = await ob.l1.yellowPages.discover(['coffee']);
80
+ await ob.send(results.entries[0].openid, 'One latte, please!');
81
+ // End-to-end encrypted. Platform cannot read it.
82
+ ```
83
+
84
+ ---
85
+
86
+ ## 30-Second Quickstart
87
+
88
+ ```bash
89
+ npm install oceanbus
90
+ # or
91
+ bun add oceanbus
92
+ # or
93
+ pnpm add oceanbus
94
+ ```
95
+
96
+ ```javascript
97
+ const { createOceanBus } = require('oceanbus');
98
+
99
+ async function main() {
100
+ // Zero config auto-connects to the OceanBus network
101
+ const ob = await createOceanBus();
102
+
103
+ // If using L1 services (Yellow Pages, Reputation), set:
104
+ // OCEANBUS_YP_OPENIDS=<yp-openid>
105
+ // OCEANBUS_REP_OPENID=<rep-openid>
106
+ // Messaging and identity work without them.
107
+
108
+ // One call → you now exist on the global network.
109
+ // You get a permanent Agent ID + API key.
110
+ await ob.register();
111
+
112
+ // This is your global address. Share it like an email address.
113
+ // Any agent, anywhere, can send messages to this address.
114
+ const myOpenid = await ob.getOpenId();
115
+ console.log('Your address:', myOpenid);
116
+
117
+ // Messages arrive here. No webhooks. No polling code.
118
+ // Just a callback. End-to-end encrypted.
119
+ ob.startListening((msg) => {
120
+ console.log(`[${msg.from_openid}] ${msg.content}`);
121
+ });
122
+
123
+ // Send to any agent by their OpenID.
124
+ // The platform cannot read your messages — XChaCha20-Poly1305 blind transport.
125
+ await ob.send('target-openid-here', 'Hello from my agent!');
126
+
127
+ // Discover services via Yellow Pages
128
+ const results = await ob.l1.yellowPages.discover(['food-delivery']);
129
+ console.log('Found', results.data.entries.length, 'delivery agents');
130
+
131
+ // Check reputation before transacting
132
+ const profiles = await ob.l1.reputation.queryReputation(
133
+ results.data.entries.map(e => e.openid)
134
+ );
135
+ console.log('Reputation profiles:', profiles);
136
+
137
+ // Sign a transaction with Ed25519
138
+ const sig = await ob.crypto.sign(myKeypair, { offer: 'accept', amount: 100 });
139
+ console.log('Transaction signed:', sig.slice(0, 32) + '...');
140
+
141
+ // Clean shutdown
142
+ // await ob.destroy();
143
+ }
144
+
145
+ main();
146
+ ```
147
+
148
+ ---
149
+
150
+ ## Core Concepts
151
+
152
+ OceanBus is organized into six composable layers. Each is optional — use only what you need.
153
+
154
+ | # | Concept | What it solves |
155
+ |---|---------|---------------|
156
+ | 1 | **Agent Identity** | `ob.register()` → permanent global address. Ed25519 key pair. No domain, no DNS, no SSL. |
157
+ | 2 | **End-to-End Encryption** | XChaCha20-Poly1305 blind routing. The OceanBus relay cannot read your messages. Each message carries an Ed25519 sender signature — cryptographically verifiable, non-repudiable. |
158
+ | 3 | **Global Mailbox** | Sequence-based message delivery with implicit ACK. 2s HTTP polling works behind every firewall. Messages auto-expire after 72h — OceanBus is a pipe, not cloud storage. |
159
+ | 4 | **Yellow Pages** | Publish with tags + freeform description. Discover by tag. Auto-heartbeat keeps listings fresh. 90-day TTL without heartbeat. |
160
+ | 5 | **Reputation** | Cryptographic label graph. Query tag distributions, tagger profiles, and communication topology. OceanBus shows evidence — your AI decides who to trust. UUID-level binding means changing OpenID doesn't escape reputation. |
161
+ | 6 | **Security Interceptors** | Plug in your own AI fraud detector. Priority-ordered pipeline. Built-in LLM interceptor for automatic tagging. |
162
+
163
+ > **Philosophy**: OceanBus is a protocol layer, not a platform. It provides identity, encrypted routing, discovery, and trust signals. It does NOT do payments, matching algorithms, or workflow orchestration — those belong to your Agent.
164
+
165
+ ---
166
+
167
+ ## What's Inside
168
+
169
+ Organized by what you need — not by module structure.
170
+
171
+ | You want to... | Use this | Details |
172
+ |---------------|----------|---------|
173
+ | **Get a global identity** | `ob.register()` → `ob.getOpenId()` | Permanent address on the OceanBus network. No domain needed. |
174
+ | **Send messages** | `ob.send(openid, text)` | 128k-char limit. End-to-end encrypted (XChaCha20-Poly1305). |
175
+ | **Receive messages in real-time** | `ob.startListening(callback)` | Messages arrive within seconds. No refresh needed. |
176
+ | **Publish yourself** | `ob.publish({ tags, description })` | One line. Appears in Yellow Pages. Auto-heartbeat. |
177
+ | **Find services** | `ob.l1.yellowPages.discover(tags)` | Discover agents by tag. "Which agents do food delivery?" |
178
+ | **Check reputation** | `ob.l1.reputation.queryReputation([openid])` | Tag distribution, marker profiles, communication topology. You decide who to trust. |
179
+ | **Sign & verify** | `ob.crypto.sign()` / `ob.crypto.verify()` | Ed25519 signatures. Messages cannot be forged or repudiated. |
180
+ | **Block harassers** | `ob.blockSender(openid)` | UUID-level blocking. Changing OpenID doesn't escape the block. |
181
+ | **Custom security** | `ob.interceptors.register(...)` | Plug in your own fraud detector. Priority-ordered pipeline. |
182
+
183
+ ---
184
+
185
+ ## CLI
186
+
187
+ Debug, prototype, and vibe-code from the terminal.
188
+
189
+ ```bash
190
+ npm install -g oceanbus
191
+
192
+ oceanbus register # Register a new Agent
193
+ oceanbus whoami # Show current identity
194
+ oceanbus openid # Print your OpenID
195
+ oceanbus send <openid> # Send a message (supports stdin pipe)
196
+ oceanbus listen # Listen for incoming messages
197
+ oceanbus block <openid> # Block a sender
198
+ oceanbus keygen # Generate an Ed25519 key pair
199
+ oceanbus key new # Create a new API key
200
+ oceanbus key revoke <key_id> # Revoke an API key
201
+ ```
202
+
203
+ Pipe mode:
204
+ ```bash
205
+ echo "Hello world" | oceanbus send ob_xxxxx
206
+ oceanbus listen | jq '.content' # JSON stream on stdout
207
+ ```
208
+
209
+ ### Real-Time Listening
210
+
211
+ The SDK receives messages within seconds — no manual refresh needed.
212
+
213
+ **Terminal (human-to-human):**
214
+ ```bash
215
+ # Terminal 1: start listening
216
+ oceanbus listen
217
+
218
+ # Terminal 2: send a message
219
+ oceanbus send <friend-openid> "Hey! Are you there?"
220
+
221
+ # Terminal 1 instantly shows:
222
+ # [seq:127] 0rGE3HsKmeAPg...: Hey! Are you there?
223
+ ```
224
+
225
+ **Code (agent-to-agent):**
226
+ ```javascript
227
+ const ob = await createOceanBus();
228
+ await ob.register();
229
+
230
+ // Messages arrive in real-time — 2s polling, zero config
231
+ ob.startListening((msg) => {
232
+ console.log(`[${msg.from_openid}] ${msg.content}`);
233
+ // Your agent logic here
234
+ });
235
+ ```
236
+
237
+ ### How Real-Time Delivery Works
238
+
239
+ OceanBus uses **HTTP polling** (not WebSocket or SSE). The default poll interval is **2 seconds** — configurable via `OCEANBUS_POLL_INTERVAL` or constructor options.
240
+
241
+ | Mechanism | OceanBus choice | Why |
242
+ |-----------|----------------|-----|
243
+ | **Transport** | HTTP/2 long-poll | Works behind every proxy, firewall, and NAT. No persistent connections to manage. |
244
+ | **Default interval** | 2000ms | Balances responsiveness with server load. Messages typically arrive within 2s of being sent. |
245
+ | **Per-poll cost** | ~1 KB | A `GET /messages/sync?since_seq=N` call with a lightweight JSON response. Negligible bandwidth. |
246
+ | **CPU overhead** | Near zero | Each poll is a single HTTP request. The SDK sleeps between polls — no spin loop, no busy-wait. |
247
+ | **Configurable** | `OCEANBUS_POLL_INTERVAL` | Reduce to 500ms for latency-sensitive use cases; increase to 10s for low-priority background agents. |
248
+
249
+ **Why not WebSocket?** WebSockets require the server to hold a persistent TCP connection per agent. For 10,000 concurrent agents, that's 10,000 open sockets — which demands a fundamentally different server architecture. Long-polling gives us **stateless horizontal scalability**: each poll is an independent HTTP request that can hit any server behind a load balancer.
250
+
251
+ **Why not SSE?** Server-Sent Events also require persistent connections and have poor client library support outside browsers. HTTP polling works identically in Node.js, Python, curl, and any HTTP client — no special protocol support needed.
252
+
253
+ **L1 request/response** uses the same unified poll engine with a separate 1000ms interval for request polling and 5-minute heartbeats — all sharing one timer to minimize resource usage.
254
+
255
+
256
+
257
+ ---
258
+
259
+ ## Configuration
260
+
261
+ Four-layer override (higher wins):
262
+
263
+ 1. Built-in defaults
264
+ 2. `~/.oceanbus/config.yaml`
265
+ 3. Environment variables (`OCEANBUS_*`)
266
+ 4. Constructor options
267
+
268
+ ```javascript
269
+ const ob = await createOceanBus({
270
+ baseUrl: 'https://prod.example.com/api/l0', // switch servers
271
+ http: { timeout: 15000 },
272
+ });
273
+ ```
274
+
275
+ | Environment variable | Purpose |
276
+ |---------------------|---------|
277
+ | `OCEANBUS_BASE_URL` | L0 API endpoint |
278
+ | `OCEANBUS_API_KEY` | Your API key |
279
+ | `OCEANBUS_AGENT_ID` | Your Agent ID |
280
+ | `OCEANBUS_TIMEOUT` | HTTP timeout (ms) |
281
+ | `OCEANBUS_POLL_INTERVAL` | Poll interval (ms) |
282
+ | `OCEANBUS_YP_OPENIDS` | Yellow Pages service OpenID(s) — required for `l1.yellowPages.*` |
283
+ | `OCEANBUS_REP_OPENID` | Reputation service OpenID — required for `l1.reputation.*` |
284
+
285
+ ---
286
+
287
+ ## When You Need OceanBus
288
+
289
+ - Your Agent needs to communicate with **other people's Agents** — not just your own
290
+ - You're building a P2P marketplace, booking system, or any multi-Agent service
291
+ - You need trust infrastructure (reputation, signatures, anti-fraud) without building it
292
+ - You want your `localhost:3000` to be reachable by the world without deploying a server
293
+
294
+ ## When You Don't
295
+
296
+ - Your Agent runs alone, on one machine, forever
297
+ - You already have a service mesh or message queue that works
298
+ - You're building an internal pipeline where trust isn't a concern
299
+
300
+ ---
301
+
302
+ ## Get Help
303
+
304
+ - [GitHub Issues](https://github.com/oceanbus/oceanbus/issues) — bug reports & feature requests
305
+ - [OceanBus Docs](https://github.com/oceanbus/oceanbus/tree/main/OceanBusDocs) — API reference, design docs, publishing guide
306
+ - [ClawHub Collection](https://clawhub.ai/skills?search=oceanbus) — browse all OceanBus skills
307
+ - [npm Package](https://www.npmjs.com/package/oceanbus) — releases & download stats
308
+
309
+ ---
310
+
311
+ ## License
312
+
313
+ MIT
314
+
315
+ ---
316
+
317
+ ## Related Projects
318
+
319
+ | Project | Description |
320
+ |------|------|
321
+ | [oceanbus-mcp-server](https://www.npmjs.com/package/oceanbus-mcp-server) | MCP Server — Claude Desktop, Cursor, Windsurf, VS Code |
322
+ | [oceanbus-langchain](https://www.npmjs.com/package/oceanbus-langchain) | LangChain / CrewAI integration |
323
+ | [Ocean Chat](https://clawhub.ai/skills/ocean-chat) | Starter lighthouse — P2P messaging in 5 minutes |
324
+ | [Captain Lobster](https://clawhub.ai/skills/captain-lobster) | Intermediate — zero-player autonomous trading game |
325
+ | [Guess AI](https://clawhub.ai/skills/guess-ai) | Advanced — multiplayer social deduction game |
326
+ | [Ocean Agent](https://clawhub.ai/skills/ocean-agent) | Insurance agent AI workbench |
327
+ | [ClawHub Collection](https://clawhub.ai/skills?search=oceanbus) | All OceanBus skills |
328
+ | **Platform Integrations** |
329
+ | [Dify Plugin](https://github.com/ryanbihai/oceanbus-dify-plugin) | Dify platform OceanBus plugin |
330
+ | [Coze Plugin](https://www.coze.cn) | Coze platform OceanBus plugin (published) |
331
+ | [Bailian Guide](https://github.com/ryanbihai/oceanbus-dify-plugin) | Alibaba Cloud Bailian MCP integration |
332
+ | [MCP Registry](https://registry.modelcontextprotocol.io/v0.1/servers?search=oceanbus) | Official MCP Registry listing |
@@ -12,9 +12,7 @@ export declare class AgentIdentityManager {
12
12
  getCachedOpenId(): string | null;
13
13
  updateCredential(apiKey: string, agentId?: string): void;
14
14
  register(): Promise<RegistrationData>;
15
- private savedOpenid;
16
15
  whoami(): Promise<OpenIDData>;
17
- getSavedOpenid(): string | null;
18
16
  getOpenId(): Promise<string>;
19
17
  ensureRegistered(): Promise<AgentState>;
20
18
  toState(): AgentState;
@@ -1 +1 @@
1
- {"version":3,"file":"identity.d.ts","sourceRoot":"","sources":["../../src/agent/identity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAQ3F,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,IAAI,CAAa;IACzB,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,SAAS,CAAoB;IACrC,OAAO,CAAC,WAAW,CAAuB;gBAE9B,IAAI,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM;IAM/D,SAAS,IAAI,MAAM,GAAG,IAAI;IAI1B,UAAU,IAAI,MAAM,GAAG,IAAI;IAI3B,eAAe,IAAI,MAAM,GAAG,IAAI;IAIhC,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI;IAMlD,QAAQ,IAAI,OAAO,CAAC,gBAAgB,CAAC;IA4B3C,OAAO,CAAC,WAAW,CAAuB;IAEpC,MAAM,IAAI,OAAO,CAAC,UAAU,CAAC;IAQnC,cAAc,IAAI,MAAM,GAAG,IAAI;IAIzB,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC;IAO5B,gBAAgB,IAAI,OAAO,CAAC,UAAU,CAAC;IAQ7C,OAAO,IAAI,UAAU;IAYrB,SAAS,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAQlC,aAAa,CAAC,GAAG,EAAE,UAAU,GAAG,IAAI;IAIpC,OAAO,CAAC,UAAU;CAKnB"}
1
+ {"version":3,"file":"identity.d.ts","sourceRoot":"","sources":["../../src/agent/identity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAQ3F,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,IAAI,CAAa;IACzB,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,SAAS,CAAoB;IACrC,OAAO,CAAC,WAAW,CAAuB;gBAE9B,IAAI,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM;IAM/D,SAAS,IAAI,MAAM,GAAG,IAAI;IAI1B,UAAU,IAAI,MAAM,GAAG,IAAI;IAI3B,eAAe,IAAI,MAAM,GAAG,IAAI;IAIhC,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI;IAMlD,QAAQ,IAAI,OAAO,CAAC,gBAAgB,CAAC;IA4BrC,MAAM,IAAI,OAAO,CAAC,UAAU,CAAC;IAO7B,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC;IAM5B,gBAAgB,IAAI,OAAO,CAAC,UAAU,CAAC;IAQ7C,OAAO,IAAI,UAAU;IAWrB,SAAS,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAOlC,aAAa,CAAC,GAAG,EAAE,UAAU,GAAG,IAAI;IAIpC,OAAO,CAAC,UAAU;CAKnB"}
@@ -52,20 +52,13 @@ class AgentIdentityManager {
52
52
  this.openidCache = null;
53
53
  return data;
54
54
  }
55
- savedOpenid = null;
56
55
  async whoami() {
57
56
  this.ensureAuth();
58
57
  const res = await this.http.get('/agents/me', { apiKey: this.apiKey });
59
58
  this.openidCache = res.data.my_openid;
60
- this.savedOpenid = res.data.my_openid;
61
59
  return res.data;
62
60
  }
63
- getSavedOpenid() {
64
- return this.savedOpenid;
65
- }
66
61
  async getOpenId() {
67
- if (this.savedOpenid !== null)
68
- return this.savedOpenid;
69
62
  if (this.openidCache !== null)
70
63
  return this.openidCache;
71
64
  const data = await this.whoami();
@@ -85,7 +78,6 @@ class AgentIdentityManager {
85
78
  return {
86
79
  agent_id: this.agentId,
87
80
  api_key: this.apiKey,
88
- openid: this.savedOpenid || this.openidCache || undefined,
89
81
  extra_keys: this.extraKeys,
90
82
  };
91
83
  }
@@ -93,8 +85,7 @@ class AgentIdentityManager {
93
85
  this.agentId = state.agent_id;
94
86
  this.apiKey = state.api_key;
95
87
  this.extraKeys = state.extra_keys || [];
96
- this.openidCache = state.openid || null;
97
- this.savedOpenid = state.openid || null;
88
+ this.openidCache = null;
98
89
  }
99
90
  trackExtraKey(key) {
100
91
  this.extraKeys.push(key);
@@ -1 +1 @@
1
- {"version":3,"file":"identity.js","sourceRoot":"","sources":["../../src/agent/identity.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"identity.js","sourceRoot":"","sources":["../../src/agent/identity.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"send.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/send.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAS3C,eAAO,MAAM,WAAW,EAAE,aA0CzB,CAAC"}
1
+ {"version":3,"file":"send.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/send.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAQ3C,eAAO,MAAM,WAAW,EAAE,aA8BzB,CAAC"}
@@ -2,14 +2,13 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.sendCommand = void 0;
4
4
  const index_1 = require("../../index");
5
- const contacts_1 = require("../contacts");
6
5
  exports.sendCommand = {
7
6
  command: 'send <openid>',
8
- describe: 'Send a message to a recipient OpenID or contact alias',
7
+ describe: 'Send a message to a recipient OpenID',
9
8
  builder: (yargs) => yargs
10
9
  .positional('openid', {
11
10
  type: 'string',
12
- describe: 'Recipient OpenID or saved contact name',
11
+ describe: 'Recipient OpenID',
13
12
  demandOption: true,
14
13
  })
15
14
  .option('message', {
@@ -24,18 +23,8 @@ exports.sendCommand = {
24
23
  console.error('No message content. Use -m "message" or pipe content.');
25
24
  process.exit(1);
26
25
  }
27
- const contactName = argv.openid;
28
- const target = (0, contacts_1.resolveAlias)(contactName) || contactName;
29
26
  const ob = await (0, index_1.createOceanBus)();
30
- // Show which myOpenId will be used for this contact
31
- const myOpenId = (0, contacts_1.getMyOpenId)(contactName);
32
- if (myOpenId && target !== contactName) {
33
- // Only show when using an alias (not raw OpenID)
34
- const shortId = myOpenId.slice(0, 12) + '...';
35
- // Use stderr so stdout pipe still works cleanly
36
- process.stderr.write(`[using your address: ${shortId}]\n`);
37
- }
38
- await ob.send(target, content);
27
+ await ob.send(argv.openid, content);
39
28
  console.log(JSON.stringify({ code: 0, msg: 'sent' }));
40
29
  }
41
30
  catch (err) {
@@ -1 +1 @@
1
- {"version":3,"file":"send.js","sourceRoot":"","sources":["../../../src/cli/commands/send.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"send.js","sourceRoot":"","sources":["../../../src/cli/commands/send.ts"],"names":[],"mappings":";;;AACA,uCAA6C;AAOhC,QAAA,WAAW,GAAkB;IACxC,OAAO,EAAE,eAAe;IACxB,QAAQ,EAAE,sCAAsC;IAChD,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CACjB,KAAK;SACF,UAAU,CAAC,QAAQ,EAAE;QACpB,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,kBAAkB;QAC5B,YAAY,EAAE,IAAI;KACnB,CAAC;SACD,MAAM,CAAC,SAAS,EAAE;QACjB,KAAK,EAAE,GAAG;QACV,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,4CAA4C;KACvD,CAAC;IACN,OAAO,EAAE,KAAK,EAAE,IAAS,EAAE,EAAE;QAC3B,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,MAAM,SAAS,EAAE,CAAC;YAClD,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,CAAC,KAAK,CAAC,uDAAuD,CAAC,CAAC;gBACvE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,MAAM,EAAE,GAAG,MAAM,IAAA,sBAAc,GAAE,CAAC;YAClC,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACpC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;QACxD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,cAAc,EAAG,GAAa,CAAC,OAAO,CAAC,CAAC;YACtD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;CACF,CAAC;AAEF,SAAS,SAAS;IAChB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YACxB,OAAO,CAAC,EAAE,CAAC,CAAC;YACZ,OAAO;QACT,CAAC;QACD,IAAI,IAAI,GAAG,EAAE,CAAC;QACd,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QACnC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE,GAAG,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAChE,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;YAC3B,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAAC,QAAQ,GAAG,IAAI,CAAC;gBAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YAAC,CAAC;QAC3D,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YAC7B,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAAC,QAAQ,GAAG,IAAI,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAAC,CAAC;QAClD,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;IACzB,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"whoami.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/whoami.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAG3C,eAAO,MAAM,aAAa,EAAE,aAkB3B,CAAC"}
1
+ {"version":3,"file":"whoami.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/whoami.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAG3C,eAAO,MAAM,aAAa,EAAE,aAa3B,CAAC"}
@@ -4,15 +4,10 @@ exports.whoamiCommand = void 0;
4
4
  const index_1 = require("../../index");
5
5
  exports.whoamiCommand = {
6
6
  command: 'whoami',
7
- describe: 'Show current agent identity (must register first)',
7
+ describe: 'Show current agent_id and latest OpenID',
8
8
  handler: async () => {
9
9
  try {
10
10
  const ob = await (0, index_1.createOceanBus)();
11
- if (!ob.identity.getApiKey()) {
12
- console.error('No identity found. Run "oceanbus register" first to create a persistent agent identity.');
13
- console.error('Once registered, whoami will always show the same OpenID — your permanent global address.');
14
- process.exit(1);
15
- }
16
11
  const data = await ob.whoami();
17
12
  console.log(JSON.stringify(data, null, 2));
18
13
  }