@stevecastaneda/paseo-progress 0.3.3 → 0.3.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.
- package/OVERVIEW.md +1 -1
- package/README.md +11 -1
- package/client/directory.ts +16 -2
- package/client/pills.tsx +1 -2
- package/dist/server/cli.js +21015 -503
- package/package.json +5 -6
- package/dist/server/launcher.js +0 -90
- package/dist/server/lock.js +0 -34
- package/dist/server/paths.js +0 -22
- package/dist/server/progress-file.js +0 -115
- package/dist/server/store.js +0 -205
- package/dist/shared/attachments.js +0 -92
- package/dist/shared/dashboard.js +0 -386
- package/dist/shared/events.js +0 -127
- package/dist/shared/format.js +0 -50
- package/dist/shared/show.js +0 -74
package/OVERVIEW.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Progress gives each worktree a live dashboard for long agent jobs. The agent records its tickets or steps with a `paseo-progress` command, along with what's stuck, questions for you and finished work. The Progress panel in Explorer shows all of it. Needs Paseo 0.9 or later, and Node.js 22.18 or later on the computer running the Paseo daemon.
|
|
2
2
|
|
|
3
|
-
The panel shows how much of the estimated work is done, what the agent is doing right now, and where each ticket stands. A ticket turns stuck when it's blocked or runs past its estimate without an update. Press a ticket to see its timeline, activity, questions and deliverables. Images and text files the agent records open in a preview inside Paseo.
|
|
3
|
+
The panel shows how much of the estimated work is done, what the agent is doing right now, and where each ticket stands. A ticket turns stuck when it's blocked or runs past its estimate without an update. Press a ticket to see its timeline, activity, questions and deliverables. Images and text files the agent records open in a preview inside Paseo. Any other file opens in an app on the computer running the Paseo daemon, and so does a previewed file when you press Open. That's true from your phone too. The app opens on that computer, not on the phone.
|
|
4
4
|
|
|
5
5
|
When the agent needs a decision, it asks a numbered question with lettered options and says which one it recommends. A pill above the message box counts open questions and stuck work. Each option has a Copy button. Paste the answer into the chat and the agent records it.
|
|
6
6
|
|
package/README.md
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
<img src="https://raw.githubusercontent.com/stevecastaneda/paseo-plugins/main/progress/icon.png" alt="" width="64" height="64">
|
|
2
|
+
|
|
1
3
|
# Progress
|
|
2
4
|
|
|
3
5
|
A plugin for Paseo 0.9 and later that gives each worktree a live progress dashboard. Agents record progress with the `paseo-progress` command, which adds one line per change to the worktree's progress file. That file lives outside the repo, so git never sees it. The **Progress** panel draws the dashboard from that file and updates by itself.
|
|
@@ -39,7 +41,7 @@ dir="$(paseo plugin ls progress --json | node -pe 'JSON.parse(require("fs").read
|
|
|
39
41
|
node "$([ -f "$dir/dist/server/cli.js" ] && echo "$dir/dist/server/cli.js" || echo "$dir/server/cli.ts")" install-launcher [path]
|
|
40
42
|
```
|
|
41
43
|
|
|
42
|
-
If `paseo` isn't on your `PATH`, use `/Applications/Paseo.app/Contents/Resources/bin/paseo`. The command doesn't name a plugin folder: each run asks Paseo (`paseo plugin ls`) which copy of the plugin it is running and runs that copy, so it keeps working after updates and `npm run dev` switches. The npm package carries the command
|
|
44
|
+
If `paseo` isn't on your `PATH`, use `/Applications/Paseo.app/Contents/Resources/bin/paseo`. The command doesn't name a plugin folder: each run asks Paseo (`paseo plugin ls`) which copy of the plugin it is running and runs that copy, so it keeps working after updates and `npm run dev` switches. The npm package carries the command as one JavaScript file in `dist/`, built with esbuild when publishing, because Node won't run TypeScript from `node_modules`. That file includes zod (MIT), so installing the plugin downloads no other packages.
|
|
43
45
|
|
|
44
46
|
## Where progress is kept
|
|
45
47
|
|
|
@@ -129,6 +131,14 @@ npm run dev
|
|
|
129
131
|
|
|
130
132
|
## Changelog
|
|
131
133
|
|
|
134
|
+
### 0.3.5
|
|
135
|
+
|
|
136
|
+
- The plugin's page in Paseo's plugin store now says that pressing **Open** in a preview opens the file in an app on the computer running the Paseo daemon, even from your phone.
|
|
137
|
+
|
|
138
|
+
### 0.3.4
|
|
139
|
+
|
|
140
|
+
- Installing the plugin no longer downloads any other npm packages. The `paseo-progress` command is now built into a single file that includes zod. The plugin used to install `@getpaseo/client` just for its types; it now gets them from the plugin SDK that Paseo already provides.
|
|
141
|
+
|
|
132
142
|
### 0.3.3
|
|
133
143
|
|
|
134
144
|
- The skill now has subagents record their own progress, so the dashboard stops warning "possibly stale" while they work. Since Paseo 0.11, an agent waiting on background subagents shows as idle. After 15 minutes with no update, the dashboard said the work may have stopped even though the subagents were still at it. Now the agent gives each subagent the worktree path and ticket id, and the subagent records its stages and a ticker line. If the Progress panel shows **Update skill** after you update, press it so agents get the new instructions.
|
package/client/directory.ts
CHANGED
|
@@ -1,10 +1,24 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { getPaseoClient } from "@getpaseo/plugin/client";
|
|
2
|
+
|
|
3
|
+
// Paseo's client types are read through the plugin SDK, which Paseo provides.
|
|
4
|
+
// Importing them from @getpaseo/client would make Paseo require that package
|
|
5
|
+
// installed alongside the plugin, even though only its types are used.
|
|
6
|
+
type PaseoApi = ReturnType<typeof getPaseoClient>;
|
|
7
|
+
type Handler<Subscribe> = Subscribe extends (handler: infer H) => unknown ? H : never;
|
|
8
|
+
export type PaseoAgentUpdate = Parameters<Handler<PaseoApi["agents"]["subscribe"]>>[0];
|
|
9
|
+
export type PaseoWorkspaceUpdate = Parameters<Handler<PaseoApi["workspaces"]["subscribe"]>>[0];
|
|
10
|
+
type Message = Parameters<
|
|
11
|
+
Parameters<NonNullable<Awaited<ReturnType<PaseoApi["agents"]["list"]>>["subscription"]>["subscribe"]>[0]["update"]
|
|
12
|
+
>[0];
|
|
13
|
+
type OwnedSubscription<T> = {
|
|
14
|
+
subscribe(observer: { snapshot(snapshot: T): void; update(message: Message): void; error?(error: unknown): void }): () => void;
|
|
15
|
+
release(): Promise<void>;
|
|
16
|
+
};
|
|
2
17
|
|
|
3
18
|
type Page = {
|
|
4
19
|
entries: unknown[];
|
|
5
20
|
pageInfo: { hasMore: boolean; nextCursor?: string | null };
|
|
6
21
|
};
|
|
7
|
-
type Message = Parameters<SubscriptionObserver<unknown>["update"]>[0];
|
|
8
22
|
|
|
9
23
|
// Paseo 0.9 returns an owned subscription from list({ subscribe: {} }). It
|
|
10
24
|
// delivers the first page as a snapshot, again after every reconnect, then the
|
package/client/pills.tsx
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
|
-
import type { PaseoAgentUpdate, PaseoWorkspaceUpdate } from "@getpaseo/client";
|
|
2
1
|
import type { PluginButtonContentProps, PluginButtonIconProps, PluginButtonRegistration, PluginClientContext } from "@getpaseo/plugin/client";
|
|
3
2
|
import { Icon } from "@getpaseo/plugin/client/react-native";
|
|
4
3
|
import React, { useSyncExternalStore } from "react";
|
|
5
4
|
import { Platform } from "react-native";
|
|
6
5
|
import { type AttentionResult, getAttention } from "../shared/rpc";
|
|
7
6
|
import { isIdle, type Pill, pillFor } from "./pill-state";
|
|
8
|
-
import { observeDirectory } from "./directory";
|
|
7
|
+
import { observeDirectory, type PaseoAgentUpdate, type PaseoWorkspaceUpdate } from "./directory";
|
|
9
8
|
import { onPanelOpened } from "./panel-opened";
|
|
10
9
|
import { IconSwap } from "./motion";
|
|
11
10
|
import { Spinner } from "./spinner";
|