mirror of
https://github.com/NousResearch/hermes-agent.git
synced 2026-07-04 12:33:08 +00:00
A top-down Memory Graph panel: memories and skills on a radial time axis (core = oldest, outer rings = newer) with a playable / scrubbable timeline that builds the map up over time. - Reveal lives off the React tree (a ref drives the canvas, a nanostore atom drives the timeline + legend), so a play-through or scrub never re-renders the panel; paint is coalesced to one rAF and playback is abortable, so even frantic scrubbing stays responsive. - Adaptive dated rings: one equal-width ring per POPULATED calendar bucket, a "nice-tick" count scaled to the span. Constant (orthographic) core/band scale — more data grows the disk outward (more rings), never thinner. - A bucket's nodes fill the band inside their ring and ignite staggered by real timestamp across it (no end-dump), with an EVE-style warp-in; the camera steps out band-by-band as rings are reached. - ASCII "computing" core, theme-aware palette with a distinct memory hue, shared trackpad-gesture primitives. - Shareable WoW-style "loadout" codes on a generic, reusable codec (@/lib/loadout: bitstream + DEFLATE + version/checksum frame + base64url). - Opens from the statusbar and command palette; i18n across all locales. Deps: d3-force, fflate (drops unused react-force-graph-2d).
81 lines
2.8 KiB
TypeScript
81 lines
2.8 KiB
TypeScript
import { defineConfig } from 'vite'
|
|
import react from '@vitejs/plugin-react'
|
|
import tailwindcss from '@tailwindcss/vite'
|
|
import path from 'path'
|
|
import fs from 'fs'
|
|
|
|
// `hgui` symlinks a worktree's node_modules to the main checkout. Vite realpaths
|
|
// those before enforcing server.fs.allow, so codicon/font assets resolve outside
|
|
// the worktree root and 404. Whitelist the real node_modules locations.
|
|
const real = (p: string): string | null => {
|
|
try {
|
|
return fs.realpathSync(p)
|
|
} catch {
|
|
return null
|
|
}
|
|
}
|
|
|
|
const fsAllow = [
|
|
...new Set(
|
|
[
|
|
path.resolve(__dirname, '../..'),
|
|
real(path.resolve(__dirname, 'node_modules')),
|
|
real(path.resolve(__dirname, '../../node_modules'))
|
|
].filter((p): p is string => p !== null)
|
|
)
|
|
]
|
|
|
|
export default defineConfig({
|
|
base: './',
|
|
plugins: [react(), tailwindcss()],
|
|
css: {
|
|
// Pin an explicit (empty) PostCSS config. Tailwind is handled entirely by
|
|
// `@tailwindcss/vite`, so the renderer needs no PostCSS plugins — and
|
|
// without this, Vite's `postcss-load-config` walks UP the filesystem
|
|
// looking for a stray `postcss.config.*` / `tailwind.config.*`. The desktop
|
|
// build runs from inside the user's home tree (e.g.
|
|
// `C:\Users\<name>\AppData\Local\hermes\hermes-agent\apps\desktop`), so an
|
|
// unrelated Tailwind v3 config higher up the tree gets picked up and
|
|
// reprocesses our v4 stylesheet, failing the build with
|
|
// "`@layer base` is used but no matching `@tailwind base` directive is
|
|
// present." Pinning the config makes the build hermetic.
|
|
postcss: { plugins: [] }
|
|
},
|
|
build: {
|
|
// Keep desktop packaging stable: Shiki ships many dynamic chunks by
|
|
// default, and electron-builder can OOM scanning thousands of files.
|
|
// Collapsing to a single chunk is intentional, so the renderer bundle is
|
|
// large by design (~22 MB). Raise the warning ceiling above that so the
|
|
// cosmetic "chunk larger than 500 kB" nag stays quiet, while still acting
|
|
// as a regression alarm if the bundle balloons well past today's size.
|
|
chunkSizeWarningLimit: 25000,
|
|
rolldownOptions: {
|
|
output: {
|
|
codeSplitting: false
|
|
}
|
|
}
|
|
},
|
|
resolve: {
|
|
alias: {
|
|
'@': path.resolve(__dirname, './src'),
|
|
'@hermes/shared': path.resolve(__dirname, '../shared/src'),
|
|
react: path.resolve(__dirname, '../../node_modules/react'),
|
|
'react-dom': path.resolve(__dirname, '../../node_modules/react-dom'),
|
|
'react/jsx-dev-runtime': path.resolve(__dirname, '../../node_modules/react/jsx-dev-runtime.js'),
|
|
'react/jsx-runtime': path.resolve(__dirname, '../../node_modules/react/jsx-runtime.js')
|
|
},
|
|
dedupe: ['react', 'react-dom']
|
|
},
|
|
server: {
|
|
host: '127.0.0.1',
|
|
port: 5174,
|
|
strictPort: true,
|
|
fs: {
|
|
allow: fsAllow
|
|
}
|
|
},
|
|
preview: {
|
|
host: '127.0.0.1',
|
|
port: 4174
|
|
}
|
|
})
|