JavaScript 分析效果元数据验证¶
跟踪 #3867(属于 #4027)。规范效果记录遗漏了现有的内部 worker 启动和源代码暂存。CapabilityInventory 和 SDK 注册已经直接使用该所有者;无需适配器覆盖。worker 创建私有运行时根目录,暂存 .source 文件,并启动一个自有 REA worker。这些是从源代码派生的事实;被分析的应用程序代码并未执行。
执行结果¶
公开 stdio MCP 前后对比:
| 接口面 | 之前 | 之后 |
|---|---|---|
tools/list openWorldHint |
false |
true |
binary_session 效果 |
mutatesSession, idempotent |
另有 writesFilesystem, launchesProcess |
| 会话注解标志 | idempotent |
另有 open_world |
| 公布的工具 | 207 | 207 |
回归断言在原始契约上失败:2 个失败,18 个通过。在修正并分离无目标元数据案例后,27 个通过,涵盖规范效果、公开的 Electron/JavaScript MCP 以及 SDK 转换目录的有效性。测试保留了非破坏性、幂等的提示和确切的会话效果;未声明任何外部目标执行。
现有的真实验证器在选择了 package.json 和 main.js 的情况下分析了官方 Obsidian 1.14.4,然后读取了类型化模块引用并验证了精确的公开 CLI/MCP 一致性。两个修订版本返回了相同的父/视图 Evidence 标识和 23 行事实摘要。查询回复保持为 22,158 字节,所选模式任务保持为 16,548 个 cl100k_base BPE 令牌(包含完整名称/描述/inputSchema 目录投影时为 204,093)。这些是静态计数,而非模型计费;注解、单独的元数据探针、宿主渲染/重放、推理和最终答案均不在此投影范围内。未运行任何托管智能体。
| 完整真实验证器 | 之前 | 之后 |
|---|---|---|
| 经过秒数 | 30.470 | 31.059 |
| CPU 秒数 | 29.939807 | 30.663163 |
| 峰值 cgroup 字节 | 1,551,282,176 | 1,584,574,464 |
范围包括共享分析、临时导出、CLI 一致性和分词器。仅元数据探针单独使用了 10.711/10.909 秒墙钟时间、10.503415/10.664997 秒 CPU 时间和 842,891,264/853,958,656 字节的峰值 cgroup 内存。所有范围均使用一个 CPU、8 GiB 硬上限、6 GiB 提前停止且无交换;已验证清理过程无 OOM。内存包含已计入的文件缓存,而非 RSS 总和。计数器在负载退出时被观察,同时观察者仍保持存活。全新的 MCP 会话不会建立 OS 冷缓存。共享主机调度以及文件系统/构建的暖度未受控制;单对测量既不能确立性能改进,也不能确立等价性界限。已在 Linux x64 上执行静态 ASAR 分析;未在本地运行实际的 Electron 或其他平台。紧凑记录和源代码哈希 保留了这些区别,而无需归档可下载的应用程序。
复现¶
使用固定的 Node/npm,运行 npm ci,然后运行 npm run build:cached。在检出根目录下,将以下内容作为 ES 模块运行(node --input-type=module < probe.mjs):
import assert from "node:assert/strict";
import { Client } from "@modelcontextprotocol/client";
import { StdioClientTransport } from "@modelcontextprotocol/client/stdio";
import { toolAvailabilityInventory } from "./dist/contracts/toolOutputSchemaPrimitives.js";
import { withVerifierCleanup } from "./scripts/lib/verifier-cleanup.mjs";
const client = new Client({
name: "javascript-effect-verification",
version: "1",
});
const transport = new StdioClientTransport({
command: process.execPath,
args: ["scripts/rea.mjs", "mcp"],
stderr: "pipe",
});
await withVerifierCleanup(async () => {
await client.connect(transport);
transport.stderr?.resume();
const { tools } = await client.listTools();
const tool = tools.find(
({ name }) => name === "analyze_javascript_application",
);
assert.ok(tool);
const response = await client.callTool({
name: "binary_session",
arguments: {},
});
assert.notEqual(response.isError, true);
const inventory = toolAvailabilityInventory.parse(
response.structuredContent?.result?.tool_availability,
);
const group = inventory.groups.find(({ names }) => names.includes(tool.name));
assert.ok(group);
console.log(
JSON.stringify({
tool: tool.name,
advertised_annotations: tool.annotations,
session_effects: group.effects,
session_annotations: group.annotations,
catalog_tool_count: tools.length,
}),
);
}, [() => client.close(), () => transport.close()]);
对于真实工作流,请遵循 模块引用验证 中的工件获取/摘要说明。使用 --mode references --rounds 1 --cli-parity 以及相同的所选源代码路径和分词器运行其现有命令。该验证器不受此修复的影响。保留的 8 GiB cgroup 观察器及其源代码哈希记录在同一指南中。机器可读记录将元数据探针资源与完整真实工作流资源分开。
本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 rea2/rea