@code-yeongyu/senpi 2026.8.11 → 2026.8.12-3

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 (488) hide show
  1. package/CHANGELOG.md +227 -0
  2. package/dist/brand-dir-migration.d.ts +28 -0
  3. package/dist/brand-dir-migration.d.ts.map +1 -0
  4. package/dist/brand-dir-migration.js +77 -0
  5. package/dist/brand-dir-migration.js.map +1 -0
  6. package/dist/cli/grok-neo-gate.d.ts +0 -8
  7. package/dist/cli/grok-neo-gate.d.ts.map +1 -1
  8. package/dist/cli/grok-neo-gate.js +4 -2
  9. package/dist/cli/grok-neo-gate.js.map +1 -1
  10. package/dist/cli-main.d.ts +1 -1
  11. package/dist/cli-main.d.ts.map +1 -1
  12. package/dist/cli-main.js +4 -0
  13. package/dist/cli-main.js.map +1 -1
  14. package/dist/cli.d.ts +1 -1
  15. package/dist/cli.d.ts.map +1 -1
  16. package/dist/cli.js +3 -2
  17. package/dist/cli.js.map +1 -1
  18. package/dist/config.d.ts +27 -1
  19. package/dist/config.d.ts.map +1 -1
  20. package/dist/config.js +41 -9
  21. package/dist/config.js.map +1 -1
  22. package/dist/core/agent-session.d.ts +8 -2
  23. package/dist/core/agent-session.d.ts.map +1 -1
  24. package/dist/core/agent-session.js +73 -11
  25. package/dist/core/agent-session.js.map +1 -1
  26. package/dist/core/brand.d.ts +79 -0
  27. package/dist/core/brand.d.ts.map +1 -0
  28. package/dist/core/brand.js +141 -0
  29. package/dist/core/brand.js.map +1 -0
  30. package/dist/core/dynamic-prompt/identity.d.ts.map +1 -1
  31. package/dist/core/dynamic-prompt/identity.js +2 -1
  32. package/dist/core/dynamic-prompt/identity.js.map +1 -1
  33. package/dist/core/event-bus.d.ts +5 -0
  34. package/dist/core/event-bus.d.ts.map +1 -1
  35. package/dist/core/event-bus.js +1 -0
  36. package/dist/core/event-bus.js.map +1 -1
  37. package/dist/core/experimental.d.ts.map +1 -1
  38. package/dist/core/experimental.js +2 -1
  39. package/dist/core/experimental.js.map +1 -1
  40. package/dist/core/extensions/builtin/btw/index.d.ts.map +1 -1
  41. package/dist/core/extensions/builtin/btw/index.js +7 -2
  42. package/dist/core/extensions/builtin/btw/index.js.map +1 -1
  43. package/dist/core/extensions/builtin/btw/side-query.d.ts +2 -0
  44. package/dist/core/extensions/builtin/btw/side-query.d.ts.map +1 -1
  45. package/dist/core/extensions/builtin/btw/side-query.js +39 -2
  46. package/dist/core/extensions/builtin/btw/side-query.js.map +1 -1
  47. package/dist/core/extensions/builtin/claude-sdk-oauth/auth-lane.d.ts +2 -1
  48. package/dist/core/extensions/builtin/claude-sdk-oauth/auth-lane.d.ts.map +1 -1
  49. package/dist/core/extensions/builtin/claude-sdk-oauth/auth-lane.js +5 -4
  50. package/dist/core/extensions/builtin/claude-sdk-oauth/auth-lane.js.map +1 -1
  51. package/dist/core/extensions/builtin/claude-sdk-oauth/availability.d.ts +2 -0
  52. package/dist/core/extensions/builtin/claude-sdk-oauth/availability.d.ts.map +1 -0
  53. package/dist/core/extensions/builtin/claude-sdk-oauth/availability.js +24 -0
  54. package/dist/core/extensions/builtin/claude-sdk-oauth/availability.js.map +1 -0
  55. package/dist/core/extensions/builtin/claude-sdk-oauth/index.d.ts +4 -0
  56. package/dist/core/extensions/builtin/claude-sdk-oauth/index.d.ts.map +1 -1
  57. package/dist/core/extensions/builtin/claude-sdk-oauth/index.js +14 -2
  58. package/dist/core/extensions/builtin/claude-sdk-oauth/index.js.map +1 -1
  59. package/dist/core/extensions/builtin/claude-sdk-oauth/oauth-login.d.ts +9 -1
  60. package/dist/core/extensions/builtin/claude-sdk-oauth/oauth-login.d.ts.map +1 -1
  61. package/dist/core/extensions/builtin/claude-sdk-oauth/oauth-login.js +18 -0
  62. package/dist/core/extensions/builtin/claude-sdk-oauth/oauth-login.js.map +1 -1
  63. package/dist/core/extensions/builtin/claude-sdk-oauth/options.js +1 -1
  64. package/dist/core/extensions/builtin/claude-sdk-oauth/options.js.map +1 -1
  65. package/dist/core/extensions/builtin/claude-sdk-oauth/session-commit-boundary.d.ts.map +1 -1
  66. package/dist/core/extensions/builtin/claude-sdk-oauth/session-commit-boundary.js +10 -1
  67. package/dist/core/extensions/builtin/claude-sdk-oauth/session-commit-boundary.js.map +1 -1
  68. package/dist/core/extensions/builtin/compaction/index.d.ts +1 -0
  69. package/dist/core/extensions/builtin/compaction/index.d.ts.map +1 -1
  70. package/dist/core/extensions/builtin/compaction/index.js +1 -1
  71. package/dist/core/extensions/builtin/compaction/index.js.map +1 -1
  72. package/dist/core/extensions/builtin/compaction/log.d.ts.map +1 -1
  73. package/dist/core/extensions/builtin/compaction/log.js +2 -1
  74. package/dist/core/extensions/builtin/compaction/log.js.map +1 -1
  75. package/dist/core/extensions/builtin/config-reload/generated-shim-filter.d.ts.map +1 -1
  76. package/dist/core/extensions/builtin/config-reload/generated-shim-filter.js +4 -4
  77. package/dist/core/extensions/builtin/config-reload/generated-shim-filter.js.map +1 -1
  78. package/dist/core/extensions/builtin/goal/index.d.ts.map +1 -1
  79. package/dist/core/extensions/builtin/goal/index.js +5 -0
  80. package/dist/core/extensions/builtin/goal/index.js.map +1 -1
  81. package/dist/core/extensions/builtin/goal/lifecycle-helpers.d.ts +2 -2
  82. package/dist/core/extensions/builtin/goal/lifecycle-helpers.d.ts.map +1 -1
  83. package/dist/core/extensions/builtin/goal/lifecycle-helpers.js +3 -3
  84. package/dist/core/extensions/builtin/goal/lifecycle-helpers.js.map +1 -1
  85. package/dist/core/extensions/builtin/goal/monitor-continuation.d.ts.map +1 -1
  86. package/dist/core/extensions/builtin/goal/monitor-continuation.js +6 -0
  87. package/dist/core/extensions/builtin/goal/monitor-continuation.js.map +1 -1
  88. package/dist/core/extensions/builtin/goal/store.d.ts +3 -2
  89. package/dist/core/extensions/builtin/goal/store.d.ts.map +1 -1
  90. package/dist/core/extensions/builtin/goal/store.js +128 -101
  91. package/dist/core/extensions/builtin/goal/store.js.map +1 -1
  92. package/dist/core/extensions/builtin/goal/transitions.js +2 -1
  93. package/dist/core/extensions/builtin/goal/transitions.js.map +1 -1
  94. package/dist/core/extensions/builtin/help/index.d.ts.map +1 -1
  95. package/dist/core/extensions/builtin/help/index.js +3 -2
  96. package/dist/core/extensions/builtin/help/index.js.map +1 -1
  97. package/dist/core/extensions/builtin/imagegen/auth.d.ts +45 -0
  98. package/dist/core/extensions/builtin/imagegen/auth.d.ts.map +1 -0
  99. package/dist/core/extensions/builtin/imagegen/auth.js +137 -0
  100. package/dist/core/extensions/builtin/imagegen/auth.js.map +1 -0
  101. package/dist/core/extensions/builtin/imagegen/index.d.ts +5 -0
  102. package/dist/core/extensions/builtin/imagegen/index.d.ts.map +1 -0
  103. package/dist/core/extensions/builtin/imagegen/index.js +46 -0
  104. package/dist/core/extensions/builtin/imagegen/index.js.map +1 -0
  105. package/dist/core/extensions/builtin/imagegen/paths.d.ts +26 -0
  106. package/dist/core/extensions/builtin/imagegen/paths.d.ts.map +1 -0
  107. package/dist/core/extensions/builtin/imagegen/paths.js +52 -0
  108. package/dist/core/extensions/builtin/imagegen/paths.js.map +1 -0
  109. package/dist/core/extensions/builtin/imagegen/skill/SKILL.md +67 -0
  110. package/dist/core/extensions/builtin/imagegen/state.d.ts +26 -0
  111. package/dist/core/extensions/builtin/imagegen/state.d.ts.map +1 -0
  112. package/dist/core/extensions/builtin/imagegen/state.js +35 -0
  113. package/dist/core/extensions/builtin/imagegen/state.js.map +1 -0
  114. package/dist/core/extensions/builtin/imagegen/tool.d.ts +31 -0
  115. package/dist/core/extensions/builtin/imagegen/tool.d.ts.map +1 -0
  116. package/dist/core/extensions/builtin/imagegen/tool.js +174 -0
  117. package/dist/core/extensions/builtin/imagegen/tool.js.map +1 -0
  118. package/dist/core/extensions/builtin/index.d.ts.map +1 -1
  119. package/dist/core/extensions/builtin/index.js +9 -1
  120. package/dist/core/extensions/builtin/index.js.map +1 -1
  121. package/dist/core/extensions/builtin/mcp/control-inventory.d.ts +14 -0
  122. package/dist/core/extensions/builtin/mcp/control-inventory.d.ts.map +1 -0
  123. package/dist/core/extensions/builtin/mcp/control-inventory.js +22 -0
  124. package/dist/core/extensions/builtin/mcp/control-inventory.js.map +1 -0
  125. package/dist/core/extensions/builtin/mcp/expose/native-search.d.ts +2 -44
  126. package/dist/core/extensions/builtin/mcp/expose/native-search.d.ts.map +1 -1
  127. package/dist/core/extensions/builtin/mcp/expose/native-search.js +3 -97
  128. package/dist/core/extensions/builtin/mcp/expose/native-search.js.map +1 -1
  129. package/dist/core/extensions/builtin/mcp/expose/proxy.d.ts.map +1 -1
  130. package/dist/core/extensions/builtin/mcp/expose/proxy.js +15 -4
  131. package/dist/core/extensions/builtin/mcp/expose/proxy.js.map +1 -1
  132. package/dist/core/extensions/builtin/mcp/expose/session.d.ts +2 -1
  133. package/dist/core/extensions/builtin/mcp/expose/session.d.ts.map +1 -1
  134. package/dist/core/extensions/builtin/mcp/expose/session.js +2 -2
  135. package/dist/core/extensions/builtin/mcp/expose/session.js.map +1 -1
  136. package/dist/core/extensions/builtin/mcp/expose/tier-b.d.ts +13 -11
  137. package/dist/core/extensions/builtin/mcp/expose/tier-b.d.ts.map +1 -1
  138. package/dist/core/extensions/builtin/mcp/expose/tier-b.js +58 -59
  139. package/dist/core/extensions/builtin/mcp/expose/tier-b.js.map +1 -1
  140. package/dist/core/extensions/builtin/mcp/index.d.ts.map +1 -1
  141. package/dist/core/extensions/builtin/mcp/index.js +28 -36
  142. package/dist/core/extensions/builtin/mcp/index.js.map +1 -1
  143. package/dist/core/extensions/builtin/mcp/service-register.d.ts +2 -1
  144. package/dist/core/extensions/builtin/mcp/service-register.d.ts.map +1 -1
  145. package/dist/core/extensions/builtin/mcp/service-register.js +2 -2
  146. package/dist/core/extensions/builtin/mcp/service-register.js.map +1 -1
  147. package/dist/core/extensions/builtin/mcp/service-types.d.ts +4 -0
  148. package/dist/core/extensions/builtin/mcp/service-types.d.ts.map +1 -1
  149. package/dist/core/extensions/builtin/mcp/service-types.js.map +1 -1
  150. package/dist/core/extensions/builtin/mcp/service.d.ts +6 -11
  151. package/dist/core/extensions/builtin/mcp/service.d.ts.map +1 -1
  152. package/dist/core/extensions/builtin/mcp/service.js +79 -41
  153. package/dist/core/extensions/builtin/mcp/service.js.map +1 -1
  154. package/dist/core/extensions/builtin/mcp/wrap.d.ts +2 -0
  155. package/dist/core/extensions/builtin/mcp/wrap.d.ts.map +1 -1
  156. package/dist/core/extensions/builtin/mcp/wrap.js +3 -0
  157. package/dist/core/extensions/builtin/mcp/wrap.js.map +1 -1
  158. package/dist/core/extensions/builtin/openai-image-gen/externalize.d.ts +27 -0
  159. package/dist/core/extensions/builtin/openai-image-gen/externalize.d.ts.map +1 -0
  160. package/dist/core/extensions/builtin/openai-image-gen/externalize.js +133 -0
  161. package/dist/core/extensions/builtin/openai-image-gen/externalize.js.map +1 -0
  162. package/dist/core/extensions/builtin/openai-image-gen/gate.d.ts +21 -0
  163. package/dist/core/extensions/builtin/openai-image-gen/gate.d.ts.map +1 -0
  164. package/dist/core/extensions/builtin/openai-image-gen/gate.js +63 -0
  165. package/dist/core/extensions/builtin/openai-image-gen/gate.js.map +1 -0
  166. package/dist/core/extensions/builtin/openai-image-gen/index.d.ts +14 -0
  167. package/dist/core/extensions/builtin/openai-image-gen/index.d.ts.map +1 -0
  168. package/dist/core/extensions/builtin/openai-image-gen/index.js +77 -0
  169. package/dist/core/extensions/builtin/openai-image-gen/index.js.map +1 -0
  170. package/dist/core/extensions/builtin/openai-image-gen/inject.d.ts +15 -0
  171. package/dist/core/extensions/builtin/openai-image-gen/inject.d.ts.map +1 -0
  172. package/dist/core/extensions/builtin/openai-image-gen/inject.js +42 -0
  173. package/dist/core/extensions/builtin/openai-image-gen/inject.js.map +1 -0
  174. package/dist/core/extensions/builtin/prompt-preset/claude-fable-5.d.ts.map +1 -1
  175. package/dist/core/extensions/builtin/prompt-preset/claude-fable-5.js +2 -1
  176. package/dist/core/extensions/builtin/prompt-preset/claude-fable-5.js.map +1 -1
  177. package/dist/core/extensions/builtin/prompt-preset/claude-opus-5.d.ts.map +1 -1
  178. package/dist/core/extensions/builtin/prompt-preset/claude-opus-5.js +2 -1
  179. package/dist/core/extensions/builtin/prompt-preset/claude-opus-5.js.map +1 -1
  180. package/dist/core/extensions/builtin/prompt-preset/gpt-5.5.d.ts.map +1 -1
  181. package/dist/core/extensions/builtin/prompt-preset/gpt-5.5.js +2 -1
  182. package/dist/core/extensions/builtin/prompt-preset/gpt-5.5.js.map +1 -1
  183. package/dist/core/extensions/builtin/prompt-preset/gpt-5.6.d.ts.map +1 -1
  184. package/dist/core/extensions/builtin/prompt-preset/gpt-5.6.js +2 -1
  185. package/dist/core/extensions/builtin/prompt-preset/gpt-5.6.js.map +1 -1
  186. package/dist/core/extensions/builtin/prompt-preset/grok-4.5.d.ts.map +1 -1
  187. package/dist/core/extensions/builtin/prompt-preset/grok-4.5.js +6 -5
  188. package/dist/core/extensions/builtin/prompt-preset/grok-4.5.js.map +1 -1
  189. package/dist/core/extensions/builtin/prompt-preset/kimi-k3.d.ts.map +1 -1
  190. package/dist/core/extensions/builtin/prompt-preset/kimi-k3.js +2 -1
  191. package/dist/core/extensions/builtin/prompt-preset/kimi-k3.js.map +1 -1
  192. package/dist/core/extensions/builtin/terminal/monitor-notify.d.ts.map +1 -1
  193. package/dist/core/extensions/builtin/terminal/monitor-notify.js +8 -1
  194. package/dist/core/extensions/builtin/terminal/monitor-notify.js.map +1 -1
  195. package/dist/core/extensions/builtin/terminal/notify.d.ts +3 -1
  196. package/dist/core/extensions/builtin/terminal/notify.d.ts.map +1 -1
  197. package/dist/core/extensions/builtin/terminal/notify.js +4 -1
  198. package/dist/core/extensions/builtin/terminal/notify.js.map +1 -1
  199. package/dist/core/extensions/builtin/tool-search/engine/bm25.d.ts +22 -0
  200. package/dist/core/extensions/builtin/tool-search/engine/bm25.d.ts.map +1 -0
  201. package/dist/core/extensions/builtin/{mcp/expose → tool-search/engine}/bm25.js +16 -31
  202. package/dist/core/extensions/builtin/tool-search/engine/bm25.js.map +1 -0
  203. package/dist/core/extensions/builtin/tool-search/engine/document.d.ts +14 -0
  204. package/dist/core/extensions/builtin/tool-search/engine/document.d.ts.map +1 -0
  205. package/dist/core/extensions/builtin/tool-search/engine/document.js +2 -0
  206. package/dist/core/extensions/builtin/tool-search/engine/document.js.map +1 -0
  207. package/dist/core/extensions/builtin/tool-search/engine/marker.d.ts +55 -0
  208. package/dist/core/extensions/builtin/tool-search/engine/marker.d.ts.map +1 -0
  209. package/dist/core/extensions/builtin/tool-search/engine/marker.js +189 -0
  210. package/dist/core/extensions/builtin/tool-search/engine/marker.js.map +1 -0
  211. package/dist/core/extensions/builtin/tool-search/index.d.ts +7 -0
  212. package/dist/core/extensions/builtin/tool-search/index.d.ts.map +1 -0
  213. package/dist/core/extensions/builtin/tool-search/index.js +71 -0
  214. package/dist/core/extensions/builtin/tool-search/index.js.map +1 -0
  215. package/dist/core/extensions/builtin/tool-search/native-search.d.ts +52 -0
  216. package/dist/core/extensions/builtin/tool-search/native-search.d.ts.map +1 -0
  217. package/dist/core/extensions/builtin/tool-search/native-search.js +116 -0
  218. package/dist/core/extensions/builtin/tool-search/native-search.js.map +1 -0
  219. package/dist/core/extensions/builtin/tool-search/service.d.ts +38 -0
  220. package/dist/core/extensions/builtin/tool-search/service.d.ts.map +1 -0
  221. package/dist/core/extensions/builtin/tool-search/service.js +200 -0
  222. package/dist/core/extensions/builtin/tool-search/service.js.map +1 -0
  223. package/dist/core/extensions/builtin/tool-search/tool.d.ts +21 -0
  224. package/dist/core/extensions/builtin/tool-search/tool.d.ts.map +1 -0
  225. package/dist/core/extensions/builtin/tool-search/tool.js +95 -0
  226. package/dist/core/extensions/builtin/tool-search/tool.js.map +1 -0
  227. package/dist/core/extensions/index.d.ts +1 -1
  228. package/dist/core/extensions/index.d.ts.map +1 -1
  229. package/dist/core/extensions/index.js.map +1 -1
  230. package/dist/core/extensions/loader.d.ts.map +1 -1
  231. package/dist/core/extensions/loader.js +31 -1
  232. package/dist/core/extensions/loader.js.map +1 -1
  233. package/dist/core/extensions/runner.d.ts +5 -1
  234. package/dist/core/extensions/runner.d.ts.map +1 -1
  235. package/dist/core/extensions/runner.js +28 -1
  236. package/dist/core/extensions/runner.js.map +1 -1
  237. package/dist/core/extensions/types.d.ts +61 -4
  238. package/dist/core/extensions/types.d.ts.map +1 -1
  239. package/dist/core/extensions/types.js +11 -0
  240. package/dist/core/extensions/types.js.map +1 -1
  241. package/dist/core/generated-shim-banner.d.ts +15 -0
  242. package/dist/core/generated-shim-banner.d.ts.map +1 -0
  243. package/dist/core/generated-shim-banner.js +26 -0
  244. package/dist/core/generated-shim-banner.js.map +1 -0
  245. package/dist/core/model-runtime.d.ts.map +1 -1
  246. package/dist/core/model-runtime.js +7 -3
  247. package/dist/core/model-runtime.js.map +1 -1
  248. package/dist/core/package-manager.d.ts.map +1 -1
  249. package/dist/core/package-manager.js +2 -1
  250. package/dist/core/package-manager.js.map +1 -1
  251. package/dist/core/provider-composer.d.ts +10 -1
  252. package/dist/core/provider-composer.d.ts.map +1 -1
  253. package/dist/core/provider-composer.js +9 -0
  254. package/dist/core/provider-composer.js.map +1 -1
  255. package/dist/core/resource-loader.d.ts.map +1 -1
  256. package/dist/core/resource-loader.js +21 -10
  257. package/dist/core/resource-loader.js.map +1 -1
  258. package/dist/core/session-log.d.ts.map +1 -1
  259. package/dist/core/session-log.js +4 -2
  260. package/dist/core/session-log.js.map +1 -1
  261. package/dist/core/settings-manager.d.ts.map +1 -1
  262. package/dist/core/settings-manager.js +3 -2
  263. package/dist/core/settings-manager.js.map +1 -1
  264. package/dist/core/telemetry.d.ts.map +1 -1
  265. package/dist/core/telemetry.js +2 -1
  266. package/dist/core/telemetry.js.map +1 -1
  267. package/dist/core/timings.d.ts +0 -4
  268. package/dist/core/timings.d.ts.map +1 -1
  269. package/dist/core/timings.js +2 -1
  270. package/dist/core/timings.js.map +1 -1
  271. package/dist/index.d.ts +2 -2
  272. package/dist/index.d.ts.map +1 -1
  273. package/dist/index.js.map +1 -1
  274. package/dist/inspector-policy.d.ts.map +1 -1
  275. package/dist/inspector-policy.js +2 -1
  276. package/dist/inspector-policy.js.map +1 -1
  277. package/dist/main.d.ts.map +1 -1
  278. package/dist/main.js +5 -4
  279. package/dist/main.js.map +1 -1
  280. package/dist/migrations.d.ts.map +1 -1
  281. package/dist/migrations.js +4 -0
  282. package/dist/migrations.js.map +1 -1
  283. package/dist/modes/index.d.ts +2 -2
  284. package/dist/modes/index.d.ts.map +1 -1
  285. package/dist/modes/index.js +1 -1
  286. package/dist/modes/index.js.map +1 -1
  287. package/dist/modes/interactive/external-editor.d.ts +2 -0
  288. package/dist/modes/interactive/external-editor.d.ts.map +1 -1
  289. package/dist/modes/interactive/external-editor.js +10 -4
  290. package/dist/modes/interactive/external-editor.js.map +1 -1
  291. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  292. package/dist/modes/interactive/interactive-mode.js +6 -5
  293. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  294. package/dist/modes/interactive/tips/catalog/cli-tips.d.ts.map +1 -1
  295. package/dist/modes/interactive/tips/catalog/cli-tips.js +2 -1
  296. package/dist/modes/interactive/tips/catalog/cli-tips.js.map +1 -1
  297. package/dist/modes/interactive/tips/catalog/ethos-tips.d.ts.map +1 -1
  298. package/dist/modes/interactive/tips/catalog/ethos-tips.js +4 -3
  299. package/dist/modes/interactive/tips/catalog/ethos-tips.js.map +1 -1
  300. package/dist/modes/interactive/tips/catalog/model-tips.d.ts.map +1 -1
  301. package/dist/modes/interactive/tips/catalog/model-tips.js +2 -1
  302. package/dist/modes/interactive/tips/catalog/model-tips.js.map +1 -1
  303. package/dist/modes/interactive/tips/catalog/session-tips.d.ts.map +1 -1
  304. package/dist/modes/interactive/tips/catalog/session-tips.js +2 -1
  305. package/dist/modes/interactive/tips/catalog/session-tips.js.map +1 -1
  306. package/dist/modes/interactive/tips/catalog/settings-tips.d.ts.map +1 -1
  307. package/dist/modes/interactive/tips/catalog/settings-tips.js +3 -2
  308. package/dist/modes/interactive/tips/catalog/settings-tips.js.map +1 -1
  309. package/dist/modes/interactive/tips/catalog/workspace-tips.d.ts.map +1 -1
  310. package/dist/modes/interactive/tips/catalog/workspace-tips.js +4 -3
  311. package/dist/modes/interactive/tips/catalog/workspace-tips.js.map +1 -1
  312. package/dist/modes/provider-native-rendering.d.ts.map +1 -1
  313. package/dist/modes/provider-native-rendering.js +33 -0
  314. package/dist/modes/provider-native-rendering.js.map +1 -1
  315. package/dist/modes/rpc/connection-handler.d.ts.map +1 -1
  316. package/dist/modes/rpc/connection-handler.js +148 -5
  317. package/dist/modes/rpc/connection-handler.js.map +1 -1
  318. package/dist/modes/rpc/custom-capability.d.ts +1 -0
  319. package/dist/modes/rpc/custom-capability.d.ts.map +1 -1
  320. package/dist/modes/rpc/custom-capability.js +1 -0
  321. package/dist/modes/rpc/custom-capability.js.map +1 -1
  322. package/dist/modes/rpc/multi-session-host.d.ts.map +1 -1
  323. package/dist/modes/rpc/multi-session-host.js +4 -1
  324. package/dist/modes/rpc/multi-session-host.js.map +1 -1
  325. package/dist/modes/rpc/rpc-client.d.ts +5 -2
  326. package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  327. package/dist/modes/rpc/rpc-client.js +10 -1
  328. package/dist/modes/rpc/rpc-client.js.map +1 -1
  329. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  330. package/dist/modes/rpc/rpc-mode.js +2 -1
  331. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  332. package/dist/modes/rpc/rpc-types.d.ts +47 -0
  333. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  334. package/dist/modes/rpc/rpc-types.js.map +1 -1
  335. package/dist/modes/rpc/session-binding.d.ts +2 -1
  336. package/dist/modes/rpc/session-binding.d.ts.map +1 -1
  337. package/dist/modes/rpc/session-binding.js +3 -2
  338. package/dist/modes/rpc/session-binding.js.map +1 -1
  339. package/dist/modes/rpc/session-command-router.d.ts +2 -1
  340. package/dist/modes/rpc/session-command-router.d.ts.map +1 -1
  341. package/dist/modes/rpc/session-command-router.js +3 -2
  342. package/dist/modes/rpc/session-command-router.js.map +1 -1
  343. package/dist/nearest-parent-config.d.ts +6 -1
  344. package/dist/nearest-parent-config.d.ts.map +1 -1
  345. package/dist/nearest-parent-config.js +18 -2
  346. package/dist/nearest-parent-config.js.map +1 -1
  347. package/dist/package-manager-cli.d.ts.map +1 -1
  348. package/dist/package-manager-cli.js +13 -1
  349. package/dist/package-manager-cli.js.map +1 -1
  350. package/dist/rpc-entry.js +2 -0
  351. package/dist/rpc-entry.js.map +1 -1
  352. package/dist/self-update-bootstrap.d.ts.map +1 -1
  353. package/dist/self-update-bootstrap.js +6 -0
  354. package/dist/self-update-bootstrap.js.map +1 -1
  355. package/dist/senpi +3 -2
  356. package/dist/utils/pi-user-agent.d.ts +1 -1
  357. package/dist/utils/pi-user-agent.d.ts.map +1 -1
  358. package/dist/utils/pi-user-agent.js +4 -3
  359. package/dist/utils/pi-user-agent.js.map +1 -1
  360. package/dist/utils/tools-manager.d.ts.map +1 -1
  361. package/dist/utils/tools-manager.js +2 -1
  362. package/dist/utils/tools-manager.js.map +1 -1
  363. package/dist/utils/version-check.d.ts +3 -0
  364. package/dist/utils/version-check.d.ts.map +1 -1
  365. package/dist/utils/version-check.js +37 -6
  366. package/dist/utils/version-check.js.map +1 -1
  367. package/dist/valid-cwd.d.ts +2 -0
  368. package/dist/valid-cwd.d.ts.map +1 -0
  369. package/dist/valid-cwd.js +14 -0
  370. package/dist/valid-cwd.js.map +1 -0
  371. package/docs/environment-variables.md +8 -1
  372. package/docs/extensions.md +93 -13
  373. package/docs/mcp.md +2 -0
  374. package/docs/providers.md +2 -2
  375. package/docs/rpc.md +126 -0
  376. package/docs/skills.md +8 -0
  377. package/examples/extensions/searchable-tools.ts +49 -0
  378. package/node_modules/@code-yeongyu/senpi-codemode/CHANGELOG.md +101 -0
  379. package/node_modules/@code-yeongyu/senpi-codemode/package.json +4 -4
  380. package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/jl/kernel.ts +14 -1
  381. package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/rb/kernel.ts +14 -1
  382. package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/shared/runtime-asset.ts +31 -0
  383. package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.d.ts.map +1 -1
  384. package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.js +5 -1
  385. package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.js.map +1 -1
  386. package/node_modules/@earendil-works/pi-agent-core/dist/agent.d.ts +4 -1
  387. package/node_modules/@earendil-works/pi-agent-core/dist/agent.d.ts.map +1 -1
  388. package/node_modules/@earendil-works/pi-agent-core/dist/agent.js +2 -0
  389. package/node_modules/@earendil-works/pi-agent-core/dist/agent.js.map +1 -1
  390. package/node_modules/@earendil-works/pi-agent-core/dist/types.d.ts +9 -0
  391. package/node_modules/@earendil-works/pi-agent-core/dist/types.d.ts.map +1 -1
  392. package/node_modules/@earendil-works/pi-agent-core/dist/types.js.map +1 -1
  393. package/node_modules/@earendil-works/pi-agent-core/package.json +2 -2
  394. package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.js +2 -2
  395. package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.js.map +1 -1
  396. package/node_modules/@earendil-works/pi-ai/dist/api/openai-codex-responses.d.ts.map +1 -1
  397. package/node_modules/@earendil-works/pi-ai/dist/api/openai-codex-responses.js +4 -2
  398. package/node_modules/@earendil-works/pi-ai/dist/api/openai-codex-responses.js.map +1 -1
  399. package/node_modules/@earendil-works/pi-ai/dist/api/openai-completions.d.ts.map +1 -1
  400. package/node_modules/@earendil-works/pi-ai/dist/api/openai-completions.js +7 -3
  401. package/node_modules/@earendil-works/pi-ai/dist/api/openai-completions.js.map +1 -1
  402. package/node_modules/@earendil-works/pi-ai/dist/api/openai-images.d.ts +8 -0
  403. package/node_modules/@earendil-works/pi-ai/dist/api/openai-images.d.ts.map +1 -0
  404. package/node_modules/@earendil-works/pi-ai/dist/api/openai-images.js +222 -0
  405. package/node_modules/@earendil-works/pi-ai/dist/api/openai-images.js.map +1 -0
  406. package/node_modules/@earendil-works/pi-ai/dist/api/openai-images.lazy.d.ts +3 -0
  407. package/node_modules/@earendil-works/pi-ai/dist/api/openai-images.lazy.d.ts.map +1 -0
  408. package/node_modules/@earendil-works/pi-ai/dist/api/openai-images.lazy.js +10 -0
  409. package/node_modules/@earendil-works/pi-ai/dist/api/openai-images.lazy.js.map +1 -0
  410. package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses-shared.d.ts.map +1 -1
  411. package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses-shared.js +113 -4
  412. package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses-shared.js.map +1 -1
  413. package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses.d.ts.map +1 -1
  414. package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses.js +1 -0
  415. package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses.js.map +1 -1
  416. package/node_modules/@earendil-works/pi-ai/dist/api/transform-messages.d.ts +5 -0
  417. package/node_modules/@earendil-works/pi-ai/dist/api/transform-messages.d.ts.map +1 -1
  418. package/node_modules/@earendil-works/pi-ai/dist/api/transform-messages.js +2 -1
  419. package/node_modules/@earendil-works/pi-ai/dist/api/transform-messages.js.map +1 -1
  420. package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/openai-codex.d.ts.map +1 -1
  421. package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/openai-codex.js +2 -1
  422. package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/openai-codex.js.map +1 -1
  423. package/node_modules/@earendil-works/pi-ai/dist/auth/types.d.ts +10 -0
  424. package/node_modules/@earendil-works/pi-ai/dist/auth/types.d.ts.map +1 -1
  425. package/node_modules/@earendil-works/pi-ai/dist/auth/types.js.map +1 -1
  426. package/node_modules/@earendil-works/pi-ai/dist/image-models.generated.d.ts +47 -0
  427. package/node_modules/@earendil-works/pi-ai/dist/image-models.generated.d.ts.map +1 -1
  428. package/node_modules/@earendil-works/pi-ai/dist/image-models.generated.js +47 -0
  429. package/node_modules/@earendil-works/pi-ai/dist/image-models.generated.js.map +1 -1
  430. package/node_modules/@earendil-works/pi-ai/dist/index.d.ts +1 -0
  431. package/node_modules/@earendil-works/pi-ai/dist/index.d.ts.map +1 -1
  432. package/node_modules/@earendil-works/pi-ai/dist/index.js +1 -0
  433. package/node_modules/@earendil-works/pi-ai/dist/index.js.map +1 -1
  434. package/node_modules/@earendil-works/pi-ai/dist/models.d.ts.map +1 -1
  435. package/node_modules/@earendil-works/pi-ai/dist/models.js +36 -13
  436. package/node_modules/@earendil-works/pi-ai/dist/models.js.map +1 -1
  437. package/node_modules/@earendil-works/pi-ai/dist/openai-responses-compat.d.ts +2 -0
  438. package/node_modules/@earendil-works/pi-ai/dist/openai-responses-compat.d.ts.map +1 -1
  439. package/node_modules/@earendil-works/pi-ai/dist/openai-responses-compat.js.map +1 -1
  440. package/node_modules/@earendil-works/pi-ai/dist/providers/all.d.ts.map +1 -1
  441. package/node_modules/@earendil-works/pi-ai/dist/providers/all.js +2 -1
  442. package/node_modules/@earendil-works/pi-ai/dist/providers/all.js.map +1 -1
  443. package/node_modules/@earendil-works/pi-ai/dist/providers/data/.manifest.json +1 -1
  444. package/node_modules/@earendil-works/pi-ai/dist/providers/data/amazon-bedrock.json +1 -1
  445. package/node_modules/@earendil-works/pi-ai/dist/providers/data/cloudflare-workers-ai.json +1 -1
  446. package/node_modules/@earendil-works/pi-ai/dist/providers/data/google.json +1 -1
  447. package/node_modules/@earendil-works/pi-ai/dist/providers/data/nvidia.json +1 -1
  448. package/node_modules/@earendil-works/pi-ai/dist/providers/data/opencode.json +1 -1
  449. package/node_modules/@earendil-works/pi-ai/dist/providers/data/openrouter.json +1 -1
  450. package/node_modules/@earendil-works/pi-ai/dist/providers/data/vercel-ai-gateway.json +1 -1
  451. package/node_modules/@earendil-works/pi-ai/dist/providers/images/register-builtins.d.ts +1 -0
  452. package/node_modules/@earendil-works/pi-ai/dist/providers/images/register-builtins.d.ts.map +1 -1
  453. package/node_modules/@earendil-works/pi-ai/dist/providers/images/register-builtins.js +18 -0
  454. package/node_modules/@earendil-works/pi-ai/dist/providers/images/register-builtins.js.map +1 -1
  455. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-images.d.ts +3 -0
  456. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-images.d.ts.map +1 -0
  457. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-images.js +16 -0
  458. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-images.js.map +1 -0
  459. package/node_modules/@earendil-works/pi-ai/dist/types.d.ts +1 -1
  460. package/node_modules/@earendil-works/pi-ai/dist/types.d.ts.map +1 -1
  461. package/node_modules/@earendil-works/pi-ai/dist/types.js.map +1 -1
  462. package/node_modules/@earendil-works/pi-ai/dist/utils/prompt-cache-ttl.js +1 -1
  463. package/node_modules/@earendil-works/pi-ai/dist/utils/prompt-cache-ttl.js.map +1 -1
  464. package/node_modules/@earendil-works/pi-ai/dist/utils/retry.d.ts.map +1 -1
  465. package/node_modules/@earendil-works/pi-ai/dist/utils/retry.js +7 -0
  466. package/node_modules/@earendil-works/pi-ai/dist/utils/retry.js.map +1 -1
  467. package/node_modules/@earendil-works/pi-ai/dist/wire-identity.d.ts +14 -0
  468. package/node_modules/@earendil-works/pi-ai/dist/wire-identity.d.ts.map +1 -0
  469. package/node_modules/@earendil-works/pi-ai/dist/wire-identity.js +24 -0
  470. package/node_modules/@earendil-works/pi-ai/dist/wire-identity.js.map +1 -0
  471. package/node_modules/@earendil-works/pi-ai/package.json +1 -1
  472. package/node_modules/@earendil-works/pi-pty/dist/pipe-fallback.d.ts.map +1 -1
  473. package/node_modules/@earendil-works/pi-pty/dist/pipe-fallback.js +11 -3
  474. package/node_modules/@earendil-works/pi-pty/dist/pipe-fallback.js.map +1 -1
  475. package/node_modules/@earendil-works/pi-pty/package.json +1 -1
  476. package/node_modules/@earendil-works/pi-tui/package.json +1 -1
  477. package/package.json +10 -9
  478. package/dist/core/extensions/builtin/mcp/expose/bm25.d.ts +0 -30
  479. package/dist/core/extensions/builtin/mcp/expose/bm25.d.ts.map +0 -1
  480. package/dist/core/extensions/builtin/mcp/expose/bm25.js.map +0 -1
  481. package/dist/core/extensions/builtin/mcp/expose/lazy-activate.d.ts +0 -15
  482. package/dist/core/extensions/builtin/mcp/expose/lazy-activate.d.ts.map +0 -1
  483. package/dist/core/extensions/builtin/mcp/expose/lazy-activate.js +0 -33
  484. package/dist/core/extensions/builtin/mcp/expose/lazy-activate.js.map +0 -1
  485. package/dist/core/extensions/builtin/mcp/expose/tool-search.d.ts +0 -43
  486. package/dist/core/extensions/builtin/mcp/expose/tool-search.d.ts.map +0 -1
  487. package/dist/core/extensions/builtin/mcp/expose/tool-search.js +0 -125
  488. package/dist/core/extensions/builtin/mcp/expose/tool-search.js.map +0 -1
