@diegopetrucci/pi-extensions 0.1.76 → 0.1.79

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.
Files changed (63) hide show
  1. package/README.md +8 -8
  2. package/extensions/agent-workflow-audit/README.md +1 -1
  3. package/extensions/agent-workflow-audit/index.ts +275 -59
  4. package/extensions/agent-workflow-audit/package.json +1 -1
  5. package/extensions/annotate-git-diff/git.ts +0 -8
  6. package/extensions/annotate-git-diff/glimpseui.d.ts +5 -65
  7. package/extensions/annotate-git-diff/package.json +1 -1
  8. package/extensions/annotate-last-message/glimpseui.d.ts +5 -65
  9. package/extensions/annotate-last-message/package.json +1 -1
  10. package/extensions/annotate-last-message/web/index.html +3 -30
  11. package/extensions/code-reviewer/README.md +5 -5
  12. package/extensions/code-reviewer/index.ts +252 -82
  13. package/extensions/code-reviewer/package.json +1 -1
  14. package/extensions/confirm-destructive/index.ts +2 -8
  15. package/extensions/confirm-destructive/package.json +1 -1
  16. package/extensions/context-cap/README.md +9 -9
  17. package/extensions/context-cap/index.ts +3 -3
  18. package/extensions/context-cap/package.json +2 -2
  19. package/extensions/context-inspector/index.ts +2 -46
  20. package/extensions/context-inspector/package.json +1 -1
  21. package/extensions/contrarian/README.md +4 -3
  22. package/extensions/contrarian/index.ts +48 -67
  23. package/extensions/contrarian/package.json +1 -1
  24. package/extensions/dirty-repo-guard/index.ts +0 -4
  25. package/extensions/dirty-repo-guard/package.json +1 -1
  26. package/extensions/dynamic-context-pruning/README.md +20 -11
  27. package/extensions/dynamic-context-pruning/index.ts +118 -341
  28. package/extensions/dynamic-context-pruning/package.json +1 -1
  29. package/extensions/fast/README.md +18 -11
  30. package/extensions/fast/index.ts +9 -5
  31. package/extensions/fast/package.json +1 -1
  32. package/extensions/git-footer/index.ts +2 -16
  33. package/extensions/git-footer/package.json +1 -1
  34. package/extensions/inline-bash/index.ts +0 -16
  35. package/extensions/inline-bash/package.json +1 -1
  36. package/extensions/librarian/README.md +1 -1
  37. package/extensions/librarian/index.ts +246 -70
  38. package/extensions/librarian/package.json +1 -1
  39. package/extensions/minimal-footer/README.md +5 -5
  40. package/extensions/minimal-footer/index.ts +5 -26
  41. package/extensions/minimal-footer/minimal-footer.example.json +1 -1
  42. package/extensions/minimal-footer/openai-usage.ts +2 -11
  43. package/extensions/minimal-footer/package.json +1 -1
  44. package/extensions/oracle/README.md +4 -3
  45. package/extensions/oracle/index.ts +46 -65
  46. package/extensions/oracle/package.json +1 -1
  47. package/extensions/permission-gate/README.md +3 -0
  48. package/extensions/permission-gate/index.ts +127 -36
  49. package/extensions/permission-gate/package.json +1 -1
  50. package/extensions/project-mcp-json/README.md +2 -2
  51. package/extensions/project-mcp-json/package.json +1 -1
  52. package/extensions/quiet-tools/.pi-fleet-tested-version +1 -1
  53. package/extensions/quiet-tools/README.md +30 -19
  54. package/extensions/quiet-tools/index.ts +233 -166
  55. package/extensions/quiet-tools/package.json +2 -2
  56. package/extensions/review/README.md +2 -0
  57. package/extensions/review/package.json +1 -1
  58. package/extensions/todo/index.ts +0 -19
  59. package/extensions/todo/package.json +1 -1
  60. package/extensions/triage-comments/README.md +4 -2
  61. package/extensions/triage-comments/index.ts +344 -39
  62. package/extensions/triage-comments/package.json +1 -1
  63. package/package.json +4 -4
