Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,14 @@ pnpm package:dmg # electron-vite build + electron-builder --mac dmg
4. `gh release create vX.Y.Z release/agent-observer-*.dmg release/*.blockmap release/latest-mac.yml --target main`
5. The `latest-mac.yml` is required for electron-updater auto-update detection

### Post-merge release reminder
**Every PR that changes runtime code (renderer, scene, main process) must include a version bump and DMG build before closing.** Without this, merged changes won't reach users — the Electron app is distributed via DMG, not auto-deployed. If you forget, the user will be running stale builds.

Checklist after merging runtime changes:
1. Bump patch version in `package.json` (or minor/major as appropriate)
2. Run `pnpm package:dmg` to build a fresh DMG
3. Create a GitHub release with the DMG + blockmap + `latest-mac.yml`

### Gotchas
- **Branch protection** is strict — can't push to main directly or admin-merge past failed checks
- **npm audit endpoint** can go down (500 errors); CI audit step handles this gracefully with `ERR_PNPM_AUDIT_BAD_RESPONSE` detection
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "agent-observer",
"version": "1.3.0",
"version": "1.3.1",
"description": "Agent Office — 3D observability for AI agents",
"main": "./out/main/index.js",
"scripts": {
Expand Down
46 changes: 0 additions & 46 deletions src/renderer/hud/HUD.tsx
Original file line number Diff line number Diff line change
@@ -1,15 +1,9 @@
import { useState } from 'react'
import { StatsBar } from './StatsBar'
import { AgentCard } from './AgentCard'
import { ToastStack } from './Toast'
import { CelebrationDeck } from './CelebrationDeck'
import { SoloOperatorPanel } from './SoloOperatorPanel'
import { useAgentStore } from '../store/agents'

export function HUD() {
const [digestOpen, setDigestOpen] = useState(true)
const hasSelectedAgent = useAgentStore((s) => s.selectedAgentId !== null)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Persisted non-default focus mode now permanently stuck

Medium Severity

Removing SoloOperatorPanel eliminates the only UI that calls setOfficeFocusMode, but officeFocusMode is still persisted in localStorage and actively used by Office.tsx to filter which agents appear in the 3D scene via filterAgentsForOfficeFocus. Existing users who previously set the mode to 'show-errors' or 'changed-files' will be permanently stuck with that filter — potentially hiding all agents from the office view — with no way to change it back.

Fix in Cursor Fix in Web

return (
Comment on lines 6 to 7
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Restore a way to reset office focus mode

Removing the digest panel here also removes the only UI path that calls setOfficeFocusMode, while persisted non-default modes are still loaded (src/renderer/store/runHistory.ts loads 'show-errors'/'changed-files') and still applied to desk filtering (src/renderer/scene/Office.tsx uses officeFocusMode in filterAgentsForOfficeFocus). For returning users who previously chose one of those modes, the office can appear empty or incomplete with no in-app way to switch back to follow-active, effectively leaving them stuck unless they manually clear local storage.

Useful? React with 👍 / 👎.

<div className="absolute inset-0 pointer-events-none z-10">
{/* Top bar */}
Expand Down Expand Up @@ -38,46 +32,6 @@ export function HUD() {
<CelebrationDeck />
</div>

{/* Bottom-left operator digest — offset right when AgentCard is visible */}
<div
className="absolute bottom-4 pointer-events-auto"
style={{ left: hasSelectedAgent ? 332 : 16 }}
>
{digestOpen ? (
<div
style={{
maxHeight: 'calc(100vh - 80px)',
overflowY: 'auto',
scrollbarWidth: 'thin',
scrollbarColor: 'rgba(89,86,83,0.3) transparent',
}}
>
<SoloOperatorPanel onClose={() => setDigestOpen(false)} />
</div>
) : (
<button
type="button"
onClick={() => setDigestOpen(true)}
style={{
width: 36,
height: 36,
borderRadius: 10,
border: '1px solid rgba(89,86,83,0.25)',
background: 'linear-gradient(180deg, rgba(17,18,17,0.9), rgba(10,10,10,0.85))',
color: '#9A9692',
fontSize: 16,
cursor: 'pointer',
display: 'flex',
alignItems: 'center',
justifyContent: 'center',
}}
title="Open operator digest"
>
</button>
)}
</div>

{/* Toast notifications */}
<ToastStack />
</div>
Expand Down
188 changes: 0 additions & 188 deletions src/renderer/hud/SoloOperatorPanel.tsx

This file was deleted.

Loading