neuron-explorer
Qwen3.5‑4B 전용 조향형 뉴런 탐색기, 모든 MLP 뉴런을 밀어 결과를 보관·탐색
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Save-game persistence for Capacitor games on SQLite everywhere: sql.js and IndexedDB on the web, native SQLite or SQLCipher on iOS and Android.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Save-game persistence for Capacitor games. One API
stores saves in SQLite on every platform: jeep-sqlite
over sql.js and IndexedDB on the web, and native SQLite
(optionally SQLCipher-encrypted) on iOS and Android.README 전문 보기 ↗Save-game persistence for Capacitor games. One API stores saves in SQLite on every platform: jeep-sqlite over sql.js and IndexedDB on the web, and native SQLite (optionally SQLCipher-encrypted) on iOS and Android.
@capacitor-community/sqlite, opened
lazily and isolating corrupt rows instead of failing the whole list.N → N+1 steps that are validated, frozen
and walked to the exact target version, so old saves load safely.@capacitor/preferences for small
settings.Documentation · API · Architecture · Changelog
npm install persistence-save @capacitor/core @capacitor-community/sqlite @capacitor/preferences
The three Capacitor packages are peer dependencies of the root entry. The 0.2
line is verified against @capacitor/core 8.5, @capacitor-community/sqlite
8.1 and @capacitor/preferences 8.0. Node.js 22, 24 and 26 are supported.
The autosave scheduler and the snapshot-migration walker have their own
entries, persistence-save/autosave and persistence-save/migrations, which
load no Capacitor code. The Capacitor peers are optional, so a game without
Capacitor installs persistence-save alone and imports those. A game on
another Capacitor major can import them too, but an optional peer is still
checked when it is present: the install reports the peers unmet (a warning by
default, an error under strict-peer-dependencies). The root entry needs the
8.x peers.
On the web, copy both WebAssembly assets into the directory you pass as
wasmAssetsPath (for example with your bundler's static-copy step):
node_modules/persistence-save/dist/assets/sql-wasm.wasm
node_modules/persistence-save/dist/assets/sql-wasm-browser.wasm
They are also exported as persistence-save/assets/sql-wasm.wasm and
persistence-save/assets/sql-wasm-browser.wasm.
import { createPersistence } from 'persistence-save';
interface State {
name: string;
gold: number;
}
interface Snapshot extends State {
version: number;
}
const saves = createPersistence<State, Snapshot>({
dbName: 'com.example.game_v1',
snapshotVersion: 2,
serialize: (state) => ({ version: 2, ...state }),
deserialize: ({ name, gold }) => ({ name, gold }),
migrations: {
1: (old) => ({ ...old, version: 2, gold: old.gold ?? 0 }),
},
});
await saves.save('Slot 1', { name: 'Player One', gold: 7 });
const [latest] = await saves.list(); // newest first; corrupt rows are isolated, not thrown
const record = latest ? await saves.load(latest.id) : null;
console.log(record?.snapshot.gold); // 7
Every source version, target version and migration output is a safe integer.
Each migration receives a deeply frozen clone and is a pure N → N+1 step.
Mutation attempts, null or non-object output, skips, overshoots, fractions, and
a walk that does not end exactly at the target are rejected as typed version
errors. Reading an older save migrates it in memory without rewriting the stored
row; only an explicit save() writes the current format.
serialize() is validated before SQLite is opened: it must return a non-array
object whose version exactly equals snapshotVersion. Snapshot size caps are
measured in UTF-8 bytes on both read and write.
Games with their own SQLite tables can pass an idempotent
initializeSchema(connection) callback and use withConnection() and flush()
for their own statements. This keeps one connection manager and one web-store
flush path. encryptionKeyPreference keeps an existing native SQLCipher key
name when you adopt the package in a game that already encrypts its database.
Preferences store strings, so serialize structured values explicitly, and always use a stable reverse-domain namespace:
import { createPreferencesKv } from 'persistence-save';
const settings = createPreferencesKv('com.example.game');
await settings.set('audio.muted', 'false');
import { createAutoSaveScheduler } from 'persistence-save';
const autosave = createAutoSaveScheduler({
provider: () => (inMenu ? null : currentState()), // null skips the write
save: (state) => saves.save('AutoSave', state),
debounceMs: 400,
});
autosave.schedule(); // after a mutation; bursts coalesce into one write
autosave.scheduleThrottled('player.health', 2_000); // per-frame callers
addEventListener('pagehide', () => void autosave.flush()); // always saves
await autosave.flushPending(); // wait for a queued save; writes nothing if none is
autosave.pending; // true while a debounced or throttled save is queued
The scheduler takes any save, so it works over your own storage too, from
the Capacitor-free entry:
import { createAutoSaveScheduler } from 'persistence-save/autosave';
import { migrateSnapshot } from 'persistence-save/migrations';
See the API reference for every option.
mise install # or: npm install --global corepack && corepack enable
pnpm install
pnpm verify
pnpm verify runs Biome, markdownlint, strict TypeScript, the tests with
coverage, the ESM, CommonJS and type builds, publint, Are The Types Wrong, and
a packed-consumer proof. That proof packs the package, installs the tarball with
the exact Capacitor peers into a clean project with an empty home directory and
only the public registry, then runs the ESM and CommonJS entry points,
typechecks a separately written consumer, and compiles both WebAssembly assets.
pnpm test:web-cold-reload separately packs the built package, starts a clean
Vite consumer and uses a headed, muted Chromium session to prove that a flushed
save has IndexedDB bytes and reopens in a freshly navigated JavaScript realm.
Set PERSISTENCE_SAVE_CONSUMER_SOURCE=persistence-save@<version> to run the same
proof against a published version.
See CONTRIBUTING.md. Releases are automated with Release Please and published to npm with provenance.
MIT. The bundled sql.js WebAssembly binaries are MIT-licensed by the sql.js authors; see THIRD_PARTY_NOTICES.md.