Repository navigation
Releases: oxygenforce/dsh-agent-activity
Release list
v0.9.0 — the card says what it is doing now
The previous version said which file was deleted; that still did not say why — and the
purpose line had gone missing. Both are fixed.
- The big line of every row is now a reason: the todo it serves, else the sentence the model was writing when
it decided to call the tool, else a plain-language reason for that kind of action. - The concrete detail (verb + object) moves to the small print:
run tests activity.test.mjs,
delete dist/*.tgz,search "commandPlan". - Deleting build output gets a specific reason ("clear the old package so the next release is not stale").
- Also fixes a crash in the 0.8.0 row renderer (a variable used before its declaration).
Client-only change: refresh the page.
The header now answers "what is happening right now" instead of counting finished steps, and an unrecognised tool no longer renders as a vague step label — it shows its own name.
v0.8.2 — the × folds the card into a pill
The previous version said which file was deleted; that still did not say why — and the
purpose line had gone missing. Both are fixed.
- The big line of every row is now a reason: the todo it serves, else the sentence the model was writing when
it decided to call the tool, else a plain-language reason for that kind of action. - The concrete detail (verb + object) moves to the small print:
run tests activity.test.mjs,
delete dist/*.tgz,search "commandPlan". - Deleting build output gets a specific reason ("clear the old package so the next release is not stale").
- Also fixes a crash in the 0.8.0 row renderer (a variable used before its declaration).
Client-only change: refresh the page.
Dismissing the card folds it into a small pill instead of removing it: click the pill and the card comes back, and a page refresh restores it too.
v0.8.1 — every row says why
The previous version said which file was deleted; that still did not say why — and the
purpose line had gone missing. Both are fixed.
- The big line of every row is now a reason: the todo it serves, else the sentence the model was writing when
it decided to call the tool, else a plain-language reason for that kind of action. - The concrete detail (verb + object) moves to the small print:
run tests activity.test.mjs,
delete dist/*.tgz,search "commandPlan". - Deleting build output gets a specific reason ("clear the old package so the next release is not stale").
- Also fixes a crash in the 0.8.0 row renderer (a variable used before its declaration).
Client-only change: refresh the page.
v0.8.0 — delete which file, search for what
Rows that read delete file or search code never told you which file or what. Now they do.
- Shell commands are parsed into an operand per verb:
rm -rf dist/→ delete dist,grep -rn "useProjection" lib/
→ search "useProjection",git commit -m "feat: x"→ commit feat: x,cp a b→ copy a → b. find,tasklist | grep node,python - <<'PY', unknown programs: each has an explicit subject rule, and the
fallback shows the command itself instead of a category.- Repeated identical actions collapse into one row with
×N(threegit statusbecome one line). - Every row still remembers why: the
为了 …sub-line is unchanged.
Client-only change: refresh the page.
v0.7.1 — the checklist line gets the full width
The checklist headline now takes the whole header width instead of being capped at 62 percent, so a long todo does not truncate while the counts stay visible. Client-only: refresh the page.
v0.7.0 — the card is a checklist first
Closer to the built-in Tasks panel, which you said was easier to read.
- Collapsed: one line = the todo being worked on, then
2 done · 1 now · 1 to go. - Open: the todo list comes first —
✓ done, spinnerin progress, hollownot started— and the tool
calls move down into a secondary What I ran section headed by a one-line recap. - Without a todo list the card falls back to the previous layout (action rows with plain-language labels).
Client-only change: refresh the page.
v0.6.1 — one line per step, no repetition
Rows used to say write file · client.js, which means nothing unless you already know the code.
Each row now leads with the most human thing available, in this order:
- the todo it is serving — when the agent keeps a todo list, the row borrows that sentence verbatim
("keep the card after the turn ends"); - the exact thing being changed — an edit quotes the replaced line (
edit “收起时是一行”), a new file is
named; - the action — otherwise a plain verb plus its concrete object ("run tests · activity.test.mjs"),
instead of a generic category.
A todo that spans several steps is the headline of the first step only, so ten steps do not repeat one sentence.
The Host fold also records the todo text and the edited snippet per step, so the card never has to guess.
stateVersion 7 — existing sessions refold on the next load.
Restart the Harness once (Host half changed), then refresh the page.
v0.6.0 — the card says what is being changed
Rows used to say write file · client.js, which means nothing unless you already know the code.
Each row now leads with the most human thing available, in this order:
- the todo it is serving — when the agent keeps a todo list, the row borrows that sentence verbatim
("keep the card after the turn ends"); - the exact thing being changed — an edit quotes the replaced line (
edit “收起时是一行”), a new file is
named; - the action — otherwise a plain verb plus its concrete object ("run tests · activity.test.mjs"),
instead of a generic category.
The Host fold also records the todo text and the edited snippet per step, so the card never has to guess.
stateVersion 7 — existing sessions refold on the next load.
Restart the Harness once (Host half changed), then refresh the page.
v0.5.0 — the card stays after the turn ends
The card no longer disappears when the turn ends.
It used to fade out two minutes after the final event. Now it stays where it is — one line above the
composer — and that line is the entry point for "what did it just do?": click to open the rows,
click x to dismiss that one turn. The next turn brings it back on its own.
Past conversations behave the same way: opening one shows the last turn of that conversation,
because the projection keeps exactly one turn of history (the part the card renders). Nothing is
recomputed on the client.
- Removed the two-minute expiry and its timer.
- x dismisses the current turn only; the preference for open/closed is still remembered.
- Host unchanged: this is a Client release, so a page refresh is enough.
v0.4.0 — every row says why
Every action row now carries the reason for that step.
The Host fold keeps the sentence the model wrote right before a tool call and attaches it to the
row; the card renders it as 为了 … (or "for …" in English). When there is no such sentence —
a long scripted chain, or a model that called the tool with no preface — the card falls back to the
todo item the agent is currently working on, so "跑 Python 脚本 · patch.py" no longer stands alone.
whyon each item and on each queued plan call, capped at 80 characters.stateVersion6: existing sessions refold and gain reasons retroactively.- Host-side change, so one Harness restart is needed; the card layout itself already reloads with a
page refresh.