@huseynsnmz/pi-suite 0.0.0-stage → 0.2.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 (274) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/LICENSE +21 -0
  3. package/README.md +88 -2
  4. package/SECURITY.md +5 -0
  5. package/package.json +112 -4
  6. package/packages/board/CHANGELOG.md +340 -0
  7. package/packages/board/CONTRIBUTING.md +7 -0
  8. package/packages/board/LICENSE +21 -0
  9. package/packages/board/README.md +88 -0
  10. package/packages/board/SECURITY.md +19 -0
  11. package/packages/board/docs/how-it-works.md +31 -0
  12. package/packages/board/docs/reference.md +278 -0
  13. package/packages/board/package.json +81 -0
  14. package/packages/board/runner/job-runner-legacy.mjs +68 -0
  15. package/packages/board/runner/job-runner.mjs +834 -0
  16. package/packages/board/runner/pty-runner-legacy.mjs +50 -0
  17. package/packages/board/runner/pty-runner.mjs +2175 -0
  18. package/packages/board/runner/state-coordinator.mjs +673 -0
  19. package/packages/board/runner/state-runner.mjs +203 -0
  20. package/packages/board/runner/title-runner.mjs +80 -0
  21. package/packages/board/src/commands/agent-board.ts +394 -0
  22. package/packages/board/src/commands/attach-decision.mjs +66 -0
  23. package/packages/board/src/commands/attach-flow.ts +251 -0
  24. package/packages/board/src/commands/bg.ts +103 -0
  25. package/packages/board/src/commands/board-model.ts +21 -0
  26. package/packages/board/src/core/atomic.mjs +184 -0
  27. package/packages/board/src/core/attach-delete.mjs +24 -0
  28. package/packages/board/src/core/attach-frame-proof.mjs +870 -0
  29. package/packages/board/src/core/attach-frame-reporter.mjs +648 -0
  30. package/packages/board/src/core/attach-frame-stream.mjs +266 -0
  31. package/packages/board/src/core/attach-view-proof.mjs +709 -0
  32. package/packages/board/src/core/auto-state.mjs +377 -0
  33. package/packages/board/src/core/background-runs.mjs +273 -0
  34. package/packages/board/src/core/code-refs-store.mjs +315 -0
  35. package/packages/board/src/core/code-refs.mjs +913 -0
  36. package/packages/board/src/core/config.mjs +77 -0
  37. package/packages/board/src/core/control-protocol.mjs +482 -0
  38. package/packages/board/src/core/coordinator-client.mjs +633 -0
  39. package/packages/board/src/core/coordinator-journal.mjs +282 -0
  40. package/packages/board/src/core/coordinator-protocol.mjs +14 -0
  41. package/packages/board/src/core/cwd-stats.mjs +114 -0
  42. package/packages/board/src/core/dashboard-render.mjs +10 -0
  43. package/packages/board/src/core/derive.mjs +117 -0
  44. package/packages/board/src/core/diagnostics.mjs +133 -0
  45. package/packages/board/src/core/double-press.mjs +26 -0
  46. package/packages/board/src/core/editor-state-reporter.mjs +112 -0
  47. package/packages/board/src/core/events.mjs +286 -0
  48. package/packages/board/src/core/evidence.mjs +245 -0
  49. package/packages/board/src/core/follow-up-queue.mjs +211 -0
  50. package/packages/board/src/core/foreground-preview-cache.mjs +117 -0
  51. package/packages/board/src/core/foreground-projection-cache.mjs +99 -0
  52. package/packages/board/src/core/frame-witness-update.mjs +35 -0
  53. package/packages/board/src/core/heuristics.mjs +313 -0
  54. package/packages/board/src/core/hold-input.mjs +27 -0
  55. package/packages/board/src/core/host-coordination.mjs +300 -0
  56. package/packages/board/src/core/host-crash.mjs +79 -0
  57. package/packages/board/src/core/host-probe.mjs +207 -0
  58. package/packages/board/src/core/host-protocol.mjs +73 -0
  59. package/packages/board/src/core/ids.mjs +35 -0
  60. package/packages/board/src/core/ime-cursor-coalesce.mjs +193 -0
  61. package/packages/board/src/core/invocation.mjs +43 -0
  62. package/packages/board/src/core/launch-options.mjs +418 -0
  63. package/packages/board/src/core/launch.mjs +157 -0
  64. package/packages/board/src/core/load-config.mjs +4 -0
  65. package/packages/board/src/core/locks.mjs +530 -0
  66. package/packages/board/src/core/paths.mjs +183 -0
  67. package/packages/board/src/core/pid.mjs +75 -0
  68. package/packages/board/src/core/prewarm-schedule.mjs +41 -0
  69. package/packages/board/src/core/process-identity-probe.mjs +228 -0
  70. package/packages/board/src/core/prompt-transport.mjs +13 -0
  71. package/packages/board/src/core/pty-attach-jiggle-controller.mjs +356 -0
  72. package/packages/board/src/core/pty-attach-jiggle-retry.mjs +109 -0
  73. package/packages/board/src/core/pty-attach-reconnect.mjs +61 -0
  74. package/packages/board/src/core/pty-attach-render.mjs +229 -0
  75. package/packages/board/src/core/pty-links.mjs +81 -0
  76. package/packages/board/src/core/pty-scroll.mjs +522 -0
  77. package/packages/board/src/core/pty-support.mjs +327 -0
  78. package/packages/board/src/core/repo.mjs +103 -0
  79. package/packages/board/src/core/rows.mjs +414 -0
  80. package/packages/board/src/core/screen-log-gc.mjs +198 -0
  81. package/packages/board/src/core/screen-log.mjs +160 -0
  82. package/packages/board/src/core/session-view.mjs +174 -0
  83. package/packages/board/src/core/slash-commands.mjs +52 -0
  84. package/packages/board/src/core/state-commands.mjs +757 -0
  85. package/packages/board/src/core/status-consistency.mjs +98 -0
  86. package/packages/board/src/core/steering-prompts.mjs +34 -0
  87. package/packages/board/src/core/steering.mjs +133 -0
  88. package/packages/board/src/core/stop-latch.mjs +41 -0
  89. package/packages/board/src/core/store.mjs +523 -0
  90. package/packages/board/src/core/suspend.mjs +36 -0
  91. package/packages/board/src/core/terminal-attach-client.mjs +981 -0
  92. package/packages/board/src/core/terminal-attach-protocol.mjs +460 -0
  93. package/packages/board/src/core/terminal-model.mjs +222 -0
  94. package/packages/board/src/core/terminal-query-sequences.mjs +239 -0
  95. package/packages/board/src/core/terminal-reply-guard.mjs +222 -0
  96. package/packages/board/src/core/terminal-snapshot.mjs +440 -0
  97. package/packages/board/src/core/test-knobs.mjs +28 -0
  98. package/packages/board/src/core/title.mjs +43 -0
  99. package/packages/board/src/core/types.mjs +414 -0
  100. package/packages/board/src/core/warm-host-sweeper.mjs +168 -0
  101. package/packages/board/src/core/worktree.mjs +65 -0
  102. package/packages/board/src/index.ts +303 -0
  103. package/packages/board/src/runtime/service.mjs +3222 -0
  104. package/packages/board/src/ui/chrome.ts +20 -0
  105. package/packages/board/src/ui/dashboard-decisions.mjs +55 -0
  106. package/packages/board/src/ui/dashboard-evidence.mjs +85 -0
  107. package/packages/board/src/ui/dashboard.ts +2237 -0
  108. package/packages/board/src/ui/double-left.ts +30 -0
  109. package/packages/board/src/ui/external-editor.ts +25 -0
  110. package/packages/board/src/ui/focus.ts +32 -0
  111. package/packages/board/src/ui/pty-attach.ts +3184 -0
  112. package/packages/board/src/ui/waiting.ts +30 -0
  113. package/packages/commands/LICENSE +21 -0
  114. package/packages/commands/README.md +19 -0
  115. package/packages/commands/package.json +22 -0
  116. package/packages/commands/src/index.ts +43 -0
  117. package/packages/commands/src/security-review.ts +109 -0
  118. package/packages/frame/CHANGELOG.md +113 -0
  119. package/packages/frame/CONTRIBUTING.md +7 -0
  120. package/packages/frame/LICENSE +22 -0
  121. package/packages/frame/README.md +105 -0
  122. package/packages/frame/SECURITY.md +16 -0
  123. package/packages/frame/docs/how-it-works.md +53 -0
  124. package/packages/frame/docs/reference.md +78 -0
  125. package/packages/frame/package.json +72 -0
  126. package/packages/frame/src/data/git.ts +90 -0
  127. package/packages/frame/src/data/github.ts +140 -0
  128. package/packages/frame/src/data/gitlab.ts +63 -0
  129. package/packages/frame/src/data/mode.ts +49 -0
  130. package/packages/frame/src/data/past-prompts.ts +57 -0
  131. package/packages/frame/src/data/runner.ts +32 -0
  132. package/packages/frame/src/data/snapshot.ts +223 -0
  133. package/packages/frame/src/data/start-notes.ts +104 -0
  134. package/packages/frame/src/data/telemetry.ts +337 -0
  135. package/packages/frame/src/data/todos.ts +162 -0
  136. package/packages/frame/src/data/totals.ts +94 -0
  137. package/packages/frame/src/data/visits.ts +45 -0
  138. package/packages/frame/src/index.ts +696 -0
  139. package/packages/frame/src/kit/LICENSE +21 -0
  140. package/packages/frame/src/kit/app/attribution.ts +30 -0
  141. package/packages/frame/src/kit/app/builder.ts +186 -0
  142. package/packages/frame/src/kit/app/claim.ts +27 -0
  143. package/packages/frame/src/kit/app/feature.ts +91 -0
  144. package/packages/frame/src/kit/app/host.ts +214 -0
  145. package/packages/frame/src/kit/app/renderers.ts +62 -0
  146. package/packages/frame/src/kit/app/scope.ts +125 -0
  147. package/packages/frame/src/kit/board/model.ts +337 -0
  148. package/packages/frame/src/kit/contract.ts +79 -0
  149. package/packages/frame/src/kit/contracts/accounts.ts +33 -0
  150. package/packages/frame/src/kit/contracts/ask.ts +120 -0
  151. package/packages/frame/src/kit/contracts/board.ts +6 -0
  152. package/packages/frame/src/kit/contracts/by.ts +22 -0
  153. package/packages/frame/src/kit/contracts/calls.ts +46 -0
  154. package/packages/frame/src/kit/contracts/events.ts +89 -0
  155. package/packages/frame/src/kit/contracts/mode.ts +26 -0
  156. package/packages/frame/src/kit/contracts/names.ts +12 -0
  157. package/packages/frame/src/kit/contracts/peers.ts +77 -0
  158. package/packages/frame/src/kit/contracts/prompts.ts +8 -0
  159. package/packages/frame/src/kit/contracts/screen.ts +75 -0
  160. package/packages/frame/src/kit/contracts/skills.ts +81 -0
  161. package/packages/frame/src/kit/contracts/sources.ts +81 -0
  162. package/packages/frame/src/kit/contracts/views.ts +42 -0
  163. package/packages/frame/src/kit/control.ts +59 -0
  164. package/packages/frame/src/kit/dark-theme.ts +41 -0
  165. package/packages/frame/src/kit/decode.ts +210 -0
  166. package/packages/frame/src/kit/events/log.ts +313 -0
  167. package/packages/frame/src/kit/format.ts +25 -0
  168. package/packages/frame/src/kit/host.ts +4 -0
  169. package/packages/frame/src/kit/index.ts +25 -0
  170. package/packages/frame/src/kit/legacy-tasks.ts +39 -0
  171. package/packages/frame/src/kit/overlay-images.ts +36 -0
  172. package/packages/frame/src/kit/paths.ts +16 -0
  173. package/packages/frame/src/kit/screen/client.ts +74 -0
  174. package/packages/frame/src/kit/screen/feature.ts +64 -0
  175. package/packages/frame/src/kit/screen/model.ts +182 -0
  176. package/packages/frame/src/kit/screen/view.ts +838 -0
  177. package/packages/frame/src/kit/settings/files.ts +90 -0
  178. package/packages/frame/src/kit/settings/setting.ts +57 -0
  179. package/packages/frame/src/kit/settings/store.ts +192 -0
  180. package/packages/frame/src/kit/sources/file.ts +129 -0
  181. package/packages/frame/src/kit/sources/follow.ts +155 -0
  182. package/packages/frame/src/kit/testing.ts +260 -0
  183. package/packages/frame/src/kit/totals.ts +72 -0
  184. package/packages/frame/src/kit/ui/entry.ts +75 -0
  185. package/packages/frame/src/kit/ui/frame.ts +212 -0
  186. package/packages/frame/src/kit/ui/glyphs.ts +132 -0
  187. package/packages/frame/src/kit/ui/scroll.ts +14 -0
  188. package/packages/frame/src/render/diff.ts +157 -0
  189. package/packages/frame/src/render/fit.ts +86 -0
  190. package/packages/frame/src/render/format.ts +108 -0
  191. package/packages/frame/src/render/frame.ts +106 -0
  192. package/packages/frame/src/render/glyphs.ts +189 -0
  193. package/packages/frame/src/render/keys.ts +43 -0
  194. package/packages/frame/src/render/lead.ts +37 -0
  195. package/packages/frame/src/render/paint.ts +135 -0
  196. package/packages/frame/src/render/safe.ts +19 -0
  197. package/packages/frame/src/render/segments.ts +735 -0
  198. package/packages/frame/src/render/streaming.ts +223 -0
  199. package/packages/frame/src/render/timing.ts +106 -0
  200. package/packages/frame/src/render/tools.ts +167 -0
  201. package/packages/frame/src/settings.ts +105 -0
  202. package/packages/frame/src/ui/editor.ts +272 -0
  203. package/packages/frame/src/ui/effort.ts +36 -0
  204. package/packages/frame/src/ui/footer.ts +165 -0
  205. package/packages/frame/src/ui/header.ts +362 -0
  206. package/packages/frame/src/ui/history-search.ts +23 -0
  207. package/packages/frame/src/ui/interrupt.ts +21 -0
  208. package/packages/frame/src/ui/outputs.ts +170 -0
  209. package/packages/frame/src/ui/pi-entries.ts +298 -0
  210. package/packages/frame/src/ui/previews.ts +72 -0
  211. package/packages/frame/src/ui/queue.ts +75 -0
  212. package/packages/frame/src/ui/screen.ts +59 -0
  213. package/packages/frame/src/ui/timings.ts +48 -0
  214. package/packages/frame/src/ui/todos.ts +205 -0
  215. package/packages/frame/src/ui/tool-frame.ts +595 -0
  216. package/packages/frame/src/ui/working.ts +25 -0
  217. package/packages/frame/src/view/state.ts +97 -0
  218. package/packages/frame/src/view/transcript.ts +175 -0
  219. package/packages/frame/src/view/view.ts +162 -0
  220. package/packages/memory/CONTRIBUTING.md +7 -0
  221. package/packages/memory/LICENSE +21 -0
  222. package/packages/memory/README.md +44 -0
  223. package/packages/memory/SECURITY.md +20 -0
  224. package/packages/memory/package.json +55 -0
  225. package/packages/memory/skills/review-memory/SKILL.md +48 -0
  226. package/packages/memory/src/index.ts +163 -0
  227. package/packages/memory/src/prompt.ts +25 -0
  228. package/packages/memory/src/review.ts +150 -0
  229. package/packages/memory/src/secrets.ts +22 -0
  230. package/packages/memory/src/store.ts +173 -0
  231. package/packages/modes/CHANGELOG.md +104 -0
  232. package/packages/modes/CONTRIBUTING.md +7 -0
  233. package/packages/modes/LICENSE +21 -0
  234. package/packages/modes/README.md +174 -0
  235. package/packages/modes/SECURITY.md +17 -0
  236. package/packages/modes/package.json +55 -0
  237. package/packages/modes/skills/review-permissions/SKILL.md +54 -0
  238. package/packages/modes/src/bash.ts +218 -0
  239. package/packages/modes/src/deny-off.ts +62 -0
  240. package/packages/modes/src/git-safety.ts +72 -0
  241. package/packages/modes/src/index.ts +338 -0
  242. package/packages/modes/src/interview.ts +206 -0
  243. package/packages/modes/src/judge-gate.ts +113 -0
  244. package/packages/modes/src/modes.ts +121 -0
  245. package/packages/modes/src/review/apply.mjs +156 -0
  246. package/packages/modes/src/review/collect.mjs +208 -0
  247. package/packages/modes/src/review/tools.ts +71 -0
  248. package/packages/modes/src/sandbox.ts +37 -0
  249. package/packages/router/CHANGELOG.md +8 -0
  250. package/packages/router/LICENSE +21 -0
  251. package/packages/router/README.md +90 -0
  252. package/packages/router/package.json +51 -0
  253. package/packages/router/src/config.ts +65 -0
  254. package/packages/router/src/index.ts +172 -0
  255. package/packages/router/src/judge.ts +51 -0
  256. package/packages/router/src/route.ts +67 -0
  257. package/packages/web/CHANGELOG.md +36 -0
  258. package/packages/web/LICENSE +21 -0
  259. package/packages/web/README.md +87 -0
  260. package/packages/web/SECURITY.md +13 -0
  261. package/packages/web/package.json +59 -0
  262. package/packages/web/src/config.ts +109 -0
  263. package/packages/web/src/dnsfilter.ts +97 -0
  264. package/packages/web/src/extract.ts +65 -0
  265. package/packages/web/src/index.ts +217 -0
  266. package/packages/web/src/markdown.ts +122 -0
  267. package/packages/web/src/net.ts +109 -0
  268. package/packages/web/src/reader.ts +73 -0
  269. package/packages/web/src/sanitize.ts +50 -0
  270. package/packages/web/src/search.ts +76 -0
  271. package/packages/web/src/secrets.ts +22 -0
  272. package/packages/web/src/validate.ts +186 -0
  273. package/src/index.ts +156 -0
  274. package/src/settings.ts +79 -0
