@selesai/code 0.9.9 → 0.9.11

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 (306) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/dist/cli/args.js +13 -2
  3. package/dist/cli/args.test.js +8 -0
  4. package/dist/cli/credential-print.js +4 -4
  5. package/dist/cli.js +0 -0
  6. package/dist/core/agent-session-auto-handoff.test.js +24 -1
  7. package/dist/core/agent-session.d.ts +11 -4
  8. package/dist/core/agent-session.js +99 -39
  9. package/dist/core/compaction/branch-summarization.js +30 -30
  10. package/dist/core/compaction/compaction.js +81 -81
  11. package/dist/core/compaction/utils.js +2 -2
  12. package/dist/core/defaults.d.ts +1 -0
  13. package/dist/core/defaults.js +9 -0
  14. package/dist/core/export-html/template.css +1066 -1066
  15. package/dist/core/export-html/template.html +55 -55
  16. package/dist/core/export-html/template.js +1864 -1864
  17. package/dist/core/export-html/vendor/highlight.min.js +1212 -1212
  18. package/dist/core/export-html/vendor/marked.min.js +78 -78
  19. package/dist/core/extensions/loader.js +108 -35
  20. package/dist/core/extensions/loader.test.d.ts +1 -0
  21. package/dist/core/extensions/loader.test.js +21 -0
  22. package/dist/core/extensions/types.d.ts +12 -2
  23. package/dist/core/keybindings.d.ts +2 -2
  24. package/dist/core/messages.js +7 -7
  25. package/dist/core/model-resolver.d.ts +1 -0
  26. package/dist/core/model-resolver.js +10 -4
  27. package/dist/core/package-manager.js +4 -4
  28. package/dist/core/sdk.d.ts +5 -5
  29. package/dist/core/sdk.js +16 -4
  30. package/dist/core/settings-manager.d.ts +6 -0
  31. package/dist/core/settings-manager.js +22 -0
  32. package/dist/core/tools/bash.d.ts +18 -1
  33. package/dist/core/tools/bash.js +41 -23
  34. package/dist/core/tools/index.d.ts +4 -1
  35. package/dist/core/tools/index.js +9 -1
  36. package/dist/core/tools/powershell.d.ts +15 -0
  37. package/dist/core/tools/powershell.js +38 -0
  38. package/dist/core/tools/powershell.test.d.ts +1 -0
  39. package/dist/core/tools/powershell.test.js +20 -0
  40. package/dist/extensions/context-compaction-reminder.test.ts +82 -82
  41. package/dist/extensions/context-compaction-reminder.ts +28 -28
  42. package/dist/extensions/copy-turn.test.ts +24 -1
  43. package/dist/extensions/copy-turn.ts +6 -1
  44. package/dist/extensions/handoff-new.test.ts +15 -2
  45. package/dist/extensions/handoff-new.ts +44 -30
  46. package/dist/extensions/pi-intercom/LICENSE +21 -21
  47. package/dist/extensions/pi-intercom/broker/client.test.ts +83 -83
  48. package/dist/extensions/pi-intercom/broker/extension.test.ts +387 -387
  49. package/dist/extensions/pi-intercom/broker/framing.test.ts +114 -114
  50. package/dist/extensions/pi-intercom/broker/paths.test.ts +153 -153
  51. package/dist/extensions/pi-intercom/broker/paths.ts +134 -134
  52. package/dist/extensions/pi-intercom/broker/runtime-claim.test.ts +34 -34
  53. package/dist/extensions/pi-intercom/broker/runtime-claim.ts +21 -21
  54. package/dist/extensions/pi-intercom/cwd.test.ts +40 -40
  55. package/dist/extensions/pi-intercom/cwd.ts +31 -31
  56. package/dist/extensions/pi-intercom/extension-api.ts +44 -44
  57. package/dist/extensions/pi-intercom/format-context.test.ts +31 -31
  58. package/dist/extensions/pi-intercom/format-context.ts +32 -32
  59. package/dist/extensions/pi-intercom/test/overlay-width.test.ts +66 -66
  60. package/dist/extensions/pi-intercom/ui/compose.ts +143 -143
  61. package/dist/extensions/pi-intercom/ui/session-list.ts +166 -166
  62. package/dist/extensions/pi-powerline-footer/bash-mode/shell-session.ts +286 -286
  63. package/dist/extensions/pi-powerline-footer/bash-mode/transcript.ts +108 -108
  64. package/dist/extensions/pi-powerline-footer/separators.ts +57 -57
  65. package/dist/extensions/pi-powerline-footer/tests/session-usage.test.ts +47 -47
  66. package/dist/extensions/pi-powerline-footer/tests/tps.test.ts +39 -39
  67. package/dist/extensions/pi-powerline-footer/theme.example.json +24 -24
  68. package/dist/extensions/pi-powerline-footer/theme.json +12 -12
  69. package/dist/extensions/pi-powerline-footer/tps.ts +345 -345
  70. package/dist/extensions/pi-rewind-hook/README.md +245 -245
  71. package/dist/extensions/pi-rewind-hook/index.ts +1445 -1445
  72. package/dist/extensions/pi-rewind-hook/package.json +29 -29
  73. package/dist/extensions/pi-subagents/install.mjs +0 -0
  74. package/dist/extensions/pi-web-agent/package.json +31 -31
  75. package/dist/extensions/pi-web-agent/src/backends/config.ts +205 -205
  76. package/dist/extensions/pi-web-agent/src/backends/doctor.ts +136 -136
  77. package/dist/extensions/pi-web-agent/src/backends/factory.ts +152 -152
  78. package/dist/extensions/pi-web-agent/src/backends/settings-reader.ts +25 -25
  79. package/dist/extensions/pi-web-agent/src/cache/ttl-cache.ts +28 -28
  80. package/dist/extensions/pi-web-agent/src/changelog-notice.ts +136 -136
  81. package/dist/extensions/pi-web-agent/src/commands/web-agent-config.ts +946 -946
  82. package/dist/extensions/pi-web-agent/src/extension.ts +126 -126
  83. package/dist/extensions/pi-web-agent/src/extract/readability.ts +118 -118
  84. package/dist/extensions/pi-web-agent/src/fetch/browser-resolution.ts +199 -199
  85. package/dist/extensions/pi-web-agent/src/fetch/firecrawl-fetch.ts +100 -100
  86. package/dist/extensions/pi-web-agent/src/fetch/headless-fetch.ts +117 -117
  87. package/dist/extensions/pi-web-agent/src/fetch/http-fetch.ts +67 -67
  88. package/dist/extensions/pi-web-agent/src/orchestration/answer-synthesizer.ts +60 -60
  89. package/dist/extensions/pi-web-agent/src/orchestration/candidate-selector.ts +50 -50
  90. package/dist/extensions/pi-web-agent/src/orchestration/direct-url.ts +52 -52
  91. package/dist/extensions/pi-web-agent/src/orchestration/evidence-quality.ts +105 -105
  92. package/dist/extensions/pi-web-agent/src/orchestration/evidence-ranker.ts +45 -45
  93. package/dist/extensions/pi-web-agent/src/orchestration/index.ts +28 -28
  94. package/dist/extensions/pi-web-agent/src/orchestration/query-planner.ts +47 -47
  95. package/dist/extensions/pi-web-agent/src/orchestration/research-orchestrator.ts +376 -376
  96. package/dist/extensions/pi-web-agent/src/orchestration/research-types.ts +64 -64
  97. package/dist/extensions/pi-web-agent/src/orchestration/research-worker.ts +181 -181
  98. package/dist/extensions/pi-web-agent/src/orchestration/source-profile.ts +101 -101
  99. package/dist/extensions/pi-web-agent/src/orchestration/stop-decider.ts +81 -81
  100. package/dist/extensions/pi-web-agent/src/presentation/config-store.ts +210 -210
  101. package/dist/extensions/pi-web-agent/src/presentation/config.ts +75 -75
  102. package/dist/extensions/pi-web-agent/src/presentation/explore-presentation.ts +61 -61
  103. package/dist/extensions/pi-web-agent/src/presentation/fetch-presentation.ts +54 -54
  104. package/dist/extensions/pi-web-agent/src/presentation/search-presentation.ts +41 -41
  105. package/dist/extensions/pi-web-agent/src/presentation/select-view.ts +20 -20
  106. package/dist/extensions/pi-web-agent/src/presentation/types.ts +63 -63
  107. package/dist/extensions/pi-web-agent/src/search/brave.ts +114 -114
  108. package/dist/extensions/pi-web-agent/src/search/duckduckgo.ts +72 -72
  109. package/dist/extensions/pi-web-agent/src/search/searxng.ts +96 -96
  110. package/dist/extensions/pi-web-agent/src/tools/web-explore.ts +71 -71
  111. package/dist/extensions/pi-web-agent/src/tools/web-fetch-headless.ts +31 -31
  112. package/dist/extensions/pi-web-agent/src/tools/web-fetch.ts +31 -31
  113. package/dist/extensions/pi-web-agent/src/tools/web-search.ts +157 -157
  114. package/dist/extensions/pi-web-agent/src/types.ts +88 -88
  115. package/dist/extensions/ponytail/package.json +8 -8
  116. package/dist/extensions/question/batch.ts +103 -103
  117. package/dist/extensions/question/constants.ts +30 -30
  118. package/dist/extensions/question/helpers.ts +58 -58
  119. package/dist/extensions/question/navigation.ts +14 -14
  120. package/dist/extensions/question/package.json +19 -19
  121. package/dist/extensions/question/schemas.ts +43 -43
  122. package/dist/extensions/question/selection-mode.ts +46 -46
  123. package/dist/extensions/question/shortcuts.ts +44 -44
  124. package/dist/extensions/question/types.ts +132 -132
  125. package/dist/extensions/test-resolve-hook-impl.mjs +6 -6
  126. package/dist/extensions/test-resolve-hook.mjs +6 -6
  127. package/dist/extensions/web-agent-onboarding.ts +222 -222
  128. package/dist/extensions/workflow/package.json +17 -17
  129. package/dist/package-manager-cli.js +71 -71
  130. package/dist/rpc-entry.js +0 -0
  131. package/dist/skills/agent-browser/SKILL.md +52 -52
  132. package/dist/skills/batch-grill-me/SKILL.md +19 -19
  133. package/dist/skills/grill-me/SKILL.md +10 -10
  134. package/dist/skills/handoff/SKILL.md +16 -16
  135. package/dist/skills/handoff-text/SKILL.md +14 -14
  136. package/dist/skills/implanger/SKILL.md +69 -69
  137. package/dist/skills/improve-codebase/REFERENCE.md +78 -78
  138. package/dist/skills/improve-codebase/SKILL.md +178 -178
  139. package/dist/skills/planger/SKILL.md +166 -166
  140. package/dist/skills/ponytail/SKILL.md +116 -116
  141. package/dist/skills/ponytail-audit/SKILL.md +42 -42
  142. package/dist/skills/ponytail-debt/SKILL.md +45 -45
  143. package/dist/skills/ponytail-gain/SKILL.md +51 -51
  144. package/dist/skills/ponytail-help/SKILL.md +70 -70
  145. package/dist/skills/ponytail-review/SKILL.md +58 -58
  146. package/dist/skills/selesai-handoff/SKILL.md +20 -20
  147. package/dist/skills/workflow-creation/SKILL.md +73 -73
  148. package/dist/themes/powerline-footer/theme.json +33 -33
  149. package/dist/utils/shell.d.ts +3 -0
  150. package/dist/utils/shell.js +17 -5
  151. package/docs/compaction.md +396 -396
  152. package/docs/containerization.md +111 -111
  153. package/docs/development.md +71 -71
  154. package/docs/docs.json +164 -164
  155. package/docs/environment-variables.md +86 -86
  156. package/docs/index.md +83 -83
  157. package/docs/json.md +82 -82
  158. package/docs/models.md +502 -502
  159. package/docs/packages.md +227 -227
  160. package/docs/plans/subagent-delegation/phase-0-correctness.md +264 -264
  161. package/docs/plans/subagent-delegation/phase-1-behavioral-contract.md +485 -485
  162. package/docs/plans/subagent-delegation/phase-2-context-controls.md +281 -281
  163. package/docs/plans/subagent-delegation/phase-3-advisory-routing.md +361 -361
  164. package/docs/plans/subagent-delegation/phase-4-optional-enforcement.md +380 -380
  165. package/docs/prompt-templates.md +95 -95
  166. package/docs/providers.md +293 -293
  167. package/docs/sdk.md +1144 -1143
  168. package/docs/security.md +59 -59
  169. package/docs/session-format.md +414 -414
  170. package/docs/sessions.md +145 -145
  171. package/docs/shared-host-extensions.md +109 -109
  172. package/docs/shell-aliases.md +13 -13
  173. package/docs/skills.md +231 -231
  174. package/docs/terminal-setup.md +142 -142
  175. package/docs/termux.md +127 -127
  176. package/docs/themes.md +295 -295
  177. package/docs/tmux.md +63 -63
  178. package/docs/tui.md +927 -927
  179. package/docs/windows.md +17 -17
  180. package/examples/README.md +25 -25
  181. package/examples/extensions/README.md +211 -211
  182. package/examples/extensions/auto-commit-on-exit.ts +49 -49
  183. package/examples/extensions/bash-spawn-hook.ts +30 -30
  184. package/examples/extensions/bookmark.ts +50 -50
  185. package/examples/extensions/border-status-editor.ts +150 -150
  186. package/examples/extensions/built-in-tool-renderer.ts +249 -249
  187. package/examples/extensions/claude-rules.ts +86 -86
  188. package/examples/extensions/commands.ts +72 -72
  189. package/examples/extensions/confirm-destructive.ts +59 -59
  190. package/examples/extensions/custom-compaction.ts +130 -130
  191. package/examples/extensions/custom-footer.ts +64 -64
  192. package/examples/extensions/custom-header.ts +73 -73
  193. package/examples/extensions/custom-provider-anthropic/index.ts +610 -610
  194. package/examples/extensions/custom-provider-anthropic/package-lock.json +24 -24
  195. package/examples/extensions/custom-provider-anthropic/package.json +19 -19
  196. package/examples/extensions/custom-provider-gitlab-duo/index.ts +404 -404
  197. package/examples/extensions/custom-provider-gitlab-duo/package.json +16 -16
  198. package/examples/extensions/custom-provider-gitlab-duo/test.ts +82 -82
  199. package/examples/extensions/dirty-repo-guard.ts +56 -56
  200. package/examples/extensions/doom-overlay/README.md +46 -46
  201. package/examples/extensions/doom-overlay/doom/build/doom.js +21 -21
  202. package/examples/extensions/doom-overlay/doom/build/doom.wasm +0 -0
  203. package/examples/extensions/doom-overlay/doom/build.sh +152 -152
  204. package/examples/extensions/doom-overlay/doom/doomgeneric_pi.c +72 -72
  205. package/examples/extensions/doom-overlay/doom-component.ts +132 -132
  206. package/examples/extensions/doom-overlay/doom-engine.ts +173 -173
  207. package/examples/extensions/doom-overlay/doom-keys.ts +104 -104
  208. package/examples/extensions/doom-overlay/index.ts +74 -74
  209. package/examples/extensions/doom-overlay/wad-finder.ts +51 -51
  210. package/examples/extensions/dynamic-resources/SKILL.md +8 -8
  211. package/examples/extensions/dynamic-resources/dynamic.json +79 -79
  212. package/examples/extensions/dynamic-resources/dynamic.md +5 -5
  213. package/examples/extensions/dynamic-resources/index.ts +15 -15
  214. package/examples/extensions/dynamic-tools.ts +74 -74
  215. package/examples/extensions/event-bus.ts +43 -43
  216. package/examples/extensions/file-trigger.ts +41 -41
  217. package/examples/extensions/git-checkpoint.ts +53 -53
  218. package/examples/extensions/git-merge-and-resolve.ts +115 -115
  219. package/examples/extensions/github-issue-autocomplete.ts +185 -185
  220. package/examples/extensions/gondolin/index.ts +531 -531
  221. package/examples/extensions/gondolin/package-lock.json +185 -185
  222. package/examples/extensions/gondolin/package.json +19 -19
  223. package/examples/extensions/handoff.ts +199 -199
  224. package/examples/extensions/hello.ts +26 -26
  225. package/examples/extensions/hidden-thinking-label.ts +53 -53
  226. package/examples/extensions/inline-bash.ts +94 -94
  227. package/examples/extensions/input-transform-streaming.ts +39 -39
  228. package/examples/extensions/input-transform.ts +43 -43
  229. package/examples/extensions/interactive-shell.ts +196 -196
  230. package/examples/extensions/mac-system-theme.ts +47 -47
  231. package/examples/extensions/message-renderer.ts +59 -59
  232. package/examples/extensions/minimal-mode.ts +426 -426
  233. package/examples/extensions/modal-editor.ts +85 -85
  234. package/examples/extensions/model-status.ts +31 -31
  235. package/examples/extensions/notify.ts +55 -55
  236. package/examples/extensions/overlay-qa-tests.ts +1450 -1450
  237. package/examples/extensions/overlay-test.ts +153 -153
  238. package/examples/extensions/permission-gate.ts +34 -34
  239. package/examples/extensions/pirate.ts +47 -47
  240. package/examples/extensions/plan-mode/README.md +66 -66
  241. package/examples/extensions/plan-mode/index.ts +390 -390
  242. package/examples/extensions/plan-mode/utils.ts +168 -168
  243. package/examples/extensions/preset.ts +436 -436
  244. package/examples/extensions/project-trust.ts +64 -64
  245. package/examples/extensions/prompt-customizer.ts +97 -97
  246. package/examples/extensions/protected-paths.ts +30 -30
  247. package/examples/extensions/provider-payload.ts +18 -18
  248. package/examples/extensions/qna.ts +122 -122
  249. package/examples/extensions/question.ts +285 -285
  250. package/examples/extensions/questionnaire.ts +448 -448
  251. package/examples/extensions/rainbow-editor.ts +88 -88
  252. package/examples/extensions/reload-runtime.ts +37 -37
  253. package/examples/extensions/rpc-demo.ts +118 -118
  254. package/examples/extensions/sandbox/index.ts +321 -321
  255. package/examples/extensions/sandbox/package-lock.json +92 -92
  256. package/examples/extensions/sandbox/package.json +19 -19
  257. package/examples/extensions/send-user-message.ts +97 -97
  258. package/examples/extensions/session-name.ts +27 -27
  259. package/examples/extensions/shutdown-command.ts +63 -63
  260. package/examples/extensions/snake.ts +343 -343
  261. package/examples/extensions/space-invaders.ts +560 -560
  262. package/examples/extensions/ssh.ts +220 -220
  263. package/examples/extensions/status-line.ts +32 -32
  264. package/examples/extensions/structured-output.ts +65 -65
  265. package/examples/extensions/subagent/README.md +175 -175
  266. package/examples/extensions/subagent/agents/planner.md +37 -37
  267. package/examples/extensions/subagent/agents/reviewer.md +35 -35
  268. package/examples/extensions/subagent/agents/scout.md +50 -50
  269. package/examples/extensions/subagent/agents/worker.md +24 -24
  270. package/examples/extensions/subagent/agents.ts +126 -126
  271. package/examples/extensions/subagent/index.ts +1015 -1015
  272. package/examples/extensions/subagent/prompts/implement-and-review.md +10 -10
  273. package/examples/extensions/subagent/prompts/implement.md +10 -10
  274. package/examples/extensions/subagent/prompts/scout-and-plan.md +9 -9
  275. package/examples/extensions/summarize.ts +209 -209
  276. package/examples/extensions/system-prompt-header.ts +17 -17
  277. package/examples/extensions/tic-tac-toe.ts +1008 -1008
  278. package/examples/extensions/timed-confirm.ts +70 -70
  279. package/examples/extensions/titlebar-spinner.ts +58 -58
  280. package/examples/extensions/todo.ts +297 -297
  281. package/examples/extensions/tool-override.ts +144 -144
  282. package/examples/extensions/tools.ts +146 -146
  283. package/examples/extensions/trigger-compact.ts +50 -50
  284. package/examples/extensions/truncated-tool.ts +195 -195
  285. package/examples/extensions/widget-placement.ts +9 -9
  286. package/examples/extensions/with-deps/index.ts +32 -32
  287. package/examples/extensions/with-deps/package-lock.json +31 -31
  288. package/examples/extensions/with-deps/package.json +22 -22
  289. package/examples/extensions/working-indicator.ts +123 -123
  290. package/examples/extensions/working-message-test.ts +25 -25
  291. package/examples/rpc-extension-ui.ts +632 -632
  292. package/examples/sdk/01-minimal.ts +26 -26
  293. package/examples/sdk/02-custom-model.ts +53 -53
  294. package/examples/sdk/03-custom-prompt.ts +75 -75
  295. package/examples/sdk/04-skills.ts +55 -55
  296. package/examples/sdk/05-tools.ts +48 -48
  297. package/examples/sdk/06-extensions.ts +99 -99
  298. package/examples/sdk/07-context-files.ts +47 -47
  299. package/examples/sdk/08-prompt-templates.ts +51 -51
  300. package/examples/sdk/09-api-keys-and-oauth.ts +52 -52
  301. package/examples/sdk/10-settings.ts +53 -53
  302. package/examples/sdk/11-sessions.ts +52 -52
  303. package/examples/sdk/12-full-control.ts +79 -79
  304. package/examples/sdk/13-session-runtime.ts +67 -67
  305. package/examples/sdk/README.md +144 -144
  306. package/package.json +4 -4
