跳转至

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