Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
93 commits
Select commit Hold shift + click to select a range
2d7460b
docs(theming): skeleton for theme pack inventory
jdell64 Oct 12, 2026
27cb708
docs(theming): section 2, the theme pack format
jdell64 Oct 12, 2026
1000174
docs(theming): sections 1, 3, 4, 5 of the theme pack inventory
jdell64 Oct 12, 2026
99978cf
docs(theming): remove duplicate trailing section 5 stub
jdell64 Oct 12, 2026
07e3d95
tng pack: vacate script (remove baked-in crew from reference)
jdell64 Oct 12, 2026
7dcc7fd
build: add vitest (+ test:themes script) for the pure theme-pack tests
jdell64 Oct 12, 2026
9b1f751
tng pack: salvage uncommitted map/tileset/theme.json + gen scripts (p…
jdell64 Oct 12, 2026
fcf703a
phase-b: salvage uncommitted loader work (pre-reap)
jdell64 Oct 12, 2026
089224e
Merge branch 'agent/worker-phase-c-tng-pack'
jdell64 Oct 12, 2026
b0ea4b6
feat(tng): add crew cast generator and preview generator scripts
jdell64 Oct 12, 2026
d883de5
feat(tng): add crew cast sprites, portraits, cast.json, and map preview
jdell64 Oct 12, 2026
6b535f2
feat(themes): add main theme scanner, pack reader, and size limit checks
jdell64 Oct 12, 2026
13353a4
feat(theming): add script to generate builtin theme packs under vite-…
jdell64 Oct 12, 2026
4d055e2
feat(theming): add munder-difflin builtin theme pack
jdell64 Oct 12, 2026
f92c9d5
feat(theming): add brooklyn99 builtin theme pack
jdell64 Oct 12, 2026
332bcee
feat(ipc): register themes IPC handlers and sandbox isolation overrides
jdell64 Oct 12, 2026
7dcec9c
test(theming): add byte-identity and ThemeConfig equivalence oracle test
jdell64 Oct 12, 2026
1e95d56
feat(preload): expose theme pack bridge methods on window.cth
jdell64 Oct 12, 2026
214bd69
feat(scripts): add dev:sandbox script for isolated development
jdell64 Oct 12, 2026
f412b29
Merge branch 'agent/worker-b2-builtin-packs-agy'
jdell64 Oct 12, 2026
5033376
build: add resources/themes to extraResources
jdell64 Oct 12, 2026
d76c0d9
Merge branch 'agent/worker-b1-themes-ipc-agy'
jdell64 Oct 12, 2026
de08c3b
feat(preload): widen officeTheme in HarnessConfig to string
jdell64 Oct 12, 2026
b04e473
feat(store): widen officeTheme in HarnessConfig to string
jdell64 Oct 12, 2026
56d39ca
feat(realtimeActions): widen officeTheme setting check to scanned the…
jdell64 Oct 12, 2026
bdf123b
feat(config): widen officeTheme to string and rewrite legacy 'office'…
jdell64 Oct 12, 2026
dfdfa6f
feat(picker): build theme cards dynamically from window.cth.listThemes
jdell64 Oct 12, 2026
a396fb6
refactor(themeRegistry): remove Vite imports, replace literal themes …
jdell64 Oct 12, 2026
e8be557
feat(cast): export PROCEDURAL_THEME_CAST for theme loader fallback
jdell64 Oct 12, 2026
940f92d
feat(themeLoader): load theme packs from disk with blob: URLs and gra…
jdell64 Oct 12, 2026
f49121b
fix(themes): B3 integration fixes — pixi Rectangle frames, @shared im…
jdell64 Oct 12, 2026
bfa82a4
test(themes): make equivalence test self-contained with oracle fixtures
jdell64 Oct 12, 2026
a5ebd9c
fix(scene): orchestrator faces the user (down) at desk
jdell64 Oct 12, 2026
b558961
feat(i18n): add theme selection step translations and 5-step numberin…
jdell64 Oct 12, 2026
2dd6fb1
feat(i18n): add theme selection step translations and 5-step numberin…
jdell64 Oct 12, 2026
3d3d9c0
feat(i18n): add theme selection step translations and 5-step numberin…
jdell64 Oct 12, 2026
932b8c7
feat(onboarding): defer theming to neutral shell, add theme selection…
jdell64 Oct 12, 2026
d8cdc1a
feat(theming): apply pack chrome tokens + fonts to whole-app CSS on a…
jdell64 Oct 12, 2026
2083cc5
feat(i18n): replace user-facing god role tags with Orchestrator in lo…
jdell64 Oct 12, 2026
0eea223
feat(agent): de-literalize orchestrator prompt/description and waitin…
jdell64 Oct 12, 2026
cb3871b
feat(realtime): de-literalize Michael in voice loop and replace god w…
jdell64 Oct 12, 2026
2934044
feat(setup): de-literalize orchestrator name in engine availability a…
jdell64 Oct 12, 2026
17ca330
merge(onboarding): neutral shell + theme-select step + de-literal orc…
jdell64 Oct 12, 2026
944e12b
merge(naming): orchestrator role label replaces 'god' in UI/realtime …
jdell64 Oct 12, 2026
e2c161d
feat(theming): route literal hex in terminal/editor/dialog surfaces t…
jdell64 Oct 12, 2026
a7f6713
feat(themes): add optional seats.facing to PackManifest and validate …
jdell64 Oct 12, 2026
db86347
feat(scene): add seatFacing to ThemeConfig
jdell64 Oct 12, 2026
cef1afc
feat(scene): copy manifest seats.facing into themeConfig.seatFacing
jdell64 Oct 12, 2026
0951147
fix(scene): revert isGod seatDirection hack in favor of extensible se…
jdell64 Oct 12, 2026
d9ee697
feat(themes): declare desk-ceo down facing override in munder-difflin…
jdell64 Oct 12, 2026
bd9de0e
test(themes): update ORACLE_OFFICE_THEME fixture with desk-ceo seatFa…
jdell64 Oct 12, 2026
268ef20
test(themes): assert seatFacing equivalence in equivalence oracle
jdell64 Oct 12, 2026
62e2aa6
test(themes): add validatePack test cases for seats.facing
jdell64 Oct 12, 2026
7a26b9d
docs(theming): document optional seats.facing manifest field
jdell64 Oct 12, 2026
11ad46e
merge(scene): extensible per-seat facing override in theme.json
jdell64 Oct 12, 2026
bcbbfc6
Merge branch 'HarnessMD:main' into main
jdell64 Oct 13, 2026
884abd5
Merge branch 'HarnessMD:main' into main
jdell64 Oct 13, 2026
1fb7f32
Merge branch 'HarnessMD:main' into main
jdell64 Oct 17, 2026
d12d095
fix(codex): submit the inbox-wake nudge reliably (longer CR delay, se…
jdell64 Oct 17, 2026
76c5a0f
refactor: rename the orchestrator (was "god") across code, prompts an…
jdell64 Oct 17, 2026
55c3f82
feat(standup): poll a user-configured provider-usage endpoint
jdell64 Oct 17, 2026
ad94223
feat(models): add Gemini 4 Argon to the Gemini CLI and Antigravity pi…
jdell64 Oct 17, 2026
c365264
feat(identity): generic default cast and a display-name layer for the…
jdell64 Oct 17, 2026
48c46e5
Phase B: rights-clean default theme, remove third-party theme art
jdell64 Oct 17, 2026
10828fc
Phase C: theme tooling, validation surfaced in the picker, THEMING.md
jdell64 Oct 17, 2026
f41d25d
Phase E: README, changelog and architecture notes for agent-stage
jdell64 Oct 17, 2026
7f83280
Merge origin/main into feat/agent-stage-foundation and resolve model-…
jdell64 Oct 17, 2026
a4c8c75
feat(branding): add agent-stage icons and configure window/dock/build…
jdell64 Oct 17, 2026
2b785f8
chore: bump version to 0.5.0 and rebrand package/app to Agent Stage
jdell64 Oct 17, 2026
9e28e5a
fix: mount ask board on wall, rebrand settings & updater repo, fix th…
jdell64 Oct 17, 2026
12b1d91
feat: theme cast integration, bridge seating fixes, resizable and com…
jdell64 Oct 17, 2026
7993d1a
feat(perf): integrate GuppyOS startup token & standup delta optimizat…
jdell64 Oct 17, 2026
51c3828
fix: dedupe concurrent theme blob loads
jdell64 Oct 17, 2026
b87756d
merge: apply theme blob load race fix
jdell64 Oct 17, 2026
f6c626d
feat: establish Agent Stage governance and branding foundation
jdell64 Oct 17, 2026
d956053
docs: add Agent Stage owner copyright attribution
jdell64 Oct 17, 2026
b91c93b
fix(reflect): condense through one owned print-mode process, not the …
jdell64 Oct 17, 2026
c40754b
perf(log): keep log.jsonl and cost-ledger.jsonl open and rotate them …
jdell64 Oct 17, 2026
745ceb1
feat(model): a model chosen with /model in the terminal survives a re…
jdell64 Oct 17, 2026
a7cd104
fix(scene): let themes fit an authored action rectangle
jdell64 Oct 17, 2026
f686805
feat(themes): specify orchestrator default names and apply theme rost…
jdell64 Oct 17, 2026
bb07f81
fix(themes): persist theme-applied agent renames to hive registry acr…
jdell64 Oct 17, 2026
f0d853c
feat(hooks): app-enforced heavy-job lock - limit how many installs/bu…
jdell64 Oct 18, 2026
abefdde
fix(hooks): take the heavy-job slot only after the HITL/control gate
jdell64 Oct 18, 2026
42dc448
feat(office): make nameplates and thought bubbles legible at floor zoom
jdell64 Oct 18, 2026
b612b11
merge: feat/agent-stage-foundation into port/heavy-lock
jdell64 Oct 18, 2026
8ed870d
fix(settings): stage the Heavy jobs at once setting through saveAll
jdell64 Oct 18, 2026
31a20d1
feat(models): a "Refresh models" button fills ONE models file every p…
jdell64 Oct 18, 2026
b48f56a
Merge branch 'feat/agent-stage-foundation' into port/refresh-models
jdell64 Oct 18, 2026
50a524e
fix(models): retire duplicate models:catalog IPC handler and remove s…
jdell64 Oct 18, 2026
db4590e
Merge pull request #1 from jdell64/feat/agent-stage-foundation
jdell64 Oct 18, 2026
adc4148
Merge branch 'HarnessMD:main' into main
jdell64 Oct 18, 2026
9dd540d
fix: update compatible vulnerable dependencies
jdell64 Oct 18, 2026
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
6 changes: 6 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -35,3 +35,9 @@ docs/blog-preview-*/
# Finder duplicate files, e.g. "spec 2.js", "sitemap 2.xml"
*\ 2.*
*\ [0-9].*

# Third-party / licensed theme packs live outside the repo (point MD_THEMES_DIR at them).
# The only built-in pack is resources/themes/plain.
/resources/themes/*
!/resources/themes/plain/
/my-themes/
19 changes: 19 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,25 @@ All notable changes to this project are documented here. The format is based on

## [Unreleased]

### Fork changes (agent-stage)

- **The lead agent is the `orchestrator`.** The old agent id is gone from code, config keys
(`orchestratorProvider`/`orchestratorModel`), prompts and UI. Existing hives migrate on first
start (registry and `agents/` folder renamed, `registry.json` backed up as
`.pre-orchestrator-rename`), and the router still accepts the old address. The name people see
is the user's rename, else the active theme's `copy.orchestratorName`, else `Orchestrator`.
- **A rights-clean default theme.** `plain` is generated from flat shapes. The Office, Brooklyn 99
and Star Trek packs and the bundled LimeZu tilesets are removed from the tree; keep them in your
own themes folder. Characters are generic and drawn procedurally.
- **Theme tooling.** The picker is always on, validates packs with the real validator, lists each
problem, and has Rescan, Open folder and an extra themes folder. `npm run theme:validate` and
`npm run theme:new`; contract in `docs/theming/THEMING.md`.
- **Usage endpoint at standup.** Optional URL and bearer token; the hourly standup includes a
summary and writes `usage-availability.json`. See `docs/usage-endpoint.md`.
- **Gemini 4 Argon** in the Antigravity and Gemini CLI model lists.
- **Codex submit fix.** Longer Enter delay with a second Enter, plus a safety-net interval for
quiet PTYs.

### Added

- **Tasks show their id.** The one thing people actually refer to a card by — `bmt-12` — was not
Expand Down
215 changes: 34 additions & 181 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -1,198 +1,51 @@
# Contributing to Munder Difflin
# Contributing to Agent Stage

Thanks for your interest! This is an early prototype, so there's a lot of surface
area and plenty of room to help. This guide covers setup, the gotchas, and the
conventions that keep the codebase coherent.
Contributions are welcome through pull requests. Keep them easy to review.

## Code of Conduct
## Rules for pull requests

This project follows the [Contributor Covenant](./CODE_OF_CONDUCT.md). By
participating, you agree to uphold it.
- Open a PR when the change is ready. You do not need permission first for a focused fix or improvement.
- One fix, improvement, or refactor per PR. Split unrelated work.
- Keep the diff small. Do not mix a behavior change with cleanup, formatting, or a broad rewrite unless all of it is necessary for that single change.
- Write a clear title and description that state what changed, why it changed, and how you verified it.
- Include screenshots or a short recording for visual changes. Show the same state before and after when that makes the result clearer.
- Add a test when it meaningfully protects changed behavior or a regression. Tests are not ceremony; they should earn their maintenance cost.

## Before you start
## Before opening a PR

These are the constraints most pull requests trip over. Reading them first is
much cheaper than finding out in review.
1. Read your diff. Remove debug output, dead code, unrelated formatting, and generated files.
2. Run the relevant checks. For most code changes, start with:

- **Keep the change scoped to one clear improvement, fix, or refactor.** A fix
plus a rename plus a refactor is three pull requests, and all three merge
faster than the one.
- **Munder Difflin targets macOS, Windows and Linux.** Every change has to work
on all three unless it sits behind an explicit runtime platform check. Most
of our cross-platform bugs are paths: use `path.join` and the Node path
helpers, never a hand-built `"a/b"` string.
- **Paths with spaces are real.** Several shipped bugs came from a hive folder
living under a directory with a space in its name. Quote, and test one.
- **We support twelve agent CLIs and counting.** Keep shared behaviour provider
neutral and put provider specific logic behind an explicit check. Anything
that assumes Claude Code specifically will break the other eleven.
- **Do not assume the local machine.** Agents run against their own working
directories and their own environments; a process, file, credential or shell
that exists on yours may not exist on theirs.
- **New UI derives from the design tokens.** [`DESIGN.md`](./DESIGN.md) is
canonical. No ad-hoc colors, spacing or fonts.
```bash
npm run typecheck
npm run test:focused
```

## Development setup
3. For UI work, verify the running Electron app and include visual evidence.
4. For a behavior change, add or update a test when it provides useful regression coverage.
5. If you change design surfaces, use the tokens and conventions in [`DESIGN.md`](./DESIGN.md).

### Prerequisites
## Working in the repository

- **macOS, Windows, or Linux** — signed/notarized macOS builds, plus Windows and
Linux builds, ship from the [releases page](https://github.com/chaitanyagiri/munder-difflin/releases/latest).
Cross-platform smoke-testing and fixes are still very welcome (see
[Good first areas](#good-first-areas)).
- **Node.js 18+** and npm.
- A **C/C++ toolchain** to build `node-pty`'s native addon. On macOS:
```bash
xcode-select --install
```
On Windows/Linux, follow [`node-pty`'s own prerequisites](https://github.com/microsoft/node-pty#dependencies).
- **[Claude Code](https://claude.com/claude-code)** on your `PATH` if you want
agents to actually run `claude` (the default command). Any other command works.
- Agent Stage supports macOS, Windows, and Linux. Use platform-safe paths and avoid shell assumptions.
- Quote paths and account for directories with spaces.
- Keep provider-specific behavior behind an explicit check. Shared behavior must remain provider-neutral.
- Do not assume another developer's files, credentials, processes, or shell are available.
- Do not commit credentials, tokens, customer data, `node_modules`, build output, or generated artifacts.

### Install & run
## Development setup

```bash
git clone <your-fork-url> munder-difflin
cd munder-difflin
npm install # postinstall rebuilds node-pty against Electron's ABI
npm run dev # live-reloading Electron build
git clone <your-fork-url> agent-stage
cd agent-stage
npm install
npm run dev
```

> [!IMPORTANT]
> **The most common setup failure is the native `node-pty` rebuild.** The
> `postinstall` script runs `electron-rebuild` so `node-pty` matches Electron's
> ABI. If you see a "wrong ELF/Mach-O" or "NODE_MODULE_VERSION" error at launch,
> re-run `npm install` (which re-triggers `postinstall`) after confirming your
> C/C++ toolchain is installed.

## Evidence is mandatory

**Every pull request must show a before and an after.** Screenshots, or a screen
recording when the thing moves. They go in the PR description, under the
`### Before` and `### After` headings the template gives you.

This is enforced. The `PR evidence` check runs the moment you open a PR, and a
PR that fails it does not merge. Fix the description and the check re-runs on
save. It reads each heading separately, so two images dumped under one of them
will not pass — a reviewer has to be able to tell which is which.

**"My change has no UI" is not an exemption.** It changes the evidence, not the
requirement:

| Kind of change | What before/after looks like |
|---|---|
| Visual | The same view, twice. Same window size, same theme, same data. |
| Bug fix | The bug happening, then the same steps not producing it. |
| Terminal / CLI | A recording of the session, or the output pasted as text. |
| Performance | The measurement before and the measurement after, same machine. |
| Crash / hang | The failure, then the same path completing. |
| Test-only | The suite red, then the suite green. |

Make the two shots comparable. Different window sizes, a light shot against a
dark one, or different data means the reviewer is diffing your screenshots
instead of your change.

The only way out is the `no-visual-change` label, which a maintainer applies
for things with genuinely nothing observable: a CI tweak, a typo, a dependency
bump. You cannot add it yourself, and asking for it on a change that does
something visible will cost you more time than the screenshot would have.

## Before you open a PR

1. **Attach the before and after.** See above. This is the one that gets PRs
closed unread, so do it first, not last.
2. **Keep the type-checker green:** `npm run typecheck` (runs both the node and
web TS projects).
3. **Run the tests:** `npm run test:focused`. If you changed behaviour, add a
test for it — a bug fix with no test is a bug fix that comes back.
4. **Confirm a production build works:** `npm run build`.
5. **Match the aesthetic.** Any new UI **must** derive from the design tokens in
[`DESIGN.md`](./DESIGN.md) / `src/renderer/src/design/tokens.ts` — no ad-hoc
colors, spacing, or fonts. `tokens.ts` and `tokens.css` are mirrored; if you
change one, change both.
6. **Read your own diff.** Every line of it. Debug logging, commented-out code,
and reformatting of files you didn't otherwise touch all get a PR sent back.
7. **Run your coding agent over your own PR, and paste what it found.** We ship
an agent harness; use one. Ask it to check specifically for cross-platform
behaviour, paths with spaces, whether the change stays provider neutral
across the supported CLIs, performance in hot paths, and obvious security
risk. A short honest summary including what it flagged and you decided not to
change is worth more than a clean one, and it usually saves a review round
trip. This is asked for, not required.

## Where the bar is

We get more pull requests than we can review carefully, so the bar is high and
it is easier for everyone if it is written down. Clear the list above and you
are almost certainly fine. The items below are the ones we close rather than
negotiate, and every one of them is cheaper to avoid than to fix in review:

- **No before/after evidence**, and no `no-visual-change` label.
- **More than one change in one PR.** A fix plus a refactor plus a rename is
three PRs. Split it and every one of them merges faster.
- **Wholesale reformatting** of files, or a diff where the real change is buried
in whitespace and import reordering.
- **A rewrite nobody asked for.** Large architectural changes need an issue or a
[discussion](https://github.com/chaitanyagiri/munder-difflin/discussions) with
agreement **before** you write the code. We would rather say no to a paragraph
than to a week of your work.
- **Generated or unattributed content** — art that isn't yours or compatibly
licensed, or a description that doesn't match what the diff does.
- **Dependency additions** that aren't justified in the description. A new
runtime dependency needs a reason a one-file helper wouldn't have solved.
- **No response for 14 days** on review feedback. Reopen whenever you're ready;
nothing is lost.

None of this is aimed at first-timers. A small, focused, well-evidenced PR from
someone who has never contributed before gets reviewed ahead of a big one from
someone who has.

## Project layout

| Path | What lives there |
|---|---|
| `src/main/` | Electron main process — PTYs (`pty.ts`), fs/git bridges, the hive (`hive.ts`, `hooks.ts`, `memory.ts`), config. |
| `src/preload/` | Context-bridge IPC surface. |
| `src/renderer/` | React UI, Pixi.js office scene (`scene/office/`), components, design system, stores. |
| `tools/mapgen/` | Python helpers for building/rendering the Tiled office map. |

See [`docs/ARCHITECTURE.md`](./docs/ARCHITECTURE.md) for the data-flow overview,
the module by module layout, and the design system.

## Good first areas

- **Wiring real Claude Code hook events** — avatar behavior is currently driven
by a mock event loop (`src/renderer/src/store/mockEvents.ts`). Replacing it
with real tool events is the headline next milestone.
- The add-agent flow and config drawer.
- Cross-platform smoke-testing — Windows and Linux builds ship, but real-world
coverage (WSL2, various distros, uncommon shells) is thin.

## Commit & PR conventions

- Branch off `main`. One change per PR — see
[What gets a PR closed](#what-gets-a-pr-closed).
- Write a clear description of *what* changed and *why*. We can read the diff;
we cannot read your reasoning.
- Say how you tested it, and on which OS. "Tested locally" tells us nothing.
- Link the issue you're fixing: `Closes #123`.
- Don't commit `node_modules/`, `out/`, or built artifacts (already gitignored).
- Don't force-push after a review has started. It throws away the comparison the
reviewer was working from.
- **Never put credentials, tokens, internal metrics, or customer data in a
commit message.** A pushed commit message is public and permanent, and no
later rewrite retracts it once it has been fetched.

## A note on assets
Agent Stage requires Node.js 18+ and a C/C++ toolchain for `node-pty`. If an Electron upgrade leaves `node-pty` with an ABI error, run `npm install` again.

The bundled tilesets are LimeZu's *Modern Interiors*, used under the **Complete
Version licence**. See [`ATTRIBUTION.md`](./src/renderer/src/assets/ATTRIBUTION.md).
That licence requires credit to LimeZu, so don't remove the acknowledgement from
the README, the app, or the website. The Office cast is drawn procedurally in
`portraitArt.ts` and carries no third-party licence.
If you contribute new art, it must be either your own work or compatibly
licensed, and you must add it to `ATTRIBUTION.md`. Don't add unlicensed assets.
## Assets and questions

## Questions
Contributed art must be original or compatibly licensed, with attribution where needed. Do not add third-party theme packs or unlicensed assets to the repo.

Open a [discussion or issue](../../issues) — happy to help you get oriented.
Use a GitHub issue or discussion for questions that need coordination before a large change.
4 changes: 2 additions & 2 deletions DESIGN.md
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ Saturated and warm. Each avatar gets one — the strip badge, the agent's chat s
| `status-idle` | `#A899B5` | Agent at desk, awaiting |
| `status-thinking` | `#4ECDC4` | Reasoning + en route to a station |
| `status-working` | `#FFD93D` | At a station, using a tool |
| `status-waiting` | `#6C8EF5` | Worker stalled on god or another agent |
| `status-waiting` | `#6C8EF5` | Worker stalled on orchestrator or another agent |
| `status-blocked` | `#FF6B6B` | Notification fired, needs user |
| `status-success` | `#6BCF7F` | Just finished |
| `status-ghost` | `#D9CFE0` | Pane closed, fading out |
Expand Down Expand Up @@ -285,7 +285,7 @@ Color: status palette. Background: status-color at 20% opacity over cream-100.
```

Labels are not the token names — they read from the *user's* side. `blocked` shows
"needs you" (reserved for the god agent waiting on you), `waiting` stays "waiting"
"needs you" (reserved for the orchestrator waiting on you), `waiting` stays "waiting"
(honest about the worker being stalled on another agent), and `typing` shows
**"your draft"** — it is your text on the prompt, not the agent's, and it is why
that agent's message queue is not draining. See
Expand Down
Loading
Loading