@danypops/pi-papyrus 0.59.3 → 0.59.5

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.
@@ -924,16 +924,17 @@ export default function (pi: ExtensionAPI) {
924
924
  // agent_settled is intentionally later than agent_end: Pi guarantees that
925
925
  // retry, compaction retry, and queued follow-up processing have finished.
926
926
 
927
- pi.on("input", async (event, ctx) => {
927
+ pi.on("input", (event, ctx) => {
928
928
  if (event.source === "extension") return;
929
929
  taskContinuation.onHumanInput();
930
- try {
931
- const sessionId = ctx.sessionManager.getSessionId();
932
- const focus = await callService<Record<string, unknown>, { artifact: Artifact; status: string; pauseReason?: string } | null>(
933
- "tasks.focused",
934
- { session_id: sessionId },
935
- );
936
- if (focus && shouldResumeFocusOnHumanInput(focus.status, focus.pauseReason)) {
930
+ const sessionId = ctx.sessionManager.getSessionId();
931
+ // Input handlers are on Pi's prompt-submission path. Resume bookkeeping is
932
+ // opportunistic and must never hold the user's message behind daemon I/O.
933
+ void callService<Record<string, unknown>, { artifact: Artifact; status: string; pauseReason?: string } | null>("tasks.focused", {
934
+ session_id: sessionId,
935
+ })
936
+ .then(async (focus) => {
937
+ if (!focus || !shouldResumeFocusOnHumanInput(focus.status, focus.pauseReason)) return;
937
938
  await callService("tasks.unpause", {
938
939
  actor: "system",
939
940
  source: "task-continuation",
@@ -947,10 +948,10 @@ export default function (pi: ExtensionAPI) {
947
948
  status: "unpaused",
948
949
  effort: extractDeclaredEffort(focus.artifact.extra),
949
950
  });
950
- }
951
- } catch {
952
- // The daemon may be unavailable during startup, reload, or shutdown.
953
- }
951
+ })
952
+ .catch(() => {
953
+ // The daemon may be unavailable during startup, reload, or shutdown.
954
+ });
954
955
  });
955
956
  pi.on("agent_start", () => {
956
957
  taskContinuation.onAgentStart();
@@ -129,7 +129,9 @@ export function registerNotesVehicle(pi: ExtensionAPI): Promise<RegisteredPiVehi
129
129
  const client = createReconnectingVehicleClient(
130
130
  async () => {
131
131
  const resolved = resolveTarget();
132
- return new RemoteVehicleClient({ baseUrl: resolved.baseUrl, token: resolved.token });
132
+ const remote = new RemoteVehicleClient({ baseUrl: resolved.baseUrl, token: resolved.token });
133
+ await remote.negotiate({ minimumVersion: 1, maximumVersion: 1, requiredCapabilities: [], optionalCapabilities: [] });
134
+ return remote;
133
135
  },
134
136
  {
135
137
  // The random loopback port is process-instance identity for Papyrus: it changes on
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@danypops/pi-papyrus",
3
- "version": "0.59.3",
3
+ "version": "0.59.5",
4
4
  "description": "Pi host extension for Papyrus: native tools, TUI panels, and context injection over the daemon-backed graph store",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -21,9 +21,9 @@
21
21
  "dependencies": {
22
22
  "@danypops/jittor": "^0.19.2",
23
23
  "@danypops/papyrus": "^0.60.10",
24
- "@danypops/vehicle-client": "^0.10.3",
25
- "@danypops/vehicle-core": "^0.18.5",
26
- "@danypops/vehicle-server": "^0.25.2",
24
+ "@danypops/vehicle-client": "^0.10.8",
25
+ "@danypops/vehicle-core": "^0.19.1",
26
+ "@danypops/vehicle-server": "^0.27.1",
27
27
  "beautiful-mermaid": "1.1.3",
28
28
  "malevich-tui-components": "^0.32.1"
29
29
  },