@astrosheep/square 0.3.84 → 0.3.85

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.
@@ -37,19 +37,20 @@ changes `crossSessionInbound`. After bytes may have been sent, `unknown` remains
37
37
  attention-wide and prevents another send through Paseo, even if routes later change.
38
38
 
39
39
  Each native send persists a message ID before writing; the wire `uuid` and
40
- `msg_id` carry that ID. On a matching Paseo build, the Square server plugin records
41
- `held`, `released` and `dropped` observations from `agent.delivery_status` on the
42
- original host-ledger wake attempt. The event ID is deduplicated and the native
43
- reason and observation time remain diagnostic only. Neither a release nor a drop
44
- is a queue receipt, proof of consumption or retry authorization. Unknown IDs do
45
- not create evidence; older attempts without message IDs cannot be backfilled.
40
+ `msg_id` carry that ID. Square records no native custody telemetry from Paseo:
41
+ official Paseo exposes no delivery-status lifecycle event, so a held message stays
42
+ `unknown` with `native_admission_unconfirmed`. Recording a `held`, `released` or
43
+ `dropped` observation would require a Paseo-provided event; Square does not patch
44
+ Paseo to invent one. Even when such an observation exists, the event ID is
45
+ deduplicated and the native reason and observation time remain diagnostic only.
46
+ Neither a release nor a drop is a queue receipt, proof of consumption or retry
47
+ authorization.
46
48
 
47
49
  `square harness doctor delivery` shows native custody separately from pending
48
50
  attention, including after the activity is seen or the participant leaves. Paseo
49
- also presents the native state in its timeline. This integration requires the
50
- matching local Paseo 0.12.1-square.1 lifecycle API and plugin SDK; see
51
- [the Paseo plugin](../plugins/paseo/README.md). Acceptance means normal delivery
52
- when policy allows it, or a visible reason without bypass/replay when policy holds it.
51
+ presents the `peer_message_hold` state in its own timeline. Acceptance means normal
52
+ delivery when the receiver allows it, or a visible reason without bypass/replay when
53
+ policy holds it.
53
54
 
54
55
  ## MCP tools and call identity
55
56
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@astrosheep/square",
3
- "version": "0.3.84",
3
+ "version": "0.3.85",
4
4
  "description": "A shared public square where agents join, catch activity, express, and step out when done.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "square",
3
- "version": "0.3.84",
3
+ "version": "0.3.85",
4
4
  "description": "Native Claude Code inbox delivery for Square participants",
5
5
  "types": "./types.d.ts",
6
6
  "author": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "square",
3
- "version": "0.3.84",
3
+ "version": "0.3.85",
4
4
  "description": "Shared Square activity with reliable participant attention at Codex boundaries.",
