oh-my-openagent 并行遥测计划合规审计:telemetry-parallel-latency-v2 的并发波模型、节省算法与 RED 证据链解析

oh-my-openagent 并行遥测计划合规审计:telemetry-parallel-latency-v2 的并发波模型、节省算法与 RED 证据链解析 人工智能AI Agent代码智能体多智能体MCP ClientsAgent 编排【免费下载链接】oh-my-openagentOmO: Just type mass ulw keyword with your prompt. Now you are the master of graph engineering.项目地址https://gitcode.com/gh_mirrors/oh/oh-my-openagent点击查看免费下载本文以 oh-my-openagent 仓库中 f1.md 这一份独立的计划合规审计Plan compliance audit报告为主体完整解析telemetry-parallel-latency-v2遥测增强计划的 8 个实施任务Todo如何落地到omo-senpi包的遥测组件中包括并发波wave的区间图组装算法、墙壁时钟节省wall-clock savings的建模与上界公式、eval 工具调用的隔离分类、parallelism_summary事件的 schema 注册与会话级发射以及这套实现背后的RED-first证据链与逐条验收方法。读者读完可以掌握该遥测子系统的数据管线全貌、其公式背后的设计动机以及一个可复用的按验收标准 命令输出 源码行号三级证据的独立审计套路。一、审计背景与基线一个 3499 行的分支如何被独立复核telemetry-parallel-latency-v2是一次聚焦于测量 Agent 工具调用并行度与并行节省的遥测增强计划。F1 审计任务以git diff origin/dev HEAD为范围基线7 commits ahead / 0 behind / 21 files / 3499/-0以独立审计者身份对计划逐条验收只读不改——审计期间不修改任何源码、测试、文档或 skill 文件仅写入审计报告本身也不运行bun install。审计的第一步不是信任任何人的汇报而是亲自复跑基线得到如下确认结果检查项命令结果遥测套件全绿bun test packages/omo-senpi/src/components/telemetry/136 pass / 0 fail / 480 expect() calls, Ran 136 tests across 15 files类型检查全绿bun run --cwd packages/omo-senpi typechecktsgo --noEmit -p tsconfig.jsonexit 0无输出wave-assemblerbun test .../wave-assembler.test.ts13 pass / 0 failsavings-mathbun test .../savings-math.test.ts12 pass / 0 faileval-classifierbun test .../eval-classifier.test.ts10 pass / 0 failomo-native-parallelbun test .../omo-native-parallel.test.ts15 pass / 0 failomo-native-parallel-summarybun test .../omo-native-parallel-summary.test.ts14 pass / 0 fail新增测试合计求和64与计划简报完全一致其中有一个容易被误读的细节dev 分支上的遥测套件是 148 个测试而本分支合并后是 136 个数量变少了。审计者通过三条 git 证据链独立证明了这是 dev 侧的清理而非本分支丢测试git show --stat 372bd800b一个 dev 提交不在本分支上删除了omo-native-buffer.test.ts-176与omo-native-buffer.ts-86并裁剪了omo-native-notice.test.ts-173/…——12 个测试的去向在此git diff --name-only origin/dev HEAD -- packages/.../telemetry/*.test.ts精确列出 7 个文件5 个新增 omo-native-component.test.ts与product-identity.test.ts对后两个文件做grep -c ^ test(得到2个新增测试grep -c ^-.*test(得到0个删除。算术闭环70dev 既有 64新文件 2增量136本分支移除的测试数为零。二、Todo 1wave-assembler——并发波是区间图连通分量不是回合wave-assembler.ts是整个并行遥测的数据入口层负责把start/end成对的工具执行观测组装成并发波ConcurrencyWave。其核心设计决策在文件头注释中写得非常明确并发波是区间图interval graph的连通分量而不是按 turn 分组。一次调用只要其[startMs, endMs]区间与波内任意调用重叠即归入该波因此链式执行A 0-5、B 4-9、C 8-12A 与 C 并不直接重叠仍然是一个波且spanMs maxEnd - minStart而不是最长单次时长——因为下游节省公式需要真实流逝窗口max(duration)会在链式波上严重高估详见第三节。实现层面值得展开的几点对照 wave-assembler.ts容量上限MAX_TRACKED_CALLS 2000wave-assembler.ts。居民态细节在会话运行期间分两处存放等待 end 的 startpendingMap与已配对调用paired数组。关键缺陷修复在于门控判断的是paired.length pending.size MAX_TRACKED_CALLSwave-assembler.ts而不是只统计已完成配对——如果只对 paired 门控那么先发出全部 start 再逐个 end的全并行批会把 pending 撑到无界而这恰恰是本遥测想要测量的并发形态。该 reopen 缺陷历史上 pending 被排除在门控外在提交eb623928c中修复并由两条测试钉死。四槽会计observedCalls paired incomplete dropped anomalies四个计数器必须闭合WaveCounters类型定义于 wave-assembler.ts。异常不进入指标endMs startMs记为clockAnomalies并排除缺失 end 的调用记为incomplete同样不参与指标。sweep 细节sweepMaxConcurrency在时间戳相同时先应用 end 再应用 startwave-assembler.ts因此紧贴触碰一个结束恰好另一个开始的两个调用并发度为 1这一语义在 wave-assembler.test.ts 被断言。对应的 13 条测试逐条覆盖计划验收标准详见 wave-assembler.test.ts3 个重叠调用 → 1 个 size 3 的波:41断言waveShape(result)等于[{ size: 3, spanMs: 600, maxConcurrency: 3 }]3 个顺序调用 → 3 个 size 1 的波:56-60重叠顺序混合的正确切分:74-77缺失 end →incomplete 1且不进入指标:104-107时钟倒挂 →clockAnomalies 1且仅sane波进入:118-121超过 2000 调用 → detail 丢弃但计数器保留:138-141断言trackedCalls MAX_TRACKED_CALLS、droppedCalls 10、observedCalls 2010以及:158-161的 all-starts-first 形态、:174-179的无匹配 start 四槽会计链式 A(0-5)/B(4-9)/C(8-12) → 1 个 span 12 的波:87-89。三、Todo 2savings-math——Σdᵢ − span是唯一基准(N−1)×mean只是上界savings-math.ts回答一个敏感问题并行到底节省了多少墙壁时钟时间它的答案建立在绝不夸大的数学纪律上对照 savings-math.ts模型化节省 sum(durations) − wave.spanMssavings-math.ts。整个文件里唯一的Math.max出现在 round-trip flooring 处:60的Math.max(wave.maxConcurrency - 1, 0)没有任何一处把max(dᵢ)当作节省基准。为什么因为重叠式波并不保证同时启动链式波 A(0-5)/B(4-9)/C(8-12) 真实流逝 12msspan 公式报出节省 2ms而 max 变体报出 9ms——4.5 倍虚高。文件头注释给出了量化的反例max变体把一个同时批 1.20s 报告成 0.70s 的情形做了拆解。(N−1)×mean只以upper_bound标签暴露savings-math.ts。ModeledSavedMs与UpperBoundSavedMs是两个结构上可区分的类型各自携带label: modeled/label: upper_bound字面量调用方无法在不做显式类型转换的情况下把上界当作测量值传递。这是诚实标签honesty labels在类型层面的强制。round-trip 节省跟随maxConcurrency而非波大小链式波有三个调用但任意时刻最多 2 个并发因此只省 1 个 round tripsavings-math.ts测试在 savings-math.test.ts 断言maxConcurrency 2、savedRoundTrips 1且not.toBe(calls.length - 1)。负值不钳制span 比时长总和还宽意味着观测彼此矛盾隐藏它等于隐藏异常因此modeledWallClockSavedMs直接返回负值:126断言toBe(-8)。无 median、无 ratio-mean审计以grep -rni median packages/omo-senpi/src/components/telemetry/*.ts零命中作为 Must-NOT 证据。12 条测试中最有分量的是链式回归线[(0,5),(4,9),(8,12)]→ modeled 2.00 且显式not.toBe(9.0)savings-math.test.ts这正是计划点名的 B1 回归线逐字存在。同批同时[(0,2.0),(0,2.2),(0,1.9),(0,2.1)]→ 6.00:69以toBeCloseTo(6.0, 10)断言长尾[(0,.3)x3,(0,9.0)]→ modeled 0.90 / upper 7.43 且二者数值不同:81-84N1 与 N0 → 全零:94-109。四、Todo 3eval-classifier——eval 波被隔离而不是被过滤后合并并行遥测最容易造假的地方是 eval 工具如果把 eval 调用从混合波中剔除再重算剩余部分波 span 会缩小、表面节省会膨胀实现注释中给出了实测1.20s 被报告成 0.70s。因此 eval-classifier.ts 采用三桶分类eval_only波内全部是 eval 类工具non_eval波内没有 eval 类工具mixed两者都有。summarizeWaveBucketseval-classifier.ts中eval_only与mixed都在进入 non_eval 聚合块之前continue——不存在先过滤再重算的路径Must-NOT 证据在 eval-classifier.ts。waves_total、waves_multi、joined_calls、wave_size_histogram这四个计数器因此只累计non_eval波测试在 eval-classifier.test.ts 用污染 vs 干净输入逐字段对比全部四个计数器含直方图字符串并钉死绝对值3 / 2 / 6 / 1:1:1:0:0:0:0:0。eval 工具名匹配语义由EVAL_TOOL_NAMES [eval, codemode, code_mode]驱动normalizeToolName把code-mode归一为code_mode因此二者是同一标识符族而非新工具。命名变体测试覆盖正向eval, codemode, mcp:eval, code-mode, EVAL, eval , server/eval, tool_eval, code_mode与负向evaluate_foo, evaluate, ln, bash, read, codemodel, eval_helper, ——计划点名的ln不得匹配被显式断言eval-classifier.test.ts。审计还记录了一个非缺陷但值得注意的重复matchesToolName在 eval-classifier.ts 是复制实现而非从omo-native-tools.ts导入。审计者 diff 了两处函数体逻辑完全一致相同归一化、相同四种匹配形式因此匹配契约被满足、语义被测试证明仅作为 DRY 问题转交 F2 处理。另外该模块的输入只有toolNames: readonly string[]与spanMs从输入面保证了eval 的 cell 源码与参数永不被传输Must-NOT 证据。五、Todo 4omo-native-parallel——事件订阅、时间戳纪律与会话生命周期omo-native-parallel.ts是观测的采集层其时间戳纪律是整个测量可信度的前提对照 omo-native-parallel.tsSenpi 的工具执行事件本身不带时间戳ToolExecutionStartEvent是{type, toolCallId, toolName, args}ToolExecutionEndEvent是{type, toolCallId, toolName, result, isError}。因此订阅者在每个 handler 的第一条语句用注入时钟now默认Date.now自行盖章。由此产生一个必须牢记的语义每个 span 都继承了 handler 入口偏差派发排队 双端 handler 进入调用测量时长是两个 handler 入口之间的观测窗口而非工具内部运行时长。turn 边界的非对称处理turn_start携带可信的timestamp字段并原样采用turn_end不带时间戳按到达时刻盖章时长累加measuredTurnDurationMsTotal。两次 turn → 1000ms:118无 start 或时钟倒挂 → 0:126-136。观测按会话缓冲快照时一次性进入assembleWaves因为MAX_TRACKED_CALLS限制的是单次组装调用而非进程增量组装会在每次调用时重置上限使其失效。只有start观测可以打开会话状态omo-native-parallel.tssession_shutdown之后的游离end/turn_end无法复活一个已被清理的会话registry.size() 0与snapshot(...) undefined在 omo-native-parallel.test.ts 断言:229-230证明迟到事件不能复活它。不存储args/result保留的调用恰好等于{toolCallId, toolName, startMs, endMs}:85-86测试在args与result中植入do-not-store哨兵并断言JSON.stringify(snapshot)不含该串。畸形负载不抛异常13 种畸形负载派发到全部四个 handler不抛、零波、零 turn 时长:239-268加上不可解析会话的情形:271-278。模块不自采事件omo-native-parallel.ts没有任何 capture/transport 导入只返回一个 registry——采集与上报彻底分离。六、Todo 5parallelism_summaryschema 注册与诚实标签并行指标进入正式遥测 schema 的注册工作对照 parallelism-schema.ts遵循三条铁律工具调用派生的计数全部带non_eval_前缀non_eval_joined_calls、non_eval_saved_round_trips、non_eval_wave_size_histogram、non_eval_waves_multi、non_eval_waves_total不存在任何不带前缀的 wave/call 计数诚实标签进属性名modeled_wallclock_saved_ms、upper_bound_saved_ms、measured_turn_duration_ms_total三词并列measure 与 estimate 与 bound 一目了然无 median/mean-ratio 属性、无_text/_path/_prompt后缀、直方图无标签直方图是位置式字符串如1:1:1:0:0:0:0:0在 eval-classifier.test.ts 与 omo-native-parallel-summary.test.ts 以not.toContain()断言其无标签。直方图在真实容量上限下的字节约束由 product-identity.test.ts 钉死最坏情况8 buckets × 2000以:连接 39 字符断言toHaveLength(bucketCount*4 7)且toBeLessThanOrEqual(64)同时断言该属性注册为string且在 allowlist 中。一处超出计划字面属性列表的增补被审计判定为可接受dropped_callsparallelism-schema.ts。理由充分Todo 1 的上限现在可以拒绝调用没有它四槽会计paired incomplete dropped anomalies observed无法闭合omo-native-parallel-summary.test.ts它是拒绝计数、发生在分类之前不是non_eval指标不带领域歧义且已在 allowlist 与重新生成的文档中登记。这是增量质量计数器不是新事件不违反无 scope expansion无新事件。七、Todo 6会话级发射——每会话恰好一次且注册顺序是承重墙parallelism_summary的发射语义是每会话恰好一次在session_shutdown时对照 omo-native-parallel-summary.ts为什么必须是session_shutdown在turn_end/agent_settled上发射要么无法知道这是最后一个事件导致每 turn 发射的容量爆炸被明确禁止要么只能发首个 turn静默丢弃后续 turn 的波。session_shutdown是唯一既满足一次/会话又无信息丢失的点。唯一的captureEvent调用点位于session_shutdownhandler 内omo-native-parallel-summary.ts快照被消费后同一 handler 立即清会话因此第二次 shutdown 不再发射、两个会话也不会混用。注册顺序是承重墙两个其他 handler 会破坏本次发射所需的东西——omo-native-component.ts的包装 transport 在会话客户端关闭后清空state.capture迟到 capture 成为静默 no-opregisterOmoNativeParallelTelemetry自己的 handler 会清空会话 registry迟到snapshot()返回undefined。共享 registry 对象不解决顺序问题共享的是状态不是顺序。因此registerOmoNativeParallelSummary先注册自己的session_shutdownhandler再注册订阅者且调用方必须在 session 组件之前调用它顺序在 omo-native-component.ts 有注释说明。把注册挪到 session 组件之后会让测试以Expected length: 1 / Received length: 0失败而 13 个单元测试仍然全绿——这正是强制性变异mandatory mutation证明它钉住的是单元套件在结构上无法钉住的判据。三桶全零则零发射空闲会话、只有 incomplete/anomalous 调用的会话、无工具调用的 turn全部expect(fx.captured).toEqual([])omo-native-parallel-summary.test.ts门控在 omo-native-parallel-summary.ts质量计数器单独不足以触发发射因为只有残缺/异常调用的会话不携带并行信号。eval 在发射端保持隔离只有non_eval分类的波进入nonEvalWaves节省求和只在该数组上进行omo-native-parallel-summary.ts。端到端断言在 omo-native-parallel-summary.test.tseval-only mixed 同时存在 →non_eval_waves_total:1、eval_only_waves:1、eval_only_duration_ms:700、mixed_waves:1纯 mixed 会话 →modeled_wallclock_saved_ms:0、upper_bound_saved_ms:0。turn_completed路径零触碰既有的精确事件流断言daily_active, session_started, omo_senpi_daily_active, prompt_submitted, turn_completed, feature_used在 diff 中逐字节未变omo-native-component.test.ts任何多/少一个turn_completed都会失败git diff origin/dev HEAD -- omo-native-turns.ts product-identity.ts | grep turn_completed零命中证明发射器与 schema 都未被触碰。真实注册路径的端到端证明omo-native-component.test.ts 用录制 transport 驱动真实的createOmoNativeTelemetryComponent(...).register(...)断言恰好 1 条非空parallelism_summary:210并在:217-219用SHARED_KEYS验证载荷键与 allowlist 精确相等exact-set equality而非子集。属性键全量在 allowlist 内omo-native-parallel-summary.test.ts 断言Object.keys(properties).sort()与OMO_NATIVE_PROPERTY_ALLOWLISTS.parallelism_summary排序后完全相等。当前代码中schema_kind取值为parallelism_v2omo-native-parallel-summary.ts而 schema 枚举同时兼容parallelism_v1/parallelism_v2parallelism-schema.ts保证旧客户端读新负载时schema_kind仍是合法枚举值。八、Todo 7/8查询银行与仪表盘卡片仓库外按 skill 文件判定Todo 7SQL 查询银行与 Todo 8仪表盘卡片 文档是 repo-external 工件审计者直接从 skill 文件与 task-7.md、task-8.md 判定fetch_data.py dir --only parallelism实跑退出 0 并写出 JSONparallelism: 1 rows、77 字节文件聚合列名与 schema 属性名逐一精确对应sum(...non_eval_saved_round_trips)、sum(...modeled_wallclock_saved_ms)、sum(...non_eval_waves_total)等每个名字与 schema 完全一致空数据安全live run 返回 1 行 null 且退出 0。upper_bound_saved_ms不是头条被别名upper_bound_saved_ms_ref且只在侧边 kv 行渲染为상한 참고치 (상한, 헤드라인 아님)上界参考值非头条所有聚合都是裸sum()/count()比率以sum(num)/sum(den)形式在unified_model.build_parallelism中形成无 ratio-of-means。仪表盘管线实跑python3 run_dashboard.py --data-dir /tmp/f1-render --no-upload→queries: 41、render_height: 3060、PNG 输出、exit 0。审计者亲自解码 PNG2160×6120 device px 1080×3060 CSS DPR2并对真实页面背景(245,244,237)逐行扫描最后非背景设备行 5963 → CSS 2981.5内容下方留出78 CSS px净空无底部裁切body{height:3060px}。卡片 headline 使用모델 추정 절감模型估算节省副标题明确写出 span 公式(Σ소요시간 − 웨이브 스팬)与측정된 벽시계 시간이 아니라 모델 추정치是模型估算而非实测墙壁时钟eval 桶作为独立行eval 단독 웨이브/eval 혼합 웨이브。两个 reopen 缺陷均已解决页脚过时行grep -n 미계측零命中改为与卡片一致的措辞虚假的 2150px 高度声明被删除高度改为从 CSS 解析run_dashboard.py:59-68task-8.md 以删除线保留原始错误陈述而非抹去。Todo 8 计划中的 checkbox 仍是- [ ]但审计者亲自复核所有标准均已满足判定为簿记状态而非合规缺口。九、审计方法论逐 Todo 验收、成功标准逐行核对、RED 证据完整性9.1 计划Success criteria逐行核验计划的成功标准全部 PASS其中值得展开的判定证据链bun test .../telemetry/含schema-doc.test.ts typecheck 全绿136 pass / 0 failschema-doc.test.ts的#then the generated schema block is byte exact通过docs/reference/senpi-telemetry.md 重新生成且与生成块逐字节一致diff 中新增 16 行parallelism_summary属性每会话恰好 1 条parallelism_summary、注册顺序非 no-op、全部属性 allowlistedomo-native-component.test.ts:210真实路径恰好 1 条:217-219精确键集合 task-6.md:127-166 的变异证明eval 波永不进入non_eval_*含直方图eval-classifier.test.ts:48-70omo-native-parallel-summary.test.ts:170-196端到端默认节省 Σdᵢ − span、链式回归线2.00存在、(N−1)×mean只在_upper_bound下savings-math.ts:46、:50-54、savings-math.test.ts:136-137round-trip 节省跟随maxConcurrencysavings-math.ts:57-63、savings-math.test.ts:143-145本地 skill 渲染新指标无底部裁切pipeline exit 0 3060px 像素扫描 78px 净空全部 Must-NOT 以零出现次数可验证git diff --name-only origin/dev HEAD | grep -E telemetry-core|omo-codex|omo-opencode零命中turn_completed在omo-native-turns.ts/product-identity.ts的 diff 中缺席新源码中无mediansavings-math.ts唯一的Math.max是 round-trip flooring所有 wave/call 计数属性带non_eval_前缀直方图断言无标签。9.2 RED-first 证据链8 个证据文件无一造假RED-first先写失败测试再写实现是该计划的诚实性规则审计逐文件核查了证据真实性Todo证据文件行数RED 证据性质1task-1.md304诚实的 stash RED文件 :21-23 明言实现先写完再mv走以获得真实失败运行This is a stashed RED,notan untouched-first-run RED. Nothing was fabricated.RED_EXIT1逐字捕获:26-41另有第二个独立 REDExpected: 9, Received: 7:44-452task-2.md224真实首跑 RED:35-38明确在实现存在之前……无git stash3task-3.md217测试先于生产模块编写逐字 RED 捕获:31-33另有 naive-filtering 守卫的第二次失败捕获:95-964task-4.md207模块缺失的真实 RED:21No stash was needed加对抗探测发现的会话复活泄漏的第二次 RED:47-635task-5.md233文档门禁本身的 RED:37-39schema 已加、doc 未重生成、schema-doc.test.ts失败——正是计划预测的失败6task-6.md300无字面首跑 RED 标题但携带更强的工件:127-166 的强制变异证明顺序回归测试在真实生产缺陷下失败Expected length: 1 / Received length: 0而 13 个单元测试仍绿。对 wiring/ordering 类判据这是唯一能区分的证明逐字捕获接受7task-7.md256非 TDD 单元SQL 查询银行repo-external携带所需 diff 加 :149 的放宽过滤证明——区分有效查询无数据与查询静默匹配不到任何东西8task-8.md584非 TDD 单元渲染器携带 :278-296 的前后高度测量包括记录在案的真实裁切失败3021px 内容在 3000px 被裁footer line 2 cut, VISUALLY CONFIRMEDreopen 部分记录两个缺陷修复与再验证六个证据文件携带字面 RED 捕获不带的两者6、8携带与其变更类型匹配的更强判别工件变异证明、实测裁切失败。未发现任何伪造的首跑 REDTodo 1 是唯一通过 stash 获取 RED 的案例且在其 Commands 区块顶部用直白语言声明。此外还存在独立验证文件verify-t1-t3.md、verify-t2.md、verify-t4…verify-t8 等与同级终波文件f2.md、f4.md。十、三个不阻塞的发现Findings that do not blockmatchesToolName复制而非导入eval-classifier.ts与omo-native-tools.ts各有一份逻辑相同的后缀匹配器。验收判据匹配语义已满足作为 DRY 问题移交 F2。dropped_calls超出计划字面属性列表合理、allowlisted、有文档、且对四槽会计承重不是新事件、不是被禁止的指标形态作为增补记录而非静默添加。Todo 8 计划 checkbox 未勾选纯簿记工作本身复核干净。以上均不构成未满足的验收判据。十一、结论审计判据与这套方法论的可复用性最终裁定为APPROVE全部 8 个 Todo 满足计划中的每一条验收判据且判定依据是审计者自己重跑的命令输出与对照已交付代码的 file:line 证据而非工人的自述计划的每一条 Success criterion 成立8 个证据文件全部存在各自携带 RED 捕获或诚实、明确标注的失败态获取说明没有任何一条判据被改写、弱化或悄悄丢弃。这套审计方法论本身值得提炼为可复用流程基线复跑亲测而非转述→ 逐 Todo 对照验收标准表逐行取证每个 PASS 都落到 test 文件的行号或命令输出→ 对数字差异做 git 证据链闭合148→136 的去向→ 对结构性判据用强制变异证明registration order→ 对仓库外工件用实跑 像素级扫描 → 非阻塞发现单列、不污染裁定。对于任何以证据完整性为核心的质量门禁项目尤其是遥测、埋点这类无法靠单测覆盖全局正确性的系统这份 f1.md 连同其 8 份 task 证据文件与 telemetry 组件源码 是一份完整的参考标本。赞分享人工智能AI Agent代码智能体多智能体MCP ClientsAgent 编排【免费下载链接】oh-my-openagentOmO: Just type mass ulw keyword with your prompt. Now you are the master of graph engineering.项目地址https://gitcode.com/gh_mirrors/oh/oh-my-openagent点击查看免费下载相关推荐oh-my-openagent OmO Native 遥测波次计划合规审计从 REJECT 到 APPROVE 的源码级复盘oh my openagent OmO Native 遥测波次计划合规审计从 REJECT 到 APPROVE 的源码级复盘 导读 本篇文章以仓库内 .om人工智能AI Agent代码智能体多智能体MCP ClientsAgent 编排oh-my-openagent memory-v2 计划合规审计实战MUST / MUST-NOT 清单驱动的 F1 验证方法论oh my openagent memory v2 计划合规审计实战MUST / MUST NOT 清单驱动的 F1 验证方法论 导读 本文以 oh my o人工智能AI Agent代码智能体多智能体MCP ClientsAgent 编排oh-my-openagent memory-v2 合规审计重跑用 Must-have / Must-NOT 双表构建可追溯的证据链oh my openagent memory v2 合规审计重跑用 Must have / Must NOT 双表构建可追溯的证据链 本文以 oh my op人工智能AI Agent代码智能体多智能体MCP ClientsAgent 编排创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考