@@ -1,142 +1,142 @@
1
- # Terminal Setup
2
-
3
- Pi uses the [Kitty keyboard protocol](https://sw.kovidgoyal.net/kitty/keyboard-protocol/) for reliable modifier key detection. Most modern terminals support this protocol, but some require configuration.
4
-
5
- ## Kitty, iTerm2
6
-
7
- Work out of the box.
8
-
9
- ## Apple Terminal
10
-
11
- Pi enables enhanced key reporting when available. If Terminal.app still sends plain Return for `Shift+Enter`, pi uses a local macOS modifier fallback to treat that Return as `Shift+Enter`.
12
-
13
- This fallback only works when pi runs on the same Mac as Terminal.app. It cannot detect the local keyboard over remote SSH.
14
-
15
- ## Ghostty
16
-
17
- Add to your Ghostty config (`~/Library/Application Support/com.mitchellh.ghostty/config` on macOS, `~/.config/ghostty/config` on Linux):
18
-
19
- ```
20
- keybind = alt+backspace=text:\x1b\x7f
21
- ```
22
-
23
- Older Claude Code versions may have added this Ghostty mapping:
24
-
25
- ```
26
- keybind = shift+enter=text:\n
27
- ```
28
-
29
- That mapping sends a raw linefeed byte. Inside pi, that is indistinguishable from `Ctrl+J`, so tmux and pi no longer see a real `shift+enter` key event.
30
-
31
- If Claude Code 2.x or newer is the only reason you added that mapping, you can remove it, unless you want to use Claude Code in tmux, where it still requires that Ghostty mapping.
32
-
33
- Pi binds `Ctrl+J` as a default newline alias, so `Shift+Enter` keeps working in tmux via that remap without extra pi configuration.
34
-
35
- ## WezTerm
36
-
37
- WezTerm usually works out of the box for `Shift+Enter` via xterm modifyOtherKeys. To use the Kitty keyboard protocol explicitly, create `~/.wezterm.lua`:
38
-
39
- ```lua
40
- local wezterm = require 'wezterm'
41
- local config = wezterm.config_builder()
42
- config.enable_kitty_keyboard = true
43
- return config
44
- ```
45
-
46
- On macOS, WezTerm binds `Option+Enter` to fullscreen by default. To use `Option+Enter` for pi follow-up queueing, add this key override:
47
-
48
- ```lua
49
- local wezterm = require 'wezterm'
50
- local config = wezterm.config_builder()
51
- config.keys = {
52
- {
53
- key = 'Enter',
54
- mods = 'ALT',
55
- action = wezterm.action.SendString('\x1b[13;3u'),
56
- },
57
- }
58
- return config
59
- ```
60
-
61
- If you already have a `config.keys` table, add the entry to it.
62
-
63
- On WSL, WezTerm may require a visible hardware cursor for IME candidate window positioning. If CJK IME candidates do not follow the text cursor, set `PI_HARDWARE_CURSOR=1` before running pi or set `showHardwareCursor` to `true` in settings.
64
-
65
- ## Alacritty
66
-
67
- Alacritty usually works out of the box for `Shift+Enter`. On macOS, `Option+Enter` may arrive as plain `Enter`. To use `Option+Enter` for pi follow-up queueing, add to `~/.config/alacritty/alacritty.toml`:
68
-
69
- ```toml
70
- [[keyboard.bindings]]
71
- key = "Enter"
72
- mods = "Alt"
73
- chars = "\u001b[13;3u"
74
- ```
75
-
76
- Restart Alacritty after changing the config.
77
-
78
- ## VS Code (Integrated Terminal)
79
-
80
- VS Code 1.109.5 and newer enable Kitty keyboard protocol in the integrated terminal by default, so `Shift+Enter` should work out of the box.
81
-
82
- VS Code versions older than 1.109.5 need an explicit terminal keybinding for `Shift+Enter`.
83
-
84
- `keybindings.json` locations:
85
- - macOS: `~/Library/Application Support/Code/User/keybindings.json`
86
- - Linux: `~/.config/Code/User/keybindings.json`
87
- - Windows: `%APPDATA%\\Code\\User\\keybindings.json`
88
-
89
- Add to `keybindings.json`:
90
-
91
- ```json
92
- {
93
- "key": "shift+enter",
94
- "command": "workbench.action.terminal.sendSequence",
95
- "args": { "text": "\u001b[13;2u" },
96
- "when": "terminalFocus"
97
- }
98
- ```
99
-
100
- ## Windows Terminal
101
-
102
- Add to `settings.json` (Ctrl+Shift+, or Settings → Open JSON file) to forward the modified Enter keys pi uses:
103
-
104
- ```json
105
- {
106
- "actions": [
107
- {
108
- "command": { "action": "sendInput", "input": "\u001b[13;2u" },
109
- "keys": "shift+enter"
110
- },
111
- {
112
- "command": { "action": "sendInput", "input": "\u001b[13;3u" },
113
- "keys": "alt+enter"
114
- }
115
- ]
116
- }
117
- ```
118
-
119
- - `Shift+Enter` inserts a new line.
120
- - Windows Terminal binds `Alt+Enter` to fullscreen by default. That prevents pi from receiving `Alt+Enter` for follow-up queueing.
121
- - Remapping `Alt+Enter` to `sendInput` forwards the real key chord to pi instead.
122
-
123
- If you already have an `actions` array, add the objects to it. If the old fullscreen behavior persists, fully close and reopen Windows Terminal.
124
-
125
- ## xfce4-terminal, terminator
126
-
127
- These terminals have limited escape sequence support. Modified Enter keys like `Ctrl+Enter` and `Shift+Enter` cannot be distinguished from plain `Enter`, preventing custom keybindings such as `submit: ["ctrl+enter"]` from working.
128
-
129
- For the best experience, use a terminal that supports the Kitty keyboard protocol:
130
- - [Kitty](https://sw.kovidgoyal.net/kitty/)
131
- - [Ghostty](https://ghostty.org/)
132
- - [WezTerm](https://wezfurlong.org/wezterm/)
133
- - [iTerm2](https://iterm2.com/)
134
- - [Alacritty](https://github.com/alacritty/alacritty) (requires compilation with Kitty protocol support)
135
-
136
- ## IntelliJ IDEA (Integrated Terminal)
137
-
138
- The built-in terminal has limited escape sequence support. Shift+Enter cannot be distinguished from Enter in IntelliJ's terminal.
139
-
140
- If you want the hardware cursor visible, set `PI_HARDWARE_CURSOR=1` before running pi (disabled by default for compatibility).
141
-
142
- Consider using a dedicated terminal emulator for the best experience.
1
+ # Terminal Setup
2
+
3
+ Pi uses the [Kitty keyboard protocol](https://sw.kovidgoyal.net/kitty/keyboard-protocol/) for reliable modifier key detection. Most modern terminals support this protocol, but some require configuration.
4
+
5
+ ## Kitty, iTerm2
6
+
7
+ Work out of the box.
8
+
9
+ ## Apple Terminal
10
+
11
+ Pi enables enhanced key reporting when available. If Terminal.app still sends plain Return for `Shift+Enter`, pi uses a local macOS modifier fallback to treat that Return as `Shift+Enter`.
12
+
13
+ This fallback only works when pi runs on the same Mac as Terminal.app. It cannot detect the local keyboard over remote SSH.
14
+
15
+ ## Ghostty
16
+
17
+ Add to your Ghostty config (`~/Library/Application Support/com.mitchellh.ghostty/config` on macOS, `~/.config/ghostty/config` on Linux):
18
+
19
+ ```
20
+ keybind = alt+backspace=text:\x1b\x7f
21
+ ```
22
+
23
+ Older Claude Code versions may have added this Ghostty mapping:
24
+
25
+ ```
26
+ keybind = shift+enter=text:\n
27
+ ```
28
+
29
+ That mapping sends a raw linefeed byte. Inside pi, that is indistinguishable from `Ctrl+J`, so tmux and pi no longer see a real `shift+enter` key event.
30
+
31
+ If Claude Code 2.x or newer is the only reason you added that mapping, you can remove it, unless you want to use Claude Code in tmux, where it still requires that Ghostty mapping.
32
+
33
+ Pi binds `Ctrl+J` as a default newline alias, so `Shift+Enter` keeps working in tmux via that remap without extra pi configuration.
34
+
35
+ ## WezTerm
36
+
37
+ WezTerm usually works out of the box for `Shift+Enter` via xterm modifyOtherKeys. To use the Kitty keyboard protocol explicitly, create `~/.wezterm.lua`:
38
+
39
+ ```lua
40
+ local wezterm = require 'wezterm'
41
+ local config = wezterm.config_builder()
42
+ config.enable_kitty_keyboard = true
43
+ return config
44
+ ```
45
+
46
+ On macOS, WezTerm binds `Option+Enter` to fullscreen by default. To use `Option+Enter` for pi follow-up queueing, add this key override:
47
+
48
+ ```lua
49
+ local wezterm = require 'wezterm'
50
+ local config = wezterm.config_builder()
51
+ config.keys = {
52
+ {
53
+ key = 'Enter',
54
+ mods = 'ALT',
55
+ action = wezterm.action.SendString('\x1b[13;3u'),
56
+ },
57
+ }
58
+ return config
59
+ ```
60
+
61
+ If you already have a `config.keys` table, add the entry to it.
62
+
63
+ On WSL, WezTerm may require a visible hardware cursor for IME candidate window positioning. If CJK IME candidates do not follow the text cursor, set `PI_HARDWARE_CURSOR=1` before running pi or set `showHardwareCursor` to `true` in settings.
64
+
65
+ ## Alacritty
66
+
67
+ Alacritty usually works out of the box for `Shift+Enter`. On macOS, `Option+Enter` may arrive as plain `Enter`. To use `Option+Enter` for pi follow-up queueing, add to `~/.config/alacritty/alacritty.toml`:
68
+
69
+ ```toml
70
+ [[keyboard.bindings]]
71
+ key = "Enter"
72
+ mods = "Alt"
73
+ chars = "\u001b[13;3u"
74
+ ```
75
+
76
+ Restart Alacritty after changing the config.
77
+
78
+ ## VS Code (Integrated Terminal)
79
+
80
+ VS Code 1.109.5 and newer enable Kitty keyboard protocol in the integrated terminal by default, so `Shift+Enter` should work out of the box.
81
+
82
+ VS Code versions older than 1.109.5 need an explicit terminal keybinding for `Shift+Enter`.
83
+
84
+ `keybindings.json` locations:
85
+ - macOS: `~/Library/Application Support/Code/User/keybindings.json`
86
+ - Linux: `~/.config/Code/User/keybindings.json`
87
+ - Windows: `%APPDATA%\\Code\\User\\keybindings.json`
88
+
89
+ Add to `keybindings.json`:
90
+
91
+ ```json
92
+ {
93
+ "key": "shift+enter",
94
+ "command": "workbench.action.terminal.sendSequence",
95
+ "args": { "text": "\u001b[13;2u" },
96
+ "when": "terminalFocus"
97
+ }
98
+ ```
99
+
100
+ ## Windows Terminal
101
+
102
+ Add to `settings.json` (Ctrl+Shift+, or Settings → Open JSON file) to forward the modified Enter keys pi uses:
103
+
104
+ ```json
105
+ {
106
+ "actions": [
107
+ {
108
+ "command": { "action": "sendInput", "input": "\u001b[13;2u" },
109
+ "keys": "shift+enter"
110
+ },
111
+ {
112
+ "command": { "action": "sendInput", "input": "\u001b[13;3u" },
113
+ "keys": "alt+enter"
114
+ }
115
+ ]
116
+ }
117
+ ```
118
+
119
+ - `Shift+Enter` inserts a new line.
120
+ - Windows Terminal binds `Alt+Enter` to fullscreen by default. That prevents pi from receiving `Alt+Enter` for follow-up queueing.
121
+ - Remapping `Alt+Enter` to `sendInput` forwards the real key chord to pi instead.
122
+
123
+ If you already have an `actions` array, add the objects to it. If the old fullscreen behavior persists, fully close and reopen Windows Terminal.
124
+
125
+ ## xfce4-terminal, terminator
126
+
127
+ These terminals have limited escape sequence support. Modified Enter keys like `Ctrl+Enter` and `Shift+Enter` cannot be distinguished from plain `Enter`, preventing custom keybindings such as `submit: ["ctrl+enter"]` from working.
128
+
129
+ For the best experience, use a terminal that supports the Kitty keyboard protocol:
130
+ - [Kitty](https://sw.kovidgoyal.net/kitty/)
131
+ - [Ghostty](https://ghostty.org/)
132
+ - [WezTerm](https://wezfurlong.org/wezterm/)
133
+ - [iTerm2](https://iterm2.com/)
134
+ - [Alacritty](https://github.com/alacritty/alacritty) (requires compilation with Kitty protocol support)
135
+
136
+ ## IntelliJ IDEA (Integrated Terminal)
137
+
138
+ The built-in terminal has limited escape sequence support. Shift+Enter cannot be distinguished from Enter in IntelliJ's terminal.
139
+
140
+ If you want the hardware cursor visible, set `PI_HARDWARE_CURSOR=1` before running pi (disabled by default for compatibility).
141
+
142
+ Consider using a dedicated terminal emulator for the best experience.
package/docs/termux.md CHANGED
@@ -1,127 +1,127 @@
1
- # Termux (Android) Setup
2
-
3
- Pi runs on Android via [Termux](https://termux.dev/), a terminal emulator and Linux environment for Android.
4
-
5
- ## Prerequisites
6
-
7
- 1. Install [Termux](https://github.com/termux/termux-app#installation) from GitHub or F-Droid (not Google Play, that version is deprecated)
8
- 2. Install [Termux:API](https://github.com/termux/termux-api#installation) from GitHub or F-Droid for clipboard and other device integrations
9
-
10
- ## Installation
11
-
12
- ```bash
13
- # Update packages
14
- pkg update && pkg upgrade
15
-
16
- # Install dependencies
17
- pkg install nodejs termux-api git
18
-
19
- # Install pi
20
- npm install -g --ignore-scripts @earendil-works/pi-coding-agent
21
-
22
- # Create config directory
23
- mkdir -p ~/.pi/agent
24
-
25
- # Run pi
26
- pi
27
- ```
28
-
29
- ## Clipboard Support
30
-
31
- Clipboard operations use `termux-clipboard-set` and `termux-clipboard-get` when running in Termux. The Termux:API app must be installed for these to work.
32
-
33
- Image clipboard is not supported on Termux (the `ctrl+v` image paste feature will not work).
34
-
35
- ## Example AGENTS.md for Termux
36
-
37
- Create `~/.pi/agent/AGENTS.md` to help the agent understand the Termux environment:
38
-
39
- ````markdown
40
- # Agent Environment: Termux on Android
41
-
42
- ## Location
43
- - **OS**: Android (Termux terminal emulator)
44
- - **Home**: `/data/data/com.termux/files/home`
45
- - **Prefix**: `/data/data/com.termux/files/usr`
46
- - **Shared storage**: `/storage/emulated/0` (Downloads, Documents, etc.)
47
-
48
- ## Opening URLs
49
- ```bash
50
- termux-open-url "https://example.com"
51
- ```
52
-
53
- ## Opening Files
54
- ```bash
55
- termux-open file.pdf # Opens with default app
56
- termux-open --chooser image.jpg # Choose app
57
- ```
58
-
59
- ## Clipboard
60
- ```bash
61
- termux-clipboard-set "text" # Copy
62
- termux-clipboard-get # Paste
63
- ```
64
-
65
- ## Notifications
66
- ```bash
67
- termux-notification -t "Title" -c "Content"
68
- ```
69
-
70
- ## Device Info
71
- ```bash
72
- termux-battery-status # Battery info
73
- termux-wifi-connectioninfo # WiFi info
74
- termux-telephony-deviceinfo # Device info
75
- ```
76
-
77
- ## Sharing
78
- ```bash
79
- termux-share -a send file.txt # Share file
80
- ```
81
-
82
- ## Other Useful Commands
83
- ```bash
84
- termux-toast "message" # Quick toast popup
85
- termux-vibrate # Vibrate device
86
- termux-tts-speak "hello" # Text to speech
87
- termux-camera-photo out.jpg # Take photo
88
- ```
89
-
90
- ## Notes
91
- - Termux:API app must be installed for `termux-*` commands
92
- - Use `pkg install termux-api` for the command-line tools
93
- - Storage permission needed for `/storage/emulated/0` access
94
- ````
95
-
96
- ## Limitations
97
-
98
- - **No image clipboard**: Termux clipboard API only supports text
99
- - **No native binaries**: Some optional native dependencies (like the clipboard module) are unavailable on Android ARM64 and are skipped during installation
100
- - **Storage access**: To access files in `/storage/emulated/0` (Downloads, etc.), run `termux-setup-storage` once to grant permissions
101
-
102
- ## Troubleshooting
103
-
104
- ### Clipboard not working
105
-
106
- Ensure both apps are installed:
107
- 1. Termux (from GitHub or F-Droid)
108
- 2. Termux:API (from GitHub or F-Droid)
109
-
110
- Then install the CLI tools:
111
- ```bash
112
- pkg install termux-api
113
- ```
114
-
115
- ### Permission denied for shared storage
116
-
117
- Run once to grant storage permissions:
118
- ```bash
119
- termux-setup-storage
120
- ```
121
-
122
- ### Node.js installation issues
123
-
124
- If npm fails, try clearing the cache:
125
- ```bash
126
- npm cache clean --force
127
- ```
1
+ # Termux (Android) Setup
2
+
3
+ Pi runs on Android via [Termux](https://termux.dev/), a terminal emulator and Linux environment for Android.
4
+
5
+ ## Prerequisites
6
+
7
+ 1. Install [Termux](https://github.com/termux/termux-app#installation) from GitHub or F-Droid (not Google Play, that version is deprecated)
8
+ 2. Install [Termux:API](https://github.com/termux/termux-api#installation) from GitHub or F-Droid for clipboard and other device integrations
9
+
10
+ ## Installation
11
+
12
+ ```bash
13
+ # Update packages
14
+ pkg update && pkg upgrade
15
+
16
+ # Install dependencies
17
+ pkg install nodejs termux-api git
18
+
19
+ # Install pi
20
+ npm install -g --ignore-scripts @earendil-works/pi-coding-agent
21
+
22
+ # Create config directory
23
+ mkdir -p ~/.pi/agent
24
+
25
+ # Run pi
26
+ pi
27
+ ```
28
+
29
+ ## Clipboard Support
30
+
31
+ Clipboard operations use `termux-clipboard-set` and `termux-clipboard-get` when running in Termux. The Termux:API app must be installed for these to work.
32
+
33
+ Image clipboard is not supported on Termux (the `ctrl+v` image paste feature will not work).
34
+
35
+ ## Example AGENTS.md for Termux
36
+
37
+ Create `~/.pi/agent/AGENTS.md` to help the agent understand the Termux environment:
38
+
39
+ ````markdown
40
+ # Agent Environment: Termux on Android
41
+
42
+ ## Location
43
+ - **OS**: Android (Termux terminal emulator)
44
+ - **Home**: `/data/data/com.termux/files/home`
45
+ - **Prefix**: `/data/data/com.termux/files/usr`
46
+ - **Shared storage**: `/storage/emulated/0` (Downloads, Documents, etc.)
47
+
48
+ ## Opening URLs
49
+ ```bash
50
+ termux-open-url "https://example.com"
51
+ ```
52
+
53
+ ## Opening Files
54
+ ```bash
55
+ termux-open file.pdf # Opens with default app
56
+ termux-open --chooser image.jpg # Choose app
57
+ ```
58
+
59
+ ## Clipboard
60
+ ```bash
61
+ termux-clipboard-set "text" # Copy
62
+ termux-clipboard-get # Paste
63
+ ```
64
+
65
+ ## Notifications
66
+ ```bash
67
+ termux-notification -t "Title" -c "Content"
68
+ ```
69
+
70
+ ## Device Info
71
+ ```bash
72
+ termux-battery-status # Battery info
73
+ termux-wifi-connectioninfo # WiFi info
74
+ termux-telephony-deviceinfo # Device info
75
+ ```
76
+
77
+ ## Sharing
78
+ ```bash
79
+ termux-share -a send file.txt # Share file
80
+ ```
81
+
82
+ ## Other Useful Commands
83
+ ```bash
84
+ termux-toast "message" # Quick toast popup
85
+ termux-vibrate # Vibrate device
86
+ termux-tts-speak "hello" # Text to speech
87
+ termux-camera-photo out.jpg # Take photo
88
+ ```
89
+
90
+ ## Notes
91
+ - Termux:API app must be installed for `termux-*` commands
92
+ - Use `pkg install termux-api` for the command-line tools
93
+ - Storage permission needed for `/storage/emulated/0` access
94
+ ````
95
+
96
+ ## Limitations
97
+
98
+ - **No image clipboard**: Termux clipboard API only supports text
99
+ - **No native binaries**: Some optional native dependencies (like the clipboard module) are unavailable on Android ARM64 and are skipped during installation
100
+ - **Storage access**: To access files in `/storage/emulated/0` (Downloads, etc.), run `termux-setup-storage` once to grant permissions
101
+
102
+ ## Troubleshooting
103
+
104
+ ### Clipboard not working
105
+
106
+ Ensure both apps are installed:
107
+ 1. Termux (from GitHub or F-Droid)
108
+ 2. Termux:API (from GitHub or F-Droid)
109
+
110
+ Then install the CLI tools:
111
+ ```bash
112
+ pkg install termux-api
113
+ ```
114
+
115
+ ### Permission denied for shared storage
116
+
117
+ Run once to grant storage permissions:
118
+ ```bash
119
+ termux-setup-storage
120
+ ```
121
+
122
+ ### Node.js installation issues
123
+
124
+ If npm fails, try clearing the cache:
125
+ ```bash
126
+ npm cache clean --force
127
+ ```