@arvoretech/pi-prs-tracker 1.0.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 +36 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +308 -0
- package/dist/index.js.map +1 -0
- package/package.json +45 -0
package/README.md
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# @arvoretech/pi-prs-tracker
|
|
2
|
+
|
|
3
|
+
Keeps your open and recently-merged PRs pinned in the chat as a persistent widget. PRs are auto-detected from `gh pr create` calls (and any GitHub PR URL) the agent runs during the session, and their status is refreshed in the background.
|
|
4
|
+
|
|
5
|
+
## Install
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
pi install npm:@arvoretech/pi-prs-tracker
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
Or in `.pi/settings.json`:
|
|
12
|
+
|
|
13
|
+
```json
|
|
14
|
+
{
|
|
15
|
+
"packages": ["npm:@arvoretech/pi-prs-tracker"]
|
|
16
|
+
}
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## How it works
|
|
20
|
+
|
|
21
|
+
- Listens to `bash` tool executions. When a command contains `gh pr create` or its output prints a `github.com/<owner>/<repo>/pull/<n>` URL, the PR is captured automatically.
|
|
22
|
+
- For each tracked PR it runs `gh pr view <n> --json ...` to read title and state.
|
|
23
|
+
- A widget pinned above the editor lists every tracked PR with its state and URL:
|
|
24
|
+
- `[open]` / `[draft]` / `[merged]` / `[closed]`
|
|
25
|
+
- Background polling (every 60s) refreshes statuses. Merged PRs stay for 24h, closed PRs drop off immediately.
|
|
26
|
+
|
|
27
|
+
## Commands
|
|
28
|
+
|
|
29
|
+
- `/prs` — show usage
|
|
30
|
+
- `/prs hide` — hide the widget
|
|
31
|
+
- `/prs show` — re-show the widget
|
|
32
|
+
- `/prs refresh` — force an immediate status refresh
|
|
33
|
+
|
|
34
|
+
## Requirements
|
|
35
|
+
|
|
36
|
+
- GitHub CLI (`gh`) authenticated in the working directory.
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AA4QpE,MAAM,CAAC,OAAO,UAAU,mBAAmB,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI,CAyElE"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,308 @@
|
|
|
1
|
+
import { execSync } from "node:child_process";
|
|
2
|
+
import { existsSync, readFileSync, writeFileSync, mkdirSync } from "node:fs";
|
|
3
|
+
import { join, dirname, basename } from "node:path";
|
|
4
|
+
const POLL_INTERVAL_MS = 60_000;
|
|
5
|
+
const MERGED_RETENTION_MS = 24 * 60 * 60 * 1000;
|
|
6
|
+
const PR_URL_RE = /https?:\/\/github\.com\/([^/\s]+\/[^/\s]+)\/pull\/(\d+)/g;
|
|
7
|
+
const STATE_DIR = ".pi/prs-tracker-sessions";
|
|
8
|
+
const tracked = new Map();
|
|
9
|
+
let hidden = false;
|
|
10
|
+
let widgetVisible = false;
|
|
11
|
+
let pollTimer = null;
|
|
12
|
+
let uiCtx = null;
|
|
13
|
+
let sessionId = `mem-${Date.now()}`;
|
|
14
|
+
function getSessionId(ctx) {
|
|
15
|
+
const file = ctx?.sessionManager?.getSessionFile?.() || "";
|
|
16
|
+
return file ? basename(file, ".json") : sessionId;
|
|
17
|
+
}
|
|
18
|
+
function findHubRoot(cwd) {
|
|
19
|
+
let dir = cwd;
|
|
20
|
+
for (let i = 0; i < 12; i++) {
|
|
21
|
+
if (existsSync(join(dir, ".pi")) || existsSync(join(dir, ".git")))
|
|
22
|
+
return dir;
|
|
23
|
+
const parent = dirname(dir);
|
|
24
|
+
if (parent === dir)
|
|
25
|
+
break;
|
|
26
|
+
dir = parent;
|
|
27
|
+
}
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
function getStatePath(cwd) {
|
|
31
|
+
const root = findHubRoot(cwd);
|
|
32
|
+
return root ? join(root, STATE_DIR, `${sessionId}.json`) : null;
|
|
33
|
+
}
|
|
34
|
+
function saveState(cwd) {
|
|
35
|
+
const path = getStatePath(cwd);
|
|
36
|
+
if (!path)
|
|
37
|
+
return;
|
|
38
|
+
try {
|
|
39
|
+
mkdirSync(dirname(path), { recursive: true });
|
|
40
|
+
writeFileSync(path, JSON.stringify({ hidden, prs: [...tracked.values()] }, null, 2));
|
|
41
|
+
}
|
|
42
|
+
catch { }
|
|
43
|
+
}
|
|
44
|
+
function loadState(cwd) {
|
|
45
|
+
const path = getStatePath(cwd);
|
|
46
|
+
if (!path || !existsSync(path))
|
|
47
|
+
return;
|
|
48
|
+
try {
|
|
49
|
+
const state = JSON.parse(readFileSync(path, "utf-8"));
|
|
50
|
+
hidden = Boolean(state.hidden);
|
|
51
|
+
tracked.clear();
|
|
52
|
+
for (const pr of state.prs ?? []) {
|
|
53
|
+
if (pr && typeof pr.number === "number" && pr.repo) {
|
|
54
|
+
tracked.set(keyOf(pr.repo, pr.number), pr);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
catch { }
|
|
59
|
+
}
|
|
60
|
+
function keyOf(repo, number) {
|
|
61
|
+
return `${repo}#${number}`;
|
|
62
|
+
}
|
|
63
|
+
function runGh(args) {
|
|
64
|
+
try {
|
|
65
|
+
return execSync(`gh ${args}`, { encoding: "utf-8", timeout: 30_000 }).trim();
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
return null;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
function fetchPrDetails(number, repo) {
|
|
72
|
+
const out = runGh(`pr view ${number} --repo ${repo} --json number,title,state,url,isDraft,mergedAt`);
|
|
73
|
+
if (!out)
|
|
74
|
+
return null;
|
|
75
|
+
try {
|
|
76
|
+
const data = JSON.parse(out);
|
|
77
|
+
return {
|
|
78
|
+
number: data.number,
|
|
79
|
+
repo,
|
|
80
|
+
title: data.title,
|
|
81
|
+
url: data.url,
|
|
82
|
+
state: data.state ?? "OPEN",
|
|
83
|
+
isDraft: Boolean(data.isDraft),
|
|
84
|
+
mergedAt: data.mergedAt ? new Date(data.mergedAt).getTime() : null,
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
catch {
|
|
88
|
+
return null;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
function trackPr(number, repo) {
|
|
92
|
+
const details = fetchPrDetails(number, repo);
|
|
93
|
+
if (!details)
|
|
94
|
+
return false;
|
|
95
|
+
tracked.set(keyOf(repo, number), details);
|
|
96
|
+
return true;
|
|
97
|
+
}
|
|
98
|
+
function pruneStale() {
|
|
99
|
+
const now = Date.now();
|
|
100
|
+
for (const [key, pr] of tracked) {
|
|
101
|
+
if (pr.state === "CLOSED") {
|
|
102
|
+
tracked.delete(key);
|
|
103
|
+
continue;
|
|
104
|
+
}
|
|
105
|
+
if (pr.state === "MERGED" && pr.mergedAt && now - pr.mergedAt > MERGED_RETENTION_MS) {
|
|
106
|
+
tracked.delete(key);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
function refreshAll() {
|
|
111
|
+
let changed = false;
|
|
112
|
+
for (const [key, pr] of tracked) {
|
|
113
|
+
const updated = fetchPrDetails(pr.number, pr.repo);
|
|
114
|
+
if (updated && JSON.stringify(updated) !== JSON.stringify(pr)) {
|
|
115
|
+
tracked.set(key, updated);
|
|
116
|
+
changed = true;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
pruneStale();
|
|
120
|
+
return changed;
|
|
121
|
+
}
|
|
122
|
+
function extractPrs(text) {
|
|
123
|
+
PR_URL_RE.lastIndex = 0;
|
|
124
|
+
let match;
|
|
125
|
+
while ((match = PR_URL_RE.exec(text)) !== null) {
|
|
126
|
+
const repo = match[1];
|
|
127
|
+
const number = Number(match[2]);
|
|
128
|
+
if (repo && Number.isFinite(number))
|
|
129
|
+
trackPr(number, repo);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
function resultToText(result) {
|
|
133
|
+
if (!result)
|
|
134
|
+
return "";
|
|
135
|
+
if (typeof result === "string")
|
|
136
|
+
return result;
|
|
137
|
+
const parts = [];
|
|
138
|
+
const content = result.content ?? result.output ?? result;
|
|
139
|
+
if (Array.isArray(content)) {
|
|
140
|
+
for (const item of content) {
|
|
141
|
+
if (typeof item === "string")
|
|
142
|
+
parts.push(item);
|
|
143
|
+
else if (item?.text)
|
|
144
|
+
parts.push(String(item.text));
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
else if (typeof content === "string") {
|
|
148
|
+
parts.push(content);
|
|
149
|
+
}
|
|
150
|
+
return parts.join("\n");
|
|
151
|
+
}
|
|
152
|
+
function sortedPrs() {
|
|
153
|
+
const order = (pr) => (pr.state === "OPEN" ? 0 : 1);
|
|
154
|
+
return [...tracked.values()].sort((a, b) => {
|
|
155
|
+
const byState = order(a) - order(b);
|
|
156
|
+
if (byState !== 0)
|
|
157
|
+
return byState;
|
|
158
|
+
return b.number - a.number;
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
function labelFor(pr) {
|
|
162
|
+
if (pr.state === "MERGED")
|
|
163
|
+
return "merged";
|
|
164
|
+
if (pr.state === "CLOSED")
|
|
165
|
+
return "closed";
|
|
166
|
+
if (pr.isDraft)
|
|
167
|
+
return "draft";
|
|
168
|
+
return "open";
|
|
169
|
+
}
|
|
170
|
+
function colorFor(pr) {
|
|
171
|
+
if (pr.state === "MERGED")
|
|
172
|
+
return "accent";
|
|
173
|
+
if (pr.state === "CLOSED")
|
|
174
|
+
return "error";
|
|
175
|
+
if (pr.isDraft)
|
|
176
|
+
return "warning";
|
|
177
|
+
return "success";
|
|
178
|
+
}
|
|
179
|
+
function renderWidget(width, theme) {
|
|
180
|
+
const prs = sortedPrs();
|
|
181
|
+
const lines = [];
|
|
182
|
+
const trunc = (s) => (s.length > width ? `${s.slice(0, width - 1)}…` : s);
|
|
183
|
+
const fg = (color, s) => (theme?.fg ? theme.fg(color, s) : s);
|
|
184
|
+
const bold = (s) => (theme?.bold ? theme.bold(s) : s);
|
|
185
|
+
const open = prs.filter((p) => p.state === "OPEN").length;
|
|
186
|
+
const merged = prs.filter((p) => p.state === "MERGED").length;
|
|
187
|
+
const header = ` PRs — ${open} open${merged ? `, ${merged} merged` : ""}`;
|
|
188
|
+
lines.push(bold(fg("accent", trunc(header))));
|
|
189
|
+
const max = 12;
|
|
190
|
+
for (const pr of prs.slice(0, max)) {
|
|
191
|
+
const color = colorFor(pr);
|
|
192
|
+
const tag = fg(color, bold(labelFor(pr).toUpperCase()));
|
|
193
|
+
const head = trunc(`#${pr.number} ${pr.title}`);
|
|
194
|
+
lines.push(` ${tag} ${fg("text", head)}`);
|
|
195
|
+
lines.push(` ${fg("mdLinkUrl", trunc(pr.url))}`);
|
|
196
|
+
}
|
|
197
|
+
if (prs.length > max)
|
|
198
|
+
lines.push(fg("dim", ` +${prs.length - max} more`));
|
|
199
|
+
return lines;
|
|
200
|
+
}
|
|
201
|
+
function updateWidget(ctx) {
|
|
202
|
+
uiCtx = ctx;
|
|
203
|
+
if (!ctx?.ui?.setWidget)
|
|
204
|
+
return;
|
|
205
|
+
if (hidden || tracked.size === 0) {
|
|
206
|
+
if (widgetVisible) {
|
|
207
|
+
ctx.ui.setWidget("pi-prs-tracker", undefined);
|
|
208
|
+
widgetVisible = false;
|
|
209
|
+
}
|
|
210
|
+
return;
|
|
211
|
+
}
|
|
212
|
+
ctx.ui.setWidget("pi-prs-tracker", (_tui, theme) => ({
|
|
213
|
+
render(width) {
|
|
214
|
+
return renderWidget(width, theme);
|
|
215
|
+
},
|
|
216
|
+
invalidate() {
|
|
217
|
+
widgetVisible = false;
|
|
218
|
+
},
|
|
219
|
+
}), { placement: "aboveEditor" });
|
|
220
|
+
widgetVisible = true;
|
|
221
|
+
}
|
|
222
|
+
function startPolling(ctx) {
|
|
223
|
+
if (pollTimer)
|
|
224
|
+
return;
|
|
225
|
+
pollTimer = setInterval(() => {
|
|
226
|
+
if (tracked.size === 0)
|
|
227
|
+
return;
|
|
228
|
+
const changed = refreshAll();
|
|
229
|
+
if (changed) {
|
|
230
|
+
saveState(ctx?.cwd ?? uiCtx?.cwd ?? process.cwd());
|
|
231
|
+
updateWidget(ctx);
|
|
232
|
+
}
|
|
233
|
+
}, POLL_INTERVAL_MS);
|
|
234
|
+
if (typeof pollTimer.unref === "function")
|
|
235
|
+
pollTimer.unref();
|
|
236
|
+
}
|
|
237
|
+
function stopPolling() {
|
|
238
|
+
if (pollTimer) {
|
|
239
|
+
clearInterval(pollTimer);
|
|
240
|
+
pollTimer = null;
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
export default function prsTrackerExtension(pi) {
|
|
244
|
+
pi.on("session_start", async (_event, ctx) => {
|
|
245
|
+
sessionId = getSessionId(ctx);
|
|
246
|
+
loadState(ctx?.cwd ?? process.cwd());
|
|
247
|
+
if (tracked.size > 0)
|
|
248
|
+
refreshAll();
|
|
249
|
+
startPolling(ctx);
|
|
250
|
+
updateWidget(ctx);
|
|
251
|
+
});
|
|
252
|
+
pi.on("session_shutdown", async () => {
|
|
253
|
+
stopPolling();
|
|
254
|
+
});
|
|
255
|
+
pi.on("tool_execution_end", async (event, ctx) => {
|
|
256
|
+
const name = event?.toolName;
|
|
257
|
+
if (name !== "bash" || event?.isError)
|
|
258
|
+
return;
|
|
259
|
+
const before = tracked.size;
|
|
260
|
+
const beforeSnapshot = JSON.stringify([...tracked.values()]);
|
|
261
|
+
const cwd = ctx?.cwd ?? process.cwd();
|
|
262
|
+
const command = event?.args?.command ?? "";
|
|
263
|
+
const resultText = resultToText(event?.result);
|
|
264
|
+
extractPrs(`${command}\n${resultText}`);
|
|
265
|
+
if (tracked.size !== before || JSON.stringify([...tracked.values()]) !== beforeSnapshot) {
|
|
266
|
+
saveState(cwd);
|
|
267
|
+
updateWidget(ctx);
|
|
268
|
+
}
|
|
269
|
+
});
|
|
270
|
+
pi.registerCommand("prs", {
|
|
271
|
+
description: "Manage the pinned PRs widget. Usage: /prs [show|hide|refresh]",
|
|
272
|
+
handler: async (args, ctx) => {
|
|
273
|
+
const sub = (args ?? "").trim().toLowerCase();
|
|
274
|
+
switch (sub) {
|
|
275
|
+
case "hide":
|
|
276
|
+
hidden = true;
|
|
277
|
+
saveState(ctx?.cwd ?? process.cwd());
|
|
278
|
+
updateWidget(ctx);
|
|
279
|
+
ctx.ui.notify("PRs widget oculto. Use /prs show para reexibir.", "info");
|
|
280
|
+
break;
|
|
281
|
+
case "show":
|
|
282
|
+
hidden = false;
|
|
283
|
+
saveState(ctx?.cwd ?? process.cwd());
|
|
284
|
+
updateWidget(ctx);
|
|
285
|
+
ctx.ui.notify(tracked.size === 0
|
|
286
|
+
? "Nenhum PR rastreado ainda nesta sessão."
|
|
287
|
+
: "PRs widget visível.", "info");
|
|
288
|
+
break;
|
|
289
|
+
case "refresh":
|
|
290
|
+
case "": {
|
|
291
|
+
if (sub === "refresh") {
|
|
292
|
+
refreshAll();
|
|
293
|
+
saveState(ctx?.cwd ?? process.cwd());
|
|
294
|
+
updateWidget(ctx);
|
|
295
|
+
ctx.ui.notify(`PRs atualizados (${tracked.size} rastreado(s)).`, "info");
|
|
296
|
+
}
|
|
297
|
+
else {
|
|
298
|
+
ctx.ui.notify("Usage: /prs [show|hide|refresh]", "info");
|
|
299
|
+
}
|
|
300
|
+
break;
|
|
301
|
+
}
|
|
302
|
+
default:
|
|
303
|
+
ctx.ui.notify("Usage: /prs [show|hide|refresh]", "warning");
|
|
304
|
+
}
|
|
305
|
+
},
|
|
306
|
+
});
|
|
307
|
+
}
|
|
308
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@arvoretech/pi-prs-tracker",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "PI extension that keeps open/recently-merged PRs pinned in the chat as a persistent widget",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"type": "module",
|
|
8
|
+
"files": [
|
|
9
|
+
"dist"
|
|
10
|
+
],
|
|
11
|
+
"scripts": {
|
|
12
|
+
"build": "tsc",
|
|
13
|
+
"dev": "tsc --watch",
|
|
14
|
+
"lint": "tsc --noEmit"
|
|
15
|
+
},
|
|
16
|
+
"peerDependencies": {
|
|
17
|
+
"@earendil-works/pi-coding-agent": ">=0.74.0"
|
|
18
|
+
},
|
|
19
|
+
"devDependencies": {
|
|
20
|
+
"@earendil-works/pi-coding-agent": "latest",
|
|
21
|
+
"@earendil-works/pi-ai": "latest",
|
|
22
|
+
"@types/node": "^20.10.0",
|
|
23
|
+
"typescript": "^5.3.0"
|
|
24
|
+
},
|
|
25
|
+
"pi": {
|
|
26
|
+
"extensions": [
|
|
27
|
+
"./dist/index.js"
|
|
28
|
+
]
|
|
29
|
+
},
|
|
30
|
+
"keywords": [
|
|
31
|
+
"pi-package",
|
|
32
|
+
"pi",
|
|
33
|
+
"extension",
|
|
34
|
+
"pull-request",
|
|
35
|
+
"github",
|
|
36
|
+
"widget"
|
|
37
|
+
],
|
|
38
|
+
"repository": {
|
|
39
|
+
"type": "git",
|
|
40
|
+
"url": "https://github.com/arvoreeducacao/arvore-pi-extensions.git",
|
|
41
|
+
"directory": "packages/prs-tracker"
|
|
42
|
+
},
|
|
43
|
+
"author": "Arvore",
|
|
44
|
+
"license": "MIT"
|
|
45
|
+
}
|