Repository navigation
Pi Pocket 0.19.0: Pi Durable 1.3.0, subagent tiles, and the Lancet model download - #109
Merged
Merged
Conversation
The guard needs the LANCET Nano model, which is a one-time download that only Pi's /lancet-guard setup could do. The owner now gets a Download button on the guard's row in Extensions. It uses the package's own verified downloader and installs where Pi puts the model, so Pi uses it too. Progress shows in every tab. A guard that is on without its model now shows as failed with the reason. Tested: check, lint, app tests, a new lean model test, and a live download and score in a throwaway copy.
On screens 1000px and wider, the owner's Providers sheet is 1160px wide with a fixed height. Providers (with search) are on the left, grouped as Needs sign-in, Signed in and Not configured. Refresh models and Models for subagents are in a side panel on the right. Each side scrolls on its own. Narrower screens and phones keep one column, as before. Tested: npm run check, lint, sign-in-ui, subagents-ui, peeks-ui, pip-chat-ui; looked at 1920x1080, 1280x800, 900x900 and phone.
Pin pi-durable, chord, pi-ai, pi-codemode, pi-coding-agent and pi-mcp to 1.3.0 (exact). The lock file drops esbuild (chord no longer needs it) and adds @silvia-odwyer/photon (WebAssembly, no install script). Pi Durable 1.2 renamed a tool result's `content` to `output`. Built-in tools, tests, docs and examples now return `output`. A drop-in that still returns `content` would give the model an empty result, so the loader reads `content` as `output` for drop-ins. Tested: check, lint, format:check, full npm test, and an upgrade check on synthetic data (history, an interrupted tool call and an interrupted generation recover; a second restart keeps the data).
The shim that reads `content` as `output` for drop-in tools wrote into the array a module returned, so a frozen list made the load fail. It also copied a tool with a spread, which loses the prototype and getters. Now the loader builds a new list, and copies tools and extensions with their property descriptors and prototype. The drop-in test returns a frozen list. The docs say that hooks and wraps must use `output`. Found in review of the Pi Durable 1.3.0 update.
Peek tiles now include sessions whose subagents work, with a live sub-tile for each active subagent: its name, state, and current call or words, from its own peek. The subagents board shows the same sub-tiles under each session row, so what each is doing is visible without opening it; a click picks one, and a double click or double tap opens it. Share nowDoing and the sub-tile in agent-now.js and agent-tile.js, extend the server's peek summary with the session's active agents, and raise the per-tab live peek limit to 20.
Pin the @earendil-works packages at 1.3.0, return tool results as `output`, and read `content` from drop-in tools.
Peek tiles list the active subagents of a session, and the subagents board shows a sub-tile for each active subagent, with what it does now. By Steven Goldade (@smgoldade) in #108. Tested: format, check, lint, full npm test (350 pass), live check on a copy.
Follow-up to #108 (Steven Goldade). With 20 subagents in one session, a peek tile grew to about 1,300px and the phone strip covered the conversation. - Peek tiles show at most 3 subagent rows (1 in the phone strip), one line each, waiting ones first in approval order. "N more" opens the board at the first one left out. - The approval box on a session's tile names the subagent that asks. - In the column, the footer says when only subagents keep a session busy ("3 subagents working", "2 subagents need you"). - The board shows 6 sub-tiles per session (3 on a phone), plus the selected one, with "Show N more". Tested: format, check, lint, peeks and subagents tests (24 pass), live check with 20 subagents and 2 approvals at desktop and phone sizes.
Set the package version and site version. Describe subagents in peek tiles and the Lancet model download on the site.
Interrupt stops the run at once, tool call included, as Stop does, and then sends the message. It also withdraws the queue, and goes back to Steer after one use. On a narrow message box the model chip hides while Pi works. Tested: new app test (fails without the change), check, lint, npm test, and by hand at phone size.
…l the session runs on now A fork starts from the agent as of its fork entry, so sending a message again without naming a model left the new session on the model the session had when that message was sent, while the message sheet named the model it runs on now. Name the model and its thinking level in the fork's agent change, whether the model was picked or is the session's own. The new check sends two messages, switches the session to another model, and sends the second again with the same model: it fails before the fix and passes after it. All 334 tests, check, lint and format checks pass.
…el the session runs on now Fixes the resend fork keeping the model from the time of the message. Thanks to wangb (@wangbinyq) for the fix and test.
Discover and Installed use quiet rows with a steady mark and one action, like the menu. An entry walks through Install, Look it over, and Turn it on, which asks once more in place instead of a browser dialog; what it adds shows in plain words. Installed rows open to show settings and details, and a drop-in asks in its row before it turns on. Tag filters keep to one row; corners are squarer. Tested: npm run check, lint, and the full test suite (353 pass); checked phone and desktop layouts on a copy.
Lower the corner tokens: rows 6px, controls 7px, cards 8px, windows 10px, sheets and PiP 12px. Pills and avatars stay round. Themes that set their own corners keep them. Tested: npm run check, lint, and the full test suite (353 pass); looked at home, a session, and the Extensions hub on a copy.
No Pocket document set checkpointWhen, so a cold read replayed every delta ever stored: pocket.spend had 63k (272 ms, 243 ms of startup). Every document now writes a base after 64 deltas; for these current-only documents Pi Durable then drops the older revisions. checkpointWhen is not part of the stored semantics (only scope, history, fork are checked). On a copy of the live data: startup 600 -> 380 ms, spend cold read 272 -> 0.6 ms. Tested: test/docs.test.ts (fails before), check, lint.
The top bar's Changes count read, parsed, and projected a session's whole history (images included) on every look: every 4-8 s while Pi works and after each new entry, per tab; ~100 ms for the biggest sessions. Pi's edits only need edit/write calls, errors, and codemode results, and entries never change, so the workspace keeps those facts per session (64 sessions) and reads only entries newer than the last one seen (minEntryId, which also covers a fork's inherited history). On a copy of the live data: changes() 98/66/68 ms -> 5 ms per call (the rest is git), same results for 40 sessions. Tested: changes, sessions, history tests; a new test of edits since the last look, in a fork too.
…s line Extensions can now add a panel beside the conversation (pocket.panel, where Browser and Files dock; a pushed screen on phones), an item in the status line (pocket.status, with a short form for narrow lines), and a top bar button (pocket.topbar). The top bar and status line are now slots of named items (web/slots.js): the app's own (core:…) and extensions' (ext:…), placed by default order, before/after, pocket.arrange, and then each person's own choices in Appearance (Top bar buttons, Status line items), which win. The menu, Lancet Guard, and the connection warning stay fixed. All new members are experimental in 0.19.0. Built so PR #86's Spark dashboard can be a drop-in instead of a core change. Tested: npm run check, lint, and the full npm test (one known load flake in browser.test.ts passes alone); a Spark-like drop-in on a test copy at desktop and phone sizes.
Each room update sent a tab the whole message being written, every 90 ms, so a long answer cost its length squared: a 13.7 KB answer sent 1.6 MB of live message to each tab. Tabs that name protocol 3 now get only what changed (the blocks they keep, and the new characters of the block that grows); web/live.js puts the message together. Older tabs still get the whole message. The live run is also projected once per state, not once per tab. Tested: npm run check, lint; projection and app tests (a round trip over block changes; a protocol 3 tab rebuilds what an old tab gets whole).
The session list (about 77 KB on the owner's data) went to every tab on any change that made it be worked out again, such as another tab of the same person opening a session, whether it changed or not. Each tab now keeps the JSON it last got, as the board and PiP already do, and an unchanged list is not sent again. Tested: npm run check, lint; an app test (fails before the change).
The places' tiles, the buttons on the left of the message box's row, and the actions under Pi's answers are now slots too, so people can hide and reorder them in Appearance and extensions can add to them: pocket.composerButton, pocket.replyAction (its run gets the answer), and pocket.insertText, which puts text in the message box and never sends. More under an answer stays fixed; Send, Stop, the mic, and Steer and Queue stay out of the slot. Places keep their data-place names. Tested: check, lint, full npm test (mobile-ui rerun after the data-place fix), a demo drop-in on a test copy at desktop and phone sizes.
The New session picker shows a folder inside the home folder as ~/…, and a Nix build's sandbox sets HOME to the build directory, where the tests' own temporary folder is. Comparing the picker's text against the absolute path therefore timed out there, failing every `nix build`: the one place the test runs, as a machine without Chromium skips it. Compare through the app's own shortPath instead.
ExtensionInfo gained readOnlyTools, hooks, sections, and wraps with the
gallery's entry format, while installed.mjs still compared the older
{ name, tools } shape: the package's install check failed as soon as the
source checks passed.
Note both traps in nix/tests/README.md, the sandbox's HOME among them.
Every store change draws the app from the top. A streamed update changes only
`view`, yet the session list (127 rows, mounted off-screen on phones) drew
again each time: 24 of 28 ms per update at 4x CPU on a phone.
`apartFromViews` (ui.js) skips a change to `view` or `pipView` alone; the
session list and the rail use it. Their own state, and any other store change
(`store.set({})` too), still draw them.
Tested: a view-only change now costs ~8 ms instead of ~30 ms (4x, mobile).
The live answer's Markdown was parsed, sanitized, and colored whole on every
update, which grows with the square of its length (about 4 s of a 33 s stream
at 4x CPU). Now `Markdown` with `cache={false}` finds the top-level blocks
(marked's block lexer only) and keeps each block's HTML from the update
before, so only the block that changed, mostly the last, is drawn again.
A whole HTML page still renders as one block. Finished text renders as before.
Review findings: a streaming reply gave no conversation to its images (they did not point at the server until the answer was whole); live blocks sat in .md-part, whose rule zeroed headings' top margin, which jumped back at the end; empty parts (a link definition) could take the cursor's place. The test now also checks the image path.
…dited in the last 2 s What: keepsUp refuses once the compressor is ended; the compressor's unsent input no longer counts as bytes the tab is behind (it has its own cap); a file changed within 2 s is read again each request (a same-size edit in one clock tick); send() merges an existing Vary. Tested: test/compression.test.ts, check, lint.
# Conflicts: # docs/map.md
…installs Fixes the two test expectations that made nix build fail (#106). Thanks to Michał Zając (@Quintasan) for the fix.
Adds an optional cwd to host.linkedSessions.start and the human-bound start. Thanks to Brian Ketelsen (@bketelsen) for the change and tests.
Adds the Since 0.19.0 note to the types, the host reference, the linked-sessions guide and the API versions table. An older Pi Pocket ignores cwd, so the docs say to set minPocket.
Removes the sentence "Do not commit, push, or publish unless the person asks." from docs/index.md and docs/self-editing.md. The base prompt already dropped the same rule in this release.
Removes "Show the diff instead." from the rules list in docs/self-editing.md. It was left alone when ae1532c removed the commit, push and publish rule before it.
A team stopped after 20 messages between its sessions (10 turns each way) until a person wrote. Tanner asked for no turn limit. The send and start checks on that count are gone; the count itself stays in its stored document. The other bounds stay: 10 linked sessions per session, none from a linked session, the team's spend limit, plan mode and take turns. Adds a test of 25 messages between two linked sessions, and updates the docs.
Adds a rule block to PiP's rules: messages to sessions, scheduled messages and watch instructions follow ASD-STE100 at about 80% adherence. PiP's answers to its person do not change. Adds a test that PiP's prompt has the rule and a session's prompt does not, and a line in docs/features.md.
A session could start at most 10 linked sessions; the 11th start failed with a 409 error. Tanner asked for no cap. The count and its check are gone. The other bounds stay: a linked session starts none, a subagent cannot start linked sessions, the spend limit, plan mode, take turns, the message size limit, and replay keys. Adds a test that one session starts 12 linked sessions, and updates the docs.
…done With no count limit since 0.19.0, a team can loop. The team tool's start reply now says "once", and the linked message asks for no reply to thanks or to messages that ask for nothing. Text only, no hard limit. The guide and the limits page say that the spend limit of the top session is the brake. Adds test/agent-teams.test.ts (fails on the old text). Final review M1.
SECURITY.md and docs/map.md still named the 20-message limit and the 10-session cap that 0.19.0 removed. features.md now names the cwd folder of a linked session, and a comment in linked-sessions.ts no longer calls the count a limit. Final review minors 3 and 4, and 2 nits.
…nal review web.md shows cwd (since 0.19.0) on HumanLinkedSessions.start. The theme surface marks status-item, extension-panel, data-focus and extension composer buttons since 0.19.0. Placement names composerButton and replyAction, the top bar position matches the slot, the not-in-a-slot lists name Interrupt, limits.md names every id kind, api-stability lists the 0.19 experimental members and the core: slot ids, and a long comment in server-status.js wraps. Final review minor 5 and 8 nits.
Commands.submit aborted the busy run before it found that the request was a retry. It now asks submissionByRequest first, and skips the abort for a request that it knows. Adds a test in test/app.test.ts that fails on the old code. Final review minor 2.
… full On the old code the retry aborts the second run before it writes an answer, so the test now expects a finished answer instead of reading a missing entry.
An empty or blank cwd went to checkDirectory and gave the home folder. It now counts as no cwd. A relative cwd still resolves against the server process's folder, and the docs and types now say so. Adds a test that fails on the old code. Final review minor 6.
A panel and a top bar button of one module could share an id and make one top bar item twice; a person's reorder then dropped core:people. pocket.topbar and pocket.panel now refuse an id that the other has, and reorder takes each id once. replyAction(...).update() did not redraw the actions that already show: each version of a spec now gets a revision in slotKey, so the label and the run change. Applies the reviewers' patches pp-019-patch-api-1 and -2, with 2 tests in test/extension-ui.test.ts that fail on the old code. Final review minors 7 and 8.
A chosen but unused Interrupt stayed selected for the next run, so Enter stopped it. The send mode now goes back to Steer when Pi stops working. At 320 px, Steer, Queue and Interrupt pushed Stop out of the box while Pi works: at a box of 320 px or less, Attach hides while Pi works and the three get closer; 360 px and 1280 px do not change. 2 tests in test/composer-focus-ui.test.ts fail on the old code. Final review minors 10 and 11.
Pi Durable 1.2 renamed a tool result's content to output. The shim covers a drop-in tool's execute, but a 0.18-style afterTool or wrapTool that returns content gives the model an empty result with no error (rules A2 and A7). POCKET_API is now 2 on the server and in the browser. The oldest supported version is 1: a module with 1, or with none, still loads (A9), and the loaders refuse an older one. The guides and examples that return output export pocketApi = 2, so 0.18 refuses them with a clear message. Tests: a drop-in for 2, 1 or none loads and one for 3 is refused (test/dropins.test.ts), and the same for a browser module (test/extension-ui.test.ts). Both fail on the old code.
…sion checks The fresh review of this round found: Stop still overflowed for message boxes of 321 to 333 px (screens of 347 to 359 px), so the rule now covers a box of 333 px or less (a 360 px screen's box is 334 px, and does not change). A gallery draft took this Pi Pocket's pocketApi (2) for every module: it now takes the highest pocketApi that the module's files export, else 1. The loaders refuse a pocketApi that is not a whole number. The entry error says "such as 2". A comment names the rare race of 2 same-id interrupts at once. Tests: pocketApi 0 and 1.5 on the server, 0 in the browser, the draft's version, and the composer at 350 px.
…s nothing again 9b68685 set the send mode to Steer each time Pi stopped, which also dropped a chosen Queue. Now only an unused Interrupt goes back to Steer; Steer and Queue stay. a518f3c stored the new spec object even when a module added the same action again, so revisionOf gave it a new revision, slotKey("reply") changed, and the answers drew again. add() now keeps the stored spec when sameSpec says it is the same; a changed field or run still draws again and runs the new run. features.md says when Interrupt goes back. Tests in test/composer-focus-ui.test.ts and test/extension-ui.test.ts fail on the old code. Post-fix check: A2 minor 1 and nit 4.
… sessions The memory guide told Pi to save whatever it learned that might help later, so Pi proposed lessons for small one-off facts, and the owner had to dismiss each one. GUIDE now names 2 cases: a person asks, or Pi is sure that the lesson will clearly help in many later sessions. On its own, Pi skips one-off facts, niche details, task results, guesses and rare cases, and does not save when unsure. Every safety sentence stays. The tool's description, the Memory bullet in features.md and the Memory sheet's intro say the same. A new test in test/memory.test.ts (sessions and PiP) fails on the old text.
PiP already wrote its tasks to sessions in ASD-STE100. Now PiP asks each session, in its task, to answer in ASD-STE100 too, and every session's prompt says to answer a message marked [via PiP] in ASD-STE100, at about 80% adherence. The session's answers to people do not change. Both files are extension modules, which the server loads again by itself. The PiP test now checks both rules, and fails on the old code; features.md says the same.
…al English Linked sessions and subagents now use ASD-STE100 (about 80% adherence) for what one agent writes to another, as PiP and sessions already do. The team tool tells Pi to write its team messages so and to ask for answers so; the subagent tool does the same for tasks and reports. Every session's prompt now names the [via linked session …] marker next to [via PiP]: its answer and what it sends back go in ASD-STE100. The wrapper of a linked-session message (src/server/linked-sessions.ts) asks for the reply in ASD-STE100: that file needs Menu → Restart server. Answers to people do not change. A new test in test/agent-teams.test.ts fails when any of the 4 texts is reverted.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
@earendil-workspackages from 1.1.0 to 1.3.0. The built-in tools, tests, docs and examples now returnoutputinstead ofcontent. Pi Pocket still readscontentfrom drop-in tools.pocket.insertTextfor extensions. It puts text in the message box. It never sends the text.modulepreloadlinks on the app page.nix build(andnix run). The fix changes 2 test checks. They expected old results. Now they expect what the app does today. No app code changed. By Michał Zając (@Quintasan) in Fixnix build: the picker's ~ path, and what a drop-in installs #111.linkedSessions.starttakes an optionalcwd. Withoutcwd, the session starts in the folder of the source, as before. By Brian Ketelsen (@bketelsen) in Allow linked sessions to select a working directory #112.docs/index.mdanddocs/self-editing.md. Indocs/self-editing.md, the change also removes the sentence "Show the diff instead."SECURITY.md,docs/map.mdanddocs/features.md.cwdon the stableHumanLinkedSessions.startin the reference, and correct 8 small points in the docs of the extension API.cwdin the folder of the source.update().pocketApifrom 1 to 2. A gallery draft now gives thepocketApithat the module exports.[via linked session …]marker.Why
contentgives the model an empty result.242bbbfsays that 20 subagents in 1 session made a tile about 1,300 px tall. Nobody repeated this measurement. For this reason, the follow-up change limits the rows./lancet-guard setupcommand of Pi downloaded it.nix buildfailed in its test steps. Because of this, Nix users were not able to install Pi Pocket.Fixes #106 (through #111). The commits of #108, #110, #111 and #112 are in this branch.
For extension authors
Packages (A1). Pi Pocket 0.19 pins these packages at 1.3.0. In 0.18, they were at 1.1.0. A drop-in gets the same versions through the
node_moduleslink.@earendil-works/pi-durable1.1.0 → 1.3.0@earendil-works/pi-ai1.1.0 → 1.3.0@earendil-works/pi-coding-agent1.1.0 → 1.3.0@earendil-works/pi-codemode1.1.0 → 1.3.0@earendil-works/pi-mcp1.1.0 → 1.3.0@earendil-works/chord1.1.0 → 1.3.0Changed. In Pi Durable 1.2, the result of the
executeof a tool hasoutputwhere it hadcontent.{ output: [{ type: "text", text }] }. The guides and examples now show this form.{ content: [...] }continues to work. For the tools of a drop-in, Pi Pocket readscontentasoutput. If a result has both fields,outputwins. The shim does not changeisError,detailsor image parts.executeof the tools of a drop-in. A hook (afterTool) or a wrap (wrapTool) that reads or returns a result must useoutput. An old hook or wrap that returnscontentgives the model an empty result, with no error. For this reason,pocketApigoes to 2.outputneeds Pi Pocket 0.19.0 or newer. It exportspocketApi = 2. A gallery entry for it must setminPocketto0.19.0.pocketApi(A18).Other Pi Durable 1.2 and 1.3 changes that a module can notice:
bashreturns an error result for a command that exits with a nonzero code. It does not throw an error. The result has anexit_codediagnostic.ToolHookCallhas a new optional field,parent, for nested calls.section,hook,wrapTool,api.memoandapi.snapshotwork as the docs say. 6 installed drop-ins loaded and ran on 1.3.0. Nobody tested a 7th drop-in (agent-civilization.ts) alone.Added (experimental, since 0.19.0). All of these members are in
pocket, the browser module API. They can change in a minor release (A4). Before you use a member, make sure that it is there (A10). In a gallery entry, setminPocketto0.19.0.pocket.panel(spec),pocket.openPanel(id),pocket.closePanel(): a panel next to the conversation.pocket.status(spec): an item in the status line, with ashortform for narrow lines.pocket.topbar(spec): a button in the top bar.pocket.composerButton(spec): a button on the left of the row of the message box.pocket.replyAction(spec): an action under the answers of Pi. Itsrungets the answer.pocket.insertText(text, options): put text in the message box. It never sends the text.pocket.arrange(slot, arrangement): hide or reorder the items of a slot.Actioncan now be{ panel }.PanelSpec,StatusSpec,Placement,TopbarSpec,ComposerButtonSpec,Reply,ReplyActionSpec,SlotName,Arrangement.extension-panelandstatus-item, each withdata-module.data-focuscan beextension-panel.pocket.topbarandpocket.panelrefuse an id that the other already has in the same module.replyAction(...).update()now redraws the actions that show.types/pocket.d.tsmarks each new member@since 0.19.0and@experimental. The reference says "Since 0.19.0 · Experimental".Added (since 0.19.0), on the server. From #112.
cwdinhost.linkedSessions.start(source, { …, cwd }, key): the folder for the new session. It must be a folder that exists. It uses the path rules of the folder picker. It is experimental, ashost.linkedSessionsis.cwdin the human-boundrequest.linkedSessions.start({ …, cwd }, key)of a conversation route. That interface is stable, so this option is stable too.cwd, the session starts in the folder of the source, as before. A blankcwdcounts as nocwd. A relativecwdresolves against the folder of the server process, not the folder of the source.cwd. A gallery entry that needscwdmust setminPocketto0.19.0.webchanged.host.linkedSessions.sendandstartdo not stop at 20 messages between the sessions of a team. The stable human-boundrequest.linkedSessions.startdoes not stop at 20 messages either: the removal is a higher limit, an addition (A8), not a breaking change. Before, they refused with a 409 error until a person wrote. The limits page now says "no limit". The other limits stay. A linked session starts none. The spend limit of the session that started the team applies.host.linkedSessions.startand the stable human-boundrequest.linkedSessions.startdo not stop at 10 linked sessions for each session. Before, the 11th start failed with a 409 error. The removal is a higher limit, an addition (A8), not a breaking change. The limits page now says "no limit".Themes. The default corner tokens are smaller:
--r-markto--r-floatgo from 3–20 px to 2–12 px.--r-pillstays at 999 px. The token names do not change. A theme that sets its own corners keeps them.Deprecated, Removed, Reserved names, Security: no changes.
pocketApigoes from 1 to 2.pocketApigoes up (A7). A2 nameshookandwrapTool.contenttooutput. An oldafterToolorwrapToolthat returnscontentgives the model an empty result, with no error.pocketApi = 1, or nopocketApi, continue to load (A9). The oldest supported version is 1.outputcan exportpocketApi = 2. Then Pi Pocket 0.18 refuses it with a clear message. The guides and examples that returnoutputnow export 2.cwd, and the higher limits of a team are additions (A8). They alone do not raisepocketApi.Tested
npm run check,npm run format:checkandnpm run lintpass in a clean clone of the head (fe5899d), afternpm ci.npm testin a clean clone at the head (fe5899d): 384 tests, 384 pass, 0 fail.test/agent-teams.test.tschecks the ASD-STE100 rules of theteamtool and the subagent tool, the reply line in a linked message, and the marker rule in the prompt of the linked session. The test fails when any of the 4 texts is reverted.test/pip.test.tsnow also checks that PiP asks each session to answer in ASD-STE100, that a session sees the[via PiP]marker, and that its prompt has the rule for that answer. The test fails on the old code.f32ecb4, a first full run had 7 failures, all intest/mobile-ui.test.ts("Timed out waiting for the session list"). Other heavy work ran on the machine at that time. The next full run passed.test/memory.test.tschecks that the prompt of a session and of PiP has the new memory rule and its safety sentences. It also checks that the old words "when you learn something that will help later sessions" are gone, and that the tool description says when to useadd. The test fails on the old text.2af63f9, the fullnpm testgave 382 tests, 382 pass, 0 fail.test/browser.test.ts, a known flaky test. That file passed alone 2 times.4f9f203, the fullnpm testgave 380 tests, 380 pass, 0 fail.test/composer-focus-ui.test.ts: a chosen Queue stays chosen for the next run.test/extension-ui.test.ts: the same action under answers, added again, keeps the key of the slot. This covers the same object and a new object with the same fields andrun. A newrunchanges the key, and the newrunruns.npm pack --dry-runpasses.f36d9af, a first full run had 1 failure: a browser timeout intest/extension-ui.test.ts. That file passed alone 2 times, and the second full run passed.test/agent-teams.test.ts: theteamtool and the linked message tell Pi to answer once and to stop when the work is done.test/app.test.ts: an Interrupt with the same request id does not stop the run that it started.test/linked-sessions.test.ts: a blankcwdstarts the session in the folder of the source.test/extension-ui.test.ts:replyAction(...).update()redraws the label and runs the newrun.test/extension-ui.test.ts: a top bar button cannot take the id of its panel, and an order with an id 2 times keeps every button.test/composer-focus-ui.test.ts: an Interrupt that a person chose but did not use does not stay for the next run.test/composer-focus-ui.test.ts: at 320 px and at 350 px, Stop stays inside the message box while Pi works.test/dropins.test.ts: a drop-in for API 2, 1, or none loads. Pi Pocket refuses a drop-in for API 3, 0, or 1.5 with a clear error. A gallery draft gives thepocketApithat the module exports.test/extension-ui.test.ts: a browser module for API 2 loads. A browser module for API 3 or 0 tells why it does not load.test/serve.ts) at 320 px, 360 px and 1280 px: Stop fits at 320 px. The layout at 360 px and at 1280 px did not change. The slot fixes work.test/pip.test.tschecks that the prompt of PiP has the ASD-STE100 rule, and that the prompt of a session does not. The test fails without the rule block.eada028had 1 failure: the cleanup step oftest/composer-focus-ui.test.ts(a temporary folder was not empty yet). Its tests passed. It did not fail in the later full runs.cwd. They cover the new folder, its project instructions and shell tools, and an unchanged source. They also cover the default folder, bad folders, a repeated start, and the human-bound start.test/back-home-screen.test.tsis a small test of the swipe-back fix.Notes
pocketApi2 answers minor 1. This round did not fix minors 9 and 12 to 16, or the other nits.4f9f203: the live checks gave 7 of 7 pass. The 2 reviewers found 0 blockers, 0 majors, 3 minors and 8 nits. The last round fixed 1 minor and 1 nit: the 2 regressions. These stay open:pocketApithat is a string or null gets a wrong error text. Pi Pocket still refuses the module.export const pocketApi: number = 2as API 1.nix build;web/changes apply without a restart. The Pi Durable update and the server performance changes need a restart. The live server already had this restart.src/server/linked-sessions.tsandsrc/server/host.ts). The live server runs that code since its restart. Fixnix build: the picker's ~ path, and what a drop-in installs #111 changes tests only.src/server/linked-sessions.ts). The live server runs that code since its restart. The new text of theteamtool (src/server/extensions/agent-teams.ts) loads without a restart.src/server/extensions/pip.ts. The live server loads a changed file insrc/server/extensions/again by itself. Thus this change needs no restart. Menu → Restart server also loads it.src/server/commands.ts,src/server/linked-sessions.ts,src/server/extension-web.ts,src/server/reload.ts,src/server/gallery/share.tsandsrc/server/gallery/entry.ts. The live server runs them since its restart.src/server/extensions/agent-teams.tsloads again by itself. Theweb/changes load in each browser by themselves.src/server/extensions/pip.ts,prompt.ts,agent-teams.tsandsubagents.ts. The live server loads them again by itself, without a restart.src/server/linked-sessions.ts. The live server needs Menu → Restart server before it uses that line. The other rules work without it.src/server/extensions/memory.ts. The live server loads it again by itself, without a restart. Sessions get the new text in their next request.4f9f203. The round of the 2 regressions changes onlyweb/files, tests and 1 docs line. Thus it needs no restart.