package/CHANGELOG.md ADDED
@@ -0,0 +1,28 @@
1
+ # Changelog
2
+
3
+ ## [0.2.0]
4
+
5
+ ### Features
6
+
7
+ - `/clear` clears the conversation and starts a new session.
8
+ - `/security-review` reviews your changes for security problems.
9
+ - Your messages keep the color of the mode you sent them in, and name it unless it's `normal`.
10
+
11
+ ### Changes
12
+
13
+ - Board notices now show at the bottom of the screen, go away by themselves, and no longer move the list.
14
+ - Deleting a session on the board moves the cursor up one in the same group instead of to the top.
15
+ - Fewer outside packages run inside Pi. The parts of `@adeildo/pi-kit` that frame uses are now a copy in `packages/frame/src/kit`, while word diffs and page-to-Markdown are our own code in place of `diff` and `turndown`. Removing `c8`, used only for a coverage script, clears the open `minimatch` alert.
16
+
17
+ ## [0.1.0]
18
+
19
+ ### Features
20
+
21
+ - One package for `pi-modes`, `pi-router`, `pi-web`, `pi-memory`, `pi-frame` and `pi-board`, with their history.
22
+ - `/suite` and `~/.pi/agent/suite.json` turn each part on or off.
23
+ - `router/auto`, a new virtual model. The other parts now work with it: `modes` shares the mode, `web` asks it for a reader, `frame` shows which model answered, and `/router` sets the judge's model.
24
+
25
+ ### Changes
26
+
27
+ - In `plan` and `read-only`, `todo`, `ask_questions`, `web_fetch` and `web_search` are only allowed from pi-suite itself.
28
+ - If `modes` fails to load, Pi stops rather than running without it.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Hüseyin Sönmez
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,3 +1,89 @@
1
- # Temporary Holding Version
1
+ # pi-suite
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ One package for [Pi](https://pi.dev): modes and permissions, a framed screen, a board of agent sessions, long-term memory, web tools with a separate page reader, and a model router. Everything is on until you turn it off.
4
+
5
+ | Part | What it adds | Details |
6
+ |---|---|---|
7
+ | `modes` | `plan`, `auto`, `read-only` and `yolo` modes, plan approval, and interviews with `ask_questions` | [README](packages/modes/README.md) |
8
+ | `router` | `router/auto`: one model to plan, another to build, and one each for the page reader, the judge and subagents | [README](packages/router/README.md) |
9
+ | `web` | `web_fetch` and `web_search`, with pages read by a separate model that has no tools | [README](packages/web/README.md) |
10
+ | `memory` | Memory the agent keeps between sessions | [README](packages/memory/README.md) |
11
+ | `frame` | The start card, framed editor, tool boxes, footer and the agent's todo list | [README](packages/frame/README.md) |
12
+ | `board` | A board for starting, watching and attaching to background sessions | [README](packages/board/README.md) |
13
+ | `commands` | `/clear` and `/security-review` | [README](packages/commands/README.md) |
14
+
15
+ ## Install
16
+
17
+ Requires Pi 1.5 or newer.
18
+
19
+ ```bash
20
+ pi install npm:@huseynsnmz/pi-suite@0.2.0
21
+ ```
22
+
23
+ If you installed any of these separately, remove them first:
24
+
25
+ ```bash
26
+ pi remove npm:@huseynsnmz/pi-board
27
+ pi remove npm:@huseynsnmz/pi-frame
28
+ pi remove npm:@huseynsnmz/pi-memory
29
+ pi remove npm:@huseynsnmz/pi-modes
30
+ pi remove npm:@huseynsnmz/pi-web
31
+ ```
32
+
33
+ Pi won't start if two packages add a tool with the same name, and `/suite` can't help at that point. So if another package also has a `todo`, `web_fetch` or `memory_add` tool, or you get a conflict error, add the part to `~/.pi/agent/suite.json` by hand, or remove the other package.
34
+
35
+ Your settings carry over, since each part still reads its own config file.
36
+
37
+ If you use `@gotgenes/pi-permission-system`, move pi-suite above it in `packages` in `~/.pi/agent/settings.json`. `pi install` adds packages last, and otherwise you may be asked to approve an action that `plan` or `read-only` then blocks. With `pi-sandbox`, keep pi-suite first in `packages`, or `yolo` will refuse to start.
38
+
39
+ ## Turning parts off
40
+
41
+ | Command | What it does |
42
+ |---|---|
43
+ | `/suite` | A list to turn parts on and off |
44
+ | `/suite list` | What's on now, and what changes after a reload |
45
+ | `/suite off board` | Turn one part off |
46
+ | `/suite on board` | Turn one part back on |
47
+
48
+ Changes apply after a reload, which `/suite` offers to do. They're saved in `~/.pi/agent/suite.json`, which you can also edit:
49
+
50
+ ```json
51
+ { "off": ["board", "web"] }
52
+ ```
53
+
54
+ A part that's off isn't loaded at all, so it adds no tools, skills, prompts or start-up time. If the file has a mistake, everything stays on and Pi tells you, so a typo can't quietly turn off plan mode.
55
+
56
+ `modes` is treated differently, because it enforces plan and read-only:
57
+
58
+ - Turning it off asks first, and is refused where nobody can answer, as in `pi -p`.
59
+ - While it's off, every session says so.
60
+ - If it fails to load, Pi stops instead of running without it. Any other part that fails is reported, and the rest carry on.
61
+ - In `plan` and `read-only`, `todo`, `ask_questions`, `web_fetch` and `web_search` are only allowed from pi-suite itself, so another package's tools with those names are blocked there.
62
+
63
+ Parts work on their own and use each other when they're on. With `modes` off, for example, `router` only goes by the first edit. With `router` off, `web` reads pages with the session's model.
64
+
65
+ ## Good to know
66
+
67
+ - **All parts share one version.** A fix to one part means a new version of the whole package.
68
+ - **Load order is per package.** Every part loads where pi-suite is listed in `packages`. `modes` wants that to be first, while `pi-claude-code-ui` has to be listed before `frame`, so they can't both get their way. If you use `pi-claude-code-ui`, see [frame's notes](packages/frame/README.md#using-it-with-other-extensions).
69
+ - **Pi counts it as one extension.** The start card lists `pi-suite` rather than each part.
70
+ - **`board` on Linux is untested.** It uses `node-pty`, which has no Linux build in its package and needs its install script. The rest of the suite should still load without it.
71
+
72
+ ## Security limits
73
+
74
+ Each part has its own limits, listed in its README or `SECURITY.md`. None of this is a sandbox. Use a container for repositories you don't trust.
75
+
76
+ ## Credits
77
+
78
+ `frame` started as a fork of [`@adeildo/pi-look`](https://github.com/felipeadeildo/pi-harness/tree/main/packages/look) by adeildo, and `board` as a fork of [`@zhuxixi/pi-agent-board`](https://github.com/zhuxixi/pi-agent-board). Their licenses are in each folder.
79
+
80
+ ## Development
81
+
82
+ ```bash
83
+ npm install --ignore-scripts
84
+ npm run check
85
+ npm test
86
+ npm run test:e2e
87
+ ```
88
+
89
+ Each part keeps its own tests under `packages/<part>/test`. `frame` needs [bun](https://bun.sh) for its unit tests. `npm run test:e2e` drives real Pi in a real terminal with a fake model.
package/SECURITY.md ADDED
@@ -0,0 +1,5 @@
1
+ # Security
2
+
3
+ Report a vulnerability privately through [GitHub's security advisories](https://github.com/huseynsnmz/pi-suite/security/advisories/new), not in a public issue.
4
+
5
+ Each part lists its own limits in its README or `SECURITY.md`. pi-suite isn't a sandbox.
package/package.json CHANGED
@@ -1,6 +1,114 @@
1
1
  {
2
2
  "name": "@huseynsnmz/pi-suite",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
6
- }
3
+ "version": "0.2.0",
4
+ "description": "One Pi package for all of it: modes and permissions, a framed screen, an agent board, memory, web tools with a separate page reader, and a model router. Turn off what you don't want with /suite.",
5
+ "type": "module",
6
+ "license": "MIT",
7
+ "author": {
8
+ "name": "Hüseyin Sönmez",
9
+ "email": "huseyin@snmz.org",
10
+ "url": "https://github.com/huseynsnmz"
11
+ },
12
+ "keywords": [
13
+ "pi-package",
14
+ "pi-extension"
15
+ ],
16
+ "repository": {
17
+ "type": "git",
18
+ "url": "git+https://github.com/huseynsnmz/pi-suite.git"
19
+ },
20
+ "publishConfig": {
21
+ "access": "public"
22
+ },
23
+ "workspaces": [
24
+ "packages/*"
25
+ ],
26
+ "files": [
27
+ "src",
28
+ "README.md",
29
+ "CHANGELOG.md",
30
+ "LICENSE",
31
+ "packages/commands/src",
32
+ "packages/commands/package.json",
33
+ "packages/commands/README.md",
34
+ "packages/commands/LICENSE",
35
+ "packages/board/src",
36
+ "packages/board/runner",
37
+ "packages/board/docs",
38
+ "packages/board/package.json",
39
+ "packages/board/README.md",
40
+ "packages/board/LICENSE",
41
+ "packages/frame/src",
42
+ "packages/frame/docs",
43
+ "packages/frame/package.json",
44
+ "packages/frame/README.md",
45
+ "packages/frame/LICENSE",
46
+ "packages/memory/src",
47
+ "packages/memory/skills",
48
+ "packages/memory/package.json",
49
+ "packages/memory/README.md",
50
+ "packages/memory/LICENSE",
51
+ "packages/modes/src",
52
+ "packages/modes/skills",
53
+ "packages/modes/package.json",
54
+ "packages/modes/README.md",
55
+ "packages/modes/LICENSE",
56
+ "packages/router/src",
57
+ "packages/router/package.json",
58
+ "packages/router/README.md",
59
+ "packages/router/LICENSE",
60
+ "packages/web/src",
61
+ "packages/web/package.json",
62
+ "packages/web/README.md",
63
+ "packages/web/LICENSE",
64
+ "SECURITY.md",
65
+ "packages/board/SECURITY.md",
66
+ "packages/board/CONTRIBUTING.md",
67
+ "packages/board/CHANGELOG.md",
68
+ "packages/frame/SECURITY.md",
69
+ "packages/frame/CONTRIBUTING.md",
70
+ "packages/frame/CHANGELOG.md",
71
+ "packages/memory/SECURITY.md",
72
+ "packages/memory/CONTRIBUTING.md",
73
+ "packages/modes/SECURITY.md",
74
+ "packages/modes/CONTRIBUTING.md",
75
+ "packages/modes/CHANGELOG.md",
76
+ "packages/router/CHANGELOG.md",
77
+ "packages/web/SECURITY.md",
78
+ "packages/web/CHANGELOG.md"
79
+ ],
80
+ "pi": {
81
+ "extensions": [
82
+ "./src/index.ts"
83
+ ]
84
+ },
85
+ "engines": {
86
+ "node": ">=22.18"
87
+ },
88
+ "scripts": {
89
+ "check": "tsc --noEmit && npm run --workspaces --if-present check && npm run -w packages/board typecheck",
90
+ "test": "node --test test/*.test.ts && npm run --workspaces --if-present test",
91
+ "test:e2e": "python3 test/e2e/run.py"
92
+ },
93
+ "dependencies": {
94
+ "@xterm/headless": "6.0.0",
95
+ "node-pty": "1.1.0",
96
+ "@mozilla/readability": "0.6.0",
97
+ "linkedom": "0.18.12"
98
+ },
99
+ "peerDependencies": {
100
+ "@earendil-works/pi-ai": ">=1.5.0",
101
+ "@earendil-works/pi-coding-agent": ">=1.5.0",
102
+ "@earendil-works/pi-tui": ">=1.5.0",
103
+ "typebox": "*"
104
+ },
105
+ "devDependencies": {
106
+ "@earendil-works/pi-ai": "1.5.0",
107
+ "@earendil-works/pi-coding-agent": "1.5.0",
108
+ "@earendil-works/pi-tui": "1.5.0",
109
+ "@types/bun": "1.4.4",
110
+ "@types/node": "26.6.6",
111
+ "typebox": "1.4.3",
112
+ "typescript": "7.0.2"
113
+ }
114
+ }
@@ -0,0 +1,340 @@
1
+ # Changelog
2
+
3
+ ## [0.18.2] - 2026-11-04
4
+
5
+ ### Fixes
6
+
7
+ - **attach**: a session past about 85 frames opens at once instead of showing Loading for 2.5s, or 5.5s at a new size, and it follows resizes again. It stopped proving its frames when an internal log filled up. Sessions need a restart to pick this up, since the fix runs inside them
8
+ - **attach**: sessions fill screens wider than 300 columns or taller than 120 rows
9
+ - **attach**: a big frame no longer shows `���` and wraps a row when a read ends halfway through a character. Pasted text gets the same fix
10
+
11
+ ## [0.18.1] - 2026-11-04
12
+
13
+ ### Fixes
14
+
15
+ - **keys**: `Ctrl+Z` puts Pi in the background from the board and from an attached session. It did nothing on the board, and in an attached session it stopped that session's screen, so it no longer took input
16
+
17
+ ## [0.18.0] - 2026-11-04
18
+
19
+ ### Features
20
+
21
+ - **board**: a new task starts in the selected session's folder, and the input's title shows which
22
+
23
+ ### Fixes
24
+
25
+ - **attach**: reattaching at a new window size, or resizing during an attach, no longer sticks on "waiting for the session to render"
26
+ - **attach**: a session that redraws for a resize without proving it finished gets resized away and back, so the attach can't hang
27
+ - **keys**: the board and attached sessions get every key. Shift+Tab reached the Pi behind them, where `pi-modes` changed its permission mode
28
+ - **launch**: after choosing a folder, Enter starts the session rather than opening the picker again
29
+ - **security**: only `http` and `https` links open on click, since `open` also starts apps from other schemes
30
+ - **security**: session output can no longer start an iTerm2 file download, only show an inline image
31
+ - **security**: the board's folder is private to you, as it holds transcripts and screen logs
32
+
33
+ ### Performance
34
+
35
+ - **attach**: frames that answer a key or the wheel paint as soon as they're whole. A wheel notch took 58 ms in testing, and now takes 17 ms
36
+
37
+ ## [0.17.0] - 2026-11-04
38
+
39
+ ### Features
40
+
41
+ - **keys**: `/` opens Pi's commands, with the usual menu. Commands run in the Pi the board was opened from; templates and skills start a session
42
+ - **keys**: `Ctrl+C` twice quits Pi from the board and from an attached session, and leaves background sessions running
43
+
44
+ ### Changes
45
+
46
+ - **keys**: `Ctrl+F` is now the only way to filter
47
+
48
+ ## [0.16.0] - 2026-11-04
49
+
50
+ ### Features
51
+
52
+ - **keys**: `Alt+1..9` counts the rows in the selected session's folder
53
+
54
+ ### Fixes
55
+
56
+ - **replies**: a reply during a permission prompt now waits in the queue. Sent straight to the session, its Enter could approve the prompt (from 0.15.1)
57
+
58
+ ### Changes
59
+
60
+ - **repo**: its own repository, with new docs and without the original's plans and release tooling
61
+
62
+ ## [0.15.3] - 2026-11-04
63
+
64
+ ### Fixes
65
+
66
+ - **state**: Pi no longer crashes on `/new`, `/resume`, `/fork` or `/reload` (from 0.15.0)
67
+
68
+ ## [0.15.2] - 2026-11-04
69
+
70
+ ### Changes
71
+
72
+ - **deps**: exact versions everywhere, with Pi 1.5.0, TypeScript 7 and @types/node 26 for development
73
+ - **deps**: remove the postinstall script, since Pi 1.5.0 no longer ships the versions it patched
74
+
75
+ ## [0.15.1] - 2026-11-04
76
+
77
+ ### Features
78
+
79
+ - **keys**: `Ctrl+S` groups by directory, `Shift+Up` and `Shift+Down` reorder, `Ctrl+G` opens your editor
80
+ - **state**: a session waiting on a permission prompt or other dialog shows as `Needs answer`
81
+
82
+ ## [0.15.0] - 2026-11-04
83
+
84
+ ### Features
85
+
86
+ - **keys**: typing starts a task with no key first, and the keys follow Claude Code's agent view
87
+ - **board**: `Left` twice puts the session you're in on the board, so you can come back to it
88
+ - **config**: settings move to `~/.pi/agent/extensions/pi-board/config.json`
89
+ - **model**: `/board-model` chooses the helper model, which is now off until you choose one
90
+ - **ui**: drawn with frames and Pi's theme colors, to match pi-frame
91
+
92
+ ## [0.14.0] - 2026-11-04
93
+
94
+ First release of `@huseynsnmz/pi-board`, a fork of `@zhuxixi/pi-agent-board` 0.13.1.
95
+
96
+ ### Features
97
+
98
+ - **dispatch**: `Enter` starts a task right away; `Ctrl+N` while typing opens the Start session dialog
99
+ - **board**: `Left` twice on an empty prompt opens the board
100
+ - **board**: announce `agent-board:closed`, so an extension can draw its header and footer again
101
+
102
+ ## [0.13.1] - 2026-10-28
103
+
104
+ ### Fixes
105
+
106
+ - **attach**: clear the fullscreen selection highlight after copy-on-release (issue #172) (#251)
107
+ - **coordinator**: self-supervise the endpoint and restore the #70 cleanup gate (issue #255) (#256)
108
+
109
+ ### Changes
110
+
111
+ - **ui**: align SELECT hints, help overlay and ! wording with the handler (issue #252) (#253)
112
+ - sync key hints with the implemented bindings — peek footer, README ! rows, multi-select table (issue #245) (#249)
113
+
114
+ [0.13.1]: https://github.com/zhuxixi/pi-agent-board/compare/v0.13.0...v0.13.1
115
+
116
+ ## [0.13.0] - 2026-10-26
117
+
118
+ ### Features
119
+
120
+ - **ui**: vim-style j/k/l board keys — j/k navigate, l attaches (issue #229) (#237)
121
+ - **ui**: paint the selected board row with selectedBg (issue #231) (#233)
122
+
123
+ ### Fixes
124
+
125
+ - **coordinator**: verify lease identity before signalling (issue #239) (#247)
126
+ - **dashboard**: keep selected rows visible beside scroll markers (#226)
127
+ - **attach**: render cells that only carry a background (#235)
128
+ - **coordinator**: root-vanished self-exit and suite leak gate (issue #241) (#244)
129
+ - **host**: unify process identity tokens and produce them on win32 (issue #238) (#243)
130
+ - **host**: keep warm hosts alive while a background workflow run is active (issue #230) (#242)
131
+ - **host**: corroborate unverified process identity to unstick pid-reuse recovery (issue #217) (#240)
132
+ - **lease**: reclaim stale coordinator leases by heartbeat instead of pid liveness (issue #224) (#236)
133
+ - keep foreground rows monotonic across out-of-order state writes (#228)
134
+ - recognize ask_user_question and questionnaire-shaped tools as pending questions (#223)
135
+
136
+ [0.13.0]: https://github.com/zhuxixi/pi-agent-board/compare/v0.12.1...v0.13.0
137
+
138
+ ## [0.12.1] - 2026-10-20
139
+
140
+ ### Fixes
141
+
142
+ - **release**: collapse repeated trailing PR refs in CHANGELOG entries (#218)
143
+ - **attach**: keep the Alt modifier on the forwarded wheel report (#216)
144
+ - **attach**: stop the reply guard swallowing kitty/modifyOtherKeys PageDown (#215)
145
+
146
+ ### Changes
147
+
148
+ - **attach**: tidy the mouse-enable helper placement and comment indent (#209)
149
+
150
+ [0.12.1]: https://github.com/zhuxixi/pi-agent-board/compare/v0.12.0...v0.12.1
151
+
152
+ ## [0.12.0] - 2026-10-19
153
+
154
+ ### Features
155
+
156
+ - **attach**: ctrl+x in-place delete confirm — archive from the attach view (#193)
157
+
158
+ ### Fixes
159
+
160
+ - **attach**: re-assert the fullscreen mouse mode when the attach view opens (#208) (#208)
161
+ - **attach**: stop spending wheel notches on snapshot-hydration scrollback (#206)
162
+ - **attach**: decode the X10 mouse release code as release (#200) (#200)
163
+ - **attach**: classify a motion-less legacy drag by screen geometry (#202)
164
+ - **attach**: dispatch mixed input reads per segment and pass terminal reports through (issue #189) (#196)
165
+ - **attach**: forward the fullscreen wheel whenever the local viewport cannot move (#199)
166
+ - **attach**: stop terminal reply fragments leaking into the attached child's input (#194)
167
+ - **attach**: forward the fullscreen wheel to alternate-screen children (#190)
168
+ - **attach**: scroll the fullscreen wheel in the attach viewport (#183)
169
+
170
+ ### Changes
171
+
172
+ - **attach**: gate the alt-wheel scenario on the child's first frame (#204)
173
+ - accept-registration race — echo-probe waits, flake postmortems, load-independent repro (#192) (#192)
174
+ - **attach**: keep the A5 burst inside the snapshot frame window and pin the window contract (#191)
175
+
176
+ [0.12.0]: https://github.com/zhuxixi/pi-agent-board/compare/v0.11.1...v0.12.0
177
+
178
+ ## [0.11.1] - 2026-10-13
179
+
180
+ ### Fixes
181
+
182
+ - **attach**: defer color-scheme reports until child input is ready (#180)
183
+
184
+ [0.11.1]: https://github.com/zhuxixi/pi-agent-board/compare/v0.11.0...v0.11.1
185
+
186
+ ## [0.11.0] - 2026-10-12
187
+
188
+ ### Features
189
+
190
+ - **attach**: mirror pi's fullscreen selection into X11 PRIMARY + paste-source override (#177)
191
+
192
+ [0.11.0]: https://github.com/zhuxixi/pi-agent-board/compare/v0.10.2...v0.11.0
193
+
194
+ ## [0.10.2] - 2026-10-10
195
+
196
+ ### Fixes
197
+
198
+ - **attach**: stop writing outer-terminal mouse mode in fullscreen TUI (#173)
199
+ - **attach**: middle-click paste via handleMouse under pi >=1.0 fullscreen TUI (#171)
200
+ - **attach**: deliver terminal color scheme at settle via feature-detected probe API (#166)
201
+ - **attach**: prevent startup background replies from echoing in the PTY (#165) (#165)
202
+
203
+ [0.10.2]: https://github.com/zhuxixi/pi-agent-board/compare/v0.10.1...v0.10.2
204
+
205
+ ## [0.10.1] - 2026-10-01
206
+
207
+ ### Fixes
208
+
209
+ - **attach**: prevent stale hyperlink IDs from leaking across cells (#158)
210
+
211
+ [0.10.1]: https://github.com/zhuxixi/pi-agent-board/compare/v0.10.0...v0.10.1
212
+
213
+ ## [0.10.0] - 2026-10-01
214
+
215
+ ### Features
216
+
217
+ - **ui**: x then y confirms session deletion (issue #150) (#152)
218
+ - 8th semantic state holding + manual-fence lift on interactive input (issue #145) (#151)
219
+
220
+ ### Fixes
221
+
222
+ - **ci**: read the dispatch recovery tag from inputs, not the ref name (issue #154) (#156)
223
+ - job-runner boot-window stop loss + dead-run reconcile convergence (issue #153) (#155)
224
+ - **attach**: answer the color-scheme query client-side for attached sessions (issue #148) (#149)
225
+
226
+ ### Changes
227
+
228
+ - probe knob guard uses the production-default floor, not a jitter-prone absolute bound (issue #95) (#159)
229
+ - flake postmortems, budget audit gate, ladder knobs (issue #95 F3-F4) (#157)
230
+
231
+ [0.10.0]: https://github.com/zhuxixi/pi-agent-board/compare/v0.9.0...v0.10.0
232
+
233
+ ## [0.9.0] - 2026-09-25
234
+
235
+ ### Features
236
+
237
+ - **attach**: forward terminal queries to the real terminal — automatic theme works in attach sessions (issue #128) (#138)
238
+ - **attach**: unconditional Ctrl+\ detach key, terminal-independent (issue #126) (#137)
239
+
240
+ ### Fixes
241
+
242
+ - **runner**: probes leave attachedClients at hello (issue #130) (#142)
243
+ - browse-mode Tab completes and drills down directories in cwd picker (issue #127) (#141)
244
+
245
+ ### Changes
246
+
247
+ - **release**: orchestrate releases and publish from CI (#144)
248
+ - control-reconcile flaky assertions — windowed recorder + invariant realignment (issue #140) (#143)
249
+ - **attach**: scope A5 mid-stream seq assertion to post-snapshot window (issue #132) (#139)
250
+
251
+ [0.9.0]: https://github.com/zhuxixi/pi-agent-board/compare/v0.8.0...v0.9.0
252
+
253
+ ## [0.8.0] - 2026-09-23
254
+
255
+ ### Features
256
+
257
+ - **attach**: detach gate reads only editor_state — delete buffer heuristics (issue #91 phase 6, D1) (#135)
258
+ - control command lifecycle — staged acks, durable journal, reconcile, generation token (issue #91 phase 5, D4) (#134)
259
+ - switch attach to snapshot+subscribe with legacy fallback (issue #91 phase 4, D2 closure) (#122)
260
+ - canonical terminal model and capture-and-subscribe protocol (issue #91 phase 3, D2+D5) (#117)
261
+ - reader-side revision consistency, beat bootstrap, and paired-revision invariant (issue #91, D3 arc closure) (#111)
262
+
263
+ ### Fixes
264
+
265
+ - **attach**: editor-shaped ← detach anchor + restore the editor-state reporter endpoint (issue #103) (#119)
266
+ - **paths**: normalize root before hashing the win32 coordinator pipe name (issue #124) (#125)
267
+ - **locks**: reclaim Windows lease orphans on publish-rename EPERM (issue #114) (#123)
268
+ - **attach**: stop painting the PTY cursor block when the child hides it (issue #102) (#120)
269
+ - **attach**: learn TUI frame cognition in terminal chain states (issue #106) (#118)
270
+ - **host**: reclaim orphaned host-meta locks and add contention diagnostics (issue #112) (#116)
271
+ - foreground preview read-your-writes cache for coordinator write races (issue #113) (#115)
272
+
273
+ ### Changes
274
+
275
+ - move the A11 perf gate out of coverage instrumentation (issue #121) (#133)
276
+
277
+ [0.8.0]: https://github.com/zhuxixi/pi-agent-board/compare/v0.7.0...v0.8.0
278
+
279
+ ## [0.7.0] - 2026-09-10
280
+
281
+ ### Features
282
+
283
+ - runtime cursor desync detect + rate-limited heal (issue #11) (#105)
284
+ - detached View State Coordinator as single writer for state/status (issue #91, phase 1+2a) (#104)
285
+
286
+ ### Fixes
287
+
288
+ - **coordinator**: protocol version gate replaces stale coordinators on extension updates (issue #108) (#109)
289
+
290
+ ### Changes
291
+
292
+ - route all remaining state writes through the View State Coordinator (issue #91, phase 2b) (#107)
293
+
294
+ [0.7.0]: https://github.com/zhuxixi/pi-agent-board/compare/v0.6.2...v0.7.0
295
+
296
+ ## [0.6.2] - 2026-09-09
297
+
298
+ ### Fixes
299
+
300
+ - **host**: claim role no longer blocks terminal host replacement (#99) (#100)
301
+
302
+ [0.6.2]: https://github.com/zhuxixi/pi-agent-board/compare/v0.6.1...v0.6.2
303
+
304
+ ## [0.6.1] - 2026-09-08
305
+
306
+ ### Fixes
307
+
308
+ - add an unconditional Ctrl+Left detach chord to the attach surface (issue #89) (#97)
309
+ - force full-clear repaint on dashboard mount and content shrink (issue #88) (#96)
310
+ - fail host launch fast on a provably stale defaultModel + exit attribution (issue #90) (#94)
311
+ - finalize provably-dead legacy hosts in attach resolver and self-heal (issue #87) (#93)
312
+ - swallow async spawn errors in detached runner launches (issue #86) (#92)
313
+
314
+ [0.6.1]: https://github.com/zhuxixi/pi-agent-board/compare/v0.6.0...v0.6.1
315
+
316
+ ## [0.6.0] - 2026-09-07
317
+
318
+ ### Features
319
+
320
+ - conventional-commit driven CHANGELOG via release_helper.mjs (issue #64) (#83)
321
+
322
+ ### Fixes
323
+
324
+ - pty host stacking and control.sock cross-deletion via per-instance ownership protocol (issue #70) (#84)
325
+ - guard mention fallback against placeholders, code spans, and pr-context (issue #61) (#82)
326
+ - truncate never splits surrogate pairs or emits lone surrogates (issue #39) (#81)
327
+ - extract evidence outputPreview from AgentToolResult content (issue #41) (#77)
328
+ - reclaim idle warm PTY hosts via periodic sweep + lifecycle cleanup (issue #75) (#76)
329
+ - narrow code-refs PR back-link extraction by evidence context (issue #65) (#73)
330
+
331
+ ### Performance
332
+
333
+ - use cached PTY probe on the reconcile drain path (issue #13) (#79)
334
+
335
+ ### Changes
336
+
337
+ - Windows WezTerm IME needs a visible hardware cursor (issue #38) (#80)
338
+ - poll markCompleted to success instead of racing the persist window (issue #63) (#78)
339
+
340
+ [0.6.0]: https://github.com/zhuxixi/pi-agent-board/compare/v0.5.2...v0.6.0
@@ -0,0 +1,7 @@
1
+ # Contributing
2
+
3
+ Issues are welcome. Pull requests are turned off, because this fork follows how its maintainer works and every line needs to be written and reviewed by them.
4
+
5
+ If you have a fix, open an issue that describes the problem and how to reproduce it. For a problem that also affects `@zhuxixi/pi-agent-board`, consider [reporting it there](https://github.com/zhuxixi/pi-agent-board/issues) too.
6
+
7
+ For security problems, follow [SECURITY.md](SECURITY.md) instead.
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Pi Agent Board contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.