Busabase
Busabase is an open-source (MIT) database and workspace for AI agents — data, docs, skills, and apps in one place. Run it locally, self-host it inside your network, or use Busabase Cloud, and turn age
翻訳待ち
Local analysis tool for detecting process differences between variants.
翻訳待ち
Loading the full README.
Read the full README ↗Desktop app built with Tauri, SvelteKit and TypeScript.
Install dependencies first with pnpm install.
pnpm tauri dev # desktop app on the default port (1420)
pnpm dev:port 1430 # desktop app on another port, with per-branch app data
pnpm dev # frontend only, in the browser
pnpm tauri build # release binary and installers in src-tauri/target/release/bundle, dev identifier
pnpm tauri build --config src-tauri/tauri.release.conf.json # same, with the release identifier
pnpm tauri build --debug # debug build in src-tauri/target/debug
pnpm release minor # or patch, major, x.y.z: bump, commit, tag, push
git checkout v0.2.0 && pnpm release:mac # once CI has built Windows into the draft
gh release edit v0.2.0 --draft=false --latest # go live
The tag push builds the Windows installer into a draft release (.github/workflows/build.yml). pnpm release:mac builds Apple Silicon locally, adds it to the draft's latest.json and uploads it. Publishing the draft is what the download page and the in-app updater see. pnpm release:mac needs the updater key in ~/.tauri/prodiff.key (or TAURI_SIGNING_PRIVATE_KEY) and TAURI_SIGNING_PRIVATE_KEY_PASSWORD.
The download page is web/index.html, deployed to GitHub Pages by .github/workflows/pages.yml when web/ changes on main.
pnpm db:generate add_group_notes # after editing src/lib/db/schema.ts
drizzle-kit compares schema.ts with its last snapshot and writes src/lib/db/migrations/<NNNN>_<name>.sql plus the files under meta/. Review the SQL and commit all of it. pnpm drizzle-kit generate --custom --name <name> gives an empty migration for SQL drizzle-kit cannot infer, such as reshaping JSON in a column.
The app runs pending migrations at startup, and pnpm seed runs them before writing. Never edit or delete a migration that has shipped; add a new one.
pnpm seed # seed every log in scripts/seed_log/
pnpm seed road_traffic_fine_10k # seed one log by its slug
pnpm seed --app-id com.nicoabarca.prodiff.dev # seed the app data of `pnpm tauri dev`
pnpm seed --app-data-dir /path/to/app-data # seed any app data directory
By default the seed writes to the current branch's app data (com.nicoabarca.prodiff.dev-<branch>), which is what pnpm dev:port opens. Reload the app if it is open. The first run compiles the seed-project binary in release mode, which takes a few minutes.
Each seed log is a pair of files in scripts/seed_log/: <slug>.csv holds the Event Log and <slug>.json holds its manifest.
{
"name": "Road traffic fine 10k (seed)",
"columns": [
{
"name": "Case ID",
"role": "case_id",
"scope": "case",
"caseResolution": "constant",
"type": "string"
},
{ "name": "Activity", "role": "activity_name", "scope": "event", "type": "string" }
],
"hiddenColumns": ["Variant"],
"groups": [
{
"name": "Not dismissed",
"color": "group-2",
"filters": [
{ "kind": "attribute", "column": "dismissal", "mode": "mandatory", "values": ["NIL"] }
]
}
]
}
columns is the Column Mapping. It must map every column in the CSV header exactly once.hiddenColumns lists the columns hidden from the event data table, the Filter editor and the tree's attribute choices.groups is optional. Each Group is applied in array order, which is also its position. color is optional and defaults to the palette color for that position. filters is a Filter List in the same JSON the app stores. case_not_in_group is not supported.To add a seed log, drop a new CSV and manifest pair into scripts/seed_log/. No code changes are needed.
Seeding a slug again resets its Project: the files are replaced, and its Groups, comparison and tree settings are deleted. If the import or any Group fails, the seed reports the error and leaves the previous Project as it was.
pnpm test # run Vitest once
pnpm test:watch # watch mode
pnpm test src/lib/filters # only tests under a path
pnpm check # type-check the app and the e2e suite
cargo test --manifest-path src-tauri/Cargo.toml # all tests
cargo test --manifest-path src-tauri/Cargo.toml duration # tests whose name contains "duration"
pnpm e2e # all specs against the debug e2e binary
pnpm e2e --spec e2e/specs/smoke.e2e.ts # one spec file
pnpm e2e --mochaOpts.grep "empty state" # tests whose name matches
pnpm e2e:release # all specs against a freshly built release binary
pnpm e2e:build # force a debug e2e rebuild after code changes
pnpm e2e builds the debug binary only when it is missing, so run pnpm e2e:build after changing Rust or frontend code. See docs/adr/0007-e2e-tests-with-embedded-webdriver.md.
Frontend tests (pnpm test) run in jsdom and write nothing outside Vitest's cache in node_modules/.vite/vitest.
Rust tests (cargo test):
| Path | What happens |
|---|---|
src-tauri/target/debug/ | Test binaries are compiled here, shared with pnpm tauri dev. |
$TMPDIR/kiara-<name>.csv | CSV fixtures written by the timestamp parsing tests. Overwritten, never deleted. |
E2E tests (pnpm e2e, pnpm e2e:release, pnpm e2e:build):
This is the beginning of the README. Read the rest at the original. Read the full README ↗