@lmcl/ailo-mcp-sdk 0.0.1 → 0.0.2
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 +16 -0
- package/dist/ailo-client.d.ts.map +1 -1
- package/dist/ailo-client.js +2 -6
- package/dist/bootstrap.d.ts.map +1 -1
- package/dist/bootstrap.js +20 -24
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/stdio-guard.d.ts +17 -0
- package/dist/stdio-guard.d.ts.map +1 -0
- package/dist/stdio-guard.js +72 -0
- package/dist/types.d.ts +2 -14
- package/dist/types.d.ts.map +1 -1
- package/package.json +5 -1
package/README.md
CHANGED
|
@@ -10,6 +10,22 @@ npm install @lmcl/ailo-mcp-sdk
|
|
|
10
10
|
|
|
11
11
|
---
|
|
12
12
|
|
|
13
|
+
## 日志与 stdout(重要)
|
|
14
|
+
|
|
15
|
+
MCP 使用 stdio 传输,**stdout 只能输出 JSON-RPC 消息**,任何 `console.log`、第三方库日志等都会破坏协议,导致 `invalid character 'i' looking for beginning of value` 等解析错误。
|
|
16
|
+
|
|
17
|
+
**本 SDK 在框架层已做保护**:自动拦截 stdout,仅 JSON-RPC 转发到 stdout,其余重定向到 stderr。你可以自由使用 `console.log`、`console.info`、`console.debug`,以及接入会打日志的第三方库(如飞书 SDK),无需额外处理。
|
|
18
|
+
|
|
19
|
+
**入口顺序**:请将 `import { runMcpChannel } from "@lmcl/ailo-mcp-sdk"` 作为入口文件的**首个 import**,确保保护在 dotenv、平台 SDK 等之前生效。若入口结构复杂,可显式第一行写:
|
|
20
|
+
|
|
21
|
+
```typescript
|
|
22
|
+
import "@lmcl/ailo-mcp-sdk/stdio-guard";
|
|
23
|
+
import "dotenv/config";
|
|
24
|
+
import { runMcpChannel } from "@lmcl/ailo-mcp-sdk";
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
13
29
|
## 场景1:纯工具(AILO → MCP 客户端)
|
|
14
30
|
|
|
15
31
|
AILO 调用你的工具,你返回结果。
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ailo-client.d.ts","sourceRoot":"","sources":["../src/ailo-client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AActD;;;;;;;GAOG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,cAAc,CAA8C;IACpE,OAAO,CAAC,KAAK,CAAK;gBAEN,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,SAAK;IAO3E,OAAO,CAAC,OAAO;IAuBf,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAwDxB,OAAO,CAAC,iBAAiB;IAUzB,WAAW,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"ailo-client.d.ts","sourceRoot":"","sources":["../src/ailo-client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AActD;;;;;;;GAOG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,cAAc,CAA8C;IACpE,OAAO,CAAC,KAAK,CAAK;gBAEN,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,SAAK;IAO3E,OAAO,CAAC,OAAO;IAuBf,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAwDxB,OAAO,CAAC,iBAAiB;IAUzB,WAAW,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IASpE,8BAA8B;IACxB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAQ5C,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIlD,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI5C,KAAK,IAAI,IAAI;CAUd"}
|
package/dist/ailo-client.js
CHANGED
|
@@ -105,16 +105,12 @@ export class AiloClient {
|
|
|
105
105
|
}, 3000);
|
|
106
106
|
}
|
|
107
107
|
sendMessage(params) {
|
|
108
|
-
|
|
108
|
+
return this.request("channel.accept", {
|
|
109
109
|
chatId: params.chatId,
|
|
110
110
|
text: params.text,
|
|
111
111
|
contextTags: params.contextTags,
|
|
112
112
|
attachments: params.attachments ?? [],
|
|
113
|
-
};
|
|
114
|
-
if (params.coreForSenseContext != null && params.coreForSenseContext.length > 0) {
|
|
115
|
-
payload.coreForSenseContext = params.coreForSenseContext;
|
|
116
|
-
}
|
|
117
|
-
return this.request("channel.accept", payload);
|
|
113
|
+
});
|
|
118
114
|
}
|
|
119
115
|
/** 简单 KV,数据存 AILO 本体,自动持久化 */
|
|
120
116
|
async getData(key) {
|
package/dist/bootstrap.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,aAAa,EAAiB,MAAM,YAAY,CAAC;AAE/D;;;;;GAKG;AACH,MAAM,WAAW,gBAAgB;IAC/B,iGAAiG;IACjG,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0CAA0C;IAC1C,OAAO,EAAE,aAAa,CAAC;IACvB,4DAA4D;IAC5D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sDAAsD;IACtD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,kBAAkB,CAAC,EAAE,MAAM,MAAM,CAAC;IAClC,iCAAiC;IACjC,SAAS,EAAE,SAAS,CAAC;CACtB;AAED,wBAAgB,yBAAyB,IAAI,MAAM,CAElD;AAED;;;;;GAKG;AACH,wBAAgB,MAAM,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI,CASjD;AAiBD,wBAAgB,aAAa,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,aAAa,EAAiB,MAAM,YAAY,CAAC;AAE/D;;;;;GAKG;AACH,MAAM,WAAW,gBAAgB;IAC/B,iGAAiG;IACjG,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0CAA0C;IAC1C,OAAO,EAAE,aAAa,CAAC;IACvB,4DAA4D;IAC5D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sDAAsD;IACtD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,kBAAkB,CAAC,EAAE,MAAM,MAAM,CAAC;IAClC,iCAAiC;IACjC,SAAS,EAAE,SAAS,CAAC;CACtB;AAED,wBAAgB,yBAAyB,IAAI,MAAM,CAElD;AAED;;;;;GAKG;AACH,wBAAgB,MAAM,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI,CASjD;AAiBD,wBAAgB,aAAa,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI,CAmI5D"}
|
package/dist/bootstrap.js
CHANGED
|
@@ -10,7 +10,7 @@ export function defaultBuildChannelPrompt() {
|
|
|
10
10
|
* stdout 被 MCP stdio 占用,日志自动重定向到 stderr。
|
|
11
11
|
*/
|
|
12
12
|
export function runMcp(mcpServer) {
|
|
13
|
-
|
|
13
|
+
// stdio-guard 需在入口 import,runMcp 使用者应 import 自 @lmcl/ailo-mcp-sdk
|
|
14
14
|
const transport = new StdioServerTransport();
|
|
15
15
|
mcpServer.connect(transport).then(() => {
|
|
16
16
|
console.log("[mcp] MCP stdio server started");
|
|
@@ -23,7 +23,7 @@ export function runMcp(mcpServer) {
|
|
|
23
23
|
* 启动 MCP 通道
|
|
24
24
|
*
|
|
25
25
|
* 通用流程:
|
|
26
|
-
* 1.
|
|
26
|
+
* 1. stdio-guard 已在 index 入口加载,console.log 等自动重定向到 stderr
|
|
27
27
|
* 2. 启动 MCP stdio server(暴露出站工具)
|
|
28
28
|
* 3. 建立反向 WebSocket 连接(connect 时传入 channel + prompt,一步完成注册)
|
|
29
29
|
* 4. 接线入站:handler.setOnMessage → 组装 contextTags → channel.accept
|
|
@@ -42,9 +42,7 @@ export function runMcpChannel(config) {
|
|
|
42
42
|
console.error("Missing AIDO_WS_URL/AILO_WS_URL, AIDO_TOKEN/AILO_TOKEN or AIDO_MCP_NAME/AILO_MCP_NAME. Channel must be started by Ailo MCP.");
|
|
43
43
|
process.exit(1);
|
|
44
44
|
}
|
|
45
|
-
//
|
|
46
|
-
const _origLog = console.log;
|
|
47
|
-
console.log = (...args) => console.error(...args);
|
|
45
|
+
// stdio-guard 已在 index 入口加载,console.log 等已重定向到 stderr
|
|
48
46
|
const tag = `[${channelName}]`;
|
|
49
47
|
const channelPrompt = config.buildChannelPrompt
|
|
50
48
|
? config.buildChannelPrompt()
|
|
@@ -62,16 +60,16 @@ export function runMcpChannel(config) {
|
|
|
62
60
|
const isPrivate = msg.isPrivate ?? false;
|
|
63
61
|
const groupLabel = !isPrivate &&
|
|
64
62
|
(msg.chatName || (msg.chatId ? `群${msg.chatId.slice(-8)}` : ""));
|
|
65
|
-
const
|
|
66
|
-
{
|
|
67
|
-
{
|
|
63
|
+
const tags = [
|
|
64
|
+
{ desc: "类型", value: msg.chatType, core: true },
|
|
65
|
+
{ desc: "会话", value: msg.chatId, core: true },
|
|
68
66
|
];
|
|
69
67
|
if (groupLabel) {
|
|
70
|
-
|
|
68
|
+
tags.push({ desc: "群名", value: groupLabel, core: true });
|
|
71
69
|
}
|
|
72
|
-
|
|
70
|
+
tags.push({ desc: "昵称", value: msg.senderName ?? "", core: isPrivate }, { desc: "用户", value: msg.senderId ?? "", core: isPrivate });
|
|
73
71
|
if (msg.mentionsSelf) {
|
|
74
|
-
|
|
72
|
+
tags.push({ desc: "@我", value: "是", core: isPrivate });
|
|
75
73
|
}
|
|
76
74
|
if (msg.timestamp != null) {
|
|
77
75
|
let tsMs;
|
|
@@ -84,23 +82,17 @@ export function runMcpChannel(config) {
|
|
|
84
82
|
if (!isNaN(tsMs) && tsMs > 0) {
|
|
85
83
|
const d = new Date(tsMs);
|
|
86
84
|
const pad = (n) => String(n).padStart(2, "0");
|
|
87
|
-
|
|
88
|
-
|
|
85
|
+
tags.push({
|
|
86
|
+
desc: "时间",
|
|
87
|
+
value: `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())} ${pad(d.getHours())}:${pad(d.getMinutes())}`,
|
|
88
|
+
core: false,
|
|
89
|
+
});
|
|
89
90
|
}
|
|
90
91
|
}
|
|
91
|
-
const coreForSenseContext = [];
|
|
92
|
-
coreForSenseContext.push(true, true);
|
|
93
|
-
if (groupLabel) {
|
|
94
|
-
coreForSenseContext.push(true);
|
|
95
|
-
}
|
|
96
|
-
for (let i = coreForSenseContext.length; i < contextTags.length; i++) {
|
|
97
|
-
coreForSenseContext.push(isPrivate);
|
|
98
|
-
}
|
|
99
92
|
await client.sendMessage({
|
|
100
93
|
chatId: msg.chatId,
|
|
101
94
|
text: msg.text ?? "",
|
|
102
|
-
contextTags,
|
|
103
|
-
coreForSenseContext,
|
|
95
|
+
contextTags: tags,
|
|
104
96
|
attachments: msg.attachments ?? [],
|
|
105
97
|
});
|
|
106
98
|
}
|
|
@@ -131,7 +123,11 @@ export function runMcpChannel(config) {
|
|
|
131
123
|
console.error(`${tag} reverse WebSocket connect failed:`, err);
|
|
132
124
|
process.exit(1);
|
|
133
125
|
}
|
|
134
|
-
// 3.
|
|
126
|
+
// 3. 注入持久化存储
|
|
127
|
+
if (handler.setDataProvider) {
|
|
128
|
+
handler.setDataProvider(client);
|
|
129
|
+
}
|
|
130
|
+
// 4. 启动平台 Handler
|
|
135
131
|
console.log(`${tag} starting handler...`);
|
|
136
132
|
const startResult = handler.start();
|
|
137
133
|
if (startResult && typeof startResult.then === "function") {
|
package/dist/index.d.ts
CHANGED
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAClF,YAAY,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACvD,YAAY,EACV,UAAU,EACV,aAAa,EACb,aAAa,EACb,mBAAmB,EACnB,UAAU,GACX,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAE1B,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAClF,YAAY,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACvD,YAAY,EACV,UAAU,EACV,aAAa,EACb,aAAa,EACb,mBAAmB,EACnB,UAAU,GACX,MAAM,YAAY,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP stdio 保护层
|
|
3
|
+
*
|
|
4
|
+
* MCP 协议规定:stdout 只能输出 JSON-RPC 消息,任何其他输出都会导致客户端解析失败(如 invalid character 'i')。
|
|
5
|
+
* 本模块在框架层统一拦截 process.stdout.write,仅将以 `{` 开头的行(JSON-RPC)转发到真实 stdout,
|
|
6
|
+
* 其余全部转发到 stderr。
|
|
7
|
+
*
|
|
8
|
+
* 通道开发者可以自由使用 console.log、console.info、console.debug,以及第三方库的日志,
|
|
9
|
+
* 框架会自动重定向,无需担心污染 MCP 协议。
|
|
10
|
+
*
|
|
11
|
+
* 使用方式:入口文件将 `import { runMcpChannel } from "@lmcl/ailo-mcp-sdk"` 作为首个 import,
|
|
12
|
+
* 确保本保护在 dotenv、平台 SDK 等可能写 stdout 的模块之前生效。
|
|
13
|
+
*
|
|
14
|
+
* 若入口结构复杂,可显式:`import "@lmcl/ailo-mcp-sdk/stdio-guard"` 作为第一行。
|
|
15
|
+
*/
|
|
16
|
+
export {};
|
|
17
|
+
//# sourceMappingURL=stdio-guard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stdio-guard.d.ts","sourceRoot":"","sources":["../src/stdio-guard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP stdio 保护层
|
|
3
|
+
*
|
|
4
|
+
* MCP 协议规定:stdout 只能输出 JSON-RPC 消息,任何其他输出都会导致客户端解析失败(如 invalid character 'i')。
|
|
5
|
+
* 本模块在框架层统一拦截 process.stdout.write,仅将以 `{` 开头的行(JSON-RPC)转发到真实 stdout,
|
|
6
|
+
* 其余全部转发到 stderr。
|
|
7
|
+
*
|
|
8
|
+
* 通道开发者可以自由使用 console.log、console.info、console.debug,以及第三方库的日志,
|
|
9
|
+
* 框架会自动重定向,无需担心污染 MCP 协议。
|
|
10
|
+
*
|
|
11
|
+
* 使用方式:入口文件将 `import { runMcpChannel } from "@lmcl/ailo-mcp-sdk"` 作为首个 import,
|
|
12
|
+
* 确保本保护在 dotenv、平台 SDK 等可能写 stdout 的模块之前生效。
|
|
13
|
+
*
|
|
14
|
+
* 若入口结构复杂,可显式:`import "@lmcl/ailo-mcp-sdk/stdio-guard"` 作为第一行。
|
|
15
|
+
*/
|
|
16
|
+
const realStdoutWrite = process.stdout.write.bind(process.stdout);
|
|
17
|
+
let lineBuffer = "";
|
|
18
|
+
const MAX_LINE_BUFFER = 64 * 1024; // 64KB,防止异常情况下无限增长
|
|
19
|
+
function routeLine(line) {
|
|
20
|
+
const trimmed = line.trim();
|
|
21
|
+
if (trimmed.length === 0)
|
|
22
|
+
return "stderr"; // 空行不输出,避免干扰
|
|
23
|
+
return trimmed.startsWith("{") ? "stdout" : "stderr";
|
|
24
|
+
}
|
|
25
|
+
process.stdout.write = function (chunk, encodingOrCallback, callback) {
|
|
26
|
+
const enc = typeof encodingOrCallback === "function" ? undefined : encodingOrCallback;
|
|
27
|
+
const cb = typeof encodingOrCallback === "function" ? encodingOrCallback : callback;
|
|
28
|
+
const str = typeof chunk === "string" ? chunk : chunk.toString();
|
|
29
|
+
lineBuffer += str;
|
|
30
|
+
if (lineBuffer.length > MAX_LINE_BUFFER) {
|
|
31
|
+
lineBuffer = lineBuffer.slice(-MAX_LINE_BUFFER);
|
|
32
|
+
}
|
|
33
|
+
const lines = lineBuffer.split(/\r?\n/);
|
|
34
|
+
lineBuffer = lines.pop() ?? "";
|
|
35
|
+
const toStdout = [];
|
|
36
|
+
const toStderr = [];
|
|
37
|
+
for (const line of lines) {
|
|
38
|
+
const dest = routeLine(line);
|
|
39
|
+
const withNewline = line + "\n";
|
|
40
|
+
if (dest === "stdout")
|
|
41
|
+
toStdout.push(withNewline);
|
|
42
|
+
else
|
|
43
|
+
toStderr.push(withNewline);
|
|
44
|
+
}
|
|
45
|
+
if (toStderr.length > 0) {
|
|
46
|
+
process.stderr.write(toStderr.join(""));
|
|
47
|
+
}
|
|
48
|
+
if (toStdout.length > 0) {
|
|
49
|
+
const wrappedCb = cb ? (err) => cb(err ?? undefined) : undefined;
|
|
50
|
+
return realStdoutWrite(toStdout.join(""), enc, wrappedCb);
|
|
51
|
+
}
|
|
52
|
+
if (cb)
|
|
53
|
+
cb();
|
|
54
|
+
return true;
|
|
55
|
+
};
|
|
56
|
+
process.on("beforeExit", () => {
|
|
57
|
+
if (lineBuffer.length > 0) {
|
|
58
|
+
const dest = routeLine(lineBuffer);
|
|
59
|
+
const out = lineBuffer + "\n";
|
|
60
|
+
if (dest === "stdout")
|
|
61
|
+
realStdoutWrite(out);
|
|
62
|
+
else
|
|
63
|
+
process.stderr.write("[stdio-guard] 未完成行: " + out);
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
// 重定向 console 到 stderr,开发者可自由使用
|
|
67
|
+
const toStderr = (...args) => console.error(...args);
|
|
68
|
+
console.log = toStderr;
|
|
69
|
+
console.info = toStderr;
|
|
70
|
+
console.debug = toStderr;
|
|
71
|
+
console.trace = toStderr;
|
|
72
|
+
export {};
|
package/dist/types.d.ts
CHANGED
|
@@ -49,29 +49,17 @@ export interface BridgeHandler {
|
|
|
49
49
|
setDataProvider?(storage: ChannelStorage): void;
|
|
50
50
|
}
|
|
51
51
|
/**
|
|
52
|
-
* channel.accept 的 contextTags
|
|
53
|
-
*
|
|
54
|
-
* key: 框架内部路由用(英文标识)
|
|
55
|
-
* desc: 给 LLM 看的人类可读标签(中文)
|
|
56
|
-
* value: 标签值
|
|
52
|
+
* channel.accept 的 contextTags 项:desc+value+core,全中文。
|
|
57
53
|
*/
|
|
58
54
|
export type ContextTag = {
|
|
59
|
-
key: string;
|
|
60
55
|
desc: string;
|
|
61
56
|
value: string;
|
|
57
|
+
core: boolean;
|
|
62
58
|
};
|
|
63
|
-
/**
|
|
64
|
-
* channel.accept 的消息参数
|
|
65
|
-
*
|
|
66
|
-
* coreForSenseContext: 与 contextTags 一一对应,true 表示该标签参与时空场键生成。
|
|
67
|
-
* 最左匹配:遇 false 即停。私聊全 true;群聊 chat_type/chat_id/chat_name 为 true,sender_name 起为 false。
|
|
68
|
-
* 未传时框架回退 Channel+ChatID。
|
|
69
|
-
*/
|
|
70
59
|
export type ChannelAcceptParams = {
|
|
71
60
|
chatId: string;
|
|
72
61
|
text: string;
|
|
73
62
|
contextTags: ContextTag[];
|
|
74
|
-
coreForSenseContext?: boolean[];
|
|
75
63
|
attachments?: Attachment[];
|
|
76
64
|
};
|
|
77
65
|
export {};
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,yDAAyD;AACzD,KAAK,cAAc,GAAG;IACpB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC7C,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnD,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACxC,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,YAAY,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,aAAa,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC1E,KAAK,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9B,IAAI,CAAC,IAAI,IAAI,CAAC;IACd,2CAA2C;IAC3C,eAAe,CAAC,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI,CAAC;CACjD;AAED
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,yDAAyD;AACzD,KAAK,cAAc,GAAG;IACpB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC7C,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnD,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACxC,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,YAAY,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,aAAa,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC1E,KAAK,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9B,IAAI,CAAC,IAAI,IAAI,CAAC;IACd,2CAA2C;IAC3C,eAAe,CAAC,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI,CAAC;CACjD;AAED;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,CAAC;AAExE,MAAM,MAAM,mBAAmB,GAAG;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC;CAC5B,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,9 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lmcl/ailo-mcp-sdk",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.2",
|
|
4
4
|
"description": "Ailo MCP SDK - 通道通过 MCP 注册发送消息能力,用于开发感知通道",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
|
+
"exports": {
|
|
8
|
+
".": "./dist/index.js",
|
|
9
|
+
"./stdio-guard": "./dist/stdio-guard.js"
|
|
10
|
+
},
|
|
7
11
|
"types": "dist/index.d.ts",
|
|
8
12
|
"files": [
|
|
9
13
|
"dist",
|