@selesai/code 0.10.0 → 0.10.2

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 (458) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/dist/cli/credential-print.js +4 -4
  3. package/dist/cli.js +0 -0
  4. package/dist/config.d.ts +5 -3
  5. package/dist/config.js +6 -4
  6. package/dist/core/compaction/branch-summarization.js +30 -30
  7. package/dist/core/compaction/compaction.js +81 -81
  8. package/dist/core/compaction/utils.js +2 -2
  9. package/dist/core/export-html/template.css +1066 -1066
  10. package/dist/core/export-html/template.html +55 -55
  11. package/dist/core/export-html/template.js +1864 -1864
  12. package/dist/core/export-html/vendor/highlight.min.js +1212 -1212
  13. package/dist/core/export-html/vendor/marked.min.js +78 -78
  14. package/dist/core/messages.js +7 -7
  15. package/dist/core/skills.d.ts +2 -0
  16. package/dist/core/skills.js +1 -0
  17. package/dist/extensions/context-compaction-reminder.test.ts +82 -82
  18. package/dist/extensions/context-compaction-reminder.ts +28 -28
  19. package/dist/extensions/pi-intercom/LICENSE +21 -21
  20. package/dist/extensions/pi-intercom/broker/client.test.ts +83 -83
  21. package/dist/extensions/pi-intercom/broker/framing.test.ts +114 -114
  22. package/dist/extensions/pi-intercom/broker/paths.ts +134 -134
  23. package/dist/extensions/pi-intercom/broker/runtime-claim.test.ts +34 -34
  24. package/dist/extensions/pi-intercom/broker/runtime-claim.ts +21 -21
  25. package/dist/extensions/pi-intercom/cwd.test.ts +40 -40
  26. package/dist/extensions/pi-intercom/cwd.ts +31 -31
  27. package/dist/extensions/pi-intercom/format-context.test.ts +31 -31
  28. package/dist/extensions/pi-intercom/format-context.ts +32 -32
  29. package/dist/extensions/pi-intercom/test/overlay-width.test.ts +66 -66
  30. package/dist/extensions/pi-intercom/ui/compose.ts +143 -143
  31. package/dist/extensions/pi-intercom/ui/session-list.ts +166 -166
  32. package/dist/extensions/pi-rewind-hook/README.md +245 -245
  33. package/dist/extensions/pi-rewind-hook/index.ts +1445 -1445
  34. package/dist/extensions/pi-rewind-hook/package.json +29 -29
  35. package/dist/extensions/pi-subagents/install.mjs +0 -0
  36. package/dist/extensions/pi-web-agent/package.json +31 -31
  37. package/dist/extensions/pi-web-agent/src/backends/config.ts +205 -205
  38. package/dist/extensions/pi-web-agent/src/backends/doctor.ts +136 -136
  39. package/dist/extensions/pi-web-agent/src/backends/factory.ts +152 -152
  40. package/dist/extensions/pi-web-agent/src/backends/settings-reader.ts +25 -25
  41. package/dist/extensions/pi-web-agent/src/cache/ttl-cache.ts +28 -28
  42. package/dist/extensions/pi-web-agent/src/changelog-notice.ts +136 -136
  43. package/dist/extensions/pi-web-agent/src/commands/web-agent-config.ts +946 -946
  44. package/dist/extensions/pi-web-agent/src/extension.ts +126 -126
  45. package/dist/extensions/pi-web-agent/src/extract/readability.ts +118 -118
  46. package/dist/extensions/pi-web-agent/src/fetch/browser-resolution.ts +199 -199
  47. package/dist/extensions/pi-web-agent/src/fetch/firecrawl-fetch.ts +100 -100
  48. package/dist/extensions/pi-web-agent/src/fetch/headless-fetch.ts +117 -117
  49. package/dist/extensions/pi-web-agent/src/fetch/http-fetch.ts +67 -67
  50. package/dist/extensions/pi-web-agent/src/orchestration/answer-synthesizer.ts +60 -60
  51. package/dist/extensions/pi-web-agent/src/orchestration/candidate-selector.ts +50 -50
  52. package/dist/extensions/pi-web-agent/src/orchestration/direct-url.ts +52 -52
  53. package/dist/extensions/pi-web-agent/src/orchestration/evidence-quality.ts +105 -105
  54. package/dist/extensions/pi-web-agent/src/orchestration/evidence-ranker.ts +45 -45
  55. package/dist/extensions/pi-web-agent/src/orchestration/index.ts +28 -28
  56. package/dist/extensions/pi-web-agent/src/orchestration/query-planner.ts +47 -47
  57. package/dist/extensions/pi-web-agent/src/orchestration/research-orchestrator.ts +376 -376
  58. package/dist/extensions/pi-web-agent/src/orchestration/research-types.ts +64 -64
  59. package/dist/extensions/pi-web-agent/src/orchestration/research-worker.ts +181 -181
  60. package/dist/extensions/pi-web-agent/src/orchestration/source-profile.ts +101 -101
  61. package/dist/extensions/pi-web-agent/src/orchestration/stop-decider.ts +81 -81
  62. package/dist/extensions/pi-web-agent/src/presentation/config-store.ts +210 -210
  63. package/dist/extensions/pi-web-agent/src/presentation/config.ts +75 -75
  64. package/dist/extensions/pi-web-agent/src/presentation/explore-presentation.ts +61 -61
  65. package/dist/extensions/pi-web-agent/src/presentation/fetch-presentation.ts +54 -54
  66. package/dist/extensions/pi-web-agent/src/presentation/search-presentation.ts +41 -41
  67. package/dist/extensions/pi-web-agent/src/presentation/select-view.ts +20 -20
  68. package/dist/extensions/pi-web-agent/src/presentation/types.ts +63 -63
  69. package/dist/extensions/pi-web-agent/src/search/brave.ts +114 -114
  70. package/dist/extensions/pi-web-agent/src/search/duckduckgo.ts +72 -72
  71. package/dist/extensions/pi-web-agent/src/search/searxng.ts +96 -96
  72. package/dist/extensions/pi-web-agent/src/tools/web-explore.ts +71 -71
  73. package/dist/extensions/pi-web-agent/src/tools/web-fetch-headless.ts +31 -31
  74. package/dist/extensions/pi-web-agent/src/tools/web-fetch.ts +31 -31
  75. package/dist/extensions/pi-web-agent/src/tools/web-search.ts +157 -157
  76. package/dist/extensions/pi-web-agent/src/types.ts +88 -88
  77. package/dist/extensions/ponytail/package.json +8 -8
  78. package/dist/extensions/question/constants.ts +30 -30
  79. package/dist/extensions/question/helpers.ts +58 -58
  80. package/dist/extensions/question/navigation.ts +14 -14
  81. package/dist/extensions/question/package.json +19 -19
  82. package/dist/extensions/question/selection-mode.ts +46 -46
  83. package/dist/extensions/question/shortcuts.ts +44 -44
  84. package/dist/extensions/question/types.ts +132 -132
  85. package/dist/extensions/test-resolve-hook-impl.mjs +6 -6
  86. package/dist/extensions/test-resolve-hook.mjs +6 -6
  87. package/dist/extensions/web-agent-onboarding.ts +222 -222
  88. package/dist/modes/interactive/components/settings-selector.d.ts +1 -1
  89. package/dist/modes/interactive/components/startup-box.d.ts +38 -0
  90. package/dist/modes/interactive/components/startup-box.js +90 -0
  91. package/dist/modes/interactive/interactive-mode.d.ts +3 -0
  92. package/dist/modes/interactive/interactive-mode.js +72 -123
  93. package/dist/package-manager-cli.js +71 -71
  94. package/dist/rpc-entry.js +0 -0
  95. package/dist/skills/agent-browser/SKILL.md +1 -0
  96. package/dist/skills/batch-grill-me/SKILL.md +1 -0
  97. package/dist/skills/brandkit/SKILL.md +1 -0
  98. package/dist/skills/design-references/SKILL.md +1 -0
  99. package/dist/skills/design-taste-frontend/SKILL.md +1 -0
  100. package/dist/skills/design-taste-frontend-v1/SKILL.md +1 -0
  101. package/dist/skills/full-output-enforcement/SKILL.md +1 -0
  102. package/dist/skills/gpt-taste/SKILL.md +1 -0
  103. package/dist/skills/grill-me/SKILL.md +1 -0
  104. package/dist/skills/handoff/SKILL.md +1 -0
  105. package/dist/skills/handoff-text/SKILL.md +1 -0
  106. package/dist/skills/high-end-visual-design/SKILL.md +1 -0
  107. package/dist/skills/image-to-code/SKILL.md +1 -0
  108. package/dist/skills/imagegen-frontend-mobile/SKILL.md +1 -0
  109. package/dist/skills/imagegen-frontend-web/SKILL.md +1 -0
  110. package/dist/skills/implanger/SKILL.md +1 -0
  111. package/dist/skills/improve-codebase/REFERENCE.md +78 -78
  112. package/dist/skills/improve-codebase/SKILL.md +1 -0
  113. package/dist/skills/industrial-brutalist-ui/SKILL.md +1 -0
  114. package/dist/skills/minimalist-ui/SKILL.md +1 -0
  115. package/dist/skills/pi-subagents/SKILL.md +1 -0
  116. package/dist/skills/planger/SKILL.md +1 -0
  117. package/dist/skills/ponytail/SKILL.md +1 -0
  118. package/dist/skills/ponytail-audit/SKILL.md +1 -0
  119. package/dist/skills/ponytail-debt/SKILL.md +1 -0
  120. package/dist/skills/ponytail-gain/SKILL.md +1 -0
  121. package/dist/skills/ponytail-help/SKILL.md +1 -0
  122. package/dist/skills/ponytail-review/SKILL.md +1 -0
  123. package/dist/skills/redesign-existing-projects/SKILL.md +1 -0
  124. package/dist/skills/selesai-handoff/SKILL.md +1 -0
  125. package/dist/skills/stitch-design-taste/SKILL.md +1 -0
  126. package/dist/skills/unlazy/SKILL.md +1 -0
  127. package/dist/skills/web-design-guidelines/SKILL.md +1 -0
  128. package/dist/skills/workflow/SKILL.md +1 -0
  129. package/docs/compaction.md +396 -396
  130. package/docs/containerization.md +111 -111
  131. package/docs/development.md +71 -71
  132. package/docs/docs.json +164 -164
  133. package/docs/environment-variables.md +86 -86
  134. package/docs/index.md +83 -83
  135. package/docs/json.md +82 -82
  136. package/docs/models.md +502 -502
  137. package/docs/packages.md +227 -227
  138. package/docs/plans/subagent-delegation/phase-0-correctness.md +264 -264
  139. package/docs/plans/subagent-delegation/phase-1-behavioral-contract.md +485 -485
  140. package/docs/plans/subagent-delegation/phase-2-context-controls.md +281 -281
  141. package/docs/plans/subagent-delegation/phase-3-advisory-routing.md +361 -361
  142. package/docs/plans/subagent-delegation/phase-4-optional-enforcement.md +380 -380
  143. package/docs/prompt-templates.md +95 -95
  144. package/docs/providers.md +293 -293
  145. package/docs/security.md +59 -59
  146. package/docs/session-format.md +414 -414
  147. package/docs/sessions.md +145 -145
  148. package/docs/shared-host-extensions.md +109 -109
  149. package/docs/shell-aliases.md +13 -13
  150. package/docs/skills.md +231 -231
  151. package/docs/terminal-setup.md +142 -142
  152. package/docs/termux.md +127 -127
  153. package/docs/themes.md +295 -295
  154. package/docs/tmux.md +63 -63
  155. package/docs/tui.md +927 -927
  156. package/docs/windows.md +17 -17
  157. package/examples/README.md +25 -25
  158. package/examples/extensions/README.md +211 -211
  159. package/examples/extensions/auto-commit-on-exit.ts +49 -49
  160. package/examples/extensions/bash-spawn-hook.ts +30 -30
  161. package/examples/extensions/bookmark.ts +50 -50
  162. package/examples/extensions/border-status-editor.ts +150 -150
  163. package/examples/extensions/built-in-tool-renderer.ts +249 -249
  164. package/examples/extensions/claude-rules.ts +86 -86
  165. package/examples/extensions/commands.ts +72 -72
  166. package/examples/extensions/confirm-destructive.ts +59 -59
  167. package/examples/extensions/custom-compaction.ts +130 -130
  168. package/examples/extensions/custom-footer.ts +64 -64
  169. package/examples/extensions/custom-header.ts +73 -73
  170. package/examples/extensions/custom-provider-anthropic/index.ts +610 -610
  171. package/examples/extensions/custom-provider-anthropic/package-lock.json +24 -24
  172. package/examples/extensions/custom-provider-anthropic/package.json +19 -19
  173. package/examples/extensions/custom-provider-gitlab-duo/index.ts +404 -404
  174. package/examples/extensions/custom-provider-gitlab-duo/package.json +16 -16
  175. package/examples/extensions/custom-provider-gitlab-duo/test.ts +82 -82
  176. package/examples/extensions/dirty-repo-guard.ts +56 -56
  177. package/examples/extensions/doom-overlay/README.md +46 -46
  178. package/examples/extensions/doom-overlay/doom/build/doom.js +21 -21
  179. package/examples/extensions/doom-overlay/doom/build/doom.wasm +0 -0
  180. package/examples/extensions/doom-overlay/doom/build.sh +152 -152
  181. package/examples/extensions/doom-overlay/doom/doomgeneric_pi.c +72 -72
  182. package/examples/extensions/doom-overlay/doom-component.ts +132 -132
  183. package/examples/extensions/doom-overlay/doom-engine.ts +173 -173
  184. package/examples/extensions/doom-overlay/doom-keys.ts +104 -104
  185. package/examples/extensions/doom-overlay/index.ts +74 -74
  186. package/examples/extensions/doom-overlay/wad-finder.ts +51 -51
  187. package/examples/extensions/dynamic-resources/SKILL.md +8 -8
  188. package/examples/extensions/dynamic-resources/dynamic.json +79 -79
  189. package/examples/extensions/dynamic-resources/dynamic.md +5 -5
  190. package/examples/extensions/dynamic-resources/index.ts +15 -15
  191. package/examples/extensions/dynamic-tools.ts +74 -74
  192. package/examples/extensions/event-bus.ts +43 -43
  193. package/examples/extensions/file-trigger.ts +41 -41
  194. package/examples/extensions/git-checkpoint.ts +53 -53
  195. package/examples/extensions/git-merge-and-resolve.ts +115 -115
  196. package/examples/extensions/github-issue-autocomplete.ts +185 -185
  197. package/examples/extensions/gondolin/index.ts +531 -531
  198. package/examples/extensions/gondolin/package-lock.json +185 -185
  199. package/examples/extensions/gondolin/package.json +19 -19
  200. package/examples/extensions/handoff.ts +199 -199
  201. package/examples/extensions/hello.ts +26 -26
  202. package/examples/extensions/hidden-thinking-label.ts +53 -53
  203. package/examples/extensions/inline-bash.ts +94 -94
  204. package/examples/extensions/input-transform-streaming.ts +39 -39
  205. package/examples/extensions/input-transform.ts +43 -43
  206. package/examples/extensions/interactive-shell.ts +196 -196
  207. package/examples/extensions/mac-system-theme.ts +47 -47
  208. package/examples/extensions/message-renderer.ts +59 -59
  209. package/examples/extensions/minimal-mode.ts +426 -426
  210. package/examples/extensions/modal-editor.ts +85 -85
  211. package/examples/extensions/model-status.ts +31 -31
  212. package/examples/extensions/notify.ts +55 -55
  213. package/examples/extensions/overlay-qa-tests.ts +1450 -1450
  214. package/examples/extensions/overlay-test.ts +153 -153
  215. package/examples/extensions/permission-gate.ts +34 -34
  216. package/examples/extensions/pirate.ts +47 -47
  217. package/examples/extensions/plan-mode/README.md +66 -66
  218. package/examples/extensions/plan-mode/index.ts +390 -390
  219. package/examples/extensions/plan-mode/utils.ts +168 -168
  220. package/examples/extensions/preset.ts +436 -436
  221. package/examples/extensions/project-trust.ts +64 -64
  222. package/examples/extensions/prompt-customizer.ts +97 -97
  223. package/examples/extensions/protected-paths.ts +30 -30
  224. package/examples/extensions/provider-payload.ts +18 -18
  225. package/examples/extensions/qna.ts +122 -122
  226. package/examples/extensions/question.ts +285 -285
  227. package/examples/extensions/questionnaire.ts +448 -448
  228. package/examples/extensions/rainbow-editor.ts +88 -88
  229. package/examples/extensions/reload-runtime.ts +37 -37
  230. package/examples/extensions/rpc-demo.ts +118 -118
  231. package/examples/extensions/sandbox/index.ts +321 -321
  232. package/examples/extensions/sandbox/package-lock.json +92 -92
  233. package/examples/extensions/sandbox/package.json +19 -19
  234. package/examples/extensions/send-user-message.ts +97 -97
  235. package/examples/extensions/session-name.ts +27 -27
  236. package/examples/extensions/shutdown-command.ts +63 -63
  237. package/examples/extensions/snake.ts +343 -343
  238. package/examples/extensions/space-invaders.ts +560 -560
  239. package/examples/extensions/ssh.ts +220 -220
  240. package/examples/extensions/status-line.ts +32 -32
  241. package/examples/extensions/structured-output.ts +65 -65
  242. package/examples/extensions/subagent/README.md +175 -175
  243. package/examples/extensions/subagent/agents/planner.md +37 -37
  244. package/examples/extensions/subagent/agents/reviewer.md +35 -35
  245. package/examples/extensions/subagent/agents/scout.md +50 -50
  246. package/examples/extensions/subagent/agents/worker.md +24 -24
  247. package/examples/extensions/subagent/agents.ts +126 -126
  248. package/examples/extensions/subagent/index.ts +1015 -1015
  249. package/examples/extensions/subagent/prompts/implement-and-review.md +10 -10
  250. package/examples/extensions/subagent/prompts/implement.md +10 -10
  251. package/examples/extensions/subagent/prompts/scout-and-plan.md +9 -9
  252. package/examples/extensions/summarize.ts +209 -209
  253. package/examples/extensions/system-prompt-header.ts +17 -17
  254. package/examples/extensions/tic-tac-toe.ts +1008 -1008
  255. package/examples/extensions/timed-confirm.ts +70 -70
  256. package/examples/extensions/titlebar-spinner.ts +58 -58
  257. package/examples/extensions/todo.ts +297 -297
  258. package/examples/extensions/tool-override.ts +144 -144
  259. package/examples/extensions/tools.ts +146 -146
  260. package/examples/extensions/trigger-compact.ts +50 -50
  261. package/examples/extensions/truncated-tool.ts +195 -195
  262. package/examples/extensions/widget-placement.ts +9 -9
  263. package/examples/extensions/with-deps/index.ts +32 -32
  264. package/examples/extensions/with-deps/package-lock.json +31 -31
  265. package/examples/extensions/with-deps/package.json +22 -22
  266. package/examples/extensions/working-indicator.ts +123 -123
  267. package/examples/extensions/working-message-test.ts +25 -25
  268. package/examples/rpc-extension-ui.ts +632 -632
  269. package/examples/sdk/01-minimal.ts +26 -26
  270. package/examples/sdk/02-custom-model.ts +53 -53
  271. package/examples/sdk/03-custom-prompt.ts +75 -75
  272. package/examples/sdk/04-skills.ts +55 -55
  273. package/examples/sdk/05-tools.ts +48 -48
  274. package/examples/sdk/06-extensions.ts +99 -99
  275. package/examples/sdk/07-context-files.ts +47 -47
  276. package/examples/sdk/08-prompt-templates.ts +51 -51
  277. package/examples/sdk/09-api-keys-and-oauth.ts +52 -52
  278. package/examples/sdk/10-settings.ts +53 -53
  279. package/examples/sdk/11-sessions.ts +52 -52
  280. package/examples/sdk/12-full-control.ts +79 -79
  281. package/examples/sdk/13-session-runtime.ts +67 -67
  282. package/examples/sdk/README.md +144 -144
  283. package/package.json +1 -1
  284. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/bun/cli.d.ts +0 -3
  285. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/bun/register-bedrock.d.ts +0 -2
  286. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/bun/restore-sandbox-env.d.ts +0 -17
  287. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/args.d.ts +0 -57
  288. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/config-selector.d.ts +0 -16
  289. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/file-processor.d.ts +0 -15
  290. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/initial-message.d.ts +0 -18
  291. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/list-models.d.ts +0 -9
  292. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/project-trust.d.ts +0 -10
  293. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/session-picker.d.ts +0 -10
  294. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/startup-ui.d.ts +0 -20
  295. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli.d.ts +0 -3
  296. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/config.d.ts +0 -96
  297. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/agent-session-runtime.d.ts +0 -119
  298. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/agent-session-services.d.ts +0 -85
  299. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/agent-session.d.ts +0 -620
  300. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/auth-guidance.d.ts +0 -5
  301. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/auth-storage.d.ts +0 -56
  302. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/bash-executor.d.ts +0 -32
  303. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/cache-stats.d.ts +0 -49
  304. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/compaction/branch-summarization.d.ts +0 -93
  305. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/compaction/compaction.d.ts +0 -128
  306. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/compaction/index.d.ts +0 -7
  307. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/compaction/utils.d.ts +0 -38
  308. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/defaults.d.ts +0 -3
  309. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/diagnostics.d.ts +0 -15
  310. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/event-bus.d.ts +0 -9
  311. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/exec.d.ts +0 -29
  312. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/experimental.d.ts +0 -2
  313. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/export-html/ansi-to-html.d.ts +0 -22
  314. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/export-html/index.d.ts +0 -37
  315. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/export-html/tool-renderer.d.ts +0 -34
  316. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/extensions/index.d.ts +0 -12
  317. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/extensions/loader.d.ts +0 -23
  318. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/extensions/runner.d.ts +0 -171
  319. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/extensions/types.d.ts +0 -1261
  320. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/extensions/wrapper.d.ts +0 -20
  321. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/footer-data-provider.d.ts +0 -54
  322. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/http-dispatcher.d.ts +0 -22
  323. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/index.d.ts +0 -13
  324. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/keybindings.d.ts +0 -358
  325. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/messages.d.ts +0 -77
  326. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/model-config.d.ts +0 -512
  327. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/model-registry.d.ts +0 -43
  328. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/model-resolver.d.ts +0 -121
  329. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/model-runtime.d.ts +0 -82
  330. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/models-store.d.ts +0 -17
  331. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/output-guard.d.ts +0 -7
  332. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/package-manager.d.ts +0 -210
  333. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/project-trust.d.ts +0 -15
  334. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/prompt-templates.d.ts +0 -54
  335. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/provider-attribution.d.ts +0 -4
  336. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/provider-composer.d.ts +0 -55
  337. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/radius.d.ts +0 -2
  338. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/remote-catalog-provider.d.ts +0 -5
  339. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/resolve-config-value.d.ts +0 -30
  340. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/resource-loader.d.ts +0 -206
  341. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/runtime-credentials.d.ts +0 -15
  342. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/sdk.d.ts +0 -106
  343. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/session-cwd.d.ts +0 -19
  344. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/session-manager.d.ts +0 -356
  345. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/settings-manager.d.ts +0 -297
  346. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/skills.d.ts +0 -60
  347. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/slash-commands.d.ts +0 -15
  348. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/source-info.d.ts +0 -18
  349. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/system-prompt.d.ts +0 -28
  350. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/telemetry.d.ts +0 -3
  351. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/timings.d.ts +0 -10
  352. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/bash.d.ts +0 -68
  353. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/edit-diff.d.ts +0 -106
  354. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/edit.d.ts +0 -51
  355. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/file-mutation-queue.d.ts +0 -6
  356. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/find.d.ts +0 -35
  357. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/grep.d.ts +0 -37
  358. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/index.d.ts +0 -40
  359. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/ls.d.ts +0 -37
  360. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/output-accumulator.d.ts +0 -52
  361. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/path-utils.d.ts +0 -10
  362. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/read.d.ts +0 -35
  363. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/render-utils.d.ts +0 -24
  364. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/tool-definition-wrapper.d.ts +0 -14
  365. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/truncate.d.ts +0 -70
  366. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/write.d.ts +0 -26
  367. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/trust-manager.d.ts +0 -36
  368. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/usage-totals.d.ts +0 -19
  369. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/extensions/index.d.ts +0 -3
  370. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/extensions/llama/client.d.ts +0 -61
  371. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/extensions/llama/huggingface.d.ts +0 -23
  372. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/extensions/llama/index.d.ts +0 -3
  373. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/extensions/llama/provider.d.ts +0 -10
  374. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/extensions/llama/ui.d.ts +0 -42
  375. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/index.d.ts +0 -35
  376. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/main.d.ts +0 -12
  377. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/migrations.d.ts +0 -33
  378. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/index.d.ts +0 -9
  379. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/armin.d.ts +0 -34
  380. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/assistant-message.d.ts +0 -22
  381. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/bash-execution.d.ts +0 -34
  382. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/bordered-loader.d.ts +0 -16
  383. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/branch-summary-message.d.ts +0 -16
  384. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/compaction-summary-message.d.ts +0 -16
  385. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/config-selector.d.ts +0 -102
  386. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/countdown-timer.d.ts +0 -14
  387. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/custom-editor.d.ts +0 -21
  388. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/custom-entry.d.ts +0 -19
  389. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/custom-message.d.ts +0 -20
  390. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/daxnuts.d.ts +0 -23
  391. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/diff.d.ts +0 -12
  392. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/dynamic-border.d.ts +0 -15
  393. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/earendil-announcement.d.ts +0 -5
  394. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/extension-editor.d.ts +0 -22
  395. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/extension-input.d.ts +0 -23
  396. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/extension-selector.d.ts +0 -26
  397. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/first-time-setup.d.ts +0 -25
  398. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/footer.d.ts +0 -32
  399. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/index.d.ts +0 -34
  400. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/keybinding-hints.d.ts +0 -13
  401. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/login-dialog.d.ts +0 -52
  402. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/model-selector.d.ts +0 -54
  403. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/oauth-selector.d.ts +0 -33
  404. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/scoped-models-selector.d.ts +0 -42
  405. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/session-selector-search.d.ts +0 -23
  406. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/session-selector.d.ts +0 -95
  407. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/settings-selector.d.ts +0 -77
  408. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/show-images-selector.d.ts +0 -10
  409. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/skill-invocation-message.d.ts +0 -17
  410. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/status-indicator.d.ts +0 -28
  411. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/theme-selector.d.ts +0 -11
  412. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/thinking-selector.d.ts +0 -11
  413. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/tool-execution.d.ts +0 -63
  414. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/tree-selector.d.ts +0 -94
  415. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/trust-selector.d.ts +0 -23
  416. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/user-message-selector.d.ts +0 -30
  417. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/user-message.d.ts +0 -14
  418. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/visual-truncate.d.ts +0 -24
  419. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/interactive-mode.d.ts +0 -394
  420. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/model-search.d.ts +0 -12
  421. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/theme/theme-controller.d.ts +0 -29
  422. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/theme/theme.d.ts +0 -120
  423. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/print-mode.d.ts +0 -28
  424. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/rpc/jsonl.d.ts +0 -17
  425. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/rpc/rpc-client.d.ts +0 -246
  426. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/rpc/rpc-mode.d.ts +0 -20
  427. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/rpc/rpc-types.d.ts +0 -457
  428. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/package-manager-cli.d.ts +0 -8
  429. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/rpc-entry.d.ts +0 -3
  430. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/ansi.d.ts +0 -2
  431. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/changelog.d.ts +0 -22
  432. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/child-process.d.ts +0 -18
  433. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/clipboard-image.d.ts +0 -11
  434. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/clipboard-native.d.ts +0 -11
  435. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/clipboard.d.ts +0 -4
  436. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/deprecation.d.ts +0 -4
  437. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/exif-orientation.d.ts +0 -5
  438. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/frontmatter.d.ts +0 -8
  439. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/fs-watch.d.ts +0 -5
  440. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/git.d.ts +0 -26
  441. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/html.d.ts +0 -7
  442. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/image-convert.d.ts +0 -10
  443. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/image-process.d.ts +0 -18
  444. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/image-resize-core.d.ts +0 -30
  445. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/image-resize-worker.d.ts +0 -2
  446. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/image-resize.d.ts +0 -16
  447. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/json.d.ts +0 -3
  448. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/mime.d.ts +0 -3
  449. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/open-browser.d.ts +0 -9
  450. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/paths.d.ts +0 -31
  451. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/photon.d.ts +0 -21
  452. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/pi-user-agent.d.ts +0 -2
  453. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/shell.d.ts +0 -31
  454. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/sleep.d.ts +0 -5
  455. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/syntax-highlight.d.ts +0 -12
  456. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/tools-manager.d.ts +0 -3
  457. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/version-check.d.ts +0 -15
  458. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/windows-self-update.d.ts +0 -3
