Commit Graph
311 Commits
Author SHA1 Message Date
ZacharyZhang-NY 2df921ca88 refactor(agents): share leadership role detector, use word-boundary match
P2-23: 'lead' in system-prompt.ts matched 'cleaner' / 'leaderboard' via
substring .includes(). Hoist LEADERSHIP_ROLE_KEYWORDS into a shared
agent-role-helpers.ts module; tokenize input on non-alphanum to require
whole-word match.

P3-54: Same keyword list was duplicated in automation-skills with drift
(missing 'ceo', different members). Both sites now call through the
shared helper.
2026-04-16 22:57:35 -04:00
ZacharyZhang-NY ba6ba8360b docs(budget): clarify policy.amount<=0 disables the rule 2026-04-16 22:57:05 -04:00
ZacharyZhang-NY f468f7c238 fix(prompt): use UTC day-of-week to match UTC date/time stamp
P2-24: now.getDay() returns local time weekday but the stamp reads
'UTC', producing off-by-one-day errors near UTC midnight. Switch to
now.getUTCDay().
2026-04-16 22:56:54 -04:00
ZacharyZhang-NY 0706ad78bb refactor(browser-manager): hoist resolvedRoot out of screenshot filter chain 2026-04-16 22:56:46 -04:00
ZacharyZhang-NY 4000854b69 fix(heartbeat): remove silent-default try/catch around getHeartbeatPolicy
P2-35: The policy row is the gate that decides whether the agent runs;
pretending cooldown is 10s when the read fails hides data corruption.
db.getHeartbeatPolicy already supplies field-level defaults from policy
JSON — and the only reason to throw here is 'agent not found', which
is already impossible because the caller just loaded db.getAgent.
2026-04-16 22:56:43 -04:00
ZacharyZhang-NY fc47b60d1b refactor(approval-policy): normalize decisionNote into single local 2026-04-16 22:56:34 -04:00
ZacharyZhang-NY 2deaa0d8b8 feat(automation): add per-action zod schemas for config validation
P2-29: JSON.parse(actionConfigJson) with blanket '(config.x as string)'
coerced malformed config to placeholder values silently (e.g. numeric
priority landed as 'medium'). Introduce parseActionConfig(action, json)
backed by per-action zod schemas in automation-action-schemas.ts.
Validation failures throw, surfaced by evaluateAutomationRules' logger
+ execution recorder. Individual case branches keep existing default
semantics for optional fields.
2026-04-16 22:56:18 -04:00
ZacharyZhang-NY 6429c76ac7 fix(run-housekeeping): gate auto knowledge_base writes on task type or department 2026-04-16 22:56:16 -04:00
ZacharyZhang-NY 1b76a51894 perf(useUIController): hoist page/panel transition objects to module scope (P2-32)
Stable refs across renders eliminate unnecessary motion prop diffing.
2026-04-16 22:56:14 -04:00
ZacharyZhang-NY ca936aabe6 dashboard: extract AttentionRow, cap stagger at 8, limit pulse animation to first 2 rows (P1-15, P2-44, P2-47) 2026-04-16 22:56:09 -04:00
ZacharyZhang-NY 0845187672 refactor(sidebar): group nav into sidebarGroups instead of slice(0,3)+slice(3) (P2-27)
Move Core vs Collaborate grouping from implicit array index to explicit
sidebarGroups NavGroup[] structure surfaced from useUIController.
2026-04-16 22:55:58 -04:00
ZacharyZhang-NY 32687033fc build(mac-sign): remove codesign retry loop, let it crash (P3-29) 2026-04-16 22:55:35 -04:00
ZacharyZhang-NY 9a5cdad86e fix(db): use single timestamp in markRefreshed + recordAutomationExecution (P1-23, P3-46) 2026-04-16 22:55:33 -04:00
ZacharyZhang-NY c93b28925b build(postinstall): fail loud when electron name patch errors (P3-28) 2026-04-16 22:55:32 -04:00
ZacharyZhang-NY 08968e8331 build(generate-icons): exit with clear error on non-darwin (P3-27) 2026-04-16 22:55:30 -04:00
ZacharyZhang-NY a2ceba5c33 build(scripts): inline vitest invocation and remove run-vitest wrapper (P3-25) 2026-04-16 22:55:16 -04:00
ZacharyZhang-NY 7ba19fab77 fix(db): validate backup schema version + recover db on restore failure (P1-21, P1-22) 2026-04-16 22:55:05 -04:00
ZacharyZhang-NY 1f660e79b8 build(release-local): derive docker volume name from rootDir hash (P2-22) 2026-04-16 22:55:00 -04:00
ZacharyZhang-NY d154b45741 build(build-desktop): remove EBUSY cleanup retry loop, let it crash (P2-21) 2026-04-16 22:54:57 -04:00
ZacharyZhang-NY ed2f467e4e build(scripts): rename build:all to build:current to match semantics (P2-20) 2026-04-16 22:54:54 -04:00
ZacharyZhang-NY 5feeb96522 fix(browser-manager): enforce 5min per-action timeout with cancellation path 2026-04-16 22:54:53 -04:00
ZacharyZhang-NY b6e1756f1c refactor(CommandPaletteView): extract PaletteResultSection, closeAndReset (P1-23, P3-49, P3-50)
Five near-identical 25-line entity result blocks collapse into one
PaletteResultSection. Extract closeAndReset() callback used in 5 places.
Drop dead fallback: runs.find(...)?.id.slice(0,8) === run.id.slice(0,8).
2026-04-16 22:54:53 -04:00
ZacharyZhang-NY 3c8a593be7 docs(electron-vite): explain why zod is bundled into preload (P2-17) 2026-04-16 22:54:50 -04:00
ZacharyZhang-NY 775b10f46e build(electron-builder): exclude node_modules/pycache/logs from builtin-skills copy (P2-16) 2026-04-16 22:54:47 -04:00
ZacharyZhang-NY 69b1d8b667 security(ipc): add ensureCompanyExists+belongsToCompany guards to operations handlers (P1-20) 2026-04-16 22:54:34 -04:00
ZacharyZhang-NY be0ff5a041 lib(renderer): add safeJson helper; migrate 6 JSON.parse try/catch call sites 2026-04-16 22:54:20 -04:00
ZacharyZhang-NY a07b42e493 refactor(App): extract Shell wrapper for locale+titlebar chrome (P1-20)
Collapse two near-identical LocaleContext/TranslationContext/TitleBar
wrapper blocks into a single Shell component.
2026-04-16 22:53:56 -04:00
ZacharyZhang-NY 3deb1c00ac perf(db): batch skill-words + reports queries for scoreCandidate (P1-18) 2026-04-16 22:53:39 -04:00
ZacharyZhang-NY bb397dff02 refactor(heartbeat): centralize [Heartbeat] prefix as a shared constant
P2-36: Multiple subsystems were string-coupled via the magic
'[Heartbeat]' prefix. Introduce src/main/orchestration/heartbeat-task.ts
as the single source of truth and replace scattered literals in
heartbeat dispatch, automation actions, and run completion.

