Main no longer opens desktop business SQLite. A single utility-process
storage owner holds the Assistant, Knowledge, attachment, document-result,
remote-binding and native model-ledger databases and runs whole domain
transactions; Main and Runtime callers use explicit async domain operations.
- Remove the Main readWithFallback path and the supervision worker's
separate business write connection; manifests are scanned read-only and
committed by the sole writer.
- Remote events are ACKed only after commit; process loss reports
unconfirmed writes instead of replaying them.
- Use native utilityProcess messaging with one in-flight bound (32) and
ordered waiting instead of capacity rejection and retries.
- Start the storage process before the window so startup overlaps.
- Keep short tool output in memory and store full output once in owned
storage; paging, branching, restart and deletion reuse that copy.
- Put required runtime launch files under goodbuddy-prefixed owned temp
directories and reclaim confirmed stale ones; stop writing duplicate
parsed.md.
- Add lint guards for SQLite ownership and architecture, concurrency
acceptance fixtures, and maintenance/architecture documentation.
Validation: typecheck and lint pass. Alternating baseline (edf019aa) vs
candidate runs show no regression on single-session, C01, C02, C04 and a
5-minute C06; Main p99 drops from ~21 ms to ~16.7 ms under concurrency.
Fresh portable copy (1.75M events) upgrade content unchanged; real-model
output paging passes with 4 external requests. Full npm test runs had
1-9 different timing-sensitive failures per run that pass when rerun.
Not covered: C03 review publication, C07 source body, app-level C05.
51 lines
1.2 KiB
TypeScript
51 lines
1.2 KiB
TypeScript
import { availableParallelism } from 'node:os'
|
|
import react from '@vitejs/plugin-react'
|
|
import { configDefaults, defineConfig } from 'vitest/config'
|
|
|
|
const serialTests = [
|
|
...configDefaults.include.map((pattern) => `tests/${pattern}`),
|
|
'src/main/agent/**/*runtime*.test.ts',
|
|
'src/agent-daemon/private-endpoint.test.ts'
|
|
]
|
|
|
|
export default defineConfig({
|
|
plugins: [react()],
|
|
test: {
|
|
environment: 'jsdom',
|
|
setupFiles: ['./src/renderer/src/test-setup.ts'],
|
|
exclude: [
|
|
'temp/**',
|
|
'.agent-resources/**',
|
|
'shareserver/**',
|
|
'**/node_modules/**',
|
|
'**/dist/**',
|
|
'**/build-server/**',
|
|
'**/.git/**'
|
|
],
|
|
maxWorkers: Math.min(4, availableParallelism()),
|
|
projects: [
|
|
{
|
|
extends: true,
|
|
test: {
|
|
name: 'unit',
|
|
exclude: serialTests,
|
|
sequence: { groupOrder: 0 }
|
|
}
|
|
},
|
|
{
|
|
extends: true,
|
|
test: {
|
|
name: 'integration',
|
|
include: serialTests,
|
|
maxWorkers: 1,
|
|
// Keep process/socket tests separate from the parallel unit phase.
|
|
sequence: { groupOrder: 1 }
|
|
}
|
|
}
|
|
],
|
|
coverage: {
|
|
reporter: ['text', 'html']
|
|
}
|
|
}
|
|
})
|