Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
c87694e
fix: regenerate version.ts from package.json (pre-existing stale vers…
Sep 30, 2026
9899b4b
WL-0MULHZLRU005MH5W: Implementation complete
Sep 30, 2026
fb6123e
WL-0MUMM9NED009TLL3: Implementation complete
Sep 30, 2026
6d9f053
chore: remove OpenBrain integration (WL-0MTH28WDS008WMXA)
Oct 1, 2026
cae6cbc
WL-0MTH28WDS008WMXA: Implementation complete
Oct 1, 2026
2cbd95a
feat(herdr): route downtime dispatches to per-prefix tabs in the Disp…
Oct 1, 2026
8b035ff
docs(herdr): document per-prefix Dispatcher tabs for downtime dispatc…
Oct 1, 2026
22984d4
fix(interview): output full question text without truncation (WL-0MUK…
Oct 1, 2026
43a6619
WL-0MULMWGJC002IX45: Implementation complete
Oct 1, 2026
9887fa0
WL-0MULMY8970009RTX: Implementation complete
Oct 1, 2026
b296841
WL-0MUKCGV3X0030W6K: Implementation complete
Oct 1, 2026
2192d02
WL-0MULN3OTX0028E8R: Implementation complete
Oct 1, 2026
bc1d668
WL-0MULN3UV2005D02N: Implementation complete
Oct 1, 2026
b064cd2
WL-0MUJMXVPO0016DZM: Implementation complete
Oct 1, 2026
ca9b09d
WL-0MUJMXVPO0016DZM: update context-budget thresholds for new pane-tr…
Oct 1, 2026
278b8cb
WL-0MUJMXVPO0016DZM: enrich bridge JSON (sessionTail, invokingPaneId,…
Oct 1, 2026
fa93c41
WL-0MTV67MZU003H7SH: Implementation complete
Oct 1, 2026
956237e
WL-0MUNMCYGH0022D2H: Implementation complete
Oct 1, 2026
2e09e31
WL-0MUR5FUWD00024XN: Implementation complete
Oct 2, 2026
c2955cc
WL-0MULI0LXL00829JI: Implementation complete
Oct 2, 2026
2c3db33
WL-0MUNMCZ2K003DZ50: Implementation complete
Oct 2, 2026
d3f442d
WL-0MULI1N1N0001WRD: Implementation complete
Oct 2, 2026
4a4de75
WL-0MULI5Q8M008LL45: Implementation complete
Oct 2, 2026
1dbcdf1
WL-0MULILQ770097DXF: Implementation complete
Oct 2, 2026
9858ef4
OSL-0MURL1T53003FP5W: failing regression test for w-chord dispatch path
Oct 3, 2026
d663c90
OSL-0MURL1U0M009BSXY: fix w-chord dispatch on podcast items
Oct 3, 2026
116c13e
Bump version to v1.0.18
Oct 4, 2026
8d656a2
Update CHANGELOG.md for v1.0.18
Oct 4, 2026
27c7b45
Merge origin/dev into main (automated)
Oct 4, 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
1 change: 0 additions & 1 deletion .worklog/config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,3 @@ autoSync: false
githubRepo: TheWizardsCode/ContextHub
githubLabelPrefix: 'wl:'
githubImportCreateNew: true
openBrainEnabled: true
32 changes: 32 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,37 @@
# Changelog

## v1.0.18 (2026-10-04)
### Features
- Recent dispatches are now grouped by time of day, so you can see when work happened. (WL-0MUMM9NED009TLL3)
- When no questions are found, you now get a clear explanation of what's needed to clear the review flag. (WL-0MUH765F1003FKRK)
- Review and close idle agent panes in your workspace, with your approval before anything closes. (WL-0MUJMXVPO0016DZM)
- Failed tasks now wait before being retried, preventing wasted slots on repeated failures. (WL-0MUKYERLZ006ELL5)
- Downtime work now always picks the top item from your Herdr list, so automated tasks match what you see. (WL-0MTK1ILM2009QYB2)
- Automated work panes now open in your project's workspace, grouped by task. (WL-0MU321YK70035AYT)
- Press r then p for Producer Review, or r then i to start an interview. (WL-0MU95SGEB006HQAM)
- Automatically detects and safely fixes performance issues slowing down your machine. (WL-0MUJLCVRS0093EJJ)
- Covered items now show a dimmed audit icon so you can tell they're already reviewed. (WL-0MUBVH8QG0020H9L)
- Completed work can no longer ship without an audit unnoticed, with warnings and a report to catch gaps. (WL-0MUBVH9FV0027COG)
- Press f d to review the 20 most recent auto-dispatched work items and their outcomes. (WL-0MUGLL9SS002E1D2)
- Audits now run one at a time per machine, so they finish reliably instead of failing when several run at once. (WL-0MUIVE0YG000UVIA)
- Completed agent sessions now close automatically, freeing up your machine's resources. (WL-0MUJL1NAH0042GOS)
- Audit freshness now works consistently everywhere, so items won't appear fresh in one view and stale in another. (WL-0MUBVH7ZR009PP80)
- Automated downtime work now appears in its own project tab, keeping projects separate. (WL-0MTRQT482001SNXC)
- Adds automated checks to keep work item recovery reliable, so stalled tasks resume correctly. (WL-0MTF5WO4Q005YBVH)
- The review queue banner now tells you whether to keep auditing or ship. (WL-0MUJQFXYC009CFRJ)
### Bug Fixes
- Interview questions now display in full, so you can see every option and note before answering. (WL-0MUKCGV3X0030W6K)
- Stage filters now show in-progress work instead of hiding it. (WL-0MUIB7D30009KG00)
- Automated tasks now open in the correct project workspace instead of a shared one. (WL-0MUR5FUWD00024XN)
- The top info line now stays visible even when the help text wraps. (WL-0MTV979LK005YB1B)
- Rejecting work items with an apostrophe in the reason now works correctly. (WL-0MU7KEX65004X0U9)
- Long audit sessions no longer crash from a stale notification after a session reload. (WL-0MUIV50EJ007VH9B)
- Shortcut commands with special characters now work correctly. (WL-0MUKH3DVA00488U0)
- Fixed a test that was checking for an outdated keyboard shortcut hint. (WL-0MUKDNC7L000I1JO)
### Other
- Old debug logs are now cleaned up automatically, keeping the game running fast and smooth. (WL-0MUJL0PTS009MC8F)
- Completing a work item no longer shows stray error messages in your terminal. (WL-0MTH28WDS008WMXA)

## v1.0.17 (2026-09-30)
### Features
- Press r then i to start an interview on the selected work item. (WL-0MU95SGEB006HQAM)
Expand Down
55 changes: 50 additions & 5 deletions CLI.md
Original file line number Diff line number Diff line change
Expand Up @@ -1165,15 +1165,12 @@ wl plugins

Worklog comes bundled with an example stats plugin installed.

- `openbrain` — Manage OpenBrain submission queue (`status`, `resubmit`).
- `stats` — Show custom work item statistics (example plugin provided in this repo).
- `ampa` — AMPA plugin: manage AMPA containers and workspace tasks (start, stop, status, run, list, start-work, finish-work).

Examples:

```sh
wl openbrain status
wl openbrain resubmit WL-ABC123
wl ampa start # start AMPA services for this repo
wl ampa status # show AMPA service status
wl ampa list # list available AMPA containers/tasks
Expand Down Expand Up @@ -1256,19 +1253,67 @@ Answers are persisted after each response, so an interrupted session can be
resumed by re-running the command: only the questions that remain outstanding
are asked. `needsProducerReview` is cleared once every question has an answer.

#### When there are no questions to answer

If no clarifying-questions section is found (or it contains no parseable
questions) but the item is still flagged for producer review, the command
explains what the producer must do to clear the flag. The explanation is
produced by the local LLM proxy's `compact` model, prompted with the
instruction *"Explain what the producer needs to do in order to remove the
needsProducerReview flag"* plus item context (the description and the two most
recent comments). When the LLM is disabled or unreachable the command falls
back silently to the two most recent comments (`<author>: <first line>`).

The explanation is advisory only — it never mutates the description.

After printing the explanation the command asks
`Clear the needsProducerReview flag? (y/N)` (default **No**); answering `y`
clears the flag via the store, anything else leaves it flagged. This prompt
only appears in the `noSection`/`noQuestions` cases; the **`allAnswered`
path is unchanged** (`WL-0MU55UDBJ008DJ67`) and still clears the flag
automatically without prompting. No prompt is shown — and the flag is never
mutated — in `--json` mode or other non-interactive contexts.

Options:

- `--prefix <prefix>` — Operate on a specific prefix (optional).
- `--json` — Non-interactive mode: prints JSON with
`needsProducerReview` (boolean), `producerReviewExplanation` (string or
`null`), `noSection`, `noQuestions`, `total`, `outstanding` and
`allAnswered`. Performs no prompts, no mutation and (with `--no-llm`) no
LLM call.
- `--no-llm` — Disable the LLM explanation and use the comment fallback
(default: LLM on).
- `--model <model>` — Override the chat model used for the explanation.

> The command requires interactive (TTY) input; it cannot be used with
> `--json`.
> Without `--json`, the command requires interactive (TTY) input.

Examples:

```sh
wl interview WL-ABC123
wl interview WL-ABC123 --no-llm
wl --json interview WL-ABC123
```

#### `llm` configuration

The chat provider used for the explanation is configured under the `llm`
section of `.worklog/config.yaml`, mirroring `embedding`:

```yaml
llm:
baseUrl: http://192.168.0.199:8000/v1
model: compact
apiKey: optional-key
timeoutMs: 15000
```

Defaults: `baseUrl` `http://192.168.0.199:8000/v1`, `model` `compact`,
`timeoutMs` `15000`. Environment variables `LLM_BASE_URL`, `LLM_MODEL`,
`LLM_API_KEY` and `LLM_TIMEOUT_MS` are used as fallbacks; config values take
precedence over environment variables.

### `help` [command]

Show help for a specific command.
Expand Down
23 changes: 23 additions & 0 deletions LOCAL_LLM.md
Original file line number Diff line number Diff line change
Expand Up @@ -210,6 +210,29 @@ be used by agents via standard provider configuration (e.g. Ollama
$env:OPENCODE_SERVER_PORT = 51625
```

### Direct LLM chat features (`llm.*` config)

Some `wl` features call an OpenAI-compatible chat-completions endpoint
directly — currently the `wl interview` producer-review explanation, which
uses the `ChatClient` in `src/lib/llm.ts`. These are configured under the
`llm` section of `.worklog/config.yaml`, parallel to `embedding`:

```yaml
llm:
baseUrl: http://192.168.0.199:8000/v1
model: compact
apiKey: optional-key # omit for local providers that need no auth
timeoutMs: 15000
```

Defaults: `baseUrl` `http://192.168.0.199:8000/v1`, `model` `compact`,
`timeoutMs` `15000`. Environment variables `LLM_BASE_URL`, `LLM_MODEL`,
`LLM_API_KEY` and `LLM_TIMEOUT_MS` are used as fallbacks; config values take
precedence over environment variables (matching the `embedding.*` precedence).
Every call is bounded by the timeout and degrades silently to a non-LLM
fallback on error. See [CLI.md](CLI.md#interview-options-id) for the
`wl interview --no-llm` opt-out.

---

## Task routing guidance (what to run locally vs hosted)
Expand Down
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,7 @@ You can get a lot of value from using Worklog as a memory for your agents. But y
|----------|-------------|
| [Heartbeat Skill](skill/heartbeat/SKILL.md) | Automated work item monitoring and audit orchestration for the Pi agent |
| [PLUGIN_GUIDE.md](PLUGIN_GUIDE.md) | Plugin development guide and API reference |
| [LOCAL_LLM.md](LOCAL_LLM.md) | Configure local LLM providers (Ollama, Foundry) |
| [LOCAL_LLM.md](LOCAL_LLM.md) | Configure local LLM providers (Ollama, Foundry) and the direct `llm.*` chat config used by `wl interview` |
| [MULTI_PROJECT_GUIDE.md](MULTI_PROJECT_GUIDE.md) | Multi-project setup with custom prefixes |
| [API.md](API.md) | REST API endpoints and usage |
| [docs/FILE_PATH_CONVENTION.md](docs/FILE_PATH_CONVENTION.md) | File path convention for work item descriptions |
Expand All @@ -134,7 +134,6 @@ You can get a lot of value from using Worklog as a memory for your agents. But y
| [AGENTS.md](AGENTS.md) | AI agent onboarding and workflow instructions |
| [tests/README.md](tests/README.md) | Test suite documentation |
| [examples/README.md](examples/README.md) | Example plugins |
| [OpenBrain Integration](docs/openbrain.md) | Documentation for the optional OpenBrain submission integration |

### Internal / Development

Expand All @@ -148,6 +147,7 @@ You can get a lot of value from using Worklog as a memory for your agents. But y
| [docs/dev/wl-process-healthcheck.md](docs/dev/wl-process-healthcheck.md) | wl process healthcheck watchdog usage (cron/systemd, thresholds) |
| [docs/dev/audit-debug-log-retention.md](docs/dev/audit-debug-log-retention.md) | Audit debug log retention policy + runbook: sweep locations/thresholds, dry-run/`--apply`/`--check`, cron install/removal, safety guarantees |
| [docs/dev/downtime-dispatcher.md](docs/dev/downtime-dispatcher.md) | Leader-election + shared-coordination downtime dispatcher architecture (herdr); critical-first dispatch tier + freeze split-by-skill; dedicated Dispatcher workspace with per-project tabs (one tab per work-item prefix) |
| [docs/pane-triage-skill.md](docs/pane-triage-skill.md) | Approval-gated pane-triage skill and the cross-language pane-close bridge that exposes the shared classifier to Python skills |

## Tutorials

Expand Down
20 changes: 20 additions & 0 deletions docs/design/mode-switch-worker.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,26 @@ presence and proxy idle state, without operator intervention:
responses yield no switch and never crash or block the plugin. A `409`
(mode-switch restart in progress) is a no-op, retried on a later tick.

### Drain before switching (WL-0MUL0KO7Q003O7YJ)

When the idle window is met **and** the proxy is idle, the worker enters a
**draining** state instead of switching immediately: it waits until the active
session count has fallen to the cheap pool's budget (`freeSlots >=
DOWNTIME_AUDIT_MIN_FREE_SLOTS = 2`), then switches. In-flight work is never
killed — draining only delays the switch and blocks *new* dispatches.

While draining:

- The downtime dispatcher pauses **new** dispatches. The mode-switch worker
exposes `getIsDraining()`; `index.ts` forwards it to the dispatcher as
`config().drainPaused`, and `DowntimeWorker.tick()` refuses to dispatch while
it is `true`. The poll and `onProxyIdle` hook still run every tick, so the
mode-switch worker keeps observing the live free-slot count.
- Once the budget frees, the drain completes, the proxy switches to cheap,
`getIsDraining()` clears, and dispatch resumes on the next idle tick.
- An operator agent-route command (`onOperatorCommand`) cancels the drain
immediately, resets the idle clock, and keeps the proxy fast.

### Restart semantics

On plugin/pane restart the idle clock resets to "active now" (construction
Expand Down
4 changes: 2 additions & 2 deletions docs/dev/context-budget.thresholds.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"global_agents": 0,
"project_agents": 1655,
"skills_prose": 239,
"total": 1894
"skills_prose": 473,
"total": 2128
}
Loading
Loading