Files
homeagent-sdk/example/commondev
JianFeeeee 330c0c9246 test(commondev): 守住 rawfile/ 不进库却决定包能否运行的隐患
## 背景

`example/commondev/rawfile/.gitignore` 写着 `*`:rawfile 里是随包资源
(可能是上百兆 node/pi 二进制),进版本库会让克隆变慢、每次升级产生
巨型 diff。**这是设计意图**,不是疏忽。

但代价很具体:

	本地打包  → 包里 571 个 runtime 条目(工作区已备好资源)→ 冒烟通过
	CI  打包  → 包里 0 个 runtime 条目(干净克隆没有资源)  → 插件起不来

而两次构建的**日志都写着"成功"**。这类"本地绿、别处坏"我们吃过一次:
TestHmapdevTemplateImplementsAllPluginMgrMethods 读了 gitignore 的文件,
本地绿、CI 红。

本次尤其危险:interrupt 的实现**同时**落在 sidecar.mjs(已进库)和
rawfile/runtime/*/sidecar.mjs(未进库)两处。只改前者,判据全绿、
包里的 sidecar 却还是旧的 —— 取消能力在发布版里根本不存在。

## 判据做什么

不能要求 rawfile/ 必须有内容(干净克隆本来就没有)。但可以:

 · 有内容时,每个 CLI 目录必须有 sidecar.mjs 或 driver.json
 · pi/zcode 的 sidecar **必须**支持 interrupt
 · 没有内容时,用 t.Logf **大声说明**"此状态下打出的包不含 sidecar",
   让这件事出现在测试输出里,而不是静默

## 变异

删掉 rawfile/runtime/pi/sidecar.mjs 的 interrupt case →
判据报"打包后 commondev_agent_interrupt 会失效(源码改了但资源没同步)"
2026-10-18 10:18:40 +08:00
..

commondev

commondev plugin

Build

hmapdev build

Channels

入站与出站是分开登记的两件事:

方向 API 用途
入站 inputch RegisterInputChannel(name, def) 声明「谁会往这个通道注入输入」。凡是用 InjectText/InjectInput/InjectInterrupt*(source, "", ...) 注入的通道名都要登记**
出站 output RegisterOutputChannel(name, caps, desc, def, handler) 声明 output_send__ 的回复发给谁;handler 收到 {payload,type,meta}

def(ChannelDef)描述该通道在记忆计算层的行为:NoMemory: true = 该通道输入不进记忆; Cleaner = 计算层清洗后再向量化/提关键词(原文不改)。

只登记出站通道、却用同名通道注入输入时,内核会兜底登记同名 inputch 并在日志里告警。 兜底只为兼容老插件 —— 请显式登记,让「这是入站通道」成为插件的明确意图。

Install

Upload the .hmap file through the Plugin Manager API.