neuron-explorer
Steering-first neuron explorer for Qwen3.5-4B: push every MLP neuron, keep every rollout, browse the results
翻译准备中
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证Unified component architecture for React with TypeScript, MobX reactivity, automatic events, and message bus communication.
翻译准备中
取自仓库 README
正在加载完整 README。 以下为已保存的摘录。
The React framework for applications that AI agents write and people verify.
UECA-React is a framework for building scalable React applications with a unified and encapsulated component
architecture. It simplifies development by hiding the complexities of React and MobX behind a consistent
component pattern. The framework is designed specifically for AI code generation and human verification: it
ships the agent skills that teach an assistant the pattern, and a trace viewer that shows you what the
generated application actually does.查看完整 README ↗The React framework for applications that AI agents write and people verify.
UECA-React is a framework for building scalable React applications with a unified and encapsulated component architecture. It simplifies development by hiding the complexities of React and MobX behind a consistent component pattern. The framework is designed specifically for AI code generation and human verification: it ships the agent skills that teach an assistant the pattern, and a trace viewer that shows you what the generated application actually does.
UECA-React is built for projects where AI agents write the code and people stay in control of it — a web application or a site alike.
struct, a model hook and a functional component — with the struct's sections in one documented order.
An agent that has seen one component has seen the pattern, and a reviewer checks the same short list on
every file.skills/ holds two agent skills:
ueca-app-development for writing components — the pattern, state and
bindings, lifecycle, model caching, the message bus — and
ueca-app-architecture for a whole application — a complete barebone
app to scaffold from, where each concern belongs, and how to move an existing app across: rewrite it from
its documentation, or migrate a React app in stages.
They describe the published API only, so they hold for any project.globalSettings.errorHandler, rather than being logged and dropped. The ones that fail silently are
listed by symptom in the skills, so an agent looks the cause up instead of guessing.UECA.trace saves the same record
as JSON or as a Mermaid diagram for an agent to read.CLAUDE.md and the two skills.Give your agent the skills — .claude/skills/ is where Claude Code looks:
npx ueca-react-skills
That copies both skills into .claude/skills/, replacing any earlier copy so nothing stale survives an
upgrade. Your own skills in that directory are left alone, and --dest puts them wherever your agent
reads its instructions instead.
Installing the package runs nothing: there is no postinstall hook, so the skills arrive when you ask for
them and not before. Re-run the command after upgrading ueca-react, or put it in a postinstall of your
own.
skills/README.md covers --dest for an agent that reads its instructions
elsewhere, the manual alternatives, and the lines to add to whichever file your agent reads first.
deinit runs after a component has re-rendered, React 19 builds one model per
hook call, and React 18 is tested — the whole suite runs on it in CI.render={false} on any component element, a message bus of your own
(createMessageBus and useCustomMessaging), and StructHooks for declaration files.Date, RegExp, Map or Set is no longer taken for no change, and a
failing lifecycle hook reaches errorHandler under Node too.The changelog has the detail, including the four mistakes that now throw.
View is built once and stays the same component type, so
re-rendering a component no longer remounts what is under it — a plain React component inside a UECA view
keeps its useState, its refs and its effects.isEqual is linear: three comparisons of equal
100,000-item values took 25 s and take 0.2 s.The changelog has the detail, including the one thing an application can notice: an in-place change to a plain, non-observable source array no longer reaches a bound property.
That is not a mock-up — go press the button yourself. All three live demos ship
<UECA.TraceViewerButton/> in the corner. Open one, click it, and the viewer above opens on the
application you are looking at, with its own trace in it. Each demo's source sits next to its link.
<UECA.TraceViewerButton/> at the root of an application and
watch it run — the component tree, the message bus and every binding, live. See below.globalSettings.errorHandler.React.StrictMode is supported — and the leak it exposed is fixed for everyone else too.onChanging rewrite now reaches the far end of a
chain, and arrays sync in place at roughly twice the speed.skills/ carries the component pattern and the
whole-application architecture, so an AI assistant working in your project follows them instead of
guessing at them. See Built for AI agents.To install UECA-React, run the following command:
npm install ueca-react
Ensure that your project also has the following dependencies installed:
Compatible React versions: 16–19. Make sure your react-dom version matches your react version.
Every UECA component is the same three declarations — a struct, a model hook, and a functional component:
import * as UECA from "ueca-react";
type ButtonStruct = UECA.ComponentStruct<{
props: {
caption: string;
disabled: boolean;
};
events: {
onClick: () => void;
};
}>;
type ButtonParams = UECA.ComponentParams<ButtonStruct>;
type ButtonModel = UECA.ComponentModel<ButtonStruct>;
function useButton(params?: ButtonParams): ButtonModel {
const struct: ButtonStruct = {
props: {
// `id` comes first: it drives the DOM id, the full path, bus addressing and the model cache.
id: useButton.name,
caption: "",
disabled: false
},
events: {
onClick: () => {
console.log(`${model.fullId()} clicked`);
},
// Generated for every property, with no declaration needed.
onChangeDisabled: (value) => {
console.log(`${model.fullId()} disabled=${value}`);
}
},
View: () => (
<button
id={model.htmlId()}
disabled={model.disabled}
onClick={() => model.onClick?.()}
>
{model.caption}
</button>
)
};
// Declared after the struct, which closes over it. Later calls return the same model.
const model = UECA.useComponent(struct, params);
return model;
}
const Button = UECA.getFC(useButton);
export { type ButtonModel, useButton, Button };
Use it as a component, or drive it through its model:
<Button
caption="Save"
disabled={false}
onClick={() => save()}
/>
For more detailed information, check out the full documentation.
Every model creation, lifecycle hook, render, property change, binding sync, cache decision and bus message is a structured trace record. The viewer ships with the library and reads them live.
// A button pinned to a screen corner, opening the viewer over your application:
<UECA.TraceViewerButton/>
// ...or the panel embedded wherever you want it:
<UECA.TraceViewer height={600}/>
Both are development tools, and a closed viewer costs nothing — the viewer page is a separate chunk that is downloaded only when it is opened.
Five views over one trace:
| View | What it shows |
|---|---|
| Table | every record, filterable by kind, component and text; click one for the full detail. Above 200 rows it draws only the rows on screen |
| Timeline | when things happened, and what happened together |
| Sequence | messages and calls between components, as a sequence diagram |
| Tree | the component hierarchy the trace built |
| Graph | the component tree with the message bus and binding wiring drawn on it — and the trace played through it |
You do not need any UI at all:
UECA.globalSettings.tracing = { capture: 5000 }; // record silently, even with the console quiet
UECA.trace.records(); // everything captured
UECA.trace.save("trace.json"); // reopen it in the viewer
UECA.trace.save("flow.mmd"); // ...or write a Mermaid sequence diagram
window.UECA is globalSettings, so window.UECA.trace.save() works from a devtools console with
nothing imported and no rebuild.
onChangeCaption for caption prop)constr → init → draw → mount, out through erase → unmount → deinit3.0 is a breaking release. The short list — the changelog has the detail:
cacheable, two siblings claiming one id, and a
parameter that switches between a binding and a value.unicast and castTo throw before dispatching when more than one subscriber matches.unicast("Msg", undefined) is a compile
error, unicast("Msg") is correct.draw and erase must be synchronous.children-section constant is an initial value and is no longer re-asserted when a cached model
remounts. A JSX prop still is.id and cacheable no longer accept a binding, and no longer generate onChange/onChanging events.hashHtmlId is read from globalSettings, not from window.See UECA-React in action in complete working applications, developed with AI agents — GitHub Copilot at first, Claude Code since.
Every one of them ships <UECA.TraceViewerButton/>: the button in the corner opens the
trace viewer on the running application, so you can watch the component
tree, the message bus and the bindings of code you can read in the same tab.
🔗 Demo 1: Showcase
📂 Source Code: GitHub Repository
🔗 Demo 2: UECA-React API Documentation
📂 Source Code: GitHub Repository
🔗 Demo 3: MUI Components
📂 Source Code: GitHub Repository
Comprehensive API Documentation is also available, and the package ships the programming guide in the docs folder.
The guide:
docs/raw/index.md is the contents page, and
docs/tools/trace-viewer.html reads a saved trace with no application
running. The agent skills are in skills/ — see Built for AI agents.
For questions, issues, or feature requests, please use the GitHub issue tracker.
This project is licensed under the ISC License - see the LICENSE file for details.
Aleksey Suvorov
Email: [email protected]
Website: cranesoft.net
GitHub: nekutuzov
Npm: nekutuzov
Dev.to: nekutuzov