pi-kot 0.1.20 → 0.1.21

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 (330) hide show
  1. package/README.md +253 -17
  2. package/package.json +8 -60
  3. package/bin/pi-kot.mjs +0 -148
  4. package/dist/client/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  5. package/dist/client/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  6. package/dist/client/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  7. package/dist/client/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  8. package/dist/client/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  9. package/dist/client/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  10. package/dist/client/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  11. package/dist/client/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  12. package/dist/client/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  13. package/dist/client/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  14. package/dist/client/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  15. package/dist/client/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  16. package/dist/client/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  17. package/dist/client/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  18. package/dist/client/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  19. package/dist/client/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  20. package/dist/client/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  21. package/dist/client/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  22. package/dist/client/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  23. package/dist/client/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  24. package/dist/client/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  25. package/dist/client/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  26. package/dist/client/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  27. package/dist/client/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  28. package/dist/client/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  29. package/dist/client/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  30. package/dist/client/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  31. package/dist/client/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  32. package/dist/client/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  33. package/dist/client/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  34. package/dist/client/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  35. package/dist/client/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  36. package/dist/client/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  37. package/dist/client/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  38. package/dist/client/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  39. package/dist/client/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  40. package/dist/client/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  41. package/dist/client/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  42. package/dist/client/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  43. package/dist/client/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  44. package/dist/client/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  45. package/dist/client/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  46. package/dist/client/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  47. package/dist/client/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  48. package/dist/client/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  49. package/dist/client/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  50. package/dist/client/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  51. package/dist/client/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  52. package/dist/client/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  53. package/dist/client/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  54. package/dist/client/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  55. package/dist/client/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  56. package/dist/client/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  57. package/dist/client/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  58. package/dist/client/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  59. package/dist/client/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  60. package/dist/client/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  61. package/dist/client/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  62. package/dist/client/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  63. package/dist/client/assets/index-C5quN7Km.js +0 -448
  64. package/dist/client/assets/index-C5quN7Km.js.map +0 -1
  65. package/dist/client/assets/index-CuQOwQs1.css +0 -1
  66. package/dist/client/index.html +0 -14
  67. package/dist/server/ask-user-question/envelope.d.ts +0 -11
  68. package/dist/server/ask-user-question/envelope.d.ts.map +0 -1
  69. package/dist/server/ask-user-question/envelope.js +0 -41
  70. package/dist/server/ask-user-question/envelope.js.map +0 -1
  71. package/dist/server/ask-user-question/plan-mode-question-tool.d.ts +0 -26
  72. package/dist/server/ask-user-question/plan-mode-question-tool.d.ts.map +0 -1
  73. package/dist/server/ask-user-question/plan-mode-question-tool.js +0 -273
  74. package/dist/server/ask-user-question/plan-mode-question-tool.js.map +0 -1
  75. package/dist/server/ask-user-question/prompt-strings.d.ts +0 -4
  76. package/dist/server/ask-user-question/prompt-strings.d.ts.map +0 -1
  77. package/dist/server/ask-user-question/prompt-strings.js +0 -18
  78. package/dist/server/ask-user-question/prompt-strings.js.map +0 -1
  79. package/dist/server/ask-user-question/registry.d.ts +0 -39
  80. package/dist/server/ask-user-question/registry.d.ts.map +0 -1
  81. package/dist/server/ask-user-question/registry.js +0 -124
  82. package/dist/server/ask-user-question/registry.js.map +0 -1
  83. package/dist/server/ask-user-question/tool.d.ts +0 -4
  84. package/dist/server/ask-user-question/tool.d.ts.map +0 -1
  85. package/dist/server/ask-user-question/tool.js +0 -68
  86. package/dist/server/ask-user-question/tool.js.map +0 -1
  87. package/dist/server/ask-user-question/types.d.ts +0 -50
  88. package/dist/server/ask-user-question/types.d.ts.map +0 -1
  89. package/dist/server/ask-user-question/types.js +0 -7
  90. package/dist/server/ask-user-question/types.js.map +0 -1
  91. package/dist/server/ask-user-question/validate.d.ts +0 -3
  92. package/dist/server/ask-user-question/validate.d.ts.map +0 -1
  93. package/dist/server/ask-user-question/validate.js +0 -67
  94. package/dist/server/ask-user-question/validate.js.map +0 -1
  95. package/dist/server/compaction-continuation.d.ts +0 -113
  96. package/dist/server/compaction-continuation.d.ts.map +0 -1
  97. package/dist/server/compaction-continuation.js +0 -65
  98. package/dist/server/compaction-continuation.js.map +0 -1
  99. package/dist/server/compaction-history.d.ts +0 -62
  100. package/dist/server/compaction-history.d.ts.map +0 -1
  101. package/dist/server/compaction-history.js +0 -180
  102. package/dist/server/compaction-history.js.map +0 -1
  103. package/dist/server/config-manager.d.ts +0 -97
  104. package/dist/server/config-manager.d.ts.map +0 -1
  105. package/dist/server/config-manager.js +0 -352
  106. package/dist/server/config-manager.js.map +0 -1
  107. package/dist/server/config.d.ts +0 -24
  108. package/dist/server/config.d.ts.map +0 -1
  109. package/dist/server/config.js +0 -67
  110. package/dist/server/config.js.map +0 -1
  111. package/dist/server/extension-manager.d.ts +0 -116
  112. package/dist/server/extension-manager.d.ts.map +0 -1
  113. package/dist/server/extension-manager.js +0 -586
  114. package/dist/server/extension-manager.js.map +0 -1
  115. package/dist/server/extension-ui-bridge.d.ts +0 -35
  116. package/dist/server/extension-ui-bridge.d.ts.map +0 -1
  117. package/dist/server/extension-ui-bridge.js +0 -228
  118. package/dist/server/extension-ui-bridge.js.map +0 -1
  119. package/dist/server/extensions-discovery.d.ts +0 -26
  120. package/dist/server/extensions-discovery.d.ts.map +0 -1
  121. package/dist/server/extensions-discovery.js +0 -107
  122. package/dist/server/extensions-discovery.js.map +0 -1
  123. package/dist/server/file-manager.d.ts +0 -79
  124. package/dist/server/file-manager.d.ts.map +0 -1
  125. package/dist/server/file-manager.js +0 -535
  126. package/dist/server/file-manager.js.map +0 -1
  127. package/dist/server/file-references.d.ts +0 -5
  128. package/dist/server/file-references.d.ts.map +0 -1
  129. package/dist/server/file-references.js +0 -249
  130. package/dist/server/file-references.js.map +0 -1
  131. package/dist/server/file-searcher.d.ts +0 -29
  132. package/dist/server/file-searcher.d.ts.map +0 -1
  133. package/dist/server/file-searcher.js +0 -318
  134. package/dist/server/file-searcher.js.map +0 -1
  135. package/dist/server/git-clone.d.ts +0 -56
  136. package/dist/server/git-clone.d.ts.map +0 -1
  137. package/dist/server/git-clone.js +0 -173
  138. package/dist/server/git-clone.js.map +0 -1
  139. package/dist/server/git-hunk-stager.d.ts +0 -56
  140. package/dist/server/git-hunk-stager.d.ts.map +0 -1
  141. package/dist/server/git-hunk-stager.js +0 -137
  142. package/dist/server/git-hunk-stager.js.map +0 -1
  143. package/dist/server/git-runner.d.ts +0 -346
  144. package/dist/server/git-runner.d.ts.map +0 -1
  145. package/dist/server/git-runner.js +0 -884
  146. package/dist/server/git-runner.js.map +0 -1
  147. package/dist/server/index.d.ts +0 -22
  148. package/dist/server/index.d.ts.map +0 -1
  149. package/dist/server/index.js +0 -262
  150. package/dist/server/index.js.map +0 -1
  151. package/dist/server/lifecycle-notifications.d.ts +0 -28
  152. package/dist/server/lifecycle-notifications.d.ts.map +0 -1
  153. package/dist/server/lifecycle-notifications.js +0 -38
  154. package/dist/server/lifecycle-notifications.js.map +0 -1
  155. package/dist/server/mcp/config.d.ts +0 -23
  156. package/dist/server/mcp/config.d.ts.map +0 -1
  157. package/dist/server/mcp/config.js +0 -139
  158. package/dist/server/mcp/config.js.map +0 -1
  159. package/dist/server/mcp/manager.d.ts +0 -40
  160. package/dist/server/mcp/manager.d.ts.map +0 -1
  161. package/dist/server/mcp/manager.js +0 -435
  162. package/dist/server/mcp/manager.js.map +0 -1
  163. package/dist/server/mcp/stdio-trust.d.ts +0 -5
  164. package/dist/server/mcp/stdio-trust.d.ts.map +0 -1
  165. package/dist/server/mcp/stdio-trust.js +0 -78
  166. package/dist/server/mcp/stdio-trust.js.map +0 -1
  167. package/dist/server/mcp/tool-bridge.d.ts +0 -33
  168. package/dist/server/mcp/tool-bridge.d.ts.map +0 -1
  169. package/dist/server/mcp/tool-bridge.js +0 -138
  170. package/dist/server/mcp/tool-bridge.js.map +0 -1
  171. package/dist/server/orchestration/config.d.ts +0 -5
  172. package/dist/server/orchestration/config.d.ts.map +0 -1
  173. package/dist/server/orchestration/config.js +0 -35
  174. package/dist/server/orchestration/config.js.map +0 -1
  175. package/dist/server/orchestration/event-bridge.d.ts +0 -32
  176. package/dist/server/orchestration/event-bridge.d.ts.map +0 -1
  177. package/dist/server/orchestration/event-bridge.js +0 -110
  178. package/dist/server/orchestration/event-bridge.js.map +0 -1
  179. package/dist/server/orchestration/inbox.d.ts +0 -9
  180. package/dist/server/orchestration/inbox.d.ts.map +0 -1
  181. package/dist/server/orchestration/inbox.js +0 -186
  182. package/dist/server/orchestration/inbox.js.map +0 -1
  183. package/dist/server/orchestration/init.d.ts +0 -2
  184. package/dist/server/orchestration/init.d.ts.map +0 -1
  185. package/dist/server/orchestration/init.js +0 -22
  186. package/dist/server/orchestration/init.js.map +0 -1
  187. package/dist/server/orchestration/store.d.ts +0 -33
  188. package/dist/server/orchestration/store.d.ts.map +0 -1
  189. package/dist/server/orchestration/store.js +0 -331
  190. package/dist/server/orchestration/store.js.map +0 -1
  191. package/dist/server/orchestration/tools.d.ts +0 -15
  192. package/dist/server/orchestration/tools.d.ts.map +0 -1
  193. package/dist/server/orchestration/tools.js +0 -621
  194. package/dist/server/orchestration/tools.js.map +0 -1
  195. package/dist/server/orchestration/types.d.ts +0 -68
  196. package/dist/server/orchestration/types.d.ts.map +0 -1
  197. package/dist/server/orchestration/types.js +0 -43
  198. package/dist/server/orchestration/types.js.map +0 -1
  199. package/dist/server/orchestration/worker-lifecycle.d.ts +0 -15
  200. package/dist/server/orchestration/worker-lifecycle.d.ts.map +0 -1
  201. package/dist/server/orchestration/worker-lifecycle.js +0 -45
  202. package/dist/server/orchestration/worker-lifecycle.js.map +0 -1
  203. package/dist/server/project-manager.d.ts +0 -25
  204. package/dist/server/project-manager.d.ts.map +0 -1
  205. package/dist/server/project-manager.js +0 -157
  206. package/dist/server/project-manager.js.map +0 -1
  207. package/dist/server/pty-manager.d.ts +0 -54
  208. package/dist/server/pty-manager.d.ts.map +0 -1
  209. package/dist/server/pty-manager.js +0 -220
  210. package/dist/server/pty-manager.js.map +0 -1
  211. package/dist/server/routes/_schemas.d.ts +0 -16
  212. package/dist/server/routes/_schemas.d.ts.map +0 -1
  213. package/dist/server/routes/_schemas.js +0 -12
  214. package/dist/server/routes/_schemas.js.map +0 -1
  215. package/dist/server/routes/ask-user-question.d.ts +0 -3
  216. package/dist/server/routes/ask-user-question.d.ts.map +0 -1
  217. package/dist/server/routes/ask-user-question.js +0 -105
  218. package/dist/server/routes/ask-user-question.js.map +0 -1
  219. package/dist/server/routes/auth.d.ts +0 -8
  220. package/dist/server/routes/auth.d.ts.map +0 -1
  221. package/dist/server/routes/auth.js +0 -225
  222. package/dist/server/routes/auth.js.map +0 -1
  223. package/dist/server/routes/config.d.ts +0 -3
  224. package/dist/server/routes/config.d.ts.map +0 -1
  225. package/dist/server/routes/config.js +0 -568
  226. package/dist/server/routes/config.js.map +0 -1
  227. package/dist/server/routes/control.d.ts +0 -3
  228. package/dist/server/routes/control.d.ts.map +0 -1
  229. package/dist/server/routes/control.js +0 -365
  230. package/dist/server/routes/control.js.map +0 -1
  231. package/dist/server/routes/exec.d.ts +0 -3
  232. package/dist/server/routes/exec.d.ts.map +0 -1
  233. package/dist/server/routes/exec.js +0 -426
  234. package/dist/server/routes/exec.js.map +0 -1
  235. package/dist/server/routes/extension-commands.d.ts +0 -22
  236. package/dist/server/routes/extension-commands.d.ts.map +0 -1
  237. package/dist/server/routes/extension-commands.js +0 -178
  238. package/dist/server/routes/extension-commands.js.map +0 -1
  239. package/dist/server/routes/extensions.d.ts +0 -8
  240. package/dist/server/routes/extensions.d.ts.map +0 -1
  241. package/dist/server/routes/extensions.js +0 -414
  242. package/dist/server/routes/extensions.js.map +0 -1
  243. package/dist/server/routes/files.d.ts +0 -3
  244. package/dist/server/routes/files.d.ts.map +0 -1
  245. package/dist/server/routes/files.js +0 -835
  246. package/dist/server/routes/files.js.map +0 -1
  247. package/dist/server/routes/git.d.ts +0 -3
  248. package/dist/server/routes/git.d.ts.map +0 -1
  249. package/dist/server/routes/git.js +0 -1058
  250. package/dist/server/routes/git.js.map +0 -1
  251. package/dist/server/routes/mcp.d.ts +0 -3
  252. package/dist/server/routes/mcp.d.ts.map +0 -1
  253. package/dist/server/routes/mcp.js +0 -403
  254. package/dist/server/routes/mcp.js.map +0 -1
  255. package/dist/server/routes/orchestration.d.ts +0 -3
  256. package/dist/server/routes/orchestration.d.ts.map +0 -1
  257. package/dist/server/routes/orchestration.js +0 -251
  258. package/dist/server/routes/orchestration.js.map +0 -1
  259. package/dist/server/routes/projects.d.ts +0 -3
  260. package/dist/server/routes/projects.d.ts.map +0 -1
  261. package/dist/server/routes/projects.js +0 -421
  262. package/dist/server/routes/projects.js.map +0 -1
  263. package/dist/server/routes/prompt.d.ts +0 -3
  264. package/dist/server/routes/prompt.d.ts.map +0 -1
  265. package/dist/server/routes/prompt.js +0 -311
  266. package/dist/server/routes/prompt.js.map +0 -1
  267. package/dist/server/routes/session-extensions.d.ts +0 -11
  268. package/dist/server/routes/session-extensions.d.ts.map +0 -1
  269. package/dist/server/routes/session-extensions.js +0 -171
  270. package/dist/server/routes/session-extensions.js.map +0 -1
  271. package/dist/server/routes/sessions.d.ts +0 -3
  272. package/dist/server/routes/sessions.d.ts.map +0 -1
  273. package/dist/server/routes/sessions.js +0 -706
  274. package/dist/server/routes/sessions.js.map +0 -1
  275. package/dist/server/routes/skills.d.ts +0 -14
  276. package/dist/server/routes/skills.d.ts.map +0 -1
  277. package/dist/server/routes/skills.js +0 -448
  278. package/dist/server/routes/skills.js.map +0 -1
  279. package/dist/server/routes/stream.d.ts +0 -3
  280. package/dist/server/routes/stream.d.ts.map +0 -1
  281. package/dist/server/routes/stream.js +0 -112
  282. package/dist/server/routes/stream.js.map +0 -1
  283. package/dist/server/routes/terminal.d.ts +0 -28
  284. package/dist/server/routes/terminal.d.ts.map +0 -1
  285. package/dist/server/routes/terminal.js +0 -211
  286. package/dist/server/routes/terminal.js.map +0 -1
  287. package/dist/server/routes/tunnel.d.ts +0 -13
  288. package/dist/server/routes/tunnel.d.ts.map +0 -1
  289. package/dist/server/routes/tunnel.js +0 -231
  290. package/dist/server/routes/tunnel.js.map +0 -1
  291. package/dist/server/session-registry.d.ts +0 -164
  292. package/dist/server/session-registry.d.ts.map +0 -1
  293. package/dist/server/session-registry.js +0 -754
  294. package/dist/server/session-registry.js.map +0 -1
  295. package/dist/server/skill-overrides.d.ts +0 -47
  296. package/dist/server/skill-overrides.d.ts.map +0 -1
  297. package/dist/server/skill-overrides.js +0 -178
  298. package/dist/server/skill-overrides.js.map +0 -1
  299. package/dist/server/sse-bridge.d.ts +0 -31
  300. package/dist/server/sse-bridge.d.ts.map +0 -1
  301. package/dist/server/sse-bridge.js +0 -158
  302. package/dist/server/sse-bridge.js.map +0 -1
  303. package/dist/server/tool-overrides.d.ts +0 -39
  304. package/dist/server/tool-overrides.d.ts.map +0 -1
  305. package/dist/server/tool-overrides.js +0 -121
  306. package/dist/server/tool-overrides.js.map +0 -1
  307. package/dist/server/tunnel/executable-search.d.ts +0 -45
  308. package/dist/server/tunnel/executable-search.d.ts.map +0 -1
  309. package/dist/server/tunnel/executable-search.js +0 -150
  310. package/dist/server/tunnel/executable-search.js.map +0 -1
  311. package/dist/server/tunnel/install-help.d.ts +0 -19
  312. package/dist/server/tunnel/install-help.d.ts.map +0 -1
  313. package/dist/server/tunnel/install-help.js +0 -47
  314. package/dist/server/tunnel/install-help.js.map +0 -1
  315. package/dist/server/tunnel/providers/ngrok.d.ts +0 -34
  316. package/dist/server/tunnel/providers/ngrok.d.ts.map +0 -1
  317. package/dist/server/tunnel/providers/ngrok.js +0 -464
  318. package/dist/server/tunnel/providers/ngrok.js.map +0 -1
  319. package/dist/server/tunnel/registry.d.ts +0 -15
  320. package/dist/server/tunnel/registry.d.ts.map +0 -1
  321. package/dist/server/tunnel/registry.js +0 -58
  322. package/dist/server/tunnel/registry.js.map +0 -1
  323. package/dist/server/tunnel/service.d.ts +0 -15
  324. package/dist/server/tunnel/service.d.ts.map +0 -1
  325. package/dist/server/tunnel/service.js +0 -158
  326. package/dist/server/tunnel/service.js.map +0 -1
  327. package/dist/server/tunnel/types.d.ts +0 -166
  328. package/dist/server/tunnel/types.d.ts.map +0 -1
  329. package/dist/server/tunnel/types.js +0 -217
  330. package/dist/server/tunnel/types.js.map +0 -1
