pi-squire 0.15.0 → 0.17.0
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 +343 -1
- package/README.md +931 -118
- package/package.json +2 -1
- package/src/agents.ts +73 -43
- package/src/child-tasks.ts +221 -0
- package/src/child.ts +35 -41
- package/src/completion-holds.ts +104 -0
- package/src/dashboard.ts +144 -0
- package/src/git.ts +6 -1
- package/src/identity.ts +152 -0
- package/src/index.ts +342 -56
- package/src/local-state.ts +21 -0
- package/src/navigator-view.ts +186 -0
- package/src/navigator.ts +152 -107
- package/src/poll.ts +1 -0
- package/src/render.ts +4 -1
- package/src/result-close.ts +37 -0
- package/src/result-restore.ts +95 -0
- package/src/result-types.ts +29 -1
- package/src/results-presentation.ts +47 -0
- package/src/results.ts +174 -108
- package/src/resume-checks.ts +14 -2
- package/src/resume-picker.ts +9 -2
- package/src/resume.ts +62 -13
- package/src/session-owner.ts +279 -0
- package/src/task-replies.ts +247 -0
- package/src/task-settlement.ts +81 -0
- package/src/task-store.ts +26 -0
- package/src/tmux.ts +134 -54
- package/src/tool-bundles.ts +84 -0
- package/src/tool-names.ts +29 -0
- package/src/tracking.ts +72 -65
- package/src/tree-close.ts +236 -0
- package/src/tree-fence.ts +51 -0
- package/src/tree-lock.ts +77 -0
- package/src/tree-notice.ts +124 -0
- package/src/tree-registry.ts +365 -0
- package/src/tree-settings.ts +31 -0
- package/src/tree-types.ts +32 -0
- package/src/tree-view.ts +246 -0
- package/src/trust-control.ts +214 -0
- package/src/trust-prompt.ts +163 -0
- package/src/trust-wire.ts +203 -0
- package/src/widget-activity-join.ts +24 -0
- package/src/widget-activity-runtime.ts +104 -0
- package/src/widget-activity.ts +104 -0
- package/src/widget-ancestors.ts +142 -0
- package/src/widget-current.ts +41 -0
- package/src/widget-data.ts +147 -0
- package/src/widget-focus.ts +133 -0
- package/src/widget-live-process.ts +31 -0
- package/src/widget-live.ts +356 -0
- package/src/widget-render.ts +181 -0
- package/src/widget-selection.ts +58 -0
- package/src/widget-settings.ts +29 -0
- package/src/widget-summary.ts +51 -0
- package/src/widget-title-file.ts +127 -0
- package/src/widget-title.ts +118 -0
- package/src/widget.ts +272 -0
- package/src/window-placement.ts +30 -5
- package/src/workspace.ts +38 -90
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,346 @@ follows [Semantic Versioning](https://semver.org/).
|
|
|
6
6
|
|
|
7
7
|
## [Unreleased]
|
|
8
8
|
|
|
9
|
+
## [0.17.0] - 2026-11-01
|
|
10
|
+
|
|
11
|
+
### Breaking
|
|
12
|
+
|
|
13
|
+
- Nested launches and resumes no longer cap a child's tools to its direct
|
|
14
|
+
parent's. A nested child gets the tools its own agent file gives, as at top
|
|
15
|
+
level, and `session:launch` additions are no longer cut back afterwards; the
|
|
16
|
+
`allow_nested_delegation` list is the boundary. A read-only child started by
|
|
17
|
+
a writable parent now keeps tools such as `grep` that the parent lacks. The
|
|
18
|
+
"Nested tool ceiling" notices are gone. Tests that pinned the ceiling now pin
|
|
19
|
+
the new behaviour.
|
|
20
|
+
|
|
21
|
+
### Added
|
|
22
|
+
|
|
23
|
+
- `toolBundles` in `squire/settings.json` names shared tool lists; an agent's
|
|
24
|
+
`tools` field uses one as `$name`, for example `tools: [$readonly, pstack_models]`.
|
|
25
|
+
An unknown bundle, a `-$name` entry or an invalid setting disables the agent
|
|
26
|
+
that uses it.
|
|
27
|
+
|
|
28
|
+
## [0.16.0] - 2026-11-01
|
|
29
|
+
|
|
30
|
+
### Breaking
|
|
31
|
+
|
|
32
|
+
- `delegation_close` now closes a persistent descendant subtree rather than one
|
|
33
|
+
local window. Its structured result adds `complete` and per-member outcomes;
|
|
34
|
+
partial failures return `isError:true` with details rather than discarding
|
|
35
|
+
successful members in a thrown tmux error. Close requires a readable shared
|
|
36
|
+
fence before kills. Old single-window wording/schema, direct-close-on-corrupt-
|
|
37
|
+
registry, panel/poll/placement text assertions deliberately change; local
|
|
38
|
+
genuine result publication remains warning-only. Unknown/foreign/obsolete
|
|
39
|
+
target ids refuse before effects. Canceling unfinished children now requires
|
|
40
|
+
direct-parent processing rather than silently releasing the task barrier.
|
|
41
|
+
- Delegations recorded without the required original-root placement identity
|
|
42
|
+
can no longer be resumed after this update, including pre-nesting and
|
|
43
|
+
identity-less records even when reopened by their original root. Resume tools,
|
|
44
|
+
commands and picker refuse before trust, mail, exited-window kill, reservation
|
|
45
|
+
or spawn effects. No legacy identity synthesis or migration is provided.
|
|
46
|
+
The subtree-close identity-less resume fixture now asserts this refusal when
|
|
47
|
+
composed with root placement; its earlier fallback expectation is superseded.
|
|
48
|
+
|
|
49
|
+
- Require pi-session-mail 0.6.0 or another provider of all four message hooks.
|
|
50
|
+
Upgrade mail and squire together: squire now owns delegate task settlement
|
|
51
|
+
through `message:reply`; mail no longer automatically answers task requests.
|
|
52
|
+
|
|
53
|
+
- Agent frontmatter now uses `auto_exit` (boolean, default true).
|
|
54
|
+
Old `auto-exit` and `extensions` fields are silently ignored, with no
|
|
55
|
+
warnings or validation. In particular, old `auto-exit: false` now leaves
|
|
56
|
+
auto-exit on unless `auto_exit` or a call override disables it.
|
|
57
|
+
Agent-specific extension path resolution and launch arguments are removed
|
|
58
|
+
for both launch and resume; normal Pi extension loading and `session:launch`
|
|
59
|
+
customization remain. CLI flags, commands, internal fields and environment
|
|
60
|
+
variables keep their names. Updated agent-file, auto-exit, delegate, real-Pi
|
|
61
|
+
tool-selection, resume and hook tests for this deliberate contract change.
|
|
62
|
+
|
|
63
|
+
### Changed
|
|
64
|
+
|
|
65
|
+
- Complete branch-focused widget entry in the same dashboard: initial details
|
|
66
|
+
retain their Escape-to-compact-list behavior, while `b` opens only the selected
|
|
67
|
+
branch's descendant/resume history and worker details return to that list.
|
|
68
|
+
Overall `/delegates` stays scoped to the invoking session's whole subtree.
|
|
69
|
+
Root close-all remains explicitly all root subtrees, not only displayed rows.
|
|
70
|
+
- Dashboard switch/peek and `/delegate-open` now reuse positively verified
|
|
71
|
+
current pane/server/owner locators for reattached latest sessions, without
|
|
72
|
+
rewriting historical launch/result facts or changing close authority.
|
|
73
|
+
A lost or replaced current locator never falls back to an old still-open
|
|
74
|
+
window; peek captures the exact verified Pi pane. Details distinguish launch
|
|
75
|
+
and current windows and reflect native session titles and actual outcomes.
|
|
76
|
+
Verified live latest rows remain navigable even before historical disappearance
|
|
77
|
+
is polled. Closing live navigation rows confirms the separate durable control
|
|
78
|
+
scope; telemetry never retargets a kill, and reattached windows may remain open.
|
|
79
|
+
Post-switch ownership loss reports the completed switch honestly.
|
|
80
|
+
Add `test/navigator-current.test.ts`, extend `test/dashboard.test.ts` and
|
|
81
|
+
`test/widget-nesting-final.test.ts` for deliberate branch-list behavior,
|
|
82
|
+
current-window races, title composition and direct-parent resume refusal.
|
|
83
|
+
- Compose the shared widget/dashboard actions with context-aware subtree close:
|
|
84
|
+
selected close reports aggregate partial errors, and the root retains confirmed
|
|
85
|
+
`a` close-all from the same dashboard, including empty/history views. Keep
|
|
86
|
+
direct-widget activity/focus and direct-parent resume checks unchanged; no
|
|
87
|
+
second panel or row-by-row close authority. Add combined coverage in
|
|
88
|
+
`test/widget-nesting-final.test.ts` and root action intent coverage in
|
|
89
|
+
`test/dashboard.test.ts`; extend `test/dashboard-actions.test.ts` control stubs.
|
|
90
|
+
- Make the direct-delegate widget keyboard-navigable and reuse one dashboard for
|
|
91
|
+
widget Enter, `/delegates` and its shortcut. Down at an empty built-in prompt
|
|
92
|
+
selects children; stable selection scrolls through the cap. Enter opens details,
|
|
93
|
+
and Escape returns to list then prompt. Dashboard list Enter now opens details
|
|
94
|
+
before a second Enter switches (a deliberate navigation change); peek, close,
|
|
95
|
+
new and authorized resume remain behind existing action/ownership checks.
|
|
96
|
+
Custom editors, autocomplete, dialogs and unknown focus pass through unchanged.
|
|
97
|
+
The isolated Pi-internals adapter was tested with installed Pi 1.4.0 in both
|
|
98
|
+
regular and fullscreen modes; no Pi change or editor/footer replacement.
|
|
99
|
+
Protect the empty prompt while a widget-opened dashboard is loading or
|
|
100
|
+
re-listing between actions, without intercepting real dashboard/dialog input.
|
|
101
|
+
Update `test/navigator.test.ts` for the deliberate two-Enter details/switch
|
|
102
|
+
flow and `test/tree-restore.test.ts` to inspect metadata in details.
|
|
103
|
+
- The interactive direct-delegate overview deliberately replaces only Squire’s
|
|
104
|
+
running-count entry when its cap is positive, preserving custom footers/editors
|
|
105
|
+
and the own-delegate badge. Cap zero and non-TUI hosts retain the running count.
|
|
106
|
+
|
|
107
|
+
### Added
|
|
108
|
+
|
|
109
|
+
- Nested delegate overview: root-to-parent ancestor rows with direct live-window
|
|
110
|
+
navigation, parent-first Down and cap-zero ancestor navigation plus the existing
|
|
111
|
+
direct-child count. Same-id reopens use owner-correlated current pane/server/
|
|
112
|
+
window metadata, independent of strict task activity launch correlation.
|
|
113
|
+
- All-depth descendant **task/launch-id** summaries beneath direct coordinator
|
|
114
|
+
rows, preserving failed/stopped/missing outcomes and failures across resumes.
|
|
115
|
+
Read-only semantic provenance and coverage keep registry accounting distinct
|
|
116
|
+
from actual replies; unknown/partial coverage is explicit. Summaries share one
|
|
117
|
+
secondary line with factual activity and take priority at narrow widths.
|
|
118
|
+
The former cap-zero empty-widget assertion deliberately changes for delegates;
|
|
119
|
+
async ancestor metadata tests now wait for the observable refreshed frame.
|
|
120
|
+
Corrupt descendant owner facts show unavailable counts without freezing fresh
|
|
121
|
+
ancestors/direct rows. Hidden/empty child views skip locator I/O, and unchanged
|
|
122
|
+
positive locator observations do not rewrite telemetry snapshots.
|
|
123
|
+
No task/control policy, result barrier, provider contract or second tree index.
|
|
124
|
+
- Factual live direct-delegate activity from actual concurrent/nested tool-call
|
|
125
|
+
ids and bounded assistant response text, propagated across Pi processes by
|
|
126
|
+
disposable owner-only snapshots. Launch correlation separates resumed tasks
|
|
127
|
+
from stable sessions; lifecycle cleanup and known task results/close clear
|
|
128
|
+
activity independently of task delivery. No thinking, tool results, inferred
|
|
129
|
+
intent/waits, extra model calls, counters or stale-state timer. Uncorrelated
|
|
130
|
+
manual reopen has no task-row activity. The common launcher now includes a
|
|
131
|
+
private stable-session/launch correlation environment value; launch-wire tests
|
|
132
|
+
deliberately account for this per-launch field.
|
|
133
|
+
- Live, passive direct-delegate overview in interactive Pi: running children
|
|
134
|
+
first, then finished-open children, newest within each group, with stable
|
|
135
|
+
session keys, mutable native titles and actual failure/stopped outcomes.
|
|
136
|
+
Native file-backed renames and unflushed title mirrors refresh without naming
|
|
137
|
+
tools or model calls. Responsive themed tree rows clamp narrow/wide text and
|
|
138
|
+
omit model then file-age metadata as space shrinks.
|
|
139
|
+
- `delegateWidgetPlacement` (above/below, default above) and
|
|
140
|
+
`delegateWidgetMaxEntries` (default three) in the existing Squire settings.
|
|
141
|
+
Independent observation continues after task completion and is cleaned up on
|
|
142
|
+
reload; no focus keys or tree accounting semantics change.
|
|
143
|
+
|
|
144
|
+
- Provider-neutral process-local completion holds: active exact-session Squire
|
|
145
|
+
runtimes advertise support in the versioned `pi.completion-holds.v1` data
|
|
146
|
+
table. External holds gate new final task replies, tree completion and
|
|
147
|
+
auto-exit until every current-session entry is ready. Host registrations are
|
|
148
|
+
runtime-owned and removed on every shutdown; provider holds survive reload
|
|
149
|
+
but are not durable across process restart.
|
|
150
|
+
|
|
151
|
+
- Synchronous `squire:identity` lifecycle notification with a frozen,
|
|
152
|
+
exact-session root/delegate/invalid observation, emitted after identity
|
|
153
|
+
restoration and persistence and before later asynchronous startup work.
|
|
154
|
+
Consumers can observe ordinary reopen and runtime replacement without
|
|
155
|
+
treating launch environment variables as identity authority.
|
|
156
|
+
|
|
157
|
+
- Explicit ancestor-scoped subtree close and root-only confirmed panel close-all.
|
|
158
|
+
Shared admission/own-entry dispatch fences precede effects, including root
|
|
159
|
+
reservations. Already-dispatched unknown creates remain charged/fenced and
|
|
160
|
+
partial; bounded explicit retries never guess no-start. Current verified
|
|
161
|
+
id+name locators include manually reattached same-id coordinators. Per-member
|
|
162
|
+
errors preserve successful closes; shared companions, branches and worktrees
|
|
163
|
+
are retained, and ordinary runtime exit never cascades.
|
|
164
|
+
- Confirmed closes are imported only by the direct-parent semantic owner as
|
|
165
|
+
durable canceled/missing child outcomes. Offline restoration and settlement
|
|
166
|
+
retain the processing barrier, root replay-stop behavior and genuine
|
|
167
|
+
mid-close/late worker replies. Completed fences allow a new authorized,
|
|
168
|
+
lifetime-counted direct-parent resume without reviving canceled descendants.
|
|
169
|
+
- Restore exact-session delegation trees without recreating live workers,
|
|
170
|
+
including offline child/coordinator replies, pending result processing and
|
|
171
|
+
concurrency for a manually reopened unfinished coordinator. Shared registry
|
|
172
|
+
ancestry drives descendant status/navigation; each direct parent's local
|
|
173
|
+
results/outcome inbox remains authoritative.
|
|
174
|
+
- Single Squire process owner per Pi identity, using the existing bakery lock.
|
|
175
|
+
Already-claimed Squire input is durably staged for the sole owner across
|
|
176
|
+
duplicate scans and delayed startup. Losing/stale runtimes cannot act or
|
|
177
|
+
clear a replacement token; ordinary parent exit never closes children.
|
|
178
|
+
- Bounded fresh-session notices explain reopening direct owners without
|
|
179
|
+
adoption: current agent/session directory, newest 64 registry files, at most
|
|
180
|
+
10 owners, 1 MiB per tree, one 200 ms cooperative notice budget, and explicit
|
|
181
|
+
unavailable/truncated scope.
|
|
182
|
+
- Shared per-root tree registry and atomic cross-process launch reservations.
|
|
183
|
+
`maxConcurrentDelegates` and `maxDelegatesPerRoot` default to 16/64 with
|
|
184
|
+
maxDepth > 1, remain unlimited when absent at depth 1, and accept zero for
|
|
185
|
+
unlimited. Settings changes affect subsequent launches/resumes; refusals
|
|
186
|
+
report count/limit without queues or killing existing work. Resumes spend
|
|
187
|
+
new launches; completed open windows free concurrency, not lifetime count.
|
|
188
|
+
- Publish worker terminal accounting independently of the parent's process,
|
|
189
|
+
retaining 03's local result-processing authority and durable reply retries.
|
|
190
|
+
Preserve failed-versus-uncertain launch/resume handling, recover child window
|
|
191
|
+
locators after lost tmux responses, reconcile disappeared workers and retain
|
|
192
|
+
ambiguous reservations until positive evidence exists. Counts survive
|
|
193
|
+
ordinary root/coordinator restarts. Separate Node-process contention/crash
|
|
194
|
+
fixtures are reusable by the later subtree-close slice.
|
|
195
|
+
|
|
196
|
+
- Nested unresolved project trust goes directly to the attended root's squire,
|
|
197
|
+
outside model questions and task mail, with agent-chain, requester and
|
|
198
|
+
directory/source context. Root-local and remote prompts share a serialized
|
|
199
|
+
queue, including while the root is busy. Preserve scoped/source-worktree
|
|
200
|
+
resolution and explicit approval/denial flags on launch and resume.
|
|
201
|
+
- Bound ordinary trust requests to ten minutes including queue wait. Cancellation,
|
|
202
|
+
disconnect, expiry and either runtime's replacement stop the pending launch
|
|
203
|
+
and dismiss its question; late approvals and old requests after restart cannot
|
|
204
|
+
save trust or revive work. Persistent choices are saved only by a live
|
|
205
|
+
requester; launch-only choices remain unsaved. Unavailable/unattended roots
|
|
206
|
+
refuse without opening delegate UI. Squire uses owner-token loopback control,
|
|
207
|
+
without provider internals, permission inheritance or pending-request replay.
|
|
208
|
+
Deliberately replace the interim nested-trust refusal tests with root-choice
|
|
209
|
+
behavior, real-provider isolation and separate-process kill/restart coverage.
|
|
210
|
+
- Nested launch/resume tools are capped by the direct parent’s actually available
|
|
211
|
+
operations, including codemode/deferred and active model-only tools. Requested
|
|
212
|
+
patterns become exact registration grants after `session:launch` customization;
|
|
213
|
+
neither `delegateTools` nor hook-added extensions can widen them. Launch/resume
|
|
214
|
+
notices report removed tools and restricted patterns; top-level selection stays
|
|
215
|
+
unchanged. Real Pi 1.3 execution and isolated CLI launch/resume tests cover the
|
|
216
|
+
deliberate nested-only behavior.
|
|
217
|
+
- Complete nested-grant validation: false and empty lists grant none, malformed
|
|
218
|
+
values disable the agent, duplicates are removed, and unavailable child names
|
|
219
|
+
warn without disabling known entries. An agent with a permission map warns
|
|
220
|
+
when a listed child lacks one, including `true` grants over the current roster.
|
|
221
|
+
This heuristic does not compare policies or inherit permission authority;
|
|
222
|
+
tool restrictions and permission rules do not provide filesystem isolation.
|
|
223
|
+
- Unreleased nested-worker lifecycle: `maxDepth` (default 1), current-agent
|
|
224
|
+
`allow_nested_delegation` grants and bypass-resistant launch/resume admission,
|
|
225
|
+
including trusted project-agent shadowing. Coordinators get all four
|
|
226
|
+
delegation tools even with an explicit tools list; listing tools alone warns
|
|
227
|
+
and grants nothing. Nesting remains an incomplete integration milestone:
|
|
228
|
+
full integrated real-model and permission-forwarding validation remains required
|
|
229
|
+
before production use.
|
|
230
|
+
- Persist parent/root/depth/agent/chain identity and auto-exit state for manual
|
|
231
|
+
same-session reopening. Expose read-only parent/root/depth/frozen chain on
|
|
232
|
+
`session:launch`, alongside existing mutable args/env customization.
|
|
233
|
+
- Durable direct-child task completion and result-processing barrier. No
|
|
234
|
+
intermediate coordinator reply/exit while children run; out-of-order results
|
|
235
|
+
and rolling fan-out finish only after a later processing run settles. Results
|
|
236
|
+
arriving during final settlement force processing before completion.
|
|
237
|
+
Coordinators can recover after fallback exhaustion while workers run; their
|
|
238
|
+
final run determines success/failure. Confirmed disappearance produces the
|
|
239
|
+
existing missing-result outcome; unknown tmux state does not release work.
|
|
240
|
+
- Separate coordinator identity/auto-exit and running-child footer keys, retain
|
|
241
|
+
parent delegation guidance in coordinators, and keep trust questions out of
|
|
242
|
+
unattended UI. Update deliberate single-level-only
|
|
243
|
+
registration, hook shape, footer and persistence expectations in tests;
|
|
244
|
+
execute the expanded README hook example and real-mail multi-instance
|
|
245
|
+
lifecycle coverage.
|
|
246
|
+
|
|
247
|
+
### Fixed
|
|
248
|
+
|
|
249
|
+
- Keep factual activity end/settlement observation live when Squire task-owner
|
|
250
|
+
processing fails or owner-record reads are unavailable, without granting action
|
|
251
|
+
authority. Check publication ownership only at startup, not on each text delta.
|
|
252
|
+
- Normalize process-start observation to C locale and UTC for live activity and
|
|
253
|
+
native-title mirrors, so differing parent/delegate time zones or locales do not
|
|
254
|
+
hide metadata or falsely delete a live activity snapshot.
|
|
255
|
+
- Preserve the original root project companion preference through nested
|
|
256
|
+
cross-project launches, same-id coordinator restarts without launch environment,
|
|
257
|
+
and direct-parent resumes while the root is absent. Save one `rootPlacement`
|
|
258
|
+
base in existing identity/local/shared tree records, keeping call-time
|
|
259
|
+
current/companion mode and marked/unmarked alternative selection separate.
|
|
260
|
+
Malformed or conflicting required placement identity fails closed; nested
|
|
261
|
+
parent-preference contradictions are refused before target trust resolution.
|
|
262
|
+
Identity-less resume refusal is declared above under Breaking; no relocation
|
|
263
|
+
or repair system is added.
|
|
264
|
+
Existing synthetic identity fixtures and full-identity assertions deliberately
|
|
265
|
+
include this required field. Add real-provider/Git cross-project coverage and
|
|
266
|
+
actual coordinator process shutdown/SIGKILL/reopen with root-absent resume.
|
|
267
|
+
- Incomplete transcript/child-identity restoration now fails closed for both
|
|
268
|
+
completion and admission, retains known own child obligations and refuses
|
|
269
|
+
incidental saves until repair/reopen. Foreign copied history stays excluded.
|
|
270
|
+
- Stage matching input atomically without waiting for a contended owner lock;
|
|
271
|
+
only the token owner drains, with callbacks outside that mutex. Preserve
|
|
272
|
+
timestamp/path order, avoid idle lock writes, and report unpersistable input
|
|
273
|
+
explicitly instead of silently falling through to plain mail. Ready owners
|
|
274
|
+
can use normal direct processing when staging alone is unwritable.
|
|
275
|
+
- Always run runtime shutdown cleanup after input/owner failures, closing old
|
|
276
|
+
trust controls/timers before replacement. Persist explicit root user stops
|
|
277
|
+
without automatic replay on reopen; fresh live results/gone outcomes still
|
|
278
|
+
wake normally and clear that replay hold. Ordinary crash recovery remains.
|
|
279
|
+
Root continuations use response wording rather than coordinator task reports.
|
|
280
|
+
- Ownership errors name the PID/file; discovery reports owner-read/tmux failures
|
|
281
|
+
once and shares one total latency budget. Document ordinary-mail/ask and
|
|
282
|
+
shared running-record consequences of duplicate provider processes.
|
|
283
|
+
|
|
284
|
+
- Restrict resume execution and picker authority to the original direct parent,
|
|
285
|
+
retaining root/depth, live-session/obsolete-chain protections and current
|
|
286
|
+
grants, caps, tool ceiling and trust resolver. Fork/clone copies are history,
|
|
287
|
+
not authority; inherited launch environment no longer assigns identity.
|
|
288
|
+
- Deliberately change the delegates panel to retain hierarchical history and
|
|
289
|
+
details rather than only open windows; only verified windows support
|
|
290
|
+
navigation. Descendant close stays with the separate explicit-close slice.
|
|
291
|
+
Reattachment tests now reopen the same id after shutdown rather than copying
|
|
292
|
+
starts into a fresh/live duplicate session. Root outcomes retain processing
|
|
293
|
+
durability with a non-displaying recovery wake instead of a repeated final.
|
|
294
|
+
|
|
295
|
+
- Keep durable local result/gone delivery, coordinator wakes and close tracking
|
|
296
|
+
working when shared fact publication fails; warn and reconcile those saved
|
|
297
|
+
facts at the next admission. Worker frozen-terminal publication remains
|
|
298
|
+
mandatory before transport. A confirmed window open stays successful and
|
|
299
|
+
locally tracked even if accounting publication fails, and refund failures
|
|
300
|
+
preserve the original tmux certainty/error. A refused concurrent resume no
|
|
301
|
+
longer releases another call\'s in-flight guard.
|
|
302
|
+
- Retain frozen answers when task context is unavailable rather than bypassing
|
|
303
|
+
terminal accounting, and skip failure-cleanup transactions after successful
|
|
304
|
+
resumes. Clarify malformed-settings behavior and unresolved-launch refusals.
|
|
305
|
+
|
|
306
|
+
- Refuse launches/resumes on malformed, unreadable or non-object shared squire
|
|
307
|
+
settings instead of silently losing configured cap limits. Deliberately
|
|
308
|
+
update window-placement/worktree-setting tests that previously allowed
|
|
309
|
+
inherited/cwd launches with an unreadable settings file; readable unrelated
|
|
310
|
+
creation settings still do not affect those launches.
|
|
311
|
+
|
|
312
|
+
- Preserve default leaf task guidance and takeover wording; only effective
|
|
313
|
+
coordinators receive child-first reporting instructions, including after a
|
|
314
|
+
current grant change. Refuse unhealthy durable child-task storage before
|
|
315
|
+
launch/resume effects rather than reporting failure after a child starts.
|
|
316
|
+
A task-wording lookup failure uses the original leaf wording before ownership
|
|
317
|
+
is recorded, so invalid depth configuration cannot strand an unprompted task;
|
|
318
|
+
launch admission still refuses invalid configuration.
|
|
319
|
+
|
|
320
|
+
- Persist owed delegate task answers and frozen reply retries across reload,
|
|
321
|
+
restart, resume and same-session manual reopening. Bounded startup retries
|
|
322
|
+
tolerate delayed mail initialization; remaining reply write failures are
|
|
323
|
+
visible and block auto-exit. Stops hold tasks through failed runs; successful
|
|
324
|
+
recovery, final failure, fallback and no-answer wording are preserved.
|
|
325
|
+
Updated `test/auto-exit.test.ts` for consumer-owned reply/exit behavior and
|
|
326
|
+
added real-provider task-reply and correlation regression coverage.
|
|
327
|
+
- Correlate every request id in a batched reply and suppress duplicate final
|
|
328
|
+
results even when a transport retry writes a fresh reply envelope.
|
|
329
|
+
|
|
330
|
+
### Changed
|
|
331
|
+
|
|
332
|
+
- Default companion placement now groups delegate windows by the owning root
|
|
333
|
+
project's main-checkout basename (or root working-directory basename outside
|
|
334
|
+
Git), using `<project>-delegate-session`. Roots, same-named projects and
|
|
335
|
+
normalization collisions intentionally share managed companions without
|
|
336
|
+
sharing delegation ownership. Unmarked sessions are left untouched; numbered
|
|
337
|
+
alternatives are reused, including across parallel launches. Git inspection
|
|
338
|
+
failures report a basename fallback notice. Launch and resume use the root's
|
|
339
|
+
project even for cross-project tasks; `current` placement and delegate window
|
|
340
|
+
names are unchanged. Existing companions and live windows are not migrated.
|
|
341
|
+
Updated the tmux, window-placement, tools, navigator, delegate-render,
|
|
342
|
+
workspace, and worktree ticket 04/05 tests for the deliberate placement
|
|
343
|
+
behavior change; added project-companion and real-tmux regression coverage.
|
|
344
|
+
- Broken `.git` pointers now report Git state as unknown rather than as a
|
|
345
|
+
confirmed non-Git directory. This shared Git detection applies to workspace
|
|
346
|
+
records, status, snapshots and worktree-source errors, as well as companion
|
|
347
|
+
placement fallback notices.
|
|
348
|
+
|
|
9
349
|
## [0.15.0] - 2026-10-30
|
|
10
350
|
|
|
11
351
|
### Breaking
|
|
@@ -658,7 +998,9 @@ author's dotfiles; the changes below are against that copy.
|
|
|
658
998
|
|
|
659
999
|
- The published file list includes `child.ts`, which `index.ts` imports.
|
|
660
1000
|
|
|
661
|
-
[Unreleased]: https://github.com/gvanderclay/pi-squire/compare/v0.
|
|
1001
|
+
[Unreleased]: https://github.com/gvanderclay/pi-squire/compare/v0.17.0...HEAD
|
|
1002
|
+
[0.17.0]: https://github.com/gvanderclay/pi-squire/compare/v0.16.0...v0.17.0
|
|
1003
|
+
[0.16.0]: https://github.com/gvanderclay/pi-squire/compare/v0.15.0...v0.16.0
|
|
662
1004
|
[0.15.0]: https://github.com/gvanderclay/pi-squire/compare/v0.14.0...v0.15.0
|
|
663
1005
|
[0.14.0]: https://github.com/gvanderclay/pi-squire/compare/v0.13.1...v0.14.0
|
|
664
1006
|
[0.13.1]: https://github.com/gvanderclay/pi-squire/compare/v0.13.0...v0.13.1
|