fix(plugin): skip non-function exports in getLegacyPlugins - #1943
Closed
Cipher208 wants to merge 688 commits into
Closed
fix(plugin): skip non-function exports in getLegacyPlugins#1943Cipher208 wants to merge 688 commits into
Cipher208 wants to merge 688 commits into
Conversation
…reflect real progress Co-authored-by: MiMo-Code <noreply@mimo.xiaomi.com> (cherry picked from commit 6ced0ae183fd491c07bc3d939eea59810ace6de4) (cherry picked from commit cfd30c1)
…or mode (was duplicated) Co-authored-by: MiMo-Code <noreply@mimo.xiaomi.com> (cherry picked from commit ef9e4bd1cd4ae130062c9a97e38f823bc17cb9a0) (cherry picked from commit 36ad4d6)
…ome (T36 follow-up) Co-authored-by: MiMo-Code <noreply@mimo.xiaomi.com> (cherry picked from commit 2288eb72bce75b6180698257a99da10b23bcd4f5) (cherry picked from commit 4d0fb8b)
…r reflex (T45) Co-authored-by: MiMo-Code <noreply@mimo.xiaomi.com> (cherry picked from commit cdf861cd278e76c920523100727d5f22ac2ca8b5) (cherry picked from commit d8e811c)
…ressable immediately (T42) Co-authored-by: MiMo-Code <noreply@mimo.xiaomi.com> (cherry picked from commit 54ad612030ba8b51ed02c1b027e954bc9c0f6877) (cherry picked from commit 5c8d9d1)
… render) Co-authored-by: MiMo-Code <noreply@mimo.xiaomi.com> (cherry picked from commit 6274e46371e285a10e5a4554675f7f02402008fe) (cherry picked from commit 5316daf)
…ever-run peers The T12 woken-turn notification test polled only the raw InboxTable row, which races the parent main runner: inbox.send fork-wakes parent main, whose runLoop drains the actor_notification row into a synthetic message before the poll sees it (observed 6/10 flaky failures). Assert delivery on EITHER surface — the raw inbox row or the drained synthetic <actor-notification> message in the parent main slice. Notification delivery itself was always correct; only the assertion was racy. Now 12/12 stable. Co-authored-by: wqymi <wangqiying@xiaomi.com> (cherry picked from commit 1f6cddd768a65801143d011c2aff541c4890b1c2) (cherry picked from commit 47734de)
… bridge (T41) Co-authored-by: MiMo-Code <noreply@mimo.xiaomi.com> (cherry picked from commit 4de816861cc2454c820f64db27681b136d4b7fe7) (cherry picked from commit bf33001)
…e child (T43) Co-authored-by: MiMo-Code <noreply@mimo.xiaomi.com> (cherry picked from commit fd39c9b)
…erb + list split (T39) Co-authored-by: MiMo-Code <noreply@mimo.xiaomi.com> (cherry picked from commit 248a0ef)
…ated result when all children terminal (T38) Co-authored-by: MiMo-Code <noreply@mimo.xiaomi.com> (cherry picked from commit a5c20d2)
… the parent (T40) Co-authored-by: MiMo-Code <noreply@mimo.xiaomi.com> (cherry picked from commit d15bae78e275e2a06c2722f9f2923d8a29fce3ce) (cherry picked from commit 89e1791)
… send/status/join/--topic, event-driven stall) and drop stale relay/known-limitation (T44) Co-authored-by: MiMo-Code <noreply@mimo.xiaomi.com> (cherry picked from commit 00b487af054577c169b45b59097267d4779fcbaf) (cherry picked from commit 7b195a6)
…ithout a home flash (T50 follow-up) Co-authored-by: MiMo-Code <noreply@mimo.xiaomi.com> (cherry picked from commit f12de43aaf31090a254db9b5f45b6960535adc80) (cherry picked from commit bccdfb8)
sweepOrphanAssistants gains an immediate flag; the user-message entry passes immediate=true when the session is idle (no active runner), so a dangling assistant left by a hard interruption is completed at once instead of after the 1h ORPHAN_AGE_MS. This clears the TUI 'pending' marker so a newly submitted message on an idle session is not rendered QUEUED. Background spawn/hook callers keep the age guard. Adds tests. Co-authored-by: MiMo-Code <noreply@mimo.xiaomi.com> (cherry picked from commit 0efada6)
…of cancelling them (align session interaction with human↔session) Co-authored-by: MiMo-Code <noreply@mimo.xiaomi.com> (cherry picked from commit fcc28f5ba7f5a0f4eef4cca9568ffff48f6d1c1e) (cherry picked from commit 7d97bd9)
…dren external_directory asks for granted dirs Co-authored-by: MiMo-Code <noreply@mimo.xiaomi.com> (cherry picked from commit c05fe6f)
…in one view Co-authored-by: MiMo-Code <noreply@mimo.xiaomi.com> (cherry picked from commit 58b44f4a6eed069d14015c6b9c7c91c6f0d14dd1) (cherry picked from commit ca4b064)
The list action enriched children with actor rows but never filtered system subagents (checkpoint-writer, dream, distill, read-only forks), so they leaked into the orchestrator's peer listing and inflated counts. Apply the same mode:subagent / SYSTEM_SPAWNED_AGENT_TYPES filter that the dashboard and status branches already use. Co-authored-by: MiMo-Code <noreply@mimo.xiaomi.com>
…chestrator dir before -c resume Two non-blocking findings from PR XiaomiMiMo#1681 review: - deriveLiveness now reads `progressing` for a child with turnCount===0. A peer is registered at spawn with lastTurnTime=spawn time and turnCount=0, so a first turn that hasn't started within 90s (queued behind the concurrency gate, model cold-start) was wrongly flagged `stalled` and triggered an "appears stalled" false positive before it ever ran. A stalled row must now have run at least one turn. Tests updated to reflect the new invariant. - The -c resume effect in tui/app.tsx no longer latches continued=true down the plain root-session branch while orchestratorDirPath() is still unresolved. orchestratorDirPath resolves asynchronously in onMount; if sync reached "partial" first, the orchestrator session was resumed as a plain build session and continued=true was set permanently, so the later resolve could never correct it. A new orchestratorDirResolved signal gates the decision until the path settles.
resolveDrainSeed's Tier 1 fallback searched the WHOLE session (agentID "*") for a prior model-bearing message. That broke WorkflowRuntime: a workflow parent session runs its subagents under its own session, and when a child's completion actor_notification is delivered to the parent "main" actor, the inbox send wakes the parent loop and drains the row. The cross-slice seed found a *sibling subagent's* message, fabricated a synthetic user turn on the host, and burned a real LLM call — stealing the queued response the next agent() call expected. Symptoms: the second of two queued responses became the auto-"ok" fallback, so replay re-spawned the wrong count and the structure tree recorded a stale resultSummary (runtime.test.ts replay/structure failures introduced by PR XiaomiMiMo#1681's inbox drain-seed relay, commit efd89e2). Fix: gate the cross-slice search on the receiver being a `peer` (a standing peer legitimately runs a turn under one slice then relays via another). Every other receiver — ordinary subagent, or a coordinating host/"main" actor — searches only its own slice, restoring the pre-relay behavior. Tier 2 (registry-row + default-model) is unchanged, so the turnCount-0 standing-peer relay still works. Verified: inbox tier-1/2/3 drain tests + session-tool relay tests stay green.
…tatus, not just actor lifecycle Two defects in renderActorNotification/parseActorNotification: 1. Semantic: "actor completed" described the sub-session *process lifecycle* ending, which is independent of the task outcome. A sub-session can exit cleanly while its reportedStatus is failed/blocked, yet the old text always said "completed. Status: unknown", implying success. Completion wording now aligns with reportedStatus: success/partial → "completed"; failed/blocked → "finished (status: ...)" (no success implication); unknown → neutral "ended (status not reported)" with the misleading "Status: unknown" line dropped. 2. Terminology: "actor" is an internal term. Top-level wording and the TUI card now say "sub-session" to match the orchestrator context. parseActorNotification (inverse) and its header regex are updated to parse the new verbs so the XiaomiMiMo#1699 TUI card keeps parsing, adding an "ended" status. Round-trip render->parse is covered by tests.
…he directory (XiaomiMiMo#1714) Extract MIMOCODE_GITIGNORE_ENTRIES constant and ensureMimocodeGitignore() helper into config/gitignore.ts so the entries list is defined once. Both config.ts and cron-lock.ts now reference the shared module.
…* skills (XiaomiMiMo#1715) * fix(session): include colon in multi-skill mention regex for compose:* skills * test(session): add regression tests for skill mention regex colon support
…st hooks Previously trajectory consumers only saw the rare MessageV2.User.system per-turn override — the assembled runtime system prompt (agent + provider + additions + memory + plugin transforms) built in buildLLMRequestPrefix was never surfaced. Capture the latest prebuiltSystem into a runLoop-scoped variable at both fork and main paths, then forward it as an optional systemPrompt: string[] field on both hook inputs so private overlays like the trajectory event uploader can log/replay against the exact system prompt the model saw.
Per project style guide (default to no comments; only add one when the WHY is non-obvious): the field names and surrounding context already convey what these blocks were saying.
…iaomiMiMo#1716) The mention auto-load system used sys.available() which filters hidden skills, preventing compose:* skills from being detected when users type /compose:ask etc. in free text. Switch to sys.all() so all registered skills (including hidden compose skills) are matchable by the /name mention regex.
…ce (XiaomiMiMo#1718) The pixel-based at-bottom check (scrollTop >= scrollHeight - 1) introduced in XiaomiMiMo#1685 has a timing race: when switching agent views, SolidJS effects fire after reactive renders that may have already grown scrollHeight (new streaming content, navigation chrome), but opentui's sticky-scroll adjustment hasn't run yet. This causes scrollTop to momentarily lag behind scrollHeight, making the check fail and incorrectly saving a mid-scroll position. Replace with opentui's internal _hasManualScroll flag — the authoritative source of truth for whether the user has scrolled away from the sticky edge. This is immune to content-growth timing since it tracks user intent, not instantaneous pixel position. Follow-up to XiaomiMiMo#1685
…oordination feat(orchestrator): mode entry/nav, reliable relay + liveness/fan-in, grant persistence, prompt & UI polish
…ard-compat regex Finding 1 (UX consistency): actor.ts start notification now says 'Background sub-session started.' instead of 'Background actor started.' to match the finish notification format. Finding 3 (backward compat): parseActorNotification regex now accepts both 'Background sub-session' and legacy 'Background actor' formats so old persisted notifications render as TUI cards instead of raw text. Includes regression test for legacy 'Background actor' format.
fix(log): isolate writers and flush safely on exit
- gate placeholder signatures behind an opt-in flag - preserve signed and redacted Anthropic reasoning unchanged - cover default-off and non-Anthropic behavior
…igned-reasoning-replay feat(provider): replay unsigned Anthropic reasoning
- prefer the persisted recent selection over the configured default - wait for recent state to load before choosing startup fallbacks
…el-restore fix(tui): restore recent model on startup
- build the native mimo binary for the current platform\n- install it atomically into the configurable local bin directory
…-script feat(cli): add local install script
- document interactive, headless, session, sandbox, and MCP workflows - keep invocation explicit and cover bundled discovery
feat(skill): add Grok Build CLI guide
…ill-description fix(skill): simplify Claude Code trigger description
…g-effort-variants fix(provider): enable reasoning effort variants for DeepSeek models
- prevent official reasoning effort options from leaking to OpenRouter and custom endpoints - cover official, OpenRouter, and custom provider routing
…nt-provider-scope fix(provider): scope DeepSeek variants to official API
Add a bundled browser-automation workflow with a portable CLI wrapper and usage references.
feat(skill): add Playwright CLI automation bundle
…right-cli chore: ignore Playwright CLI artifacts
Require explicit opt-in via dream.auto / distill.auto config instead of running memory consolidation and workflow packaging automatically.
…am-distill-default-off feat: disable auto-dream and auto-distill by default
External plugins fail to load because getLegacyPlugins throws TypeError when encountering any export that is not a function and doesn't have a 'server' property (e.g. constants, config objects, type re-exports). This causes the entire plugin to be silently skipped — the error is caught in applyPlugin's Effect.catch and logged, but hooks are never registered. Fix: change 'throw' to 'continue' so non-plugin exports are silently skipped, matching the behavior of getServerPlugin which already returns undefined for non-plugin values. This fixes the issue where external plugins (plugin: [...]) don't execute their module code in MiMoCode 0.38.9.
Replaces separate lint.yml, test.yml, typecheck.yml with unified ci.yml: - typecheck: bun typecheck - lint: oxlint + prettier check - test: sharded unit tests (4 shards) - security: skylos scan on plugin directory - quality: repowise health on plugin directory - python: auto-detects pyproject.toml, runs ruff/mypy/pytest - rust: auto-detects Cargo.toml, runs cargo check/test - go: auto-detects go.mod, runs go vet/test Multi-language: Python, Rust, Go jobs auto-detect and skip if no files found.
Author
|
Replaced by clean PR #1944 (bug fix only, no CI/CD changes) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fix: getLegacyPlugins throws TypeError on non-function exports, silently skipping plugins. Change throw→continue.