Commit Graph
6 Commits
Author SHA1 Message Date
fez5587andClaude Fable 5 b3138fb5b0 Office v1: top-down pixel office + sibling-context handoff in dispatch
- /office rebuilt Chrono Trigger style: tile map (work floor, walled
  conference room with door, break area), 4-direction sprites with walk
  cycles; employees path through the door and walk to their desk when
  working (typing anim, lit monitor), to the conference room with a "?"
  bubble when blocked on an answer, to the water cooler when idle. All
  movement derives from polled engine state only.
- Dispatcher now appends completed-sibling task reports to each task body
  so decomposed tasks are no longer blind to each other's output (fixes
  the "apply the patch task A made" capability block).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-04 12:24:40 -05:00
fez5587andClaude Fable 5 fd3feb6a08 Shareholder line: directives endpoint + CEO milestone updates
- POST /companies/{slug}/directives: free-form shareholder message becomes
  an objective (reuses manager decomposition), logs directive.received
- Objective rollup now emits a CEO-voiced milestone.update event via one
  pool call (plain-text fallback if the LLM call fails)
- _chat_structured retries once on empty/invalid JSON from the pool
  (observed empty-content responses breaking protocol extraction)
- Dashboard: per-company shareholder textarea + CEO updates feed; refresh
  skips DOM rewrite while a textarea is focused

Verified end-to-end: directive -> 3 tasks -> rework after handoff block ->
rollup -> CEO milestone update; gaswatch index.html now on-brand.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-04 11:58:38 -05:00
fez5587andClaude Fable 5 312a99393b Objective rollup: objective goes done when all child tasks are done/cancelled
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-04 10:19:27 -05:00
fez5587andClaude Fable 5 9a1b03b15e Fix workspace dispatch: kanban workspace_kind is 'dir', block on dispatch 4xx
- Hermes rejects workspace_kind 'path' (valid: dir/scratch/worktree).
- Dispatch failure now blocks the work item with a dispatch.failed event
  instead of retrying the same 400 every tick.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-04 10:15:05 -05:00
fez5587andClaude Fable 5 4fd6f3fd1d Slice 1: engine dashboard + persistent company workspaces
- engine/static/index.html served at /: companies, employees, objectives,
  work items, live event feed (5s poll), global pause/resume button.
- Persistent per-company workspace on the Hermes host
  (/opt/data/farmhouse/<slug>, created via files API at company creation);
  dispatcher passes it as kanban workspace_path so artifacts persist across
  tasks instead of dying in scratch dirs.
- hermes_client.mkdir; gaswatch backfilled.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-04 10:08:58 -05:00
fez5587andClaude Fable 5 9b6e7a23f6 Slice 1: dispatcher loop + objective decomposition — first live objective completed
- engine/dispatcher.py: 10s tick, bounded in-flight (3), ready->kanban dispatch
  with budget mapping (goal_max_turns/max_runtime_seconds), poll->AgentMessage
  extraction->events, wall-clock cap with run termination, blocked triage state.
- engine/protocol.py: schema-enforced pool calls — raw report -> AgentMessage,
  objective brief -> task decomposition (3.6s live).
- engine/main.py: POST /companies/{slug}/objectives (manager decompose ->
  child work items, role-matched round-robin), GET work-items.
- schema: work_item.hermes_task_id/dispatched_at, employee.role.
- Hermes integration fixes discovered live:
  * profiles must use the pool custom endpoint (provider config written into
    per-profile config; 'ollama' provider = Ollama Cloud, wants API key)
  * kanban toolset was globally disabled in deployed Hermes config — removed
    from agent.disabled_toolsets (backup in scratchpad)
  * no_skills profiles (73 bundled skills drowned 9B tool discipline)
  * souls spell out kanban_show first, kanban_complete/kanban_block with
    required args last — after this, tasks complete reliably.
- Live result: GasWatch objective decomposed into 3 tasks, all completed by
  qwen3.5:9b employees (mvp_features.md, onepager.md, report.md), 4 cost
  entries totaling ~24 min wall, full event trail.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-04 09:49:26 -05:00