package/README.md CHANGED
@@ -1,30 +1,266 @@
1
- # pi-kot v0.1.20
1
+ # pi-kot
2
2
 
3
- Browser UI for the [pi coding agent](https://pi.dev).
4
- Self-hosted React workbench: streaming chat, session tree, file browser, terminal, git panel.
3
+ <img width="2560" height="1440" alt="New Project" src="https://github.com/user-attachments/assets/fa6a4dd8-c61e-43e4-ba36-4b5bf2640745" />
5
4
 
6
- ## Quick start
7
5
 
6
+ > A browser-based UI wrapper for the [pi coding agent](https://pi.dev)
7
+
8
+ pi-kot wraps the `@earendil-works/pi-coding-agent` SDK in an HTTP bridge with a React-based web UI. It exposes the agent's capabilities through REST, SSE, and WebSocket, giving you a fully interactive chat-and-terminal environment in your browser — no desktop app required.
9
+
10
+ ---
11
+
12
+ ## Motivation
13
+
14
+ pi-kot was created because I was looking for an agentic harness with minimal token usage and high customization — one that behaves the way I want and looks the way I want. I've used many, and I really like Hermes, but I'm in love with Pi.
15
+
16
+ Then I decided to push Qwen3.6-35B-A3B to its absolute limit to build pi-kot. The setup I use is an RTX 3060 12GB VRAM running Qwen3 through llama.cpp with turboquant by [TheTom](https://github.com/TheTom/llama-cpp-turboquant), keeping context around 120k. That gets me to about 19-25 tps — painfully slow — but it stays stable: no failures, no tool-calling loops. pi-kot is built 90% with Qwen3.6-35B-A3B.
17
+
18
+ This project was built out of **love and curiosity**.
19
+
20
+ ---
21
+
22
+ ## Features
23
+
24
+ | Feature | Description |
25
+ |---|---|
26
+ | **💬 Chat** | Full agent conversation with streaming, markdown rendering, code blocks with syntax highlighting, and diff views |
27
+ | **🖥️ Terminal** | Multi-tab xterm.js terminal with persistent PTY sessions, **touch gestures** (long-press+drag arrows, double-tap Tab, 3-finger paste), and a mobile quick-keys bar |
28
+ | **📁 File Explorer** | Browse, read, edit, and manage files in your project workspace with folder drag-and-drop uploads, drag-to-move, and ZIP downloads |
29
+ | **🔧 MCP Support** | Add, configure, and toggle MCP servers with a full settings UI |
30
+ | **💾 Persistent UI Prefs** | Theme, sticky header, token usage toggle, and image compression — saved **server-side** in `~/.pi/agent/ui-settings.json`. Survives browser cache clears and device switches |
31
+ | **🧩 Orchestration** | Multi-agent workflows — supervise sub-agents, delegate tasks, inspect results |
32
+ | **🔐 Auth** | Password-based login, API key support, JWT sessions |
33
+ | **📱 Mobile-friendly** | PWA-ready, adaptive layout, touch gestures, virtual keyboard support |
34
+ | **🔄 Session persistence** | Sessions survive restarts via JSONL on disk; reattach on reconnect |
35
+ | **🎨 Unified Theme System** | Consistent light/dark theme tokens across panels, modals, inputs, and terminal chrome |
36
+ | **🔌 Tunnel** | Built-in tunnel helper UI for exposing local pi-kot traffic via supported providers, with install checks, diagnostics, and one-click start/stop |
37
+ | **📦 Extensions** | Discover and install pi extensions from the UI — some features only appear after installing the right extension |
38
+
39
+ ---
40
+
41
+ ## Quick Start
42
+
43
+ ### One-shot setup via npx
44
+
45
+ ```bash
46
+ npx pi-kot --password pikot
47
+ ```
48
+
49
+ help
8
50
  ```bash
9
- npx pi-kot # one-shot, no install
10
- npm install -g pi-kot # or install globally
11
- pi-kot # then run anywhere
51
+ npx pi-kot --help
12
52
  ```
13
53
 
14
- Opens at **http://localhost:3333** by default.
54
+ Available options:
55
+
56
+ | Flag | Description | Default |
57
+ |---|---|---|
58
+ | `--port <n>` | Port to listen on | `3333` |
59
+ | `--host <h>` | Host/interface to bind to | `0.0.0.0` |
60
+ | `--password <pw>` | Enable UI password auth | — |
61
+ | `--api-key <key>` | Static API key for scripts/CI | — |
62
+ | `--workspace <path>` | Workspace root directory | `~/.pi-kot/workspace/default` |
63
+ | `--log-level <level>` | Logging level | `info` |
64
+ | `--help, -h` | Show help | — |
65
+ | `--version, -v` | Show version | — |
66
+
67
+ All flags can also be set with environment variables: `PORT`, `HOST`, `UI_PASSWORD`, `API_KEY`, `WORKSPACE_PATH`, `LOG_LEVEL`, `MINIMAL_UI`.
15
68
 
16
- ## Options
69
+ ### Example: install, run, and expose it
70
+
71
+ ```bash
72
+ # Install dependencies
73
+ npm install
17
74
 
75
+ # Run directly with all settings inline
76
+ npx pi-kot --port 3333 --host 127.0.0.1 --password secret --workspace ~/Code
18
77
  ```
19
- pi-kot --port 4000
20
- pi-kot --host 127.0.0.1
21
- pi-kot --password mysecret
22
- pi-kot --workspace ~/Code
23
- pi-kot --help
78
+
79
+ ### Dev mode (server + Vite hot-reload)
80
+
81
+ ```bash
82
+ npm run dev
83
+
84
+ # Open http://localhost:5173
85
+ ```
86
+
87
+ ### Production
88
+
89
+ ```bash
90
+ npm run build
91
+ npm run start
92
+
93
+ # Open http://localhost:3333
24
94
  ```
25
95
 
26
- All options have matching env vars: `PORT`, `HOST`, `UI_PASSWORD`, `API_KEY`, `WORKSPACE_PATH`, `LOG_LEVEL`.
96
+ Or build for production:
97
+
98
+ ```bash
99
+ npm run build
100
+ npm run start
101
+ # Open http://localhost:3333
102
+ ```
103
+
104
+ ---
105
+
106
+ ## Terminal Touch Gestures
107
+
108
+ pi-kot's terminal supports mobile touch gestures inspired by Termius:
109
+
110
+ | Gesture | Action | Details |
111
+ |---|---|---|
112
+ | **Long-press 150ms + drag** | Arrow keys (↑↓←→) | Continuous with 3 speed gears — drag further for faster |
113
+ | **Double-tap** | Tab key | Two quick taps within 300ms |
114
+ | **3-finger tap** | Paste | Reads from system clipboard |
115
+ | **2-finger scroll** | Scroll buffer | Up/down through terminal history |
116
+
117
+ ---
118
+
119
+ ## 📦 Recommended Extensions
120
+
121
+ Some features only appear **after** installing the corresponding extension. Head to the **Extensions tab** (⚙ → Extensions) and install the 💎 **Recommended for pi-kot** extensions:
122
+
123
+ | Extension | Package | Unlocks |
124
+ |---|---|---|
125
+ | **pi-web-access** 🌐 | `npm:pi-web-access` | Web search, content extraction, API interaction tools for the agent |
126
+ | **pi-playwright** 🎭 | `npm:pi-playwright` | Browser automation — the agent can interact with real web UI |
127
+ | **pi-vision-tool** 👁️ | `npm:pi-vision-tool` | **Vision agent selection** — non-vision models can delegate `describe_image` to a vision-capable model; full vision settings exposed in Extensions tab |
128
+ | **pi-rewind** ⏪ | `npm:@ayulab/pi-rewind` | **Session revert** — checkpoint, rewind, and branch from any prior state |
129
+ | **pi-plan-mode** 📋 | `npm:@narumitw/pi-plan-mode` | **Plan mode** — codex-like structured planning. Blocks mutating tools, adds `plan_mode_question` for structured user questions |
130
+ | **context-mode** 🧠 | `npm:context-mode` | **Context window savings** — sandboxed code execution, FTS5 knowledge base, BM25 search, and session continuity across compaction |
131
+
132
+ > 💡 **Tip**: Some UI elements only appear **after** the extension is installed. For example:
133
+ > - **Vision model selector** in Extensions tab → appears only after `pi-vision-tool` is installed
134
+ > - **Rewind button** on chat messages → appears only after `pi-rewind` is installed
135
+ > - **Plan mode tool safety** → appears only after `pi-plan-mode` is installed
136
+ > - **Context stats/doctor commands** → appears only after `context-mode` is installed
137
+ > If something mentioned in this README doesn't show up, check the Extensions tab first.
138
+
139
+ ---
140
+
141
+ ## Tunnel
142
+
143
+ pi-kot includes a built-in tunnel helper for exposing your local instance to the internet.
144
+
145
+ - **Provider**: currently supports **ngrok**
146
+ - **Modes**: **quick** tunnel mode
147
+ - **Intents**: ephemeral-public, persistent-public, private-network
148
+
149
+ ### Using the Tunnel tab
150
+
151
+ 1. Open **Settings** → **Tunnel**
152
+ 2. The tab shows an installation check for the tunnel provider
153
+ 3. If missing, it shows the install command and download link
154
+ 4. Run **diagnostics** to verify binary, auth token, and network readiness
155
+ 5. Click **Start Tunnel** to launch; the public URL is shown and can be copied
156
+ 6. Click **Stop Tunnel** to tear it down when finished
157
+
158
+ ### API routes
159
+
160
+ The server exposes tunnel controls under `/api/v1/tunnel`:
161
+
162
+ | Method | Path | Purpose |
163
+ |---|---|---|
164
+ | `GET` | `/api/v1/tunnel/check` | Check whether ngrok is installed and return version/platform info |
165
+ | `GET` | `/api/v1/tunnel/doctor` | Run diagnostics for binary, auth token, and network checks |
166
+ | `GET` | `/api/v1/tunnel/status` | Return whether a tunnel is active, its public URL, mode, provider, and local port |
167
+ | `POST` | `/api/v1/tunnel/start` | Start an ngrok tunnel |
168
+ | `POST` | `/api/v1/tunnel/stop` | Stop an active tunnel |
169
+
170
+ ---
171
+
172
+ ## Configuration
173
+
174
+ See [START.md](./START.md) for the full configuration reference — ports, auth, storage paths, and more.
175
+
176
+ ---
177
+
178
+ ## File Explorer
179
+
180
+ Browse and manage files in your project workspace.
181
+
182
+ - **Open**: Click a file to read it
183
+ - **Edit**: Modify content directly in the editor (CodeMirror)
184
+ - **New file/folder**: Right-click in the tree
185
+ - **Delete**: Right-click a file
186
+ - **Drag to move**: Drag files or folders onto another folder to move them in-app
187
+ - **Upload files/folders**: Drag from your OS, use the folder picker, or click the upload buttons
188
+ - **Download folder as ZIP**: Right-click a folder in the explorer and choose the download action
189
+ - **Clone project**: Use the clone dialog to pull a repo into the workspace, with optional custom destination path
190
+
191
+ The file explorer also shows files the agent has created or modified during the session.
192
+
193
+ ---
194
+
195
+ ## Git Panel
196
+
197
+ The Git panel shows the current repository's status — modified files, staged changes, commit history, and branch information.
198
+
199
+ - **View changes**: See diffs of modified files
200
+ - **Stage/unstage**: Stage files for commit
201
+ - **Commit**: Write and execute commits
202
+ - **Branch**: Switch branches
203
+ - **Commit history**: Browse commits and expand each one to see changed files
204
+ - **Inline commit diffs**: Click a file inside a commit to view its unified diff directly in the panel
205
+
206
+ ---
207
+
208
+ ## Settings
209
+
210
+ Access settings via the **⚙** icon in the header.
211
+
212
+ | Tab | What you can configure |
213
+ |---|---|
214
+ | **Appearance** | Theme picker, sticky user header, show token usage, image compression — all **persisted server-side** |
215
+ | **Providers** | View configured providers, add/remove API keys, add custom providers, raw models.json editor |
216
+ | **Agent** | Default provider, default model, thinking level, model scope (hide unused models), orchestrator model |
217
+ | **General** | Server & SDK versions, update check, reload page |
218
+ | **Extensions ⚗️** | Install/manage pi extensions — **install the recommended ones to unlock features** |
219
+ | **Skills** | Enable/disable agent skills |
220
+ | **Tunnel 🚇** | Tunnel provider install check, diagnostics, start/stop tunnel, copy public URL |
221
+
222
+ ### Image compression
223
+
224
+ You can toggle automatic client-side image compression before sending images to the model. When enabled, images are downscaled to a max dimension and compressed to JPEG to reduce token usage.
225
+
226
+ ---
227
+
228
+ ## Project Structure
229
+
230
+ ```
231
+ pi-kot/
232
+ ├── packages/
233
+ │ ├── client/ # React SPA (Vite, xterm.js, Zustand)
234
+ │ │ └── src/
235
+ │ │ ├── components/ # UI components (ChatView, TerminalPanel, SlidePanel, AddProviderDialog, ...)
236
+ │ │ ├── stores/ # Zustand stores (layout, session, terminal, MCP, preferences)
237
+ │ │ ├── hooks/ # Custom hooks (touch swipe, extensions, ...)
238
+ │ │ └── lib/ # Utilities (API client, SSE, theme, ...)
239
+ │ └── server/ # Express server (REST, SSE, WebSocket, PTY)
240
+ │ └── src/
241
+ │ ├── routes/ # API routes (sessions, terminal, git, files, projects, extensions, tunnel, ...)
242
+ │ ├── mcp/ # MCP server registry & manager
243
+ │ ├── orchestration/ # Multi-agent orchestration
244
+ │ ├── ask-user-question/ # Web-compatible tool wrappers (e.g. plan_mode_question)
245
+ │ ├── tunnel/ # Tunnel providers, registry, service, install/doctor helpers
246
+ │ └── ... # Config, auth, PTY manager, extension manager, etc.
247
+ ├── START.md # Configuration & running guide
248
+ ```
249
+
250
+ ---
251
+
252
+ ## Tech Stack
253
+
254
+ | Layer | Technology |
255
+ |---|---|
256
+ | **UI** | React, TypeScript, Vite, xterm.js, CodeMirror, Zustand |
257
+ | **Server** | Express, ws (WebSocket), node-pty |
258
+ | **SDK** | `@earendil-works/pi-coding-agent` |
259
+ | **Auth** | JWT, scrypt password hashing |
260
+ | **State** | Zustand (client), JSONL session files (server) |
261
+
262
+ ---
27
263
 
28
- ## Source
264
+ ## License
29
265
 
30
- [github.com/YOUR_USERNAME/pi-kot](https://github.com/YOUR_USERNAME/pi-kot)
266
+ MIT
package/package.json CHANGED
@@ -1,71 +1,19 @@
1
1
  {
2
2
  "name": "pi-kot",
3
- "version": "0.1.20",
3
+ "version": "0.1.21",
4
4
  "description": "Browser UI for the pi coding agent — self-hosted React workbench with chat, file browser, terminal, git panel, and session tree.",
5
- "keywords": [
6
- "pi",
7
- "coding-agent",
8
- "ai",
9
- "llm",
10
- "agent",
11
- "webui",
12
- "fastify",
13
- "react"
14
- ],
15
- "homepage": "https://github.com/YOUR_USERNAME/pi-kot#readme",
16
- "bugs": {
17
- "url": "https://github.com/YOUR_USERNAME/pi-kot/issues"
18
- },
19
- "repository": {
20
- "type": "git",
21
- "url": "git+https://github.com/YOUR_USERNAME/pi-kot.git"
22
- },
23
- "license": "MIT",
24
5
  "type": "module",
25
6
  "bin": {
26
7
  "pi-kot": "bin/pi-kot.mjs"
27
8
  },
9
+ "dependencies": {
10
+ "@ayulab/pi-rewind": "^0.3.1",
11
+ "@earendil-works/pi-coding-agent": "^0.80.2"
12
+ },
13
+ "private": false,
28
14
  "files": [
29
15
  "bin/",
30
16
  "dist/",
31
- "README.md",
32
- "LICENSE"
33
- ],
34
- "engines": {
35
- "node": ">=18"
36
- },
37
- "dependencies": {
38
- "@codemirror/autocomplete": "^6.20.3",
39
- "@codemirror/basic-setup": "^0.20.0",
40
- "@codemirror/lang-cpp": "^6.0.3",
41
- "@codemirror/lang-css": "^6.3.1",
42
- "@codemirror/lang-html": "^6.4.11",
43
- "@codemirror/lang-java": "^6.0.2",
44
- "@codemirror/lang-javascript": "^6.2.5",
45
- "@codemirror/lang-json": "^6.0.2",
46
- "@codemirror/lang-markdown": "^6.5.0",
47
- "@codemirror/lang-python": "^6.2.1",
48
- "@codemirror/lang-rust": "^6.0.2",
49
- "@codemirror/lang-yaml": "^6.1.3",
50
- "@codemirror/language": "^6.12.3",
51
- "@codemirror/legacy-modes": "^6.5.3",
52
- "@earendil-works/pi-agent-core": "^0.80.2",
53
- "@earendil-works/pi-ai": "^0.80.2",
54
- "@earendil-works/pi-coding-agent": "^0.80.2",
55
- "@fastify/cors": "^11.0.1",
56
- "@fastify/multipart": "^10.0.0",
57
- "@fastify/static": "^9.1.3",
58
- "@fastify/swagger": "^9.7.0",
59
- "@fastify/swagger-ui": "^6.0.0",
60
- "@fastify/websocket": "^11.2.0",
61
- "@modelcontextprotocol/sdk": "^1.29.0",
62
- "codemirror": "^6.0.2",
63
- "fastify": "^5.3.2",
64
- "jsonwebtoken": "^9.0.3",
65
- "node-pty": "^1.1.0",
66
- "tar": "^7.5.15"
67
- },
68
- "publishConfig": {
69
- "access": "public"
70
- }
17
+ "package.json"
18
+ ]
71
19
  }
package/bin/pi-kot.mjs DELETED
@@ -1,148 +0,0 @@
1
- #!/usr/bin/env node
2
- /**
3
- * pi-kot CLI launcher.
4
- *
5
- * Published npm package layout:
6
- *
7
- * pi-kot/
8
- * ├── bin/pi-kot.mjs ← this file (npm links as the binary)
9
- * ├── dist/server/ ← compiled Fastify server
10
- * └── dist/client/ ← compiled Vite SPA
11
- *
12
- * The server's default CLIENT_DIST_PATH resolves relative to its own
13
- * compiled file, which works for the in-repo dev flow but NOT for the
14
- * flat published package. We override it here so the same server entry
15
- * point works in all deployment shapes without touching server code.
16
- *
17
- * Supported env vars (all optional):
18
- * PORT default 3333
19
- * HOST default 0.0.0.0 (use 127.0.0.1 for loopback-only)
20
- * UI_PASSWORD enable password auth
21
- * API_KEY static API key for scripts/CI
22
- * WORKSPACE_PATH default ~/.pi-kot/workspace/default
23
- * LOG_LEVEL default info
24
- *
25
- * Supported flags:
26
- * --port <n>
27
- * --host <h>
28
- * --password <pw> sets UI_PASSWORD
29
- * --api-key <key> sets API_KEY
30
- * --workspace <path> sets WORKSPACE_PATH
31
- * --log-level <level>
32
- * --help / -h
33
- * --version / -v
34
- */
35
- import { readFileSync, existsSync } from "node:fs";
36
- import { dirname, resolve } from "node:path";
37
- import { fileURLToPath, pathToFileURL } from "node:url";
38
- import { homedir } from "node:os";
39
-
40
- const here = dirname(fileURLToPath(import.meta.url));
41
- const packageRoot = resolve(here, "..");
42
- const pkg = JSON.parse(readFileSync(resolve(packageRoot, "package.json"), "utf8"));
43
-
44
- // ── Flag parser ──────────────────────────────────────────────────────────────
45
-
46
- const args = process.argv.slice(2);
47
-
48
- if (args.includes("--help") || args.includes("-h")) {
49
- process.stdout.write(`
50
- pi-kot v${pkg.version} — Browser UI for the pi coding agent
51
-
52
- Usage:
53
- npx pi-kot [options]
54
- pi-kot [options]
55
-
56
- Options:
57
- --port <n> Port to listen on (default: 3333)
58
- --host <h> Host/interface to bind to (default: 0.0.0.0)
59
- --password <pw> Enable UI password auth
60
- --api-key <key> Static API key for scripts/CI
61
- --workspace <path> Workspace root directory (default: ~/.pi-kot/workspace/default)
62
- --log-level <level> Logging level (default: info)
63
- --help, -h Show this help
64
- --version, -v Show version
65
-
66
- All options can also be set via environment variables:
67
- PORT, HOST, UI_PASSWORD, API_KEY, WORKSPACE_PATH, LOG_LEVEL
68
-
69
- Examples:
70
- npx pi-kot
71
- npx pi-kot --port 4000 --workspace ~/Code
72
- npx pi-kot --password secret --host 127.0.0.1
73
- PORT=8080 npx pi-kot
74
- `.trimStart());
75
- process.exit(0);
76
- }
77
-
78
- if (args.includes("--version") || args.includes("-v")) {
79
- process.stdout.write(`pi-kot ${pkg.version}\n`);
80
- process.exit(0);
81
- }
82
-
83
- // Parse --flag value pairs and apply to process.env before config.ts loads
84
- const flagMap = {
85
- "--port": "PORT",
86
- "--host": "HOST",
87
- "--password": "UI_PASSWORD",
88
- "--api-key": "API_KEY",
89
- "--workspace": "WORKSPACE_PATH",
90
- "--log-level": "LOG_LEVEL",
91
- };
92
-
93
- for (let i = 0; i < args.length; i++) {
94
- const envKey = flagMap[args[i]];
95
- if (envKey !== undefined) {
96
- const val = args[i + 1];
97
- if (val === undefined || val.startsWith("--")) {
98
- process.stderr.write(`pi-kot: ${args[i]} requires a value\n`);
99
- process.exit(2);
100
- }
101
- process.env[envKey] = val;
102
- i++; // skip value
103
- } else {
104
- process.stderr.write(`pi-kot: unknown option: ${args[i]}\n`);
105
- process.stderr.write(`pi-kot: run with --help for usage\n`);
106
- process.exit(2);
107
- }
108
- }
109
-
110
- // ── Bootstrap ────────────────────────────────────────────────────────────────
111
-
112
- // Only override CLIENT_DIST_PATH in the flat published layout.
113
- // In the monorepo (packages/client/dist exists), config.ts's default path is correct.
114
- if (!existsSync(resolve(packageRoot, "packages", "client", "dist"))) {
115
- process.env.CLIENT_DIST_PATH ??= resolve(packageRoot, "dist", "client");
116
- }
117
- process.env.NODE_ENV ??= "production";
118
-
119
- // Auto-mount the current working directory as a project if it's not the
120
- // workspace root itself. This makes `npx pi-kot` from any project folder
121
- // show that folder in the project list automatically.
122
- const cwd = process.cwd();
123
- const defaultWorkspace = resolve(homedir(), ".pi-kot", "workspace", "default");
124
- const workspacePath = resolve(process.env.WORKSPACE_PATH ?? defaultWorkspace);
125
- if (cwd !== workspacePath) {
126
- process.env.MOUNT_CWD_PROJECT = cwd;
127
- }
128
-
129
- // Log startup info
130
- const port = process.env.PORT ?? "3333";
131
- const host = process.env.HOST ?? "0.0.0.0";
132
- const displayHost = host === "0.0.0.0" ? "localhost" : host;
133
- process.stdout.write(`pi-kot v${pkg.version} starting on http://${displayHost}:${port}\n`);
134
-
135
- // Import and start the server
136
- // Monorepo: packages/server/dist/index.js
137
- // Published: dist/server/index.js
138
- const monorepoEntry = resolve(packageRoot, "packages", "server", "dist", "index.js");
139
- const publishedEntry = resolve(packageRoot, "dist", "server", "index.js");
140
- const serverEntry = existsSync(monorepoEntry) ? monorepoEntry :
141
- existsSync(publishedEntry) ? publishedEntry :
142
- null;
143
- if (!serverEntry) {
144
- process.stderr.write("pi-kot: cannot find server entry point\n");
145
- process.exit(1);
146
- }
147
- const { start } = await import(pathToFileURL(serverEntry).href);
148
- await start();