From f09891f0549fcf480e41c3e3b296bb722bf2a28b Mon Sep 17 00:00:00 2001 From: HomeAgent Agent Date: Sun, 13 Sep 2026 21:58:58 +0800 Subject: [PATCH] =?UTF-8?q?fix(lua-sdk):=20=E5=90=8C=E6=AD=A5=E6=B3=A8?= =?UTF-8?q?=E5=85=A5=E5=9C=A8=20Lua=20=E4=B8=AD=E6=98=8E=E7=A1=AE=E6=A0=87?= =?UTF-8?q?=E8=AE=B0=E4=B8=BA=E4=B8=8D=E5=8F=AF=E7=94=A8=EF=BC=88=E9=81=BF?= =?UTF-8?q?=E5=85=8D=E8=87=AA=E9=94=81=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit sdk.inject_input_sync / *_sync_opts / inject_input_media_sync* 要等本轮回复, 而 Lua 代码只在持有插件锁的回调里执行 ⇒ 必然自锁。mock 不再假装返回 (reply,nil),改为与内核一致的明确错误,避免离线测试误以为可用。 --- example/luademo/sdk.lua | 20 +++++++++++++++----- sdk/lua/sdk.lua | 20 +++++++++++++++----- tools/hmapdev/assets/sdk.lua | 20 +++++++++++++++----- 3 files changed, 45 insertions(+), 15 deletions(-) diff --git a/example/luademo/sdk.lua b/example/luademo/sdk.lua index 2f4dfb9..6167dc6 100644 --- a/example/luademo/sdk.lua +++ b/example/luademo/sdk.lua @@ -82,11 +82,16 @@ function sdk.inject_interrupt_opts(source, channel, text, opts) end -- !impl --- 同步注入:等待本轮回复 -> (reply, err);无回复时 reply 为 nil。 -function sdk.inject_input_sync(source, channel, text) return nil, nil end +-- 同步注入在 Lua 插件中**不可用**:会等本轮回复,而本轮正持有插件锁 ⇒ 必然自锁。 +-- 真实内核里恒返回 (nil, err);这里返回同样的错误,避免离线测试误以为可用。 +function sdk.inject_input_sync(source, channel, text) + return nil, "同步注入在 Lua 插件中不可用:请在事件回调/外部入口用 inject_text/inject_interrupt;确需同步等待请改用 Go 插件。" +end -- !impl -function sdk.inject_input_sync_opts(source, channel, text, opts) return nil, nil end +function sdk.inject_input_sync_opts(source, channel, text, opts) + return nil, "同步注入在 Lua 插件中不可用:请在事件回调/外部入口用 inject_text/inject_interrupt;确需同步等待请改用 Go 插件。" +end -- !impl -- blocks: ContentBlock 数组,见 sdk.inject_input_media。 @@ -109,10 +114,15 @@ function sdk.inject_input_media_opts(source, channel, text, blocks, opts) end -- !impl -function sdk.inject_input_media_sync(source, channel, text, blocks) return nil, nil end +-- 同 sdk.inject_input_sync:Lua 中不可用。 +function sdk.inject_input_media_sync(source, channel, text, blocks) + return nil, "同步注入在 Lua 插件中不可用:请在事件回调/外部入口用 inject_input_media;确需同步等待请改用 Go 插件。" +end -- !impl -function sdk.inject_input_media_sync_opts(source, channel, text, blocks, opts) return nil, nil end +function sdk.inject_input_media_sync_opts(source, channel, text, blocks, opts) + return nil, "同步注入在 Lua 插件中不可用:请在事件回调/外部入口用 inject_input_media_opts;确需同步等待请改用 Go 插件。" +end -- !impl function sdk.inject_interrupt_media(source, channel, text, blocks) diff --git a/sdk/lua/sdk.lua b/sdk/lua/sdk.lua index 2f4dfb9..6167dc6 100644 --- a/sdk/lua/sdk.lua +++ b/sdk/lua/sdk.lua @@ -82,11 +82,16 @@ function sdk.inject_interrupt_opts(source, channel, text, opts) end -- !impl --- 同步注入:等待本轮回复 -> (reply, err);无回复时 reply 为 nil。 -function sdk.inject_input_sync(source, channel, text) return nil, nil end +-- 同步注入在 Lua 插件中**不可用**:会等本轮回复,而本轮正持有插件锁 ⇒ 必然自锁。 +-- 真实内核里恒返回 (nil, err);这里返回同样的错误,避免离线测试误以为可用。 +function sdk.inject_input_sync(source, channel, text) + return nil, "同步注入在 Lua 插件中不可用:请在事件回调/外部入口用 inject_text/inject_interrupt;确需同步等待请改用 Go 插件。" +end -- !impl -function sdk.inject_input_sync_opts(source, channel, text, opts) return nil, nil end +function sdk.inject_input_sync_opts(source, channel, text, opts) + return nil, "同步注入在 Lua 插件中不可用:请在事件回调/外部入口用 inject_text/inject_interrupt;确需同步等待请改用 Go 插件。" +end -- !impl -- blocks: ContentBlock 数组,见 sdk.inject_input_media。 @@ -109,10 +114,15 @@ function sdk.inject_input_media_opts(source, channel, text, blocks, opts) end -- !impl -function sdk.inject_input_media_sync(source, channel, text, blocks) return nil, nil end +-- 同 sdk.inject_input_sync:Lua 中不可用。 +function sdk.inject_input_media_sync(source, channel, text, blocks) + return nil, "同步注入在 Lua 插件中不可用:请在事件回调/外部入口用 inject_input_media;确需同步等待请改用 Go 插件。" +end -- !impl -function sdk.inject_input_media_sync_opts(source, channel, text, blocks, opts) return nil, nil end +function sdk.inject_input_media_sync_opts(source, channel, text, blocks, opts) + return nil, "同步注入在 Lua 插件中不可用:请在事件回调/外部入口用 inject_input_media_opts;确需同步等待请改用 Go 插件。" +end -- !impl function sdk.inject_interrupt_media(source, channel, text, blocks) diff --git a/tools/hmapdev/assets/sdk.lua b/tools/hmapdev/assets/sdk.lua index 2f4dfb9..6167dc6 100644 --- a/tools/hmapdev/assets/sdk.lua +++ b/tools/hmapdev/assets/sdk.lua @@ -82,11 +82,16 @@ function sdk.inject_interrupt_opts(source, channel, text, opts) end -- !impl --- 同步注入:等待本轮回复 -> (reply, err);无回复时 reply 为 nil。 -function sdk.inject_input_sync(source, channel, text) return nil, nil end +-- 同步注入在 Lua 插件中**不可用**:会等本轮回复,而本轮正持有插件锁 ⇒ 必然自锁。 +-- 真实内核里恒返回 (nil, err);这里返回同样的错误,避免离线测试误以为可用。 +function sdk.inject_input_sync(source, channel, text) + return nil, "同步注入在 Lua 插件中不可用:请在事件回调/外部入口用 inject_text/inject_interrupt;确需同步等待请改用 Go 插件。" +end -- !impl -function sdk.inject_input_sync_opts(source, channel, text, opts) return nil, nil end +function sdk.inject_input_sync_opts(source, channel, text, opts) + return nil, "同步注入在 Lua 插件中不可用:请在事件回调/外部入口用 inject_text/inject_interrupt;确需同步等待请改用 Go 插件。" +end -- !impl -- blocks: ContentBlock 数组,见 sdk.inject_input_media。 @@ -109,10 +114,15 @@ function sdk.inject_input_media_opts(source, channel, text, blocks, opts) end -- !impl -function sdk.inject_input_media_sync(source, channel, text, blocks) return nil, nil end +-- 同 sdk.inject_input_sync:Lua 中不可用。 +function sdk.inject_input_media_sync(source, channel, text, blocks) + return nil, "同步注入在 Lua 插件中不可用:请在事件回调/外部入口用 inject_input_media;确需同步等待请改用 Go 插件。" +end -- !impl -function sdk.inject_input_media_sync_opts(source, channel, text, blocks, opts) return nil, nil end +function sdk.inject_input_media_sync_opts(source, channel, text, blocks, opts) + return nil, "同步注入在 Lua 插件中不可用:请在事件回调/外部入口用 inject_input_media_opts;确需同步等待请改用 Go 插件。" +end -- !impl function sdk.inject_interrupt_media(source, channel, text, blocks)