@@ -1,6 +1,4 @@
1
1
  declare module "glimpseui" {
2
- import { EventEmitter } from "node:events";
3
-
4
2
  export type FollowMode = "snap" | "spring";
5
3
  export type CursorAnchor =
6
4
  | "top-left"
@@ -32,67 +30,9 @@ declare module "glimpseui" {
32
30
  timeout?: number;
33
31
  }
34
32
 
35
- export interface GlimpseScreenInfo {
36
- width: number;
37
- height: number;
38
- scaleFactor: number;
39
- visibleX?: number;
40
- visibleY?: number;
41
- visibleWidth?: number;
42
- visibleHeight?: number;
43
- x?: number;
44
- y?: number;
45
- }
46
-
47
- export interface GlimpseAppearanceInfo {
48
- darkMode: boolean;
49
- accentColor: string;
50
- reduceMotion: boolean;
51
- increaseContrast: boolean;
52
- }
53
-
54
- export interface GlimpseCursorInfo {
55
- x: number;
56
- y: number;
57
- }
58
-
59
- export interface GlimpseCursorTip {
60
- x: number;
61
- y: number;
62
- }
63
-
64
- export interface GlimpseInfo {
65
- screen: GlimpseScreenInfo;
66
- screens: GlimpseScreenInfo[];
67
- appearance: GlimpseAppearanceInfo;
68
- cursor: GlimpseCursorInfo;
69
- cursorTip: GlimpseCursorTip | null;
70
- }
71
-
72
- export class GlimpseWindow extends EventEmitter {
73
- on(event: "ready", listener: (info: GlimpseInfo) => void): this;
74
- on(event: "message", listener: (data: unknown) => void): this;
75
- on(event: "info", listener: (info: GlimpseInfo) => void): this;
76
- on(event: "closed", listener: () => void): this;
77
- on(event: "error", listener: (error: Error) => void): this;
78
- once(event: "ready", listener: (info: GlimpseInfo) => void): this;
79
- once(event: "message", listener: (data: unknown) => void): this;
80
- once(event: "info", listener: (info: GlimpseInfo) => void): this;
81
- once(event: "closed", listener: () => void): this;
82
- once(event: "error", listener: (error: Error) => void): this;
83
- send(js: string): void;
84
- setHTML(html: string): void;
85
- show(options?: { title?: string }): void;
86
- close(): void;
87
- loadFile(path: string): void;
88
- get info(): GlimpseInfo | null;
89
- getInfo(): void;
90
- followCursor(enabled: boolean, anchor?: CursorAnchor, mode?: FollowMode): void;
91
- }
92
-
93
- export function open(html: string, options?: GlimpseOpenOptions): GlimpseWindow;
94
- export function prompt<T = unknown>(
95
- html: string,
96
- options?: GlimpseOpenOptions,
97
- ): Promise<T | null>;
33
+ export function getNativeHostInfo(): {
34
+ path: string;
35
+ extraArgs?: string[];
36
+ buildHint?: string;
37
+ };
98
38
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@diegopetrucci/pi-annotate-git-diff",
3
- "version": "0.1.13",
3
+ "version": "0.1.15",
4
4
  "description": "A standalone pi extension that adds /annotate-git-diff, a native Glimpse UI for annotating git diffs and sending explicit feedback directly to the agent; close recovery keeps unsent drafts in the editor.",
5
5
  "keywords": [
6
6
  "pi-package",
@@ -1,6 +1,4 @@
1
1
  declare module "glimpseui" {
2
- import { EventEmitter } from "node:events";
3
-
4
2
  export type FollowMode = "snap" | "spring";
5
3
  export type CursorAnchor =
6
4
  | "top-left"
@@ -32,67 +30,9 @@ declare module "glimpseui" {
32
30
  timeout?: number;
33
31
  }
34
32
 
35
- export interface GlimpseScreenInfo {
36
- width: number;
37
- height: number;
38
- scaleFactor: number;
39
- visibleX?: number;
40
- visibleY?: number;
41
- visibleWidth?: number;
42
- visibleHeight?: number;
43
- x?: number;
44
- y?: number;
45
- }
46
-
47
- export interface GlimpseAppearanceInfo {
48
- darkMode: boolean;
49
- accentColor: string;
50
- reduceMotion: boolean;
51
- increaseContrast: boolean;
52
- }
53
-
54
- export interface GlimpseCursorInfo {
55
- x: number;
56
- y: number;
57
- }
58
-
59
- export interface GlimpseCursorTip {
60
- x: number;
61
- y: number;
62
- }
63
-
64
- export interface GlimpseInfo {
65
- screen: GlimpseScreenInfo;
66
- screens: GlimpseScreenInfo[];
67
- appearance: GlimpseAppearanceInfo;
68
- cursor: GlimpseCursorInfo;
69
- cursorTip: GlimpseCursorTip | null;
70
- }
71
-
72
- export class GlimpseWindow extends EventEmitter {
73
- on(event: "ready", listener: (info: GlimpseInfo) => void): this;
74
- on(event: "message", listener: (data: unknown) => void): this;
75
- on(event: "info", listener: (info: GlimpseInfo) => void): this;
76
- on(event: "closed", listener: () => void): this;
77
- on(event: "error", listener: (error: Error) => void): this;
78
- once(event: "ready", listener: (info: GlimpseInfo) => void): this;
79
- once(event: "message", listener: (data: unknown) => void): this;
80
- once(event: "info", listener: (info: GlimpseInfo) => void): this;
81
- once(event: "closed", listener: () => void): this;
82
- once(event: "error", listener: (error: Error) => void): this;
83
- send(js: string): void;
84
- setHTML(html: string): void;
85
- show(options?: { title?: string }): void;
86
- close(): void;
87
- loadFile(path: string): void;
88
- get info(): GlimpseInfo | null;
89
- getInfo(): void;
90
- followCursor(enabled: boolean, anchor?: CursorAnchor, mode?: FollowMode): void;
91
- }
92
-
93
- export function open(html: string, options?: GlimpseOpenOptions): GlimpseWindow;
94
- export function prompt<T = unknown>(
95
- html: string,
96
- options?: GlimpseOpenOptions,
97
- ): Promise<T | null>;
33
+ export function getNativeHostInfo(): {
34
+ path: string;
35
+ extraArgs?: string[];
36
+ buildHint?: string;
37
+ };
98
38
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@diegopetrucci/pi-annotate-last-message",
3
- "version": "0.1.11",
3
+ "version": "0.1.13",
4
4
  "description": "A standalone pi extension that adds /annotate-last-message, a native Glimpse UI for annotating the latest assistant reply.",
5
5
  "keywords": [
6
6
  "pi-package",
@@ -10,8 +10,8 @@
10
10
  * overrides semantic and Markdown colours from ctx.ui.theme. When Pi's theme
11
11
  * cannot provide a token, the matching dark/light fallback remains readable.
12
12
  *
13
- * The --md* fallback values below are kept in sync with the FALLBACK
14
- * object in theme.ts so this template renders correctly when the injected
13
+ * The --md* fallback values below are kept in sync with DARK_FALLBACK
14
+ * in theme.ts so this template renders correctly when the injected
15
15
  * theme block is absent (e.g. opened standalone in a browser for debugging).
16
16
  */
17
17
  :root {
@@ -31,7 +31,7 @@
31
31
  --error: #ffb3b3;
32
32
  --warning: #f4c95d;
33
33
 
34
- /* Markdown token colours — kept in sync with FALLBACK in theme.ts */
34
+ /* Markdown token colours — kept in sync with DARK_FALLBACK in theme.ts */
35
35
  --mdHeading: #f4c95d;
36
36
  --mdLink: #7dd3fc;
37
37
  --mdLinkUrl: #8a8a8a;
@@ -314,9 +314,6 @@
314
314
  margin: 0;
315
315
  }
316
316
 
317
- .markdown-content p { margin: 0; }
318
- .markdown-content p + p { margin-top: 4px; }
319
-
320
317
  .markdown-content a {
321
318
  color: var(--mdLink);
322
319
  text-decoration: underline;
@@ -337,21 +334,6 @@
337
334
  font-family: inherit;
338
335
  }
339
336
 
340
- .markdown-content pre {
341
- background: transparent;
342
- margin: 4px 0;
343
- overflow-x: auto;
344
- border-left: 3px solid var(--mdCodeBlockBorder);
345
- padding-left: 8px;
346
- }
347
-
348
- .markdown-content pre code {
349
- display: block;
350
- background: none;
351
- color: var(--mdCodeBlock, var(--text));
352
- padding: 0;
353
- }
354
-
355
337
  .markdown-content blockquote {
356
338
  border-left: 3px solid var(--mdQuoteBorder);
357
339
  padding-left: 8px;
@@ -360,15 +342,6 @@
360
342
  font-style: italic;
361
343
  }
362
344
 
363
- .markdown-content ul,
364
- .markdown-content ol {
365
- margin: 4px 0;
366
- padding-left: 1.5em;
367
- }
368
-
369
- .markdown-content li { margin: 0; }
370
- .markdown-content li::marker { color: var(--mdListBullet); }
371
-
372
345
  .markdown-content hr {
373
346
  border: none;
374
347
  border-top: 1px solid var(--mdHr);
@@ -1,10 +1,8 @@
1
1
  # code-reviewer
2
2
 
3
- Adds a read-only `code_reviewer` subagent tool that adapts The Last Harness [`code-reviewer`](https://github.com/diegopetrucci/the-last-harness/blob/main/agents/subagents/code-reviewer.md) prompt into a standalone pi extension.
3
+ Adds a `code_reviewer` subagent tool that adapts The Last Harness [`code-reviewer`](https://github.com/diegopetrucci/the-last-harness/blob/main/agents/subagents/code-reviewer.md) prompt into a standalone pi extension.
4
4
 
5
- Use it when you want an isolated second-pass review of a proposed change against the local checkout. The tool stays read-only, checks ticket fit and scope first, then looks for diff mismatches, correctness bugs, security/safety issues, unnecessary complexity, and missing validation.
6
-
7
- This package is adapted from the TLH code-reviewer workflow for use as a standalone pi extension.
5
+ Use it when you want an isolated second-pass review of a proposed change against the local checkout. The subagent uses read-only built-in tools plus any configured MCP tools, checks ticket fit and scope first, then looks for diff mismatches, correctness bugs, security/safety issues, unnecessary complexity, and missing validation.
8
6
 
9
7
  ## Install
10
8
 
@@ -46,7 +44,8 @@ When called, it launches an isolated in-memory child agent with:
46
44
  - an auto-selected review model that prefers contrarian-style opposite-provider and opposite-family candidates before same-provider fallbacks;
47
45
  - automatic model candidates constrained to the current Pi session's model scope when that scope is non-empty;
48
46
  - requested thinking taken from the active session when available, otherwise defaulting to `high` for reasoning models and `off` for non-reasoning models, then clamped to the selected model's supported level;
49
- - read-only tools only: `read`, `grep`, `find`, `ls`, and guarded `bash`;
47
+ - read-only built-in tools: `read`, `grep`, `find`, `ls`, and guarded `bash`;
48
+ - configured MCP tools (run without confirmation in the subagent; may have side effects; use for evidence gathering only; requires host Pi >=1.0.4; older hosts degrade to no MCP, no error); the global `mcp.json` always applies; a project `.pi/mcp.json` is loaded only when the host session has already trusted the project;
50
49
  - a local-checkout path guard for file inspection;
51
50
  - a bash guard that allows only direct read-only `git`, `gh`, or `pwd` invocations.
52
51
 
@@ -65,6 +64,7 @@ The model report is concise and includes a verdict, findings, validation notes,
65
64
 
66
65
  - The subagent is explicitly instructed not to implement changes.
67
66
  - Runtime guards block write/edit tools, shell control operators, pipelines, redirection, path traversal outside the checkout, mutating `git`/`gh` commands, `npm`/publish commands, and other filesystem mutation.
67
+ - Runtime guards apply to built-in tools only; configured MCP tools pass the guard, run without confirmation, and are limited only by prompt guidance.
68
68
  - Built-in file-inspection tools are preferred over shell commands for local files.
69
69
 
70
70
  ## Example