package/CHANGELOG.md CHANGED
@@ -2,6 +2,8 @@
2
2
 
3
3
  ## [Unreleased]
4
4
 
5
+ ### Fixed
6
+
5
7
  ### New Features
6
8
 
7
9
  ### Breaking Changes
@@ -10,8 +12,233 @@
10
12
 
11
13
  ### Changed
12
14
 
15
+ ### Removed
16
+
17
+ ## [2026.8.12-3] - 2026-08-12
18
+
13
19
  ### Fixed
14
20
 
21
+ ### New Features
22
+
23
+ ### Breaking Changes
24
+
25
+ ### Added
26
+
27
+ ### Changed
28
+
29
+ ### Removed
30
+
31
+ ## [2026.8.12-2] - 2026-08-12
32
+
33
+ ### Fixed
34
+
35
+ - Claude SDK OAuth accounts saved by senpi's own login are now injected into the
36
+ spawned Claude Code subprocess by default. The default `tokenInjection` lane
37
+ was `ambient` (a review-time hold from `606aa052b`), so stored accounts were
38
+ ignored unless explicitly configured, causing every query to fail with
39
+ "Failed to authenticate: OAuth session expired and could not be refreshed"
40
+ on machines where `claude auth status` is logged out
41
+ ([#828](https://github.com/code-yeongyu/senpi/pull/828),
42
+ oh-my-openagent#6784).
43
+
44
+ - Bun global installs no longer let a sibling `signal-exit@4` shadow the
45
+ callable `signal-exit@3` required by `proper-lockfile`, preventing
46
+ `TypeError: onExit is not a function` during Senpi and `omo` startup
47
+ ([#829](https://github.com/code-yeongyu/senpi/pull/829)).
48
+
49
+ ### New Features
50
+
51
+ ### Breaking Changes
52
+
53
+ ### Added
54
+
55
+ ### Changed
56
+
57
+ ### Removed
58
+
59
+ ## [2026.8.12] - 2026-08-12
60
+
61
+ ### Fixed
62
+
63
+ - External-editor tests now recover from transient process-launch pressure
64
+ while preserving the distinction between an editor that failed to launch
65
+ and one that launched and exited unsuccessfully
66
+ ([#827](https://github.com/code-yeongyu/senpi/pull/827)).
67
+
68
+ - `/btw` side queries now budget captured session context against the selected model's window instead of replaying the
69
+ full snapshot, so large sessions no longer fail with a context-window overflow ([#826](https://github.com/code-yeongyu/senpi/pull/826)).
70
+
71
+ ### New Features
72
+
73
+ ### Breaking Changes
74
+
75
+ ### Added
76
+
77
+ ### Changed
78
+
79
+ ### Removed
80
+
81
+ ## [2026.8.11-6] - 2026-08-11
82
+
83
+ ### Fixed
84
+
85
+ ### New Features
86
+
87
+ ### Breaking Changes
88
+
89
+ ### Added
90
+
91
+ - RPC clients can invoke generation-owned extension request handlers directly through
92
+ `pi.rpc.handle()` and `RpcClient.requestExtension()` without turning controls into
93
+ model prompts; request routing rejects unknown, duplicate, cross-session, stale,
94
+ and stale-in-flight generations ([#822](https://github.com/code-yeongyu/senpi/pull/822)).
95
+
96
+ ### Changed
97
+
98
+ ### Removed
99
+
100
+ ## [2026.8.11-5] - 2026-08-11
101
+
102
+ ### Fixed
103
+
104
+ ### New Features
105
+
106
+ ### Breaking Changes
107
+
108
+ ### Added
109
+
110
+ ### Changed
111
+
112
+ - Changed direct Anthropic API prompt caching to use the provider's 5-minute default unless long retention is explicitly selected ([#820](https://github.com/code-yeongyu/senpi/pull/820)).
113
+
114
+ ### Removed
115
+
116
+ ## [2026.8.11-4] - 2026-08-11
117
+
118
+ ### Fixed
119
+
120
+ - Standalone Bun release archives now embed the default-on `senpi-codemode`
121
+ factory and ship its worker/prelude package assets beside the executable, so
122
+ launches outside the repository no longer depend on `$bunfs` package lookup,
123
+ warn that `<builtin:codemode>` is unavailable, or silently lose `eval`.
124
+ The relocation smoke now verifies codemode through RPC instead of checking
125
+ only `--help` and `--version`; clean package-level binary builds also compile
126
+ the PTY workspace before coding-agent instead of depending on stale
127
+ declarations, and embed `css-tree` so relocated binaries do not fail while
128
+ resolving that package from `$bunfs`
129
+ ([#818](https://github.com/code-yeongyu/senpi/pull/818)).
130
+
131
+ ### New Features
132
+
133
+ ### Breaking Changes
134
+
135
+ ### Added
136
+
137
+ ### Changed
138
+
139
+ ### Removed
140
+
141
+ ## [2026.8.11-3] - 2026-08-11
142
+
143
+ ### Fixed
144
+
145
+ - Terminal monitor wake budgets now treat widely spaced progress as separate bursts instead of eventually pausing,
146
+ while a true budget pause immediately steers the main session even when ordinary notifications wait for the next
147
+ turn ([#815](https://github.com/code-yeongyu/senpi/pull/815)).
148
+ - Model switches no longer fail before generation when persisted tool-call IDs contain provider-specific characters
149
+ such as the colon in Kimi's `eval:18`; replay now preserves call/result pairing while satisfying strict
150
+ Anthropic-backed gateway constraints ([#810](https://github.com/code-yeongyu/senpi/pull/810)).
151
+ - Gateway/provider failures reported as `The model request was rejected. Check the request and try again.` now retry
152
+ the current model according to `settings.retry` before the configured fallback chain is used
153
+ ([#806](https://github.com/code-yeongyu/senpi/pull/806)).
154
+ - `/goal resume` can explicitly reactivate a completed goal and queue its continuation, while completed goals remain
155
+ excluded from automatic restart-resume prompts ([#802](https://github.com/code-yeongyu/senpi/pull/802)).
156
+ - A launch from a deleted working directory (for example a removed worktree) no longer crashes during
157
+ startup with `uv_cwd`; the CLI recovers into the home directory before any dependency evaluates
158
+ `process.cwd()` ([#799](https://github.com/code-yeongyu/senpi/pull/799)).
159
+ - `claude-sdk-oauth` is now skipped as an unauthenticated fallback candidate on a managed lane
160
+ (`oauth-slots`/`config-dir`) when no account is logged in, instead of always counting as configured because its
161
+ stored credential is a zero-account sentinel. The ambient lane is unchanged and still defers to the spawned
162
+ Claude Code engine ([#804](https://github.com/code-yeongyu/senpi/pull/804)).
163
+ - Claude SDK OAuth models are selected as fallback candidates only when a stored account, environment token, or
164
+ authenticated ambient Claude CLI is usable. Empty sentinel credentials and logged-out local CLIs are skipped, and
165
+ fallback responses carrying errors such as `Not logged in` cannot emit an immediate or delayed green
166
+ `Fallback model responded` notice ([#803](https://github.com/code-yeongyu/senpi/pull/803)).
167
+ - Route Anthropic provider-native refusal fallbacks through the configured Senpi chain after an active-turn model
168
+ change, instead of persisting the server-selected substitute because the run retained the previous model's policy
169
+ ([#796](https://github.com/code-yeongyu/senpi/pull/796)).
170
+
171
+ ### New Features
172
+
173
+ - Multi-session RPC clients can read loaded extensions and live MCP server inventory with
174
+ `get_loaded_surfaces`, and receive `loaded_surfaces_changed` invalidations when skills, extensions, or MCP
175
+ inventory changes ([#805](https://github.com/code-yeongyu/senpi/pull/805)).
176
+
177
+ ### Breaking Changes
178
+
179
+ ### Added
180
+
181
+ - Added the `openai-image-gen` native builtin: when the active model uses the OpenAI Responses API on
182
+ `api.openai.com`, senpi injects the `image_generation` server tool and strips the client-side
183
+ `generate_image` function tool so exactly one image surface is offered per request. Mid-session model
184
+ switches re-evaluate the gate. Azure Responses endpoints default to the client tool unless
185
+ `compat.supportsImageGeneration` opts in
186
+ ([#814](https://github.com/code-yeongyu/senpi/pull/814)).
187
+ - Native image results are externalized before persistence: a `message_end` handler decodes each
188
+ completed `image_generation_call` block, writes the image to `generated-images/`, and replaces the
189
+ provider-native block with a text path reference. Base64 payloads never reach the session file
190
+ ([#814](https://github.com/code-yeongyu/senpi/pull/814)).
191
+ - Added a credential-gated `generate_image` tool: when an OpenAI-compatible credential exists (a stored OpenAI
192
+ key, `OPENAI_API_KEY`, or a configured OpenAI-compatible gateway provider), the agent can generate images with
193
+ `gpt-image-2` saved as files (never overwriting existing ones); without credentials the tool returns structured
194
+ setup guidance instead of failing ([#813](https://github.com/code-yeongyu/senpi/pull/813)).
195
+ - Added a conditionally contributed `gpt-image-gen` skill with a detailed prompt-crafting guide that is listed
196
+ only while image-generation credentials exist ([#813](https://github.com/code-yeongyu/senpi/pull/813)).
197
+ - **Extension Tool Search**: Extension tools can opt into a shared searchable catalog by setting
198
+ `exposure: "search"` on `pi.registerTool()`. Searchable tools stay inactive and cost zero prompt tokens until the
199
+ model finds them with the shared `tool_search` tool, which promotes matches into the active set for the next model
200
+ request ([#811](https://github.com/code-yeongyu/senpi/pull/811)).
201
+
202
+ ### Changed
203
+
204
+ ### Removed
205
+
206
+ ## [2026.8.11-2] - 2026-08-10
207
+
208
+ ### New Features
209
+
210
+ ### Breaking Changes
211
+
212
+ ### Added
213
+
214
+ - Distributions repackaging senpi can set their own product identity through a `SENPI_BRAND` profile: name, display
215
+ version, config directory (optionally flat), environment prefix, wire identity and update channel. The profile is
216
+ consumed and scrubbed at startup, so nested senpi processes keep the engine identity. A standalone install is
217
+ unchanged ([#783](https://github.com/code-yeongyu/senpi/pull/783)).
218
+ - Product settings are read across the brand prefix and the legacy `SENPI_`/`PI_` prefixes, so existing environments
219
+ keep working after a rebrand ([#783](https://github.com/code-yeongyu/senpi/pull/783)).
220
+ - A branded install checks its own release channel for updates, and the update notice, changelog link and self-update
221
+ paths point at the distribution's own command instead of `senpi update`
222
+ ([#783](https://github.com/code-yeongyu/senpi/pull/783)).
223
+
224
+ ### Changed
225
+
226
+ ### Fixed
227
+
228
+ - Windows pipe-fallback shutdown no longer crashes with an uncaught `spawn taskkill ENOENT` when the helper cannot
229
+ resolve. Senpi now invokes `taskkill.exe` explicitly and falls back to direct child termination if helper startup
230
+ fails ([#792](https://github.com/code-yeongyu/senpi/pull/792)).
231
+ - A brand profile carrying an unsafe `configDir` (a path separator, `.` or `..`) is rejected instead of redirecting
232
+ agent state and its migration outside the intended directory
233
+ ([#787](https://github.com/code-yeongyu/senpi/pull/787)).
234
+ - A branded install without an update channel no longer falls back to checking the engine's own releases, which it
235
+ cannot install ([#787](https://github.com/code-yeongyu/senpi/pull/787)).
236
+ - Prevented an asynchronous goal continuation from restoring a goal after `thread/goal/clear` or recording delivery
237
+ against a replacement goal ([#788](https://github.com/code-yeongyu/senpi/pull/788)).
238
+ - Prevented Claude Agent SDK OAuth sessions from scheduling `assistant_rewritten` forks when only host-side thinking
239
+ timing annotations changed, preserving resident-session and prompt-cache continuity for reasoning-heavy turns
240
+ ([#751](https://github.com/code-yeongyu/senpi/pull/751) by [@goldtg](https://github.com/goldtg)).
241
+
15
242
  ### Removed
16
243
 
17
244
  ## [2026.8.11] - 2026-08-10
@@ -0,0 +1,28 @@
1
+ /**
2
+ * First-run copy-forward for a rebranded install.
3
+ *
4
+ * A machine that already ran the engine keeps its state in the engine's own directory. A
5
+ * branded install reads a different location, so the existing state is COPIED once - never
6
+ * moved - because the same machine may keep running the engine standalone, and a move would
7
+ * silently empty that install.
8
+ */
9
+ /** Written last, so an interrupted copy simply runs again next start. */
10
+ export declare const MIGRATION_MARKER = ".migrated-from-senpi";
11
+ export interface BrandDirMigrationResult {
12
+ readonly migrated: boolean;
13
+ readonly copied: readonly string[];
14
+ readonly from: string;
15
+ readonly to: string;
16
+ }
17
+ /**
18
+ * Copies engine state into the branded directory. Idempotent: entries that already exist in
19
+ * the destination are left untouched, so a re-run after a partial copy completes it instead of
20
+ * overwriting newer state.
21
+ */
22
+ export declare function migrateEngineStateToBrandDir(legacyAgentDir: string, brandDir: string): BrandDirMigrationResult;
23
+ /**
24
+ * Runs the copy-forward for the active brand, announcing it once so the user knows the two
25
+ * installs now hold independent state.
26
+ */
27
+ export declare function migrateEngineStateForBrand(homeDir?: string): BrandDirMigrationResult | undefined;
28
+ //# sourceMappingURL=brand-dir-migration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brand-dir-migration.d.ts","sourceRoot":"","sources":["../src/brand-dir-migration.ts"],"names":[],"mappings":"AAMA;;;;;;;GAOG;AAEH,yEAAyE;AACzE,eAAO,MAAM,gBAAgB,yBAAyB,CAAC;AASvD,MAAM,WAAW,uBAAuB;IACvC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;CACpB;AAED;;;;GAIG;AACH,wBAAgB,4BAA4B,CAAC,cAAc,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,uBAAuB,CAgC9G;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,GAAE,MAAkB,GAAG,uBAAuB,GAAG,SAAS,CAS3G"}
@@ -0,0 +1,77 @@
1
+ import { cpSync, existsSync, mkdirSync, readdirSync, writeFileSync } from "node:fs";
2
+ import { homedir } from "node:os";
3
+ import { join } from "node:path";
4
+ import chalk from "chalk";
5
+ import { CONFIG_DIR_NAME, CONFIG_FLAT_LAYOUT, FLAT_LAYOUT_SENTINEL } from "./config.js";
6
+ /**
7
+ * First-run copy-forward for a rebranded install.
8
+ *
9
+ * A machine that already ran the engine keeps its state in the engine's own directory. A
10
+ * branded install reads a different location, so the existing state is COPIED once - never
11
+ * moved - because the same machine may keep running the engine standalone, and a move would
12
+ * silently empty that install.
13
+ */
14
+ /** Written last, so an interrupted copy simply runs again next start. */
15
+ export const MIGRATION_MARKER = ".migrated-from-senpi";
16
+ /** Regenerable state: caches, logs and build worktrees are rebuilt on demand. */
17
+ const SKIPPED_ENTRIES = new Set(["cache", "logs", "omo-local-update"]);
18
+ function isSkipped(entry) {
19
+ return SKIPPED_ENTRIES.has(entry) || entry.endsWith(".log");
20
+ }
21
+ /**
22
+ * Copies engine state into the branded directory. Idempotent: entries that already exist in
23
+ * the destination are left untouched, so a re-run after a partial copy completes it instead of
24
+ * overwriting newer state.
25
+ */
26
+ export function migrateEngineStateToBrandDir(legacyAgentDir, brandDir) {
27
+ const result = { migrated: false, copied: [], from: legacyAgentDir, to: brandDir };
28
+ if (!existsSync(legacyAgentDir))
29
+ return result;
30
+ if (existsSync(join(brandDir, MIGRATION_MARKER)))
31
+ return result;
32
+ if (existsSync(join(brandDir, FLAT_LAYOUT_SENTINEL)))
33
+ return result;
34
+ let entries;
35
+ try {
36
+ entries = readdirSync(legacyAgentDir);
37
+ }
38
+ catch {
39
+ return result;
40
+ }
41
+ mkdirSync(brandDir, { recursive: true });
42
+ const copied = [];
43
+ for (const entry of entries) {
44
+ if (isSkipped(entry))
45
+ continue;
46
+ const target = join(brandDir, entry);
47
+ if (existsSync(target))
48
+ continue;
49
+ try {
50
+ cpSync(join(legacyAgentDir, entry), target, { recursive: true, errorOnExist: false });
51
+ copied.push(entry);
52
+ }
53
+ catch { }
54
+ }
55
+ try {
56
+ writeFileSync(join(brandDir, MIGRATION_MARKER), `${legacyAgentDir}\n`);
57
+ }
58
+ catch {
59
+ return { ...result, copied };
60
+ }
61
+ return { migrated: true, copied, from: legacyAgentDir, to: brandDir };
62
+ }
63
+ /**
64
+ * Runs the copy-forward for the active brand, announcing it once so the user knows the two
65
+ * installs now hold independent state.
66
+ */
67
+ export function migrateEngineStateForBrand(homeDir = homedir()) {
68
+ if (!CONFIG_FLAT_LAYOUT)
69
+ return undefined;
70
+ const result = migrateEngineStateToBrandDir(join(homeDir, ".senpi", "agent"), join(homeDir, CONFIG_DIR_NAME));
71
+ if (result.migrated && result.copied.length > 0) {
72
+ console.log(chalk.green(`Copied existing settings from ${result.from} to ${result.to}`));
73
+ console.log(chalk.dim("The original directory is untouched; the two installs keep separate state from now on."));
74
+ }
75
+ return result;
76
+ }
77
+ //# sourceMappingURL=brand-dir-migration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brand-dir-migration.js","sourceRoot":"","sources":["../src/brand-dir-migration.ts"],"names":[],"mappings":"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","sourcesContent":["import { cpSync, existsSync, mkdirSync, readdirSync, writeFileSync } from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { join } from \"node:path\";\nimport chalk from \"chalk\";\nimport { CONFIG_DIR_NAME, CONFIG_FLAT_LAYOUT, FLAT_LAYOUT_SENTINEL } from \"./config.ts\";\n\n/**\n * First-run copy-forward for a rebranded install.\n *\n * A machine that already ran the engine keeps its state in the engine's own directory. A\n * branded install reads a different location, so the existing state is COPIED once - never\n * moved - because the same machine may keep running the engine standalone, and a move would\n * silently empty that install.\n */\n\n/** Written last, so an interrupted copy simply runs again next start. */\nexport const MIGRATION_MARKER = \".migrated-from-senpi\";\n\n/** Regenerable state: caches, logs and build worktrees are rebuilt on demand. */\nconst SKIPPED_ENTRIES = new Set([\"cache\", \"logs\", \"omo-local-update\"]);\n\nfunction isSkipped(entry: string): boolean {\n\treturn SKIPPED_ENTRIES.has(entry) || entry.endsWith(\".log\");\n}\n\nexport interface BrandDirMigrationResult {\n\treadonly migrated: boolean;\n\treadonly copied: readonly string[];\n\treadonly from: string;\n\treadonly to: string;\n}\n\n/**\n * Copies engine state into the branded directory. Idempotent: entries that already exist in\n * the destination are left untouched, so a re-run after a partial copy completes it instead of\n * overwriting newer state.\n */\nexport function migrateEngineStateToBrandDir(legacyAgentDir: string, brandDir: string): BrandDirMigrationResult {\n\tconst result = { migrated: false, copied: [] as string[], from: legacyAgentDir, to: brandDir };\n\tif (!existsSync(legacyAgentDir)) return result;\n\tif (existsSync(join(brandDir, MIGRATION_MARKER))) return result;\n\tif (existsSync(join(brandDir, FLAT_LAYOUT_SENTINEL))) return result;\n\n\tlet entries: string[];\n\ttry {\n\t\tentries = readdirSync(legacyAgentDir);\n\t} catch {\n\t\treturn result;\n\t}\n\n\tmkdirSync(brandDir, { recursive: true });\n\tconst copied: string[] = [];\n\tfor (const entry of entries) {\n\t\tif (isSkipped(entry)) continue;\n\t\tconst target = join(brandDir, entry);\n\t\tif (existsSync(target)) continue;\n\t\ttry {\n\t\t\tcpSync(join(legacyAgentDir, entry), target, { recursive: true, errorOnExist: false });\n\t\t\tcopied.push(entry);\n\t\t} catch {}\n\t}\n\n\ttry {\n\t\twriteFileSync(join(brandDir, MIGRATION_MARKER), `${legacyAgentDir}\\n`);\n\t} catch {\n\t\treturn { ...result, copied };\n\t}\n\n\treturn { migrated: true, copied, from: legacyAgentDir, to: brandDir };\n}\n\n/**\n * Runs the copy-forward for the active brand, announcing it once so the user knows the two\n * installs now hold independent state.\n */\nexport function migrateEngineStateForBrand(homeDir: string = homedir()): BrandDirMigrationResult | undefined {\n\tif (!CONFIG_FLAT_LAYOUT) return undefined;\n\n\tconst result = migrateEngineStateToBrandDir(join(homeDir, \".senpi\", \"agent\"), join(homeDir, CONFIG_DIR_NAME));\n\tif (result.migrated && result.copied.length > 0) {\n\t\tconsole.log(chalk.green(`Copied existing settings from ${result.from} to ${result.to}`));\n\t\tconsole.log(chalk.dim(\"The original directory is untouched; the two installs keep separate state from now on.\"));\n\t}\n\treturn result;\n}\n"]}
@@ -1,11 +1,3 @@
1
- /**
2
- * Feature gate for the grok-neo interactive chrome.
3
- *
4
- * The grok chrome is experimental, so its `--grok-neo` handoff stays behind an
5
- * opt-in env gate: OFF by default, the flag is absent from help and parses as
6
- * an unknown extension flag, exactly as if the feature did not exist. Set
7
- * `SENPI_ENABLE_GROK_NEO=1` (or `true`/`yes`) to enable it.
8
- */
9
1
  export declare const ENV_ENABLE_GROK_NEO = "SENPI_ENABLE_GROK_NEO";
10
2
  /** Whether the experimental grok-neo CLI flag is exposed for this process. */
11
3
  export declare function isGrokNeoEnabled(env?: NodeJS.ProcessEnv): boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"grok-neo-gate.d.ts","sourceRoot":"","sources":["../../src/cli/grok-neo-gate.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,eAAO,MAAM,mBAAmB,0BAA0B,CAAC;AAE3D,8EAA8E;AAC9E,wBAAgB,gBAAgB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,OAAO,CAK9E"}
1
+ {"version":3,"file":"grok-neo-gate.d.ts","sourceRoot":"","sources":["../../src/cli/grok-neo-gate.ts"],"names":[],"mappings":"AAWA,eAAO,MAAM,mBAAmB,0BAA0B,CAAC;AAE3D,8EAA8E;AAC9E,wBAAgB,gBAAgB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,OAAO,CAK9E"}
@@ -4,12 +4,14 @@
4
4
  * The grok chrome is experimental, so its `--grok-neo` handoff stays behind an
5
5
  * opt-in env gate: OFF by default, the flag is absent from help and parses as
6
6
  * an unknown extension flag, exactly as if the feature did not exist. Set
7
- * `SENPI_ENABLE_GROK_NEO=1` (or `true`/`yes`) to enable it.
7
+ * `<PREFIX>_ENABLE_GROK_NEO=1` (or `true`/`yes`) to enable it, where the prefix is the
8
+ * running product's own prefix; the legacy `SENPI_`/`PI_` names keep working.
8
9
  */
10
+ import { envValue } from "../core/brand.js";
9
11
  export const ENV_ENABLE_GROK_NEO = "SENPI_ENABLE_GROK_NEO";
10
12
  /** Whether the experimental grok-neo CLI flag is exposed for this process. */
11
13
  export function isGrokNeoEnabled(env = process.env) {
12
- const value = env[ENV_ENABLE_GROK_NEO];
14
+ const value = envValue("ENABLE_GROK_NEO", env);
13
15
  if (value === undefined)
14
16
  return false;
15
17
  const normalized = value.trim().toLowerCase();
@@ -1 +1 @@
1
- {"version":3,"file":"grok-neo-gate.js","sourceRoot":"","sources":["../../src/cli/grok-neo-gate.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,uBAAuB,CAAC;AAE3D,8EAA8E;AAC9E,MAAM,UAAU,gBAAgB,CAAC,GAAG,GAAsB,OAAO,CAAC,GAAG;IACpE,MAAM,KAAK,GAAG,GAAG,CAAC,mBAAmB,CAAC,CAAC;IACvC,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IACtC,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC9C,OAAO,UAAU,KAAK,GAAG,IAAI,UAAU,KAAK,MAAM,IAAI,UAAU,KAAK,KAAK,CAAC;AAC5E,CAAC","sourcesContent":["/**\n * Feature gate for the grok-neo interactive chrome.\n *\n * The grok chrome is experimental, so its `--grok-neo` handoff stays behind an\n * opt-in env gate: OFF by default, the flag is absent from help and parses as\n * an unknown extension flag, exactly as if the feature did not exist. Set\n * `SENPI_ENABLE_GROK_NEO=1` (or `true`/`yes`) to enable it.\n */\nexport const ENV_ENABLE_GROK_NEO = \"SENPI_ENABLE_GROK_NEO\";\n\n/** Whether the experimental grok-neo CLI flag is exposed for this process. */\nexport function isGrokNeoEnabled(env: NodeJS.ProcessEnv = process.env): boolean {\n\tconst value = env[ENV_ENABLE_GROK_NEO];\n\tif (value === undefined) return false;\n\tconst normalized = value.trim().toLowerCase();\n\treturn normalized === \"1\" || normalized === \"true\" || normalized === \"yes\";\n}\n"]}
1
+ {"version":3,"file":"grok-neo-gate.js","sourceRoot":"","sources":["../../src/cli/grok-neo-gate.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,MAAM,CAAC,MAAM,mBAAmB,GAAG,uBAAuB,CAAC;AAE3D,8EAA8E;AAC9E,MAAM,UAAU,gBAAgB,CAAC,GAAG,GAAsB,OAAO,CAAC,GAAG;IACpE,MAAM,KAAK,GAAG,QAAQ,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC;IAC/C,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IACtC,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC9C,OAAO,UAAU,KAAK,GAAG,IAAI,UAAU,KAAK,MAAM,IAAI,UAAU,KAAK,KAAK,CAAC;AAC5E,CAAC","sourcesContent":["/**\n * Feature gate for the grok-neo interactive chrome.\n *\n * The grok chrome is experimental, so its `--grok-neo` handoff stays behind an\n * opt-in env gate: OFF by default, the flag is absent from help and parses as\n * an unknown extension flag, exactly as if the feature did not exist. Set\n * `<PREFIX>_ENABLE_GROK_NEO=1` (or `true`/`yes`) to enable it, where the prefix is the\n * running product's own prefix; the legacy `SENPI_`/`PI_` names keep working.\n */\nimport { envValue } from \"../core/brand.ts\";\n\nexport const ENV_ENABLE_GROK_NEO = \"SENPI_ENABLE_GROK_NEO\";\n\n/** Whether the experimental grok-neo CLI flag is exposed for this process. */\nexport function isGrokNeoEnabled(env: NodeJS.ProcessEnv = process.env): boolean {\n\tconst value = envValue(\"ENABLE_GROK_NEO\", env);\n\tif (value === undefined) return false;\n\tconst normalized = value.trim().toLowerCase();\n\treturn normalized === \"1\" || normalized === \"true\" || normalized === \"yes\";\n}\n"]}
@@ -1,3 +1,3 @@
1
1
  #!/usr/bin/env node
2
- export {};
2
+ import "./valid-cwd.ts";
3
3
  //# sourceMappingURL=cli-main.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"cli-main.d.ts","sourceRoot":"","sources":["../src/cli-main.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"cli-main.d.ts","sourceRoot":"","sources":["../src/cli-main.ts"],"names":[],"mappings":";AACA,OAAO,gBAAgB,CAAC"}
package/dist/cli-main.js CHANGED
@@ -1,5 +1,7 @@
1
1
  #!/usr/bin/env node
2
+ import "./valid-cwd.js";
2
3
  import { APP_NAME } from "./config.js";
4
+ import { scrubBrandFromEnvironment } from "./core/brand.js";
3
5
  import { configureHttpDispatcher } from "./core/http-dispatcher.js";
4
6
  import { installEarlyInspectorVmImportRecovery } from "./inspector-policy.js";
5
7
  import { main } from "./main.js";
@@ -7,6 +9,8 @@ import { main } from "./main.js";
7
9
  // import rejection can fire before interactive mode registers its own crash handler.
8
10
  installEarlyInspectorVmImportRecovery();
9
11
  process.title = APP_NAME;
12
+ // The brand has been resolved for this process; nested engine runs must not inherit it.
13
+ scrubBrandFromEnvironment();
10
14
  process.env.PI_CODING_AGENT = "true";
11
15
  process.emitWarning = (() => { });
12
16
  configureHttpDispatcher();
@@ -1 +1 @@
1
- {"version":3,"file":"cli-main.js","sourceRoot":"","sources":["../src/cli-main.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,qCAAqC,EAAE,MAAM,uBAAuB,CAAC;AAC9E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,yFAAyF;AACzF,qFAAqF;AACrF,qCAAqC,EAAE,CAAC;AAExC,OAAO,CAAC,KAAK,GAAG,QAAQ,CAAC;AACzB,OAAO,CAAC,GAAG,CAAC,eAAe,GAAG,MAAM,CAAC;AACrC,OAAO,CAAC,WAAW,GAAG,CAAC,GAAG,EAAE,GAAE,CAAC,CAA+B,CAAC;AAE/D,uBAAuB,EAAE,CAAC;AAE1B,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC","sourcesContent":["#!/usr/bin/env node\nimport { APP_NAME } from \"./config.ts\";\nimport { configureHttpDispatcher } from \"./core/http-dispatcher.ts\";\nimport { installEarlyInspectorVmImportRecovery } from \"./inspector-policy.ts\";\nimport { main } from \"./main.ts\";\n\n// Must precede the asynchronous bootstrap: with --inspect-brk, the recoverable Inspector\n// import rejection can fire before interactive mode registers its own crash handler.\ninstallEarlyInspectorVmImportRecovery();\n\nprocess.title = APP_NAME;\nprocess.env.PI_CODING_AGENT = \"true\";\nprocess.emitWarning = (() => {}) as typeof process.emitWarning;\n\nconfigureHttpDispatcher();\n\nawait main(process.argv.slice(2));\n"]}
1
+ {"version":3,"file":"cli-main.js","sourceRoot":"","sources":["../src/cli-main.ts"],"names":[],"mappings":";AACA,OAAO,gBAAgB,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,qCAAqC,EAAE,MAAM,uBAAuB,CAAC;AAC9E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,yFAAyF;AACzF,qFAAqF;AACrF,qCAAqC,EAAE,CAAC;AAExC,OAAO,CAAC,KAAK,GAAG,QAAQ,CAAC;AACzB,wFAAwF;AACxF,yBAAyB,EAAE,CAAC;AAC5B,OAAO,CAAC,GAAG,CAAC,eAAe,GAAG,MAAM,CAAC;AACrC,OAAO,CAAC,WAAW,GAAG,CAAC,GAAG,EAAE,GAAE,CAAC,CAA+B,CAAC;AAE/D,uBAAuB,EAAE,CAAC;AAE1B,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC","sourcesContent":["#!/usr/bin/env node\nimport \"./valid-cwd.ts\";\nimport { APP_NAME } from \"./config.ts\";\nimport { scrubBrandFromEnvironment } from \"./core/brand.ts\";\nimport { configureHttpDispatcher } from \"./core/http-dispatcher.ts\";\nimport { installEarlyInspectorVmImportRecovery } from \"./inspector-policy.ts\";\nimport { main } from \"./main.ts\";\n\n// Must precede the asynchronous bootstrap: with --inspect-brk, the recoverable Inspector\n// import rejection can fire before interactive mode registers its own crash handler.\ninstallEarlyInspectorVmImportRecovery();\n\nprocess.title = APP_NAME;\n// The brand has been resolved for this process; nested engine runs must not inherit it.\nscrubBrandFromEnvironment();\nprocess.env.PI_CODING_AGENT = \"true\";\nprocess.emitWarning = (() => {}) as typeof process.emitWarning;\n\nconfigureHttpDispatcher();\n\nawait main(process.argv.slice(2));\n"]}
package/dist/cli.d.ts CHANGED
@@ -1,3 +1,3 @@
1
1
  #!/usr/bin/env node
2
- export {};
2
+ import "./valid-cwd.ts";
3
3
  //# sourceMappingURL=cli.d.ts.map
package/dist/cli.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,gBAAgB,CAAC"}
package/dist/cli.js CHANGED
@@ -1,9 +1,10 @@
1
1
  #!/usr/bin/env node
2
+ import "./valid-cwd.js";
2
3
  import { spawn } from "node:child_process";
3
4
  import { existsSync } from "node:fs";
4
5
  import { join } from "node:path";
5
6
  import { fileURLToPath } from "node:url";
6
- import { APP_NAME, getPackageDir, VERSION } from "./config.js";
7
+ import { APP_NAME, DISPLAY_VERSION, getPackageDir } from "./config.js";
7
8
  import { releaseInheritedInspectorForChild } from "./inspector-policy.js";
8
9
  import { handleBootstrapSelfUpdate } from "./self-update-bootstrap.js";
9
10
  process.title = APP_NAME;
@@ -50,7 +51,7 @@ async function runFullCli() {
50
51
  });
51
52
  }
52
53
  if (isRootCommand(args) && (args.includes("--version") || args.includes("-v"))) {
53
- console.log(VERSION);
54
+ console.log(DISPLAY_VERSION);
54
55
  process.exit();
55
56
  }
56
57
  if (isMissingBundledWorkspaceDependencies(getPackageDir())) {
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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","sourcesContent":["#!/usr/bin/env node\nimport { spawn } from \"node:child_process\";\nimport { existsSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { APP_NAME, getPackageDir, VERSION } from \"./config.ts\";\nimport { releaseInheritedInspectorForChild } from \"./inspector-policy.ts\";\nimport { handleBootstrapSelfUpdate } from \"./self-update-bootstrap.ts\";\n\nprocess.title = APP_NAME;\nprocess.env.PI_CODING_AGENT = \"true\";\nprocess.emitWarning = (() => {}) as typeof process.emitWarning;\n\nconst args = process.argv.slice(2);\nconst PACKAGE_COMMANDS = new Set([\"install\", \"remove\", \"uninstall\", \"update\", \"list\", \"config\"]);\n\nfunction isRootCommand(args: readonly string[]): boolean {\n\tconst firstArg = args[0];\n\treturn firstArg === undefined || !PACKAGE_COMMANDS.has(firstArg);\n}\n\nfunction isPackageManagerInstall(packageDir: string): boolean {\n\treturn packageDir.replace(/\\\\/g, \"/\").includes(\"/node_modules/@code-yeongyu/senpi\");\n}\n\nfunction isMissingBundledWorkspaceDependencies(packageDir: string): boolean {\n\tif (!isPackageManagerInstall(packageDir)) {\n\t\treturn false;\n\t}\n\tconst bundledPackages = [\"pi-agent-core\", \"pi-ai\", \"pi-tui\"];\n\treturn bundledPackages.some((name) => {\n\t\treturn !existsSync(join(packageDir, \"node_modules\", \"@earendil-works\", name, \"dist\", \"index.js\"));\n\t});\n}\n\nasync function runFullCli(): Promise<number> {\n\tconst extension = import.meta.url.endsWith(\".ts\") ? \".ts\" : \".js\";\n\tconst fullCliPath = fileURLToPath(new URL(`./cli-main${extension}`, import.meta.url));\n\treleaseInheritedInspectorForChild();\n\treturn await new Promise<number>((resolve, reject) => {\n\t\tconst child = spawn(process.execPath, [...process.execArgv, fullCliPath, ...args], {\n\t\t\tenv: process.env,\n\t\t\tstdio: \"inherit\",\n\t\t});\n\t\tchild.on(\"error\", (error) => {\n\t\t\treject(error);\n\t\t});\n\t\tchild.on(\"close\", (code, signal) => {\n\t\t\tif (signal) {\n\t\t\t\tprocess.kill(process.pid, signal);\n\t\t\t\tresolve(1);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tresolve(code ?? 1);\n\t\t});\n\t});\n}\n\nif (isRootCommand(args) && (args.includes(\"--version\") || args.includes(\"-v\"))) {\n\tconsole.log(VERSION);\n\tprocess.exit();\n}\n\nif (isMissingBundledWorkspaceDependencies(getPackageDir())) {\n\tif (await handleBootstrapSelfUpdate(args)) {\n\t\tprocess.exit();\n\t}\n}\n\nprocess.exitCode = await runFullCli();\n"]}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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","sourcesContent":["#!/usr/bin/env node\nimport \"./valid-cwd.ts\";\nimport { spawn } from \"node:child_process\";\nimport { existsSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { APP_NAME, DISPLAY_VERSION, getPackageDir } from \"./config.ts\";\nimport { releaseInheritedInspectorForChild } from \"./inspector-policy.ts\";\nimport { handleBootstrapSelfUpdate } from \"./self-update-bootstrap.ts\";\n\nprocess.title = APP_NAME;\nprocess.env.PI_CODING_AGENT = \"true\";\nprocess.emitWarning = (() => {}) as typeof process.emitWarning;\n\nconst args = process.argv.slice(2);\nconst PACKAGE_COMMANDS = new Set([\"install\", \"remove\", \"uninstall\", \"update\", \"list\", \"config\"]);\n\nfunction isRootCommand(args: readonly string[]): boolean {\n\tconst firstArg = args[0];\n\treturn firstArg === undefined || !PACKAGE_COMMANDS.has(firstArg);\n}\n\nfunction isPackageManagerInstall(packageDir: string): boolean {\n\treturn packageDir.replace(/\\\\/g, \"/\").includes(\"/node_modules/@code-yeongyu/senpi\");\n}\n\nfunction isMissingBundledWorkspaceDependencies(packageDir: string): boolean {\n\tif (!isPackageManagerInstall(packageDir)) {\n\t\treturn false;\n\t}\n\tconst bundledPackages = [\"pi-agent-core\", \"pi-ai\", \"pi-tui\"];\n\treturn bundledPackages.some((name) => {\n\t\treturn !existsSync(join(packageDir, \"node_modules\", \"@earendil-works\", name, \"dist\", \"index.js\"));\n\t});\n}\n\nasync function runFullCli(): Promise<number> {\n\tconst extension = import.meta.url.endsWith(\".ts\") ? \".ts\" : \".js\";\n\tconst fullCliPath = fileURLToPath(new URL(`./cli-main${extension}`, import.meta.url));\n\treleaseInheritedInspectorForChild();\n\treturn await new Promise<number>((resolve, reject) => {\n\t\tconst child = spawn(process.execPath, [...process.execArgv, fullCliPath, ...args], {\n\t\t\tenv: process.env,\n\t\t\tstdio: \"inherit\",\n\t\t});\n\t\tchild.on(\"error\", (error) => {\n\t\t\treject(error);\n\t\t});\n\t\tchild.on(\"close\", (code, signal) => {\n\t\t\tif (signal) {\n\t\t\t\tprocess.kill(process.pid, signal);\n\t\t\t\tresolve(1);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tresolve(code ?? 1);\n\t\t});\n\t});\n}\n\nif (isRootCommand(args) && (args.includes(\"--version\") || args.includes(\"-v\"))) {\n\tconsole.log(DISPLAY_VERSION);\n\tprocess.exit();\n}\n\nif (isMissingBundledWorkspaceDependencies(getPackageDir())) {\n\tif (await handleBootstrapSelfUpdate(args)) {\n\t\tprocess.exit();\n\t}\n}\n\nprocess.exitCode = await runFullCli();\n"]}
package/dist/config.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import { type BrandProfile } from "./core/brand.ts";
1
2
  /**
2
3
  * Detect if we're running as a Bun compiled binary.
3
4
  * Bun binaries have import.meta.url containing "$bunfs", "~BUN", or "%7EBUN" (Bun's virtual filesystem path)
@@ -62,20 +63,45 @@ export declare function getChangelogPath(): string;
62
63
  export declare function getInteractiveAssetsDir(): string;
63
64
  /** Get path to a bundled interactive asset */
64
65
  export declare function getBundledInteractiveAssetPath(name: string): string;
66
+ /**
67
+ * A distribution repackaging this engine injects its brand once. The profile is consumed
68
+ * here - which also scrubs the variable - so every process spawned later inherits a clean
69
+ * environment and keeps the engine's own identity.
70
+ */
71
+ export declare const BRAND: BrandProfile | undefined;
65
72
  export declare const PACKAGE_NAME: string;
66
73
  export declare const APP_NAME: string;
67
74
  export declare const APP_TITLE: string;
68
75
  export declare const CONFIG_DIR_NAME: string;
76
+ /** True when the brand stores agent state directly under the config dir, with no `agent` segment. */
77
+ export declare const CONFIG_FLAT_LAYOUT: boolean;
69
78
  export declare const VERSION: string;
79
+ /** Version shown to users; VERSION stays the engine version used for update comparisons. */
80
+ export declare const DISPLAY_VERSION: string;
81
+ /** Primary environment prefix for this product; legacy prefixes stay readable. */
82
+ export declare const ENV_PREFIX: string;
70
83
  export declare const ENV_AGENT_DIR: string;
71
84
  export declare const ENV_SESSION_DIR: string;
72
85
  export declare function expandTildePath(path: string): string;
73
86
  /** Get the share viewer URL for a gist ID */
74
87
  export declare function getShareViewerUrl(gistId: string): string;
75
- /** Resolve the agent config directory from an explicit environment. */
88
+ /** Marker file that identifies a flat-layout config directory. */
89
+ export declare const FLAT_LAYOUT_SENTINEL = "settings.json";
90
+ /**
91
+ * Resolve the agent config directory from an explicit environment.
92
+ *
93
+ * A flat-layout brand keeps its state directly under the config directory, so it looks for
94
+ * the settings file as proof rather than for an `agent` subdirectory - the config directory
95
+ * name may also be used by unrelated project tooling.
96
+ */
76
97
  export declare function resolveAgentDir(cwd: string, homeDir: string, envDir?: string): string;
77
98
  /** Get the agent config directory (e.g., ~/.senpi/agent/) */
78
99
  export declare function getAgentDir(): string;
100
+ /**
101
+ * Short, display-only spelling of the agent directory for help text and tips, e.g.
102
+ * `~/.omo` for a flat brand or `~/.senpi/agent` for the engine layout.
103
+ */
104
+ export declare function agentDirLabel(): string;
79
105
  /** Get path to user's custom themes directory */
80
106
  export declare function getCustomThemesDir(): string;
81
107
  /** Get path to models.json */
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}