@devspecai/pi-plugin 0.0.0-stage → 0.10.3

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 (106) hide show
  1. package/CHANGELOG.md +899 -0
  2. package/LICENSE +21 -0
  3. package/README.md +103 -2
  4. package/extensions/.gitkeep +0 -0
  5. package/extensions/core/activation-recovery.ts +135 -0
  6. package/extensions/core/active-deliveries.ts +171 -0
  7. package/extensions/core/active-session-plans.ts +374 -0
  8. package/extensions/core/adapter-overlap.ts +247 -0
  9. package/extensions/core/assistant-speech.ts +44 -0
  10. package/extensions/core/attach-context.ts +25 -0
  11. package/extensions/core/attachment-limits.ts +20 -0
  12. package/extensions/core/attachments.ts +487 -0
  13. package/extensions/core/auth-store.ts +91 -0
  14. package/extensions/core/automation-run-retry.ts +31 -0
  15. package/extensions/core/background-journal.ts +85 -0
  16. package/extensions/core/background-observer.ts +279 -0
  17. package/extensions/core/bond-recovery.ts +65 -0
  18. package/extensions/core/bond-state.ts +80 -0
  19. package/extensions/core/clear-conversation.ts +53 -0
  20. package/extensions/core/client-versions.ts +56 -0
  21. package/extensions/core/client.ts +704 -0
  22. package/extensions/core/command-offer.ts +88 -0
  23. package/extensions/core/command-runner.ts +62 -0
  24. package/extensions/core/command-turn.ts +88 -0
  25. package/extensions/core/commit-ledger.ts +195 -0
  26. package/extensions/core/commit-stamp.ts +98 -0
  27. package/extensions/core/config.ts +63 -0
  28. package/extensions/core/connection-context.ts +28 -0
  29. package/extensions/core/context-budget.ts +175 -0
  30. package/extensions/core/control-result-outbox.ts +80 -0
  31. package/extensions/core/control.ts +156 -0
  32. package/extensions/core/ctx-guard.ts +33 -0
  33. package/extensions/core/debug.ts +136 -0
  34. package/extensions/core/delivery-queue.ts +92 -0
  35. package/extensions/core/dispatch.ts +108 -0
  36. package/extensions/core/duck.ts +128 -0
  37. package/extensions/core/git-observer.ts +382 -0
  38. package/extensions/core/github-identity.ts +26 -0
  39. package/extensions/core/implementation-contract.ts +773 -0
  40. package/extensions/core/instructions.ts +40 -0
  41. package/extensions/core/interaction-events.ts +834 -0
  42. package/extensions/core/json-schema.ts +16 -0
  43. package/extensions/core/local-activity.ts +34 -0
  44. package/extensions/core/mcp-config-guard.ts +117 -0
  45. package/extensions/core/model-catalog.ts +76 -0
  46. package/extensions/core/model-surface.ts +125 -0
  47. package/extensions/core/notice-reply.ts +215 -0
  48. package/extensions/core/owner-inject.ts +148 -0
  49. package/extensions/core/post-session-receipt.ts +70 -0
  50. package/extensions/core/preempt.ts +100 -0
  51. package/extensions/core/project-choice.ts +145 -0
  52. package/extensions/core/project-scope.ts +335 -0
  53. package/extensions/core/project-selection-ui.ts +202 -0
  54. package/extensions/core/provenance-refs.ts +158 -0
  55. package/extensions/core/push-channel.ts +281 -0
  56. package/extensions/core/question-receipt-lifecycle.ts +158 -0
  57. package/extensions/core/recall.ts +121 -0
  58. package/extensions/core/remote-payload.ts +1329 -0
  59. package/extensions/core/remote-session-arg.ts +24 -0
  60. package/extensions/core/repository-context.ts +35 -0
  61. package/extensions/core/request-chain.ts +1244 -0
  62. package/extensions/core/result-projection.ts +939 -0
  63. package/extensions/core/result.ts +100 -0
  64. package/extensions/core/review-context.ts +70 -0
  65. package/extensions/core/review-watch.ts +94 -0
  66. package/extensions/core/room-access.ts +12 -0
  67. package/extensions/core/room-context.ts +178 -0
  68. package/extensions/core/room-reader.ts +308 -0
  69. package/extensions/core/room-store.ts +381 -0
  70. package/extensions/core/room-sync.ts +79 -0
  71. package/extensions/core/room-tools.ts +86 -0
  72. package/extensions/core/room-unread.ts +173 -0
  73. package/extensions/core/session-events.ts +62 -0
  74. package/extensions/core/session-polls.ts +292 -0
  75. package/extensions/core/settings.ts +39 -0
  76. package/extensions/core/status-line.ts +432 -0
  77. package/extensions/core/still-to-discuss.ts +124 -0
  78. package/extensions/core/subagent-fleet.ts +238 -0
  79. package/extensions/core/system-notice.ts +227 -0
  80. package/extensions/core/telemetry.ts +177 -0
  81. package/extensions/core/tool-selection.ts +72 -0
  82. package/extensions/core/trail-events.ts +247 -0
  83. package/extensions/core/trail-projection.ts +373 -0
  84. package/extensions/core/trail.ts +465 -0
  85. package/extensions/core/turn-lifecycle.ts +472 -0
  86. package/extensions/core/version-mismatch.ts +165 -0
  87. package/extensions/core/work-prompt.ts +44 -0
  88. package/extensions/core/work-state.ts +179 -0
  89. package/extensions/devspec-adapter-guard.ts +106 -0
  90. package/extensions/devspec-auth.ts +191 -0
  91. package/extensions/devspec-brand.ts +140 -0
  92. package/extensions/devspec-commit-ledger.ts +477 -0
  93. package/extensions/devspec-context.ts +146 -0
  94. package/extensions/devspec-memory.ts +136 -0
  95. package/extensions/devspec-provenance-assistance.ts +233 -0
  96. package/extensions/devspec-remote.ts +5152 -0
  97. package/extensions/devspec-tools.ts +552 -0
  98. package/extensions/devspec-work.ts +244 -0
  99. package/extensions/generated/README.md +18 -0
  100. package/extensions/generated/mcp-catalog.ts +15811 -0
  101. package/package.json +71 -4
  102. package/prompts/.gitkeep +0 -0
  103. package/runtime/commit-stamp.mjs +279 -0
  104. package/runtime/git-observer-shim.mjs +390 -0
  105. package/skills/.gitkeep +0 -0
  106. package/themes/.gitkeep +0 -0
