mirror of
https://github.com/l0ng-ai/openidea.git
synced 2026-11-06 16:08:05 +00:00
Plugin API (breaking; the plugin system is unreleased): - Remove the runtime `contributions` interface (register-command, register-language, register-theme). Commands, languages and themes are declared in plugin.toml only, so everything a plugin contributes goes through the install preview and consent. The registry drops runtime scope, `contribute` and `dispose_runtime`; inline `definition` in language and theme declarations is gone. - `completion-item.kind` is a string (the 25 LSP kinds; unknown kinds show no icon), like the other open-ended kinds. - `lifecycle.activate` and `commands.run` return `types.error` instead of a string. The host maps it to the matching error kind, and only `failed` counts against the plugin: cancelling, a missing grant or an unknown command does not. The SDK's `Plugin` returns `Result<_, Error>`; plain messages convert to `Error::Failed`. Runtime: - Editor providers of several plugins are called at the same time (`Actor::submit` + `Pending::wait`): the wait is the slowest plugin's, not the sum, so each gets the full edit-path budget. Versioning and tooling: - Components are checked at install and by `openidea-plugin check` for the plugin API they were built for; another major or a newer minor is refused with what to do. - Tests: the SDK's WIT matches the host's, a simulated next-minor host links every shipped component, every host function has an SDK wrapper, released APIs only grow (no snapshot until the first release). - plugins/build.sh builds every checked-in component, records a source fingerprint next to it, and `--check` fails on stale components; CI runs it plus fmt, clippy (host and wasm) and tests for the SDK, the official plugins and the fixtures. - The API evolution rules and the checklist for a new host function are in plugins/README.md; the design notes under docs/ are removed.
93 lines
2.9 KiB
JSON
93 lines
2.9 KiB
JSON
{
|
|
"$comment": "Upper bounds, lower is better. ui: `<scenario>.<metric>` from `pnpm perf` (medians of the measured runs; enforced at CPU 1x only). Latencies are input → start of the first frame showing the result, so ~16.7 ms is 'next frame'. rust: criterion bench id → mean in microseconds, from `pnpm perf:rust` (`plugins/…`: the plugin runtime budgets).",
|
|
"regressionTolerance": 0.2,
|
|
"regressionFloor": 1,
|
|
"ui": {
|
|
"bundle.initialJsKb": 850,
|
|
"bundle.initialCssKb": 60,
|
|
|
|
"startup.readyMs": 400,
|
|
"startup.tbtMs": 50,
|
|
"startup.heapMb": 30,
|
|
"startup.domNodes": 1500,
|
|
|
|
"typing.p95Ms": 20,
|
|
"typing.maxMs": 33,
|
|
"typing.missedFramePct": 2,
|
|
"typing.styleLayoutMsPerKey": 3,
|
|
"typing.mainThreadMsPerKey": 10,
|
|
"typing.tbtMs": 50,
|
|
|
|
"typingLarge.openMs": 200,
|
|
"typingLarge.p95Ms": 20,
|
|
"typingLarge.maxMs": 33,
|
|
"typingLarge.missedFramePct": 2,
|
|
"typingLarge.styleLayoutMsPerKey": 3,
|
|
"typingLarge.mainThreadMsPerKey": 20,
|
|
"typingLarge.tbtMs": 50,
|
|
|
|
"keyRepeat.p95Ms": 20,
|
|
"keyRepeat.maxMs": 33,
|
|
"keyRepeat.missedFramePct": 2,
|
|
"keyRepeat.mainThreadMsPerKey": 16,
|
|
"keyRepeat.tbtMs": 50,
|
|
|
|
"scroll.frameP95Ms": 17.5,
|
|
"scroll.droppedFramesPct": 2,
|
|
"scroll.tbtMs": 50,
|
|
"scroll.jumpMs": 33,
|
|
|
|
"tabs.openSmallMs": 100,
|
|
"tabs.switchP95Ms": 33,
|
|
|
|
"popups.findActionOpenMs": 50,
|
|
"popups.findActionQueryMs": 120,
|
|
"popups.findActionKeyP95Ms": 33,
|
|
"popups.searchEverywhereOpenMs": 50,
|
|
"popups.searchEverywhereQueryMs": 120,
|
|
|
|
"toolWindows.maxMs": 50,
|
|
|
|
"projectTree.expandMs": 50,
|
|
"projectTree.frameP95Ms": 17.5,
|
|
"projectTree.droppedFramesPct": 2,
|
|
"projectTree.arrowKeyP95Ms": 20,
|
|
"projectTree.arrowKeyMissedFramePct": 2,
|
|
|
|
"leaks.heapGrowthMb": 4,
|
|
"leaks.domNodeGrowth": 100,
|
|
"leaks.listenerGrowth": 20
|
|
},
|
|
"rust": {
|
|
"text/open_1mb": 2000,
|
|
"text/apply_keystroke_1mb": 20,
|
|
"text/apply_100_changes_1mb": 1000,
|
|
"text/offset_to_pos_round_trip": 5,
|
|
"text/pos_to_byte": 5,
|
|
"text/text_for_save_crlf_1mb": 1000,
|
|
|
|
"syntax_2mb/selection_cached_hit": 5000,
|
|
"syntax_2mb/outline_cached_hit": 10000,
|
|
"syntax_2mb/folding_cached_hit": 1000,
|
|
"syntax_2mb/folding_after_keystroke_incremental": 200000,
|
|
"syntax_2mb/outline_after_keystroke_incremental": 350000,
|
|
|
|
"index_100k/find_files/a": 10000,
|
|
"index_100k/find_files/ordcon": 10000,
|
|
"index_100k/find_files/src/user": 10000,
|
|
"index_100k/find_files/PaymentService": 10000,
|
|
"index_100k/find_symbols/OCo": 15000,
|
|
"index_100k/find_symbols/q": 15000,
|
|
"index_100k/find_symbols/invoiceRepo": 15000,
|
|
"index_100k/find_symbols_types/UsSe": 15000,
|
|
|
|
"search_5k/literal": 100000,
|
|
"search_5k/regex": 100000,
|
|
"search_5k/dense_limit": 20000,
|
|
|
|
"plugins/load_50": 20000,
|
|
"plugins/cold_activation": 30000,
|
|
"plugins/syntax_highlights_2k_lines": 50000
|
|
}
|
|
}
|