pi-roundtable-coding 0.7.15 → 0.7.16

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.
package/CHANGELOG.md CHANGED
@@ -2,6 +2,11 @@
2
2
 
3
3
  ## [Unreleased]
4
4
 
5
+ ## [0.7.16] - 2026-10-04
6
+
7
+ - The worker's shell calls follow pi-roundtable 0.7.16's `shellHoldRule`: an `rm` whose operands all resolve inside the job's workspace, without being it, runs without a hold. Every `git push` stays held.
8
+ - A finished job frees its repository before its report is delivered, so the report turn can run `repo_change_report`, `repo_push` or the next `repo_task` there; `idle()` still waits for the delivery.
9
+
5
10
  ## [0.7.5] - 2026-10-03
6
11
 
7
12
  - Add `workerBlockText`, `limits` and `diagnosticChars`; git, gh and worker error text and the report and held-action bounds can be raised or lifted by the host.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pi-roundtable-coding",
3
- "version": "0.7.15",
3
+ "version": "0.7.16",
4
4
  "description": "Repository shelves and owner-approved Pi coding workers for pi-roundtable",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -44,7 +44,7 @@
44
44
  "@earendil-works/pi-ai": ">=1.0.0 <2",
45
45
  "@biomejs/biome": "2.5.15",
46
46
  "@types/bun": "1.4.2",
47
- "pi-roundtable": "0.7.15",
47
+ "pi-roundtable": "0.7.16",
48
48
  "typescript": "7.0.2"
49
49
  }
50
50
  }
@@ -99,6 +99,8 @@ function bounded(text: string, max: number): string {
99
99
  /** One worker per repository, at most three per channel; results and jobs are in memory. */
100
100
  export class CodingDesk {
101
101
  readonly #options: CodingDeskOptions;
102
+ /** Every run until its report is delivered, for idle(). */
103
+ readonly #pending = new Set<Promise<void>>();
102
104
  readonly #running = new Map<
103
105
  number,
104
106
  { job: CodingJob; controller: AbortController; done?: Promise<void> }
@@ -129,7 +131,7 @@ export class CodingDesk {
129
131
  throw new AgentError(`A coding worker is still using ${repo}.`);
130
132
  }
131
133
  async idle(): Promise<void> {
132
- await Promise.all([...this.#running.values()].map((run) => run.done));
134
+ await Promise.all(this.#pending);
133
135
  }
134
136
  async stop(): Promise<void> {
135
137
  this.#stopped = true;
@@ -183,6 +185,9 @@ export class CodingDesk {
183
185
  );
184
186
  })
185
187
  .finally(() => this.#running.delete(job.id));
188
+ const done = run.done;
189
+ this.#pending.add(done);
190
+ void done.finally(() => this.#pending.delete(done));
186
191
  return job;
187
192
  }
188
193
  async #run(
@@ -332,6 +337,8 @@ export class CodingDesk {
332
337
  } catch {
333
338
  this.#options.logger.warn({ job: job.id }, "Coding thread close failed.");
334
339
  }
340
+ // The work is over: free the repository before the report turn, so that turn can ship it.
341
+ this.#running.delete(job.id);
335
342
  await deliver(result);
336
343
  }
337
344
  }