Repository navigation
Conversation
|
Sentinel 已审核此变更,并发现 1 个已核验问题。 另有 13 个需要人工确认的风险;黄色 advisory 不阻塞合并,建议开发 agent review advisory 评论并逐条确认。 审核覆盖提示: 开发 agent 查询详情: 调用 MCP 工具 由 Sentinel 审核 · 目标提交 a83ab6e19feb |
|
Sentinel 保留了 13 个尚未确认的审核候选。这些黄色条目不阻塞合并;红色 P0/P1 与其他独立硬门禁不受影响。 单一猜测、缺少变更行证据或纯 checklist 的候选会统一降为 P3。
需要完整证据时,可用行末 由 Sentinel 审核 · 目标提交 a83ab6e19feb |
| return; | ||
| } catch (error) { | ||
| if (!['EEXIST', 'EACCES', 'EPERM', 'EBUSY'].includes(error?.code) || Date.now() >= deadline) throw error; | ||
| pause(LOCK_RETRY_MS); |
There was a problem hiding this comment.
Windows 上已有状态文件将无法再次写入
🔴 严重程度:高(P1)
Windows 的 renameSync(temporary, target) 通常不能覆盖已存在的目标,会持续返回 EEXIST 或 EPERM。新增循环只是重复同一个必然失败的操作,直到超时抛错;旧实现会先删除目标再重命名。
Finding:finding_f5b2397bafa874b30b5db635
|
Sentinel 已审核此变更,未发现已核验问题,但发现需要人工确认的风险。 另有 16 个需要人工确认的风险;黄色 advisory 不阻塞合并,建议开发 agent review advisory 评论并逐条确认。 审核覆盖提示: 开发 agent 查询详情: 调用 MCP 工具 由 Sentinel 审核 · 目标提交 efd41c2e788d |
|
Sentinel 保留了 16 个尚未确认的审核候选。这些黄色条目不阻塞合并;红色 P0/P1 与其他独立硬门禁不受影响。 单一猜测、缺少变更行证据或纯 checklist 的候选会统一降为 P3。
需要完整证据时,可用行末 由 Sentinel 审核 · 目标提交 efd41c2e788d |
forrestlinfeng
left a comment
There was a problem hiding this comment.
Code review — rework requested
The MiniMax adapter files themselves are close to mergeable, but this PR also changes shared runtime behaviour for every host, and the installer has a bug.
Blocking
- Installer silently no-ops via a symlinked path —
scripts/install-minimax.mjs:70comparesresolve(process.argv[1])withfileURLToPath(import.meta.url). The first isn't realpath-resolved, so on macOS (/var→/private/var) or any symlinked checkout, the script exits 0 doing nothing. This is whytest/hosts/minimax/install.test.jsfails on macOS (CI only runs Linux/Windows). UserealpathSynclikescripts/pack.mjsdoes. - Shared state now fails closed, silently, for all hosts —
lib/runtime/store/file-lock.js:readStatethrows on bad JSON / wrong shape / EBUSY, andupdateStatethrowsELOCKEDafter 2 s instead of writing unguarded.lib/agent/driver.jshandle()swallows every error and returns the empty reply, so one corrupt store or a busy moment with parallel hooks turns off recall/recording for Codex, Cursor, Grok, etc. with no visible message. Please move this to its own PR and surface the error (status or user message). - Windows: every hook of every host now runs a PowerShell CIM query (up to 2.5 s) —
lib/runtime/process/owner.js+process/windows.js. Previously owner lookup returned null on Windows; now orphan detection switches on for all hosts there, untested (the new Windows CI job only runstest:minimax). Scope it to the MiniMax profile or split it out with per-host tests. - Hooks/workers no longer force exit —
lib/channels/hook/runner.jsandbin/worker.mjsreplaceprocess.exitwithprocess.exitCode. Any lingering timer/socket now keeps the hook process alive on every platform; theConnection: close/ abort additions are compensating for it. The rationale is Windows-only, the change is global.
Design
evolver-statusnow does three jobs —lib/app/commands/status.jsadds job listing/cancel and settings writes. These only work on MiniMax, and on other hosts/evolver-status foochanges from ignored to a usage error. Suggest separateevolver-jobs/evolver-configcommands with ahint, parsed through the existing hint rule.- New task kinds bypass the shared task table —
lib/channels/worker/runner.jshandlescommand:/turn:itself instead of viaWORKinlib/app/background.js. A resident host declaringturnEnd.statusRecordwould be silently ignored; aturn:payload that fails to parse returnsfalseand drops the following tasks. lib/runtime/command-jobs.js—statusgoes throughchange(), so a read rewritescommands.json; the 200 ms poll cancels the running command on any read error, which a concurrent status rewrite can trigger on Windows (sharing violation).
Duplication
promptCommandOfinhosts/minimax/commands.jsis the 4th copy of the prompt-command parser (codex, grok, qoder) — past the rule of three, please extract tolib/agent/commands.js. The pending-request abort block is identical inlib/app/prompt.jsandlib/app/stuck-recall.js.FASThard-codes a command list instead of deriving fromforAgent.
Nits
- SQLite path defined twice (
minimax/model.js,profile.js);profile.jsimports./paths.jstwice;headless.jsre-exportsdataDirOfonly for a test. modelRecordis top-level in the profile whilestatusRecordis underturnEnd..minimax-plugin/plugin.jsonat repo root vs. other hosts' manifests underhosts/<h>/dist.@evomap/evolver-corebump 2.0.38 → 2.0.47 is unrelated to MiniMax.process/windows.js:12is a ~730-column inline PowerShell script; build it from a multi-line constant. New code usesx =>where the repo writes(x) =>.
Suggested path: fix (1), split (2)–(4) into separate PRs with cross-host tests, split the jobs/config subcommands out of evolver-status, then the adapter can land.
|
Sentinel 已审核此变更,未发现已核验问题,但发现需要人工确认的风险。 另有 14 个需要人工确认的风险;黄色 advisory 不阻塞合并,建议开发 agent review advisory 评论并逐条确认。 审核覆盖提示: 开发 agent 查询详情: 调用 MCP 工具 由 Sentinel 审核 · 目标提交 8b4062507c96 |
|
Sentinel 保留了 14 个尚未确认的审核候选。这些黄色条目不阻塞合并;红色 P0/P1 与其他独立硬门禁不受影响。 单一猜测、缺少变更行证据或纯 checklist 的候选会统一降为 P3。
需要完整证据时,可用行末 由 Sentinel 审核 · 目标提交 8b4062507c96 |
|
Sentinel 已审核此变更,并发现 1 个已核验问题。 另有 19 个需要人工确认的风险;黄色 advisory 不阻塞合并,建议开发 agent review advisory 评论并逐条确认。 审核覆盖提示: 开发 agent 查询详情: 调用 MCP 工具 由 Sentinel 审核 · 目标提交 2c0ef89627f0 |
|
Sentinel 保留了 19 个尚未确认的审核候选。这些黄色条目不阻塞合并;红色 P0/P1 与其他独立硬门禁不受影响。 单一猜测、缺少变更行证据或纯 checklist 的候选会统一降为 P3。
需要完整证据时,可用行末 由 Sentinel 审核 · 目标提交 2c0ef89627f0 |
| return quoted.replace(CMD_METACHARACTERS, '^$1').replace(CMD_METACHARACTERS, '^$1'); | ||
| } | ||
|
|
||
| const cmdLine = (command, args) => [String(command).replace(CMD_METACHARACTERS, '^$1'), ...args.map(cmdArgument)].join(' '); |
There was a problem hiding this comment.
Windows 下含空格路径的 .cmd shim 无法启动
🔴 严重程度:高(P1)
新增的 cmdLine() 仅对命令名转义 CMD 元字符,没有将命令路径按 C runtime/CMD 规则加引号;cmd.exe 会把空格前的片段当成可执行命令。
Finding:finding_aefec21cda089eaa4a73a6ce
forrestlinfeng
left a comment
There was a problem hiding this comment.
Round 2 — not yet
Thanks for 8b40625 — the installer now uses realpathSync and has a symlinked-checkout test, so that blocker is fixed.
The rest of the round-1 review is still open, and the PR now conflicts with main (several PRs touching lib/runtime/store/file-lock.js, drafts and verification have merged). Before another review round, please:
- Split the shared runtime changes into their own PRs, each with tests for the other hosts:
readState/updateStatenow throwing (anddriver.handle()swallowing it) — silently turns recall/recording off for every host on a corrupt store or a busy lock.process.exit→process.exitCodeinlib/channels/hook/runner.jsandbin/worker.mjs— affects every host on every platform.- The Windows PowerShell owner probe in
lib/runtime/process/— now runs on every hook of every host on Windows.
- Take jobs/config out of
evolver-status— separateevolver-jobs/evolver-configcommands with ahint; today/evolver-status foochanges from ignored to a usage error on every non-MiniMax host. - Route
command:/turn:tasks through the sharedWORKtable inlib/app/background.jsinstead oflib/channels/worker/runner.js. - Deduplicate: extract the prompt-command parser (4th copy) into
lib/agent/commands.js; share the pending-request abort block betweenprompt.jsandstuck-recall.js; deriveFASTfromforAgent. lib/runtime/command-jobs.js:statusshouldn't rewritecommands.json; the 200 ms poll shouldn't cancel the command on a transient read error.- Rebase onto main and resolve the conflicts.
The MiniMax adapter files themselves are close; once (1)–(3) are split out, the remaining adapter PR should be much smaller and quick to review.
|
Sentinel 已审核此变更,未发现已核验问题,但发现需要人工确认的风险。 另有 20 个需要人工确认的风险;黄色 advisory 不阻塞合并,建议开发 agent review advisory 评论并逐条确认。 审核覆盖提示: 开发 agent 查询详情: 调用 MCP 工具 由 Sentinel 审核 · 目标提交 6c6b4d0ae005 |
|
Sentinel 保留了 20 个尚未确认的审核候选。这些黄色条目不阻塞合并;红色 P0/P1 与其他独立硬门禁不受影响。 单一猜测、缺少变更行证据或纯 checklist 的候选会统一降为 P3。
需要完整证据时,可用行末 由 Sentinel 审核 · 目标提交 6c6b4d0ae005 |
|
Sentinel 已审核此变更,未发现已核验问题,但发现需要人工确认的风险。 另有 15 个需要人工确认的风险;黄色 advisory 不阻塞合并,建议开发 agent review advisory 评论并逐条确认。 审核覆盖提示: 开发 agent 查询详情: 调用 MCP 工具 由 Sentinel 审核 · 目标提交 91c37a35bdbf |
|
Sentinel 保留了 15 个尚未确认的审核候选。这些黄色条目不阻塞合并;红色 P0/P1 与其他独立硬门禁不受影响。 单一猜测、缺少变更行证据或纯 checklist 的候选会统一降为 P3。
需要完整证据时,可用行末 由 Sentinel 审核 · 目标提交 91c37a35bdbf |
|
Sentinel 已审核此变更,未发现已核验问题,但发现需要人工确认的风险。 另有 18 个需要人工确认的风险;黄色 advisory 不阻塞合并,建议开发 agent review advisory 评论并逐条确认。 审核覆盖提示: 开发 agent 查询详情: 调用 MCP 工具 由 Sentinel 审核 · 目标提交 ce8cb59399cd |
|
Sentinel 保留了 18 个尚未确认的审核候选。这些黄色条目不阻塞合并;红色 P0/P1 与其他独立硬门禁不受影响。 单一猜测、缺少变更行证据或纯 checklist 的候选会统一降为 P3。
需要完整证据时,可用行末 由 Sentinel 审核 · 目标提交 ce8cb59399cd |
Summary
Add MiniMax Code as a native host of the existing plugin. Local installation supports recall, verified tool-result reporting, draft distillation, persistent preferences, background commands and recovery after a host exits without
SessionEnd.The adapter captures and validates the session's provider/model/variant, uses a private temporary configuration for tool-free distillation, and prevents recursive hooks. Failed or cancelled turns cannot become verified candidates. Publishing a draft remains an explicit user action.
The release installer reuses a validated
dist/minimaxbundle and its stamped version; an explicit--versionbuilds source instead. Updates retain preferences and drafts. Shared persistence now refuses to overwrite unreadable/invalid state and never deletes the previous state file before a replacement succeeds.Add Linux and Windows test matrices on Node 22/26; both are required by the existing tag publication job. Refresh the development lockfile to the declared Core version and the patched
fast-urirelease. No generated packages or private acceptance records are committed.Evidence
Before: an
EBUSYdraft read became an empty table and lost the old draft; repeatedEPERMreplacement errors deleted the previous file; a release bundle stamped9.8.7was installed as source version1.0.0.After: regression tests preserve the exact previous state on failure, release locks and temporary files, retry transient sharing denial, preserve the released bundle/version, and retain user data across updates and rollback.
Before: MiniMax had no host manifest, native hook adapter or install/update route in this repository.
After: packed hooks exercise recall/reporting, command settings/jobs, model-route validation and draft recovery using temporary profiles and loopback fixtures.
Before the final rebase: full Linux
npm testpassed 691/691 on Node 22.19.0 and 26.0.0; Windowsnpm run test:minimaxpassed 329, with 9 existing POSIX skips, on both versions. All nine hosts packed; dependency audit reported zero vulnerabilities.On the rebased PR head: Windows
npm run test:minimaxandnpm run packpassed on Node 22.19.0 and 26.0.0: 328 passed, 9 existing POSIX skips, 0 failures per run. The count changed because the upstream Recipe change replaced tests; this PR does not remove tests.The post-rebase local Linux rerun was blocked before test execution by WSL service
WSAETIMEDOUT. PR Linux CI must validate the rebased head; the earlier Linux results are not presented as a run of this head.Native MiniMax Code 0.7.4, before the final rebase, with isolated profiles and fixture model/Proxy endpoints: install/update/remove, preferences, background command results and evolution checkpoint passed. An actual check failed, an edit made the same check pass, and killing the owned host without
SessionEndrecovered exactly one unpublished draft with zero publication calls.Current fix head efd41c2 accepts MiniMax's native empty default variant and aborts pending failed-check recall requests at deadline, with regression tests. GitHub workflow run 63 passed for this commit.
Local validation of this fix snapshot: Linux Node 22.23.4 and 26.13.0 each 694/694 full tests plus all nine bundles; Windows Node 22/26 final scoped gates each 332 passed, 9 existing POSIX skips plus packing. Earlier Windows Node 22 attempts hit ELOCKED/cleanup timeout; baseline and isolated comparisons passed, so attribution remains unverified and those failures are retained.
Native MiniMax 0.7.4 reread the actual empty-variant session records and completed on the captured provider route with an isolated loopback backend. Shared Grok-profile/runtime delayed-Proxy reproducer now closes in 0.7s instead of 13.4s; this is fixture runtime evidence, not native Grok acceptance.
Reproduce:
npm ci && npm test && npm run packon Linux;npm ci && npm run test:minimax && npm run packon Windows. Tests need no personal account, credentials or globally installed MiniMax CLI.Shared audit fixes are reviewed separately in PRs #20–#29; they are not all included in this MiniMax branch. No PR was merged and no release/tag was created.
Scope and cuts
This PR covers the complete MiniMax native adapter, direct install/update, shared runtime requirements, regression tests and release gates. It does not add a separate plugin repository or a reduced MCP-only edition.
Marketplace submission is not required for the requested direct-install route; its current intake excludes native hooks. No release tag, published package, acceptance log or developer-machine configuration is included.
Known limitation: Desktop 3.1.6 presents intercepted commands as Request failed, with the result available in its error tooltip. This PR does not change that native presentation. Full final Desktop flow with a real model, native macOS acceptance and real Hub publication remain unverified. Maintainers should assess these disclosed limits and the required PR checks before merging or releasing.
1333f0491d643b2fed2188e6c553d0007cf9bdfd88db0d4235c9f50a2e13b610): Linux Node 22/26 full 757/757 each, pack nine hosts; Windows Node 26 scoped 394 passed / 9 existing skips, pack nine hosts. Windows Node 22 scoped 393 passed / 1 after-hook cleanup failure / 1 cancellation / 9 skips; packing was not run after that failure. The MiniMax body saved its draft and settled its candidate, and report delivery later settled, but cleanup exceeded its unchanged 20s wait. Cause remains unclassified; no rerun, assertion or timeout relaxation. All 388 source files kept their hashes after all four cells. This is a local acceptance gap, separate from each PR's successful CI.Merge Danger
Door: two-way
Code can be reverted; the installer keeps user state outside the replaceable package and restores the previous package if activation fails. Invalid/unreadable state now reports an error instead of silently resetting data; it needs repair before the operation can proceed.
Blast Radius: shared-runtime
State, deadlines, process handling and headless completion are shared with existing hosts. Full Linux tests, the Windows MiniMax/common-runtime gate and packing all nine hosts remain in place. No quality gate is removed or bypassed.