package/docs/windows.md CHANGED
@@ -1,17 +1,17 @@
1
- # Windows Setup
2
-
3
- Pi requires a bash shell on Windows. Checked locations (in order):
4
-
5
- 1. Custom path from `~/.pi/agent/settings.json`
6
- 2. Git Bash (`C:\Program Files\Git\bin\bash.exe`)
7
- 3. `bash.exe` on PATH (Cygwin, MSYS2, WSL)
8
-
9
- For most users, [Git for Windows](https://git-scm.com/download/win) is sufficient.
10
-
11
- ## Custom Shell Path
12
-
13
- ```json
14
- {
15
- "shellPath": "C:\\cygwin64\\bin\\bash.exe"
16
- }
17
- ```
1
+ # Windows Setup
2
+
3
+ Pi requires a bash shell on Windows. Checked locations (in order):
4
+
5
+ 1. Custom path from `~/.pi/agent/settings.json`
6
+ 2. Git Bash (`C:\Program Files\Git\bin\bash.exe`)
7
+ 3. `bash.exe` on PATH (Cygwin, MSYS2, WSL)
8
+
9
+ For most users, [Git for Windows](https://git-scm.com/download/win) is sufficient.
10
+
11
+ ## Custom Shell Path
12
+
13
+ ```json
14
+ {
15
+ "shellPath": "C:\\cygwin64\\bin\\bash.exe"
16
+ }
17
+ ```
@@ -1,25 +1,25 @@
1
- # Examples
2
-
3
- Example code for pi-coding-agent SDK and extensions.
4
-
5
- ## Directories
6
-
7
- ### [sdk/](sdk/)
8
- Programmatic usage via `createAgentSession()`. Shows how to customize models, prompts, tools, extensions, and session management.
9
-
10
- ### [extensions/](extensions/)
11
- Example extensions demonstrating:
12
- - Lifecycle event handlers (tool interception, safety gates, context modifications)
13
- - Custom tools (todo lists, questions, subagents, output truncation)
14
- - Commands and keyboard shortcuts
15
- - Custom UI (footers, headers, editors, overlays)
16
- - Git integration (checkpoints, auto-commit)
17
- - System prompt modifications and custom compaction
18
- - External integrations (SSH, file watchers, system theme sync)
19
- - Custom providers (Anthropic with custom streaming, GitLab Duo)
20
-
21
- ## Documentation
22
-
23
- - [SDK Reference](sdk/README.md)
24
- - [Extensions Documentation](../docs/extensions.md)
25
- - [Skills Documentation](../docs/skills.md)
1
+ # Examples
2
+
3
+ Example code for pi-coding-agent SDK and extensions.
4
+
5
+ ## Directories
6
+
7
+ ### [sdk/](sdk/)
8
+ Programmatic usage via `createAgentSession()`. Shows how to customize models, prompts, tools, extensions, and session management.
9
+
10
+ ### [extensions/](extensions/)
11
+ Example extensions demonstrating:
12
+ - Lifecycle event handlers (tool interception, safety gates, context modifications)
13
+ - Custom tools (todo lists, questions, subagents, output truncation)
14
+ - Commands and keyboard shortcuts
15
+ - Custom UI (footers, headers, editors, overlays)
16
+ - Git integration (checkpoints, auto-commit)
17
+ - System prompt modifications and custom compaction
18
+ - External integrations (SSH, file watchers, system theme sync)
19
+ - Custom providers (Anthropic with custom streaming, GitLab Duo)
20
+
21
+ ## Documentation
22
+
23
+ - [SDK Reference](sdk/README.md)
24
+ - [Extensions Documentation](../docs/extensions.md)
25
+ - [Skills Documentation](../docs/skills.md)
@@ -1,211 +1,211 @@
1
- # Extension Examples
2
-
3
- Example extensions for pi-coding-agent.
4
-
5
- ## Usage
6
-
7
- ```bash
8
- # Load an extension with --extension flag
9
- pi --extension examples/extensions/permission-gate.ts
10
-
11
- # Or copy to extensions directory for auto-discovery
12
- cp permission-gate.ts ~/.pi/agent/extensions/
13
- ```
14
-
15
- ## Examples
16
-
17
- ### Lifecycle & Safety
18
-
19
- | Extension | Description |
20
- |-----------|-------------|
21
- | `permission-gate.ts` | Prompts for confirmation before dangerous bash commands (rm -rf, sudo, etc.) |
22
- | `project-trust.ts` | Demonstrates the `project_trust` event for user/global and CLI extensions |
23
- | `protected-paths.ts` | Blocks writes to protected paths (.env, .git/, node_modules/) |
24
- | `confirm-destructive.ts` | Confirms before destructive session actions (clear, switch, fork) |
25
- | `dirty-repo-guard.ts` | Prevents session changes with uncommitted git changes |
26
- | `sandbox/` | OS-level sandboxing using `@anthropic-ai/sandbox-runtime` with per-project config |
27
- | `gondolin/` | Route built-in tools and `!` commands into a Gondolin micro-VM |
28
-
29
- ### Custom Tools
30
-
31
- | Extension | Description |
32
- |-----------|-------------|
33
- | `todo.ts` | Todo list tool + `/todos` command with custom rendering and state persistence |
34
- | `hello.ts` | Minimal custom tool example |
35
- | `question.ts` | Demonstrates `ctx.ui.select()` for asking the user questions with custom UI |
36
- | `questionnaire.ts` | Multi-question input with tab bar navigation between questions |
37
- | `tool-override.ts` | Override built-in tools (e.g., add logging/access control to `read`) |
38
- | `dynamic-tools.ts` | Register tools after startup (`session_start`) and at runtime via command, with prompt snippets and tool-specific prompt guidelines |
39
- | `structured-output.ts` | Final structured-output tool that returns `terminate: true` so the agent can end on the tool call |
40
- | `built-in-tool-renderer.ts` | Custom compact rendering for built-in tools (read, bash, edit, write) while keeping original behavior |
41
- | `minimal-mode.ts` | Override built-in tool rendering for minimal display (only tool calls, no output in collapsed mode) |
42
- | `truncated-tool.ts` | Wraps ripgrep with proper output truncation (50KB/2000 lines) |
43
- | `ssh.ts` | Delegate all tools to a remote machine via SSH using pluggable operations |
44
- | `subagent/` | Delegate tasks to specialized subagents with isolated context windows |
45
-
46
- ### Commands & UI
47
-
48
- | Extension | Description |
49
- |-----------|-------------|
50
- | `preset.ts` | Named presets for model, thinking level, tools, and instructions via `--preset` flag and `/preset` command |
51
- | `plan-mode/` | Claude Code-style plan mode for read-only exploration with `/plan` command and step tracking |
52
- | `tools.ts` | Interactive `/tools` command to enable/disable tools with session persistence |
53
- | `handoff.ts` | Transfer context to a new focused session via `/handoff <goal>` |
54
- | `qna.ts` | Extracts questions from last response into editor via `ctx.ui.setEditorText()` |
55
- | `status-line.ts` | Shows turn progress in footer via `ctx.ui.setStatus()` with themed colors |
56
- | `github-issue-autocomplete.ts` | Adds `#1234` issue completions by stacking a custom autocomplete provider that preloads open issues from `gh issue list` |
57
- | `widget-placement.ts` | Shows widgets above and below the editor via `ctx.ui.setWidget()` placement |
58
- | `hidden-thinking-label.ts` | Customizes the collapsed thinking label via `ctx.ui.setHiddenThinkingLabel()` |
59
- | `working-indicator.ts` | Customizes the streaming working indicator via `ctx.ui.setWorkingIndicator()` |
60
- | `model-status.ts` | Shows model changes in status bar via `model_select` hook |
61
- | `snake.ts` | Snake game with custom UI, keyboard handling, and session persistence |
62
- | `tic-tac-toe.ts` | Tic-tac-toe vs the agent with `executionMode: "sequential"` tools to prevent race conditions on shared cursor state |
63
- | `send-user-message.ts` | Demonstrates `pi.sendUserMessage()` for sending user messages from extensions |
64
- | `timed-confirm.ts` | Demonstrates AbortSignal for auto-dismissing `ctx.ui.confirm()` and `ctx.ui.select()` dialogs |
65
- | `rpc-demo.ts` | Exercises all RPC-supported extension UI methods; pair with [`examples/rpc-extension-ui.ts`](../rpc-extension-ui.ts) |
66
- | `modal-editor.ts` | Custom vim-like modal editor via `ctx.ui.setEditorComponent()` |
67
- | `rainbow-editor.ts` | Animated rainbow text effect via custom editor |
68
- | `notify.ts` | Desktop notifications via OSC 777 when agent finishes (Ghostty, iTerm2, WezTerm) |
69
- | `titlebar-spinner.ts` | Braille spinner animation in terminal title while the agent is working |
70
- | `summarize.ts` | Summarize conversation with GPT-5.2 and show in transient UI |
71
- | `custom-footer.ts` | Custom footer with git branch and token stats via `ctx.ui.setFooter()` |
72
- | `custom-header.ts` | Custom header via `ctx.ui.setHeader()` |
73
- | `overlay-test.ts` | Test overlay compositing with inline text inputs and edge cases |
74
- | `overlay-qa-tests.ts` | Comprehensive overlay QA tests: anchors, margins, stacking, overflow, animation |
75
- | `doom-overlay/` | DOOM game running as an overlay at 35 FPS (demonstrates real-time game rendering) |
76
- | `shutdown-command.ts` | Adds `/quit` command demonstrating `ctx.shutdown()` |
77
- | `reload-runtime.ts` | Adds `/reload-runtime` and `reload_runtime` tool showing safe reload flow |
78
- | `interactive-shell.ts` | Run interactive commands (vim, htop) with full terminal via `user_bash` hook |
79
- | `inline-bash.ts` | Expands `!{command}` patterns in prompts via `input` event transformation |
80
- | `input-transform-streaming.ts` | Skips expensive input preprocessing for mid-stream steering via `streamingBehavior` |
81
-
82
- ### Git Integration
83
-
84
- | Extension | Description |
85
- |-----------|-------------|
86
- | `git-checkpoint.ts` | Creates git stash checkpoints at each turn for code restoration on fork |
87
- | `auto-commit-on-exit.ts` | Auto-commits on exit using last assistant message for commit message |
88
-
89
- ### System Prompt & Compaction
90
-
91
- | Extension | Description |
92
- |-----------|-------------|
93
- | `pirate.ts` | Demonstrates `systemPromptAppend` to dynamically modify system prompt |
94
- | `claude-rules.ts` | Scans `.claude/rules/` folder and lists rules in system prompt |
95
- | `custom-compaction.ts` | Custom compaction that summarizes entire conversation |
96
- | `trigger-compact.ts` | Triggers compaction when context usage exceeds 100k tokens and adds `/trigger-compact` command |
97
-
98
- ### System Integration
99
-
100
- | Extension | Description |
101
- |-----------|-------------|
102
- | `mac-system-theme.ts` | Syncs pi theme with macOS dark/light mode |
103
-
104
- ### Resources
105
-
106
- | Extension | Description |
107
- |-----------|-------------|
108
- | `dynamic-resources/` | Loads skills, prompts, and themes using `resources_discover` |
109
-
110
- ### Messages & Communication
111
-
112
- | Extension | Description |
113
- |-----------|-------------|
114
- | `message-renderer.ts` | Custom message rendering with colors and expandable details via `registerMessageRenderer` |
115
- | `event-bus.ts` | Inter-extension communication via `pi.events` |
116
-
117
- ### Session Metadata
118
-
119
- | Extension | Description |
120
- |-----------|-------------|
121
- | `session-name.ts` | Name sessions for the session selector via `setSessionName` |
122
- | `bookmark.ts` | Bookmark entries with labels for `/tree` navigation via `setLabel` |
123
-
124
- ### Custom Providers
125
-
126
- | Extension | Description |
127
- |-----------|-------------|
128
- | `custom-provider-anthropic/` | Custom Anthropic provider with OAuth support and custom streaming implementation |
129
- | `custom-provider-gitlab-duo/` | GitLab Duo provider using pi-ai's built-in Anthropic/OpenAI streaming via proxy |
130
-
131
- ### External Dependencies
132
-
133
- | Extension | Description |
134
- |-----------|-------------|
135
- | `with-deps/` | Extension with its own package.json and dependencies (demonstrates jiti module resolution) |
136
- | `file-trigger.ts` | Watches a trigger file and injects contents into conversation |
137
-
138
- ## Writing Extensions
139
-
140
- See [docs/extensions.md](../../docs/extensions.md) for full documentation.
141
-
142
- ```typescript
143
- import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
144
- import { Type } from "typebox";
145
-
146
- export default function (pi: ExtensionAPI) {
147
- // Subscribe to lifecycle events
148
- pi.on("tool_call", async (event, ctx) => {
149
- if (event.toolName === "bash" && event.input.command?.includes("rm -rf")) {
150
- const ok = await ctx.ui.confirm("Dangerous!", "Allow rm -rf?");
151
- if (!ok) return { block: true, reason: "Blocked by user" };
152
- }
153
- });
154
-
155
- // Register custom tools
156
- pi.registerTool({
157
- name: "greet",
158
- label: "Greeting",
159
- description: "Generate a greeting",
160
- parameters: Type.Object({
161
- name: Type.String({ description: "Name to greet" }),
162
- }),
163
- async execute(toolCallId, params, onUpdate, ctx, signal) {
164
- return {
165
- content: [{ type: "text", text: `Hello, ${params.name}!` }],
166
- details: {},
167
- };
168
- },
169
- });
170
-
171
- // Register commands
172
- pi.registerCommand("hello", {
173
- description: "Say hello",
174
- handler: async (args, ctx) => {
175
- ctx.ui.notify("Hello!", "info");
176
- },
177
- });
178
- }
179
- ```
180
-
181
- ## Key Patterns
182
-
183
- **Use StringEnum for string parameters** (required for Google API compatibility):
184
- ```typescript
185
- import { StringEnum } from "@earendil-works/pi-ai";
186
-
187
- // Good
188
- action: StringEnum(["list", "add"] as const)
189
-
190
- // Bad - doesn't work with Google
191
- action: Type.Union([Type.Literal("list"), Type.Literal("add")])
192
- ```
193
-
194
- **State persistence via details:**
195
- ```typescript
196
- // Store state in tool result details for proper forking support
197
- return {
198
- content: [{ type: "text", text: "Done" }],
199
- details: { todos: [...todos], nextId }, // Persisted in session
200
- };
201
-
202
- // Reconstruct on session events
203
- pi.on("session_start", async (_event, ctx) => {
204
- for (const entry of ctx.sessionManager.getBranch()) {
205
- if (entry.type === "message" && entry.message.toolName === "my_tool") {
206
- const details = entry.message.details;
207
- // Reconstruct state from details
208
- }
209
- }
210
- });
211
- ```
1
+ # Extension Examples
2
+
3
+ Example extensions for pi-coding-agent.
4
+
5
+ ## Usage
6
+
7
+ ```bash
8
+ # Load an extension with --extension flag
9
+ pi --extension examples/extensions/permission-gate.ts
10
+
11
+ # Or copy to extensions directory for auto-discovery
12
+ cp permission-gate.ts ~/.pi/agent/extensions/
13
+ ```
14
+
15
+ ## Examples
16
+
17
+ ### Lifecycle & Safety
18
+
19
+ | Extension | Description |
20
+ |-----------|-------------|
21
+ | `permission-gate.ts` | Prompts for confirmation before dangerous bash commands (rm -rf, sudo, etc.) |
22
+ | `project-trust.ts` | Demonstrates the `project_trust` event for user/global and CLI extensions |
23
+ | `protected-paths.ts` | Blocks writes to protected paths (.env, .git/, node_modules/) |
24
+ | `confirm-destructive.ts` | Confirms before destructive session actions (clear, switch, fork) |
25
+ | `dirty-repo-guard.ts` | Prevents session changes with uncommitted git changes |
26
+ | `sandbox/` | OS-level sandboxing using `@anthropic-ai/sandbox-runtime` with per-project config |
27
+ | `gondolin/` | Route built-in tools and `!` commands into a Gondolin micro-VM |
28
+
29
+ ### Custom Tools
30
+
31
+ | Extension | Description |
32
+ |-----------|-------------|
33
+ | `todo.ts` | Todo list tool + `/todos` command with custom rendering and state persistence |
34
+ | `hello.ts` | Minimal custom tool example |
35
+ | `question.ts` | Demonstrates `ctx.ui.select()` for asking the user questions with custom UI |
36
+ | `questionnaire.ts` | Multi-question input with tab bar navigation between questions |
37
+ | `tool-override.ts` | Override built-in tools (e.g., add logging/access control to `read`) |
38
+ | `dynamic-tools.ts` | Register tools after startup (`session_start`) and at runtime via command, with prompt snippets and tool-specific prompt guidelines |
39
+ | `structured-output.ts` | Final structured-output tool that returns `terminate: true` so the agent can end on the tool call |
40
+ | `built-in-tool-renderer.ts` | Custom compact rendering for built-in tools (read, bash, edit, write) while keeping original behavior |
41
+ | `minimal-mode.ts` | Override built-in tool rendering for minimal display (only tool calls, no output in collapsed mode) |
42
+ | `truncated-tool.ts` | Wraps ripgrep with proper output truncation (50KB/2000 lines) |
43
+ | `ssh.ts` | Delegate all tools to a remote machine via SSH using pluggable operations |
44
+ | `subagent/` | Delegate tasks to specialized subagents with isolated context windows |
45
+
46
+ ### Commands & UI
47
+
48
+ | Extension | Description |
49
+ |-----------|-------------|
50
+ | `preset.ts` | Named presets for model, thinking level, tools, and instructions via `--preset` flag and `/preset` command |
51
+ | `plan-mode/` | Claude Code-style plan mode for read-only exploration with `/plan` command and step tracking |
52
+ | `tools.ts` | Interactive `/tools` command to enable/disable tools with session persistence |
53
+ | `handoff.ts` | Transfer context to a new focused session via `/handoff <goal>` |
54
+ | `qna.ts` | Extracts questions from last response into editor via `ctx.ui.setEditorText()` |
55
+ | `status-line.ts` | Shows turn progress in footer via `ctx.ui.setStatus()` with themed colors |
56
+ | `github-issue-autocomplete.ts` | Adds `#1234` issue completions by stacking a custom autocomplete provider that preloads open issues from `gh issue list` |
57
+ | `widget-placement.ts` | Shows widgets above and below the editor via `ctx.ui.setWidget()` placement |
58
+ | `hidden-thinking-label.ts` | Customizes the collapsed thinking label via `ctx.ui.setHiddenThinkingLabel()` |
59
+ | `working-indicator.ts` | Customizes the streaming working indicator via `ctx.ui.setWorkingIndicator()` |
60
+ | `model-status.ts` | Shows model changes in status bar via `model_select` hook |
61
+ | `snake.ts` | Snake game with custom UI, keyboard handling, and session persistence |
62
+ | `tic-tac-toe.ts` | Tic-tac-toe vs the agent with `executionMode: "sequential"` tools to prevent race conditions on shared cursor state |
63
+ | `send-user-message.ts` | Demonstrates `pi.sendUserMessage()` for sending user messages from extensions |
64
+ | `timed-confirm.ts` | Demonstrates AbortSignal for auto-dismissing `ctx.ui.confirm()` and `ctx.ui.select()` dialogs |
65
+ | `rpc-demo.ts` | Exercises all RPC-supported extension UI methods; pair with [`examples/rpc-extension-ui.ts`](../rpc-extension-ui.ts) |
66
+ | `modal-editor.ts` | Custom vim-like modal editor via `ctx.ui.setEditorComponent()` |
67
+ | `rainbow-editor.ts` | Animated rainbow text effect via custom editor |
68
+ | `notify.ts` | Desktop notifications via OSC 777 when agent finishes (Ghostty, iTerm2, WezTerm) |
69
+ | `titlebar-spinner.ts` | Braille spinner animation in terminal title while the agent is working |
70
+ | `summarize.ts` | Summarize conversation with GPT-5.2 and show in transient UI |
71
+ | `custom-footer.ts` | Custom footer with git branch and token stats via `ctx.ui.setFooter()` |
72
+ | `custom-header.ts` | Custom header via `ctx.ui.setHeader()` |
73
+ | `overlay-test.ts` | Test overlay compositing with inline text inputs and edge cases |
74
+ | `overlay-qa-tests.ts` | Comprehensive overlay QA tests: anchors, margins, stacking, overflow, animation |
75
+ | `doom-overlay/` | DOOM game running as an overlay at 35 FPS (demonstrates real-time game rendering) |
76
+ | `shutdown-command.ts` | Adds `/quit` command demonstrating `ctx.shutdown()` |
77
+ | `reload-runtime.ts` | Adds `/reload-runtime` and `reload_runtime` tool showing safe reload flow |
78
+ | `interactive-shell.ts` | Run interactive commands (vim, htop) with full terminal via `user_bash` hook |
79
+ | `inline-bash.ts` | Expands `!{command}` patterns in prompts via `input` event transformation |
80
+ | `input-transform-streaming.ts` | Skips expensive input preprocessing for mid-stream steering via `streamingBehavior` |
81
+
82
+ ### Git Integration
83
+
84
+ | Extension | Description |
85
+ |-----------|-------------|
86
+ | `git-checkpoint.ts` | Creates git stash checkpoints at each turn for code restoration on fork |
87
+ | `auto-commit-on-exit.ts` | Auto-commits on exit using last assistant message for commit message |
88
+
89
+ ### System Prompt & Compaction
90
+
91
+ | Extension | Description |
92
+ |-----------|-------------|
93
+ | `pirate.ts` | Demonstrates `systemPromptAppend` to dynamically modify system prompt |
94
+ | `claude-rules.ts` | Scans `.claude/rules/` folder and lists rules in system prompt |
95
+ | `custom-compaction.ts` | Custom compaction that summarizes entire conversation |
96
+ | `trigger-compact.ts` | Triggers compaction when context usage exceeds 100k tokens and adds `/trigger-compact` command |
97
+
98
+ ### System Integration
99
+
100
+ | Extension | Description |
101
+ |-----------|-------------|
102
+ | `mac-system-theme.ts` | Syncs pi theme with macOS dark/light mode |
103
+
104
+ ### Resources
105
+
106
+ | Extension | Description |
107
+ |-----------|-------------|
108
+ | `dynamic-resources/` | Loads skills, prompts, and themes using `resources_discover` |
109
+
110
+ ### Messages & Communication
111
+
112
+ | Extension | Description |
113
+ |-----------|-------------|
114
+ | `message-renderer.ts` | Custom message rendering with colors and expandable details via `registerMessageRenderer` |
115
+ | `event-bus.ts` | Inter-extension communication via `pi.events` |
116
+
117
+ ### Session Metadata
118
+
119
+ | Extension | Description |
120
+ |-----------|-------------|
121
+ | `session-name.ts` | Name sessions for the session selector via `setSessionName` |
122
+ | `bookmark.ts` | Bookmark entries with labels for `/tree` navigation via `setLabel` |
123
+
124
+ ### Custom Providers
125
+
126
+ | Extension | Description |
127
+ |-----------|-------------|
128
+ | `custom-provider-anthropic/` | Custom Anthropic provider with OAuth support and custom streaming implementation |
129
+ | `custom-provider-gitlab-duo/` | GitLab Duo provider using pi-ai's built-in Anthropic/OpenAI streaming via proxy |
130
+
131
+ ### External Dependencies
132
+
133
+ | Extension | Description |
134
+ |-----------|-------------|
135
+ | `with-deps/` | Extension with its own package.json and dependencies (demonstrates jiti module resolution) |
136
+ | `file-trigger.ts` | Watches a trigger file and injects contents into conversation |
137
+
138
+ ## Writing Extensions
139
+
140
+ See [docs/extensions.md](../../docs/extensions.md) for full documentation.
141
+
142
+ ```typescript
143
+ import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
144
+ import { Type } from "typebox";
145
+
146
+ export default function (pi: ExtensionAPI) {
147
+ // Subscribe to lifecycle events
148
+ pi.on("tool_call", async (event, ctx) => {
149
+ if (event.toolName === "bash" && event.input.command?.includes("rm -rf")) {
150
+ const ok = await ctx.ui.confirm("Dangerous!", "Allow rm -rf?");
151
+ if (!ok) return { block: true, reason: "Blocked by user" };
152
+ }
153
+ });
154
+
155
+ // Register custom tools
156
+ pi.registerTool({
157
+ name: "greet",
158
+ label: "Greeting",
159
+ description: "Generate a greeting",
160
+ parameters: Type.Object({
161
+ name: Type.String({ description: "Name to greet" }),
162
+ }),
163
+ async execute(toolCallId, params, onUpdate, ctx, signal) {
164
+ return {
165
+ content: [{ type: "text", text: `Hello, ${params.name}!` }],
166
+ details: {},
167
+ };
168
+ },
169
+ });
170
+
171
+ // Register commands
172
+ pi.registerCommand("hello", {
173
+ description: "Say hello",
174
+ handler: async (args, ctx) => {
175
+ ctx.ui.notify("Hello!", "info");
176
+ },
177
+ });
178
+ }
179
+ ```
180
+
181
+ ## Key Patterns
182
+
183
+ **Use StringEnum for string parameters** (required for Google API compatibility):
184
+ ```typescript
185
+ import { StringEnum } from "@earendil-works/pi-ai";
186
+
187
+ // Good
188
+ action: StringEnum(["list", "add"] as const)
189
+
190
+ // Bad - doesn't work with Google
191
+ action: Type.Union([Type.Literal("list"), Type.Literal("add")])
192
+ ```
193
+
194
+ **State persistence via details:**
195
+ ```typescript
196
+ // Store state in tool result details for proper forking support
197
+ return {
198
+ content: [{ type: "text", text: "Done" }],
199
+ details: { todos: [...todos], nextId }, // Persisted in session
200
+ };
201
+
202
+ // Reconstruct on session events
203
+ pi.on("session_start", async (_event, ctx) => {
204
+ for (const entry of ctx.sessionManager.getBranch()) {
205
+ if (entry.type === "message" && entry.message.toolName === "my_tool") {
206
+ const details = entry.message.details;
207
+ // Reconstruct state from details
208
+ }
209
+ }
210
+ });
211
+ ```
@@ -1,49 +1,49 @@
1
- /**
2
- * Auto-Commit on Exit Extension
3
- *
4
- * Automatically commits changes when the agent exits.
5
- * Uses the last assistant message to generate a commit message.
6
- */
7
-
8
- import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
9
-
10
- export default function (pi: ExtensionAPI) {
11
- pi.on("session_shutdown", async (_event, ctx) => {
12
- // Check for uncommitted changes
13
- const { stdout: status, code } = await pi.exec("git", ["status", "--porcelain"]);
14
-
15
- if (code !== 0 || status.trim().length === 0) {
16
- // Not a git repo or no changes
17
- return;
18
- }
19
-
20
- // Find the last assistant message for commit context
21
- const entries = ctx.sessionManager.getEntries();
22
- let lastAssistantText = "";
23
- for (let i = entries.length - 1; i >= 0; i--) {
24
- const entry = entries[i];
25
- if (entry.type === "message" && entry.message.role === "assistant") {
26
- const content = entry.message.content;
27
- if (Array.isArray(content)) {
28
- lastAssistantText = content
29
- .filter((c): c is { type: "text"; text: string } => c.type === "text")
30
- .map((c) => c.text)
31
- .join("\n");
32
- }
33
- break;
34
- }
35
- }
36
-
37
- // Generate a simple commit message
38
- const firstLine = lastAssistantText.split("\n")[0] || "Work in progress";
39
- const commitMessage = `[pi] ${firstLine.slice(0, 50)}${firstLine.length > 50 ? "..." : ""}`;
40
-
41
- // Stage and commit
42
- await pi.exec("git", ["add", "-A"]);
43
- const { code: commitCode } = await pi.exec("git", ["commit", "-m", commitMessage]);
44
-
45
- if (commitCode === 0 && ctx.hasUI) {
46
- ctx.ui.notify(`Auto-committed: ${commitMessage}`, "info");
47
- }
48
- });
49
- }
1
+ /**
2
+ * Auto-Commit on Exit Extension
3
+ *
4
+ * Automatically commits changes when the agent exits.
5
+ * Uses the last assistant message to generate a commit message.
6
+ */
7
+
8
+ import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
9
+
10
+ export default function (pi: ExtensionAPI) {
11
+ pi.on("session_shutdown", async (_event, ctx) => {
12
+ // Check for uncommitted changes
13
+ const { stdout: status, code } = await pi.exec("git", ["status", "--porcelain"]);
14
+
15
+ if (code !== 0 || status.trim().length === 0) {
16
+ // Not a git repo or no changes
17
+ return;
18
+ }
19
+
20
+ // Find the last assistant message for commit context
21
+ const entries = ctx.sessionManager.getEntries();
22
+ let lastAssistantText = "";
23
+ for (let i = entries.length - 1; i >= 0; i--) {
24
+ const entry = entries[i];
25
+ if (entry.type === "message" && entry.message.role === "assistant") {
26
+ const content = entry.message.content;
27
+ if (Array.isArray(content)) {
28
+ lastAssistantText = content
29
+ .filter((c): c is { type: "text"; text: string } => c.type === "text")
30
+ .map((c) => c.text)
31
+ .join("\n");
32
+ }
33
+ break;
34
+ }
35
+ }
36
+
37
+ // Generate a simple commit message
38
+ const firstLine = lastAssistantText.split("\n")[0] || "Work in progress";
39
+ const commitMessage = `[pi] ${firstLine.slice(0, 50)}${firstLine.length > 50 ? "..." : ""}`;
40
+
41
+ // Stage and commit
42
+ await pi.exec("git", ["add", "-A"]);
43
+ const { code: commitCode } = await pi.exec("git", ["commit", "-m", commitMessage]);
44
+
45
+ if (commitCode === 0 && ctx.hasUI) {
46
+ ctx.ui.notify(`Auto-committed: ${commitMessage}`, "info");
47
+ }
48
+ });
49
+ }