pi-note 0.41.1 → 0.41.2

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.
@@ -315,7 +315,10 @@ function view(data, scoped = false, secondary = false, features = {}, watcherLog
315
315
  const target = field.link && url && url.length <= 2048 ? url : undefined;
316
316
  const width = field.width ?? config.config.fieldWidth;
317
317
  const status = data.fieldStatuses.find((item) => item.field === field.name);
318
- const style = features.fieldEvents && status ? { ...(status.result.display ?? {}), ...(status.stale ? { color: 'muted' } : {}) } : undefined;
318
+ // Terminal PR results stop polling: refresh older cached styles on read.
319
+ const display = field.name === 'PR' && status?.result.state === 'merged'
320
+ ? { color: 'accent', strikethrough: false } : status?.result.display;
321
+ const style = features.fieldEvents && status ? { ...(display ?? {}), ...(status.stale ? { color: 'muted' } : {}) } : undefined;
319
322
  if (features.footerNativeActions) {
320
323
  if (footer.length + (target ? 2 : 1) > 128)
321
324
  break;
@@ -41,7 +41,9 @@ make it executable (`chmod u+x`), and ensure authenticated `gh` and Node are on
41
41
  using an absolute Node path in `ExecStart` alone is insufficient for the watcher's
42
42
  `#!/usr/bin/env node` interpreter. It accepts a GitHub PR URL or Markdown link, checks once, and
43
43
  requests another check in 60 seconds. It warns on failing checks/conflicts and
44
- strikes through merged PRs while keeping their links. Closed/merged PRs stop
44
+ colours merged PRs with the theme accent (purple in Pi's default theme), without
45
+ strikethrough, while keeping their links. Previously cached merged results receive
46
+ the same footer styling without another GitHub check. Closed/merged PRs stop
45
47
  polling; merging never completes the Pinote task. Passing means reported checks
46
48
  passed, not that every review/branch-protection requirement is satisfied.
47
49
 
package/mcp/README.md CHANGED
@@ -162,8 +162,8 @@ Xvfb and private D-Bus; never point them at personal data.
162
162
  Manage `fieldWatchers` in **Settings → Footer fields → Watchers**. Bundled files
163
163
  are discovered disabled; trusted custom executables can be added and enabled.
164
164
  Independent checks survive restarts and settings apply live, without another daemon.
165
- The GitHub PR watcher triggers the owning worker on failed CI/conflicts and strikes
166
- through merged PRs. With pi-note 0.41.1+ on both sides, failed watcher executions
165
+ The GitHub PR watcher triggers the owning worker on failed CI/conflicts and marks
166
+ merged PRs with the theme accent (default purple), without strikethrough. With pi-note 0.41.1+ on both sides, failed watcher executions
167
167
  produce grouped terminal-only notices pointing to the service log; retries do not
168
168
  spam the terminal or trigger model turns. Requires note 0.24.0+. Review the
169
169
  [watcher contract and safeguards](FIELD_EVENTS.md) before enabling trusted code.
package/mcp/core.ts CHANGED
@@ -271,7 +271,10 @@ function view(data: Snapshot, scoped = false, secondary = false, features: { foo
271
271
  const target = field.link && url && url.length <= 2048 ? url : undefined;
272
272
  const width = field.width ?? config.config.fieldWidth;
273
273
  const status = data.fieldStatuses.find((item) => item.field === field.name);
274
- const style = features.fieldEvents && status ? { ...(status.result.display ?? {}), ...(status.stale ? { color: 'muted' as const } : {}) } : undefined;
274
+ // Terminal PR results stop polling: refresh older cached styles on read.
275
+ const display = field.name === 'PR' && status?.result.state === 'merged'
276
+ ? { color: 'accent' as const, strikethrough: false } : status?.result.display;
277
+ const style = features.fieldEvents && status ? { ...(display ?? {}), ...(status.stale ? { color: 'muted' as const } : {}) } : undefined;
275
278
  if (features.footerNativeActions) {
276
279
  if (footer.length + (target ? 2 : 1) > 128) break;
277
280
  // Clip before splitting: each field still consumes one field slot, and
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pi-note",
3
- "version": "0.41.1",
3
+ "version": "0.41.2",
4
4
  "description": "Persistent pinote tasks, Markdown handoffs, and task status for Pi",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -51,7 +51,7 @@ export async function handleFieldEvent(event) {
51
51
  const pr = JSON.parse(stdout);
52
52
  const checks = validateResponse(pr);
53
53
  const summary = `PR #${number}`;
54
- if (pr.state === 'MERGED') return { state: 'merged', summary: `${summary} merged`, display: { strikethrough: true, color: 'muted' } };
54
+ if (pr.state === 'MERGED') return { state: 'merged', summary: `${summary} merged`, display: { strikethrough: false, color: 'accent' } };
55
55
  if (pr.state === 'CLOSED') return { state: 'closed', summary: `${summary} closed`, display: { strikethrough: false, color: 'muted' } };
56
56
  const conflict = pr.mergeable === 'CONFLICTING';
57
57
  const failed = checks.filter((check) => check.failed);