@gavin-hu/my-pi-agent 0.15.1 → 0.17.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.
Files changed (189) hide show
  1. package/README.md +22 -13
  2. package/README.zh-CN.md +19 -11
  3. package/extensions/bytefly/README.md +255 -200
  4. package/extensions/bytefly/footer/collect/entries.ts +1 -6
  5. package/extensions/bytefly/footer/collect/snapshot.ts +23 -9
  6. package/extensions/bytefly/footer/price/price.ts +12 -8
  7. package/extensions/bytefly/footer/register.ts +13 -1
  8. package/extensions/bytefly/footer/types.ts +11 -0
  9. package/extensions/bytefly/footer/unpriced.ts +36 -0
  10. package/extensions/bytefly/header/component.ts +15 -29
  11. package/extensions/bytefly/header/identity.ts +71 -0
  12. package/extensions/bytefly/header/register.ts +9 -3
  13. package/extensions/bytefly/index.ts +13 -5
  14. package/extensions/bytefly/message/format.ts +20 -13
  15. package/extensions/bytefly/message/register.ts +8 -7
  16. package/extensions/bytefly/notice/component.ts +6 -4
  17. package/extensions/bytefly/notice/config.ts +16 -2
  18. package/extensions/bytefly/panel/commands.ts +46 -25
  19. package/extensions/bytefly/panel/format.ts +52 -22
  20. package/extensions/bytefly/panel/join.ts +36 -15
  21. package/extensions/bytefly/panel/settings.ts +72 -392
  22. package/extensions/bytefly/panel/skills.ts +51 -0
  23. package/extensions/bytefly/panel/tui/entries.ts +16 -14
  24. package/extensions/bytefly/panel/tui/extensions-view.ts +7 -58
  25. package/extensions/bytefly/panel/tui/frame.ts +11 -3
  26. package/extensions/bytefly/panel/tui/list-view.ts +72 -0
  27. package/extensions/bytefly/panel/tui/nav.ts +71 -3
  28. package/extensions/bytefly/panel/tui/settings-section.ts +250 -0
  29. package/extensions/bytefly/panel/tui/settings-view.ts +8 -12
  30. package/extensions/bytefly/panel/tui/skills-view.ts +50 -0
  31. package/extensions/bytefly/panel/tui.ts +223 -333
  32. package/extensions/bytefly/panel/types.ts +26 -8
  33. package/extensions/bytefly/picker/discovery.ts +32 -27
  34. package/extensions/bytefly/picker/resources.ts +22 -10
  35. package/extensions/bytefly/picker/runtime.ts +62 -34
  36. package/extensions/bytefly/picker/toggle.ts +16 -10
  37. package/extensions/bytefly/picker/types.ts +31 -13
  38. package/extensions/bytefly/update/format.ts +66 -8
  39. package/extensions/bytefly/update/patch.ts +66 -0
  40. package/extensions/bytefly/update/register.ts +4 -11
  41. package/extensions/bytefly/update/release.ts +65 -0
  42. package/extensions/bytefly/update/state.ts +14 -0
  43. package/extensions/bytefly/update/suppress.ts +47 -29
  44. package/extensions/bytefly/update/types.ts +15 -5
  45. package/extensions/bytefly/working/register.ts +2 -8
  46. package/extensions/check/tools.ts +2 -11
  47. package/extensions/check/tui.ts +2 -0
  48. package/extensions/context/README.md +172 -0
  49. package/extensions/context/collect.ts +53 -0
  50. package/extensions/context/commands.ts +100 -0
  51. package/extensions/context/format.ts +84 -0
  52. package/extensions/context/index.ts +16 -0
  53. package/extensions/context/report.ts +332 -0
  54. package/extensions/context/tui.ts +284 -0
  55. package/extensions/context/types.ts +124 -0
  56. package/extensions/file-browse/README.md +67 -19
  57. package/extensions/file-browse/client.ts +16 -463
  58. package/extensions/file-browse/config.ts +8 -0
  59. package/extensions/file-browse/html.ts +9 -7
  60. package/extensions/file-browse/index.ts +17 -2
  61. package/extensions/file-browse/live-client.ts +13 -13
  62. package/extensions/file-browse/live.ts +44 -10
  63. package/extensions/file-browse/markdown.ts +3 -10
  64. package/extensions/file-browse/palette.ts +224 -0
  65. package/extensions/file-browse/raw-html.ts +3 -10
  66. package/extensions/file-browse/router.ts +2 -2
  67. package/extensions/file-browse/server.ts +13 -2
  68. package/extensions/file-browse/styles.ts +8 -3
  69. package/extensions/file-browse/tree.ts +381 -0
  70. package/extensions/file-open/README.md +1 -2
  71. package/extensions/{document → file-read}/README.md +76 -57
  72. package/extensions/{document → file-read}/config.ts +12 -9
  73. package/extensions/{document → file-read}/extract/doc.ts +2 -2
  74. package/extensions/{document → file-read}/extract/docx.ts +3 -3
  75. package/extensions/{document → file-read}/extract/file.ts +9 -9
  76. package/extensions/{document → file-read}/extract/odt.ts +10 -8
  77. package/extensions/{document → file-read}/extract/pdf.ts +3 -3
  78. package/extensions/{document → file-read}/extract/rtf.ts +3 -3
  79. package/extensions/{document → file-read}/extract/xlsx.ts +4 -4
  80. package/extensions/{document → file-read}/formats.ts +11 -11
  81. package/extensions/file-read/index.ts +17 -0
  82. package/extensions/{document → file-read}/paging.ts +15 -13
  83. package/extensions/{document → file-read}/render.ts +17 -13
  84. package/extensions/{document → file-read}/schema.ts +7 -7
  85. package/extensions/{document → file-read}/tool.ts +36 -28
  86. package/extensions/goal/tools.ts +16 -25
  87. package/extensions/job/commands.ts +32 -46
  88. package/extensions/job/index.ts +20 -45
  89. package/extensions/job/runtime.ts +6 -8
  90. package/extensions/job/tools.ts +58 -103
  91. package/extensions/memory/commands.ts +30 -44
  92. package/extensions/memory/tools.ts +10 -20
  93. package/extensions/memory/tui.ts +5 -1
  94. package/extensions/plan/README.md +88 -33
  95. package/extensions/plan/commands.ts +19 -4
  96. package/extensions/plan/config.ts +27 -0
  97. package/extensions/plan/plan-index.ts +3 -1
  98. package/extensions/plan/plans.ts +31 -13
  99. package/extensions/plan/review.ts +34 -14
  100. package/extensions/plan/runtime.ts +3 -1
  101. package/extensions/plan/steps.ts +43 -14
  102. package/extensions/plan/tools/cancel.ts +79 -0
  103. package/extensions/plan/tools/enter.ts +16 -17
  104. package/extensions/plan/tools/exit.ts +60 -50
  105. package/extensions/plan/tools/steps.ts +13 -26
  106. package/extensions/plan/tools/write.ts +30 -38
  107. package/extensions/plan/tools.ts +5 -2
  108. package/extensions/plan/tui.ts +9 -7
  109. package/extensions/plan/types.ts +8 -0
  110. package/extensions/plan/web-chrome.ts +101 -0
  111. package/extensions/plan/web-client.ts +98 -311
  112. package/extensions/plan/web-markdown.ts +222 -0
  113. package/extensions/plan/web-page.ts +28 -2
  114. package/extensions/plan/web-router.ts +2 -2
  115. package/extensions/plan/web.ts +21 -12
  116. package/extensions/question/tools.ts +5 -4
  117. package/extensions/rewind/checklist.ts +4 -0
  118. package/extensions/rewind/review-tui.ts +3 -1
  119. package/extensions/rewind/rewind-tui.ts +4 -0
  120. package/extensions/subagent/README.md +25 -12
  121. package/extensions/subagent/background.ts +1 -7
  122. package/extensions/subagent/format.ts +72 -25
  123. package/extensions/subagent/index.ts +21 -47
  124. package/extensions/subagent/orchestrate.ts +18 -41
  125. package/extensions/subagent/render.ts +29 -42
  126. package/extensions/subagent/stream.ts +24 -18
  127. package/extensions/subagent/types.ts +7 -0
  128. package/extensions/todo/tools.ts +15 -20
  129. package/extensions/todo/tui.ts +5 -1
  130. package/extensions/watch/README.md +5 -5
  131. package/extensions/watch/commands.ts +33 -47
  132. package/extensions/watch/index.ts +10 -35
  133. package/extensions/watch/runtime.ts +5 -7
  134. package/extensions/watch/tools.ts +38 -77
  135. package/extensions/web-access/README.md +3 -3
  136. package/extensions/web-access/search/search.ts +9 -18
  137. package/extensions/wechat/README.md +40 -18
  138. package/extensions/wechat/bridge.ts +38 -40
  139. package/extensions/wechat/client.ts +1 -4
  140. package/extensions/wechat/commands.ts +1 -1
  141. package/extensions/wechat/interaction.ts +25 -4
  142. package/extensions/wechat/login-screen.ts +2 -3
  143. package/extensions/wechat/notices.ts +7 -5
  144. package/extensions/wechat/prompt.ts +19 -4
  145. package/extensions/wechat/qrcode.ts +9 -9
  146. package/extensions/wechat/slash.ts +14 -0
  147. package/extensions/wechat/status-screen.ts +2 -2
  148. package/extensions/wechat/timer.ts +9 -30
  149. package/extensions/wechat/tools.ts +7 -18
  150. package/extensions/worktree/README.md +48 -12
  151. package/extensions/worktree/commands.ts +109 -65
  152. package/extensions/worktree/enter.ts +1 -1
  153. package/extensions/worktree/exit.ts +11 -1
  154. package/extensions/worktree/lifecycle.ts +9 -1
  155. package/extensions/worktree/screen.ts +263 -0
  156. package/extensions/worktree/status.ts +84 -38
  157. package/lib/README.md +15 -11
  158. package/lib/config.ts +12 -0
  159. package/lib/escape.ts +15 -2
  160. package/lib/format.ts +6 -2
  161. package/lib/interaction.ts +18 -1
  162. package/lib/pdf.ts +2 -2
  163. package/lib/report.ts +75 -2
  164. package/lib/requirements.ts +2 -2
  165. package/lib/screen-session.ts +85 -0
  166. package/lib/timer.ts +61 -0
  167. package/lib/tool-result.ts +54 -4
  168. package/lib/tui/README.md +19 -11
  169. package/lib/tui/chrome.ts +27 -6
  170. package/lib/tui/columns.ts +33 -8
  171. package/lib/tui/dock-screen.ts +6 -2
  172. package/lib/tui/gauge.ts +9 -5
  173. package/lib/tui/rows.ts +15 -6
  174. package/lib/tui/rules.ts +4 -8
  175. package/lib/tui/tool.ts +55 -2
  176. package/lib/usage.ts +26 -0
  177. package/lib/web/README.md +131 -0
  178. package/lib/web/base.ts +19 -2
  179. package/lib/web/components.ts +10 -6
  180. package/lib/web/layout.ts +2 -0
  181. package/lib/web/markup.ts +2 -1
  182. package/lib/web/runtime.ts +103 -25
  183. package/lib/web/tokens.ts +23 -7
  184. package/package.json +10 -4
  185. package/skills/changelog/SKILL.md +148 -0
  186. package/skills/next/SKILL.md +184 -0
  187. package/extensions/document/index.ts +0 -17
  188. /package/extensions/{document → file-read}/deadline.ts +0 -0
  189. /package/extensions/{document → file-read}/extract/vendor.d.ts +0 -0
