开始组装
ASM 扩展目前位于此仓库的 asm/packages/ 目录,由 asm/ 独立 npm 工作区管理。以下名称来自各包的 package.json,示例用于源码集成;不要据此假定这些扩展已发布到 npm。
| 目录 | import 名称 |
|---|---|
asm/packages/durable-pg |
@asm/durable-pg |
asm/packages/durable-routine |
@asm/durable-routine |
asm/packages/durable-trigger |
@asm/durable-trigger |
asm/packages/extra-tools |
@asm/extra-tools |
asm/packages/asm-mcp |
@asm/asm-mcp |
五个包的版本均为 0.1.0,运行期 pi 依赖通过 peerDependencies 固定为 1.5.0,由宿主提供唯一实例。所有包均提供 dist 中的 JavaScript 和类型声明,source 条件供源码工具使用。先在仓库根目录安装并构建 pi,再在 asm/ 安装、构建和检查:
npm ci --ignore-scriptsnpm run buildcd asmnpm ci --ignore-scriptsnpm run buildnpm run checknpm testnpm run test:e2efork 模式将 pi 依赖链接到父仓库;npm run pi:check 验证精确版本和实例唯一性。文档站是独立项目,不加载这些包。
先跑通业务边界
Section titled “先跑通业务边界”下面的最小调用使用仓库提供的确定性模拟数据,不连接数据库或外部 API。在能够解析上述源码包的宿主中运行:
import { AsmMcpServer, generateAsmMultitenantSeed, InMemoryAsmDataProvider,} from "@asm/asm-mcp";
const seed = generateAsmMultitenantSeed();const example = seed.knowledge[0];if (example === undefined) throw new Error("示例知识条目缺失");
const server = new AsmMcpServer({ provider: new InMemoryAsmDataProvider(seed),});const result = await server.callTool( "knowledge_search", { query: example.chapter, topK: 1 }, { tenantContext: { tenantId: example.tenantId, scopeId: example.scopeId, roles: ["store_manager"], }, execution: { runId: "docs-demo", callId: "knowledge-1", mode: "direct" }, },);console.log(result.structuredContent);实际应用必须从已认证的入口产生 tenantContext 和 execution。模型只提供业务参数,不能决定租户、权限或调用身份。
再选择持久化和入口
Section titled “再选择持久化和入口”- 需要共享数据库时,用 durable-pg 建立租户与会话隔离,并由宿主维护 PostgreSQL、Redis 连接。
- 需要定时任务时,用 durable-routine 计算执行时刻,提供运行记录库、锁及
openHarness。 - 需要日历轮询或 Webhook 时,用 durable-trigger 将入口统一为事件,再交给 Routine 执行。
- 需要提问、子任务或技能时,安装 extra-tools 扩展;报告业务再选择 asm-mcp。
宿主负责认证、驱动适配、模型配置、轮询或 HTTP 服务,以及关闭资源。ASM 包提供组合接口,不会替宿主启动一整套服务。
源码依据:五个扩展包、模拟数据与 Provider。