@selesai/code 0.3.0 → 0.3.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 (236) hide show
  1. package/dist/config.d.ts +3 -4
  2. package/dist/config.d.ts.map +1 -1
  3. package/dist/config.js +3 -5
  4. package/dist/config.js.map +1 -1
  5. package/dist/core/diagnostics.d.ts +1 -0
  6. package/dist/core/diagnostics.d.ts.map +1 -1
  7. package/dist/core/diagnostics.js.map +1 -1
  8. package/dist/core/package-manager.d.ts +10 -0
  9. package/dist/core/package-manager.d.ts.map +1 -1
  10. package/dist/core/package-manager.js +93 -8
  11. package/dist/core/package-manager.js.map +1 -1
  12. package/dist/core/package-manager.test.d.ts +2 -0
  13. package/dist/core/package-manager.test.d.ts.map +1 -0
  14. package/dist/core/package-manager.test.js +20 -0
  15. package/dist/core/package-manager.test.js.map +1 -0
  16. package/dist/core/resource-loader.d.ts +3 -0
  17. package/dist/core/resource-loader.d.ts.map +1 -1
  18. package/dist/core/resource-loader.js +10 -0
  19. package/dist/core/resource-loader.js.map +1 -1
  20. package/dist/core/settings-manager.d.ts +1 -0
  21. package/dist/core/settings-manager.d.ts.map +1 -1
  22. package/dist/core/settings-manager.js.map +1 -1
  23. package/dist/defaults/models.json +56 -72
  24. package/dist/extensions/caveman/caveman-instructions.cjs +39 -0
  25. package/dist/extensions/caveman/index.js +116 -0
  26. package/dist/extensions/caveman/package.json +8 -0
  27. package/dist/extensions/caveman/test/extension.test.js +185 -0
  28. package/dist/extensions/caveman/test/helpers.test.js +67 -0
  29. package/dist/extensions/pi-intercom/broker/broker.ts +2 -3
  30. package/dist/extensions/pi-intercom/broker/paths.ts +10 -5
  31. package/dist/extensions/pi-intercom/broker/spawn.ts +2 -3
  32. package/dist/extensions/pi-intercom/config.ts +2 -2
  33. package/dist/extensions/pi-intercom/index.ts +2 -2
  34. package/dist/extensions/pi-intercom/package.json +2 -2
  35. package/dist/extensions/pi-intercom/ui/compose.ts +3 -3
  36. package/dist/extensions/pi-intercom/ui/inline-message.ts +3 -3
  37. package/dist/extensions/pi-intercom/ui/session-list.ts +3 -3
  38. package/dist/extensions/pi-powerline-footer/bash-mode/history.ts +2 -1
  39. package/dist/extensions/pi-powerline-footer/index.ts +9 -16
  40. package/dist/extensions/pi-powerline-footer/welcome.ts +23 -16
  41. package/dist/extensions/pi-powerline-footer/working-vibes.ts +2 -9
  42. package/dist/extensions/pi-rewind-hook/index.ts +1 -1
  43. package/dist/extensions/pi-rewind-hook/package.json +1 -1
  44. package/dist/extensions/pi-subagents/README.md +224 -52
  45. package/dist/extensions/pi-subagents/install.mjs +93 -0
  46. package/dist/extensions/pi-subagents/package.json +4 -5
  47. package/dist/extensions/pi-subagents/prompts/parallel-context-build.md +1 -1
  48. package/dist/extensions/pi-subagents/prompts/parallel-handoff-plan.md +1 -1
  49. package/dist/extensions/pi-subagents/skills/pi-subagents/SKILL.md +76 -13
  50. package/dist/extensions/pi-subagents/src/agents/agent-management.ts +179 -2
  51. package/dist/extensions/pi-subagents/src/agents/agent-memory.ts +254 -0
  52. package/dist/extensions/pi-subagents/src/agents/agent-serializer.ts +11 -0
  53. package/dist/extensions/pi-subagents/src/agents/agents.ts +193 -19
  54. package/dist/extensions/pi-subagents/src/agents/chain-serializer.ts +27 -2
  55. package/dist/extensions/pi-subagents/src/extension/config.ts +27 -4
  56. package/dist/extensions/pi-subagents/src/extension/doctor.ts +1 -7
  57. package/dist/extensions/pi-subagents/src/extension/fanout-child.ts +3 -2
  58. package/dist/extensions/pi-subagents/src/extension/index.ts +73 -71
  59. package/dist/extensions/pi-subagents/src/extension/rpc.ts +369 -0
  60. package/dist/extensions/pi-subagents/src/extension/schemas.ts +54 -10
  61. package/dist/extensions/pi-subagents/src/extension/tool-description.ts +200 -0
  62. package/dist/extensions/pi-subagents/src/intercom/intercom-bridge.ts +21 -253
  63. package/dist/extensions/pi-subagents/src/intercom/native-supervisor-channel.ts +519 -0
  64. package/dist/extensions/pi-subagents/src/profiles/profiles.ts +1 -1
  65. package/dist/extensions/pi-subagents/src/runs/background/async-execution.ts +195 -105
  66. package/dist/extensions/pi-subagents/src/runs/background/async-job-tracker.ts +88 -2
  67. package/dist/extensions/pi-subagents/src/runs/background/async-status.ts +67 -10
  68. package/dist/extensions/pi-subagents/src/runs/background/chain-root-attachment.ts +34 -4
  69. package/dist/extensions/pi-subagents/src/runs/background/completion-batcher.ts +166 -0
  70. package/dist/extensions/pi-subagents/src/runs/background/control-channel.ts +156 -1
  71. package/dist/extensions/pi-subagents/src/runs/background/fleet-view.ts +515 -0
  72. package/dist/extensions/pi-subagents/src/runs/background/notify.ts +161 -44
  73. package/dist/extensions/pi-subagents/src/runs/background/result-watcher.ts +1 -2
  74. package/dist/extensions/pi-subagents/src/runs/background/run-id-resolver.ts +3 -2
  75. package/dist/extensions/pi-subagents/src/runs/background/run-status.ts +167 -6
  76. package/dist/extensions/pi-subagents/src/runs/background/scheduled-runs.ts +514 -0
  77. package/dist/extensions/pi-subagents/src/runs/background/stale-run-reconciler.ts +28 -1
  78. package/dist/extensions/pi-subagents/src/runs/background/subagent-runner.ts +873 -204
  79. package/dist/extensions/pi-subagents/src/runs/background/wait.ts +353 -0
  80. package/dist/extensions/pi-subagents/src/runs/foreground/chain-execution.ts +123 -27
  81. package/dist/extensions/pi-subagents/src/runs/foreground/execution.ts +174 -70
  82. package/dist/extensions/pi-subagents/src/runs/foreground/subagent-executor.ts +569 -81
  83. package/dist/extensions/pi-subagents/src/runs/shared/acceptance.ts +45 -22
  84. package/dist/extensions/pi-subagents/src/runs/shared/completion-guard.ts +3 -1
  85. package/dist/extensions/pi-subagents/src/runs/shared/dynamic-fanout.ts +2 -2
  86. package/dist/extensions/pi-subagents/src/runs/shared/model-fallback.ts +172 -21
  87. package/dist/extensions/pi-subagents/src/runs/shared/model-scope.ts +128 -0
  88. package/dist/extensions/pi-subagents/src/runs/shared/nested-events.ts +89 -0
  89. package/dist/extensions/pi-subagents/src/runs/shared/parallel-utils.ts +50 -1
  90. package/dist/extensions/pi-subagents/src/runs/shared/pi-args.ts +35 -4
  91. package/dist/extensions/pi-subagents/src/runs/shared/pi-spawn.ts +63 -45
  92. package/dist/extensions/pi-subagents/src/runs/shared/single-output.ts +2 -0
  93. package/dist/extensions/pi-subagents/src/runs/shared/subagent-prompt-runtime.ts +125 -5
  94. package/dist/extensions/pi-subagents/src/runs/shared/tool-budget.ts +74 -0
  95. package/dist/extensions/pi-subagents/src/runs/shared/turn-budget.ts +52 -0
  96. package/dist/extensions/pi-subagents/src/runs/shared/worktree.ts +28 -5
  97. package/dist/extensions/pi-subagents/src/shared/artifacts.ts +16 -1
  98. package/dist/extensions/pi-subagents/src/shared/atomic-json.ts +15 -2
  99. package/dist/extensions/pi-subagents/src/shared/child-transcript.ts +212 -0
  100. package/dist/extensions/pi-subagents/src/shared/fork-context.ts +133 -22
  101. package/dist/extensions/pi-subagents/src/shared/settings.ts +3 -1
  102. package/dist/extensions/pi-subagents/src/shared/types.ts +197 -4
  103. package/dist/extensions/pi-subagents/src/shared/utils.ts +100 -15
  104. package/dist/extensions/pi-subagents/src/slash/prompt-workflows.ts +330 -0
  105. package/dist/extensions/pi-subagents/src/slash/slash-commands.ts +135 -4
  106. package/dist/extensions/pi-subagents/src/tui/render.ts +32 -12
  107. package/dist/extensions/pi-subagents/test/e2e/real-session-subagent.test.ts +94 -0
  108. package/dist/extensions/pi-subagents/test/integration/async-execution.test.ts +2772 -0
  109. package/dist/extensions/pi-subagents/test/integration/async-job-tracker.test.ts +1107 -0
  110. package/dist/extensions/pi-subagents/test/integration/async-status.test.ts +463 -0
  111. package/dist/extensions/pi-subagents/test/integration/chain-clarify.test.ts +274 -0
  112. package/dist/extensions/pi-subagents/test/integration/chain-execution.test.ts +1535 -0
  113. package/dist/extensions/pi-subagents/test/integration/detect-error.test.ts +242 -0
  114. package/dist/extensions/pi-subagents/test/integration/doctor-executor.test.ts +128 -0
  115. package/dist/extensions/pi-subagents/test/integration/error-handling.test.ts +252 -0
  116. package/dist/extensions/pi-subagents/test/integration/foreground-result-size.test.ts +188 -0
  117. package/dist/extensions/pi-subagents/test/integration/fork-context-execution.test.ts +1306 -0
  118. package/dist/extensions/pi-subagents/test/integration/intercom-result-delivery.test.ts +1033 -0
  119. package/dist/extensions/pi-subagents/test/integration/parallel-execution.test.ts +397 -0
  120. package/dist/extensions/pi-subagents/test/integration/render-fork-badge.test.ts +583 -0
  121. package/dist/extensions/pi-subagents/test/integration/render-widget.test.ts +691 -0
  122. package/dist/extensions/pi-subagents/test/integration/result-watcher.test.ts +892 -0
  123. package/dist/extensions/pi-subagents/test/integration/session-tokens.test.ts +62 -0
  124. package/dist/extensions/pi-subagents/test/integration/single-execution.test.ts +1824 -0
  125. package/dist/extensions/pi-subagents/test/integration/slash-commands.test.ts +1284 -0
  126. package/dist/extensions/pi-subagents/test/integration/slash-live-state.test.ts +127 -0
  127. package/dist/extensions/pi-subagents/test/integration/template-resolution.test.ts +299 -0
  128. package/dist/extensions/pi-subagents/test/integration/top-level-async.test.ts +37 -0
  129. package/dist/extensions/pi-subagents/test/support/helpers.ts +189 -0
  130. package/dist/extensions/pi-subagents/test/support/mock-pi-script.mjs +335 -0
  131. package/dist/extensions/pi-subagents/test/support/mock-pi.ts +129 -0
  132. package/dist/extensions/pi-subagents/test/support/real-session-child-cli.mjs +184 -0
  133. package/dist/extensions/pi-subagents/test/support/real-session-runner.ts +285 -0
  134. package/dist/extensions/pi-subagents/test/support/register-loader.mjs +15 -0
  135. package/dist/extensions/pi-subagents/test/support/ts-loader.mjs +108 -0
  136. package/dist/extensions/pi-subagents/test/unit/acceptance.test.ts +421 -0
  137. package/dist/extensions/pi-subagents/test/unit/agent-disabled.test.ts +213 -0
  138. package/dist/extensions/pi-subagents/test/unit/agent-eject-disable.test.ts +343 -0
  139. package/dist/extensions/pi-subagents/test/unit/agent-frontmatter.test.ts +1199 -0
  140. package/dist/extensions/pi-subagents/test/unit/agent-management.test.ts +556 -0
  141. package/dist/extensions/pi-subagents/test/unit/agent-memory.test.ts +420 -0
  142. package/dist/extensions/pi-subagents/test/unit/agent-overrides.test.ts +579 -0
  143. package/dist/extensions/pi-subagents/test/unit/agent-scope.test.ts +20 -0
  144. package/dist/extensions/pi-subagents/test/unit/agent-selection.test.ts +88 -0
  145. package/dist/extensions/pi-subagents/test/unit/artifacts.test.ts +24 -0
  146. package/dist/extensions/pi-subagents/test/unit/async-execution.test.ts +86 -0
  147. package/dist/extensions/pi-subagents/test/unit/async-interrupt-action.test.ts +221 -0
  148. package/dist/extensions/pi-subagents/test/unit/async-permission-session.test.ts +98 -0
  149. package/dist/extensions/pi-subagents/test/unit/async-resume.test.ts +285 -0
  150. package/dist/extensions/pi-subagents/test/unit/atomic-json.test.ts +112 -0
  151. package/dist/extensions/pi-subagents/test/unit/chain-append.test.ts +206 -0
  152. package/dist/extensions/pi-subagents/test/unit/chain-root-attachment.test.ts +159 -0
  153. package/dist/extensions/pi-subagents/test/unit/chain-serializer.test.ts +229 -0
  154. package/dist/extensions/pi-subagents/test/unit/child-transcript.test.ts +225 -0
  155. package/dist/extensions/pi-subagents/test/unit/close-grace-timer.test.ts +101 -0
  156. package/dist/extensions/pi-subagents/test/unit/completion-batcher.test.ts +228 -0
  157. package/dist/extensions/pi-subagents/test/unit/completion-dedupe.test.ts +36 -0
  158. package/dist/extensions/pi-subagents/test/unit/completion-guard.test.ts +152 -0
  159. package/dist/extensions/pi-subagents/test/unit/config-dir-runtime.test.ts +72 -0
  160. package/dist/extensions/pi-subagents/test/unit/control-channel.test.ts +327 -0
  161. package/dist/extensions/pi-subagents/test/unit/control-notices.test.ts +161 -0
  162. package/dist/extensions/pi-subagents/test/unit/doctor.test.ts +159 -0
  163. package/dist/extensions/pi-subagents/test/unit/dynamic-fanout.test.ts +217 -0
  164. package/dist/extensions/pi-subagents/test/unit/extra-agent-dirs.test.ts +88 -0
  165. package/dist/extensions/pi-subagents/test/unit/file-coalescer.test.ts +68 -0
  166. package/dist/extensions/pi-subagents/test/unit/foreground-tool-call-compaction.test.ts +78 -0
  167. package/dist/extensions/pi-subagents/test/unit/fork-context.test.ts +415 -0
  168. package/dist/extensions/pi-subagents/test/unit/get-final-output.test.ts +126 -0
  169. package/dist/extensions/pi-subagents/test/unit/index-child-registration.test.ts +271 -0
  170. package/dist/extensions/pi-subagents/test/unit/intercom-bridge.test.ts +173 -0
  171. package/dist/extensions/pi-subagents/test/unit/jsonl-writer.test.ts +119 -0
  172. package/dist/extensions/pi-subagents/test/unit/live-async-resume.test.ts +170 -0
  173. package/dist/extensions/pi-subagents/test/unit/model-fallback.test.ts +346 -0
  174. package/dist/extensions/pi-subagents/test/unit/model-info.test.ts +62 -0
  175. package/dist/extensions/pi-subagents/test/unit/model-scope-settings.test.ts +87 -0
  176. package/dist/extensions/pi-subagents/test/unit/model-scope.test.ts +145 -0
  177. package/dist/extensions/pi-subagents/test/unit/native-supervisor-channel.test.ts +162 -0
  178. package/dist/extensions/pi-subagents/test/unit/nested-control.test.ts +470 -0
  179. package/dist/extensions/pi-subagents/test/unit/nested-events.test.ts +329 -0
  180. package/dist/extensions/pi-subagents/test/unit/notify.test.ts +319 -0
  181. package/dist/extensions/pi-subagents/test/unit/package-manifest.test.ts +70 -0
  182. package/dist/extensions/pi-subagents/test/unit/parallel-utils.test.ts +247 -0
  183. package/dist/extensions/pi-subagents/test/unit/path-handling.test.ts +113 -0
  184. package/dist/extensions/pi-subagents/test/unit/path-resolution.test.ts +94 -0
  185. package/dist/extensions/pi-subagents/test/unit/pi-args.test.ts +803 -0
  186. package/dist/extensions/pi-subagents/test/unit/pi-coding-agent-dir.test.ts +209 -0
  187. package/dist/extensions/pi-subagents/test/unit/pi-spawn.test.ts +238 -0
  188. package/dist/extensions/pi-subagents/test/unit/proactive-skills.test.ts +118 -0
  189. package/dist/extensions/pi-subagents/test/unit/profiles.test.ts +299 -0
  190. package/dist/extensions/pi-subagents/test/unit/prompt-template-bridge.test.ts +408 -0
  191. package/dist/extensions/pi-subagents/test/unit/prompt-workflows.test.ts +134 -0
  192. package/dist/extensions/pi-subagents/test/unit/recursion-guard.test.ts +257 -0
  193. package/dist/extensions/pi-subagents/test/unit/render-helpers.test.ts +209 -0
  194. package/dist/extensions/pi-subagents/test/unit/result-intercom.test.ts +226 -0
  195. package/dist/extensions/pi-subagents/test/unit/rpc.test.ts +294 -0
  196. package/dist/extensions/pi-subagents/test/unit/run-id-resolver.test.ts +147 -0
  197. package/dist/extensions/pi-subagents/test/unit/run-status.test.ts +997 -0
  198. package/dist/extensions/pi-subagents/test/unit/scheduled-runs.test.ts +478 -0
  199. package/dist/extensions/pi-subagents/test/unit/schemas.test.ts +562 -0
  200. package/dist/extensions/pi-subagents/test/unit/single-output.test.ts +213 -0
  201. package/dist/extensions/pi-subagents/test/unit/skills-fallback.test.ts +438 -0
  202. package/dist/extensions/pi-subagents/test/unit/slash-bridge.test.ts +54 -0
  203. package/dist/extensions/pi-subagents/test/unit/slash-chain-groups.test.ts +464 -0
  204. package/dist/extensions/pi-subagents/test/unit/stale-run-reconciler.test.ts +255 -0
  205. package/dist/extensions/pi-subagents/test/unit/status-format.test.ts +19 -0
  206. package/dist/extensions/pi-subagents/test/unit/subagent-control.test.ts +245 -0
  207. package/dist/extensions/pi-subagents/test/unit/subagent-prompt-runtime.test.ts +517 -0
  208. package/dist/extensions/pi-subagents/test/unit/temp-paths.test.ts +72 -0
  209. package/dist/extensions/pi-subagents/test/unit/tool-budget.test.ts +52 -0
  210. package/dist/extensions/pi-subagents/test/unit/tool-description.test.ts +237 -0
  211. package/dist/extensions/pi-subagents/test/unit/total-cost.test.ts +60 -0
  212. package/dist/extensions/pi-subagents/test/unit/ts-loader.test.ts +33 -0
  213. package/dist/extensions/pi-subagents/test/unit/turn-budget.test.ts +202 -0
  214. package/dist/extensions/pi-subagents/test/unit/types-fork-preamble.test.ts +23 -0
  215. package/dist/extensions/pi-subagents/test/unit/wait.test.ts +398 -0
  216. package/dist/extensions/pi-subagents/test/unit/widget-nested-render.test.ts +88 -0
  217. package/dist/extensions/pi-subagents/test/unit/windows-hide-spawn.test.ts +26 -0
  218. package/dist/extensions/pi-subagents/test/unit/workflow-graph.test.ts +134 -0
  219. package/dist/extensions/pi-subagents/test/unit/worktree.test.ts +479 -0
  220. package/dist/extensions/pi-web-agent/src/changelog-notice.ts +5 -2
  221. package/dist/extensions/pi-web-agent/src/presentation/config-store.ts +6 -4
  222. package/dist/extensions/tokenin-onboarding.ts +52 -42
  223. package/dist/main.d.ts.map +1 -1
  224. package/dist/main.js +6 -1
  225. package/dist/main.js.map +1 -1
  226. package/dist/modes/interactive/components/first-time-setup.d.ts +1 -1
  227. package/dist/modes/interactive/components/first-time-setup.d.ts.map +1 -1
  228. package/dist/modes/interactive/components/first-time-setup.js +19 -5
  229. package/dist/modes/interactive/components/first-time-setup.js.map +1 -1
  230. package/dist/skills/caveman/SKILL.md +49 -0
  231. package/dist/skills/handoff-text/SKILL.md +13 -0
  232. package/docs/docs.json +4 -0
  233. package/docs/extensions.md +2 -0
  234. package/docs/settings.md +15 -0
  235. package/docs/shared-host-extensions.md +109 -0
  236. package/package.json +1 -1
