@paigy/harness 0.2.12 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (4) hide show
  1. package/README.md +29 -1
  2. package/dist/cli.js +518 -71
  3. package/dist/main.js +514 -68
  4. package/package.json +4 -3
package/README.md CHANGED
@@ -70,9 +70,37 @@ silent history from "answer me now" is `urgency`, not a second store:
70
70
  | a turn that failed | `push` | worth knowing soon, not worth a sound |
71
71
  | our own parse failure | — | not on the rail at all; it's our problem, not yours |
72
72
 
73
- `paigy/level.ts` decides; `apps/api/src/notify/levels.ts` still arbitrates against your
73
+ `paigy/level.ts` decides; `apps/api/src/arbitration/arbitrate.ts` still arbitrates against your
74
74
  session mode and account permissions and can only lower it.
75
75
 
76
+ ## The working log, and the one thing it's allowed to do on your phone
77
+
78
+ A tool call is NOT on that table, and that is deliberate: the ⚙ line is the live texture of
79
+ a turn, and shipping it to the rail would be the working log arriving one tool at a time.
80
+ But "Working" is equally true of four minutes of `pnpm test` and four minutes of an agent
81
+ gently going nowhere, and the only place that told them apart was a log window on a machine
82
+ you'd walked away from.
83
+
84
+ So the **tail** takes a different road (`paigy/activity.ts`): the last two ⚙ lines ride the
85
+ **presence beat**, on the session's own token, and the agent's page on the phone renders
86
+ them under its standing sentence. Every property that makes it not-a-notification is load-bearing:
87
+
88
+ - **Pulled, not pushed.** It never rings, never queues, never waits to be answered. You see
89
+ it only if you are already looking at that one screen.
90
+ - **A window, not a log.** Two lines, replaced in place — the newest arrives on the bottom
91
+ row, the one before it dims. Nothing accumulates and there is no history to open.
92
+ - **It expires.** Overwritten in place by every beat, retired at the turn boundary, and drawn
93
+ only while the process is live (`isLive`, the same window as the dot). A tail over a dead
94
+ run is the working-over-a-corpse state the party already refused.
95
+ - **It stays off the rail.** `entryFor` still returns null for every work event, and
96
+ `bridge.test.ts` pins it — that assertion is now the guard on this feature too.
97
+
98
+ Only sessions the harness drives have one. A hatched identity used straight from a terminal
99
+ (`PAIGY_AGENT="…" claude`) emits no work events, so its page shows no strip rather than an
100
+ empty box. Note also that presence is **not** in the E2EE lane (`e2ee/flow.md` covers
101
+ notifications and responses) — which is why the publisher clips each line and shortens
102
+ absolute paths to their last two segments before it leaves the machine.
103
+
76
104
  ## The catalog and the doctor
77
105
 
78
106
  The other thing Buzz got right: connecting a harness should be a status line and a