package/CHANGELOG.md ADDED
@@ -0,0 +1,899 @@
1
+ # Changelog
2
+
3
+ ## 0.10.3 - 2026-10-27
4
+
5
+ - Scoped the published npm package under `@devspecai/pi-plugin` (matching the `DevSpecAI` organization) and updated the release workflow to support npm staged publishing (`npm stage publish --access public`).
6
+ - Updated `README.md` with the primary one-line npm install command (`pi install npm:@devspecai/pi-plugin`) and GitHub fallback.
7
+
8
+ ## 0.10.2 - 2026-10-27
9
+
10
+ - Published package hygiene: `package.json` now declares an explicit `files` allowlist (`extensions`, `runtime`, `skills`, `prompts`, `themes`, `README.md`, `CHANGELOG.md`, `LICENSE`) and public `publishConfig` so `npm pack` ships only the runtime extension files and never bundles tests, helper scripts, workflow definitions, or local `.pi` state.
11
+ - Added the MIT `LICENSE` file and a tag-triggered GitHub Actions release workflow (`.github/workflows/release.yml`) that verifies the tag matches `package.json`, runs the full check and security audit suite, and publishes `@devspec/pi-plugin` to npm.
12
+
13
+ ## 0.10.1 - 2026-10-27
14
+
15
+ - The tool catalogue is regenerated against DevSpec's current tools. Your agent is no longer asked how a commit's task tag came about, and the commit fields of recording work and linking a commit now say to leave the commit out: DevSpec picks it from what it saw, and naming one by hand is the fallback. Update with `pi update --extensions`, then restart Pi.
16
+
17
+ ## 0.10.0 - 2026-10-27
18
+
19
+ - Full commit tracking now works on native Windows too. When Pi runs in Git Bash, which comes with Git for Windows and is Pi's default shell there, it sees every commit the agent makes, reports it to DevSpec, and adds the claimed task's tag to it, just as on macOS and Linux. Paths with spaces and both Windows and Unix-style paths work. A Windows job in Pi's own test runs proves this on every change.
20
+ - Fixed: on macOS and Linux, when the temporary folder had a long path, Pi stopped seeing the agent's commits without saying so. It now sees them wherever the temporary folder is.
21
+ - Update with `pi update --extensions`, then restart Pi.
22
+
23
+ ## 0.9.1 - 2026-10-27
24
+
25
+ - The README now says which setups get full commit tracking: macOS, Linux, or Windows through WSL. On native Windows, Pi does not see the agent's commits yet, so the agent adds the task tag to its commit messages itself and DevSpec links the commits to their tasks later.
26
+ - Where Pi cannot tag commits itself, on native Windows or before Pi has connected to DevSpec, it now tells the agent to write the task tag in every commit message, instead of saying Pi adds it. Update with `pi update --extensions`, then restart Pi.
27
+
28
+ ## 0.9.0 - 2026-10-27
29
+
30
+ - When your agent has exactly one DevSpec task claimed, Pi now adds that task's tag to the agent's commit messages itself. The tag goes at the end of the first line, so the rest of the message, including a `Co-Authored-By:` line, is kept as written. This works for messages given with `-m`, multi-line messages written with a heredoc, and messages read from a file, whose file is never changed.
31
+ - Pi tags only commits in a repository that belongs to the task's project, either by its remote or by its project pin. It never replaces a tag that is already there, and it leaves amended, fixup, squash and reused-message commits alone. Commits in other repositories, such as test fixtures, are not touched.
32
+ - After each commit, Pi tells the agent whether it added the tag. When several tasks are claimed, Pi does not guess: it tells the agent to write the right tag itself. Pi never blocks a commit.
33
+ - Update with `pi update --extensions`, then restart Pi.
34
+
35
+ ## 0.8.10 - 2026-10-27
36
+
37
+ - Your agent no longer copies a commit id when it records finished work. DevSpec uses the commit Pi saw it make, and the agent names a commit only when DevSpec says it found none, copying the id from Git rather than from memory.
38
+ - Pi keeps working when DevSpec adds to its rules for linking commits, and shows the agent the new rules exactly as DevSpec sends them. Update with `pi update --extensions`, then restart Pi.
39
+
40
+ ## 0.8.9 - 2026-10-27
41
+
42
+ - When DevSpec sends Pi a notice about its own work while you are driving it from a DevSpec room, such as a confirmed finding or the outcome of a change, Pi's answer now appears in that room, marked as a reply to the DevSpec notice rather than to a person. It is your agent's final message from handling the notice, written to you briefly. It does not start, finish or interrupt any request you sent, and it does not change whether the agent shows as Working. When Pi is not in a room, the answer stays in the terminal as before.
43
+ - If DevSpec does not accept that reply, Pi says so in the terminal with DevSpec's reason instead of dropping it.
44
+ - Handling a notice no longer shows a false "assistant speech storage not confirmed" warning in the terminal.
45
+ - Pi's local copy of the room keeps which DevSpec notice a reply answers, with the notice's summary and records.
46
+ - The tool catalogue is regenerated against DevSpec's current tools. Update with `pi update --extensions`, then restart Pi.
47
+ - The README and code comments use DevSpec's new settings page names: the personal settings page where you create or reveal your token is now **Agent setup**, and the project settings page for agent execution rules is now **Agent rules**. Pi's login messages link that page by URL and are unchanged.
48
+
49
+ ## 0.8.8 - 2026-10-26
50
+
51
+ - Pi now shows its model everything DevSpec says back after a change: fields that were dropped before — what was not saved, warnings, what to do next, why a task is not done yet, companion-link errors, whether a sign-off counted — now arrive, and any field DevSpec adds later arrives without a Pi update. Only empty fields and values identical to what was just sent are left out, and the reply says which.
52
+ - Lists show every result DevSpec returned, help results arrive whole, and a result Pi does not recognise is shown in full instead of cut to a fixed size.
53
+ - Notices about the agent's own work (findings, outcomes of changes, rulings and requests to confirm, and write-quality corrections) are now handled the way each notice says, within what it allows, rather than only passed on.
54
+ - Guidance now matches the current rules: work waiting for an OK stays off the tracking branch until it has the OK, the agent reports where a task landed instead of always saying "implemented", and the edit reminder no longer suggests a thin task that DevSpec would refuse.
55
+ - Automatic memory recall brings in only agreed memories, says that the ranking is not a judgement of relevance, keeps each memory's state, delivery status and companions, and searches with the whole prompt.
56
+ - A notice from DevSpec with a long link or label is no longer rejected as unreadable.
57
+
58
+ ## 0.8.7 - 2026-10-25
59
+
60
+ - Updated the README with step-by-step installation, sign-in, project selection, and command reference matching the in-app setup flow, and removed internal engineering notes from the published repository tree.
61
+
62
+ ## 0.8.6 - 2026-10-25
63
+
64
+ - Updated task creation and editing guidance so task `intent` records synthesized rationale rather than conversational go-ahead quotes.
65
+
66
+ ## 0.8.5 - 2026-10-25
67
+
68
+ - Your agent now sees when a task it worked on is not done yet because it is still on its way: waiting to merge, waiting for a deploy to carry it, or waiting for a database change to be applied. Task lists, and the replies after recording work, signing off or editing a task, show what DevSpec says the task waits for, such as which deployment has not carried it yet, a deploy that failed, or which database change has not been applied, so the agent no longer reports such a task as done. The tool catalogue is regenerated to match, and it puts back the guidance on what belongs in a task's description, acceptance criteria and instructions for the agent, which an earlier update had lost. Update with `pi update --extensions`, then restart Pi.
69
+
70
+ ## 0.8.3 - 2026-10-23
71
+
72
+ - Security: updated two libraries the plugin depends on (zod and body-parser) to versions that fix newly published high-severity advisories. Nothing changes in how the plugin behaves. Update with `pi update --extensions`, then restart Pi.
73
+
74
+ ## 0.8.2 - 2026-10-23
75
+
76
+ - Your agent is told that a task with commits only counts as done once those commits are merged into the repository's tracking branch. Until then it stays implemented, and DevSpec says it is waiting to merge. Signing off a task whose work hasn't merged yet records the sign-off, and the task finishes by itself when the merge lands. The tool catalogue is regenerated to match. Update with `pi update --extensions`, then restart Pi.
77
+
78
+ ## 0.8.1 - 2026-10-23
79
+
80
+ - Your agent no longer writes plans, handoffs, status summaries or single decisions as DevSpec documents. A document is a standing guide, reference or runbook; a plan becomes a brief with tasks, a handoff or status goes on the task, and a decision is a memory. The tool catalogue is regenerated to match. Update with `pi update --extensions`, then restart Pi.
81
+ - Fixed: posting the live work trail of an automation run could fail with an error when the run had no connection to post through. It is now skipped, as any post without a connection is.
82
+
83
+ ## 0.8.0 - 2026-10-22
84
+
85
+ - Native tools, argument/result readers and work projections use Tasks, with Feature, Improvement, Bug, Investigation and General categories.
86
+ - Regenerated the native tool catalogue to match DevSpec's Tasks tools and guidance.
87
+ - Versioned process-local advisory work and delivery caches for the updated task fields while preserving durable room history, speech delivery state and credentials. Update with `pi update --extensions`, then restart Pi.
88
+
89
+ ## 0.7.5 - 2026-10-17
90
+
91
+ - Pi makes any decision you could make in DevSpec's Review for you as soon as your request is clear: accepting or declining a proposed change, answering on work that would undo a decision, saying a flagged record is still accurate, or settling a duplicate. It warns you once, up front, only if you seem unaware of a significant consequence, never asks you to confirm again, and tells you what happened and what you can do next. Update with `pi update --extensions`, then restart Pi.
92
+
93
+ ## 0.7.4 - 2026-10-17
94
+
95
+ - Your agent can now accept or decline a change waiting in Review, under Proposed changes, when you ask it to and you could decide it yourself there. It applies exactly the version you saw, and tells you who can decide it when you can't.
96
+ - When your request is clear, your agent no longer asks you to confirm it again before changing team rules, your own instructions or an automation; it warns you once only when you don't seem aware of a significant consequence.
97
+ - The catalogue is regenerated against DevSpec's current tools. Update with `pi update --extensions`, then restart Pi.
98
+
99
+ ## 0.7.3 - 2026-10-17
100
+
101
+ - Fixed: what DevSpec finds about your agent's own work now reaches the agent again: that a change would undo someone's decision, duplicates other work or breaks a requirement, and what happened to a change that was waiting on someone. Until now Pi told DevSpec it couldn't read these, so they went only to your notifications and the Agents page showed the agent as "Not receiving findings". Update with `pi update --extensions`, then restart Pi.
102
+
103
+ ## 0.7.2 - 2026-10-17
104
+
105
+ - The catalogue is regenerated against DevSpec's current tools: the remote-control poll now describes the newer findings channel, and what DevSpec tells your person when an agent stops listening. Update with `pi update --extensions`, then restart Pi.
106
+
107
+ ## 0.7.1 - 2026-10-16
108
+
109
+ - When your agent can tell from the conversation that someone else agrees to an answer on a decision, it can now ask them to confirm it themselves. Nothing is recorded until they do: the request waits for them in Review and their notifications, and they can confirm or decline it there with no agent running. If your agent is still connected, it is told how it was decided.
110
+ - When DevSpec can't tell who asked for an answer or a sign-off, it is saved for you to confirm in Review instead of being refused.
111
+ - The catalogue is regenerated against DevSpec's current tools. Update with `pi update --extensions`, then restart Pi.
112
+
113
+ ## 0.7.0 - 2026-10-16
114
+
115
+ - Pi now tells DevSpec which plugin and version it is on every request. DevSpec uses this to know your agent has the plugin, which remote control, taking part in sessions and automations need.
116
+ - When you connect in a project whose repositories are on GitHub and your GitHub account isn't linked yet, Pi shows you the link. Linking is one click through DevSpec's GitHub App: GitHub confirms who you are, and DevSpec keeps no access to your account.
117
+ - Work that waits for someone's OK, and experiments, now say so wherever the agent sees them, including in the confirmation after an edit and in lists, so it keeps that work on its own branch.
118
+ - A change that is waiting for review now says who it waits on, as DevSpec reports it, instead of always saying a maintainer.
119
+ - The tags DevSpec adds to a new action item now reach the agent, so it can correct them.
120
+ - Requirements are labelled as requirements in search results.
121
+ - Findings and the outcome of an edit that DevSpec sends the agent are introduced for what they are, with each record shown whole. A notice this version can't read no longer stops the others arriving.
122
+ - While a project is paused, the notice DevSpec adds to each result reaches the agent in full, and the result itself still shows normally.
123
+ - If DevSpec couldn't be told whose request a change served, the agent is now told, so it can let that person know.
124
+ - `/devspec.conflicts` is now `/devspec.review`.
125
+ - The agent's guidance now follows how DevSpec records decisions: only when a real choice was made for a reason that matters beyond this change, and only once you've said it was deliberate.
126
+ - The catalogue is regenerated against DevSpec's current tools. Update with `pi update --extensions`, then restart Pi.
127
+
128
+ ## 0.6.9 - 2026-10-16
129
+
130
+ - Creating an action item now needs its intent: why the work matters, the problem it solves and the outcome wanted. DevSpec uses it to check later work against, so a create without one is refused and nothing is created.
131
+ - The catalogue is regenerated against DevSpec's current tools. Update with `pi update --extensions`, then restart Pi.
132
+
133
+ ## 0.6.8 - 2026-10-16
134
+
135
+ - Work that would undo someone else's decision now waits for an OK instead of being held. You can still claim it and build it on its own branch; it doesn't merge or finish until someone who can give the OK answers: go ahead, no (with a reason), or "this doesn't undo my decision". If it reached the tracking branch anyway, they choose to keep it or undo it.
136
+ - Experiments are the same: try something on its own branch, then ask for it to land.
137
+ - Review can be filtered by where a question stands: waiting for an OK, answered no, landed without its OK, being put back, or settled.
138
+ - The catalogue is regenerated against DevSpec's current tools. Update with `pi update --extensions`, then restart Pi.
139
+
140
+ ## 0.6.7 - 2026-10-16
141
+
142
+ - Creating or editing an action item no longer shows the agent a list of possibly related items to sort through before it can go on. DevSpec now checks for duplicates itself after the write and only tells anyone about a confirmed one.
143
+ - The catalogue is regenerated against DevSpec's current tools. Update with `pi update --extensions`, then restart Pi.
144
+
145
+ ## 0.6.6 - 2026-10-15
146
+
147
+ - When you ask an agent to accept, decline or otherwise settle a question about a protected decision, it acts as you, with your authority, on the request you gave it. A message someone else wrote can no longer be used to act in their name, and a settlement two people agreed is recorded for one of them, from the conversation where they agreed.
148
+ - Pi can now preview and resolve duplicate records, and record that two records are not duplicates.
149
+ - Review can be filtered by what waits on you, what you raised, what involves you or others, what you can resolve, its state, a person and a record type.
150
+ - Action items can be created as experiments on their own branch.
151
+ - The catalogue is regenerated against DevSpec's current tools. Update with `pi update --extensions`, then restart Pi.
152
+
153
+ ## 0.6.4 - 2026-10-13
154
+
155
+ - DevSpec sign-in now reads your name from the verification response's identity fields instead of mistaking a JSON fragment for your name. If no name is available, sign-in and status still clearly confirm the connection without one.
156
+ - Existing login commands, token storage and normal terminal output are unchanged. Reload or restart Pi after updating to load the fix.
157
+
158
+ ## 0.6.3 - 2026-10-12
159
+
160
+ - Editing someone else's decision, convention or ADR now follows whose record it is. Your own records, descriptive ones, and records owned by someone at your role or below change straight away, and the owner is told. A record owned by someone with more authority keeps its current wording, and your change waits beside it as a pending version, naming who it waits on.
161
+ - A decision can name the action item that delivers it. It then reads "Decided, not yet implemented" until that item is implemented.
162
+ - Reading a memory says how to open any earlier version in full and shows changes still waiting for approval separately from the agreed wording.
163
+ - The catalogue is regenerated against DevSpec's current tools. Update with `pi update --extensions`, then restart Pi.
164
+
165
+ ## 0.6.2 - 2026-10-12
166
+
167
+ - Refresh the native wire catalogue for record-owned intent questions and explicit adoption/co-owner choices. Keep ownership receipts lossless, including the actor, question revision and scope.
168
+ - Review can filter action-item intent alongside memories and documents; reversal questions are not accuracy flags. Authority remains with the served contract. Reload existing sessions to load the new native tools.
169
+
170
+ ## 0.6.1 - 2026-10-11
171
+
172
+ - Pi's DevSpec tools are updated to match DevSpec. When DevSpec can't tell whose request a change serves, it no longer turns the change away. A record of work is saved with the requester unknown, and anything else waits for someone to confirm it.
173
+
174
+ ## 0.6.0
175
+
176
+ - Work Pi does after something it started finishes (a background job, a subagent, or the answer to a question it asked) is now credited to whoever asked for that work in the first place, not to whoever spoke to Pi most recently.
177
+ - When two people's requests reach the same Pi, what it records for each is kept apart. If one stretch of work carries requests from more than one person (or from you at the terminal and you in a room), Pi names which request a DevSpec change, or background work it starts, serves before making it, rather than guessing.
178
+ - Only what you type at Pi's terminal is shown in the room as your prompt and counted as your request. Automation runs, finished background jobs and DevSpec's own notices no longer are.
179
+ - Work Pi does for an automation run is recorded as that automation's, even while someone's message to Pi is still open.
180
+ - Work Pi starts on its own, with nobody's request behind it, is recorded as Pi's own initiative only when Pi knows that for certain; otherwise DevSpec works out who asked, as before.
181
+ - The catalogue is regenerated against DevSpec's current tools.
182
+ - Update with `pi update --extensions`, then restart Pi.
183
+
184
+ ## 0.5.22
185
+
186
+ - DevSpec no longer checks action items for going out of date, so Pi no longer offers filtering items by that flag, and the review queue lists only memories and documents.
187
+ - The catalogue is regenerated against DevSpec's current tools.
188
+ - Update with `pi update --extensions`, then restart Pi.
189
+
190
+ ## 0.5.21
191
+
192
+ - DevSpec's trial that asked the agent to judge which existing items its own change affected has ended. Pi no longer offers its two tools or keeps its request in what the model sees.
193
+ - The catalogue is regenerated against DevSpec's current tools.
194
+ - Update with `pi update --extensions`, then restart Pi.
195
+
196
+ ## 0.5.20
197
+
198
+ - Recording that one action item replaces another is now its own action, `supersede_action_item`: name the replacing item and the one it replaces. `preview_supersession` shows first what would close and when, and whether it would be recorded or wait for a Maintainer. One that waits shows as proposed in the session's activity. A link between two items no longer retires either.
199
+ - DevSpec no longer checks pairs of action items, memories or documents for conflicts, so Pi no longer offers rulings on conflicting items or on an item that contradicts a decision, and a claim never waits on such a check. The review queue holds out-of-date flags and proposals; rule a memory or document still accurate with `resolve_memory_flag` or `resolve_resource_flag`.
200
+ - Recording a memory or document no longer stops on a close match, so `confirm_new` is gone.
201
+ - Update with `pi update --extensions`, then restart Pi.
202
+
203
+ ## 0.5.19
204
+
205
+ - New: you can clear this Pi's conversation from DevSpec. Use Clear conversation in its agent controls, or type `/clear` to it. Pi starts afresh and stays connected to the same DevSpec session; the old conversation stays in Pi's history, reachable with `/tree`. If Pi is in the middle of a reply, it clears when the reply ends.
206
+ - After a clear, or moving to another branch with `/tree`, Pi is given its DevSpec instructions, project facts and room orientation again on its next turn.
207
+ - Pi now tells DevSpec which controls it carries out, so DevSpec offers Clear only to a Pi that has it.
208
+ - The catalogue is regenerated against DevSpec's current agent tools, which know the clear control.
209
+ - Update with `pi update --extensions`, then restart Pi.
210
+
211
+ ## 0.5.18
212
+
213
+ - The catalogue is regenerated against DevSpec's current automation tools. Creating or changing an automation now takes `run_for`: `project` when one run covers everyone (a failed deploy, a merged branch), or `each_person` when everyone runs it for themselves on their own agents and their own schedule (cleaning up their machine, updating their tools). `switched_on` applies to automations for the project only.
214
+ - Update with `pi update --extensions`, then restart Pi.
215
+
216
+ ## 0.5.17
217
+
218
+ - The catalogue is regenerated against DevSpec's current automation tools: they now say that Contributors and Maintainers run automations, and that a Contributor who didn't create one can still run it but not change it.
219
+ - Update with `pi update --extensions`, then restart Pi.
220
+
221
+ ## 0.5.16
222
+
223
+ - The catalogue is regenerated against DevSpec's current automation tools. Every automation now belongs to the project, so creating one no longer takes `visibility`. Creating one takes `switched_on`: whether it can go to your agents when it starts by itself (on unless you say otherwise), and changing one takes `runs_by_itself` to pause or resume everything that starts it by itself, in place of `enabled`. Only an automation's creator or a Maintainer can change it.
224
+ - Update with `pi update --extensions`, then restart Pi.
225
+
226
+ ## 0.5.15
227
+
228
+ - The catalogue is regenerated against DevSpec's current tools. The searches (action items, memories, documents, sessions, Still to Discuss, the review queue and tool search) now accept `work_claim_ref`: while you hold several claims and no request is open, name the claim a search is for, and its cost is recorded against whoever asked for that work rather than against you.
229
+ - Reporting an automation run now asks for a short plain-English summary, with the technical detail in the output.
230
+ - Update with `pi update --extensions`, then restart Pi.
231
+
232
+ ## 0.5.14
233
+
234
+ - Pi's MCP client library (`@modelcontextprotocol/sdk`) is updated to 1.32.1, past the versions that dependency scanners report for advisory GHSA-6qxp-vccf-f47h. Pi was not exposed to it: it signs in with its own DevSpec token and never uses the library's sign-in flow that the advisory is about. `proxy-addr`, which the same library brings in, moves to 2.0.8 for the same reason.
235
+ - Update with `pi update --extensions`, then restart Pi.
236
+
237
+ ## 0.5.13
238
+
239
+ - The catalogue is regenerated against DevSpec's current tools. Editing an action item, splitting one out of its brief, reopening one, ruling on a flagged pair or a decision flag, writing team rules and creating, changing or deleting automations now accept `work_claim_ref`: while you hold several claims and no request is open, name the claim the change serves instead of being refused. Previewing a ruling on a flagged pair takes the same references, so it shows the ruling as it will be judged.
240
+ - Pi already sends your project and connection with each call. DevSpec now uses them only on the tools that declare them, which are the tools where they change the result.
241
+ - Update with `pi update --extensions`, then restart Pi.
242
+
243
+ ## 0.5.12
244
+
245
+ - Changing model in DevSpec now returns the complete list this Pi can use, including models previously missing beyond the first 400.
246
+ - Agent control results are saved in Pi's session journal and retried when delivery fails, without executing the control again. Acknowledging a result no longer consumes queued messages or notices. Delivery failures are reported instead of disappearing silently.
247
+ - Requires the matching DevSpec server update. Update with `pi update --extensions`, then restart Pi.
248
+
249
+ ## 0.5.11
250
+
251
+ - Tool search now compares the same catalogue as DevSpec, so keeping internal tools private no longer forces a keyword-only fallback. Internal connection and posting tools remain unavailable to the model. When meaning-based search cannot run, Pi now distinguishes an extension/server version difference, an index being refreshed, unavailable ranking, an unreadable response and a connection failure. Known tools still work directly.
252
+ - Update with `pi update --extensions`, then restart Pi.
253
+
254
+ ## 0.5.10
255
+
256
+ - The catalogue is regenerated against DevSpec's current tools. One parameter description is shorter: `work_claim_ref` now says that when you leave it out, DevSpec works out who asked from your connection and refuses when it cannot tell. Such a refusal now names only what the tool you called accepts.
257
+ - Update with `pi update --extensions`, then restart Pi.
258
+
259
+ ## 0.5.9
260
+
261
+ - When Pi records finished work or a decision in DevSpec, DevSpec may ask which existing action items that change affects. Pi now shows that request whole, offers the two tools that answer it (`assess_change_impact`, then `record_change_impact`), shows every item DevSpec puts forward, and shows exactly what to fix if an answer is refused. Nothing in your project changes because of the answers. The catalogue is regenerated against DevSpec's current tools.
262
+ - Update with `pi update --extensions`, then restart Pi.
263
+
264
+ ## 0.5.8
265
+
266
+ - Searching a project's database schema can now be narrowed to one database: give `get_database_schema` a `query` and a `database`, and it searches only that database. A database the project doesn't have is refused, with the list of the ones it has. When a project has several databases, each result names the one it came from, and every result says whether it was read from the database itself or declared in your code (a MongoDB collection comes from your models). The catalogue is regenerated against DevSpec's current tools.
267
+ - Update with `pi update --extensions`, then restart Pi.
268
+
269
+ ## 0.5.7
270
+
271
+ - Pi can keep working in DevSpec between your commands while it holds several pieces of work at once: it can answer in its room, claim the next item it reserved, and record notes and criterion checks on an item it just finished. DevSpec used to refuse those because it could not tell who had asked. The tools that note, link or check an item now also take the claim or command they are for, for the rare case DevSpec cannot work that out. The catalogue is regenerated against DevSpec's current tools.
272
+ - Update with `pi update --extensions`, then restart Pi.
273
+
274
+ ## 0.5.6
275
+
276
+ - A note Pi leaves on a DevSpec action item now says which Pi wrote it, not only whose account, so two of your agents working the same item are told apart on the item. Pi already sends its connection with every note; DevSpec now records it. The catalogue is regenerated against DevSpec's current tools.
277
+ - Update with `pi update --extensions`, then restart Pi.
278
+
279
+ ## 0.5.5
280
+
281
+ - DevSpec memories now have four types: decision, convention, insight and risk. Recording or searching a memory offers those four, and how something is built is recorded as a decision. Open questions live in Still to Discuss, so the separate open-questions memory tool is gone. The catalogue is regenerated against DevSpec's current tools.
282
+ - Update with `pi update --extensions`, then restart Pi.
283
+
284
+ ## 0.5.4
285
+
286
+ - DevSpec's tool descriptions now match a few behaviours that changed on the server: giving a tool a room you can't open is refused rather than ignored, verifying an item tells you where it ended up, releasing an item nobody held says nothing changed, the project summary counts only the rooms you can open, and searching an automation's runs also finds its scheduled runs. A retired connection-check tool that nothing used is gone. The catalogue is regenerated against DevSpec's current tools.
287
+ - Update with `pi update --extensions`, then restart Pi.
288
+
289
+ ## 0.5.3
290
+
291
+ - DevSpec's tool descriptions now say what each tool actually does, after an independent review of every tool: wrong claims are corrected, each optional setting says what happens when it is left out, and rules about who may do what point to DevSpec's served contract instead of being repeated. Clearing an item's assignees or taking it out of its brief with `null` now works as the description always said. The catalogue is regenerated against DevSpec's current tools.
292
+ - Update with `pi update --extensions`, then restart Pi.
293
+
294
+ ## 0.5.2
295
+
296
+ - Pi now knows which room messages it has actually read. Before, the room note Pi saw at the start of each task moved its "read up to here" mark even when Pi never opened the messages, so things people said while Pi was busy could slip past it. Now a message only counts as read once Pi has read it, and it stays unread until then.
297
+ - When Pi starts a task, it sees how many room messages it has not read, how many have changed since it read them, how many are addressed to it, and who sent them. These are counts only, never the messages themselves. When Pi joins a room, everything already there starts unread.
298
+ - If new messages arrive while Pi is working, it is told at its next step, before it writes its reply, so it can read them first. It is told once for each new batch, and nothing is added when nothing new has arrived. Pi's own messages, join and leave lines, deleted messages and empty messages are never counted.
299
+ - `read_room_context` has a new `unread` view. It returns the unread messages in full, oldest first, and marks exactly those as read. When there are more than fit in one reply, it says how many are left and how to get the rest.
300
+ - Messages addressed to Pi still interrupt it exactly as before.
301
+ - Update with `pi update --extensions`, then restart Pi.
302
+
303
+ ## 0.5.1
304
+
305
+ - Ending Pi from DevSpec (End on the Agents page or in a session) now closes Pi in its terminal, straight away and even mid-task, so with many terminals open you no longer have to find the right one and quit it by hand. Any running work is stopped and Pi prints how to resume the conversation. Stopping it from the terminal, a detach, or a brief problem on DevSpec's side never closes Pi.
306
+
307
+ ## 0.5.0
308
+
309
+ - Pi keeps working when DevSpec is newer than this extension. DevSpec's rules for agents are read part by part: anything Pi does not recognise is ignored, and a part it cannot read is passed to the agent exactly as DevSpec sent it, with a note. Before, one changed detail anywhere in those rules made `/devspec.work` set them all aside and use Pi's short built-in rules, which is what had been happening since mid-September. Pi now reads the rules DevSpec serves today in full.
310
+ - When a DevSpec tool call fails because DevSpec has changed that tool (a new required input, different allowed values, or a tool that no longer exists), the error says so and tells the agent to ask you to update the extension. Ordinary mistakes in a call are reported as before.
311
+ - When DevSpec sends Pi a message it cannot read, Pi says so once, here and in the room, instead of retrying silently. It keeps checking, so the message is still acted on once Pi can read it. Room details Pi cannot read, such as polls or Still to Discuss, are reported once here too.
312
+ - Each of these notes says how to fix it: run `pi update --extensions`, then restart Pi.
313
+
314
+ ## 0.4.4
315
+
316
+ - Recent sessions can be narrowed to active or archived rooms, and the count covers just those. Three tool descriptions now say what the tools do: which rooms the recent list and Still to Discuss search leave out, and that a room id sent to Still to Discuss search is checked rather than ignored. The catalogue is regenerated against DevSpec's current tools.
317
+
318
+ ## 0.4.3
319
+
320
+ - DevSpec now works out for itself whether an agent's work was unattended, so Pi's tools no longer carry a setting for it, and the retired runner heartbeat is gone from Pi's catalogue. The catalogue is regenerated against DevSpec's current tools, including their rewritten descriptions.
321
+
322
+ ## 0.4.2
323
+
324
+ - Pi reads DevSpec's current implementation contract again. Since mid-September the server's contract carried two things this Pi did not recognise (the rule for queued review-flag rulings, and the Reviewed Contributor role's outcomes), so Pi set the whole contract aside and worked from its short built-in fallback. Both are now read, and both reach the model.
325
+ - A commit may name more than one DevSpec item: the contract now says one or more references, and Pi accepts exactly that shape (DevSpec contract 4.13.0).
326
+
327
+ ## 0.4.1
328
+
329
+ - Remove the three V1-removed tools from the result-projection lists as well. No behaviour change.
330
+
331
+ ## 0.4.0
332
+
333
+ - Each DevSpec tool now has one description, the same text every DevSpec host reads, and the rewrite brings back what a model needs before calling it: what the tool is for, where its neighbours take over, and what it changes. The tools removed for V1 are gone from Pi: `send_agent_message`, `control_connection` and `submit_plan_review`. So are inputs that did nothing, and inputs the server reads but never listed are now shown.
334
+ - Still to Discuss: searching and adding are now an explicit choice between this room and the whole project, with the whole project as the default. Pi still supplies the room when you choose it, but being in a room no longer narrows a project-wide search.
335
+ - `search_devspec_tools` pages: it takes `offset`, returns the page, and says where the next page starts when there are more matches, online or offline.
336
+ - A search that could only partly run, for example when one of its two document lookups failed, now says so instead of reading as an empty result.
337
+ - Pi's instructions say that @ and a person's name in a room reply notifies that person.
338
+ - Reload or restart Pi after updating to load the new catalogue.
339
+
340
+ ## 0.3.57
341
+
342
+ - A goal with more than 500 items is now readable to the end: `get_goals` with a goal id returns the items a page at a time, says how many there are, and gives the `items_offset` for the next page. Before, the list stopped at 500. A goal's progress that could not be read now shows as unknown rather than as 0 of 0.
343
+ - Refresh the generated server catalogue; reload/restart after updating to load the new `items_offset`/`items_limit` inputs and descriptions.
344
+
345
+ ## 0.3.56
346
+
347
+ - In a DevSpec room with more than 16 open polls, or polls with a lot of text, Pi was shown no polls at all. Pi now asks for the newer poll list, which always shows polls when the room has any. It shows the newest ones that fit, says how many there are in total, and, when some were left out, tells Pi to read them all with `manage_poll list`. Rooms with fewer polls look the same as before.
348
+ - Refresh the generated server catalogue for the new `poll_connection` input. Reload/restart after updating.
349
+
350
+ ## 0.3.55
351
+
352
+ - Memory, document and help searches, and tool search, now return results a page at a time with a way to read on: Pi names the offset for the next page, says when a count is a floor, and for document search gives one offset that continues both documents and artifacts. Before, these searches stopped at their page size with no way past it.
353
+ - Refresh the generated server catalogue; reload/restart after updating to load the new `offset` inputs and descriptions.
354
+
355
+ ## 0.3.54
356
+
357
+ - When DevSpec cannot reserve an item, Pi now sees which items were skipped and why, including the proposal to review when the item is still a suggestion. Before, it saw only "see skipped for why".
358
+ - A suggestion or edit saved for review keeps its result, revision and Review link, so Pi can tell the person where a Maintainer will accept it. Reload/restart after updating.
359
+
360
+ ## 0.3.53
361
+
362
+ - Action-item lists and search say when an item is only a suggestion awaiting review, or one a Maintainer declined, using the line the server sends. Agreed work is shown as before. Reload/restart after updating.
363
+
364
+ ## 0.3.52
365
+
366
+ - Memory tool guidance no longer advertises unfinished workflows. Optional evidence pagination remains compatible, and enabled server responses retain their complete reading guidance.
367
+ - Refresh the generated server catalogue; reload/restart after updating to load the new descriptions.
368
+
369
+ ## 0.3.51
370
+
371
+ - Full requirement reads expose the server's independent evidence pagination, preserving exact versions, observation dates, coverage and cautions. Failed evidence reads remain unavailable rather than empty or passed.
372
+ - Keep the full memory body and evidence through native result projection. Reload or restart after updating to load the additive `get_memory` inputs; requirement authoring remains disabled.
373
+
374
+ ## 0.3.50
375
+
376
+ - Target Pi 1.0 and Node.js 22.19 or later. Pi’s built-in MCP is the default for other services; DevSpec still needs only this package and sign-in.
377
+ - Keep Claude/shared MCP configuration untouched on fresh Pi. Detect native Pi duplicates separately from the optional MCP adapter, using the adapter’s public configuration API for its imports and overrides.
378
+ - Migrate recognized legacy adapter-only overrides out of Pi’s native `mcp.json`, with a private backup and refusal on conflicting, malformed or symlinked files. Native definitions retain their credentials and foreign servers remain available.
379
+ - Preserve old transcript recovery data under Pi 1.0’s current types. Update/reload Pi after installation; npm publication is a separate release step.
380
+
381
+ ## 0.3.49
382
+
383
+ - `/devspec.login`, `/devspec.status`, `/devspec.help` and the not-connected notices now link straight to DevSpec's Agents settings page for your token: https://app.devspec.ai/settings/agents (or the staging page when Pi points at staging). That page used to be Coding agents at `/settings/coding-agents`; the old address still redirects.
384
+ - Pi is now described as an agent rather than a coding agent in this package's README and npm description. Update and reload/restart Pi to pick up the new wording.
385
+
386
+ ## 0.3.48
387
+
388
+ - Leaving a commit unspecified no longer attaches the process's sole recent commit to unrelated work. The server's claim-scoped observations remain responsible for automatic selection.
389
+ - Short commit hints now reach the project-wide resolver unchanged instead of being expanded from one checkout or an arbitrary ledger match. Supported normalized hex hints retain their original bytes; malformed revision/shell syntax is still rejected.
390
+ - Explicit full objects can still carry corroborated message bytes. Added actual-Pi native-tool conformance for omitted, short and full hints after a real commit. Update and reload/restart to load the correction; existing erroneous records are not silently rewritten.
391
+
392
+ ## 0.3.47
393
+
394
+ - Queued commit observations no longer adopt a later login, server, or repository. Reports retain their original connection capability and endpoint; changed account or repository bindings are dropped rather than reassigned.
395
+ - Keep observation credentials host-side and expose only privacy-safe delivery counters in optional debug logs. Unsupported, offline and legacy unfrozen observations never block Git; ordinary server reconciliation remains available.
396
+ - Add actual-Pi scripted-provider conformance for root/amend/worktree commits and a connection change after Git runs. Reload/restart after updating; publishing source does not refresh a running process.
397
+
398
+ ## 0.3.46
399
+
400
+ - Let memory reads request older change-history pages on supporting servers, keeping the complete memory text and continuation details available to the agent.
401
+ - Update the bundled tool catalogue with optional history page parameters. Update and reload/restart Pi to load the new schema; existing reads remain compatible.
402
+
403
+ ## 0.3.45
404
+
405
+ - Keep established duplicate-MCP suppression quiet at startup. A visible notice appears only when the plugin newly writes the Pi-only override, not on later launches.
406
+ - Retain hidden agent context and on-demand help; explicitly tell the agent not to announce the explanation proactively. Suppression and shared-configuration boundaries are unchanged.
407
+ - Reload/restart after updating to load this correction.
408
+
409
+ ## 0.3.44
410
+
411
+ - Explain a detected duplicate DevSpec MCP entry on each interactive startup, including when its Pi-only override was saved previously. Other agents' settings and foreign MCP servers remain untouched.
412
+ - Give the agent a one-time session explanation even before sign-in, so it does not try to re-enable the duplicate or mistake suppression for proof of a healthy connection. No repeated per-turn notice or system-prefix rewrite.
413
+ - Clarify installation and troubleshooting in the README. Update and reload/restart Pi to load this version.
414
+
415
+ ## 0.3.43
416
+
417
+ - Remove the bundled DevSpec Launcher, its startup extension and login-time installation/pairing callback. Normal Pi authentication and automatic remote connection do not require the launcher.
418
+ - Remove launcher-specific commands, diagnostics and test setup. Document the independent optional app; no installed developer-machine helper or data is automatically removed.
419
+
420
+ ## 0.3.42
421
+
422
+ - Tool and parameter guidance is preserved in full, without sentence extraction or per-description character ceilings. Catalogue footprint is reported diagnostically; actual result and protocol limits remain enforced.
423
+ - Matching servers keep tool-search indexes current automatically through worker startup, request-driven repair and periodic reconciliation. Keyword fallback stays available until a complete matching index is ready; the bundled index is a warm cache, not a required manual generation step.
424
+ - Strengthened long-text, complete-catalogue and paired server/native projection checks. Reload or restart Pi after updating to load the new guidance.
425
+
426
+ ## 0.3.40
427
+
428
+ - Bundle launcher 0.3.1: fix Pi discovery under the desktop service's restricted PATH and avoid a second error tab for loopback failures. Reload the plugin to run the shared update check.
429
+
430
+ ## 0.3.39
431
+
432
+ - First session startup now runs the shared launcher's installation, OS-registration and readiness flow instead of only copying files. Setup failures do not stop Pi, and deliberately disabled setup stays disabled.
433
+ - Added `/devspec.launcher status`, `repair`, `enable`, `disable` and `uninstall`. Copy commands remain usable without the launcher. Update/reload the installed plugin to load the new lifecycle integration.
434
+
435
+ ## 0.3.38
436
+
437
+ - All safe tools available to the connection are now directly callable from startup, with authored guidance for choosing and maintaining work, memories and documents. Internal delivery tools remain private; session-only tools still require their connection context.
438
+ - Tool search is optional advice, not an unlocking step. Exact names stay local; intent queries use matching server-side hybrid search when available and explicitly fall back to local keyword search otherwise. Search never executes recommendations or changes the active tool set.
439
+ - Shared artifacts have positive capture and maintenance guidance. Related-document suggestions are labelled advisory rather than blocking gates. Existing write checks and authority outcomes remain intact.
440
+ - Update and reload/restart Pi to load the new surface. Older servers remain usable through the local fallback; semantic query usage follows the project's existing attributed search billing.
441
+
442
+ ## 0.3.37
443
+
444
+ - Session attachment and connection recovery preserve refreshed project/machine rules and explicit cleared values. Valid canonical command responses also refresh the rule snapshot, including after a web-initiated room move.
445
+ - Rule changes append immutable model-context snapshots rather than rewriting the system prompt prefix. Repository facts remain associated with the selected project and refresh on recovered registration. Reload or restart to load the update.
446
+
447
+ ## 0.3.36
448
+
449
+ - Agents receive the selected project's repository names, remote URLs and tracked/default branches on connection and project switching, without depending on the launch folder. Empty and unavailable repository information are distinct. Snapshots are factual model context, not cloning instructions, and do not rewrite earlier messages.
450
+ - Explicit project-summary reads preserve descriptions, all repositories, rules and other returned facts without fixed list or text caps. Security redactions and retired compatibility fields are named explicitly.
451
+ - Requires the server's additive repository-context response for automatic inventory. Older servers are reported as unavailable, not empty. Reload or restart Pi after updating; existing processes do not hot-load a repository merge.
452
+
453
+ ## 0.3.35
454
+
455
+ - The DevSpec row now uses normal foreground for DevSpec, the agent, session, automation and action-item names. The project name, separators and supporting status text stay muted. Colours follow the current Pi theme, including theme changes, without altering layout or truncation priority. Reload or restart after updating.
456
+
457
+ ## 0.3.34
458
+
459
+ - DevSpec has its own row below the editor, separate from BG/MCP statuses, without replacing Pi's native footer. It shows **DevSpec: agent · project · session · current work** and omits missing fields.
460
+ - Full titles use the available width. On narrower terminals, the project name shortens first, then the action item, then the session; the agent name stays intact. Project IDs, organisation and connection diagnostics remain in `/devspec.project` details. Reload or restart Pi after updating.
461
+
462
+ ## 0.3.33
463
+
464
+ - The footer is back to agent, session and current work. Project IDs, connection-source diagnostics and routine successful-login identity no longer occupy permanent status space.
465
+ - `/devspec.project` opens a native menu with project details, choosing, remembering and forgetting. The full ID and selection source remain available under Project details; normal project choices show readable project and organisation names, with IDs only to disambiguate identical labels. Reload or restart existing Pi sessions to pick this up.
466
+
467
+ ## 0.3.32
468
+
469
+ - Choose the DevSpec project for one Pi conversation with `pi --devspec-project <name-or-id>` or `/devspec.remote --project <name-or-id>`. Ambiguous connections on supporting servers offer a native project-and-organisation picker; ordinary unambiguous launches stay automatic.
470
+ - `/devspec.project` shows the current choice and offers choose, remember and forget. Remembering a folder default is explicit; changing or removing it does not redirect existing conversations. Choosing another project starts fresh local context after confirmation.
471
+ - Conversation scope survives resume and applies to ordinary DevSpec calls as well as the remote bond. Headless ambiguity does not hang awaiting a picker. Reload or restart to load this version.
472
+
473
+ ## 0.3.31
474
+
475
+ - Registration and attachment now report the DevSpec plugin version loaded by the process, separately from the Pi host version. This lets staff find affected users when investigating a plugin release. Version reporting does not change connection identity, permissions, presence or message delivery; older servers may ignore it. Existing Pi sessions need a reload or restart to load the reporter.
476
+
477
+ ## 0.3.30
478
+
479
+ - The DevSpec guidance Pi reads now draws one more line on knowledge capture: what shipped, which commit and what passed belong on the action item, not in project memory — and a memory should hold what a future decision needs that the existing record doesn't already preserve. Shared project knowledge stays free of per-task status reports. The DevSpec tool catalogue is refreshed to match. Reload or restart existing Pi sessions to pick this up.
480
+
481
+ ## 0.3.29
482
+
483
+ - Refreshed the DevSpec tool catalogue: the old review claim loop (get_claimable_reviews, claim_review, record_review) is gone — nothing could ever offer a review into it any more. Asking for a review is unchanged: someone picks your agent on the item and you get the ask as a message, and checking work still means record_criterion_verdicts. Reload or restart existing Pi sessions to pick this up.
484
+
485
+
486
+ ## 0.3.28
487
+
488
+ - Refreshed the DevSpec tool catalogue: the three create tools (action item, artifact, memory) now accept an optional retry key, and DevSpec dedupes a retried create — an agent that loses its response to a timeout and tries again gets the original record back instead of filing a duplicate. Reload or restart existing Pi sessions to pick this up.
489
+
490
+ ## 0.3.27
491
+
492
+ - The README's install command now works: `pi install git:github.com/DevSpecAI/DevSpec-Pi`. It said `pi install npm:@devspec/pi-plugin`, but the package is not on the npm registry yet, so that command failed for everyone. DevSpec's own connect instructions already use the GitHub install.
493
+ - Refreshed the DevSpec tool catalogue: the help-search example no longer mentions Autopilot, and changing an item's lifecycle now says that finished work can't be parked as deferred or blocked (reopen it first). Reload or restart existing Pi sessions to pick this up.
494
+
495
+ ## 0.3.26
496
+
497
+ - Pi now sends you to You → Coding agents (`/settings/coding-agents`) for your DevSpec token, in `/devspec.login`, `/devspec.status` and `/devspec.help`. That page used to be called Connections; the old address still redirects.
498
+ - Refreshed the DevSpec tool catalogue: personal agent rules and response style are now named where they live, You → Coding agents → Personal agent rules and You → Replies & voice → Response style, and automated reviews are under You → Coding agents. Reload or restart existing Pi sessions to pick this up.
499
+
500
+ ## 0.3.25
501
+
502
+ - An answer typed in your own words to Pi's multiple-choice question now reaches Pi when it is longer than 200 characters. DevSpec accepts up to 1000, but Pi kept its own, older copy of that limit, so a longer answer was refused. Pi now leaves answer limits to DevSpec, so a future change to them needs no Pi update. Reload or restart existing Pi sessions to activate this fix.
503
+
504
+ ## 0.3.24
505
+
506
+ - Background maintenance no longer causes an unchanged memory to be recalled again. Recall ignores the row's last-updated timestamp while still noticing new versions, state changes, proposals and disagreements.
507
+ - Automatic recall no longer displays that maintenance timestamp as revision context. Existing messages remain unchanged. Reload or restart existing Pi sessions to activate this fix.
508
+
509
+ ## 0.3.23
510
+
511
+ - Keep proposal IDs, reasons, previews and operation receipts visible after formatting tool responses. An incomplete response never asks the agent to repeat a write.
512
+ - Recall changed memory revisions and disagreements as new context without rewriting earlier messages. Both sides remain visible, or the agent is told exactly what context is missing; unreadable records stay private.
513
+ - Separate retrieval suggestions, unfinished write checks and unresolved issues. Observations are isolated by account, project and session; different pairs cannot collapse merely because they share a record.
514
+ - Resolve exact tool names without substituting a related tool. Activity distinguishes unknown results, pending replacements and discussions from applied changes.
515
+ - Reload or restart an existing Pi session to activate this release. Memory revision detection uses the server's card revision fields when available; older servers cannot identify a body-only change that leaves all returned card fields unchanged.
516
+
517
+ ## 0.3.22
518
+
519
+ - A write that comes back queued for review now tells you a maintainer accepts it on the project's Review page, under Proposed changes. It used to point at a "Review tab", which no longer exists.
520
+ - Refreshed the DevSpec tool catalogue: previewing a ruling on a staleness flag that names no other item no longer needs a counterpart.
521
+
522
+ ## 0.3.21
523
+
524
+ - Room history now includes server-recorded item changes and memory/document events with their original timestamps and attribution. Read them with `read_room_context` (`view: "events"`); use live getters for current record status.
525
+ - Event history survives reloads, deduplicates by event ID, and reports unavailable or truncated reads without discarding earlier history. Requires a server advertising the optional events section; older servers keep their existing behavior.
526
+
527
+ ## 0.3.20
528
+
529
+ - Messages waiting behind an active question can now request native interruption without prematurely replacing the question's authority. The matching server validates a non-executable availability offer, then performs an exact handoff only when Pi is ready.
530
+ - Preserve preempt-off, validate attachments before interruption, and request abort at most once per pending source. A non-settling abort stays pending rather than being reported as recovered.
531
+ - Background jobs and ordinary speech keep their existing ownership and delivery paths. Prepared files are reused only for the identical authorized manifest; stale offers cannot consume the command cursor.
532
+ - Requires the matching server handoff endpoint. Reload/restart to activate this release; it does not claim recovery from every historical unresponsive-agent incident.
533
+
534
+ ## 0.3.19
535
+
536
+ - Observe owned background jobs through the provider's public terminal/status API, even when completion notices are disabled, lost or never consumed. Unknown provider state remains unresolved.
537
+ - Re-evaluate idle completion without a model wake, using exact command/interaction identity or a local activity receipt captured before execution. Late callbacks cannot complete a newer local activity.
538
+ - Local admission uses a capability/attachment-bound `report_pickup` variant and existing activity IDs; ordinary speech stays independent. Requires the matching server local-admission endpoint. Missing or failed admission never falls back to completing the latest unbound activity.
539
+ - Preserve 0.3.18's question ownership retirement and fair command polling. Runtime/API/browser qualification remain distinct; reload the plugin to activate these changes.
540
+
541
+ ## 0.3.18
542
+
543
+ ### Keep messages moving after questions
544
+
545
+ Fixes a client polling stall that could delay new messages while a question
546
+ answer was waiting to resume. Leaving a question also stops its old state from
547
+ suppressing Working updates on later work. Exact answer acknowledgements and
548
+ interruption preferences are preserved.
549
+
550
+ Reload existing Pi terminals to activate these fixes. This is a targeted client
551
+ repair, not the separate server-side change for interrupting an active question.
552
+
553
+ ## 0.3.17
554
+
555
+ ### Read room context locally
556
+
557
+ The native `read_room_context` tool reads and searches the saved room copy,
558
+ including older messages, observed state and file references. Exact reads have
559
+ lossless continuation; missing, partial and changed snapshots are explicit.
560
+ Current item, memory and resource facts still come from the existing live getters.
561
+
562
+ When the local copy is ready, a compact availability notice replaces repeated
563
+ background-history dumps. Current commands, their authority and response style
564
+ still arrive in full. The online transcript tool stays immediately available.
565
+ Prompt-size checks now allow useful growth rather than enforcing the old8k target;
566
+ no provider-cost saving is claimed without measurement.
567
+
568
+ Reload existing terminals to activate the new reader and delivery behavior.
569
+
570
+ ## 0.3.16
571
+
572
+ ### Keep large-file history references available
573
+
574
+ A historical file reference no longer prevents room history from synchronizing
575
+ just because the file exceeds Pi's automatic download budget. History stores only
576
+ the reference; current-command attachment and download limits remain unchanged.
577
+
578
+ ## 0.3.15
579
+
580
+ ### Recoverable local room history
581
+
582
+ Pi can retain room history across restarts, load older pages in the background,
583
+ and reconcile messages that finish or are deleted. Message data and recovery
584
+ positions commit together in private local storage. Switching rooms isolates the
585
+ copies; stopping or losing access invalidates the affected copy.
586
+
587
+ The activity index stores record IDs and relationships, not cached lifecycle or
588
+ supersession claims. Current action-item, memory and resource facts still come
589
+ from the existing online native tools. Other saved room views are timestamped
590
+ observations, not a guarantee of current state.
591
+
592
+ This is the storage slice: current command delivery, attachment hydration and the
593
+ single speech writer remain in place. Native local read/search and compact context
594
+ delivery follow separately. The feature requires the advertised room-context
595
+ contract and Node's SQLite support; older supported ingress lanes remain available.
596
+ Reload existing terminals after updating to activate the new code.
597
+
598
+ ## 0.3.14
599
+
600
+ ### Current memory editing and review tools
601
+
602
+ Pi now exposes the memory-editing tool through on-demand discovery, and an
603
+ out-of-date flag on one action item can be addressed without supplying a
604
+ second item. Tool guidance also reflects the current review queue, criterion
605
+ wording and testing-note contracts.
606
+
607
+ Memory-edit responses retain replacement-version identity, queued proposals,
608
+ exact previews and refusal details. The everyday tool set is unchanged; this
609
+ refresh does not add another posting path or change room-ingress negotiation.
610
+ Reload or restart an existing Pi session after updating to load the refreshed
611
+ tool schemas. Reconnect alone does not reload them.
612
+
613
+ ## 0.3.13
614
+
615
+ ### Keep Still to Discuss context current
616
+
617
+ Pi can read the current room's discussion points when the server updates its
618
+ explanatory wording. That wording is treated as data, not permission: Pi keeps
619
+ its own advisory guidance and still validates the projection's version,
620
+ identities and shape. Empty and unavailable snapshots now replace older lists
621
+ explicitly, so missing context is not mistaken for an empty room.
622
+
623
+ Optional room-state rejection is visible in privacy-safe debug metadata and
624
+ cannot swallow a valid command. Tests exercise the paired server's actual
625
+ projection producer as well as the Pi parser and delivery-tail transitions.
626
+ After updating, reload or restart Pi to load the changed extension; reconnect
627
+ alone does not load new code.
628
+
629
+ ## 0.3.12
630
+
631
+ ### Provider errors are visible in the room
632
+
633
+ When the model provider refuses a request — an exhausted balance, an expired
634
+ key, rate limits that outlast the automatic retries — the room now shows the
635
+ error and what to do next, instead of the agent simply going quiet. The turn
636
+ closes in an explicit error state, the Working indicator clears, and after
637
+ the cause is fixed in the terminal, the next message continues as normal.
638
+ Nothing is retried or replayed automatically. After updating, reload or
639
+ restart Pi to load the changed extension.
640
+
641
+ ## 0.3.11
642
+
643
+ ### Restore the configured interruption behaviour
644
+
645
+ Reverts the silence-based recovery introduced in 0.3.10. New messages again
646
+ respect the configured choice to interrupt or queue, including during long
647
+ operations that produce no intermediate output. Background work continues to
648
+ keep the agent marked Working until it finishes.
649
+
650
+ The reported unresponsive-turn problem remains under investigation; this
651
+ rollback does not claim to fix it. After updating, reload or restart Pi to
652
+ load the changed extension. `/devspec.remote reconnect` only retries the
653
+ existing connection and does not load new code.
654
+
655
+ ## Unreleased
656
+
657
+ ### A mistyped provenance ref dies at the door, with the way out named
658
+
659
+ Tool calls carrying `provenance_ref` or `work_claim_ref` are now checked
660
+ against the refs this process has actually been dealt — delivery refs from
661
+ validated ingress, claim refs observed in claim results — before the call
662
+ costs a server round-trip. A ref that was never dealt here (watched live on
663
+ 2026-09-20: a model retyped a 36-char delivery UUID with a fabricated tail,
664
+ and the server rightly refused it) is refused locally with the current turn's
665
+ refs named and the safe path taught: omit the parameter and the server
666
+ attributes the write to the active turn by default. Refs are never silently
667
+ rewritten, dealt-but-old refs still pass (liveness is the server's call), and
668
+ omission is never checked. The typed-delivery text now says the omission rule
669
+ out loud, and the dealt set clears with the turn bindings on bond resets.
670
+ `test:core-paths` gains the new suite.
671
+
672
+
673
+ ### One command for the lifecycle-critical test path
674
+
675
+ `npm run test:core-paths` runs the nine suites that pin the remote/lifecycle
676
+ contract — turn lifecycle, command-turn and canonical-ingress wiring, speech
677
+ delivery, post receipts, catalog drift, attach context, recovery wiring and
678
+ debug privacy — sequentially, so it is safe on the shared machine where the
679
+ full parallel suite is not. This exists because a real miss happened: a
680
+ turn-lifecycle change needed a new global in the speech harness's sandbox, and
681
+ the ad-hoc single-file habit skipped that file. When you touch the remote pump,
682
+ the turn tracker, or the speech/trail paths, run this.
683
+
684
+
685
+ ### Speech posts can no longer wedge on a stale scope
686
+
687
+ Ordinary assistant speech now posts on the server's append-only v2 lane: the extension sends your
688
+ connection, the text and its idempotency key — and nothing about where the text
689
+ "belongs". The server lands it in the room you're attached to right now and
690
+ annotates the open attempt and turn afterwards, when they exist.
691
+
692
+ Before this, a speech post carried an exact pinned scope — the session, the
693
+ attachment stamp and the attempt — and the server refused the post when any of
694
+ it had moved. A reattach or reload at the wrong moment turned a finished answer
695
+ into a rejection. The words are the thing that must survive; where they belong
696
+ is the server's reading, not the client's memory.
697
+
698
+ What hasn't changed: speech still drops (with the same warning) if the bond
699
+ moves mid-turn, directed-question continuations keep their exact
700
+ claim-token-bound path, and every other host's posting path is untouched.
701
+
702
+
703
+ ### Write attribution teaches omission as the default
704
+
705
+ The provenance_ref parameter's description now says plainly what has always
706
+ been the safe path: leave it out and the server attributes the write to your
707
+ connection's single current open turn — one server-owned pointer, not a choice
708
+ the model has to make — and send an explicit ref only for work caused by
709
+ another command in that same turn. A wrong ref fails closed, so when unsure,
710
+ omit. Catalog regenerated for the new wording.
711
+
712
+
713
+ ### Working stops lying when the tracker wedges
714
+
715
+ Pi now sends an opaque progress marker with every working-lease beat (the poll
716
+ tick and the heartbeat): a plain count of the session events this process has
717
+ seen — turns, messages, tool calls, their streaming updates. Paired with the
718
+ DevSpec server change, a lease
719
+ renews only while that marker keeps changing. If the extension ever wedges
720
+ and the turn tracker freezes while idle, the marker freezes with it,
721
+ the server declines renewal after its staleness bound, and the attempt expires
722
+ through the ordinary lease path instead of lying.
723
+
724
+ Nothing changes when work is genuinely flowing: every turn, message, tool event
725
+ and streaming update moves the marker, so long quiet stretches inside a real
726
+ turn (a big build, a slow test suite) keep Working exactly as before. Hosts and
727
+ builds that never send a marker get the legacy behaviour untouched.
728
+
729
+
730
+ ### The write check tells you which document it matched, on either corpus
731
+
732
+ DevSpec stops a knowledge write when something close already exists, and the
733
+ reply names the record it matched so you can go and read it. Pi previously described that
734
+ as a memory-only check; the server now returns matches across both memories and documents.
735
+
736
+ Three things were saying something untrue, and one was actively misleading:
737
+
738
+ - The flag the session keeps open said "memory write recall-gated" whatever you
739
+ had been writing, and told you to re-call "with reason" — a demand DevSpec
740
+ removed on 2026-09-18. It now says memory or document from the verb, names the
741
+ match by **title** rather than only an id suffix, and asks for no reason.
742
+ - The result projection labelled the match "Closest memory match" and told you to
743
+ fetch it with `get_memory` — which returns nothing for a document id, so a
744
+ document refusal read as the gate matching a record that does not exist. It now
745
+ names the right reader per corpus.
746
+ - The always-on instructions said only `record_memory` was gated. They now say
747
+ every knowledge write is, and what to do when one is stopped.
748
+
749
+ The catalog is regenerated against that staging commit: `create_resource` gains
750
+ `confirm_new`, and a `register_connection` description that had drifted since
751
+ 2026-09-19 is picked up in the same pass. Same 100 verbs, same projection
752
+ families. The initial model surface measures 7,480 tokens of the 8,000 ceiling,
753
+ up 24 — all of it the instructions line, none of it the catalog.
754
+
755
+ ### Resumed sessions no longer brick on duplicate tool definitions
756
+
757
+ Loading a less-common tool with `search_devspec_tools`, then resuming or
758
+ reloading the session and loading the same tool again, could make some
759
+ providers reject every following request with "duplicate tool names are not
760
+ allowed" — the session could not continue. On resume, tools the conversation
761
+ had already loaded are active again exactly as before, so nothing is announced
762
+ twice. And if a provider ever does reject a request for a duplicated tool, the
763
+ extension now deactivates just that tool for the rest of the session and
764
+ continues working, instead of stopping.
765
+
766
+
767
+ ### Auto-bond works when you have more than one project
768
+
769
+ Pi used to send `register_connection` with no folder identity, then retry with
770
+ this checkout's git remote if the server asked which project. A later fix stopped
771
+ closing the shared MCP client on application errors — and, by treating every
772
+ `isError` as "do not retry", also skipped that folder-scope retry. One-project
773
+ accounts kept working; a second project made auto-bond (and `/devspec.remote`)
774
+ fail with "this call needs a project", while Claude Code still connected because
775
+ it sends the git remote on the first register.
776
+
777
+ The host now sends the git remote and/or `.devspec/project.json` pin on the first
778
+ call when it knows the working directory, the same shape as Claude Code. A
779
+ project-scope `isError` still retries once with those facts on the same client —
780
+ not a reconnect. Other application errors are still one request. Auto-bond
781
+ toasts the register error instead of failing silently.
782
+
783
+ ### Tool instructions are no longer cut off mid-sentence
784
+
785
+ Every DevSpec tool Pi offers carries a one-line description, and the line was
786
+ being trimmed to 140 characters (160 when the catalog was generated). That was
787
+ short enough to cut real sentences in half: 19 of 84 tool descriptions and 23
788
+ parameter descriptions ended in an ellipsis, so the model read half an
789
+ instruction and had to guess the rest. Both limits are 320 now, a test fails if
790
+ anything ever ships trimmed again, and the always-loaded surface grew from 6,933
791
+ to 7,130 tokens of its 8,000 budget to pay for it — a good trade for 42
792
+ instructions that now say what they mean.
793
+
794
+ The clearest example is the one that prompted this: the description for
795
+ recording a commit said only "Final commit SHA", while a neighbouring tool
796
+ demanded "the FULL 40-character sha". Three agents in one day filled in the
797
+ missing characters by inventing them. It now says a short SHA is fine and that
798
+ padding one out is wrong.
799
+
800
+ ### The lowest project role is Viewer
801
+
802
+ DevSpec renamed the lowest project role from "guest" to Viewer (an organisation
803
+ Guest is now a different thing: how much of the organisation someone can see,
804
+ not what they can do on a project). Pi reads the served write-authority section
805
+ by its exact shape, so it now expects the 4.5.0 outcome key `viewer` — without
806
+ this, a newer DevSpec would have failed that section and Pi would have fallen
807
+ back to its generic rules. The generated MCP catalog is refreshed with it.
808
+
809
+ ### A proposal against a memory now shows up when you search for it
810
+
811
+ DevSpec lets a colleague propose a change to a decided memory or artifact without
812
+ touching it, so what you recall is still the decided text. Searching for one used to
813
+ show no sign that a change was waiting on it — only opening the exact record did.
814
+ A search result now carries the same "⚠ … awaiting a maintainer" line the record
815
+ itself carries, so a proposed change cannot be missed by looking it up.
816
+
817
+ ### A newer DevSpec no longer switches Pi back to its local rules
818
+
819
+ Pi verifies the product contract it is served. When DevSpec added a new section to
820
+ that contract, the whole document failed verification and Pi fell back to five
821
+ generic local rules — losing the work-entry, provenance and authority rules it could
822
+ read perfectly well. A section this version of Pi does not know about is now noted
823
+ ("update the plugin to read it") and everything else stays in force. The sections Pi
824
+ does implement are still checked exactly, and the contract's own hash still has to
825
+ cover the part it cannot read. A contract that fails verification now says so, rather
826
+ than reporting DevSpec as unavailable.
827
+
828
+ ### The write-authority summary says what it means for an unattended run
829
+
830
+ Pi shows the model the three write classes and their outcomes. It now shows the two
831
+ rules that qualify them, in DevSpec's own words: that a run nobody is watching
832
+ proposes its memories and artifacts rather than recording them, and that closing your
833
+ own item is a different act from closing a colleague's.
834
+
835
+ ### The activity trail stops saying a queued write landed
836
+
837
+ Recording a memory or ruling on a conflict shows as "recorded" or "resolved" in the
838
+ trail. When the server queues the write for a maintainer instead of committing it,
839
+ the trail now says "proposed" — and "contested" for a conflict ruling, which is what
840
+ DevSpec calls a pair nobody has ruled on yet. Plugin 0.3.2.
841
+
842
+ ### Instruction block: stop rationing sentences
843
+
844
+ The always-on instruction test now fails on genuine bloat (a dumped verb map or a
845
+ pasted contract), not on adding a needed sentence. The authority pointer and
846
+ queued-write relay are full sentences again, and the memory / record_implementation
847
+ wording that was trimmed to fit 2,200 characters on 0.3.0 is restored. Plugin 0.3.1.
848
+
849
+ ### The served contract's authority section, and queued writes relayed
850
+
851
+ DevSpec contract 4.4.0 adds `authority_contract` — who may change the project's record,
852
+ judged per call by the server. Pi verifies the section exactly like the others (an older
853
+ Pi read the new document as invalid and fell back to its local safety rules), shows the
854
+ model the classes, outcomes, requester rule and proposal outcome, and when a write comes
855
+ back `queued_for_review` puts the proposal id and reason at the top of the tool result so
856
+ the model relays them and never reports the change as done. The MCP catalog is
857
+ regenerated (adds `get_pull_request`).
858
+
859
+ ### Playbooks are now Automations
860
+
861
+ DevSpec has renamed Playbooks to Automations. This plugin now uses the renamed tools
862
+ (`claim_automation_run`, `record_automation_run`, `get_automations` and the rest) and reads
863
+ the renamed fields in what the server sends it. It needs a DevSpec server that carries the
864
+ same rename; against an older server, automation runs are not picked up.
865
+
866
+ ### Fixed
867
+
868
+ - `/devspec.remote --session <id>` now ATTACHES an already-bonded agent to that
869
+ session instead of refusing with "already bonded". Interactive Pi auto-bonds on
870
+ session_start, so there was always a bond by the time the command ran, which made
871
+ `--session` unreachable in practice — a resume command, a copied attach line, or a
872
+ person typing it all hit the guard and the room was silently dropped. Naming a
873
+ session is an explicit instruction to be in that room, not a duplicate connect.
874
+ A bare `/devspec.remote` while bonded still says so and does nothing.
875
+
876
+ ### Changed
877
+
878
+ - `npm test` caps `node --test` at two files at a time (`--test-concurrency=2`) so this suite cannot fork one worker per CPU next to a live agent.
879
+
880
+ ### Added
881
+
882
+ - Deferred native `search_sessions`: wire-map catalog plus ordinary-language aliases, not in the hot set. Compact session cards, then `get_session_transcript` to read one room.
883
+ - Native, schema-complete `manage_poll` on the same attached-bond activation path as `manage_plan`. Votes are not commands and do not keep Working on.
884
+ - Strict top-level `session_polls` advisory projection on changed remote packages.
885
+
886
+ ## 0.2.0 — 2026-08-22
887
+
888
+ ### Added
889
+
890
+ - Native, schema-complete `manage_plan` backed by the generated DevSpec MCP wire map.
891
+ - Hidden connection-capability v1 negotiation and transport-header stamping; models never provide trusted connection, session, project, or capability identity.
892
+ - Strict canonical remote-ingress 1.3 active-session-plan parsing and deterministic delivery-tail projection for resume, handoff, adoption, completion, and abandonment.
893
+ - Narrow plan-tool activation for attached bonds while unrelated deferred schemas remain cold.
894
+ - Work-entry contract v2 validation so the canonical implementation contract owns action-item/session-plan selection and the high plan threshold.
895
+
896
+ ### Validation
897
+
898
+ - Added strict parser, scope/capability, activation, prefix-budget, reconnect, handoff/adoption, no-plan, lossless result, and privacy-safe trail coverage.
899
+ - Regenerated and drift-checked the 91-verb server wire catalog.