@code-yeongyu/senpi 2026.8.30 → 2026.9.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 (373) hide show
  1. package/CHANGELOG.md +174 -2
  2. package/README.md +3 -0
  3. package/dist/core/agent-session.d.ts +28 -0
  4. package/dist/core/agent-session.d.ts.map +1 -1
  5. package/dist/core/agent-session.js +161 -14
  6. package/dist/core/agent-session.js.map +1 -1
  7. package/dist/core/compaction/compaction-execution.d.ts +14 -0
  8. package/dist/core/compaction/compaction-execution.d.ts.map +1 -0
  9. package/dist/core/compaction/compaction-execution.js +121 -0
  10. package/dist/core/compaction/compaction-execution.js.map +1 -0
  11. package/dist/core/compaction/compaction-settings.d.ts +17 -0
  12. package/dist/core/compaction/compaction-settings.d.ts.map +1 -0
  13. package/dist/core/compaction/compaction-settings.js +17 -0
  14. package/dist/core/compaction/compaction-settings.js.map +1 -0
  15. package/dist/core/compaction/compaction.d.ts +13 -26
  16. package/dist/core/compaction/compaction.d.ts.map +1 -1
  17. package/dist/core/compaction/compaction.js +7 -136
  18. package/dist/core/compaction/compaction.js.map +1 -1
  19. package/dist/core/compaction/ideal-compaction-settings.d.ts +9 -0
  20. package/dist/core/compaction/ideal-compaction-settings.d.ts.map +1 -0
  21. package/dist/core/compaction/ideal-compaction-settings.js +7 -0
  22. package/dist/core/compaction/ideal-compaction-settings.js.map +1 -0
  23. package/dist/core/compaction-settings-access.d.ts +19 -0
  24. package/dist/core/compaction-settings-access.d.ts.map +1 -0
  25. package/dist/core/compaction-settings-access.js +10 -0
  26. package/dist/core/compaction-settings-access.js.map +1 -0
  27. package/dist/core/compaction-settings-resolver.d.ts +22 -0
  28. package/dist/core/compaction-settings-resolver.d.ts.map +1 -0
  29. package/dist/core/compaction-settings-resolver.js +46 -0
  30. package/dist/core/compaction-settings-resolver.js.map +1 -0
  31. package/dist/core/extensions/builtin/claude-sdk-oauth/session-registry.d.ts +9 -1
  32. package/dist/core/extensions/builtin/claude-sdk-oauth/session-registry.d.ts.map +1 -1
  33. package/dist/core/extensions/builtin/claude-sdk-oauth/session-registry.js +10 -3
  34. package/dist/core/extensions/builtin/claude-sdk-oauth/session-registry.js.map +1 -1
  35. package/dist/core/extensions/builtin/compaction/context-pipeline.d.ts +24 -0
  36. package/dist/core/extensions/builtin/compaction/context-pipeline.d.ts.map +1 -0
  37. package/dist/core/extensions/builtin/compaction/context-pipeline.js +43 -0
  38. package/dist/core/extensions/builtin/compaction/context-pipeline.js.map +1 -0
  39. package/dist/core/extensions/builtin/compaction/deterministic-fallback.d.ts +1 -1
  40. package/dist/core/extensions/builtin/compaction/deterministic-fallback.d.ts.map +1 -1
  41. package/dist/core/extensions/builtin/compaction/deterministic-fallback.js +8 -2
  42. package/dist/core/extensions/builtin/compaction/deterministic-fallback.js.map +1 -1
  43. package/dist/core/extensions/builtin/compaction/emergency-prune.d.ts +17 -0
  44. package/dist/core/extensions/builtin/compaction/emergency-prune.d.ts.map +1 -0
  45. package/dist/core/extensions/builtin/compaction/emergency-prune.js +64 -0
  46. package/dist/core/extensions/builtin/compaction/emergency-prune.js.map +1 -0
  47. package/dist/core/extensions/builtin/compaction/extension-wiring.d.ts +27 -0
  48. package/dist/core/extensions/builtin/compaction/extension-wiring.d.ts.map +1 -0
  49. package/dist/core/extensions/builtin/compaction/extension-wiring.js +84 -0
  50. package/dist/core/extensions/builtin/compaction/extension-wiring.js.map +1 -0
  51. package/dist/core/extensions/builtin/compaction/idle-retry.d.ts +1 -1
  52. package/dist/core/extensions/builtin/compaction/idle-retry.d.ts.map +1 -1
  53. package/dist/core/extensions/builtin/compaction/idle-retry.js +1 -1
  54. package/dist/core/extensions/builtin/compaction/idle-retry.js.map +1 -1
  55. package/dist/core/extensions/builtin/compaction/idle.d.ts +1 -0
  56. package/dist/core/extensions/builtin/compaction/idle.d.ts.map +1 -1
  57. package/dist/core/extensions/builtin/compaction/idle.js +13 -2
  58. package/dist/core/extensions/builtin/compaction/idle.js.map +1 -1
  59. package/dist/core/extensions/builtin/compaction/index.d.ts +1 -1
  60. package/dist/core/extensions/builtin/compaction/index.d.ts.map +1 -1
  61. package/dist/core/extensions/builtin/compaction/index.js +152 -154
  62. package/dist/core/extensions/builtin/compaction/index.js.map +1 -1
  63. package/dist/core/extensions/builtin/compaction/log.d.ts +1 -1
  64. package/dist/core/extensions/builtin/compaction/log.d.ts.map +1 -1
  65. package/dist/core/extensions/builtin/compaction/log.js +2 -0
  66. package/dist/core/extensions/builtin/compaction/log.js.map +1 -1
  67. package/dist/core/extensions/builtin/compaction/model-selection.d.ts +14 -0
  68. package/dist/core/extensions/builtin/compaction/model-selection.d.ts.map +1 -0
  69. package/dist/core/extensions/builtin/compaction/model-selection.js +37 -0
  70. package/dist/core/extensions/builtin/compaction/model-selection.js.map +1 -0
  71. package/dist/core/extensions/builtin/compaction/model-usability-budget.d.ts +30 -0
  72. package/dist/core/extensions/builtin/compaction/model-usability-budget.d.ts.map +1 -0
  73. package/dist/core/extensions/builtin/compaction/model-usability-budget.js +74 -0
  74. package/dist/core/extensions/builtin/compaction/model-usability-budget.js.map +1 -0
  75. package/dist/core/extensions/builtin/compaction/openai-remote-dependencies.d.ts +9 -0
  76. package/dist/core/extensions/builtin/compaction/openai-remote-dependencies.d.ts.map +1 -0
  77. package/dist/core/extensions/builtin/compaction/openai-remote-dependencies.js +2 -0
  78. package/dist/core/extensions/builtin/compaction/openai-remote-dependencies.js.map +1 -0
  79. package/dist/core/extensions/builtin/compaction/openai-remote.d.ts +3 -6
  80. package/dist/core/extensions/builtin/compaction/openai-remote.d.ts.map +1 -1
  81. package/dist/core/extensions/builtin/compaction/openai-remote.js.map +1 -1
  82. package/dist/core/extensions/builtin/compaction/orchestration.d.ts +46 -0
  83. package/dist/core/extensions/builtin/compaction/orchestration.d.ts.map +1 -0
  84. package/dist/core/extensions/builtin/compaction/orchestration.js +103 -0
  85. package/dist/core/extensions/builtin/compaction/orchestration.js.map +1 -0
  86. package/dist/core/extensions/builtin/compaction/policy.d.ts +12 -2
  87. package/dist/core/extensions/builtin/compaction/policy.d.ts.map +1 -1
  88. package/dist/core/extensions/builtin/compaction/policy.js +52 -26
  89. package/dist/core/extensions/builtin/compaction/policy.js.map +1 -1
  90. package/dist/core/extensions/builtin/compaction/speculation-lead.d.ts +8 -0
  91. package/dist/core/extensions/builtin/compaction/speculation-lead.d.ts.map +1 -0
  92. package/dist/core/extensions/builtin/compaction/speculation-lead.js +17 -0
  93. package/dist/core/extensions/builtin/compaction/speculation-lead.js.map +1 -0
  94. package/dist/core/extensions/builtin/compaction/speculative-job.d.ts +22 -0
  95. package/dist/core/extensions/builtin/compaction/speculative-job.d.ts.map +1 -0
  96. package/dist/core/extensions/builtin/compaction/speculative-job.js +16 -0
  97. package/dist/core/extensions/builtin/compaction/speculative-job.js.map +1 -0
  98. package/dist/core/extensions/builtin/compaction/speculative-summary.d.ts +23 -0
  99. package/dist/core/extensions/builtin/compaction/speculative-summary.d.ts.map +1 -0
  100. package/dist/core/extensions/builtin/compaction/speculative-summary.js +132 -0
  101. package/dist/core/extensions/builtin/compaction/speculative-summary.js.map +1 -0
  102. package/dist/core/extensions/builtin/compaction/speculative.d.ts +8 -13
  103. package/dist/core/extensions/builtin/compaction/speculative.d.ts.map +1 -1
  104. package/dist/core/extensions/builtin/compaction/speculative.js +21 -197
  105. package/dist/core/extensions/builtin/compaction/speculative.js.map +1 -1
  106. package/dist/core/extensions/builtin/compaction/token-budget-reminder.d.ts +24 -0
  107. package/dist/core/extensions/builtin/compaction/token-budget-reminder.d.ts.map +1 -0
  108. package/dist/core/extensions/builtin/compaction/token-budget-reminder.js +25 -0
  109. package/dist/core/extensions/builtin/compaction/token-budget-reminder.js.map +1 -0
  110. package/dist/core/extensions/builtin/compaction/tool-admission.d.ts +27 -0
  111. package/dist/core/extensions/builtin/compaction/tool-admission.d.ts.map +1 -0
  112. package/dist/core/extensions/builtin/compaction/tool-admission.js +56 -0
  113. package/dist/core/extensions/builtin/compaction/tool-admission.js.map +1 -0
  114. package/dist/core/extensions/builtin/hooks/trust-state-json.d.ts +5 -0
  115. package/dist/core/extensions/builtin/hooks/trust-state-json.d.ts.map +1 -0
  116. package/dist/core/extensions/builtin/hooks/trust-state-json.js +76 -0
  117. package/dist/core/extensions/builtin/hooks/trust-state-json.js.map +1 -0
  118. package/dist/core/extensions/builtin/hooks/trust-storage.d.ts +7 -1
  119. package/dist/core/extensions/builtin/hooks/trust-storage.d.ts.map +1 -1
  120. package/dist/core/extensions/builtin/hooks/trust-storage.js +60 -8
  121. package/dist/core/extensions/builtin/hooks/trust-storage.js.map +1 -1
  122. package/dist/core/extensions/builtin/hooks/trust.d.ts +1 -2
  123. package/dist/core/extensions/builtin/hooks/trust.d.ts.map +1 -1
  124. package/dist/core/extensions/builtin/hooks/trust.js +1 -72
  125. package/dist/core/extensions/builtin/hooks/trust.js.map +1 -1
  126. package/dist/core/extensions/builtin/prompt-preset/claude-fable-5-1.d.ts +3 -0
  127. package/dist/core/extensions/builtin/prompt-preset/claude-fable-5-1.d.ts.map +1 -0
  128. package/dist/core/extensions/builtin/prompt-preset/claude-fable-5-1.js +108 -0
  129. package/dist/core/extensions/builtin/prompt-preset/claude-fable-5-1.js.map +1 -0
  130. package/dist/core/extensions/builtin/prompt-preset/presets.d.ts.map +1 -1
  131. package/dist/core/extensions/builtin/prompt-preset/presets.js +11 -0
  132. package/dist/core/extensions/builtin/prompt-preset/presets.js.map +1 -1
  133. package/dist/core/extensions/builtin/prompt-preset/settings.d.ts +1 -1
  134. package/dist/core/extensions/builtin/prompt-preset/settings.d.ts.map +1 -1
  135. package/dist/core/extensions/builtin/prompt-preset/settings.js +1 -0
  136. package/dist/core/extensions/builtin/prompt-preset/settings.js.map +1 -1
  137. package/dist/core/extensions/builtin/recommended-models/index.d.ts +1 -1
  138. package/dist/core/extensions/builtin/recommended-models/index.d.ts.map +1 -1
  139. package/dist/core/extensions/builtin/recommended-models/index.js +1 -1
  140. package/dist/core/extensions/builtin/recommended-models/index.js.map +1 -1
  141. package/dist/core/extensions/builtin/terminal/runtime-session.d.ts +11 -0
  142. package/dist/core/extensions/builtin/terminal/runtime-session.d.ts.map +1 -1
  143. package/dist/core/extensions/builtin/terminal/runtime-session.js +18 -2
  144. package/dist/core/extensions/builtin/terminal/runtime-session.js.map +1 -1
  145. package/dist/core/extensions/builtin/ttsr/index.d.ts.map +1 -1
  146. package/dist/core/extensions/builtin/ttsr/index.js +4 -0
  147. package/dist/core/extensions/builtin/ttsr/index.js.map +1 -1
  148. package/dist/core/extensions/builtin/ttsr/manager.d.ts +2 -0
  149. package/dist/core/extensions/builtin/ttsr/manager.d.ts.map +1 -1
  150. package/dist/core/extensions/builtin/ttsr/manager.js +28 -1
  151. package/dist/core/extensions/builtin/ttsr/manager.js.map +1 -1
  152. package/dist/core/extensions/runner.d.ts +5 -0
  153. package/dist/core/extensions/runner.d.ts.map +1 -1
  154. package/dist/core/extensions/runner.js +7 -0
  155. package/dist/core/extensions/runner.js.map +1 -1
  156. package/dist/core/retry-fallback/controller.d.ts +14 -0
  157. package/dist/core/retry-fallback/controller.d.ts.map +1 -1
  158. package/dist/core/retry-fallback/controller.js +33 -3
  159. package/dist/core/retry-fallback/controller.js.map +1 -1
  160. package/dist/core/retry-fallback/log.js +1 -1
  161. package/dist/core/retry-fallback/log.js.map +1 -1
  162. package/dist/core/retry-fallback/settings.d.ts.map +1 -1
  163. package/dist/core/retry-fallback/settings.js +1 -0
  164. package/dist/core/retry-fallback/settings.js.map +1 -1
  165. package/dist/core/sdk.d.ts.map +1 -1
  166. package/dist/core/sdk.js +5 -0
  167. package/dist/core/sdk.js.map +1 -1
  168. package/dist/core/session-activity.d.ts +47 -0
  169. package/dist/core/session-activity.d.ts.map +1 -0
  170. package/dist/core/session-activity.js +58 -0
  171. package/dist/core/session-activity.js.map +1 -0
  172. package/dist/core/session-manager.d.ts +8 -12
  173. package/dist/core/session-manager.d.ts.map +1 -1
  174. package/dist/core/session-manager.js +118 -7
  175. package/dist/core/session-manager.js.map +1 -1
  176. package/dist/core/session-resident-store.d.ts +8 -1
  177. package/dist/core/session-resident-store.d.ts.map +1 -1
  178. package/dist/core/session-resident-store.js +12 -5
  179. package/dist/core/session-resident-store.js.map +1 -1
  180. package/dist/core/settings-manager.d.ts +8 -85
  181. package/dist/core/settings-manager.d.ts.map +1 -1
  182. package/dist/core/settings-manager.js +9 -17
  183. package/dist/core/settings-manager.js.map +1 -1
  184. package/dist/core/settings-public-types.d.ts +11 -0
  185. package/dist/core/settings-public-types.d.ts.map +1 -0
  186. package/dist/core/settings-public-types.js +2 -0
  187. package/dist/core/settings-public-types.js.map +1 -0
  188. package/dist/core/settings-shapes.d.ts +36 -0
  189. package/dist/core/settings-shapes.d.ts.map +1 -0
  190. package/dist/core/settings-shapes.js +2 -0
  191. package/dist/core/settings-shapes.js.map +1 -0
  192. package/dist/core/shared-host-policy.d.ts +6 -0
  193. package/dist/core/shared-host-policy.d.ts.map +1 -0
  194. package/dist/core/shared-host-policy.js +7 -0
  195. package/dist/core/shared-host-policy.js.map +1 -0
  196. package/dist/core/terminal-settings.d.ts +22 -0
  197. package/dist/core/terminal-settings.d.ts.map +1 -0
  198. package/dist/core/terminal-settings.js +2 -0
  199. package/dist/core/terminal-settings.js.map +1 -0
  200. package/dist/index.d.ts +1 -1
  201. package/dist/index.d.ts.map +1 -1
  202. package/dist/index.js +1 -1
  203. package/dist/index.js.map +1 -1
  204. package/dist/main.d.ts +4 -4
  205. package/dist/main.d.ts.map +1 -1
  206. package/dist/main.js +27 -11
  207. package/dist/main.js.map +1 -1
  208. package/dist/modes/app-server/daemon/process.d.ts +13 -2
  209. package/dist/modes/app-server/daemon/process.d.ts.map +1 -1
  210. package/dist/modes/app-server/daemon/process.js +58 -12
  211. package/dist/modes/app-server/daemon/process.js.map +1 -1
  212. package/dist/modes/app-server/daemon.js +65 -7
  213. package/dist/modes/app-server/daemon.js.map +1 -1
  214. package/dist/modes/index.d.ts +1 -1
  215. package/dist/modes/index.d.ts.map +1 -1
  216. package/dist/modes/index.js +1 -1
  217. package/dist/modes/index.js.map +1 -1
  218. package/dist/modes/interactive/interactive-host-runtime.d.ts +84 -1
  219. package/dist/modes/interactive/interactive-host-runtime.d.ts.map +1 -1
  220. package/dist/modes/interactive/interactive-host-runtime.js +435 -112
  221. package/dist/modes/interactive/interactive-host-runtime.js.map +1 -1
  222. package/dist/modes/interactive/interactive-mode.d.ts +11 -1
  223. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  224. package/dist/modes/interactive/interactive-mode.js +59 -6
  225. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  226. package/dist/modes/interactive/tips/catalog/ethos-tips.js +1 -1
  227. package/dist/modes/interactive/tips/catalog/ethos-tips.js.map +1 -1
  228. package/dist/modes/rpc/connection-handler.d.ts +12 -5
  229. package/dist/modes/rpc/connection-handler.d.ts.map +1 -1
  230. package/dist/modes/rpc/connection-handler.js +180 -25
  231. package/dist/modes/rpc/connection-handler.js.map +1 -1
  232. package/dist/modes/rpc/custom-capability.d.ts +2 -0
  233. package/dist/modes/rpc/custom-capability.d.ts.map +1 -1
  234. package/dist/modes/rpc/custom-capability.js +2 -0
  235. package/dist/modes/rpc/custom-capability.js.map +1 -1
  236. package/dist/modes/rpc/host-ensure.d.ts +17 -0
  237. package/dist/modes/rpc/host-ensure.d.ts.map +1 -1
  238. package/dist/modes/rpc/host-ensure.js +150 -23
  239. package/dist/modes/rpc/host-ensure.js.map +1 -1
  240. package/dist/modes/rpc/host-lifecycle.d.ts +54 -0
  241. package/dist/modes/rpc/host-lifecycle.d.ts.map +1 -1
  242. package/dist/modes/rpc/host-lifecycle.js +259 -69
  243. package/dist/modes/rpc/host-lifecycle.js.map +1 -1
  244. package/dist/modes/rpc/host-watchdog.d.ts +2 -2
  245. package/dist/modes/rpc/host-watchdog.d.ts.map +1 -1
  246. package/dist/modes/rpc/host-watchdog.js +89 -21
  247. package/dist/modes/rpc/host-watchdog.js.map +1 -1
  248. package/dist/modes/rpc/multi-session-host.d.ts +38 -0
  249. package/dist/modes/rpc/multi-session-host.d.ts.map +1 -1
  250. package/dist/modes/rpc/multi-session-host.js +149 -61
  251. package/dist/modes/rpc/multi-session-host.js.map +1 -1
  252. package/dist/modes/rpc/ownership-safe-lock.d.ts +14 -0
  253. package/dist/modes/rpc/ownership-safe-lock.d.ts.map +1 -0
  254. package/dist/modes/rpc/ownership-safe-lock.js +87 -0
  255. package/dist/modes/rpc/ownership-safe-lock.js.map +1 -0
  256. package/dist/modes/rpc/rpc-client.d.ts +13 -2
  257. package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  258. package/dist/modes/rpc/rpc-client.js +46 -12
  259. package/dist/modes/rpc/rpc-client.js.map +1 -1
  260. package/dist/modes/rpc/rpc-types.d.ts +21 -3
  261. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  262. package/dist/modes/rpc/rpc-types.js +1 -0
  263. package/dist/modes/rpc/rpc-types.js.map +1 -1
  264. package/dist/modes/rpc/session-binding.d.ts +2 -1
  265. package/dist/modes/rpc/session-binding.d.ts.map +1 -1
  266. package/dist/modes/rpc/session-binding.js +1 -0
  267. package/dist/modes/rpc/session-binding.js.map +1 -1
  268. package/dist/modes/rpc/session-command-router.d.ts +54 -1
  269. package/dist/modes/rpc/session-command-router.d.ts.map +1 -1
  270. package/dist/modes/rpc/session-command-router.js +180 -3
  271. package/dist/modes/rpc/session-command-router.js.map +1 -1
  272. package/dist/modes/rpc/session-event-writer.d.ts +18 -0
  273. package/dist/modes/rpc/session-event-writer.d.ts.map +1 -1
  274. package/dist/modes/rpc/session-event-writer.js +88 -8
  275. package/dist/modes/rpc/session-event-writer.js.map +1 -1
  276. package/dist/modes/rpc/session-registry.d.ts +11 -1
  277. package/dist/modes/rpc/session-registry.d.ts.map +1 -1
  278. package/dist/modes/rpc/session-registry.js +25 -0
  279. package/dist/modes/rpc/session-registry.js.map +1 -1
  280. package/dist/modes/rpc/socket-transport.d.ts +13 -0
  281. package/dist/modes/rpc/socket-transport.d.ts.map +1 -0
  282. package/dist/modes/rpc/socket-transport.js +92 -0
  283. package/dist/modes/rpc/socket-transport.js.map +1 -0
  284. package/dist/modes/rpc/widget-line-renderer.d.ts +17 -0
  285. package/dist/modes/rpc/widget-line-renderer.d.ts.map +1 -0
  286. package/dist/modes/rpc/widget-line-renderer.js +73 -0
  287. package/dist/modes/rpc/widget-line-renderer.js.map +1 -0
  288. package/dist/utils/fs-watch.d.ts.map +1 -1
  289. package/dist/utils/fs-watch.js +11 -2
  290. package/dist/utils/fs-watch.js.map +1 -1
  291. package/docs/app-server.md +2 -2
  292. package/docs/containerization.md +2 -2
  293. package/docs/development.md +7 -7
  294. package/docs/extensions.md +5 -5
  295. package/docs/grok-neo.md +1 -1
  296. package/docs/index.md +1 -1
  297. package/docs/packages.md +2 -2
  298. package/docs/quickstart.md +4 -4
  299. package/docs/release-guide.md +21 -21
  300. package/docs/rpc.md +83 -6
  301. package/docs/sdk.md +1 -1
  302. package/docs/settings.md +4 -4
  303. package/docs/skills.md +2 -2
  304. package/docs/terminal-tools.md +1 -1
  305. package/docs/termux.md +1 -1
  306. package/docs/tui.md +1 -1
  307. package/examples/AGENTS.md +1 -1
  308. package/examples/sdk/README.md +1 -1
  309. package/node_modules/@code-yeongyu/senpi-codemode/CHANGELOG.md +52 -0
  310. package/node_modules/@code-yeongyu/senpi-codemode/README.md +2 -2
  311. package/node_modules/@code-yeongyu/senpi-codemode/package.json +4 -4
  312. package/node_modules/@code-yeongyu/senpi-codemode/src/extension/skill-contribution.ts +71 -0
  313. package/node_modules/@code-yeongyu/senpi-codemode/src/index.ts +3 -1
  314. package/node_modules/@code-yeongyu/senpi-codemode/src/skill/bun-1-4/SKILL.md +44 -0
  315. package/node_modules/@code-yeongyu/senpi-codemode/src/skill/bun-1-4/references/breaking-changes.md +75 -0
  316. package/node_modules/@code-yeongyu/senpi-codemode/src/skill/bun-1-4/references/build.md +114 -0
  317. package/node_modules/@code-yeongyu/senpi-codemode/src/skill/bun-1-4/references/dev-tooling.md +34 -0
  318. package/node_modules/@code-yeongyu/senpi-codemode/src/skill/bun-1-4/references/http-networking.md +113 -0
  319. package/node_modules/@code-yeongyu/senpi-codemode/src/skill/bun-1-4/references/install.md +93 -0
  320. package/node_modules/@code-yeongyu/senpi-codemode/src/skill/bun-1-4/references/node-compat-platforms.md +36 -0
  321. package/node_modules/@code-yeongyu/senpi-codemode/src/skill/bun-1-4/references/performance.md +33 -0
  322. package/node_modules/@code-yeongyu/senpi-codemode/src/skill/bun-1-4/references/runtime-apis.md +156 -0
  323. package/node_modules/@code-yeongyu/senpi-codemode/src/skill/bun-1-4/references/security.md +52 -0
  324. package/node_modules/@code-yeongyu/senpi-codemode/src/skill/bun-1-4/references/test.md +103 -0
  325. package/node_modules/@earendil-works/pi-agent-core/README.md +3 -0
  326. package/node_modules/@earendil-works/pi-agent-core/package.json +3 -3
  327. package/node_modules/@earendil-works/pi-ai/README.md +6 -3
  328. package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.d.ts.map +1 -1
  329. package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.js +24 -7
  330. package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.js.map +1 -1
  331. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent.d.ts +7 -0
  332. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent.d.ts.map +1 -1
  333. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent.js +316 -2
  334. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent.js.map +1 -1
  335. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-conversation-rotation.d.ts +4 -0
  336. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-conversation-rotation.d.ts.map +1 -1
  337. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-conversation-rotation.js +23 -0
  338. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-conversation-rotation.js.map +1 -1
  339. package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses.d.ts +24 -0
  340. package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses.d.ts.map +1 -1
  341. package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses.js +20 -2
  342. package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses.js.map +1 -1
  343. package/node_modules/@earendil-works/pi-ai/dist/providers/data/.manifest.json +1 -1
  344. package/node_modules/@earendil-works/pi-ai/dist/providers/data/amazon-bedrock.json +1 -1
  345. package/node_modules/@earendil-works/pi-ai/dist/providers/data/anthropic.json +1 -1
  346. package/node_modules/@earendil-works/pi-ai/dist/providers/data/fireworks.json +1 -1
  347. package/node_modules/@earendil-works/pi-ai/dist/providers/data/google.json +1 -1
  348. package/node_modules/@earendil-works/pi-ai/dist/providers/data/groq.json +1 -1
  349. package/node_modules/@earendil-works/pi-ai/dist/providers/data/nvidia.json +1 -1
  350. package/node_modules/@earendil-works/pi-ai/dist/providers/data/opengateway.json +1 -1
  351. package/node_modules/@earendil-works/pi-ai/dist/providers/data/openrouter.json +1 -1
  352. package/node_modules/@earendil-works/pi-ai/dist/providers/data/vercel-ai-gateway.json +1 -1
  353. package/node_modules/@earendil-works/pi-ai/package.json +2 -2
  354. package/node_modules/@earendil-works/pi-pty/dist/screen-operations.d.ts +42 -0
  355. package/node_modules/@earendil-works/pi-pty/dist/screen-operations.d.ts.map +1 -0
  356. package/node_modules/@earendil-works/pi-pty/dist/screen-operations.js +34 -0
  357. package/node_modules/@earendil-works/pi-pty/dist/screen-operations.js.map +1 -0
  358. package/node_modules/@earendil-works/pi-pty/dist/screen-text.d.ts +8 -0
  359. package/node_modules/@earendil-works/pi-pty/dist/screen-text.d.ts.map +1 -0
  360. package/node_modules/@earendil-works/pi-pty/dist/screen-text.js +51 -0
  361. package/node_modules/@earendil-works/pi-pty/dist/screen-text.js.map +1 -0
  362. package/node_modules/@earendil-works/pi-pty/dist/screen.d.ts +45 -0
  363. package/node_modules/@earendil-works/pi-pty/dist/screen.d.ts.map +1 -1
  364. package/node_modules/@earendil-works/pi-pty/dist/screen.js +178 -55
  365. package/node_modules/@earendil-works/pi-pty/dist/screen.js.map +1 -1
  366. package/node_modules/@earendil-works/pi-pty/package.json +1 -1
  367. package/node_modules/@earendil-works/pi-telemetry/README.md +6 -3
  368. package/node_modules/@earendil-works/pi-telemetry/package.json +1 -1
  369. package/node_modules/@earendil-works/pi-tui/README.md +5 -4
  370. package/node_modules/@earendil-works/pi-tui/native/darwin/README.md +2 -2
  371. package/node_modules/@earendil-works/pi-tui/native/win32/README.md +2 -2
  372. package/node_modules/@earendil-works/pi-tui/package.json +1 -1
  373. package/package.json +7 -7