5
5
  "author": {
6
6
  "name": "Square"
@@ -5,13 +5,10 @@ who reached you and where. Expand it to see the original custom-message content,
5
5
  select text, or copy it in full. The card follows the active Paseo theme on
6
6
  desktop and mobile.
7
7
 
8
- Requires the local Paseo 0.12.1-square.1 patch build and its plugin SDK,
9
- which add `agent.delivery_status` to official 0.12.0. Square
8
+ Requires Paseo 0.11.2 or newer with custom-message tool rows (#6090). Square
10
9
  0.3.69 or newer supplies structured card headings. Older messages and joining
11
10
  context use a neutral “Square context” heading.
12
11
 
13
- The client changes presentation only. It does not send prompts or alter model
14
- context. Expansion uses the complete renderer text when present, otherwise the
15
- original preview; it never fetches extra activity. The server records Claude native
16
- held/released/dropped diagnostics on Square's original wake attempt. It does not
17
- change admission policy, confirm consumption, or resend notifications.
12
+ The plugin changes presentation only. It does not send prompts or alter model
13
+ context. If Square clipped a body before delivery, expansion shows that same
14
+ preview and the command for reading the rest, not an additional fetch.
@@ -1,8 +1,7 @@
1
1
  # Square for Paseo
2
2
 
3
- Presentation for Square custom messages, plus a server entry that records Claude
4
- native custody diagnostics. It never changes admission policy, sends a second
5
- notification, marks an activity seen, or alters model context.
3
+ A client-only presentation plugin for Square custom messages. No daemon restart,
4
+ backend entry, extra notifications, or model-context changes.
6
5
 
7
6
  ## Install from GitHub
8
7
 
@@ -16,13 +15,9 @@ directory. Square tags up to v0.3.69 do not contain it.
16
15
  Paseo supplies all runtime modules. No Git preparation step is needed. Plugins
17
16
  are trusted, unsandboxed code running inside the Paseo app.
18
17
 
19
- The server entry requires the local **Paseo 0.12.1-square.1** patch build, based
20
- on official 0.12.0 and adding `agent.delivery_status`. Official 0.12.0 does not
21
- provide that API. The manifest pins the tested patch build rather than claiming
22
- support for an unpatched or hypothetical future official release. The client
23
- card uses custom-message tool rows (#6090).
24
- Square 0.3.69+ provides `details.items` for the collapsed heading. Messages without
25
- those details still expand to their original content.
18
+ Requires Paseo >=0.11.2 with custom-message tool rows (#6090). Square 0.3.69+
19
+ provides `details.items` for the collapsed heading. Messages without those
20
+ details still expand to their original content.
26
21
 
27
22
  ## Display
28
23
 
@@ -45,29 +40,11 @@ and compact layout on narrow displays. Expansion starts at the top-right arrow;
45
40
  collapse returns from the arrow below the expanded content. Removing the plugin restores Paseo's
46
41
  ordinary custom-message row.
47
42
 
48
- ## Native custody evidence
49
-
50
- Paseo renders Claude `peer_message_hold` events as timeline notifications. The
51
- server entry forwards socket observations (original event ID, native session and
52
- message ID, held/released/dropped state, reason and observation time) to
53
- `square claude-mod` over JSON stdin in the agent's working directory. Square
54
- matches a message ID persisted before sending and appends the observation to the
55
- original wake attempt. Unknown message IDs create no evidence. Failures surface
56
- as plugin hook errors; forwarding is bounded to five seconds and honors hook
57
- cancellation.
58
-
59
- `held`, `released` and `dropped` are not queue receipts or proof of consumption.
60
- They never turn `unknown` into `accepted` or authorize a replay. `square harness
61
- doctor delivery` shows the native state and reason, including after the activity is seen.
62
- The `square` executable must resolve to the matching Square release on the daemon's PATH.
63
-
64
43
  ## Develop
65
44
 
66
45
  ```bash
67
46
  cd plugins/paseo
68
47
  npm ci
69
- # Link the SDK from the built Paseo 0.12.1-square.1 source checkout:
70
- npm link --no-save /path/to/paseo/packages/plugin
71
48
  npm run typecheck
72
49
  npm test
73
50
  paseo plugin install "$PWD"
@@ -79,5 +56,4 @@ After editing an installed directory source:
79
56
  paseo plugin reload square
80
57
  ```
81
58
 
82
- Plugin-only reloads need no Paseo restart once the host provides the lifecycle
83
- API. Reloading a plugin cannot add that API to an older daemon. The plugin ID is `square`.
59
+ No Paseo restart is needed. The plugin ID is `square`.
@@ -8,12 +8,12 @@
8
8
  "test": "node --experimental-strip-types --test test/*.test.ts"
9
9
  },
10
10
  "devDependencies": {
11
- "@getpaseo/plugin": "0.12.0",
12
- "@types/node": "^22",
11
+ "@getpaseo/plugin": "0.11.2",
13
12
  "@types/react": "~19.2.0",
13
+ "@types/node": "^22",
14
14
  "react": "19.1.0",
15
15
  "react-native": "0.81.5",
16
16
  "typescript": "^5.9.3",
17
- "zod": "4.4.3"
17
+ "zod": "^4.4.3"
18
18
  }
19
19
  }
@@ -2,6 +2,6 @@
2
2
  "id": "square",
3
3
  "name": "Square",
4
4
  "requirements": {
5
- "paseo": "0.12.1-square.1"
5
+ "paseo": ">=0.11.2"
6
6
  }
7
7
  }
@@ -1,10 +0,0 @@
1
- import type { PluginServerContext } from "@getpaseo/plugin/server";
2
- import { recordDeliveryStatus } from "./server/record-delivery.ts";
3
-
4
- export default function contribute(server: Pick<PluginServerContext, "on">) {
5
- return server.on("agent.delivery_status", async ({ agent, observation }, { signal }) => {
6
- // Agent providers can wrap Claude (for example yescode); the observation identifies the native producer.
7
- if (observation.provider !== "claude" || observation.lane !== "socket" || !observation.eventId) return;
8
- await recordDeliveryStatus(agent.cwd, observation, signal);
9
- });
10
- }
@@ -1,28 +0,0 @@
1
- import { spawnProcess, type AgentDeliveryObservation } from "@getpaseo/plugin/server";
2
-
3
- /** Forward native facts only. Square matches its pre-persisted message ID; no text parsing. */
4
- export async function recordDeliveryStatus(
5
- cwd: string,
6
- observation: AgentDeliveryObservation,
7
- signal: AbortSignal,
8
- ): Promise<void> {
9
- const child = spawnProcess("square", ["claude-mod"], {
10
- cwd, env: process.env, stdio: "pipe", signal, timeout: 5_000,
11
- });
12
- await new Promise<void>((resolve, reject) => {
13
- child.once("error", reject);
14
- child.stdin.once("error", reject);
15
- // Output contains no user-facing content. Drain both pipes; the bridge exit is authoritative.
16
- child.stdout.resume();
17
- child.stderr.resume();
18
- child.once("close", (code, killedBy) => {
19
- if (code === 0) resolve();
20
- else reject(new Error(`Square native status recorder failed (${killedBy ?? code}).`));
21
- });
22
- const { provider, sessionId, messageId, eventId, state, reason, observedAt } = observation;
23
- child.stdin.end(JSON.stringify({ operation: "status", cwd, sessionId, status: {
24
- provider, sessionId, messageId, eventId, state, observedAt,
25
- ...(reason === null ? {} : { reason }),
26
- } }));
27
- });
28
- }