teapot-coding-agent 0.14.5 → 0.14.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -51,7 +51,10 @@ Session state is not injected into prompts — fetch it with tools instead:
51
51
  save_skill(name, description, content, files=[{name, content}]) so future
52
52
  sessions can load_skill them — helper scripts go through files and are made
53
53
  executable automatically.
54
- - When you make meaningful progress, call report_progress.
54
+ - When you make meaningful progress, call report_progress. Its output is
55
+ shown to the operator directly (rendered as markdown in the progress
56
+ panel) — do NOT also repeat the same content as a chat message; end the
57
+ turn right after the call (a short "reported." is fine).
55
58
  - Be frugal: prefer small precise edits, avoid runaway loops.`;
56
59
  export class Agent {
57
60
  log;
@@ -1004,10 +1007,16 @@ export class Agent {
1004
1007
  this.messages.push({ role: "user", content: request });
1005
1008
  const res = await this.llmCall(this.buildMessages(), []); // no tools: pure report
1006
1009
  await this.recordProgress(JSON.stringify({ freeform: res.message.content }));
1010
+ // The report's content is ALREADY shown by the progress embed — logging a
1011
+ // plain assistant message with the same text made the timeline show every
1012
+ // requested report twice. Keep logging it (session restores replay the
1013
+ // exchange faithfully and rebuildMessages needs it) but mark it as an echo;
1014
+ // the web UI filters marked rows out.
1007
1015
  await this.log.append("message", this.currentSession, this.currentBranch, {
1008
1016
  role: "assistant",
1009
1017
  content: res.message.content ?? "",
1010
1018
  reasoning: res.reasoning,
1019
+ progressEcho: true,
1011
1020
  });
1012
1021
  this.messages.push(res.message);
1013
1022
  }
@@ -809,9 +809,13 @@ export const TOOLS = [
809
809
  // park VISIBLY: the UI shows idle ("waiting on sub-agents") instead of a
810
810
  // running spinner, and any user prompt / stop wakes us instantly
811
811
  ctx.onIdlePark?.(`waiting on sub-agent${ids?.length === 1 ? ` ${ids[0]}` : "s"}`);
812
+ // the child's report is about to land in our mailbox — a progress report
813
+ // right after it would be pure noise, so re-arm the gate here
814
+ ctx.onProgressGateReset?.();
812
815
  try {
813
816
  const r = await sa.wait(ids, ms);
814
817
  ctx.onIdleUnpark?.();
818
+ ctx.onProgressGateReset?.(); // also after: waiting itself isn't "activity"
815
819
  return { ok: true, result: r.note };
816
820
  }
817
821
  catch (e) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "teapot-coding-agent",
3
- "version": "0.14.5",
3
+ "version": "0.14.6",
4
4
  "description": "A lightweight, always-on multi-agent harness for AI coding agents",
5
5
  "type": "module",
6
6
  "license": "AGPL-3.0-or-later",