@stevecastaneda/paseo-progress 1.9.0 → 1.10.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.
- package/README.md +5 -1
- package/client/pill-popover.tsx +2 -3
- package/client/pill-state.ts +1 -2
- package/client/pills.tsx +12 -8
- package/index.client.tsx +1 -2
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -24,7 +24,7 @@ The panel lives in Explorer, beside the agent chat, so you can watch both. Open
|
|
|
24
24
|
|
|
25
25
|
<img src="images/4-pill.png" alt="The pill above the message box, showing two questions waiting" width="600">
|
|
26
26
|
|
|
27
|
-
On phones
|
|
27
|
+
On phones with Paseo 0.13 or later, Progress opens in Explorer too. Older phone apps have no Explorer, so there it opens as a tab of its own. On any phone, the pill stays above the message box while a run is open, so there's always a way in. SVG files and videos preview on desktop; on phones they open on the daemon host.
|
|
28
28
|
|
|
29
29
|
The first time a run starts in a worktree whose Progress panel has never been opened, the pill shows a spinner and reads **Progress** instead; pressing it opens the panel. Once the panel has been opened there, the plugin writes an empty `progress-panel-opened` file next to the progress file and the nudge never comes back, even for later runs. It doesn't open the panel by itself because Paseo switches to a workspace to open its panel, which would pull you away from whatever you're looking at.
|
|
30
30
|
|
|
@@ -145,6 +145,10 @@ The progress file, `progress.jsonl`, holds one JSON event per line, each with a
|
|
|
145
145
|
|
|
146
146
|
## Changelog
|
|
147
147
|
|
|
148
|
+
### 1.10.0
|
|
149
|
+
|
|
150
|
+
- [Improved] **Progress opens in Explorer on phones.** On Paseo 0.13 or later, the phone app opens Progress in Explorer, as the desktop app does, and lists it in Explorer's New tab menu. If a Progress tab from an earlier version is still open on your phone, you can close it.
|
|
151
|
+
|
|
148
152
|
### 1.9.0
|
|
149
153
|
|
|
150
154
|
- [Improved] **The pill's popover shows one question at a time.** You used to scroll past every open question to reach the one you wanted. Now **Question 2 of 3** sits at the top with back and next arrows. Copy an answer and the popover opens on the next question the next time you press the pill.
|
package/client/pill-popover.tsx
CHANGED
|
@@ -4,7 +4,6 @@ import React, { useRef, useState } from "react";
|
|
|
4
4
|
import { Text, View } from "react-native";
|
|
5
5
|
import type { Dashboard } from "../shared/dashboard";
|
|
6
6
|
import { useDashboard } from "./dashboard-query";
|
|
7
|
-
import { progressPanel } from "./pills";
|
|
8
7
|
import { PressScale } from "./motion";
|
|
9
8
|
import { type Attachment, isPreviewable, useAttachmentOpener } from "./attachments";
|
|
10
9
|
import { StackedDialog } from "./dialog-stack";
|
|
@@ -33,8 +32,8 @@ export function AttentionPopover({ theme, host, layout, workspaceId, close, open
|
|
|
33
32
|
const colors = theme.colors;
|
|
34
33
|
// Paseo draws the desktop popover on surface1 and the phone sheet on surface0.
|
|
35
34
|
const onSurface1 = !layout.compact;
|
|
36
|
-
//
|
|
37
|
-
const touch =
|
|
35
|
+
// The phone apps are pressed with a finger.
|
|
36
|
+
const touch = layout.platform !== "web";
|
|
38
37
|
const directory = useWorkspace(workspaceId, (workspace) => workspace.directory);
|
|
39
38
|
const query = useDashboard(host.id, workspaceId, directory);
|
|
40
39
|
const dashboard = query.data?.configured ? query.data.dashboard : null;
|
package/client/pill-state.ts
CHANGED
|
@@ -5,8 +5,7 @@ import type { AttentionResult } from "../shared/rpc";
|
|
|
5
5
|
// icon and what pressing it does can't disagree.
|
|
6
6
|
// - "attention": questions waiting or something stuck; opens a popover.
|
|
7
7
|
// - "started": a run whose panel has never been opened; a one-time nudge.
|
|
8
|
-
// - "open": on a phone,
|
|
9
|
-
// phones have no Explorer to open it from.
|
|
8
|
+
// - "open": on a phone, a one-tap way into the panel while a run is open.
|
|
10
9
|
export type Pill =
|
|
11
10
|
| { mode: "attention"; label: string; icon: "stuck" | "questions" }
|
|
12
11
|
| { mode: "started"; label: "Progress"; icon: "started" }
|
package/client/pills.tsx
CHANGED
|
@@ -18,13 +18,17 @@ export const PILL_POLL_MS = 5_000;
|
|
|
18
18
|
// still trigger a check, at most once a poll interval.
|
|
19
19
|
export const IDLE_POLL_EVERY = 6;
|
|
20
20
|
|
|
21
|
-
//
|
|
22
|
-
//
|
|
23
|
-
//
|
|
21
|
+
// Phones on Paseo before 0.13 have no Explorer, so there the panel is a tab of
|
|
22
|
+
// its own. addFilePanel arrived in 0.13, the release that gave phones Explorer.
|
|
23
|
+
// The tab has its own id: Paseo 0.10.1 reopens an existing tab where it
|
|
24
24
|
// already is, and earlier versions of this plugin left a "progress" tab in the
|
|
25
25
|
// phone's hidden Explorer pane, which a plugin can't move or close.
|
|
26
|
-
|
|
27
|
-
|
|
26
|
+
type ProgressPanelPlacement = { id: "progress"; location: "explorer" } | { id: "progress-tab"; location: "workspace" };
|
|
27
|
+
|
|
28
|
+
export function progressPanel(client: PluginClientContext): ProgressPanelPlacement {
|
|
29
|
+
return Platform.OS === "web" || "addFilePanel" in client
|
|
30
|
+
? { id: "progress", location: "explorer" }
|
|
31
|
+
: { id: "progress-tab", location: "workspace" };
|
|
28
32
|
}
|
|
29
33
|
|
|
30
34
|
type Workspace = { id: string; workspaceDirectory?: string; projectRootPath: string };
|
|
@@ -44,7 +48,7 @@ export function contributePills(client: PluginClientContext) {
|
|
|
44
48
|
// The last report per workspace; pillFor turns it into what the pill shows.
|
|
45
49
|
const reports = new Map<string, AttentionResult>();
|
|
46
50
|
let locale = resolveLocale("system");
|
|
47
|
-
const where = { phone:
|
|
51
|
+
const where = { phone: Platform.OS !== "web" };
|
|
48
52
|
const pillOf = (workspaceId: string) => pillFor(reports.get(workspaceId), where, messagesFor(locale));
|
|
49
53
|
// Bumped on each report so a poll that was already in flight can't bring the pill back.
|
|
50
54
|
let openedReports = 0;
|
|
@@ -83,9 +87,9 @@ export function contributePills(client: PluginClientContext) {
|
|
|
83
87
|
);
|
|
84
88
|
}
|
|
85
89
|
|
|
90
|
+
const panel = progressPanel(client);
|
|
86
91
|
const openPanel = (workspaceId: string) => {
|
|
87
|
-
|
|
88
|
-
client.openPanel(id, { workspaceId, location });
|
|
92
|
+
client.openPanel(panel.id, { workspaceId, location: panel.location });
|
|
89
93
|
};
|
|
90
94
|
|
|
91
95
|
const buttonFor = (workspaceId: string, mode: Pill["mode"], label: string) => mode === "attention"
|
package/index.client.tsx
CHANGED
|
@@ -9,7 +9,7 @@ const SETTINGS_ID = "settings";
|
|
|
9
9
|
|
|
10
10
|
export default function contribute(client: PluginClientContext) {
|
|
11
11
|
const stopPills = contributePills(client);
|
|
12
|
-
const panel = progressPanel();
|
|
12
|
+
const panel = progressPanel(client);
|
|
13
13
|
const stopPanel = client.addWorkspacePanel({
|
|
14
14
|
id: panel.id,
|
|
15
15
|
title: "Progress",
|
|
@@ -24,7 +24,6 @@ export default function contribute(client: PluginClientContext) {
|
|
|
24
24
|
icon: "ListChecks",
|
|
25
25
|
keywords: ["dashboard", "tickets", "status", "questions"],
|
|
26
26
|
context: "workspace",
|
|
27
|
-
// Beside the agent chat where Paseo can show both; a tab of its own on phones.
|
|
28
27
|
onSelect({ openPanel }) {
|
|
29
28
|
openPanel(panel.id, { location: panel.location });
|
|
30
29
|
},
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@stevecastaneda/paseo-progress",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.10.0",
|
|
4
4
|
"description": "A live progress dashboard per worktree for Paseo, drawn from a file agents write with the paseo-progress command.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Steve Castaneda",
|