oceanbus 0.14.7 → 0.14.19
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/assets/CLAUDE.md +19 -1
- package/dist/cli/commands/request.d.ts +0 -10
- package/dist/cli/commands/request.d.ts.map +1 -1
- package/dist/cli/commands/request.js +65 -50
- package/dist/cli/commands/request.js.map +1 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +2 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/config/defaults.js +1 -1
- package/dist/config/defaults.js.map +1 -1
- package/package.json +1 -1
package/assets/CLAUDE.md
CHANGED
|
@@ -1,4 +1,22 @@
|
|
|
1
|
-
# OceanBus Agent
|
|
1
|
+
# OceanBus — 去中心化 Agent 网络
|
|
2
|
+
|
|
3
|
+
## 服务发现(优先)
|
|
4
|
+
|
|
5
|
+
你已接入 OceanBus 网络,拥有 `oceanbus_*` 系列 MCP 工具。
|
|
6
|
+
|
|
7
|
+
**当你不确定如何处理用户请求时,先去黄页搜索可用服务**——不要猜测后端有什么能力。
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
1. oceanbus_search_yellow_pages({tags: []}) → 浏览所有在线 Agent
|
|
11
|
+
或用关键词标签筛选,如 tags: ["体检", "翻译", "法律"]
|
|
12
|
+
2. 找到相关 Agent → oceanbus_get_agent_card({openid}) → 获取能力卡片
|
|
13
|
+
3. 阅读 card.instructions → 按迭代推理规则构造调用
|
|
14
|
+
4. oceanbus_send_message({to_openid, content}) → 发送 JSON: {action, params}
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
黄页是一个开放的 Agent 市场,各领域服务通过标签注册。它不是最后手段——它是你面对陌生领域时的**第一反应**。
|
|
18
|
+
|
|
19
|
+
## Agent 启动与运维
|
|
2
20
|
|
|
3
21
|
**触发**:用户在 CC 窗口粘贴 `npx oceanbus@latest start --peer <uuid> --gateway-url <url>`
|
|
4
22
|
|
|
@@ -1,13 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* oceanbus request — One-shot request-response (send + listen in one process).
|
|
3
|
-
*
|
|
4
|
-
* Usage:
|
|
5
|
-
* oceanbus request <to> -m '{"action":"help"}'
|
|
6
|
-
* oceanbus request haola-pe -m '{"action":"help"}' --timeout 15000
|
|
7
|
-
*
|
|
8
|
-
* Starts listener first, then sends, waits for response with matching request_id,
|
|
9
|
-
* prints response JSON to stdout, then exits. No ordering mistake possible.
|
|
10
|
-
*/
|
|
11
1
|
import type { CommandModule } from 'yargs';
|
|
12
2
|
export declare const requestCommand: CommandModule;
|
|
13
3
|
//# sourceMappingURL=request.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/request.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/request.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAK3C,eAAO,MAAM,cAAc,EAAE,aAqG5B,CAAC"}
|
|
@@ -1,13 +1,17 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
2
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
6
|
exports.requestCommand = void 0;
|
|
4
7
|
const index_1 = require("../../index");
|
|
5
8
|
const contacts_1 = require("../contacts");
|
|
9
|
+
const crypto_1 = __importDefault(require("crypto"));
|
|
6
10
|
exports.requestCommand = {
|
|
7
|
-
command: 'request <
|
|
8
|
-
describe: 'Send a request and wait for the
|
|
11
|
+
command: 'request <target>',
|
|
12
|
+
describe: 'Send a JSON request and wait for the matching response',
|
|
9
13
|
builder: (yargs) => yargs
|
|
10
|
-
.positional('
|
|
14
|
+
.positional('target', {
|
|
11
15
|
type: 'string',
|
|
12
16
|
describe: 'Recipient OpenID or saved contact name',
|
|
13
17
|
demandOption: true,
|
|
@@ -15,79 +19,90 @@ exports.requestCommand = {
|
|
|
15
19
|
.option('message', {
|
|
16
20
|
alias: 'm',
|
|
17
21
|
type: 'string',
|
|
18
|
-
describe: 'JSON payload (
|
|
22
|
+
describe: 'JSON payload (action + params). request_id is auto-generated.',
|
|
19
23
|
demandOption: true,
|
|
20
24
|
})
|
|
21
25
|
.option('timeout', {
|
|
22
26
|
alias: 't',
|
|
23
27
|
type: 'number',
|
|
24
|
-
describe: 'Max wait time in
|
|
25
|
-
default:
|
|
28
|
+
describe: 'Max wait time in seconds (default: 30)',
|
|
29
|
+
default: 30,
|
|
26
30
|
}),
|
|
27
31
|
handler: async (argv) => {
|
|
28
|
-
const
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
// Parse payload
|
|
32
|
+
const contactName = argv.target;
|
|
33
|
+
const rawMessage = argv.message;
|
|
34
|
+
const timeoutSec = argv.timeout || 30;
|
|
35
|
+
// ── Resolve target ──────────────────────────────────────────
|
|
36
|
+
const target = (0, contacts_1.resolveAlias)(contactName) || contactName;
|
|
37
|
+
// ── Parse payload ───────────────────────────────────────────
|
|
34
38
|
let payload;
|
|
35
39
|
try {
|
|
36
|
-
payload = JSON.parse(
|
|
40
|
+
payload = JSON.parse(rawMessage);
|
|
37
41
|
}
|
|
38
42
|
catch {
|
|
39
|
-
console.error('Error:
|
|
43
|
+
console.error('Error: -m must be valid JSON. Example: \'{"action":"help"}\'');
|
|
40
44
|
process.exit(1);
|
|
41
45
|
}
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
const
|
|
46
|
+
// ── Create OB instance ──────────────────────────────────────
|
|
47
|
+
let ob;
|
|
48
|
+
try {
|
|
49
|
+
ob = await (0, index_1.createOceanBus)();
|
|
50
|
+
}
|
|
51
|
+
catch (e) {
|
|
52
|
+
console.error('Failed to initialise OceanBus:', e.message);
|
|
53
|
+
console.error('Run `npx oceanbus init` first if you have not set up an identity.');
|
|
54
|
+
process.exit(1);
|
|
55
|
+
}
|
|
56
|
+
// ── Send request + wait for matching response ────────────────
|
|
57
|
+
const requestId = `req_${Date.now()}_${crypto_1.default.randomBytes(4).toString('hex')}`;
|
|
58
|
+
const message = { ...payload, request_id: requestId };
|
|
59
|
+
const timeoutMs = timeoutSec * 1000;
|
|
60
|
+
let settled = false;
|
|
61
|
+
const responsePromise = new Promise((resolve) => {
|
|
54
62
|
const timer = setTimeout(() => {
|
|
55
|
-
if (
|
|
56
|
-
resolved = true;
|
|
57
|
-
stopListening();
|
|
58
|
-
reject(new Error(`No response within ${timeoutMs}ms`));
|
|
59
|
-
}
|
|
60
|
-
}, timeoutMs);
|
|
61
|
-
stopListening = ob.startListening((msg) => {
|
|
62
|
-
if (resolved)
|
|
63
|
+
if (settled)
|
|
63
64
|
return;
|
|
64
|
-
|
|
65
|
+
settled = true;
|
|
66
|
+
resolve(null);
|
|
67
|
+
}, timeoutMs);
|
|
68
|
+
const stop = ob.startListening((msg) => {
|
|
69
|
+
if (settled)
|
|
65
70
|
return;
|
|
66
71
|
try {
|
|
67
|
-
const
|
|
68
|
-
if (
|
|
69
|
-
|
|
72
|
+
const parsed = JSON.parse(msg.content);
|
|
73
|
+
if (parsed.request_id === requestId) {
|
|
74
|
+
settled = true;
|
|
70
75
|
clearTimeout(timer);
|
|
71
|
-
|
|
72
|
-
resolve(JSON.stringify(data));
|
|
76
|
+
resolve(parsed);
|
|
73
77
|
}
|
|
74
78
|
}
|
|
75
|
-
catch {
|
|
79
|
+
catch {
|
|
80
|
+
// not JSON or different request_id — keep waiting
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
// Send after listener is ready
|
|
84
|
+
ob.sendJson(target, message).catch((e) => {
|
|
85
|
+
if (settled)
|
|
86
|
+
return;
|
|
87
|
+
settled = true;
|
|
88
|
+
clearTimeout(timer);
|
|
89
|
+
stop();
|
|
90
|
+
console.error('Send failed:', e.message);
|
|
91
|
+
process.exit(1);
|
|
76
92
|
});
|
|
77
93
|
});
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
await ob.send(target, payloadStr);
|
|
94
|
+
const response = await responsePromise;
|
|
95
|
+
// ── Cleanup ─────────────────────────────────────────────────
|
|
81
96
|
try {
|
|
82
|
-
|
|
83
|
-
console.log(result);
|
|
97
|
+
await ob.destroy();
|
|
84
98
|
}
|
|
85
|
-
catch
|
|
86
|
-
|
|
99
|
+
catch { }
|
|
100
|
+
// ── Output ──────────────────────────────────────────────────
|
|
101
|
+
if (!response) {
|
|
102
|
+
console.error(`Request timed out after ${timeoutSec}s (no response matched request_id: ${requestId})`);
|
|
87
103
|
process.exit(1);
|
|
88
104
|
}
|
|
89
|
-
|
|
90
|
-
process.exit(0);
|
|
105
|
+
console.log(JSON.stringify(response, null, 2));
|
|
91
106
|
},
|
|
92
107
|
};
|
|
93
108
|
//# sourceMappingURL=request.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"request.js","sourceRoot":"","sources":["../../../src/cli/commands/request.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"request.js","sourceRoot":"","sources":["../../../src/cli/commands/request.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAoBA,wBAAgB,MAAM,CAAC,IAAI,GAAE,MAAM,EAAiB,GAAG,IAAI,CA0B1D"}
|
package/dist/cli/index.js
CHANGED
|
@@ -22,6 +22,7 @@ const add_1 = require("./commands/add");
|
|
|
22
22
|
const contacts_1 = require("./commands/contacts");
|
|
23
23
|
const introduce_1 = require("./commands/introduce");
|
|
24
24
|
const setup_cc_1 = require("./commands/setup-cc");
|
|
25
|
+
const request_1 = require("./commands/request");
|
|
25
26
|
function runCli(argv = process.argv) {
|
|
26
27
|
(0, yargs_1.default)((0, helpers_1.hideBin)(argv))
|
|
27
28
|
.scriptName('oceanbus')
|
|
@@ -39,6 +40,7 @@ function runCli(argv = process.argv) {
|
|
|
39
40
|
.command(contacts_1.contactsCommand)
|
|
40
41
|
.command(introduce_1.introduceCommand)
|
|
41
42
|
.command(setup_cc_1.setupCcCommand)
|
|
43
|
+
.command(request_1.requestCommand)
|
|
42
44
|
.command(keygen_1.keygenCommand)
|
|
43
45
|
.command(key_new_1.keyNewCommand)
|
|
44
46
|
.command(key_revoke_1.keyRevokeCommand)
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";;;;;AAoBA,wBA0BC;AA9CD,kDAA0B;AAC1B,2CAAwC;AACxC,kDAAsD;AACtD,0CAA8C;AAC9C,4CAAgD;AAChD,8CAAkD;AAClD,8CAAkD;AAClD,sDAAyD;AACzD,0CAA8C;AAC9C,8CAAkD;AAClD,4CAAgD;AAChD,8CAAkD;AAClD,gDAAmD;AACnD,sDAAyD;AACzD,wCAA4C;AAC5C,kDAAsD;AACtD,oDAAwD;AACxD,kDAAqD;AACrD,gDAAoD;AAEpD,SAAgB,MAAM,CAAC,OAAiB,OAAO,CAAC,IAAI;IAClD,IAAA,eAAK,EAAC,IAAA,iBAAO,EAAC,IAAI,CAAC,CAAC;SACjB,UAAU,CAAC,UAAU,CAAC;SACtB,KAAK,CAAC,wBAAwB,CAAC;SAC/B,OAAO,CAAC,0BAAe,CAAC;SACxB,OAAO,CAAC,kBAAW,CAAC;SACpB,OAAO,CAAC,oBAAY,CAAC;SACrB,OAAO,CAAC,sBAAa,CAAC;SACtB,OAAO,CAAC,sBAAa,CAAC;SACtB,OAAO,CAAC,6BAAgB,CAAC;SACzB,OAAO,CAAC,kBAAW,CAAC;SACpB,OAAO,CAAC,sBAAa,CAAC;SACtB,OAAO,CAAC,oBAAY,CAAC;SACrB,OAAO,CAAC,gBAAU,CAAC;SACnB,OAAO,CAAC,0BAAe,CAAC;SACxB,OAAO,CAAC,4BAAgB,CAAC;SACzB,OAAO,CAAC,yBAAc,CAAC;SACvB,OAAO,CAAC,wBAAc,CAAC;SACvB,OAAO,CAAC,sBAAa,CAAC;SACtB,OAAO,CAAC,uBAAa,CAAC;SACtB,OAAO,CAAC,6BAAgB,CAAC;SACzB,aAAa,CAAC,CAAC,EAAE,0BAA0B,CAAC;SAC5C,IAAI,EAAE;SACN,OAAO,EAAE;SACT,MAAM,EAAE;SACR,KAAK,EAAE,CAAC;AACb,CAAC"}
|
package/dist/config/defaults.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.DEFAULTS = void 0;
|
|
4
4
|
exports.DEFAULTS = {
|
|
5
|
-
baseUrl: 'https://ai
|
|
5
|
+
baseUrl: 'https://ai.ihaola.com.cn/api/l0',
|
|
6
6
|
keyStore: {
|
|
7
7
|
type: 'file',
|
|
8
8
|
filePath: undefined, // resolved at runtime to ~/.oceanbus/credentials.json
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":";;;AAEa,QAAA,QAAQ,GAAmB;IACtC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":";;;AAEa,QAAA,QAAQ,GAAmB;IACtC,OAAO,EAAE,iCAAiC;IAE1C,QAAQ,EAAE;QACR,IAAI,EAAE,MAAM;QACZ,QAAQ,EAAE,SAAS,EAAE,sDAAsD;KAC5E;IAED,IAAI,EAAE;QACJ,OAAO,EAAE,KAAK;QACd,KAAK,EAAE;YACL,WAAW,EAAE,CAAC;YACd,cAAc,EAAE,GAAG;YACnB,UAAU,EAAE,IAAI;YAChB,UAAU,EAAE,CAAC;SACd;KACF;IAED,OAAO,EAAE;QACP,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,GAAG;QACpB,iBAAiB,EAAE,IAAI;QACvB,cAAc,EAAE,SAAS;KAC1B;IAED,EAAE,EAAE;QACF,mDAAmD;QACnD,8DAA8D;QAC9D,6DAA6D;QAC7D,sEAAsE;QACtE,SAAS,EAAE;YACT,kFAAkF;SACnF;QACD,SAAS,EAAE,kFAAkF;QAC7F,QAAQ,EAAE,EAAE;QACZ,UAAU,EAAE,EAAE;QACd,gBAAgB,EAAE,KAAK;QACvB,qBAAqB,EAAE,IAAI;QAC3B,mBAAmB,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI,EAAE,uCAAuC;KAC5E;IAED,WAAW,EAAE;QACX,OAAO,EAAE,KAAK;KACf;CAEF,CAAC"}
|