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.
Files changed (61) hide show
  1. package/CHANGELOG.md +343 -1
  2. package/README.md +931 -118
  3. package/package.json +2 -1
  4. package/src/agents.ts +73 -43
  5. package/src/child-tasks.ts +221 -0
  6. package/src/child.ts +35 -41
  7. package/src/completion-holds.ts +104 -0
  8. package/src/dashboard.ts +144 -0
  9. package/src/git.ts +6 -1
  10. package/src/identity.ts +152 -0
  11. package/src/index.ts +342 -56
  12. package/src/local-state.ts +21 -0
  13. package/src/navigator-view.ts +186 -0
  14. package/src/navigator.ts +152 -107
  15. package/src/poll.ts +1 -0
  16. package/src/render.ts +4 -1
  17. package/src/result-close.ts +37 -0
  18. package/src/result-restore.ts +95 -0
  19. package/src/result-types.ts +29 -1
  20. package/src/results-presentation.ts +47 -0
  21. package/src/results.ts +174 -108
  22. package/src/resume-checks.ts +14 -2
  23. package/src/resume-picker.ts +9 -2
  24. package/src/resume.ts +62 -13
  25. package/src/session-owner.ts +279 -0
  26. package/src/task-replies.ts +247 -0
  27. package/src/task-settlement.ts +81 -0
  28. package/src/task-store.ts +26 -0
  29. package/src/tmux.ts +134 -54
  30. package/src/tool-bundles.ts +84 -0
  31. package/src/tool-names.ts +29 -0
  32. package/src/tracking.ts +72 -65
  33. package/src/tree-close.ts +236 -0
  34. package/src/tree-fence.ts +51 -0
  35. package/src/tree-lock.ts +77 -0
  36. package/src/tree-notice.ts +124 -0
  37. package/src/tree-registry.ts +365 -0
  38. package/src/tree-settings.ts +31 -0
  39. package/src/tree-types.ts +32 -0
  40. package/src/tree-view.ts +246 -0
  41. package/src/trust-control.ts +214 -0
  42. package/src/trust-prompt.ts +163 -0
  43. package/src/trust-wire.ts +203 -0
  44. package/src/widget-activity-join.ts +24 -0
  45. package/src/widget-activity-runtime.ts +104 -0
  46. package/src/widget-activity.ts +104 -0
  47. package/src/widget-ancestors.ts +142 -0
  48. package/src/widget-current.ts +41 -0
  49. package/src/widget-data.ts +147 -0
  50. package/src/widget-focus.ts +133 -0
  51. package/src/widget-live-process.ts +31 -0
  52. package/src/widget-live.ts +356 -0
  53. package/src/widget-render.ts +181 -0
  54. package/src/widget-selection.ts +58 -0
  55. package/src/widget-settings.ts +29 -0
  56. package/src/widget-summary.ts +51 -0
  57. package/src/widget-title-file.ts +127 -0
  58. package/src/widget-title.ts +118 -0
  59. package/src/widget.ts +272 -0
  60. package/src/window-placement.ts +30 -5
  61. 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.15.0...HEAD
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