@@ -41,6 +41,9 @@ import { buildDynamicSystemPrompt } from "./dynamic-prompt/index.js";
41
41
  import { areExperimentalFeaturesEnabled } from "./experimental.js";
42
42
  import { exportSessionToHtml } from "./export-html/index.js";
43
43
  import { createToolHtmlRenderer } from "./export-html/tool-renderer.js";
44
+ import { ModelUsabilityBudgetError, projectModelUsabilityBudget, } from "./extensions/builtin/compaction/model-usability-budget.js";
45
+ import { resolveReserveTokens } from "./extensions/builtin/compaction/policy.js";
46
+ import { WAKE_SOURCE_STATE_EVENT } from "./extensions/builtin/monitor-state-event.js";
44
47
  import { CODEX_RESPONSES_API } from "./extensions/builtin/service-tier.js";
45
48
  import { deriveExtensionRegistrationId } from "./extensions/builtin/tool-search/engine/marker.js";
46
49
  import { getToolSearchService } from "./extensions/builtin/tool-search/service.js";
@@ -62,6 +65,7 @@ import { classifyRateLimitedWait, degradeWithoutFallback, nextInTurnDelayMs, pro
62
65
  import { createFallbackLogger } from "./retry-fallback/log.js";
63
66
  import { ProbeBackScheduler } from "./retry-fallback/probe-scheduler.js";
64
67
  import { validateFallbackChains } from "./retry-fallback/validate.js";
68
+ import { isSessionBusySnapshot, WakeSourceTracker } from "./session-activity.js";
65
69
  import { createSessionLogger } from "./session-log.js";
66
70
  import { buildSessionContext, CURRENT_SESSION_VERSION, getLatestCompactionEntry, } from "./session-manager.js";
67
71
  import { generateSessionTitle, sessionTitleRetryPolicy, shouldSkipSessionTitle } from "./session-title-generator.js";
@@ -488,6 +492,13 @@ export class AgentSession {
488
492
  this._pendingCompactionAdmission = undefined;
489
493
  this._compactionLifecycle = new CompactionLifecycleCoordinator();
490
494
  this._sessionWorkBarrier = new SessionWorkBarrier();
495
+ /**
496
+ * Extension-published activity that outlives a turn (background terminal
497
+ * jobs, terminal monitors, loop-guard holds). Counts persist across extension
498
+ * reloads on purpose: a stale "busy" only delays reclamation, while a lost
499
+ * one would let the host evict a session still doing work.
500
+ */
501
+ this._wakeSources = new WakeSourceTracker();
491
502
  this._overflowRecoveryAttempted = false;
492
503
  this._compactionSkippedTooSmall = false;
493
504
  // A retry continuation immediately follows an accepted compaction. Its first
@@ -2014,9 +2025,31 @@ export class AgentSession {
2014
2025
  this._disconnectFromAgent();
2015
2026
  this._unsubscribeSettingsSource?.();
2016
2027
  this._unsubscribeSettingsSource = undefined;
2028
+ this._unsubscribeWakeSources?.();
2029
+ this._unsubscribeWakeSources = undefined;
2017
2030
  this._eventListeners = [];
2018
2031
  cleanupSessionResources(this.sessionId);
2019
2032
  }
2033
+ /** Live in-session activity signals; see `session-activity.ts` for the contract. */
2034
+ get activitySnapshot() {
2035
+ return {
2036
+ isStreaming: this._isAgentRunActive,
2037
+ isBashRunning: this.isBashRunning,
2038
+ isCompacting: this.isCompacting,
2039
+ hasSessionWork: this._sessionWorkBarrier.hasActiveWork,
2040
+ hasActiveWakeSource: this._wakeSources.hasActive,
2041
+ };
2042
+ }
2043
+ /**
2044
+ * Whether this session owns work that must outlive a teardown decision: an
2045
+ * agent run, bash, compaction, barrier-held session work, or an
2046
+ * extension-published wake source. Occupancy sweeps (the shared RPC host's
2047
+ * idle eviction) MUST consult this rather than individual flags, so a new
2048
+ * activity source is picked up by every call site at once.
2049
+ */
2050
+ get isSessionBusy() {
2051
+ return isSessionBusySnapshot(this.activitySnapshot);
2052
+ }
2020
2053
  // =========================================================================
2021
2054
  // Read-only State Access
2022
2055
  // =========================================================================
@@ -2331,8 +2364,14 @@ export class AgentSession {
2331
2364
  this._baseSystemPrompt = this._rebuildSystemPrompt(validToolNames);
2332
2365
  this.agent.state.systemPrompt = this._systemPromptOverride ?? this._baseSystemPrompt;
2333
2366
  if (activeToolNamesChanged) {
2334
- this.abortCompaction();
2335
- this._incrementMessageRevision();
2367
+ // A tool change emitted while extensions are still binding belongs to the
2368
+ // binding itself, not to a mid-session change. The session was already
2369
+ // committed to the client, so cancelling or invalidating work it started
2370
+ // against that session would be spurious.
2371
+ if (this._extensionBindingPromptReadiness === undefined) {
2372
+ this.abortCompaction();
2373
+ this._incrementMessageRevision();
2374
+ }
2336
2375
  }
2337
2376
  }
2338
2377
  /** Whether compaction or branch summarization is currently running */
@@ -3530,6 +3569,43 @@ export class AgentSession {
3530
3569
  async setModel(model) {
3531
3570
  return this._setModel(model, true);
3532
3571
  }
3572
+ assertModelUsable(model = this.model, liveContextTokens = 0) {
3573
+ if (!model || model.contextWindow <= 0)
3574
+ return;
3575
+ const projection = projectModelUsabilityBudget({
3576
+ model,
3577
+ systemPrompt: this.agent.state.systemPrompt,
3578
+ tools: this.agent.state.tools,
3579
+ liveContextTokens,
3580
+ compaction: this.settingsManager.getCompactionSettings(),
3581
+ });
3582
+ if (!projection.usable)
3583
+ throw new ModelUsabilityBudgetError(projection);
3584
+ }
3585
+ _getDownswitchLiveContextTokens(model) {
3586
+ const currentModel = this.model;
3587
+ if (!currentModel)
3588
+ return 0;
3589
+ const compaction = this.settingsManager.getCompactionSettings();
3590
+ const currentBudget = projectModelUsabilityBudget({
3591
+ model: currentModel,
3592
+ systemPrompt: this.agent.state.systemPrompt,
3593
+ tools: this.agent.state.tools,
3594
+ compaction,
3595
+ });
3596
+ const targetBudget = projectModelUsabilityBudget({
3597
+ model,
3598
+ systemPrompt: this.agent.state.systemPrompt,
3599
+ tools: this.agent.state.tools,
3600
+ compaction,
3601
+ });
3602
+ const currentUsableContext = currentBudget.contextWindow - currentBudget.requiredTokens;
3603
+ const targetUsableContext = targetBudget.contextWindow - targetBudget.requiredTokens;
3604
+ if (targetUsableContext >= currentUsableContext)
3605
+ return 0;
3606
+ const fixedPrefixTokens = currentBudget.systemPromptTokens + currentBudget.activeToolSchemaTokens;
3607
+ return Math.max(0, (this.getContextUsage()?.tokens ?? 0) - fixedPrefixTokens);
3608
+ }
3533
3609
  /**
3534
3610
  * Set the model for this session without changing the global model defaults.
3535
3611
  * The selection is still persisted in this session's history.
@@ -3538,6 +3614,7 @@ export class AgentSession {
3538
3614
  return this._setModel(model, false);
3539
3615
  }
3540
3616
  async _setModel(model, updateGlobalDefaults) {
3617
+ this.assertModelUsable(model, this._getDownswitchLiveContextTokens(model));
3541
3618
  if (!(await this._modelRuntime.checkAuth(model.provider))) {
3542
3619
  throw new Error(`No API key for ${model.provider}/${model.id}`);
3543
3620
  }
@@ -3566,6 +3643,17 @@ export class AgentSession {
3566
3643
  console.error("fallback revert failed; cleared fallback state", error);
3567
3644
  }
3568
3645
  }
3646
+ /**
3647
+ * A senpi-owned compaction just rewrote the conversation context: release any
3648
+ * refusal-caused fallback pin (the "same context refuses again" assumption no
3649
+ * longer holds) and, while no run is active, eagerly re-attempt the original
3650
+ * model through the existing revert gate. Billing-caused pins never release.
3651
+ */
3652
+ async _onCompactionContextChanged() {
3653
+ const released = this._retryFallback.notifyCompactionApplied();
3654
+ if (released && !this.isStreaming)
3655
+ await this._maybeRestoreFallbackPrimary();
3656
+ }
3569
3657
  async _switchActiveModel(model, opts) {
3570
3658
  const previousModel = this.model;
3571
3659
  if (opts.invalidateCompaction &&
@@ -3575,6 +3663,7 @@ export class AgentSession {
3575
3663
  this._invalidateCompactionForModelSelection();
3576
3664
  }
3577
3665
  const thinking = this._getThinkingForModelSwitch(model, opts.ephemeralThinkingLevel);
3666
+ const liveContextTokens = this._getDownswitchLiveContextTokens(model);
3578
3667
  this.agent.state.model = model;
3579
3668
  this.agent.abortServerSideFallback =
3580
3669
  this.settingsManager.getAbortServerSideFallback() && this._retryFallback.hasConfiguredChain();
@@ -3606,7 +3695,20 @@ export class AgentSession {
3606
3695
  this._emitServiceTierChangeIfNeeded(previousTier, previousFastMode);
3607
3696
  if (!opts.emitModelSelect)
3608
3697
  return undefined;
3609
- return await this._emitModelSelect(model, previousModel, opts.modelSelectSource);
3698
+ const previousSystemPrompt = this.agent.state.systemPrompt;
3699
+ try {
3700
+ const systemPromptChange = await this._emitModelSelect(model, previousModel, opts.modelSelectSource);
3701
+ this.assertModelUsable(model, liveContextTokens);
3702
+ return systemPromptChange;
3703
+ }
3704
+ catch (error) {
3705
+ if (previousModel)
3706
+ this.agent.state.model = previousModel;
3707
+ else
3708
+ delete this.agent.state.model;
3709
+ this.agent.state.systemPrompt = previousSystemPrompt;
3710
+ throw error;
3711
+ }
3610
3712
  }
3611
3713
  _applyEphemeralThinkingLevel(level) {
3612
3714
  const previousLevel = this.agent.state.thinkingLevel;
@@ -3643,6 +3745,8 @@ export class AgentSession {
3643
3745
  nextIndex = direction === "forward" ? (currentIndex + 1) % len : (currentIndex - 1 + len) % len;
3644
3746
  }
3645
3747
  const next = favoriteModels[nextIndex];
3748
+ const liveContextTokens = this._getDownswitchLiveContextTokens(next.model);
3749
+ this.assertModelUsable(next.model, liveContextTokens);
3646
3750
  const invalidatesCompaction = this._modelSelectionChangesContext(currentModel, next.model) ||
3647
3751
  currentModel?.provider !== next.model.provider ||
3648
3752
  currentModel?.id !== next.model.id;
@@ -3668,16 +3772,28 @@ export class AgentSession {
3668
3772
  source: "cycle",
3669
3773
  });
3670
3774
  this._emitServiceTierChangeIfNeeded(previousTier, previousFastMode);
3671
- const systemPromptChange = await this._emitModelSelect(next.model, currentModel, "cycle");
3672
- const cycleResult = {
3673
- model: next.model,
3674
- thinkingLevel: this.thinkingLevel,
3675
- isScoped: true,
3676
- };
3677
- if (systemPromptChange) {
3678
- cycleResult.systemPromptChange = systemPromptChange;
3775
+ const previousSystemPrompt = this.agent.state.systemPrompt;
3776
+ try {
3777
+ const systemPromptChange = await this._emitModelSelect(next.model, currentModel, "cycle");
3778
+ this.assertModelUsable(next.model, liveContextTokens);
3779
+ const cycleResult = {
3780
+ model: next.model,
3781
+ thinkingLevel: this.thinkingLevel,
3782
+ isScoped: true,
3783
+ };
3784
+ if (systemPromptChange) {
3785
+ cycleResult.systemPromptChange = systemPromptChange;
3786
+ }
3787
+ return cycleResult;
3788
+ }
3789
+ catch (error) {
3790
+ if (currentModel)
3791
+ this.agent.state.model = currentModel;
3792
+ else
3793
+ delete this.agent.state.model;
3794
+ this.agent.state.systemPrompt = previousSystemPrompt;
3795
+ throw error;
3679
3796
  }
3680
- return cycleResult;
3681
3797
  }
3682
3798
  // =========================================================================
3683
3799
  // Thinking Level Management
@@ -4402,6 +4518,10 @@ export class AgentSession {
4402
4518
  fromExtension,
4403
4519
  willRetry: request.willRetry,
4404
4520
  });
4521
+ // Shared success seam: every senpi-owned compaction apply (manual /compact,
4522
+ // extension applyCompaction, pre-prompt and auto compaction) funnels through
4523
+ // here after the compaction entry is appended and the success event emitted.
4524
+ await this._onCompactionContextChanged();
4405
4525
  return {
4406
4526
  accepted: true,
4407
4527
  requestId,
@@ -4454,7 +4574,10 @@ export class AgentSession {
4454
4574
  }
4455
4575
  const contextTokens = estimateMessagesTokens(filterContextExcludedMessages(simulatedMessages));
4456
4576
  const settings = this.settingsManager.getCompactionSettings();
4457
- return contextTokens > model.contextWindow - settings.reserveTokens;
4577
+ const reserveTokens = settings.reserveScalingEnabled === false
4578
+ ? settings.reserveTokens
4579
+ : resolveReserveTokens(model.contextWindow, settings.reserveTokens);
4580
+ return contextTokens > model.contextWindow - reserveTokens;
4458
4581
  }
4459
4582
  /**
4460
4583
  * Replaces agent state with the canonical session context while keeping exact
@@ -4618,6 +4741,9 @@ export class AgentSession {
4618
4741
  if (!model)
4619
4742
  return;
4620
4743
  const settings = this.settingsManager.getCompactionSettings();
4744
+ const reserveTokens = settings.reserveScalingEnabled === false
4745
+ ? settings.reserveTokens
4746
+ : resolveReserveTokens(model.contextWindow, settings.reserveTokens);
4621
4747
  const isOversized = () => {
4622
4748
  const providerMessages = filterContextExcludedMessages([...this.agent.state.messages, ...messages]);
4623
4749
  const estimate = estimateContextTokens(providerMessages);
@@ -4628,7 +4754,7 @@ export class AgentSession {
4628
4754
  const contextTokens = usageMessage?.role === "assistant" && this._isAssistantFromBeforeLatestCompaction(usageMessage)
4629
4755
  ? estimateMessagesTokens(providerMessages)
4630
4756
  : estimate.tokens;
4631
- return contextTokens > model.contextWindow - settings.reserveTokens;
4757
+ return contextTokens > model.contextWindow - reserveTokens;
4632
4758
  };
4633
4759
  if (!settings.enabled || !isOversized())
4634
4760
  return;
@@ -4906,6 +5032,21 @@ export class AgentSession {
4906
5032
  try {
4907
5033
  if (this.agent.state.isStreaming)
4908
5034
  return "taken-over";
5035
+ // Pre-admission restore point. A senpi-owned compaction that succeeds
5036
+ // while a run is still active releases its refusal pin through
5037
+ // _onCompactionContextChanged() but cannot restore there: model-select
5038
+ // work must stay ordered behind the session-work barrier while the run
5039
+ // owns it. Every post-compaction continuation admission - auto/overflow
5040
+ // compaction recovery, _resumeQueuedMessagesAfterCompaction(), the
5041
+ // agent_end queued continuation and the retry continuation - is scheduled
5042
+ // through _scheduleContinuationAfterCurrentEvent() and funnels here, so
5043
+ // this is the single choke point every such request passes before
5044
+ // reaching the provider. Restoring here (a no-op when nothing is pending)
5045
+ // keeps the guarantee that the very next request after a compaction runs
5046
+ // on the primary, and precedes the admission revalidation below so that
5047
+ // check samples the restored model's context window - the same ordering
5048
+ // the retry-continuation restore uses.
5049
+ await this._maybeRestoreFallbackPrimary();
4909
5050
  await this._revalidateScheduledContinuationAdmission();
4910
5051
  if (this.agent.state.isStreaming)
4911
5052
  return "taken-over";
@@ -5255,6 +5396,12 @@ export class AgentSession {
5255
5396
  this.agent.state.model = refreshedModel;
5256
5397
  }
5257
5398
  _bindExtensionCore(runner) {
5399
+ // Activity extensions publish about work outliving a turn (background
5400
+ // terminal jobs, monitors, holds) feeds the session-busy contract. Re-bound
5401
+ // per runner; counts survive the swap so a reload cannot make live work
5402
+ // look idle to an occupancy sweep.
5403
+ this._unsubscribeWakeSources?.();
5404
+ this._unsubscribeWakeSources = runner.onBusEvent(WAKE_SOURCE_STATE_EVENT, (data) => this._wakeSources.observe(data));
5258
5405
  const getCommands = () => {
5259
5406
  const extensionCommands = runner.getRegisteredCommands().map((command) => ({
5260
5407
  name: command.invocationName,