P3-52: Collapse 5-deep ternary in automation-actions' wake-trigger
selection into lookup helpers (deriveHeartbeatWakeTrigger,
deriveEscalationWakeTrigger).
2026-04-16 22:53:19 -04:00
ZacharyZhang-NY 4838750009 refactor(useDataLoader): drop 16 positional setters, use getState() (P1-22)
Function signature reduced from 16 args to 4; setters sourced from
useAppStore.getState() inside callbacks (stable refs, no deps needed).
useCompanyController no longer has to thread 14 setters through.
2026-04-16 22:53:08 -04:00
ZacharyZhang-NY 12279005fe fix(db): add run_events(run_id,seq) unique index + wrap appendRunEvent in tx (P1-15) 2026-04-16 22:53:06 -04:00
ZacharyZhang-NY 8dfa69cacf refactor(useUIController): group reads via useShallow, fetch setters from getState (P1-17)
Replace 11 individual useAppStore subscriptions with a single useShallow
selector; setters read once from useAppStore.getState() (stable refs).
2026-04-16 22:52:27 -04:00
ZacharyZhang-NY 7f2d028080 fix(updater): only toast 'Up to Date' on manual user-initiated checks 2026-04-16 22:52:16 -04:00
ZacharyZhang-NY bea8aa9542 ui: add Card/Eyebrow/Spinner primitives, iconOnly ActionButton, drop ui.tsx barrel 2026-04-16 22:52:16 -04:00
ZacharyZhang-NY 8867f50b37 refactor(db): consolidate BOARD_READER_ID in helpers + escape backslash in LIKE (P3-50, P1-26) 2026-04-16 22:52:09 -04:00
ZacharyZhang-NY b15f6a1415 chore(npmrc): remove shamefully-hoist workaround (P3-24) 2026-04-16 22:52:05 -04:00
ZacharyZhang-NY 37a57d512c chore(tsconfig): remove orphan tsconfig.base.json (P2-18) 2026-04-16 22:52:01 -04:00
ZacharyZhang-NY 40a1e5af07 chore(scripts): remove dead seed-research-team.ts (P1-14) 2026-04-16 22:51:59 -04:00
ZacharyZhang-NY 796665ceec refactor(release-local): rename hasDocker to hasDockerInstalled (P1-12) 2026-04-16 22:51:56 -04:00
ZacharyZhang-NY 9aa03a0efd lint(eslint): surface no-explicit-any as warn to constrain future code (P1-6) 2026-04-16 22:51:54 -04:00
ZacharyZhang-NY 6c2b229704 docs(readme): drop nonexistent pnpm test:packages from verification (P1-5) 2026-04-16 22:51:51 -04:00
ZacharyZhang-NY e42879bfbe perf(db): push listAgentMessages visibility filter + limit to SQL (P1-17) 2026-04-16 22:51:27 -04:00
ZacharyZhang-NY d42901b86d refactor(renderer): consolidate navigateTo into navigation slice (P1-11)
Delete the useUIController.navigateTo duplicate; augment slice version with
task-with-run lookup (via get().snapshot) so notification-click and command
palette share one codepath. App.tsx now reads navigateTo from the store.
2026-04-16 22:51:26 -04:00
ZacharyZhang-NY 66f5e0923d fix(automation): log no-op status-change calls instead of silently returning
P2-34: Silent no-op guard hid caller bugs. Warn-log the violation so
it shows up in traces; callers should still gate.
2026-04-16 22:51:12 -04:00
ZacharyZhang-NY 4ebd98bb99 fix(automation): surface malformed condition JSON instead of silently returning false
P2-46: Previous bare try/catch hid parse errors, making rules silently
non-firing. Let JSON.parse throw; the caller (evaluateAutomationRules)
already logs and records the failure.
2026-04-16 22:51:00 -04:00
ZacharyZhang-NY 6b391887c3 fix(connector-auth): emit .bat file on Windows instead of '&'-chained script 2026-04-16 22:50:56 -04:00
ZacharyZhang-NY 43a03aa5e9 refactor(db): collapse three markRead variants into markMessageReadForReader (P1-16) 2026-04-16 22:50:40 -04:00
ZacharyZhang-NY 62050c9c05 refactor(automation): use JSON-stringified execution keys
P1-19: Previous string-join with ':' separator could collide when
field values contain colons (e.g. runId='a:b' vs runId='a' + previousStatus='b').
Use JSON.stringify for unambiguous serialization.
2026-04-16 22:50:38 -04:00
ZacharyZhang-NY 2050c0e8fd fix(notification-service): track latest section for batch summary 2026-04-16 22:50:09 -04:00
ZacharyZhang-NY 4ed1e47c32 refactor(desktop-shell-menu): drop dead '?? ""' defense in openPath 2026-04-16 22:49:41 -04:00