@@ -0,0 +1,109 @@
1
+ # Shared Host Extensions
2
+
3
+ Selesai is a pi fork with its own config directory (`~/.selesai/agent/`). By default it only reads your extensions from there. If you already use `pi` and have extensions installed under `~/.pi/agent/extensions/`, you can let selesai reuse them without duplicating auth, sessions, models, or settings.
4
+
5
+ This page covers three things:
6
+
7
+ 1. The shared-host fallback (how selesai reads pi's extensions).
8
+ 2. Collisions: what happens when the same extension exists in both.
9
+ 3. Picking the winner per extension via `extensionHost`.
10
+
11
+ ## What gets shared, and what does not
12
+
13
+ | Read from `~/.pi/agent/` | Kept separate under `~/.selesai/agent/` |
14
+ |---|---|
15
+ | `extensions/` | `auth.json` |
16
+ | | `models.json` |
17
+ | | `settings.json` |
18
+ | | `sessions/` |
19
+ | | `skills/`, `prompts/`, `themes/` |
20
+
21
+ Only **extensions** are shared from the pi host dir. Everything tied to your identity, model defaults, and settings stays in selesai's own dir. This means you can keep a single set of API keys in `~/.pi/agent/auth.json` for pi, and a different set in `~/.selesai/agent/auth.json` for selesai, while both agents load the same extension code.
22
+
23
+ The host directory is hardcoded to `~/.pi/agent/extensions`. If pi ever renames its config dir, selesai will silently stop loading pi's extensions — no error, the extensions just won't appear. There is no env var to override this; the path is deliberately fixed so your two installs can't drift into loading the wrong dir.
24
+
25
+ ## Collisions: same extension in both dirs
26
+
27
+ If an extension named `pi-subagents` exists in both `~/.selesai/agent/extensions/` and `~/.pi/agent/extensions/`, selesai does **not** load both. Loading both causes split-brain problems for stateful extensions (timers, event handlers, watchers running twice with separate `state` objects), so selesai loads exactly one copy and drops the other.
28
+
29
+ The "name" used for dedup is the **top-level entry name** under the extensions dir:
30
+
31
+ - A packaged extension dir (e.g. `pi-subagents/` with a `package.json`) → the dir name `pi-subagents`.
32
+ - A loose `.ts` file (e.g. `copy-turn.ts`) → the file name `copy-turn.ts`.
33
+
34
+ If you fork `pi-subagents` into a dir called `my-subagents`, the names differ and both load — no collision.
35
+
36
+ ### Default winner
37
+
38
+ Without any config, **selesai's copy wins**. The pi copy is dropped entirely (never loaded), and a warning is printed at startup:
39
+
40
+ ```
41
+ Warning: Extension "pi-subagents" exists in both ~/.selesai/agent/extensions and ~/.pi/agent/extensions; loaded the selesai copy, skipped the other. Set "extensionHost": { "pi-subagents": "pi" } or "selesai" in settings.json to change the winner.
42
+ ```
43
+
44
+ ## Picking the winner: `extensionHost`
45
+
46
+ You control the winner per extension in `~/.selesai/agent/settings.json`:
47
+
48
+ ```json
49
+ {
50
+ "extensionHost": {
51
+ "pi-subagents": "pi",
52
+ "copy-turn.ts": "selesai"
53
+ }
54
+ }
55
+ ```
56
+
57
+ | Value | Behavior |
58
+ |---|---|
59
+ | `"selesai"` | selesai's copy loads, pi's is dropped. |
60
+ | `"pi"` | pi's copy loads, selesai's is dropped. |
61
+ | (omitted) | Default applies (= selesai wins). |
62
+
63
+ Typical reasons to pick `"pi"`:
64
+ - You hack on an extension under `~/.pi/agent/extensions/` and want both agents to run your working copy.
65
+ - pi's version is newer and you have not ported your changes into selesai yet.
66
+ - An extension carries host-specific state (a socket path, a lockfile).
67
+
68
+ Typical reasons to leave it at `"selesai"` (default):
69
+ - You have a selesai-specific fork and want it to shadow pi's.
70
+ - You are migrating toward selesai and are phasing pi's copy out.
71
+
72
+ The setting is scoped by name, so you can mix: keep pi's `pi-subagents` but use selesai's `copy-turn.ts`.
73
+
74
+ ### Where to put it
75
+
76
+ Global (`~/.selesai/agent/settings.json`) applies to every project. Project-local `.selesai/settings.json` (or `.pi/settings.json` inside a trusted project) overrides per project, since project settings merge on top of global. See [settings.md](settings.md) for the full merge rules.
77
+
78
+ ## Workflow: running pi and selesai side by side
79
+
80
+ 1. Keep your current install as-is:
81
+ ```
82
+ ~/.pi/agent/
83
+ extensions/ <- your shared extensions live here
84
+ auth.json
85
+ settings.json
86
+ ~/.selesai/agent/
87
+ extensions/ <- (optional) selesai-specific forks override the above
88
+ auth.json <- separate keys, separate sessions
89
+ settings.json <- add extensionHost here
90
+ ```
91
+ 2. If you hit a collision warning and want the other copy, add one line to `~/.selesai/agent/settings.json`:
92
+ ```json
93
+ { "extensionHost": { "pi-subagents": "pi" } }
94
+ ```
95
+ 3. Restart. The warning now reads that pi's copy won and selesai's was skipped.
96
+
97
+ ## How detection works (under the hood)
98
+
99
+ - During resource resolution, selesai collects all enabled extensions from `~/.selesai/agent/extensions/`, then walks `~/.pi/agent/extensions/` for the rest.
100
+ - For each pi-host entry, it computes the top-level entry name and checks it against the selesai set.
101
+ - On a match, `extensionHost[name]` decides the winner; the loser is removed from the resolved set before anything loads, so no double-load of factories, no orphaned timers.
102
+ - Each drop is recorded as a collision and surfaced as a startup warning (see [Settings](settings.md) for where diagnostics are reported).
103
+
104
+ ## Limitations
105
+
106
+ - **Only extensions are shared.** Skills, prompts, and themes in `~/.pi/agent/skills/` etc. are never read by selesai. Copy them into `~/.selesai/agent/` if you want them.
107
+ - **Only name collisions are deduped.** If two unrelated extensions register the same tool or command name (e.g. both define `/foo`), that conflict is handled by pi's normal first-registration-wins rule after load, not by `extensionHost`.
108
+ - **No version check.** If selesai's `pi-subagents` is 0.2.0 and pi's is 0.4.0, `extensionHost: { "pi-subagents": "pi" }` silently loads 0.4.0. Picking the winner is purely by install location, not by version. You are responsible for matching versions when you want consistent behavior.
109
+ - **Hardcoded host path.** If you rename pi's config dir away from `~/.pi`, selesai stops seeing it. There is no resolver hook yet.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@selesai/code",
3
- "version": "0.3.0",
3
+ "version": "0.3.2",
4
4
  "description": "Selesai coding agent",
5
5
  "type": "module",
6
6
  "piConfig": {