@@ -37,7 +37,7 @@ import {
37
37
  import { isCloseKey } from "../../lib/tui/cursor.ts";
38
38
  import { gaugeBar } from "../../lib/tui/gauge.ts";
39
39
  import { GLYPHS } from "../../lib/tui/glyphs.ts";
40
- import { titleRule } from "../../lib/tui/rules.ts";
40
+ import { plainRule, titleRule } from "../../lib/tui/rules.ts";
41
41
  import { emptyState, checkbox } from "../../lib/tui/rows.ts";
42
42
  import { paint } from "../../lib/tui/tokens.ts";
43
43
  import { planTitle, type StoredPlan } from "./plans.ts";
@@ -45,7 +45,7 @@ import { changedSections, sanitizePlanText, type SectionDigest } from "./plan-te
45
45
  import { extractPlanSections } from "./steps.ts";
46
46
 
47
47
  /** What the user chose from the read/review screen. */
48
- export type PlanViewAction = "approve" | "refine" | "keep" | "browser";
48
+ export type PlanViewAction = "approve" | "refine" | "keep" | "browser" | "cancel";
49
49
 
50
50
  /** A plan section's rendered start line, for navigation and the current-section label. */
51
51
  interface SectionOffset {
@@ -87,7 +87,7 @@ export interface PlanViewOptions {
87
87
 
88
88
  /** Rows the screen shows when the terminal height is unknown. */
89
89
  const DEFAULT_ROWS = 20;
90
- /** Header, blanks, footer, and trailing rows around a non-empty plan. */
90
+ /** Header, blanks, footer, and closing rule around a non-empty plan. */
91
91
  const CHROME_ROWS = 5;
92
92
  /** Narrowest width where Markdown's 2-column padding still fits the body. */
93
93
  const MIN_PADDED_WIDTH = 6;
@@ -97,13 +97,14 @@ const BODY_PADDING = 2;
97
97
  const GAUGE_SEGMENTS = 10;
98
98
  /** Footer hints shared by the review and the inline editor's primary actions. */
99
99
  const PRIMARY_HINTS: ScreenHint[] = [
100
- "Esc keep planning",
101
- { text: "a approve & run", color: "success" },
100
+ "Esc keep plan",
101
+ { text: "a approve", color: "success" },
102
102
  { text: "r refine", color: "accent" },
103
103
  { text: "w browser", color: "accent" },
104
+ { text: "x exit plan", color: "warning" },
104
105
  ];
105
106
  /** Scroll keys appended to the review footer while the plan overflows. */
106
- const SCROLL_HINTS: ScreenHint[] = ["↑/↓ or k/j scroll", "space/b page", "g/G ends"];
107
+ const SCROLL_HINTS: ScreenHint[] = ["j/k scroll", "space page", "g/G ends"];
107
108
  /** Section-jump hint, shown when the plan has more than one heading section. */
108
109
  const SECTION_HINTS: ScreenHint[] = ["n/p section"];
109
110
 
@@ -332,6 +333,7 @@ export class PlanViewComponent implements Component {
332
333
  else if (data === "a") this.options.onClose("approve");
333
334
  else if (data === "r") this.startRefine();
334
335
  else if (data === "w") this.options.onClose("browser");
336
+ else if (data === "x") this.options.onClose("cancel");
335
337
  }
336
338
 
337
339
  /** Wheel scrolling in fullscreen; regular mode leaves the wheel to the terminal. */
@@ -403,7 +405,7 @@ export class PlanViewComponent implements Component {
403
405
  this.maxOffset > 0 ? [...PRIMARY_HINTS, ...SCROLL_HINTS, ...sectionHints] : PRIMARY_HINTS;
404
406
  lines.push(screenHint(theme, w, hints));
405
407
  }
406
- lines.push("");
408
+ lines.push(plainRule(theme, w));
407
409
  return lines;
408
410
  }
409
411
  }
@@ -74,6 +74,14 @@ export interface ExitPlanModeDetails {
74
74
  refinement?: string;
75
75
  /** Comments the review carried when it approved or requested a refinement. */
76
76
  annotations?: PlanAnnotation[];
77
+ /** True when the user left plan mode without approving the plan. */
78
+ cancelled?: boolean;
77
79
  /** True when no interactive UI was available to ask for approval. */
78
80
  unavailable?: boolean;
79
81
  }
82
+
83
+ /** Structured result carried in `cancel_plan_mode`'s `details`. */
84
+ export interface CancelPlanModeDetails {
85
+ /** True when plan mode was on and has now been turned off. */
86
+ cancelled: boolean;
87
+ }
@@ -0,0 +1,101 @@
1
+ /**
2
+ * The review page's chrome: what the page says about itself.
3
+ *
4
+ * It is a fragment of the same IIFE `web-client.ts` ships (`WEB_CHROME_JS` is
5
+ * interpolated into `REVIEW_CLIENT_JS`), kept in its own module so the state
6
+ * chip, the status line, and the header are read together and away from the
7
+ * document rendering. It paints only text it was handed.
8
+ */
9
+
10
+ export const WEB_CHROME_JS = String.raw` function setStatus(text, kind) {
11
+ if (!statusEl) return;
12
+ statusEl.textContent = text || "";
13
+ statusEl.title = text || "";
14
+ statusEl.className = kind ? "bf-status bf-status--" + kind : "bf-status";
15
+ }
16
+
17
+ // The always-visible header chip: connection, comment count, and whether
18
+ // there are edits the file does not have yet.
19
+ function updateState() {
20
+ if (!stateEl) return;
21
+ var label;
22
+ var tone = "";
23
+ if (approved) {
24
+ label = "Approved";
25
+ tone = "success";
26
+ } else if (saved) {
27
+ label = "Saved";
28
+ tone = "success";
29
+ } else if (closed) {
30
+ // Settled by the user, not by a dropped stream: never flash Offline.
31
+ label = "Closed";
32
+ } else if (connected === true) {
33
+ label = "Connected";
34
+ tone = "success";
35
+ } else if (everConnected) {
36
+ // Only after the stream has opened once: an error before that is a
37
+ // transient initial connect, so keep showing Connecting rather than Offline.
38
+ label = "Offline";
39
+ tone = "danger";
40
+ } else {
41
+ label = "Connecting\u2026";
42
+ }
43
+ var count = annotations.length;
44
+ label += " \u00b7 " + count + (count === 1 ? " comment" : " comments");
45
+ if (dirty && !saved && !approved && !closed) {
46
+ label += " \u00b7 unsaved";
47
+ if (!tone) tone = "warn";
48
+ }
49
+ stateEl.textContent = label;
50
+ stateEl.className = "bf-chip bf-chip--accent review-state" + (tone ? " bf-chip--" + tone : "");
51
+ }
52
+
53
+ function renderHeader() {
54
+ var titleEl = document.getElementById("plan-title");
55
+ if (titleEl && data.title) {
56
+ titleEl.textContent = data.title;
57
+ titleEl.title = data.title;
58
+ }
59
+ if (data.title) document.title = "Plan review \u00b7 " + data.title;
60
+ }
61
+
62
+ function updateProgress() {
63
+ if (!progressEl) return;
64
+ var doc = document.scrollingElement || document.documentElement;
65
+ var top = doc ? doc.scrollTop : 0;
66
+ var height = doc ? doc.scrollHeight : 0;
67
+ var view = doc ? doc.clientHeight : 0;
68
+ if (planEl && planEl.scrollHeight > planEl.clientHeight + 4) {
69
+ top = planEl.scrollTop; height = planEl.scrollHeight; view = planEl.clientHeight;
70
+ }
71
+ var max = height - view;
72
+ var percent = max > 0 ? Math.min(100, Math.max(0, (top / max) * 100)) : 0;
73
+ progressEl.style.width = percent + "%";
74
+ }
75
+
76
+ function lockActions() {
77
+ if (approveButton) approveButton.disabled = true;
78
+ if (saveButton) saveButton.disabled = true;
79
+ if (cancelButton) cancelButton.disabled = true;
80
+ }
81
+
82
+ // A conflict means the file moved under the page; only a reload can re-anchor.
83
+ function offerReload() {
84
+ if (document.getElementById("reload")) return;
85
+ var controls = document.querySelector(".review-controls");
86
+ if (!controls) return;
87
+ var reload = el("button");
88
+ reload.type = "button";
89
+ reload.id = "reload";
90
+ reload.className = "bf-btn bf-btn--primary";
91
+ reload.textContent = "Reload";
92
+ reload.addEventListener("click", function () { window.location.reload(); });
93
+ controls.appendChild(reload);
94
+ }
95
+
96
+ // The stream exists only to notice a closed tab. Once the review is settled it
97
+ // has no job, and leaving it open retries a dead port until the tab closes.
98
+ function settleStream() {
99
+ if (stream && stream.close) { stream.close(); stream = null; }
100
+ }
101
+ `;