@code-yeongyu/senpi 2026.9.9 → 2026.9.10

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 (1065) hide show
  1. package/CHANGELOG.md +82 -1
  2. package/README.md +2 -0
  3. package/dist/beta/omo-local-update-worker.js.map +1 -1
  4. package/dist/beta/omo-local-update.d.ts.map +1 -1
  5. package/dist/brand-dir-migration.js.map +1 -1
  6. package/dist/cli/args.d.ts.map +1 -1
  7. package/dist/cli/args.js +1 -0
  8. package/dist/cli/args.js.map +1 -1
  9. package/dist/cli/auth-check.js.map +1 -1
  10. package/dist/cli/experimental/command.d.ts.map +1 -1
  11. package/dist/cli/grok-neo-gate.js.map +1 -1
  12. package/dist/cli/startup-ui.js.map +1 -1
  13. package/dist/cli.js.map +1 -1
  14. package/dist/client/remote-session.d.ts.map +1 -1
  15. package/dist/client/remote-session.js.map +1 -1
  16. package/dist/config.d.ts.map +1 -1
  17. package/dist/config.js +43 -19
  18. package/dist/config.js.map +1 -1
  19. package/dist/core/agent-abort-provenance.d.ts.map +1 -1
  20. package/dist/core/agent-session-runtime.d.ts.map +1 -1
  21. package/dist/core/agent-session-runtime.js.map +1 -1
  22. package/dist/core/agent-session.d.ts +46 -7
  23. package/dist/core/agent-session.d.ts.map +1 -1
  24. package/dist/core/agent-session.js +109 -6
  25. package/dist/core/agent-session.js.map +1 -1
  26. package/dist/core/agent-settled-delivery.d.ts.map +1 -1
  27. package/dist/core/auth-providers.js.map +1 -1
  28. package/dist/core/auth-storage.d.ts.map +1 -1
  29. package/dist/core/auth-storage.js.map +1 -1
  30. package/dist/core/brand.js.map +1 -1
  31. package/dist/core/compaction/branch-summarization.js.map +1 -1
  32. package/dist/core/compaction/compaction.js.map +1 -1
  33. package/dist/core/compaction/lifecycle.d.ts.map +1 -1
  34. package/dist/core/compaction/stream-watchdog.d.ts.map +1 -1
  35. package/dist/core/compaction/utils.js.map +1 -1
  36. package/dist/core/credential-accounts.js.map +1 -1
  37. package/dist/core/credential-pool/classify.js.map +1 -1
  38. package/dist/core/credential-pool/failover.d.ts.map +1 -1
  39. package/dist/core/credential-pool/rotation-stream.js.map +1 -1
  40. package/dist/core/credential-pool/state-store.d.ts +2 -2
  41. package/dist/core/credential-pool/state-store.d.ts.map +1 -1
  42. package/dist/core/credential-pool/state-store.js.map +1 -1
  43. package/dist/core/dynamic-prompt/verification.d.ts.map +1 -1
  44. package/dist/core/edited-assistant-message.d.ts +24 -0
  45. package/dist/core/edited-assistant-message.d.ts.map +1 -0
  46. package/dist/core/edited-assistant-message.js +57 -0
  47. package/dist/core/edited-assistant-message.js.map +1 -0
  48. package/dist/core/experimental.d.ts.map +1 -1
  49. package/dist/core/extensions/builtin/ask-user/extension.d.ts +3 -0
  50. package/dist/core/extensions/builtin/ask-user/extension.d.ts.map +1 -0
  51. package/dist/core/extensions/builtin/ask-user/extension.js +47 -0
  52. package/dist/core/extensions/builtin/ask-user/extension.js.map +1 -0
  53. package/dist/core/extensions/builtin/ask-user/family.d.ts +8 -0
  54. package/dist/core/extensions/builtin/ask-user/family.d.ts.map +1 -0
  55. package/dist/core/extensions/builtin/ask-user/family.js +6 -0
  56. package/dist/core/extensions/builtin/ask-user/family.js.map +1 -0
  57. package/dist/core/extensions/builtin/ask-user/format.d.ts +22 -0
  58. package/dist/core/extensions/builtin/ask-user/format.d.ts.map +1 -0
  59. package/dist/core/extensions/builtin/ask-user/format.js +109 -0
  60. package/dist/core/extensions/builtin/ask-user/format.js.map +1 -0
  61. package/dist/core/extensions/builtin/ask-user/index.d.ts +4 -0
  62. package/dist/core/extensions/builtin/ask-user/index.d.ts.map +1 -0
  63. package/dist/core/extensions/builtin/ask-user/index.js +4 -0
  64. package/dist/core/extensions/builtin/ask-user/index.js.map +1 -0
  65. package/dist/core/extensions/builtin/ask-user/params.d.ts +27 -0
  66. package/dist/core/extensions/builtin/ask-user/params.d.ts.map +1 -0
  67. package/dist/core/extensions/builtin/ask-user/params.js +78 -0
  68. package/dist/core/extensions/builtin/ask-user/params.js.map +1 -0
  69. package/dist/core/extensions/builtin/ask-user/pending.d.ts +58 -0
  70. package/dist/core/extensions/builtin/ask-user/pending.d.ts.map +1 -0
  71. package/dist/core/extensions/builtin/ask-user/pending.js +130 -0
  72. package/dist/core/extensions/builtin/ask-user/pending.js.map +1 -0
  73. package/dist/core/extensions/builtin/ask-user/registry.d.ts +21 -0
  74. package/dist/core/extensions/builtin/ask-user/registry.d.ts.map +1 -0
  75. package/dist/core/extensions/builtin/ask-user/registry.js +20 -0
  76. package/dist/core/extensions/builtin/ask-user/registry.js.map +1 -0
  77. package/dist/core/extensions/builtin/ask-user/render.d.ts +4 -0
  78. package/dist/core/extensions/builtin/ask-user/render.d.ts.map +1 -0
  79. package/dist/core/extensions/builtin/ask-user/render.js +25 -0
  80. package/dist/core/extensions/builtin/ask-user/render.js.map +1 -0
  81. package/dist/core/extensions/builtin/ask-user/resume.d.ts +4 -0
  82. package/dist/core/extensions/builtin/ask-user/resume.d.ts.map +1 -0
  83. package/dist/core/extensions/builtin/ask-user/resume.js +85 -0
  84. package/dist/core/extensions/builtin/ask-user/resume.js.map +1 -0
  85. package/dist/core/extensions/builtin/ask-user/schema.d.ts +40 -0
  86. package/dist/core/extensions/builtin/ask-user/schema.d.ts.map +1 -0
  87. package/dist/core/extensions/builtin/ask-user/schema.js +102 -0
  88. package/dist/core/extensions/builtin/ask-user/schema.js.map +1 -0
  89. package/dist/core/extensions/builtin/ask-user/tool.d.ts +8 -0
  90. package/dist/core/extensions/builtin/ask-user/tool.d.ts.map +1 -0
  91. package/dist/core/extensions/builtin/ask-user/tool.js +195 -0
  92. package/dist/core/extensions/builtin/ask-user/tool.js.map +1 -0
  93. package/dist/core/extensions/builtin/bash-timeout/timeout.js.map +1 -1
  94. package/dist/core/extensions/builtin/btw/panel.d.ts.map +1 -1
  95. package/dist/core/extensions/builtin/btw/side-query.js.map +1 -1
  96. package/dist/core/extensions/builtin/cache-keepalive/index.d.ts.map +1 -1
  97. package/dist/core/extensions/builtin/cache-keepalive/index.js.map +1 -1
  98. package/dist/core/extensions/builtin/claude-sdk-oauth/account-command.js.map +1 -1
  99. package/dist/core/extensions/builtin/claude-sdk-oauth/account-management.js.map +1 -1
  100. package/dist/core/extensions/builtin/claude-sdk-oauth/accounts.d.ts.map +1 -1
  101. package/dist/core/extensions/builtin/claude-sdk-oauth/accounts.js.map +1 -1
  102. package/dist/core/extensions/builtin/claude-sdk-oauth/affinity.d.ts.map +1 -1
  103. package/dist/core/extensions/builtin/claude-sdk-oauth/affinity.js.map +1 -1
  104. package/dist/core/extensions/builtin/claude-sdk-oauth/availability.d.ts +11 -0
  105. package/dist/core/extensions/builtin/claude-sdk-oauth/availability.d.ts.map +1 -1
  106. package/dist/core/extensions/builtin/claude-sdk-oauth/availability.js +12 -1
  107. package/dist/core/extensions/builtin/claude-sdk-oauth/availability.js.map +1 -1
  108. package/dist/core/extensions/builtin/claude-sdk-oauth/bounded-queue.d.ts.map +1 -1
  109. package/dist/core/extensions/builtin/claude-sdk-oauth/custom-tools.d.ts.map +1 -1
  110. package/dist/core/extensions/builtin/claude-sdk-oauth/errors.d.ts.map +1 -1
  111. package/dist/core/extensions/builtin/claude-sdk-oauth/executable-path-lookup.d.ts +14 -0
  112. package/dist/core/extensions/builtin/claude-sdk-oauth/executable-path-lookup.d.ts.map +1 -0
  113. package/dist/core/extensions/builtin/claude-sdk-oauth/executable-path-lookup.js +42 -0
  114. package/dist/core/extensions/builtin/claude-sdk-oauth/executable-path-lookup.js.map +1 -0
  115. package/dist/core/extensions/builtin/claude-sdk-oauth/executable.d.ts +18 -0
  116. package/dist/core/extensions/builtin/claude-sdk-oauth/executable.d.ts.map +1 -1
  117. package/dist/core/extensions/builtin/claude-sdk-oauth/executable.js +105 -36
  118. package/dist/core/extensions/builtin/claude-sdk-oauth/executable.js.map +1 -1
  119. package/dist/core/extensions/builtin/claude-sdk-oauth/failover.d.ts.map +1 -1
  120. package/dist/core/extensions/builtin/claude-sdk-oauth/index.js.map +1 -1
  121. package/dist/core/extensions/builtin/claude-sdk-oauth/refusal.d.ts.map +1 -1
  122. package/dist/core/extensions/builtin/claude-sdk-oauth/sdk-boundary.d.ts.map +1 -1
  123. package/dist/core/extensions/builtin/claude-sdk-oauth/session-binding.d.ts.map +1 -1
  124. package/dist/core/extensions/builtin/claude-sdk-oauth/session-commit-boundary.d.ts.map +1 -1
  125. package/dist/core/extensions/builtin/claude-sdk-oauth/session-reaper.d.ts.map +1 -1
  126. package/dist/core/extensions/builtin/claude-sdk-oauth/session-registry-pump.d.ts.map +1 -1
  127. package/dist/core/extensions/builtin/claude-sdk-oauth/session-registry-pump.js.map +1 -1
  128. package/dist/core/extensions/builtin/claude-sdk-oauth/session-registry-state.d.ts.map +1 -1
  129. package/dist/core/extensions/builtin/claude-sdk-oauth/session-registry.d.ts.map +1 -1
  130. package/dist/core/extensions/builtin/claude-sdk-oauth/session-stream.d.ts.map +1 -1
  131. package/dist/core/extensions/builtin/claude-sdk-oauth/session-stream.js +4 -1
  132. package/dist/core/extensions/builtin/claude-sdk-oauth/session-stream.js.map +1 -1
  133. package/dist/core/extensions/builtin/claude-sdk-oauth/session-sync.js.map +1 -1
  134. package/dist/core/extensions/builtin/claude-sdk-oauth/session-turn-attempt.d.ts.map +1 -1
  135. package/dist/core/extensions/builtin/claude-sdk-oauth/session-turn-types.d.ts.map +1 -1
  136. package/dist/core/extensions/builtin/claude-sdk-oauth/settings.js.map +1 -1
  137. package/dist/core/extensions/builtin/claude-sdk-oauth/stream-protocol.d.ts +1 -1
  138. package/dist/core/extensions/builtin/claude-sdk-oauth/tool-watch.js.map +1 -1
  139. package/dist/core/extensions/builtin/claude-sdk-oauth/tools.d.ts.map +1 -1
  140. package/dist/core/extensions/builtin/compaction/context-reduction.js.map +1 -1
  141. package/dist/core/extensions/builtin/compaction/deterministic-fallback.js.map +1 -1
  142. package/dist/core/extensions/builtin/compaction/index.js.map +1 -1
  143. package/dist/core/extensions/builtin/compaction/lane-policy.js.map +1 -1
  144. package/dist/core/extensions/builtin/compaction/log.js.map +1 -1
  145. package/dist/core/extensions/builtin/compaction/model-usability-budget.d.ts.map +1 -1
  146. package/dist/core/extensions/builtin/compaction/openai-remote-convert.js.map +1 -1
  147. package/dist/core/extensions/builtin/compaction/openai-remote.js.map +1 -1
  148. package/dist/core/extensions/builtin/compaction/overflow-retry.d.ts.map +1 -1
  149. package/dist/core/extensions/builtin/compaction/resume-admission.d.ts +7 -0
  150. package/dist/core/extensions/builtin/compaction/resume-admission.d.ts.map +1 -0
  151. package/dist/core/extensions/builtin/compaction/resume-admission.js +7 -0
  152. package/dist/core/extensions/builtin/compaction/resume-admission.js.map +1 -0
  153. package/dist/core/extensions/builtin/compaction/resume-slice.d.ts +23 -0
  154. package/dist/core/extensions/builtin/compaction/resume-slice.d.ts.map +1 -0
  155. package/dist/core/extensions/builtin/compaction/resume-slice.js +99 -0
  156. package/dist/core/extensions/builtin/compaction/resume-slice.js.map +1 -0
  157. package/dist/core/extensions/builtin/compaction/speculative.d.ts.map +1 -1
  158. package/dist/core/extensions/builtin/compaction/summarization-retry.js.map +1 -1
  159. package/dist/core/extensions/builtin/config-reload/index.d.ts.map +1 -1
  160. package/dist/core/extensions/builtin/config-reload/index.js.map +1 -1
  161. package/dist/core/extensions/builtin/config-reload/log.js.map +1 -1
  162. package/dist/core/extensions/builtin/config-reload/protocol.d.ts.map +1 -1
  163. package/dist/core/extensions/builtin/config-reload/reload-deferral.d.ts.map +1 -1
  164. package/dist/core/extensions/builtin/config-reload/watch-engine.d.ts.map +1 -1
  165. package/dist/core/extensions/builtin/config-reload/watch-event-source.js.map +1 -1
  166. package/dist/core/extensions/builtin/cursor-cli-oauth/account-command.js.map +1 -1
  167. package/dist/core/extensions/builtin/cursor-cli-oauth/accounts.d.ts.map +1 -1
  168. package/dist/core/extensions/builtin/cursor-cli-oauth/affinity.d.ts.map +1 -1
  169. package/dist/core/extensions/builtin/cursor-cli-oauth/affinity.js.map +1 -1
  170. package/dist/core/extensions/builtin/cursor-cli-oauth/diagnostics.d.ts.map +1 -1
  171. package/dist/core/extensions/builtin/cursor-cli-oauth/diagnostics.js.map +1 -1
  172. package/dist/core/extensions/builtin/cursor-cli-oauth/executable.d.ts.map +1 -1
  173. package/dist/core/extensions/builtin/cursor-cli-oauth/executable.js.map +1 -1
  174. package/dist/core/extensions/builtin/cursor-cli-oauth/failover.d.ts.map +1 -1
  175. package/dist/core/extensions/builtin/cursor-cli-oauth/guardrails.d.ts.map +1 -1
  176. package/dist/core/extensions/builtin/cursor-cli-oauth/guardrails.js.map +1 -1
  177. package/dist/core/extensions/builtin/cursor-cli-oauth/index.js.map +1 -1
  178. package/dist/core/extensions/builtin/cursor-cli-oauth/oauth-login.js.map +1 -1
  179. package/dist/core/extensions/builtin/cursor-cli-oauth/session-router.d.ts.map +1 -1
  180. package/dist/core/extensions/builtin/cursor-cli-oauth/session-router.js.map +1 -1
  181. package/dist/core/extensions/builtin/cursor-cli-oauth/stream-parser.d.ts.map +1 -1
  182. package/dist/core/extensions/builtin/cursor-cli-oauth/stream-parser.js.map +1 -1
  183. package/dist/core/extensions/builtin/cursor-cli-oauth/stream.js.map +1 -1
  184. package/dist/core/extensions/builtin/cursor-cli-oauth/transport.d.ts.map +1 -1
  185. package/dist/core/extensions/builtin/goal/cache-warm-renderer.js.map +1 -1
  186. package/dist/core/extensions/builtin/goal/command-registration.js.map +1 -1
  187. package/dist/core/extensions/builtin/goal/direct-input-lifecycle.d.ts.map +1 -1
  188. package/dist/core/extensions/builtin/goal/elapsed-ticker.d.ts.map +1 -1
  189. package/dist/core/extensions/builtin/goal/errors.d.ts.map +1 -1
  190. package/dist/core/extensions/builtin/goal/monitor-continuation.d.ts.map +1 -1
  191. package/dist/core/extensions/builtin/goal/monitor-continuation.js +57 -4
  192. package/dist/core/extensions/builtin/goal/monitor-continuation.js.map +1 -1
  193. package/dist/core/extensions/builtin/goal/persistence.js.map +1 -1
  194. package/dist/core/extensions/builtin/goal/prompt.d.ts.map +1 -1
  195. package/dist/core/extensions/builtin/goal/prompt.js +9 -6
  196. package/dist/core/extensions/builtin/goal/prompt.js.map +1 -1
  197. package/dist/core/extensions/builtin/goal/store.js.map +1 -1
  198. package/dist/core/extensions/builtin/goal/tool-registration.js +1 -1
  199. package/dist/core/extensions/builtin/goal/tool-registration.js.map +1 -1
  200. package/dist/core/extensions/builtin/goal/turn-usage.d.ts.map +1 -1
  201. package/dist/core/extensions/builtin/goal/types.d.ts.map +1 -1
  202. package/dist/core/extensions/builtin/goal/ui.js.map +1 -1
  203. package/dist/core/extensions/builtin/goal/wait-progress.js.map +1 -1
  204. package/dist/core/extensions/builtin/goal/wait-ticker.d.ts.map +1 -1
  205. package/dist/core/extensions/builtin/gpt-account.d.ts.map +1 -1
  206. package/dist/core/extensions/builtin/gpt-account.js +1 -0
  207. package/dist/core/extensions/builtin/gpt-account.js.map +1 -1
  208. package/dist/core/extensions/builtin/gpt-apply-patch/apply.js.map +1 -1
  209. package/dist/core/extensions/builtin/gpt-apply-patch/errors.d.ts.map +1 -1
  210. package/dist/core/extensions/builtin/gpt-apply-patch/extension.d.ts.map +1 -1
  211. package/dist/core/extensions/builtin/gpt-apply-patch/preview-format.js.map +1 -1
  212. package/dist/core/extensions/builtin/gpt-apply-patch/preview.js.map +1 -1
  213. package/dist/core/extensions/builtin/gpt-apply-patch/streaming-parser.d.ts.map +1 -1
  214. package/dist/core/extensions/builtin/gpt-apply-patch/tool.js.map +1 -1
  215. package/dist/core/extensions/builtin/help/panel.d.ts.map +1 -1
  216. package/dist/core/extensions/builtin/history-search/index.js.map +1 -1
  217. package/dist/core/extensions/builtin/history-search/overlay.d.ts.map +1 -1
  218. package/dist/core/extensions/builtin/hooks/command-runner.js.map +1 -1
  219. package/dist/core/extensions/builtin/hooks/dispatcher.js.map +1 -1
  220. package/dist/core/extensions/builtin/hooks/plugin-loader.js.map +1 -1
  221. package/dist/core/extensions/builtin/hooks/tool-adapter.js.map +1 -1
  222. package/dist/core/extensions/builtin/hooks/trust-storage.d.ts.map +1 -1
  223. package/dist/core/extensions/builtin/hooks/trust.js.map +1 -1
  224. package/dist/core/extensions/builtin/hooks/types.d.ts.map +1 -1
  225. package/dist/core/extensions/builtin/imagegen/index.js.map +1 -1
  226. package/dist/core/extensions/builtin/imagegen/params.d.ts +45 -0
  227. package/dist/core/extensions/builtin/imagegen/params.d.ts.map +1 -0
  228. package/dist/core/extensions/builtin/imagegen/params.js +81 -0
  229. package/dist/core/extensions/builtin/imagegen/params.js.map +1 -0
  230. package/dist/core/extensions/builtin/imagegen/paths.d.ts +10 -4
  231. package/dist/core/extensions/builtin/imagegen/paths.d.ts.map +1 -1
  232. package/dist/core/extensions/builtin/imagegen/paths.js +43 -10
  233. package/dist/core/extensions/builtin/imagegen/paths.js.map +1 -1
  234. package/dist/core/extensions/builtin/imagegen/reference-images.d.ts +20 -0
  235. package/dist/core/extensions/builtin/imagegen/reference-images.d.ts.map +1 -0
  236. package/dist/core/extensions/builtin/imagegen/reference-images.js +70 -0
  237. package/dist/core/extensions/builtin/imagegen/reference-images.js.map +1 -0
  238. package/dist/core/extensions/builtin/imagegen/skill/SKILL.md +58 -33
  239. package/dist/core/extensions/builtin/imagegen/tool.d.ts +15 -19
  240. package/dist/core/extensions/builtin/imagegen/tool.d.ts.map +1 -1
  241. package/dist/core/extensions/builtin/imagegen/tool.js +74 -52
  242. package/dist/core/extensions/builtin/imagegen/tool.js.map +1 -1
  243. package/dist/core/extensions/builtin/index.d.ts.map +1 -1
  244. package/dist/core/extensions/builtin/index.js +2 -0
  245. package/dist/core/extensions/builtin/index.js.map +1 -1
  246. package/dist/core/extensions/builtin/look-at/model-selector.d.ts.map +1 -1
  247. package/dist/core/extensions/builtin/look-at/runner.js.map +1 -1
  248. package/dist/core/extensions/builtin/loop/command.js.map +1 -1
  249. package/dist/core/extensions/builtin/loop/cron-planner.js.map +1 -1
  250. package/dist/core/extensions/builtin/loop/index.d.ts.map +1 -1
  251. package/dist/core/extensions/builtin/loop/index.js.map +1 -1
  252. package/dist/core/extensions/builtin/loop/loopfile.d.ts.map +1 -1
  253. package/dist/core/extensions/builtin/loop/scheduler.js.map +1 -1
  254. package/dist/core/extensions/builtin/loop/status.d.ts.map +1 -1
  255. package/dist/core/extensions/builtin/loop/store.d.ts.map +1 -1
  256. package/dist/core/extensions/builtin/loop/types.d.ts.map +1 -1
  257. package/dist/core/extensions/builtin/loop-guard/detectors.d.ts.map +1 -1
  258. package/dist/core/extensions/builtin/loop-guard/escalation.d.ts.map +1 -1
  259. package/dist/core/extensions/builtin/loop-guard/escalation.js.map +1 -1
  260. package/dist/core/extensions/builtin/loop-guard/index.js.map +1 -1
  261. package/dist/core/extensions/builtin/loop-guard/notice.js.map +1 -1
  262. package/dist/core/extensions/builtin/loop-guard/renderer.js.map +1 -1
  263. package/dist/core/extensions/builtin/loop-guard/tracker.d.ts.map +1 -1
  264. package/dist/core/extensions/builtin/mcp/active-set.js.map +1 -1
  265. package/dist/core/extensions/builtin/mcp/auth/callback.d.ts.map +1 -1
  266. package/dist/core/extensions/builtin/mcp/auth/oauth-errors.d.ts.map +1 -1
  267. package/dist/core/extensions/builtin/mcp/auth/oauth-errors.js.map +1 -1
  268. package/dist/core/extensions/builtin/mcp/auth/oauth-provider.d.ts.map +1 -1
  269. package/dist/core/extensions/builtin/mcp/auth/oauth-refresh.d.ts.map +1 -1
  270. package/dist/core/extensions/builtin/mcp/auth/oauth-refresh.js.map +1 -1
  271. package/dist/core/extensions/builtin/mcp/auth/oauth.js.map +1 -1
  272. package/dist/core/extensions/builtin/mcp/auth/token-store.d.ts.map +1 -1
  273. package/dist/core/extensions/builtin/mcp/catalog.js.map +1 -1
  274. package/dist/core/extensions/builtin/mcp/config-schema.d.ts +28 -28
  275. package/dist/core/extensions/builtin/mcp/config.d.ts.map +1 -1
  276. package/dist/core/extensions/builtin/mcp/connection.d.ts.map +1 -1
  277. package/dist/core/extensions/builtin/mcp/elicitation.d.ts.map +1 -1
  278. package/dist/core/extensions/builtin/mcp/elicitation.js.map +1 -1
  279. package/dist/core/extensions/builtin/mcp/errors.d.ts.map +1 -1
  280. package/dist/core/extensions/builtin/mcp/errors.js.map +1 -1
  281. package/dist/core/extensions/builtin/mcp/expose/register.js.map +1 -1
  282. package/dist/core/extensions/builtin/mcp/expose/session.js.map +1 -1
  283. package/dist/core/extensions/builtin/mcp/guard/output-guard.d.ts.map +1 -1
  284. package/dist/core/extensions/builtin/mcp/guard/output-guard.js.map +1 -1
  285. package/dist/core/extensions/builtin/mcp/log.js.map +1 -1
  286. package/dist/core/extensions/builtin/mcp/reconnect.d.ts.map +1 -1
  287. package/dist/core/extensions/builtin/mcp/service-register.js.map +1 -1
  288. package/dist/core/extensions/builtin/mcp/service.d.ts.map +1 -1
  289. package/dist/core/extensions/builtin/mcp/service.js.map +1 -1
  290. package/dist/core/extensions/builtin/nested-agents-md/core/errors.d.ts.map +1 -1
  291. package/dist/core/extensions/builtin/nested-agents-md/core/injection-cache.d.ts.map +1 -1
  292. package/dist/core/extensions/builtin/nested-agents-md/core/types.d.ts.map +1 -1
  293. package/dist/core/extensions/builtin/oauth-login-interaction.d.ts +13 -6
  294. package/dist/core/extensions/builtin/oauth-login-interaction.d.ts.map +1 -1
  295. package/dist/core/extensions/builtin/oauth-login-interaction.js +43 -19
  296. package/dist/core/extensions/builtin/oauth-login-interaction.js.map +1 -1
  297. package/dist/core/extensions/builtin/openai-image-gen/inject.d.ts +5 -3
  298. package/dist/core/extensions/builtin/openai-image-gen/inject.d.ts.map +1 -1
  299. package/dist/core/extensions/builtin/openai-image-gen/inject.js +7 -4
  300. package/dist/core/extensions/builtin/openai-image-gen/inject.js.map +1 -1
  301. package/dist/core/extensions/builtin/permission-system/arity.d.ts.map +1 -1
  302. package/dist/core/extensions/builtin/permission-system/parsers.d.ts.map +1 -1
  303. package/dist/core/extensions/builtin/permission-system/prompt.js.map +1 -1
  304. package/dist/core/extensions/builtin/permission-system/service.d.ts.map +1 -1
  305. package/dist/core/extensions/builtin/permission-system/service.js.map +1 -1
  306. package/dist/core/extensions/builtin/permission-system/types.d.ts.map +1 -1
  307. package/dist/core/extensions/builtin/permission-system/wildcard.d.ts.map +1 -1
  308. package/dist/core/extensions/builtin/prompt-preset/claude-fable-5-1.js +1 -1
  309. package/dist/core/extensions/builtin/prompt-preset/claude-fable-5-1.js.map +1 -1
  310. package/dist/core/extensions/builtin/prompt-preset/claude-fable-5.js +1 -1
  311. package/dist/core/extensions/builtin/prompt-preset/claude-fable-5.js.map +1 -1
  312. package/dist/core/extensions/builtin/prompt-preset/claude-opus-5.js +1 -1
  313. package/dist/core/extensions/builtin/prompt-preset/claude-opus-5.js.map +1 -1
  314. package/dist/core/extensions/builtin/prompt-preset/execution-tooling.d.ts.map +1 -1
  315. package/dist/core/extensions/builtin/prompt-preset/glm-5.d.ts +1 -1
  316. package/dist/core/extensions/builtin/prompt-preset/glm-5.d.ts.map +1 -1
  317. package/dist/core/extensions/builtin/prompt-preset/glm-5.js +1 -1
  318. package/dist/core/extensions/builtin/prompt-preset/glm-5.js.map +1 -1
  319. package/dist/core/extensions/builtin/prompt-preset/gpt-5.6.d.ts.map +1 -1
  320. package/dist/core/extensions/builtin/prompt-preset/gpt-5.6.js +1 -1
  321. package/dist/core/extensions/builtin/prompt-preset/gpt-5.6.js.map +1 -1
  322. package/dist/core/extensions/builtin/prompt-preset/gpt-6-astra.d.ts +4 -4
  323. package/dist/core/extensions/builtin/prompt-preset/gpt-6-astra.d.ts.map +1 -1
  324. package/dist/core/extensions/builtin/prompt-preset/gpt-6-astra.js +4 -4
  325. package/dist/core/extensions/builtin/prompt-preset/gpt-6-astra.js.map +1 -1
  326. package/dist/core/extensions/builtin/prompt-preset/kimi-k3.js +1 -1
  327. package/dist/core/extensions/builtin/prompt-preset/kimi-k3.js.map +1 -1
  328. package/dist/core/extensions/builtin/prompt-preset/presets.js.map +1 -1
  329. package/dist/core/extensions/builtin/rule-activation/renderer.js.map +1 -1
  330. package/dist/core/extensions/builtin/rules/commands.js.map +1 -1
  331. package/dist/core/extensions/builtin/rules/config.js.map +1 -1
  332. package/dist/core/extensions/builtin/rules/rules/errors.d.ts.map +1 -1
  333. package/dist/core/extensions/builtin/rules/rules/project-root.js.map +1 -1
  334. package/dist/core/extensions/builtin/rules/ui/dynamic-border.d.ts.map +1 -1
  335. package/dist/core/extensions/builtin/rules/ui/rules-banner.d.ts.map +1 -1
  336. package/dist/core/extensions/builtin/terminal/extension.d.ts.map +1 -1
  337. package/dist/core/extensions/builtin/terminal/manager.d.ts.map +1 -1
  338. package/dist/core/extensions/builtin/terminal/manager.js.map +1 -1
  339. package/dist/core/extensions/builtin/terminal/monitor-notify.d.ts.map +1 -1
  340. package/dist/core/extensions/builtin/terminal/monitor-registry.d.ts.map +1 -1
  341. package/dist/core/extensions/builtin/terminal/monitor-status-ticker.d.ts.map +1 -1
  342. package/dist/core/extensions/builtin/terminal/notify.d.ts.map +1 -1
  343. package/dist/core/extensions/builtin/terminal/restore.d.ts.map +1 -1
  344. package/dist/core/extensions/builtin/terminal/runtime-session.d.ts.map +1 -1
  345. package/dist/core/extensions/builtin/terminal/session-bundle.d.ts.map +1 -1
  346. package/dist/core/extensions/builtin/terminal/terminal-manifest.d.ts.map +1 -1
  347. package/dist/core/extensions/builtin/terminal/tools/render.d.ts.map +1 -1
  348. package/dist/core/extensions/builtin/todotools/index.js.map +1 -1
  349. package/dist/core/extensions/builtin/todotools/normalize.js.map +1 -1
  350. package/dist/core/extensions/builtin/todotools/todo-operations.js.map +1 -1
  351. package/dist/core/extensions/builtin/todotools/todo-widget-component.d.ts.map +1 -1
  352. package/dist/core/extensions/builtin/todotools/todo-widget-component.js.map +1 -1
  353. package/dist/core/extensions/builtin/todotools/tools/todo.js.map +1 -1
  354. package/dist/core/extensions/builtin/tool-search/native-search.d.ts.map +1 -1
  355. package/dist/core/extensions/builtin/tool-search/service.d.ts.map +1 -1
  356. package/dist/core/extensions/builtin/tool-search/service.js.map +1 -1
  357. package/dist/core/extensions/builtin/ttsr/detectors/leak-context.d.ts.map +1 -1
  358. package/dist/core/extensions/builtin/ttsr/detectors/token-grammar.d.ts.map +1 -1
  359. package/dist/core/extensions/builtin/ttsr/manager.d.ts.map +1 -1
  360. package/dist/core/extensions/builtin/ttsr/message-update.js.map +1 -1
  361. package/dist/core/extensions/builtin/ttsr/repetitive-turns-lane.d.ts.map +1 -1
  362. package/dist/core/extensions/builtin/ttsr/stream-utils.d.ts.map +1 -1
  363. package/dist/core/extensions/builtin/ttsr/watch.d.ts.map +1 -1
  364. package/dist/core/extensions/builtin/webfetch/webfetch/errors.d.ts.map +1 -1
  365. package/dist/core/extensions/builtin/webfetch/webfetch/tool.d.ts +1 -1
  366. package/dist/core/extensions/builtin/websearch/websearch/native.js.map +1 -1
  367. package/dist/core/extensions/loader.d.ts +2 -1
  368. package/dist/core/extensions/loader.d.ts.map +1 -1
  369. package/dist/core/extensions/loader.js +17 -8
  370. package/dist/core/extensions/loader.js.map +1 -1
  371. package/dist/core/extensions/notice/box.d.ts.map +1 -1
  372. package/dist/core/extensions/notice/box.js +13 -5
  373. package/dist/core/extensions/notice/box.js.map +1 -1
  374. package/dist/core/extensions/runner.d.ts +11 -0
  375. package/dist/core/extensions/runner.d.ts.map +1 -1
  376. package/dist/core/extensions/runner.js +23 -0
  377. package/dist/core/extensions/runner.js.map +1 -1
  378. package/dist/core/extensions/types.d.ts +76 -1
  379. package/dist/core/extensions/types.d.ts.map +1 -1
  380. package/dist/core/extensions/types.js.map +1 -1
  381. package/dist/core/footer-data-provider.d.ts.map +1 -1
  382. package/dist/core/footer-data-provider.js.map +1 -1
  383. package/dist/core/http-dispatcher.d.ts.map +1 -1
  384. package/dist/core/http-dispatcher.js.map +1 -1
  385. package/dist/core/keybindings.d.ts +182 -177
  386. package/dist/core/keybindings.d.ts.map +1 -1
  387. package/dist/core/keybindings.js +5 -0
  388. package/dist/core/keybindings.js.map +1 -1
  389. package/dist/core/lockfile-policy.d.ts.map +1 -1
  390. package/dist/core/messages.js.map +1 -1
  391. package/dist/core/model-config-schema.d.ts +150 -150
  392. package/dist/core/model-config-schema.d.ts.map +1 -1
  393. package/dist/core/model-config.d.ts.map +1 -1
  394. package/dist/core/model-config.js.map +1 -1
  395. package/dist/core/model-registry.d.ts.map +1 -1
  396. package/dist/core/model-registry.js.map +1 -1
  397. package/dist/core/model-resolver.d.ts.map +1 -1
  398. package/dist/core/model-resolver.js +1 -0
  399. package/dist/core/model-resolver.js.map +1 -1
  400. package/dist/core/model-runtime.d.ts.map +1 -1
  401. package/dist/core/model-runtime.js.map +1 -1
  402. package/dist/core/models-store.d.ts.map +1 -1
  403. package/dist/core/models-store.js.map +1 -1
  404. package/dist/core/package-manager.d.ts.map +1 -1
  405. package/dist/core/provider-display-names.d.ts.map +1 -1
  406. package/dist/core/provider-display-names.js +1 -0
  407. package/dist/core/provider-display-names.js.map +1 -1
  408. package/dist/core/remote-catalog-provider.js.map +1 -1
  409. package/dist/core/resource-loader.d.ts +2 -0
  410. package/dist/core/resource-loader.d.ts.map +1 -1
  411. package/dist/core/resource-loader.js +11 -7
  412. package/dist/core/resource-loader.js.map +1 -1
  413. package/dist/core/retry-fallback/controller.d.ts.map +1 -1
  414. package/dist/core/retry-fallback/cooldown.d.ts.map +1 -1
  415. package/dist/core/retry-fallback/cooldown.js.map +1 -1
  416. package/dist/core/retry-fallback/expansion.js.map +1 -1
  417. package/dist/core/retry-fallback/log.js.map +1 -1
  418. package/dist/core/retry-fallback/probe-scheduler.d.ts.map +1 -1
  419. package/dist/core/runtime-credentials.d.ts.map +1 -1
  420. package/dist/core/sdk.d.ts.map +1 -1
  421. package/dist/core/sdk.js +24 -1
  422. package/dist/core/sdk.js.map +1 -1
  423. package/dist/core/session-activity.d.ts.map +1 -1
  424. package/dist/core/session-cwd.d.ts.map +1 -1
  425. package/dist/core/session-log.js.map +1 -1
  426. package/dist/core/session-manager.d.ts.map +1 -1
  427. package/dist/core/session-manager.js.map +1 -1
  428. package/dist/core/session-resident-store.d.ts.map +1 -1
  429. package/dist/core/session-sidecar-store.d.ts.map +1 -1
  430. package/dist/core/session-summary-lru.d.ts.map +1 -1
  431. package/dist/core/session-work-barrier.d.ts.map +1 -1
  432. package/dist/core/settings-manager.d.ts +6 -1
  433. package/dist/core/settings-manager.d.ts.map +1 -1
  434. package/dist/core/settings-manager.js +14 -0
  435. package/dist/core/settings-manager.js.map +1 -1
  436. package/dist/core/settings-shapes.d.ts +7 -0
  437. package/dist/core/settings-shapes.d.ts.map +1 -1
  438. package/dist/core/settings-shapes.js +3 -1
  439. package/dist/core/settings-shapes.js.map +1 -1
  440. package/dist/core/telemetry.js.map +1 -1
  441. package/dist/core/timings.js.map +1 -1
  442. package/dist/core/tools/bash.d.ts.map +1 -1
  443. package/dist/core/tools/bounded-realpath.js.map +1 -1
  444. package/dist/core/tools/edit.d.ts.map +1 -1
  445. package/dist/core/tools/find.d.ts.map +1 -1
  446. package/dist/core/tools/find.js.map +1 -1
  447. package/dist/core/tools/grep.d.ts.map +1 -1
  448. package/dist/core/tools/ls.d.ts.map +1 -1
  449. package/dist/core/tools/output-accumulator.d.ts.map +1 -1
  450. package/dist/core/tools/output-accumulator.js.map +1 -1
  451. package/dist/core/tools/powershell.d.ts.map +1 -1
  452. package/dist/core/tools/read-classifiers.d.ts +17 -0
  453. package/dist/core/tools/read-classifiers.d.ts.map +1 -0
  454. package/dist/core/tools/read-classifiers.js +26 -0
  455. package/dist/core/tools/read-classifiers.js.map +1 -0
  456. package/dist/core/tools/read.d.ts +5 -1
  457. package/dist/core/tools/read.d.ts.map +1 -1
  458. package/dist/core/tools/read.js +21 -1
  459. package/dist/core/tools/read.js.map +1 -1
  460. package/dist/core/tools/tail-window.d.ts.map +1 -1
  461. package/dist/core/tools/truncate.js.map +1 -1
  462. package/dist/core/tools/write-result.js.map +1 -1
  463. package/dist/core/tools/write.d.ts.map +1 -1
  464. package/dist/core/trust-manager.d.ts.map +1 -1
  465. package/dist/extensions/llama/client.d.ts.map +1 -1
  466. package/dist/extensions/llama/client.js.map +1 -1
  467. package/dist/extensions/llama/huggingface.d.ts.map +1 -1
  468. package/dist/extensions/llama/huggingface.js.map +1 -1
  469. package/dist/extensions/llama/provider.js.map +1 -1
  470. package/dist/from-source-config-guard.js.map +1 -1
  471. package/dist/index.d.ts +1 -0
  472. package/dist/index.d.ts.map +1 -1
  473. package/dist/index.js +1 -0
  474. package/dist/index.js.map +1 -1
  475. package/dist/main.d.ts.map +1 -1
  476. package/dist/main.js +4 -0
  477. package/dist/main.js.map +1 -1
  478. package/dist/modes/app-server/daemon/occupancy.d.ts.map +1 -1
  479. package/dist/modes/app-server/daemon/process.d.ts.map +1 -1
  480. package/dist/modes/app-server/daemon/process.js.map +1 -1
  481. package/dist/modes/app-server/daemon.js.map +1 -1
  482. package/dist/modes/app-server/protocol/collaboration-mode.d.ts.map +1 -1
  483. package/dist/modes/app-server/protocol/generated/v2/ToolRequestUserInputAnswer.d.ts +7 -0
  484. package/dist/modes/app-server/protocol/generated/v2/ToolRequestUserInputAnswer.d.ts.map +1 -0
  485. package/dist/modes/app-server/protocol/generated/v2/ToolRequestUserInputAnswer.js +4 -0
  486. package/dist/modes/app-server/protocol/generated/v2/ToolRequestUserInputAnswer.js.map +1 -0
  487. package/dist/modes/app-server/protocol/generated/v2/ToolRequestUserInputOption.d.ts +8 -0
  488. package/dist/modes/app-server/protocol/generated/v2/ToolRequestUserInputOption.d.ts.map +1 -0
  489. package/dist/modes/app-server/protocol/generated/v2/ToolRequestUserInputOption.js +4 -0
  490. package/dist/modes/app-server/protocol/generated/v2/ToolRequestUserInputOption.js.map +1 -0
  491. package/dist/modes/app-server/protocol/generated/v2/ToolRequestUserInputParams.d.ts +12 -0
  492. package/dist/modes/app-server/protocol/generated/v2/ToolRequestUserInputParams.d.ts.map +1 -0
  493. package/dist/modes/app-server/protocol/generated/v2/ToolRequestUserInputParams.js +4 -0
  494. package/dist/modes/app-server/protocol/generated/v2/ToolRequestUserInputParams.js.map +1 -0
  495. package/dist/modes/app-server/protocol/generated/v2/ToolRequestUserInputQuestion.d.ts +13 -0
  496. package/dist/modes/app-server/protocol/generated/v2/ToolRequestUserInputQuestion.d.ts.map +1 -0
  497. package/dist/modes/app-server/protocol/generated/v2/ToolRequestUserInputQuestion.js +4 -0
  498. package/dist/modes/app-server/protocol/generated/v2/ToolRequestUserInputQuestion.js.map +1 -0
  499. package/dist/modes/app-server/protocol/generated/v2/ToolRequestUserInputResponse.d.ts +10 -0
  500. package/dist/modes/app-server/protocol/generated/v2/ToolRequestUserInputResponse.d.ts.map +1 -0
  501. package/dist/modes/app-server/protocol/generated/v2/ToolRequestUserInputResponse.js +4 -0
  502. package/dist/modes/app-server/protocol/generated/v2/ToolRequestUserInputResponse.js.map +1 -0
  503. package/dist/modes/app-server/protocol/index.d.ts +2 -0
  504. package/dist/modes/app-server/protocol/index.d.ts.map +1 -1
  505. package/dist/modes/app-server/protocol/index.js.map +1 -1
  506. package/dist/modes/app-server/protocol/methods.d.ts +1 -0
  507. package/dist/modes/app-server/protocol/methods.d.ts.map +1 -1
  508. package/dist/modes/app-server/protocol/methods.js +1 -0
  509. package/dist/modes/app-server/protocol/methods.js.map +1 -1
  510. package/dist/modes/app-server/rpc/errors.d.ts.map +1 -1
  511. package/dist/modes/app-server/runtime.d.ts.map +1 -1
  512. package/dist/modes/app-server/runtime.js +22 -6
  513. package/dist/modes/app-server/runtime.js.map +1 -1
  514. package/dist/modes/app-server/search/fuzzy-files.js.map +1 -1
  515. package/dist/modes/app-server/search/fuzzy-search-service.d.ts.map +1 -1
  516. package/dist/modes/app-server/server/account.js.map +1 -1
  517. package/dist/modes/app-server/server/approval-bridge.d.ts.map +1 -1
  518. package/dist/modes/app-server/server/approval-types.d.ts.map +1 -1
  519. package/dist/modes/app-server/server/approval-ui-context.d.ts +2 -1
  520. package/dist/modes/app-server/server/approval-ui-context.d.ts.map +1 -1
  521. package/dist/modes/app-server/server/approval-ui-context.js +9 -1
  522. package/dist/modes/app-server/server/approval-ui-context.js.map +1 -1
  523. package/dist/modes/app-server/server/catalogs.js.map +1 -1
  524. package/dist/modes/app-server/server/config.js.map +1 -1
  525. package/dist/modes/app-server/server/connection.d.ts.map +1 -1
  526. package/dist/modes/app-server/server/models.js.map +1 -1
  527. package/dist/modes/app-server/server/notifications.d.ts.map +1 -1
  528. package/dist/modes/app-server/server/notifications.js.map +1 -1
  529. package/dist/modes/app-server/server/server-core.d.ts.map +1 -1
  530. package/dist/modes/app-server/server/server-core.js.map +1 -1
  531. package/dist/modes/app-server/server/skills.js.map +1 -1
  532. package/dist/modes/app-server/server/user-input-bridge.d.ts +16 -0
  533. package/dist/modes/app-server/server/user-input-bridge.d.ts.map +1 -0
  534. package/dist/modes/app-server/server/user-input-bridge.js +142 -0
  535. package/dist/modes/app-server/server/user-input-bridge.js.map +1 -0
  536. package/dist/modes/app-server/server/user-input-types.d.ts +43 -0
  537. package/dist/modes/app-server/server/user-input-types.d.ts.map +1 -0
  538. package/dist/modes/app-server/server/user-input-types.js +51 -0
  539. package/dist/modes/app-server/server/user-input-types.js.map +1 -0
  540. package/dist/modes/app-server/threads/archive-state.d.ts.map +1 -1
  541. package/dist/modes/app-server/threads/handlers.js.map +1 -1
  542. package/dist/modes/app-server/threads/mcp-wire-status.d.ts.map +1 -1
  543. package/dist/modes/app-server/threads/metadata-state.d.ts.map +1 -1
  544. package/dist/modes/app-server/threads/projection-file-changes.js.map +1 -1
  545. package/dist/modes/app-server/threads/projection-message-items.d.ts.map +1 -1
  546. package/dist/modes/app-server/threads/projection-turn-diff.d.ts.map +1 -1
  547. package/dist/modes/app-server/threads/projection-web-search.js.map +1 -1
  548. package/dist/modes/app-server/threads/projection.d.ts.map +1 -1
  549. package/dist/modes/app-server/threads/registry.d.ts.map +1 -1
  550. package/dist/modes/app-server/threads/registry.js.map +1 -1
  551. package/dist/modes/app-server/threads/search-cache.d.ts.map +1 -1
  552. package/dist/modes/app-server/threads/turn-log.d.ts.map +1 -1
  553. package/dist/modes/app-server/threads/turn-runtime.d.ts.map +1 -1
  554. package/dist/modes/app-server/threads/turn-runtime.js.map +1 -1
  555. package/dist/modes/app-server/threads/turns.js.map +1 -1
  556. package/dist/modes/app-server/threads/wire-thread.js.map +1 -1
  557. package/dist/modes/app-server/transports/unix-socket.d.ts.map +1 -1
  558. package/dist/modes/app-server/transports/unix-socket.js.map +1 -1
  559. package/dist/modes/app-server/transports/websocket.d.ts.map +1 -1
  560. package/dist/modes/app-server/turn-adapter.d.ts +3 -3
  561. package/dist/modes/app-server/turn-adapter.d.ts.map +1 -1
  562. package/dist/modes/app-server/turn-adapter.js +36 -5
  563. package/dist/modes/app-server/turn-adapter.js.map +1 -1
  564. package/dist/modes/interactive/compaction-queue-transfer.js.map +1 -1
  565. package/dist/modes/interactive/components/armin.d.ts.map +1 -1
  566. package/dist/modes/interactive/components/armin.js.map +1 -1
  567. package/dist/modes/interactive/components/ask-user-async-widget.d.ts +39 -0
  568. package/dist/modes/interactive/components/ask-user-async-widget.d.ts.map +1 -0
  569. package/dist/modes/interactive/components/ask-user-async-widget.js +82 -0
  570. package/dist/modes/interactive/components/ask-user-async-widget.js.map +1 -0
  571. package/dist/modes/interactive/components/ask-user-question-keys.d.ts +21 -0
  572. package/dist/modes/interactive/components/ask-user-question-keys.d.ts.map +1 -0
  573. package/dist/modes/interactive/components/ask-user-question-keys.js +115 -0
  574. package/dist/modes/interactive/components/ask-user-question-keys.js.map +1 -0
  575. package/dist/modes/interactive/components/ask-user-question-render.d.ts +17 -0
  576. package/dist/modes/interactive/components/ask-user-question-render.d.ts.map +1 -0
  577. package/dist/modes/interactive/components/ask-user-question-render.js +75 -0
  578. package/dist/modes/interactive/components/ask-user-question-render.js.map +1 -0
  579. package/dist/modes/interactive/components/ask-user-question-state.d.ts +52 -0
  580. package/dist/modes/interactive/components/ask-user-question-state.d.ts.map +1 -0
  581. package/dist/modes/interactive/components/ask-user-question-state.js +134 -0
  582. package/dist/modes/interactive/components/ask-user-question-state.js.map +1 -0
  583. package/dist/modes/interactive/components/ask-user-question.d.ts +50 -0
  584. package/dist/modes/interactive/components/ask-user-question.d.ts.map +1 -0
  585. package/dist/modes/interactive/components/ask-user-question.js +148 -0
  586. package/dist/modes/interactive/components/ask-user-question.js.map +1 -0
  587. package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
  588. package/dist/modes/interactive/components/assistant-message.js.map +1 -1
  589. package/dist/modes/interactive/components/assistant-render-descriptors.js.map +1 -1
  590. package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -1
  591. package/dist/modes/interactive/components/bordered-loader.d.ts.map +1 -1
  592. package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -1
  593. package/dist/modes/interactive/components/branch-summary-message.js.map +1 -1
  594. package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -1
  595. package/dist/modes/interactive/components/compaction-summary-message.js.map +1 -1
  596. package/dist/modes/interactive/components/config-selector.d.ts.map +1 -1
  597. package/dist/modes/interactive/components/config-selector.js.map +1 -1
  598. package/dist/modes/interactive/components/continuity-notice.d.ts.map +1 -1
  599. package/dist/modes/interactive/components/countdown-timer.d.ts.map +1 -1
  600. package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -1
  601. package/dist/modes/interactive/components/custom-entry.d.ts.map +1 -1
  602. package/dist/modes/interactive/components/custom-message.d.ts.map +1 -1
  603. package/dist/modes/interactive/components/custom-message.js.map +1 -1
  604. package/dist/modes/interactive/components/daxnuts.d.ts.map +1 -1
  605. package/dist/modes/interactive/components/diff.js.map +1 -1
  606. package/dist/modes/interactive/components/dynamic-border.d.ts.map +1 -1
  607. package/dist/modes/interactive/components/dynamic-border.js.map +1 -1
  608. package/dist/modes/interactive/components/earendil-announcement.d.ts.map +1 -1
  609. package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -1
  610. package/dist/modes/interactive/components/extension-input.d.ts.map +1 -1
  611. package/dist/modes/interactive/components/extension-selector.d.ts.map +1 -1
  612. package/dist/modes/interactive/components/extension-selector.js.map +1 -1
  613. package/dist/modes/interactive/components/favorite-models-selector.d.ts.map +1 -1
  614. package/dist/modes/interactive/components/first-time-setup.d.ts.map +1 -1
  615. package/dist/modes/interactive/components/footer.d.ts.map +1 -1
  616. package/dist/modes/interactive/components/keybinding-hints.js.map +1 -1
  617. package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
  618. package/dist/modes/interactive/components/login-dialog.js.map +1 -1
  619. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
  620. package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -1
  621. package/dist/modes/interactive/components/progressive-transcript-container.d.ts.map +1 -1
  622. package/dist/modes/interactive/components/render-signature.js.map +1 -1
  623. package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -1
  624. package/dist/modes/interactive/components/session-selector-search.js.map +1 -1
  625. package/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
  626. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  627. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  628. package/dist/modes/interactive/components/shortcut-overlay.d.ts.map +1 -1
  629. package/dist/modes/interactive/components/show-images-selector.d.ts.map +1 -1
  630. package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -1
  631. package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -1
  632. package/dist/modes/interactive/components/status-indicator.d.ts.map +1 -1
  633. package/dist/modes/interactive/components/theme-selector.d.ts.map +1 -1
  634. package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
  635. package/dist/modes/interactive/components/tool-execution-images.d.ts.map +1 -1
  636. package/dist/modes/interactive/components/tool-execution-renderer.d.ts.map +1 -1
  637. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  638. package/dist/modes/interactive/components/tool-execution.js.map +1 -1
  639. package/dist/modes/interactive/components/tool-renderer-boundary.d.ts.map +1 -1
  640. package/dist/modes/interactive/components/tree-selector.d.ts +4 -0
  641. package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -1
  642. package/dist/modes/interactive/components/tree-selector.js +17 -0
  643. package/dist/modes/interactive/components/tree-selector.js.map +1 -1
  644. package/dist/modes/interactive/components/trust-selector.d.ts.map +1 -1
  645. package/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -1
  646. package/dist/modes/interactive/components/user-message.d.ts.map +1 -1
  647. package/dist/modes/interactive/components/user-message.js.map +1 -1
  648. package/dist/modes/interactive/components/visual-truncate.js.map +1 -1
  649. package/dist/modes/interactive/grok/chrome.d.ts.map +1 -1
  650. package/dist/modes/interactive/grok/footer.d.ts.map +1 -1
  651. package/dist/modes/interactive/grok/input-card.d.ts.map +1 -1
  652. package/dist/modes/interactive/grok/palette.d.ts.map +1 -1
  653. package/dist/modes/interactive/grok/tool-row.d.ts.map +1 -1
  654. package/dist/modes/interactive/grok/welcome-card.d.ts.map +1 -1
  655. package/dist/modes/interactive/interactive-host-runtime.d.ts +6 -0
  656. package/dist/modes/interactive/interactive-host-runtime.d.ts.map +1 -1
  657. package/dist/modes/interactive/interactive-host-runtime.js +32 -3
  658. package/dist/modes/interactive/interactive-host-runtime.js.map +1 -1
  659. package/dist/modes/interactive/interactive-mode.d.ts +35 -0
  660. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  661. package/dist/modes/interactive/interactive-mode.js +413 -100
  662. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  663. package/dist/modes/interactive/login-outcome.d.ts +20 -0
  664. package/dist/modes/interactive/login-outcome.d.ts.map +1 -0
  665. package/dist/modes/interactive/login-outcome.js +35 -0
  666. package/dist/modes/interactive/login-outcome.js.map +1 -0
  667. package/dist/modes/interactive/startup-tools.js.map +1 -1
  668. package/dist/modes/interactive/streaming-reveal-content.d.ts.map +1 -1
  669. package/dist/modes/interactive/streaming-reveal-content.js.map +1 -1
  670. package/dist/modes/interactive/streaming-reveal.d.ts.map +1 -1
  671. package/dist/modes/interactive/theme/theme-controller.d.ts.map +1 -1
  672. package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  673. package/dist/modes/interactive/theme/theme.js.map +1 -1
  674. package/dist/modes/interactive/tips/catalog/input-tips.d.ts +7 -7
  675. package/dist/modes/interactive/tips/catalog/input-tips.d.ts.map +1 -1
  676. package/dist/modes/interactive/tips/catalog/input-tips.js +5 -0
  677. package/dist/modes/interactive/tips/catalog/input-tips.js.map +1 -1
  678. package/dist/modes/interactive/tips/catalog/model-tips.d.ts +1 -1
  679. package/dist/modes/interactive/tips/catalog/workspace-tips.d.ts +1 -1
  680. package/dist/modes/interactive/tips/scheduler.js.map +1 -1
  681. package/dist/modes/interactive/tips/working-tip.d.ts.map +1 -1
  682. package/dist/modes/interactive/tool-args-reveal.d.ts.map +1 -1
  683. package/dist/modes/interactive/tool-result-reveal.d.ts.map +1 -1
  684. package/dist/modes/print-mode.d.ts.map +1 -1
  685. package/dist/modes/print-mode.js +8 -0
  686. package/dist/modes/print-mode.js.map +1 -1
  687. package/dist/modes/provider-native-rendering.d.ts.map +1 -1
  688. package/dist/modes/provider-native-rendering.js +35 -0
  689. package/dist/modes/provider-native-rendering.js.map +1 -1
  690. package/dist/modes/rpc/connection-handler.d.ts.map +1 -1
  691. package/dist/modes/rpc/connection-handler.js +72 -1
  692. package/dist/modes/rpc/connection-handler.js.map +1 -1
  693. package/dist/modes/rpc/connection-question-bridge.d.ts +18 -0
  694. package/dist/modes/rpc/connection-question-bridge.d.ts.map +1 -0
  695. package/dist/modes/rpc/connection-question-bridge.js +156 -0
  696. package/dist/modes/rpc/connection-question-bridge.js.map +1 -0
  697. package/dist/modes/rpc/custom-capability.d.ts +2 -0
  698. package/dist/modes/rpc/custom-capability.d.ts.map +1 -1
  699. package/dist/modes/rpc/custom-capability.js +2 -0
  700. package/dist/modes/rpc/custom-capability.js.map +1 -1
  701. package/dist/modes/rpc/event-output-buffer.js.map +1 -1
  702. package/dist/modes/rpc/host-ensure.js.map +1 -1
  703. package/dist/modes/rpc/host-lifecycle.d.ts.map +1 -1
  704. package/dist/modes/rpc/host-lifecycle.js.map +1 -1
  705. package/dist/modes/rpc/host-watchdog.js.map +1 -1
  706. package/dist/modes/rpc/jsonl.js.map +1 -1
  707. package/dist/modes/rpc/multi-session-host.js.map +1 -1
  708. package/dist/modes/rpc/ownership-safe-lock.d.ts.map +1 -1
  709. package/dist/modes/rpc/ownership-safe-lock.js.map +1 -1
  710. package/dist/modes/rpc/rpc-client.d.ts +20 -1
  711. package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  712. package/dist/modes/rpc/rpc-client.js +35 -3
  713. package/dist/modes/rpc/rpc-client.js.map +1 -1
  714. package/dist/modes/rpc/rpc-input-validation.js.map +1 -1
  715. package/dist/modes/rpc/rpc-types.d.ts +103 -3
  716. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  717. package/dist/modes/rpc/rpc-types.js +6 -0
  718. package/dist/modes/rpc/rpc-types.js.map +1 -1
  719. package/dist/modes/rpc/session-binding.js.map +1 -1
  720. package/dist/modes/rpc/session-command-router.d.ts +4 -4
  721. package/dist/modes/rpc/session-command-router.d.ts.map +1 -1
  722. package/dist/modes/rpc/session-command-router.js +14 -8
  723. package/dist/modes/rpc/session-command-router.js.map +1 -1
  724. package/dist/modes/rpc/session-event-fanout.d.ts +2 -0
  725. package/dist/modes/rpc/session-event-fanout.d.ts.map +1 -1
  726. package/dist/modes/rpc/session-event-fanout.js +25 -1
  727. package/dist/modes/rpc/session-event-fanout.js.map +1 -1
  728. package/dist/modes/rpc/session-event-writer.d.ts +7 -1
  729. package/dist/modes/rpc/session-event-writer.d.ts.map +1 -1
  730. package/dist/modes/rpc/session-event-writer.js +17 -4
  731. package/dist/modes/rpc/session-event-writer.js.map +1 -1
  732. package/dist/modes/rpc/session-extension-ui-requests.d.ts.map +1 -1
  733. package/dist/modes/rpc/session-registry.d.ts.map +1 -1
  734. package/dist/modes/rpc/session-registry.js +11 -1
  735. package/dist/modes/rpc/session-registry.js.map +1 -1
  736. package/dist/modes/rpc/session-worker-client.d.ts.map +1 -1
  737. package/dist/modes/rpc/session-worker-client.js.map +1 -1
  738. package/dist/modes/rpc/session-worker-protocol.d.ts.map +1 -1
  739. package/dist/modes/rpc/session-worker-requests.d.ts.map +1 -1
  740. package/dist/modes/rpc/session-worker-requests.js +1 -1
  741. package/dist/modes/rpc/session-worker-requests.js.map +1 -1
  742. package/dist/modes/rpc/session-worker.js +10 -2
  743. package/dist/modes/rpc/session-worker.js.map +1 -1
  744. package/dist/modes/rpc/socket-event-fanout.d.ts +14 -1
  745. package/dist/modes/rpc/socket-event-fanout.d.ts.map +1 -1
  746. package/dist/modes/rpc/socket-event-fanout.js +48 -2
  747. package/dist/modes/rpc/socket-event-fanout.js.map +1 -1
  748. package/dist/modes/rpc/socket-ownership.js.map +1 -1
  749. package/dist/modes/rpc/worker-session-registry.d.ts.map +1 -1
  750. package/dist/modes/rpc/worker-session-registry.js +2 -1
  751. package/dist/modes/rpc/worker-session-registry.js.map +1 -1
  752. package/dist/package-manager-cli.js.map +1 -1
  753. package/dist/self-update-bootstrap.js.map +1 -1
  754. package/dist/utils/ansi.js.map +1 -1
  755. package/dist/utils/clipboard-image.js.map +1 -1
  756. package/dist/utils/clipboard-native.js.map +1 -1
  757. package/dist/utils/clipboard.js.map +1 -1
  758. package/dist/utils/exif-orientation.js.map +1 -1
  759. package/dist/utils/frontmatter.d.ts.map +1 -1
  760. package/dist/utils/image-resize.js.map +1 -1
  761. package/dist/utils/management-http.js.map +1 -1
  762. package/dist/utils/paths.js.map +1 -1
  763. package/dist/utils/photon.js.map +1 -1
  764. package/dist/utils/pi-user-agent.js.map +1 -1
  765. package/dist/utils/shell.d.ts.map +1 -1
  766. package/dist/utils/shell.js.map +1 -1
  767. package/dist/utils/syntax-highlight.js.map +1 -1
  768. package/dist/utils/version-check.js.map +1 -1
  769. package/docs/app-server.md +14 -0
  770. package/docs/extensions.md +28 -1
  771. package/docs/keybindings.md +1 -0
  772. package/docs/providers.md +1 -0
  773. package/docs/rpc.md +95 -3
  774. package/docs/settings.md +18 -0
  775. package/docs/skills.md +1 -1
  776. package/docs/tui.md +6 -0
  777. package/docs/usage.md +2 -1
  778. package/node_modules/@code-yeongyu/senpi-codemode/CHANGELOG.md +30 -0
  779. package/node_modules/@code-yeongyu/senpi-codemode/README.md +17 -2
  780. package/node_modules/@code-yeongyu/senpi-codemode/package.json +4 -4
  781. package/node_modules/@code-yeongyu/senpi-codemode/src/config/settings.ts +35 -15
  782. package/node_modules/@code-yeongyu/senpi-codemode/src/index.ts +13 -2
  783. package/node_modules/@code-yeongyu/senpi-codemode/src/prompt/eval-prompt-template.ts +76 -0
  784. package/node_modules/@code-yeongyu/senpi-codemode/src/prompt/eval-prompt.ts +6 -77
  785. package/node_modules/@code-yeongyu/senpi-codemode/src/timeouts/run-budget.ts +107 -0
  786. package/node_modules/@code-yeongyu/senpi-codemode/src/tool/cell-deadlines.ts +76 -0
  787. package/node_modules/@code-yeongyu/senpi-codemode/src/tool/cell-execution.ts +25 -14
  788. package/node_modules/@code-yeongyu/senpi-codemode/src/tool/detached-cell-contract.ts +4 -0
  789. package/node_modules/@code-yeongyu/senpi-codemode/src/tool/detached-cell-manager.ts +47 -40
  790. package/node_modules/@code-yeongyu/senpi-codemode/src/tool/detached-cell-notification.ts +2 -0
  791. package/node_modules/@code-yeongyu/senpi-codemode/src/tool/detached-cell-snapshot.ts +5 -0
  792. package/node_modules/@code-yeongyu/senpi-codemode/src/tool/eval-tool-options.ts +8 -3
  793. package/node_modules/@code-yeongyu/senpi-codemode/src/tool/eval-tool.ts +17 -187
  794. package/node_modules/@code-yeongyu/senpi-codemode/src/tool/run-eval-cell.ts +189 -0
  795. package/node_modules/@code-yeongyu/senpi-codemode/src/tool/types.ts +66 -56
  796. package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.d.ts.map +1 -1
  797. package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.js +1 -1
  798. package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.js.map +1 -1
  799. package/node_modules/@earendil-works/pi-agent-core/dist/agent.d.ts.map +1 -1
  800. package/node_modules/@earendil-works/pi-agent-core/dist/agent.js.map +1 -1
  801. package/node_modules/@earendil-works/pi-agent-core/dist/assistant-terminal-state.d.ts.map +1 -1
  802. package/node_modules/@earendil-works/pi-agent-core/dist/harness/agent-harness.d.ts.map +1 -1
  803. package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/branch-summarization.js.map +1 -1
  804. package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/compaction.js.map +1 -1
  805. package/node_modules/@earendil-works/pi-agent-core/dist/harness/env/nodejs.d.ts.map +1 -1
  806. package/node_modules/@earendil-works/pi-agent-core/dist/harness/env/nodejs.js.map +1 -1
  807. package/node_modules/@earendil-works/pi-agent-core/dist/harness/events.d.ts.map +1 -1
  808. package/node_modules/@earendil-works/pi-agent-core/dist/harness/messages.js.map +1 -1
  809. package/node_modules/@earendil-works/pi-agent-core/dist/harness/prompt-templates.js.map +1 -1
  810. package/node_modules/@earendil-works/pi-agent-core/dist/harness/reducer.d.ts.map +1 -1
  811. package/node_modules/@earendil-works/pi-agent-core/dist/harness/reducer.js.map +1 -1
  812. package/node_modules/@earendil-works/pi-agent-core/dist/harness/result.d.ts.map +1 -1
  813. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/context.js.map +1 -1
  814. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl/errors.d.ts.map +1 -1
  815. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl/repo.d.ts.map +1 -1
  816. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl/repo.js.map +1 -1
  817. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl/storage.d.ts.map +1 -1
  818. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl/storage.js.map +1 -1
  819. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/memory.d.ts.map +1 -1
  820. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/memory.js.map +1 -1
  821. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/session.d.ts.map +1 -1
  822. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/session.js.map +1 -1
  823. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/state.d.ts.map +1 -1
  824. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/state.js.map +1 -1
  825. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/testing/conformance.js.map +1 -1
  826. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/types.d.ts.map +1 -1
  827. package/node_modules/@earendil-works/pi-agent-core/dist/harness/telemetry.d.ts +36 -36
  828. package/node_modules/@earendil-works/pi-agent-core/dist/harness/telemetry.d.ts.map +1 -1
  829. package/node_modules/@earendil-works/pi-agent-core/dist/harness/types.d.ts.map +1 -1
  830. package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/truncate.js.map +1 -1
  831. package/node_modules/@earendil-works/pi-agent-core/dist/proxy.d.ts.map +1 -1
  832. package/node_modules/@earendil-works/pi-agent-core/dist/proxy.js.map +1 -1
  833. package/node_modules/@earendil-works/pi-agent-core/dist/search/scanning.js.map +1 -1
  834. package/node_modules/@earendil-works/pi-agent-core/dist/types.d.ts +5 -0
  835. package/node_modules/@earendil-works/pi-agent-core/dist/types.d.ts.map +1 -1
  836. package/node_modules/@earendil-works/pi-agent-core/dist/types.js.map +1 -1
  837. package/node_modules/@earendil-works/pi-agent-core/package.json +4 -4
  838. package/node_modules/@earendil-works/pi-ai/README.md +1 -0
  839. package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.d.ts +3 -1
  840. package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.d.ts.map +1 -1
  841. package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.js +6 -2
  842. package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.js.map +1 -1
  843. package/node_modules/@earendil-works/pi-ai/dist/api/azure-openai-responses.js.map +1 -1
  844. package/node_modules/@earendil-works/pi-ai/dist/api/bedrock-converse-stream.js.map +1 -1
  845. package/node_modules/@earendil-works/pi-ai/dist/api/bedrock-converse-stream.lazy.js.map +1 -1
  846. package/node_modules/@earendil-works/pi-ai/dist/api/context-room.d.ts.map +1 -1
  847. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent/gen/agent_pb.d.ts.map +1 -1
  848. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent/measure.js.map +1 -1
  849. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent/stream-retry.d.ts.map +1 -1
  850. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent.js.map +1 -1
  851. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent.lazy.js.map +1 -1
  852. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-conversation-rotation.js.map +1 -1
  853. package/node_modules/@earendil-works/pi-ai/dist/api/google-generative-ai.js.map +1 -1
  854. package/node_modules/@earendil-works/pi-ai/dist/api/google-shared.js.map +1 -1
  855. package/node_modules/@earendil-works/pi-ai/dist/api/google-vertex.js.map +1 -1
  856. package/node_modules/@earendil-works/pi-ai/dist/api/openai-codex-responses.js.map +1 -1
  857. package/node_modules/@earendil-works/pi-ai/dist/api/openai-completions.d.ts.map +1 -1
  858. package/node_modules/@earendil-works/pi-ai/dist/api/openai-completions.js +5 -0
  859. package/node_modules/@earendil-works/pi-ai/dist/api/openai-completions.js.map +1 -1
  860. package/node_modules/@earendil-works/pi-ai/dist/api/openai-images-edit.d.ts +4 -0
  861. package/node_modules/@earendil-works/pi-ai/dist/api/openai-images-edit.d.ts.map +1 -0
  862. package/node_modules/@earendil-works/pi-ai/dist/api/openai-images-edit.js +15 -0
  863. package/node_modules/@earendil-works/pi-ai/dist/api/openai-images-edit.js.map +1 -0
  864. package/node_modules/@earendil-works/pi-ai/dist/api/openai-images-params.d.ts +60 -0
  865. package/node_modules/@earendil-works/pi-ai/dist/api/openai-images-params.d.ts.map +1 -0
  866. package/node_modules/@earendil-works/pi-ai/dist/api/openai-images-params.js +93 -0
  867. package/node_modules/@earendil-works/pi-ai/dist/api/openai-images-params.js.map +1 -0
  868. package/node_modules/@earendil-works/pi-ai/dist/api/openai-images-result.d.ts +12 -0
  869. package/node_modules/@earendil-works/pi-ai/dist/api/openai-images-result.d.ts.map +1 -0
  870. package/node_modules/@earendil-works/pi-ai/dist/api/openai-images-result.js +96 -0
  871. package/node_modules/@earendil-works/pi-ai/dist/api/openai-images-result.js.map +1 -0
  872. package/node_modules/@earendil-works/pi-ai/dist/api/openai-images.d.ts +3 -6
  873. package/node_modules/@earendil-works/pi-ai/dist/api/openai-images.d.ts.map +1 -1
  874. package/node_modules/@earendil-works/pi-ai/dist/api/openai-images.js +26 -119
  875. package/node_modules/@earendil-works/pi-ai/dist/api/openai-images.js.map +1 -1
  876. package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses-shared.js.map +1 -1
  877. package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses.js.map +1 -1
  878. package/node_modules/@earendil-works/pi-ai/dist/api/pi-messages.d.ts.map +1 -1
  879. package/node_modules/@earendil-works/pi-ai/dist/api/pi-messages.js.map +1 -1
  880. package/node_modules/@earendil-works/pi-ai/dist/api/transform-messages.js.map +1 -1
  881. package/node_modules/@earendil-works/pi-ai/dist/api/warm-prompt-cache.js.map +1 -1
  882. package/node_modules/@earendil-works/pi-ai/dist/auth/credential-store.d.ts.map +1 -1
  883. package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/load.d.ts.map +1 -1
  884. package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/load.js.map +1 -1
  885. package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/openai-codex.js.map +1 -1
  886. package/node_modules/@earendil-works/pi-ai/dist/auth/oauth-refresh.d.ts +47 -0
  887. package/node_modules/@earendil-works/pi-ai/dist/auth/oauth-refresh.d.ts.map +1 -0
  888. package/node_modules/@earendil-works/pi-ai/dist/auth/oauth-refresh.js +126 -0
  889. package/node_modules/@earendil-works/pi-ai/dist/auth/oauth-refresh.js.map +1 -0
  890. package/node_modules/@earendil-works/pi-ai/dist/auth/pool/failover.d.ts.map +1 -1
  891. package/node_modules/@earendil-works/pi-ai/dist/auth/pool/select.d.ts.map +1 -1
  892. package/node_modules/@earendil-works/pi-ai/dist/auth/refresh-credential.d.ts +12 -0
  893. package/node_modules/@earendil-works/pi-ai/dist/auth/refresh-credential.d.ts.map +1 -0
  894. package/node_modules/@earendil-works/pi-ai/dist/auth/refresh-credential.js +44 -0
  895. package/node_modules/@earendil-works/pi-ai/dist/auth/refresh-credential.js.map +1 -0
  896. package/node_modules/@earendil-works/pi-ai/dist/auth/resolve.d.ts +2 -0
  897. package/node_modules/@earendil-works/pi-ai/dist/auth/resolve.d.ts.map +1 -1
  898. package/node_modules/@earendil-works/pi-ai/dist/auth/resolve.js +26 -35
  899. package/node_modules/@earendil-works/pi-ai/dist/auth/resolve.js.map +1 -1
  900. package/node_modules/@earendil-works/pi-ai/dist/compat.js.map +1 -1
  901. package/node_modules/@earendil-works/pi-ai/dist/cursor/model-capabilities.js.map +1 -1
  902. package/node_modules/@earendil-works/pi-ai/dist/cursor/selection-descriptor.js.map +1 -1
  903. package/node_modules/@earendil-works/pi-ai/dist/env-api-keys.d.ts.map +1 -1
  904. package/node_modules/@earendil-works/pi-ai/dist/env-api-keys.js +1 -0
  905. package/node_modules/@earendil-works/pi-ai/dist/env-api-keys.js.map +1 -1
  906. package/node_modules/@earendil-works/pi-ai/dist/image-models.generated.d.ts +99 -66
  907. package/node_modules/@earendil-works/pi-ai/dist/image-models.generated.d.ts.map +1 -1
  908. package/node_modules/@earendil-works/pi-ai/dist/image-models.generated.js +34 -1
  909. package/node_modules/@earendil-works/pi-ai/dist/image-models.generated.js.map +1 -1
  910. package/node_modules/@earendil-works/pi-ai/dist/images.d.ts +1 -0
  911. package/node_modules/@earendil-works/pi-ai/dist/images.d.ts.map +1 -1
  912. package/node_modules/@earendil-works/pi-ai/dist/images.js +1 -0
  913. package/node_modules/@earendil-works/pi-ai/dist/images.js.map +1 -1
  914. package/node_modules/@earendil-works/pi-ai/dist/models-store.d.ts.map +1 -1
  915. package/node_modules/@earendil-works/pi-ai/dist/models.d.ts.map +1 -1
  916. package/node_modules/@earendil-works/pi-ai/dist/models.generated.d.ts +2 -0
  917. package/node_modules/@earendil-works/pi-ai/dist/models.generated.d.ts.map +1 -1
  918. package/node_modules/@earendil-works/pi-ai/dist/models.generated.js +2 -0
  919. package/node_modules/@earendil-works/pi-ai/dist/models.generated.js.map +1 -1
  920. package/node_modules/@earendil-works/pi-ai/dist/models.js +3 -28
  921. package/node_modules/@earendil-works/pi-ai/dist/models.js.map +1 -1
  922. package/node_modules/@earendil-works/pi-ai/dist/node/provider-scope.d.ts.map +1 -1
  923. package/node_modules/@earendil-works/pi-ai/dist/providers/all.d.ts.map +1 -1
  924. package/node_modules/@earendil-works/pi-ai/dist/providers/all.js +2 -0
  925. package/node_modules/@earendil-works/pi-ai/dist/providers/all.js.map +1 -1
  926. package/node_modules/@earendil-works/pi-ai/dist/providers/data/.manifest.json +1 -1
  927. package/node_modules/@earendil-works/pi-ai/dist/providers/data/amazon-bedrock.json +1 -1
  928. package/node_modules/@earendil-works/pi-ai/dist/providers/data/nvidia.json +1 -1
  929. package/node_modules/@earendil-works/pi-ai/dist/providers/data/opencode-go.json +1 -1
  930. package/node_modules/@earendil-works/pi-ai/dist/providers/data/openrouter.json +1 -1
  931. package/node_modules/@earendil-works/pi-ai/dist/providers/data/venice.json +1 -0
  932. package/node_modules/@earendil-works/pi-ai/dist/providers/data/vercel-ai-gateway.json +1 -1
  933. package/node_modules/@earendil-works/pi-ai/dist/providers/faux.js.map +1 -1
  934. package/node_modules/@earendil-works/pi-ai/dist/providers/ollama.js.map +1 -1
  935. package/node_modules/@earendil-works/pi-ai/dist/providers/radius.js.map +1 -1
  936. package/node_modules/@earendil-works/pi-ai/dist/providers/venice.d.ts +3 -0
  937. package/node_modules/@earendil-works/pi-ai/dist/providers/venice.d.ts.map +1 -0
  938. package/node_modules/@earendil-works/pi-ai/dist/providers/venice.js +15 -0
  939. package/node_modules/@earendil-works/pi-ai/dist/providers/venice.js.map +1 -0
  940. package/node_modules/@earendil-works/pi-ai/dist/providers/venice.models.d.ts +4 -0
  941. package/node_modules/@earendil-works/pi-ai/dist/providers/venice.models.d.ts.map +1 -0
  942. package/node_modules/@earendil-works/pi-ai/dist/providers/venice.models.js +6 -0
  943. package/node_modules/@earendil-works/pi-ai/dist/providers/venice.models.js.map +1 -0
  944. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/context-transformer.js.map +1 -1
  945. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/anthropic-xml/recovery-wrapper-state.d.ts.map +1 -1
  946. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/kimi-xtml/parse.js.map +1 -1
  947. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/recovery-content-lifecycle.d.ts.map +1 -1
  948. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/recovery-event-stream.d.ts.map +1 -1
  949. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/recovery-native-projection.d.ts.map +1 -1
  950. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/recovery-native-projection.js.map +1 -1
  951. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/recovery-stream-terminal.d.ts.map +1 -1
  952. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/recovery-stream-wrapper.js.map +1 -1
  953. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/recovery-text-projection.d.ts.map +1 -1
  954. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/recovery-text-projection.js.map +1 -1
  955. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/stream-thinking-projection.d.ts.map +1 -1
  956. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/stream-wrapper-shared.d.ts.map +1 -1
  957. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/stream-wrapper-shared.js.map +1 -1
  958. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/stream-wrapper.js.map +1 -1
  959. package/node_modules/@earendil-works/pi-ai/dist/types.d.ts +20 -3
  960. package/node_modules/@earendil-works/pi-ai/dist/types.d.ts.map +1 -1
  961. package/node_modules/@earendil-works/pi-ai/dist/types.js.map +1 -1
  962. package/node_modules/@earendil-works/pi-ai/dist/utils/deferred-tools.js.map +1 -1
  963. package/node_modules/@earendil-works/pi-ai/dist/utils/event-stream.d.ts.map +1 -1
  964. package/node_modules/@earendil-works/pi-ai/dist/utils/prompt-cache-ttl.d.ts +3 -1
  965. package/node_modules/@earendil-works/pi-ai/dist/utils/prompt-cache-ttl.d.ts.map +1 -1
  966. package/node_modules/@earendil-works/pi-ai/dist/utils/prompt-cache-ttl.js.map +1 -1
  967. package/node_modules/@earendil-works/pi-ai/dist/utils/provider-retry.js.map +1 -1
  968. package/node_modules/@earendil-works/pi-ai/dist/utils/retry.js.map +1 -1
  969. package/node_modules/@earendil-works/pi-ai/dist/utils/validation.js.map +1 -1
  970. package/node_modules/@earendil-works/pi-ai/package.json +3 -3
  971. package/node_modules/@earendil-works/pi-pty/dist/loader.d.ts.map +1 -1
  972. package/node_modules/@earendil-works/pi-pty/dist/loader.js.map +1 -1
  973. package/node_modules/@earendil-works/pi-pty/dist/pipe-fallback.d.ts.map +1 -1
  974. package/node_modules/@earendil-works/pi-pty/dist/pipe-fallback.js.map +1 -1
  975. package/node_modules/@earendil-works/pi-pty/dist/quarantine.js.map +1 -1
  976. package/node_modules/@earendil-works/pi-pty/dist/registry-types.d.ts.map +1 -1
  977. package/node_modules/@earendil-works/pi-pty/dist/registry.d.ts.map +1 -1
  978. package/node_modules/@earendil-works/pi-pty/dist/registry.js.map +1 -1
  979. package/node_modules/@earendil-works/pi-pty/dist/screen.d.ts.map +1 -1
  980. package/node_modules/@earendil-works/pi-pty/dist/screen.js.map +1 -1
  981. package/node_modules/@earendil-works/pi-pty/dist/session-bun.js.map +1 -1
  982. package/node_modules/@earendil-works/pi-pty/dist/session.d.ts.map +1 -1
  983. package/node_modules/@earendil-works/pi-pty/dist/session.js.map +1 -1
  984. package/node_modules/@earendil-works/pi-pty/package.json +2 -2
  985. package/node_modules/@earendil-works/pi-telemetry/package.json +1 -1
  986. package/node_modules/@earendil-works/pi-tui/dist/alt-screen-search.d.ts.map +1 -1
  987. package/node_modules/@earendil-works/pi-tui/dist/autocomplete.d.ts.map +1 -1
  988. package/node_modules/@earendil-works/pi-tui/dist/autocomplete.js.map +1 -1
  989. package/node_modules/@earendil-works/pi-tui/dist/components/alt-screen-flash.d.ts.map +1 -1
  990. package/node_modules/@earendil-works/pi-tui/dist/components/box.d.ts.map +1 -1
  991. package/node_modules/@earendil-works/pi-tui/dist/components/cancellable-loader.d.ts.map +1 -1
  992. package/node_modules/@earendil-works/pi-tui/dist/components/editor.d.ts.map +1 -1
  993. package/node_modules/@earendil-works/pi-tui/dist/components/editor.js.map +1 -1
  994. package/node_modules/@earendil-works/pi-tui/dist/components/h-stack.d.ts.map +1 -1
  995. package/node_modules/@earendil-works/pi-tui/dist/components/h-stack.js.map +1 -1
  996. package/node_modules/@earendil-works/pi-tui/dist/components/image.d.ts.map +1 -1
  997. package/node_modules/@earendil-works/pi-tui/dist/components/image.js.map +1 -1
  998. package/node_modules/@earendil-works/pi-tui/dist/components/input.d.ts.map +1 -1
  999. package/node_modules/@earendil-works/pi-tui/dist/components/latex.d.ts.map +1 -1
  1000. package/node_modules/@earendil-works/pi-tui/dist/components/loader.d.ts.map +1 -1
  1001. package/node_modules/@earendil-works/pi-tui/dist/components/loader.js.map +1 -1
  1002. package/node_modules/@earendil-works/pi-tui/dist/components/markdown.d.ts.map +1 -1
  1003. package/node_modules/@earendil-works/pi-tui/dist/components/markdown.js.map +1 -1
  1004. package/node_modules/@earendil-works/pi-tui/dist/components/scroll-view.d.ts.map +1 -1
  1005. package/node_modules/@earendil-works/pi-tui/dist/components/scroll-view.js.map +1 -1
  1006. package/node_modules/@earendil-works/pi-tui/dist/components/select-list.d.ts.map +1 -1
  1007. package/node_modules/@earendil-works/pi-tui/dist/components/select-list.js.map +1 -1
  1008. package/node_modules/@earendil-works/pi-tui/dist/components/settings-list.d.ts.map +1 -1
  1009. package/node_modules/@earendil-works/pi-tui/dist/components/settings-list.js.map +1 -1
  1010. package/node_modules/@earendil-works/pi-tui/dist/components/spacer.d.ts.map +1 -1
  1011. package/node_modules/@earendil-works/pi-tui/dist/components/spacer.js.map +1 -1
  1012. package/node_modules/@earendil-works/pi-tui/dist/components/stack.d.ts.map +1 -1
  1013. package/node_modules/@earendil-works/pi-tui/dist/components/stack.js.map +1 -1
  1014. package/node_modules/@earendil-works/pi-tui/dist/components/text.d.ts.map +1 -1
  1015. package/node_modules/@earendil-works/pi-tui/dist/components/text.js.map +1 -1
  1016. package/node_modules/@earendil-works/pi-tui/dist/components/truncated-text.d.ts.map +1 -1
  1017. package/node_modules/@earendil-works/pi-tui/dist/components/truncated-text.js.map +1 -1
  1018. package/node_modules/@earendil-works/pi-tui/dist/components/v-stack.d.ts.map +1 -1
  1019. package/node_modules/@earendil-works/pi-tui/dist/components/v-stack.js.map +1 -1
  1020. package/node_modules/@earendil-works/pi-tui/dist/image-markers.d.ts.map +1 -1
  1021. package/node_modules/@earendil-works/pi-tui/dist/index.js.map +1 -1
  1022. package/node_modules/@earendil-works/pi-tui/dist/keybindings.d.ts.map +1 -1
  1023. package/node_modules/@earendil-works/pi-tui/dist/keybindings.js.map +1 -1
  1024. package/node_modules/@earendil-works/pi-tui/dist/keys.d.ts.map +1 -1
  1025. package/node_modules/@earendil-works/pi-tui/dist/keys.js.map +1 -1
  1026. package/node_modules/@earendil-works/pi-tui/dist/kill-ring.d.ts.map +1 -1
  1027. package/node_modules/@earendil-works/pi-tui/dist/mux.js.map +1 -1
  1028. package/node_modules/@earendil-works/pi-tui/dist/native-modifiers.js.map +1 -1
  1029. package/node_modules/@earendil-works/pi-tui/dist/native-module-path.js.map +1 -1
  1030. package/node_modules/@earendil-works/pi-tui/dist/paste-markers.d.ts.map +1 -1
  1031. package/node_modules/@earendil-works/pi-tui/dist/stdin-buffer.d.ts.map +1 -1
  1032. package/node_modules/@earendil-works/pi-tui/dist/stdin-buffer.js.map +1 -1
  1033. package/node_modules/@earendil-works/pi-tui/dist/terminal-capabilities.js.map +1 -1
  1034. package/node_modules/@earendil-works/pi-tui/dist/terminal-image.js.map +1 -1
  1035. package/node_modules/@earendil-works/pi-tui/dist/terminal.d.ts.map +1 -1
  1036. package/node_modules/@earendil-works/pi-tui/dist/terminal.js.map +1 -1
  1037. package/node_modules/@earendil-works/pi-tui/dist/tmux-image-probe.js.map +1 -1
  1038. package/node_modules/@earendil-works/pi-tui/dist/tui-alt-screen.d.ts.map +1 -1
  1039. package/node_modules/@earendil-works/pi-tui/dist/tui-alt-screen.js.map +1 -1
  1040. package/node_modules/@earendil-works/pi-tui/dist/tui-main-screen.d.ts.map +1 -1
  1041. package/node_modules/@earendil-works/pi-tui/dist/tui.d.ts.map +1 -1
  1042. package/node_modules/@earendil-works/pi-tui/dist/tui.js.map +1 -1
  1043. package/node_modules/@earendil-works/pi-tui/dist/undo-stack.d.ts.map +1 -1
  1044. package/node_modules/@earendil-works/pi-tui/dist/utils.js.map +1 -1
  1045. package/node_modules/@earendil-works/pi-tui/package.json +2 -2
  1046. package/node_modules/css-tree/cjs/data-patch.cjs +853 -5
  1047. package/node_modules/css-tree/cjs/data.cjs +13598 -3
  1048. package/node_modules/css-tree/cjs/version.cjs +1 -3
  1049. package/node_modules/css-tree/lib/data-patch.js +853 -4
  1050. package/node_modules/css-tree/lib/data.js +13598 -5
  1051. package/node_modules/css-tree/lib/version.js +1 -5
  1052. package/package.json +8 -8
  1053. package/vendor/pi-client/client.d.ts.map +1 -1
  1054. package/vendor/pi-client/client.js.map +1 -1
  1055. package/vendor/pi-client/connection.d.ts.map +1 -1
  1056. package/vendor/pi-client/connection.js.map +1 -1
  1057. package/vendor/pi-client/errors.d.ts.map +1 -1
  1058. package/vendor/pi-client/session-handle.d.ts.map +1 -1
  1059. package/vendor/pi-client/state.d.ts.map +1 -1
  1060. package/vendor/pi-protocol/cbor/decoder.js.map +1 -1
  1061. package/vendor/pi-protocol/cbor/options.d.ts.map +1 -1
  1062. package/vendor/pi-protocol/codec.d.ts.map +1 -1
  1063. package/vendor/pi-protocol/codec.js.map +1 -1
  1064. package/vendor/pi-protocol/framing.d.ts.map +1 -1
  1065. package/vendor/pi-protocol/schemas.d.ts +678 -678
@@ -3,35 +3,59 @@
3
3
  * a slash command such as `/gpt-account add`, mirroring what the `/login`
4
4
  * dialog and `modes/rpc/login-prompts.ts` do for their surfaces.
5
5
  *
6
- * Two decisions are not visible from the code alone: every dialog is bound to
7
- * the per-prompt `AuthPrompt.signal` as well as the command signal, so a
8
- * manual-code dialog is released when the provider's local callback server
9
- * wins the race (`loginOpenAICodex`); and `auth_url` opens the browser only in
10
- * the TUI, because an RPC client renders the notice on its own machine.
6
+ * Three decisions are not visible from the code alone. The login owns its own
7
+ * `AbortController` rather than borrowing `ctx.signal`: that signal belongs to
8
+ * the active run, so binding a login to it made Esc/steer/timeout on the
9
+ * response kill a browser login the user never acted on (#1542). The login is
10
+ * cancelled only by dismissing one of its own dialogs or by re-issuing the
11
+ * command for the same provider. Every dialog is also bound to the per-prompt
12
+ * `AuthPrompt.signal`, so a manual-code dialog is released without cancelling
13
+ * the login when the provider's local callback server wins the race
14
+ * (`loginOpenAICodex`). `auth_url` opens the browser only in the TUI, because
15
+ * an RPC client renders the notice on its own machine.
11
16
  */
12
17
  import { openBrowser as openPlatformBrowser } from "../../../utils/open-browser.js";
13
18
  export const LOGIN_CANCELLED_MESSAGE = "Login cancelled";
19
+ const pendingLogins = new Map();
20
+ function cancelledError() {
21
+ return new Error(LOGIN_CANCELLED_MESSAGE);
22
+ }
23
+ function ownLoginController(providerId) {
24
+ const controller = new AbortController();
25
+ if (providerId === undefined)
26
+ return controller;
27
+ pendingLogins.get(providerId)?.abort(cancelledError());
28
+ pendingLogins.set(providerId, controller);
29
+ controller.signal.addEventListener("abort", () => {
30
+ if (pendingLogins.get(providerId) === controller)
31
+ pendingLogins.delete(providerId);
32
+ }, { once: true });
33
+ return controller;
34
+ }
14
35
  export function createExtensionLoginInteraction(ctx, options) {
15
36
  const openBrowser = options.openBrowser ?? openPlatformBrowser;
37
+ const controller = ownLoginController(options.providerId);
16
38
  return {
17
- signal: ctx.signal,
18
- prompt: (prompt) => relayPrompt(ctx, prompt),
39
+ signal: controller.signal,
40
+ prompt: (prompt) => relayPrompt(ctx, controller, prompt),
19
41
  notify: (event) => relayEvent(ctx, event, options.providerLabel, openBrowser),
20
42
  };
21
43
  }
22
- function dialogSignal(commandSignal, promptSignal) {
23
- if (commandSignal && promptSignal)
24
- return AbortSignal.any([commandSignal, promptSignal]);
25
- return commandSignal ?? promptSignal;
44
+ function dialogSignal(loginSignal, promptSignal) {
45
+ return promptSignal ? AbortSignal.any([loginSignal, promptSignal]) : loginSignal;
26
46
  }
27
- async function relayPrompt(ctx, prompt) {
28
- const signal = dialogSignal(ctx.signal, prompt.signal);
29
- if (signal?.aborted)
30
- throw new Error(LOGIN_CANCELLED_MESSAGE);
31
- const dialogOptions = signal ? { signal } : undefined;
32
- const answer = await answerPrompt(ctx, prompt, dialogOptions);
33
- if (answer === undefined || signal?.aborted)
34
- throw new Error(LOGIN_CANCELLED_MESSAGE);
47
+ async function relayPrompt(ctx, login, prompt) {
48
+ const signal = dialogSignal(login.signal, prompt.signal);
49
+ if (signal.aborted)
50
+ throw cancelledError();
51
+ const answer = await answerPrompt(ctx, prompt, { signal });
52
+ if (signal.aborted)
53
+ throw cancelledError();
54
+ if (answer === undefined) {
55
+ // The user dismissed the login's own dialog: that is the one cancellation the login owns.
56
+ login.abort(cancelledError());
57
+ throw cancelledError();
58
+ }
35
59
  return answer;
36
60
  }
37
61
  async function answerPrompt(ctx, prompt, dialogOptions) {
@@ -1 +1 @@
1
- {"version":3,"file":"oauth-login-interaction.js","sourceRoot":"","sources":["../../../../src/core/extensions/builtin/oauth-login-interaction.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Relay a provider OAuth login (`modelRuntime.login`) onto the extension UI of\n * a slash command such as `/gpt-account add`, mirroring what the `/login`\n * dialog and `modes/rpc/login-prompts.ts` do for their surfaces.\n *\n * Two decisions are not visible from the code alone: every dialog is bound to\n * the per-prompt `AuthPrompt.signal` as well as the command signal, so a\n * manual-code dialog is released when the provider's local callback server\n * wins the race (`loginOpenAICodex`); and `auth_url` opens the browser only in\n * the TUI, because an RPC client renders the notice on its own machine.\n */\n\nimport type { AuthEvent, AuthInteraction, AuthPrompt } from \"@earendil-works/pi-ai\";\nimport { openBrowser as openPlatformBrowser } from \"../../../utils/open-browser.ts\";\nimport type { ExtensionCommandContext } from \"../types.ts\";\n\nexport const LOGIN_CANCELLED_MESSAGE = \"Login cancelled\";\n\nexport interface ExtensionLoginInteractionOptions {\n\t/** Provider name rendered in notices, e.g. \"OpenAI Codex OAuth\". */\n\treadonly providerLabel: string;\n\t/** Browser launcher for `auth_url` events in the TUI; tests inject a recorder. */\n\treadonly openBrowser?: ((url: string) => void) | undefined;\n}\n\ntype LoginCommandContext = Pick<ExtensionCommandContext, \"mode\" | \"signal\" | \"ui\">;\n\nexport function createExtensionLoginInteraction(\n\tctx: LoginCommandContext,\n\toptions: ExtensionLoginInteractionOptions,\n): AuthInteraction {\n\tconst openBrowser = options.openBrowser ?? openPlatformBrowser;\n\treturn {\n\t\tsignal: ctx.signal,\n\t\tprompt: (prompt) => relayPrompt(ctx, prompt),\n\t\tnotify: (event) => relayEvent(ctx, event, options.providerLabel, openBrowser),\n\t};\n}\n\nfunction dialogSignal(\n\tcommandSignal: AbortSignal | undefined,\n\tpromptSignal: AbortSignal | undefined,\n): AbortSignal | undefined {\n\tif (commandSignal && promptSignal) return AbortSignal.any([commandSignal, promptSignal]);\n\treturn commandSignal ?? promptSignal;\n}\n\nasync function relayPrompt(ctx: LoginCommandContext, prompt: AuthPrompt): Promise<string> {\n\tconst signal = dialogSignal(ctx.signal, prompt.signal);\n\tif (signal?.aborted) throw new Error(LOGIN_CANCELLED_MESSAGE);\n\tconst dialogOptions = signal ? { signal } : undefined;\n\tconst answer = await answerPrompt(ctx, prompt, dialogOptions);\n\tif (answer === undefined || signal?.aborted) throw new Error(LOGIN_CANCELLED_MESSAGE);\n\treturn answer;\n}\n\nasync function answerPrompt(\n\tctx: LoginCommandContext,\n\tprompt: AuthPrompt,\n\tdialogOptions: { signal: AbortSignal } | undefined,\n): Promise<string | undefined> {\n\tswitch (prompt.type) {\n\t\tcase \"select\": {\n\t\t\tconst label = await ctx.ui.select(\n\t\t\t\tprompt.message,\n\t\t\t\tprompt.options.map((option) => option.label),\n\t\t\t\tdialogOptions,\n\t\t\t);\n\t\t\treturn prompt.options.find((option) => option.label === label)?.id;\n\t\t}\n\t\tcase \"text\":\n\t\tcase \"secret\":\n\t\tcase \"manual_code\":\n\t\t\treturn ctx.ui.input(prompt.message, prompt.placeholder, dialogOptions);\n\t}\n}\n\nfunction relayEvent(\n\tctx: LoginCommandContext,\n\tevent: AuthEvent,\n\tproviderLabel: string,\n\topenBrowser: (url: string) => void,\n): void {\n\tswitch (event.type) {\n\t\tcase \"auth_url\": {\n\t\t\tif (ctx.mode === \"tui\") openBrowser(event.url);\n\t\t\tconst lines = [`Open this URL to authorize ${providerLabel}:`, event.url];\n\t\t\tif (event.instructions) lines.push(event.instructions);\n\t\t\tctx.ui.notify(lines.join(\"\\n\"), \"info\");\n\t\t\treturn;\n\t\t}\n\t\tcase \"device_code\":\n\t\t\tctx.ui.notify(\n\t\t\t\t[\n\t\t\t\t\t`Open this URL to authorize ${providerLabel}:`,\n\t\t\t\t\tevent.verificationUri,\n\t\t\t\t\t`Enter code: ${event.userCode}`,\n\t\t\t\t].join(\"\\n\"),\n\t\t\t\t\"info\",\n\t\t\t);\n\t\t\treturn;\n\t\tcase \"info\": {\n\t\t\tconst links = (event.links ?? []).map((link) => (link.label ? `${link.label}: ${link.url}` : link.url));\n\t\t\tctx.ui.notify([event.message, ...links].join(\"\\n\"), \"info\");\n\t\t\treturn;\n\t\t}\n\t\tcase \"progress\":\n\t\t\tctx.ui.notify(event.message, \"info\");\n\t\t\treturn;\n\t}\n}\n"]}
1
+ {"version":3,"file":"oauth-login-interaction.js","sourceRoot":"","sources":["../../../../src/core/extensions/builtin/oauth-login-interaction.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Relay a provider OAuth login (`modelRuntime.login`) onto the extension UI of\n * a slash command such as `/gpt-account add`, mirroring what the `/login`\n * dialog and `modes/rpc/login-prompts.ts` do for their surfaces.\n *\n * Three decisions are not visible from the code alone. The login owns its own\n * `AbortController` rather than borrowing `ctx.signal`: that signal belongs to\n * the active run, so binding a login to it made Esc/steer/timeout on the\n * response kill a browser login the user never acted on (#1542). The login is\n * cancelled only by dismissing one of its own dialogs or by re-issuing the\n * command for the same provider. Every dialog is also bound to the per-prompt\n * `AuthPrompt.signal`, so a manual-code dialog is released without cancelling\n * the login when the provider's local callback server wins the race\n * (`loginOpenAICodex`). `auth_url` opens the browser only in the TUI, because\n * an RPC client renders the notice on its own machine.\n */\n\nimport type { AuthEvent, AuthInteraction, AuthPrompt } from \"@earendil-works/pi-ai\";\nimport { openBrowser as openPlatformBrowser } from \"../../../utils/open-browser.ts\";\nimport type { ExtensionCommandContext } from \"../types.ts\";\n\nexport const LOGIN_CANCELLED_MESSAGE = \"Login cancelled\";\n\nexport interface ExtensionLoginInteractionOptions {\n\t/** Provider name rendered in notices, e.g. \"OpenAI Codex OAuth\". */\n\treadonly providerLabel: string;\n\t/** Provider id; a later login for the same id cancels this one. */\n\treadonly providerId?: string | undefined;\n\t/** Browser launcher for `auth_url` events in the TUI; tests inject a recorder. */\n\treadonly openBrowser?: ((url: string) => void) | undefined;\n}\n\ntype LoginCommandContext = Pick<ExtensionCommandContext, \"mode\" | \"ui\">;\n\nconst pendingLogins = new Map<string, AbortController>();\n\nfunction cancelledError(): Error {\n\treturn new Error(LOGIN_CANCELLED_MESSAGE);\n}\n\nfunction ownLoginController(providerId: string | undefined): AbortController {\n\tconst controller = new AbortController();\n\tif (providerId === undefined) return controller;\n\tpendingLogins.get(providerId)?.abort(cancelledError());\n\tpendingLogins.set(providerId, controller);\n\tcontroller.signal.addEventListener(\n\t\t\"abort\",\n\t\t() => {\n\t\t\tif (pendingLogins.get(providerId) === controller) pendingLogins.delete(providerId);\n\t\t},\n\t\t{ once: true },\n\t);\n\treturn controller;\n}\n\nexport function createExtensionLoginInteraction(\n\tctx: LoginCommandContext,\n\toptions: ExtensionLoginInteractionOptions,\n): AuthInteraction {\n\tconst openBrowser = options.openBrowser ?? openPlatformBrowser;\n\tconst controller = ownLoginController(options.providerId);\n\treturn {\n\t\tsignal: controller.signal,\n\t\tprompt: (prompt) => relayPrompt(ctx, controller, prompt),\n\t\tnotify: (event) => relayEvent(ctx, event, options.providerLabel, openBrowser),\n\t};\n}\n\nfunction dialogSignal(loginSignal: AbortSignal, promptSignal: AbortSignal | undefined): AbortSignal {\n\treturn promptSignal ? AbortSignal.any([loginSignal, promptSignal]) : loginSignal;\n}\n\nasync function relayPrompt(ctx: LoginCommandContext, login: AbortController, prompt: AuthPrompt): Promise<string> {\n\tconst signal = dialogSignal(login.signal, prompt.signal);\n\tif (signal.aborted) throw cancelledError();\n\tconst answer = await answerPrompt(ctx, prompt, { signal });\n\tif (signal.aborted) throw cancelledError();\n\tif (answer === undefined) {\n\t\t// The user dismissed the login's own dialog: that is the one cancellation the login owns.\n\t\tlogin.abort(cancelledError());\n\t\tthrow cancelledError();\n\t}\n\treturn answer;\n}\n\nasync function answerPrompt(\n\tctx: LoginCommandContext,\n\tprompt: AuthPrompt,\n\tdialogOptions: { signal: AbortSignal },\n): Promise<string | undefined> {\n\tswitch (prompt.type) {\n\t\tcase \"select\": {\n\t\t\tconst label = await ctx.ui.select(\n\t\t\t\tprompt.message,\n\t\t\t\tprompt.options.map((option) => option.label),\n\t\t\t\tdialogOptions,\n\t\t\t);\n\t\t\treturn prompt.options.find((option) => option.label === label)?.id;\n\t\t}\n\t\tcase \"text\":\n\t\tcase \"secret\":\n\t\tcase \"manual_code\":\n\t\t\treturn ctx.ui.input(prompt.message, prompt.placeholder, dialogOptions);\n\t}\n}\n\nfunction relayEvent(\n\tctx: LoginCommandContext,\n\tevent: AuthEvent,\n\tproviderLabel: string,\n\topenBrowser: (url: string) => void,\n): void {\n\tswitch (event.type) {\n\t\tcase \"auth_url\": {\n\t\t\tif (ctx.mode === \"tui\") openBrowser(event.url);\n\t\t\tconst lines = [`Open this URL to authorize ${providerLabel}:`, event.url];\n\t\t\tif (event.instructions) lines.push(event.instructions);\n\t\t\tctx.ui.notify(lines.join(\"\\n\"), \"info\");\n\t\t\treturn;\n\t\t}\n\t\tcase \"device_code\":\n\t\t\tctx.ui.notify(\n\t\t\t\t[\n\t\t\t\t\t`Open this URL to authorize ${providerLabel}:`,\n\t\t\t\t\tevent.verificationUri,\n\t\t\t\t\t`Enter code: ${event.userCode}`,\n\t\t\t\t].join(\"\\n\"),\n\t\t\t\t\"info\",\n\t\t\t);\n\t\t\treturn;\n\t\tcase \"info\": {\n\t\t\tconst links = (event.links ?? []).map((link) => (link.label ? `${link.label}: ${link.url}` : link.url));\n\t\t\tctx.ui.notify([event.message, ...links].join(\"\\n\"), \"info\");\n\t\t\treturn;\n\t\t}\n\t\tcase \"progress\":\n\t\t\tctx.ui.notify(event.message, \"info\");\n\t\t\treturn;\n\t}\n}\n"]}
@@ -7,9 +7,11 @@ export declare const NATIVE_IMAGE_GEN_TOOL_TYPE = "image_generation";
7
7
  *
8
8
  * Native entries are always removed first, so a payload that already carries one
9
9
  * (a replayed request, a second injector, a dated tool variant) can never end up
10
- * with duplicates and never leaks to a backend that does not implement it. When
11
- * nothing changes the ORIGINAL payload reference is returned, because payload
12
- * hooks chain and an unconditional copy would defeat identity checks downstream.
10
+ * with duplicates and never leaks to a backend that does not implement it. The
11
+ * injected entry pins `model`: without it the Responses API falls back to
12
+ * gpt-image-1. When nothing changes the ORIGINAL payload reference is returned,
13
+ * because payload hooks chain and an unconditional copy would defeat identity
14
+ * checks downstream.
13
15
  */
14
16
  export declare function applyImageGenerationTools(payload: unknown, mode: ImageGenMode): unknown;
15
17
  //# sourceMappingURL=inject.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"inject.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/openai-image-gen/inject.ts"],"names":[],"mappings":"AAEA,+DAA+D;AAC/D,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,QAAQ,GAAG,aAAa,CAAC;AAE/D,eAAO,MAAM,0BAA0B,qBAAqB,CAAC;AAuB7D;;;;;;;;;GASG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,GAAG,OAAO,CAevF"}
1
+ {"version":3,"file":"inject.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/openai-image-gen/inject.ts"],"names":[],"mappings":"AAGA,+DAA+D;AAC/D,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,QAAQ,GAAG,aAAa,CAAC;AAE/D,eAAO,MAAM,0BAA0B,qBAAqB,CAAC;AAuB7D;;;;;;;;;;;GAWG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,GAAG,OAAO,CAevF"}
@@ -1,3 +1,4 @@
1
+ import { DEFAULT_IMAGE_MODEL } from "../imagegen/params.js";
1
2
  import { GENERATE_IMAGE_TOOL_NAME } from "../imagegen/tool.js";
2
3
  export const NATIVE_IMAGE_GEN_TOOL_TYPE = "image_generation";
3
4
  function isRecord(value) {
@@ -23,9 +24,11 @@ function isGenerateImageFunctionTool(tool) {
23
24
  *
24
25
  * Native entries are always removed first, so a payload that already carries one
25
26
  * (a replayed request, a second injector, a dated tool variant) can never end up
26
- * with duplicates and never leaks to a backend that does not implement it. When
27
- * nothing changes the ORIGINAL payload reference is returned, because payload
28
- * hooks chain and an unconditional copy would defeat identity checks downstream.
27
+ * with duplicates and never leaks to a backend that does not implement it. The
28
+ * injected entry pins `model`: without it the Responses API falls back to
29
+ * gpt-image-1. When nothing changes the ORIGINAL payload reference is returned,
30
+ * because payload hooks chain and an unconditional copy would defeat identity
31
+ * checks downstream.
29
32
  */
30
33
  export function applyImageGenerationTools(payload, mode) {
31
34
  if (!isRecord(payload))
@@ -37,6 +40,6 @@ export function applyImageGenerationTools(payload, mode) {
37
40
  if (mode !== "native") {
38
41
  return removed ? { ...payload, tools: kept } : payload;
39
42
  }
40
- return { ...payload, tools: [...kept, { type: NATIVE_IMAGE_GEN_TOOL_TYPE }] };
43
+ return { ...payload, tools: [...kept, { type: NATIVE_IMAGE_GEN_TOOL_TYPE, model: DEFAULT_IMAGE_MODEL }] };
41
44
  }
42
45
  //# sourceMappingURL=inject.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"inject.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/openai-image-gen/inject.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAK/D,MAAM,CAAC,MAAM,0BAA0B,GAAG,kBAAkB,CAAC;AAE7D,SAAS,QAAQ,CAAC,KAAc;IAC/B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAC;AACpD,CAAC;AAED,SAAS,oBAAoB,CAAC,IAAa;IAC1C,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IAClC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;IACvB,OAAO,CACN,OAAO,IAAI,KAAK,QAAQ;QACxB,CAAC,IAAI,KAAK,0BAA0B,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,0BAA0B,GAAG,CAAC,CAAC,CAC1F,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAS,2BAA2B,CAAC,IAAa;IACjD,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,wBAAwB,CAAC;AACjE,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,yBAAyB,CAAC,OAAgB,EAAE,IAAkB;IAC7E,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;QAAE,OAAO,OAAO,CAAC;IAEvC,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IACvE,MAAM,iBAAiB,GAAG,IAAI,KAAK,QAAQ,CAAC;IAC5C,MAAM,IAAI,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,CAChC,CAAC,IAAa,EAAE,EAAE,CAAC,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,iBAAiB,IAAI,2BAA2B,CAAC,IAAI,CAAC,CAAC,CAC3G,CAAC;IACF,MAAM,OAAO,GAAG,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC;IAErD,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QACvB,OAAO,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;IACxD,CAAC;IAED,OAAO,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,EAAE,IAAI,EAAE,0BAA0B,EAAE,CAAC,EAAE,CAAC;AAC/E,CAAC","sourcesContent":["import { GENERATE_IMAGE_TOOL_NAME } from \"../imagegen/tool.ts\";\n\n/** Which image-generation surface owns the current request. */\nexport type ImageGenMode = \"native\" | \"client\" | \"unavailable\";\n\nexport const NATIVE_IMAGE_GEN_TOOL_TYPE = \"image_generation\";\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null;\n}\n\nfunction isNativeImageGenTool(tool: unknown): boolean {\n\tif (!isRecord(tool)) return false;\n\tconst type = tool.type;\n\treturn (\n\t\ttypeof type === \"string\" &&\n\t\t(type === NATIVE_IMAGE_GEN_TOOL_TYPE || type.startsWith(`${NATIVE_IMAGE_GEN_TOOL_TYPE}_`))\n\t);\n}\n\n/**\n * Matches the client tool by name rather than by `type`: extension and faux\n * payloads describe function tools without a `type` discriminator.\n */\nfunction isGenerateImageFunctionTool(tool: unknown): boolean {\n\treturn isRecord(tool) && tool.name === GENERATE_IMAGE_TOOL_NAME;\n}\n\n/**\n * Enforces mutual exclusion between the client `generate_image` function tool\n * and the OpenAI Responses `image_generation` server tool at the wire level.\n *\n * Native entries are always removed first, so a payload that already carries one\n * (a replayed request, a second injector, a dated tool variant) can never end up\n * with duplicates and never leaks to a backend that does not implement it. When\n * nothing changes the ORIGINAL payload reference is returned, because payload\n * hooks chain and an unconditional copy would defeat identity checks downstream.\n */\nexport function applyImageGenerationTools(payload: unknown, mode: ImageGenMode): unknown {\n\tif (!isRecord(payload)) return payload;\n\n\tconst tools = Array.isArray(payload.tools) ? payload.tools : undefined;\n\tconst stripFunctionTool = mode !== \"client\";\n\tconst kept = (tools ?? []).filter(\n\t\t(tool: unknown) => !isNativeImageGenTool(tool) && !(stripFunctionTool && isGenerateImageFunctionTool(tool)),\n\t);\n\tconst removed = (tools?.length ?? 0) !== kept.length;\n\n\tif (mode !== \"native\") {\n\t\treturn removed ? { ...payload, tools: kept } : payload;\n\t}\n\n\treturn { ...payload, tools: [...kept, { type: NATIVE_IMAGE_GEN_TOOL_TYPE }] };\n}\n"]}
1
+ {"version":3,"file":"inject.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/openai-image-gen/inject.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAK/D,MAAM,CAAC,MAAM,0BAA0B,GAAG,kBAAkB,CAAC;AAE7D,SAAS,QAAQ,CAAC,KAAc;IAC/B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAC;AACpD,CAAC;AAED,SAAS,oBAAoB,CAAC,IAAa;IAC1C,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IAClC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;IACvB,OAAO,CACN,OAAO,IAAI,KAAK,QAAQ;QACxB,CAAC,IAAI,KAAK,0BAA0B,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,0BAA0B,GAAG,CAAC,CAAC,CAC1F,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAS,2BAA2B,CAAC,IAAa;IACjD,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,wBAAwB,CAAC;AACjE,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,yBAAyB,CAAC,OAAgB,EAAE,IAAkB;IAC7E,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;QAAE,OAAO,OAAO,CAAC;IAEvC,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IACvE,MAAM,iBAAiB,GAAG,IAAI,KAAK,QAAQ,CAAC;IAC5C,MAAM,IAAI,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,CAChC,CAAC,IAAa,EAAE,EAAE,CAAC,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,iBAAiB,IAAI,2BAA2B,CAAC,IAAI,CAAC,CAAC,CAC3G,CAAC;IACF,MAAM,OAAO,GAAG,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC;IAErD,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QACvB,OAAO,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;IACxD,CAAC;IAED,OAAO,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,EAAE,IAAI,EAAE,0BAA0B,EAAE,KAAK,EAAE,mBAAmB,EAAE,CAAC,EAAE,CAAC;AAC3G,CAAC","sourcesContent":["import { DEFAULT_IMAGE_MODEL } from \"../imagegen/params.ts\";\nimport { GENERATE_IMAGE_TOOL_NAME } from \"../imagegen/tool.ts\";\n\n/** Which image-generation surface owns the current request. */\nexport type ImageGenMode = \"native\" | \"client\" | \"unavailable\";\n\nexport const NATIVE_IMAGE_GEN_TOOL_TYPE = \"image_generation\";\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null;\n}\n\nfunction isNativeImageGenTool(tool: unknown): boolean {\n\tif (!isRecord(tool)) return false;\n\tconst type = tool.type;\n\treturn (\n\t\ttypeof type === \"string\" &&\n\t\t(type === NATIVE_IMAGE_GEN_TOOL_TYPE || type.startsWith(`${NATIVE_IMAGE_GEN_TOOL_TYPE}_`))\n\t);\n}\n\n/**\n * Matches the client tool by name rather than by `type`: extension and faux\n * payloads describe function tools without a `type` discriminator.\n */\nfunction isGenerateImageFunctionTool(tool: unknown): boolean {\n\treturn isRecord(tool) && tool.name === GENERATE_IMAGE_TOOL_NAME;\n}\n\n/**\n * Enforces mutual exclusion between the client `generate_image` function tool\n * and the OpenAI Responses `image_generation` server tool at the wire level.\n *\n * Native entries are always removed first, so a payload that already carries one\n * (a replayed request, a second injector, a dated tool variant) can never end up\n * with duplicates and never leaks to a backend that does not implement it. The\n * injected entry pins `model`: without it the Responses API falls back to\n * gpt-image-1. When nothing changes the ORIGINAL payload reference is returned,\n * because payload hooks chain and an unconditional copy would defeat identity\n * checks downstream.\n */\nexport function applyImageGenerationTools(payload: unknown, mode: ImageGenMode): unknown {\n\tif (!isRecord(payload)) return payload;\n\n\tconst tools = Array.isArray(payload.tools) ? payload.tools : undefined;\n\tconst stripFunctionTool = mode !== \"client\";\n\tconst kept = (tools ?? []).filter(\n\t\t(tool: unknown) => !isNativeImageGenTool(tool) && !(stripFunctionTool && isGenerateImageFunctionTool(tool)),\n\t);\n\tconst removed = (tools?.length ?? 0) !== kept.length;\n\n\tif (mode !== \"native\") {\n\t\treturn removed ? { ...payload, tools: kept } : payload;\n\t}\n\n\treturn { ...payload, tools: [...kept, { type: NATIVE_IMAGE_GEN_TOOL_TYPE, model: DEFAULT_IMAGE_MODEL }] };\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"arity.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/permission-system/arity.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,SAAS;mBACN,MAAM,EAAE,GAAG,MAAM,EAAE;CASlC,CAAC"}
1
+ {"version":3,"file":"arity.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/permission-system/arity.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,SAAS;IACrB,MAAM,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE;CASlC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"parsers.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/permission-system/parsers.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AAG7D,gEAAgE;AAChE,MAAM,MAAM,iBAAiB,GAAG,IAAI,CAAC,OAAO,EAAE,YAAY,GAAG,UAAU,GAAG,QAAQ,CAAC,CAAC;AAEpF,wEAAwE;AACxE,MAAM,MAAM,oBAAoB,GAAG,CAClC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,GAAG,EAAE,MAAM,KACP,iBAAiB,EAAE,CAAC;AAmEzB,oDAAoD;AACpD,qBAAa,cAAc;IAC1B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA2C;IAEnE,4CAA4C;IAC5C,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,oBAAoB,GAAG,IAAI;IAI9D,gDAAgD;IAChD,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,iBAAiB,EAAE;CAOzF;AAED,+DAA+D;AAC/D,wBAAgB,2BAA2B,IAAI,cAAc,CAgK5D"}
1
+ {"version":3,"file":"parsers.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/permission-system/parsers.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AAG7D,gEAAgE;AAChE,MAAM,MAAM,iBAAiB,GAAG,IAAI,CAAC,OAAO,EAAE,YAAY,GAAG,UAAU,GAAG,QAAQ,CAAC,CAAC;AAEpF,wEAAwE;AACxE,MAAM,MAAM,oBAAoB,GAAG,CAClC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,GAAG,EAAE,MAAM,KACP,iBAAiB,EAAE,CAAC;AAmEzB,oDAAoD;AACpD,qBAAa,cAAc;IAC1B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA2C;IAEnE,4CAA4C;IAC5C,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,oBAAoB,GAAG,IAAI,CAE7D;IAED,gDAAgD;IAChD,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,iBAAiB,EAAE,CAMxF;CACD;AAED,+DAA+D;AAC/D,wBAAgB,2BAA2B,IAAI,cAAc,CAgK5D"}
@@ -1 +1 @@
1
- {"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/permission-system/prompt.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ExtensionContext } from \"../../types.ts\";\nimport type { Reply, ReplyInput, Request } from \"./types.ts\";\n\nexport async function showPermissionPrompt(ctx: ExtensionContext, request: Request): Promise<ReplyInput> {\n\tconst title = `Permission required: ${request.permission}`;\n\tconst message = formatRequestForDisplay(request);\n\n\tconst displayTitle = `${title}\\n\\n${message}`;\n\n\tconst options = [\"Allow once\", \"Allow always\", \"Deny\", \"Deny with feedback\"];\n\n\tconst choice = await ctx.ui.select(displayTitle, options);\n\n\tif (choice === \"Deny with feedback\") {\n\t\tconst feedback = await ctx.ui.input(\"Feedback\", \"Why are you denying this permission? (optional)\");\n\t\treturn {\n\t\t\trequestID: request.id,\n\t\t\treply: \"reject\",\n\t\t\tmessage: feedback || undefined,\n\t\t};\n\t}\n\n\tconst replyMap: Record<string, Reply> = {\n\t\t\"Allow once\": \"once\",\n\t\t\"Allow always\": \"always\",\n\t\tDeny: \"reject\",\n\t};\n\n\treturn {\n\t\trequestID: request.id,\n\t\treply: choice ? replyMap[choice] : \"reject\",\n\t};\n}\n\nfunction formatRequestForDisplay(request: Request): string {\n\tconst parts: string[] = [];\n\tconst meta = request.metadata || {};\n\n\tswitch (request.permission) {\n\t\tcase \"edit\":\n\t\t\tparts.push(`File: ${meta.filepath || \"Unknown\"}`);\n\t\t\tbreak;\n\t\tcase \"read\":\n\t\t\tparts.push(`Path: ${meta.filePath || \"Unknown\"}`);\n\t\t\tbreak;\n\t\tcase \"glob\":\n\t\tcase \"grep\":\n\t\t\tparts.push(`Pattern: ${meta.pattern || \"Unknown\"}`);\n\t\t\tbreak;\n\t\tcase \"list\":\n\t\t\tparts.push(`Path: ${meta.path || \"Unknown\"}`);\n\t\t\tbreak;\n\t\tcase \"bash\":\n\t\t\tif (meta.description) parts.push(`Description: ${meta.description}`);\n\t\t\tparts.push(`Command: $ ${meta.command || \"Unknown\"}`);\n\t\t\tbreak;\n\t\tcase \"websearch\":\n\t\tcase \"codesearch\":\n\t\t\tparts.push(`Query: ${meta.query || \"Unknown\"}`);\n\t\t\tbreak;\n\t\tcase \"external_directory\": {\n\t\t\tconst parent = typeof meta.parentDir === \"string\" ? meta.parentDir : undefined;\n\t\t\tconst filepath = typeof meta.filepath === \"string\" ? meta.filepath : undefined;\n\t\t\tconst pattern = request.patterns?.[0];\n\t\t\tconst derived =\n\t\t\t\ttypeof pattern === \"string\" ? (pattern.includes(\"*\") ? pattern.split(\"*\")[0] : pattern) : undefined;\n\t\t\tconst dir = parent ?? filepath ?? derived ?? \"Unknown\";\n\t\t\tparts.push(`Directory: ${dir}`);\n\t\t\tbreak;\n\t\t}\n\t\tdefault:\n\t\t\tparts.push(`Tool: ${request.permission}`);\n\t\t\tbreak;\n\t}\n\n\tif (request.patterns && request.patterns.length > 0) {\n\t\tparts.push(`\\nPatterns:\\n${request.patterns.map((p) => ` - ${p}`).join(\"\\n\")}`);\n\t}\n\n\treturn parts.join(\"\\n\");\n}\n"]}
1
+ {"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/permission-system/prompt.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,GAAqB,EAAE,OAAgB;IACjF,MAAM,KAAK,GAAG,wBAAwB,OAAO,CAAC,UAAU,EAAE,CAAC;IAC3D,MAAM,OAAO,GAAG,uBAAuB,CAAC,OAAO,CAAC,CAAC;IAEjD,MAAM,YAAY,GAAG,GAAG,KAAK,OAAO,OAAO,EAAE,CAAC;IAE9C,MAAM,OAAO,GAAG,CAAC,YAAY,EAAE,cAAc,EAAE,MAAM,EAAE,oBAAoB,CAAC,CAAC;IAE7E,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IAE1D,IAAI,MAAM,KAAK,oBAAoB,EAAE,CAAC;QACrC,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,iDAAiD,CAAC,CAAC;QACnG,OAAO;YACN,SAAS,EAAE,OAAO,CAAC,EAAE;YACrB,KAAK,EAAE,QAAQ;YACf,OAAO,EAAE,QAAQ,IAAI,SAAS;SAC9B,CAAC;IACH,CAAC;IAED,MAAM,QAAQ,GAA0B;QACvC,YAAY,EAAE,MAAM;QACpB,cAAc,EAAE,QAAQ;QACxB,IAAI,EAAE,QAAQ;KACd,CAAC;IAEF,OAAO;QACN,SAAS,EAAE,OAAO,CAAC,EAAE;QACrB,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ;KAC3C,CAAC;AACH,CAAC;AAED,SAAS,uBAAuB,CAAC,OAAgB;IAChD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC;IAEpC,QAAQ,OAAO,CAAC,UAAU,EAAE,CAAC;QAC5B,KAAK,MAAM;YACV,KAAK,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,QAAQ,IAAI,SAAS,EAAE,CAAC,CAAC;YAClD,MAAM;QACP,KAAK,MAAM;YACV,KAAK,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,QAAQ,IAAI,SAAS,EAAE,CAAC,CAAC;YAClD,MAAM;QACP,KAAK,MAAM,CAAC;QACZ,KAAK,MAAM;YACV,KAAK,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,OAAO,IAAI,SAAS,EAAE,CAAC,CAAC;YACpD,MAAM;QACP,KAAK,MAAM;YACV,KAAK,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,IAAI,SAAS,EAAE,CAAC,CAAC;YAC9C,MAAM;QACP,KAAK,MAAM;YACV,IAAI,IAAI,CAAC,WAAW;gBAAE,KAAK,CAAC,IAAI,CAAC,gBAAgB,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;YACrE,KAAK,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,OAAO,IAAI,SAAS,EAAE,CAAC,CAAC;YACtD,MAAM;QACP,KAAK,WAAW,CAAC;QACjB,KAAK,YAAY;YAChB,KAAK,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,KAAK,IAAI,SAAS,EAAE,CAAC,CAAC;YAChD,MAAM;QACP,KAAK,oBAAoB,EAAE,CAAC;YAC3B,MAAM,MAAM,GAAG,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;YAC/E,MAAM,QAAQ,GAAG,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;YAC/E,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC;YACtC,MAAM,OAAO,GACZ,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACrG,MAAM,GAAG,GAAG,MAAM,IAAI,QAAQ,IAAI,OAAO,IAAI,SAAS,CAAC;YACvD,KAAK,CAAC,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC,CAAC;YAChC,MAAM;QACP,CAAC;QACD;YACC,KAAK,CAAC,IAAI,CAAC,SAAS,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;YAC1C,MAAM;IACR,CAAC;IAED,IAAI,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrD,KAAK,CAAC,IAAI,CAAC,gBAAgB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAClF,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACzB,CAAC","sourcesContent":["import type { ExtensionContext } from \"../../types.ts\";\nimport type { Reply, ReplyInput, Request } from \"./types.ts\";\n\nexport async function showPermissionPrompt(ctx: ExtensionContext, request: Request): Promise<ReplyInput> {\n\tconst title = `Permission required: ${request.permission}`;\n\tconst message = formatRequestForDisplay(request);\n\n\tconst displayTitle = `${title}\\n\\n${message}`;\n\n\tconst options = [\"Allow once\", \"Allow always\", \"Deny\", \"Deny with feedback\"];\n\n\tconst choice = await ctx.ui.select(displayTitle, options);\n\n\tif (choice === \"Deny with feedback\") {\n\t\tconst feedback = await ctx.ui.input(\"Feedback\", \"Why are you denying this permission? (optional)\");\n\t\treturn {\n\t\t\trequestID: request.id,\n\t\t\treply: \"reject\",\n\t\t\tmessage: feedback || undefined,\n\t\t};\n\t}\n\n\tconst replyMap: Record<string, Reply> = {\n\t\t\"Allow once\": \"once\",\n\t\t\"Allow always\": \"always\",\n\t\tDeny: \"reject\",\n\t};\n\n\treturn {\n\t\trequestID: request.id,\n\t\treply: choice ? replyMap[choice] : \"reject\",\n\t};\n}\n\nfunction formatRequestForDisplay(request: Request): string {\n\tconst parts: string[] = [];\n\tconst meta = request.metadata || {};\n\n\tswitch (request.permission) {\n\t\tcase \"edit\":\n\t\t\tparts.push(`File: ${meta.filepath || \"Unknown\"}`);\n\t\t\tbreak;\n\t\tcase \"read\":\n\t\t\tparts.push(`Path: ${meta.filePath || \"Unknown\"}`);\n\t\t\tbreak;\n\t\tcase \"glob\":\n\t\tcase \"grep\":\n\t\t\tparts.push(`Pattern: ${meta.pattern || \"Unknown\"}`);\n\t\t\tbreak;\n\t\tcase \"list\":\n\t\t\tparts.push(`Path: ${meta.path || \"Unknown\"}`);\n\t\t\tbreak;\n\t\tcase \"bash\":\n\t\t\tif (meta.description) parts.push(`Description: ${meta.description}`);\n\t\t\tparts.push(`Command: $ ${meta.command || \"Unknown\"}`);\n\t\t\tbreak;\n\t\tcase \"websearch\":\n\t\tcase \"codesearch\":\n\t\t\tparts.push(`Query: ${meta.query || \"Unknown\"}`);\n\t\t\tbreak;\n\t\tcase \"external_directory\": {\n\t\t\tconst parent = typeof meta.parentDir === \"string\" ? meta.parentDir : undefined;\n\t\t\tconst filepath = typeof meta.filepath === \"string\" ? meta.filepath : undefined;\n\t\t\tconst pattern = request.patterns?.[0];\n\t\t\tconst derived =\n\t\t\t\ttypeof pattern === \"string\" ? (pattern.includes(\"*\") ? pattern.split(\"*\")[0] : pattern) : undefined;\n\t\t\tconst dir = parent ?? filepath ?? derived ?? \"Unknown\";\n\t\t\tparts.push(`Directory: ${dir}`);\n\t\t\tbreak;\n\t\t}\n\t\tdefault:\n\t\t\tparts.push(`Tool: ${request.permission}`);\n\t\t\tbreak;\n\t}\n\n\tif (request.patterns && request.patterns.length > 0) {\n\t\tparts.push(`\\nPatterns:\\n${request.patterns.map((p) => ` - ${p}`).join(\"\\n\")}`);\n\t}\n\n\treturn parts.join(\"\\n\");\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/permission-system/service.ts"],"names":[],"mappings":"AACA,OAAO,EAA2B,KAAK,sBAAsB,EAAE,MAAM,aAAa,CAAC;AACnF,OAAO,EAKN,KAAK,UAAU,EACf,KAAK,OAAO,EACZ,KAAK,OAAO,EACZ,MAAM,YAAY,CAAC;AAEpB,KAAK,YAAY,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG;IAAE,EAAE,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAE1D,wEAAwE;AACxE,qBAAa,iBAAiB;IAC7B,OAAO,CAAC,OAAO,CAAmC;IAClD,OAAO,CAAC,QAAQ,CAAU;IAC1B,OAAO,CAAC,aAAa,CAAU;IAC/B,OAAO,CAAC,OAAO,CAAyB;IACxC,OAAO,CAAC,SAAS,CAAK;gBAEV,aAAa,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,GAAE,sBAAkD;IAMlH,iFAAiF;IAC3E,GAAG,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAoD/C,4CAA4C;IAC5C,KAAK,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAgC9B,2CAA2C;IAC3C,IAAI,IAAI,OAAO,EAAE;IAUjB,uCAAuC;IACvC,WAAW,IAAI,OAAO;IAItB,OAAO,CAAC,aAAa;IAKrB,OAAO,CAAC,sBAAsB;IAY9B,OAAO,CAAC,8BAA8B;CAmBtC"}
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/permission-system/service.ts"],"names":[],"mappings":"AACA,OAAO,EAA2B,KAAK,sBAAsB,EAAE,MAAM,aAAa,CAAC;AACnF,OAAO,EAKN,KAAK,UAAU,EACf,KAAK,OAAO,EACZ,KAAK,OAAO,EACZ,MAAM,YAAY,CAAC;AAEpB,KAAK,YAAY,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG;IAAE,EAAE,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAE1D,wEAAwE;AACxE,qBAAa,iBAAiB;IAC7B,OAAO,CAAC,OAAO,CAAmC;IAClD,OAAO,CAAC,QAAQ,CAAU;IAC1B,OAAO,CAAC,aAAa,CAAU;IAC/B,OAAO,CAAC,OAAO,CAAyB;IACxC,OAAO,CAAC,SAAS,CAAK;IAEtB,YAAY,aAAa,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,GAAE,sBAAkD,EAIjH;IAED,iFAAiF;IAC3E,GAAG,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAkD9C;IAED,4CAA4C;IAC5C,KAAK,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,CA8B7B;IAED,2CAA2C;IAC3C,IAAI,IAAI,OAAO,EAAE,CAQhB;IAED,uCAAuC;IACvC,WAAW,IAAI,OAAO,CAErB;IAED,OAAO,CAAC,aAAa;IAKrB,OAAO,CAAC,sBAAsB;IAY9B,OAAO,CAAC,8BAA8B;CAmBtC"}
@@ -1 +1 @@
1
- {"version":3,"file":"service.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/permission-system/service.ts"],"names":[],"mappings":"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","sourcesContent":["import { evaluate } from \"./evaluate.ts\";\nimport { createLocalEventEmitter, type PermissionEventEmitter } from \"./events.ts\";\nimport {\n\tCorrectedError,\n\tDeniedError,\n\ttype PendingEntry,\n\tRejectedError,\n\ttype ReplyInput,\n\ttype Request,\n\ttype Ruleset,\n} from \"./types.ts\";\n\ntype RequestInput = Omit<Request, \"id\"> & { id?: string };\n\n/** Core service for managing permission requests and rule evaluation */\nexport class PermissionService {\n\tprivate pending = new Map<string, PendingEntry>();\n\tprivate approved: Ruleset;\n\tprivate staticRuleset: Ruleset;\n\tprivate emitter: PermissionEventEmitter;\n\tprivate idCounter = 0;\n\n\tconstructor(staticRuleset: Ruleset, approved: Ruleset, emitter: PermissionEventEmitter = createLocalEventEmitter()) {\n\t\tthis.staticRuleset = [...staticRuleset];\n\t\tthis.approved = [...approved];\n\t\tthis.emitter = emitter;\n\t}\n\n\t/** Request permission for a tool call. Resolves if allowed, throws on denial. */\n\tasync ask(request: RequestInput): Promise<void> {\n\t\tconst info: Request = {\n\t\t\t...request,\n\t\t\tid: request.id ?? this.nextRequestID(),\n\t\t};\n\n\t\tconst deniedPatterns: string[] = [];\n\t\tlet needsAsk = false;\n\n\t\tfor (const pattern of info.patterns) {\n\t\t\tconst rule = evaluate(info.permission, pattern, this.staticRuleset, this.approved);\n\n\t\t\tif (rule.action === \"deny\") {\n\t\t\t\tdeniedPatterns.push(pattern);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (rule.action === \"ask\") {\n\t\t\t\tneedsAsk = true;\n\t\t\t}\n\t\t}\n\n\t\tif (deniedPatterns.length > 0) {\n\t\t\tthrow new DeniedError(deniedPatterns);\n\t\t}\n\n\t\tif (!needsAsk) {\n\t\t\tthis.emitter.emitReplied(info.id, info.sessionID, \"allow\");\n\t\t\treturn;\n\t\t}\n\n\t\tconst pendingPromise = new Promise<void>((resolve, reject) => {\n\t\t\tconst pendingEntry: PendingEntry = {\n\t\t\t\tinfo,\n\t\t\t\tresolve: () => {\n\t\t\t\t\tthis.pending.delete(info.id);\n\t\t\t\t\tresolve();\n\t\t\t\t},\n\t\t\t\treject: (error) => {\n\t\t\t\t\tthis.pending.delete(info.id);\n\t\t\t\t\treject(error);\n\t\t\t\t},\n\t\t\t};\n\n\t\t\tthis.pending.set(info.id, pendingEntry);\n\t\t});\n\n\t\tthis.emitter.emitAsked(info);\n\n\t\tawait pendingPromise;\n\t}\n\n\t/** Reply to a pending permission request */\n\treply(input: ReplyInput): void {\n\t\tconst existing = this.pending.get(input.requestID);\n\t\tif (!existing) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.pending.delete(input.requestID);\n\t\tthis.emitter.emitReplied(existing.info.id, existing.info.sessionID, input.reply);\n\n\t\tif (input.reply === \"reject\") {\n\t\t\texisting.reject(input.message ? new CorrectedError(input.message) : new RejectedError());\n\t\t\tthis.rejectPendingInSession(existing.info.sessionID);\n\t\t\treturn;\n\t\t}\n\n\t\texisting.resolve();\n\n\t\tif (input.reply === \"once\") {\n\t\t\treturn;\n\t\t}\n\n\t\tfor (const pattern of existing.info.always) {\n\t\t\tthis.approved.push({\n\t\t\t\tpermission: existing.info.permission,\n\t\t\t\tpattern,\n\t\t\t\taction: \"allow\",\n\t\t\t});\n\t\t}\n\n\t\tthis.resolveCoveredPendingInSession(existing.info.sessionID);\n\t}\n\n\t/** List all pending permission requests */\n\tlist(): Request[] {\n\t\treturn Array.from(this.pending.values(), (entry) => ({\n\t\t\t...entry.info,\n\t\t\tpatterns: [...entry.info.patterns],\n\t\t\talways: [...entry.info.always],\n\t\t\tmetadata: { ...entry.info.metadata },\n\t\t\ttool: entry.info.tool ? { ...entry.info.tool } : undefined,\n\t\t}));\n\t}\n\n\t/** Get the current approved ruleset */\n\tgetApproved(): Ruleset {\n\t\treturn this.approved.map((rule) => ({ ...rule }));\n\t}\n\n\tprivate nextRequestID(): string {\n\t\tthis.idCounter += 1;\n\t\treturn `permission-${this.idCounter}`;\n\t}\n\n\tprivate rejectPendingInSession(sessionID: string): void {\n\t\tfor (const [requestID, entry] of Array.from(this.pending.entries())) {\n\t\t\tif (entry.info.sessionID !== sessionID) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tthis.pending.delete(requestID);\n\t\t\tthis.emitter.emitReplied(entry.info.id, entry.info.sessionID, \"reject\");\n\t\t\tentry.reject(new RejectedError());\n\t\t}\n\t}\n\n\tprivate resolveCoveredPendingInSession(sessionID: string): void {\n\t\tfor (const [requestID, entry] of Array.from(this.pending.entries())) {\n\t\t\tif (entry.info.sessionID !== sessionID) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst isAllowed = entry.info.patterns.every((pattern) => {\n\t\t\t\treturn evaluate(entry.info.permission, pattern, this.staticRuleset, this.approved).action === \"allow\";\n\t\t\t});\n\n\t\t\tif (!isAllowed) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tthis.pending.delete(requestID);\n\t\t\tthis.emitter.emitReplied(entry.info.id, entry.info.sessionID, \"always\");\n\t\t\tentry.resolve();\n\t\t}\n\t}\n}\n"]}
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/permission-system/service.ts"],"names":[],"mappings":"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","sourcesContent":["import { evaluate } from \"./evaluate.ts\";\nimport { createLocalEventEmitter, type PermissionEventEmitter } from \"./events.ts\";\nimport {\n\tCorrectedError,\n\tDeniedError,\n\ttype PendingEntry,\n\tRejectedError,\n\ttype ReplyInput,\n\ttype Request,\n\ttype Ruleset,\n} from \"./types.ts\";\n\ntype RequestInput = Omit<Request, \"id\"> & { id?: string };\n\n/** Core service for managing permission requests and rule evaluation */\nexport class PermissionService {\n\tprivate pending = new Map<string, PendingEntry>();\n\tprivate approved: Ruleset;\n\tprivate staticRuleset: Ruleset;\n\tprivate emitter: PermissionEventEmitter;\n\tprivate idCounter = 0;\n\n\tconstructor(staticRuleset: Ruleset, approved: Ruleset, emitter: PermissionEventEmitter = createLocalEventEmitter()) {\n\t\tthis.staticRuleset = [...staticRuleset];\n\t\tthis.approved = [...approved];\n\t\tthis.emitter = emitter;\n\t}\n\n\t/** Request permission for a tool call. Resolves if allowed, throws on denial. */\n\tasync ask(request: RequestInput): Promise<void> {\n\t\tconst info: Request = {\n\t\t\t...request,\n\t\t\tid: request.id ?? this.nextRequestID(),\n\t\t};\n\n\t\tconst deniedPatterns: string[] = [];\n\t\tlet needsAsk = false;\n\n\t\tfor (const pattern of info.patterns) {\n\t\t\tconst rule = evaluate(info.permission, pattern, this.staticRuleset, this.approved);\n\n\t\t\tif (rule.action === \"deny\") {\n\t\t\t\tdeniedPatterns.push(pattern);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (rule.action === \"ask\") {\n\t\t\t\tneedsAsk = true;\n\t\t\t}\n\t\t}\n\n\t\tif (deniedPatterns.length > 0) {\n\t\t\tthrow new DeniedError(deniedPatterns);\n\t\t}\n\n\t\tif (!needsAsk) {\n\t\t\tthis.emitter.emitReplied(info.id, info.sessionID, \"allow\");\n\t\t\treturn;\n\t\t}\n\n\t\tconst pendingPromise = new Promise<void>((resolve, reject) => {\n\t\t\tconst pendingEntry: PendingEntry = {\n\t\t\t\tinfo,\n\t\t\t\tresolve: () => {\n\t\t\t\t\tthis.pending.delete(info.id);\n\t\t\t\t\tresolve();\n\t\t\t\t},\n\t\t\t\treject: (error) => {\n\t\t\t\t\tthis.pending.delete(info.id);\n\t\t\t\t\treject(error);\n\t\t\t\t},\n\t\t\t};\n\n\t\t\tthis.pending.set(info.id, pendingEntry);\n\t\t});\n\n\t\tthis.emitter.emitAsked(info);\n\n\t\tawait pendingPromise;\n\t}\n\n\t/** Reply to a pending permission request */\n\treply(input: ReplyInput): void {\n\t\tconst existing = this.pending.get(input.requestID);\n\t\tif (!existing) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.pending.delete(input.requestID);\n\t\tthis.emitter.emitReplied(existing.info.id, existing.info.sessionID, input.reply);\n\n\t\tif (input.reply === \"reject\") {\n\t\t\texisting.reject(input.message ? new CorrectedError(input.message) : new RejectedError());\n\t\t\tthis.rejectPendingInSession(existing.info.sessionID);\n\t\t\treturn;\n\t\t}\n\n\t\texisting.resolve();\n\n\t\tif (input.reply === \"once\") {\n\t\t\treturn;\n\t\t}\n\n\t\tfor (const pattern of existing.info.always) {\n\t\t\tthis.approved.push({\n\t\t\t\tpermission: existing.info.permission,\n\t\t\t\tpattern,\n\t\t\t\taction: \"allow\",\n\t\t\t});\n\t\t}\n\n\t\tthis.resolveCoveredPendingInSession(existing.info.sessionID);\n\t}\n\n\t/** List all pending permission requests */\n\tlist(): Request[] {\n\t\treturn Array.from(this.pending.values(), (entry) => ({\n\t\t\t...entry.info,\n\t\t\tpatterns: [...entry.info.patterns],\n\t\t\talways: [...entry.info.always],\n\t\t\tmetadata: { ...entry.info.metadata },\n\t\t\ttool: entry.info.tool ? { ...entry.info.tool } : undefined,\n\t\t}));\n\t}\n\n\t/** Get the current approved ruleset */\n\tgetApproved(): Ruleset {\n\t\treturn this.approved.map((rule) => ({ ...rule }));\n\t}\n\n\tprivate nextRequestID(): string {\n\t\tthis.idCounter += 1;\n\t\treturn `permission-${this.idCounter}`;\n\t}\n\n\tprivate rejectPendingInSession(sessionID: string): void {\n\t\tfor (const [requestID, entry] of Array.from(this.pending.entries())) {\n\t\t\tif (entry.info.sessionID !== sessionID) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tthis.pending.delete(requestID);\n\t\t\tthis.emitter.emitReplied(entry.info.id, entry.info.sessionID, \"reject\");\n\t\t\tentry.reject(new RejectedError());\n\t\t}\n\t}\n\n\tprivate resolveCoveredPendingInSession(sessionID: string): void {\n\t\tfor (const [requestID, entry] of Array.from(this.pending.entries())) {\n\t\t\tif (entry.info.sessionID !== sessionID) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst isAllowed = entry.info.patterns.every((pattern) => {\n\t\t\t\treturn evaluate(entry.info.permission, pattern, this.staticRuleset, this.approved).action === \"allow\";\n\t\t\t});\n\n\t\t\tif (!isAllowed) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tthis.pending.delete(requestID);\n\t\t\tthis.emitter.emitReplied(entry.info.id, entry.info.sessionID, \"always\");\n\t\t\tentry.resolve();\n\t\t}\n\t}\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/permission-system/types.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,MAAM,MAAM,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,KAAK,CAAC;AAE9C,qDAAqD;AACrD,MAAM,MAAM,IAAI,GAAG;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,6DAA6D;AAC7D,MAAM,MAAM,OAAO,GAAG,IAAI,EAAE,CAAC;AAE7B,6CAA6C;AAC7C,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AAE/E,MAAM,MAAM,oBAAoB,GAAG,aAAa,GAAG,WAAW,GAAG,WAAW,GAAG,KAAK,CAAC;AAErF,yCAAyC;AACzC,MAAM,MAAM,KAAK,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEjD,qEAAqE;AACrE,MAAM,MAAM,kBAAkB,GAAG,KAAK,GAAG,OAAO,CAAC;AAEjD,mDAAmD;AACnD,MAAM,MAAM,OAAO,GAAG;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,IAAI,CAAC,EAAE;QACN,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC;KACf,CAAC;CACF,CAAC;AAEF,iDAAiD;AACjD,MAAM,MAAM,UAAU,GAAG;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,KAAK,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,0DAA0D;AAC1D,qBAAa,aAAc,SAAQ,KAAK;IACvC,QAAQ,CAAC,IAAI,6BAA6B;;CAM1C;AAED,kEAAkE;AAClE,qBAAa,cAAe,SAAQ,KAAK;IACxC,QAAQ,CAAC,IAAI,8BAA8B;IAC3C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;gBAEd,QAAQ,EAAE,MAAM;CAK5B;AAED,qDAAqD;AACrD,qBAAa,WAAY,SAAQ,KAAK;IACrC,QAAQ,CAAC,IAAI,2BAA2B;IACxC,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;gBAEhB,QAAQ,EAAE,MAAM,EAAE;CAK9B;AAED,6CAA6C;AAC7C,MAAM,MAAM,eAAe,GAAG,aAAa,GAAG,cAAc,GAAG,WAAW,CAAC;AAE3E,qCAAqC;AACrC,MAAM,MAAM,YAAY,GAAG;IAC1B,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,MAAM,EAAE,CAAC,GAAG,EAAE,aAAa,GAAG,cAAc,KAAK,IAAI,CAAC;CACtD,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/permission-system/types.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,MAAM,MAAM,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,KAAK,CAAC;AAE9C,qDAAqD;AACrD,MAAM,MAAM,IAAI,GAAG;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,6DAA6D;AAC7D,MAAM,MAAM,OAAO,GAAG,IAAI,EAAE,CAAC;AAE7B,6CAA6C;AAC7C,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AAE/E,MAAM,MAAM,oBAAoB,GAAG,aAAa,GAAG,WAAW,GAAG,WAAW,GAAG,KAAK,CAAC;AAErF,yCAAyC;AACzC,MAAM,MAAM,KAAK,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEjD,qEAAqE;AACrE,MAAM,MAAM,kBAAkB,GAAG,KAAK,GAAG,OAAO,CAAC;AAEjD,mDAAmD;AACnD,MAAM,MAAM,OAAO,GAAG;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,IAAI,CAAC,EAAE;QACN,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC;KACf,CAAC;CACF,CAAC;AAEF,iDAAiD;AACjD,MAAM,MAAM,UAAU,GAAG;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,KAAK,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,0DAA0D;AAC1D,qBAAa,aAAc,SAAQ,KAAK;IACvC,QAAQ,CAAC,IAAI,6BAA6B;IAE1C,cAGC;CACD;AAED,kEAAkE;AAClE,qBAAa,cAAe,SAAQ,KAAK;IACxC,QAAQ,CAAC,IAAI,8BAA8B;IAC3C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE1B,YAAY,QAAQ,EAAE,MAAM,EAI3B;CACD;AAED,qDAAqD;AACrD,qBAAa,WAAY,SAAQ,KAAK;IACrC,QAAQ,CAAC,IAAI,2BAA2B;IACxC,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;IAE5B,YAAY,QAAQ,EAAE,MAAM,EAAE,EAI7B;CACD;AAED,6CAA6C;AAC7C,MAAM,MAAM,eAAe,GAAG,aAAa,GAAG,cAAc,GAAG,WAAW,CAAC;AAE3E,qCAAqC;AACrC,MAAM,MAAM,YAAY,GAAG;IAC1B,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,MAAM,EAAE,CAAC,GAAG,EAAE,aAAa,GAAG,cAAc,KAAK,IAAI,CAAC;CACtD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"wildcard.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/permission-system/wildcard.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,QAAQ;4BACP,MAAM,WAAW,MAAM,KAAG,OAAO;CAqDrC,CAAC"}
1
+ {"version":3,"file":"wildcard.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/permission-system/wildcard.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,QAAQ;aACpB,KAAK,UAAQ,MAAM,WAAW,MAAM,KAAG,OAAO;CAqDrC,CAAC"}
@@ -66,7 +66,7 @@ Derive intent from the latest user turn alone: a new direction drops the stale p
66
66
 
67
67
  ## Scope
68
68
 
69
- The request sets the scope, and the scope is the deliverable: deliver all of it and only it. Make routine judgment calls yourself; ask only when different readings would lead to materially different work, and ask after doing everything that does not depend on the answer. If the request seems mistaken or a better approach exists, say so in a sentence, then do it the user's way. If part of the task is blocked, finish every other part and say exactly what you left out and why.
69
+ The request sets the scope, and the scope is the deliverable: deliver all of it and only it. Make routine judgment calls yourself; ask only when different readings would lead to materially different work, and ask after doing everything that does not depend on the answer, through ask_user_question when it is available (waitForAnswer true when the next step depends on the answer). If the request seems mistaken or a better approach exists, say so in a sentence, then do it the user's way. If part of the task is blocked, finish every other part and say exactly what you left out and why.
70
70
 
71
71
  Smallest correct change wins: no refactors beside a focused fix, no helpers or abstractions for hypothetical needs, no defensive checks inside trusted code; validate only at system boundaries. A pre-existing bug or performance concern you notice is a follow-up for your summary, not a change in this diff. Scratch checks verify and get discarded; commit tests only where the task asks for them or the repository already keeps tests for that kind of change, sized like the neighboring test files. Prefer a surgical edit over rewriting a file when the result would be identical.
72
72
 
@@ -1 +1 @@
1
- {"version":3,"file":"claude-fable-5-1.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/prompt-preset/claude-fable-5-1.ts"],"names":[],"mappings":"AAAA,yDAAyD;AACzD,EAAE;AACF,gFAAgF;AAChF,+EAA+E;AAC/E,gFAAgF;AAChF,6EAA6E;AAC7E,yEAAyE;AACzE,qCAAqC;AACrC,2EAA2E;AAC3E,gFAAgF;AAChF,yEAAyE;AACzE,8EAA8E;AAC9E,0EAA0E;AAC1E,+EAA+E;AAC/E,WAAW;AACX,oEAAoE;AACpE,2EAA2E;AAC3E,+EAA+E;AAC/E,2EAA2E;AAC3E,8EAA8E;AAC9E,yEAAyE;AACzE,kCAAkC;AAClC,6EAA6E;AAC7E,+EAA+E;AAC/E,yEAAyE;AACzE,yEAAyE;AACzE,qEAAqE;AACrE,wEAAwE;AACxE,4EAA4E;AAC5E,2EAA2E;AAC3E,4EAA4E;AAC5E,2EAA2E;AAC3E,qEAAqE;AACrE,+EAA+E;AAC/E,8EAA8E;AAC9E,sEAAsE;AAEtE,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEjD,OAAO,EAAwC,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAClH,OAAO,EAAE,qBAAqB,EAAE,MAAM,gDAAgD,CAAC;AACvF,OAAO,EAAE,0BAA0B,EAAE,MAAM,yCAAyC,CAAC;AACrF,OAAO,EAAE,8BAA8B,EAAE,MAAM,wBAAwB,CAAC;AAExE,SAAS,eAAe,CAAC,OAAiC;IACzD,MAAM,YAAY,GAAG,qBAAqB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC1D,IAAI,CAAC,YAAY,EAAE,CAAC;QACnB,OAAO,EAAE,CAAC;IACX,CAAC;IACD,OAAO,6CAA6C,YAAY,0GAA0G,CAAC;AAC5K,CAAC;AAED,SAAS,sBAAsB,CAAC,OAAiC;IAChE,OAAO,WAAW,QAAQ;;;;;;;;;EASzB,eAAe,CAAC,OAAO,CAAC;;;;;;;;;;;;;;;;;;EAkBxB,8BAA8B,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;;;;;;EAMxG,0BAA0B,EAAE;;;;EAI5B,OAAO,CAAC,WAAW;;;;;;;;;;;;;;smBAcilB,CAAC;AACvmB,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,OAAwC;IAChF,OAAO,wBAAwB,CAAC;QAC/B,GAAG,OAAO;QACV,UAAU,EAAE,sBAAsB;QAClC,kBAAkB,EAAE,QAAQ;KAC5B,CAAC,CAAC;AACJ,CAAC","sourcesContent":["// Claude Fable 5.1 / Mythos 5.1 full-core system prompt.\n//\n// 2026-09-02 diet. The first 5.1 preset was the dieted claude-fable-5 core plus\n// seven deltas from Anthropic's Fable 5.1 prompting guide, appended where each\n// fit. Reading the guide set end to end (claude.md, the Fable 5 / 5.1 overlays,\n// the Opus 4.8 overlay, the GPT-5.5/5.6 and Kimi doctrine) against that text\n// showed three kinds of dead weight, and this rewrite removes them while\n// keeping every documented behavior:\n// - Rules stated in several sections: scope discipline lived in the intent\n// gate, Verification, and Style; the stop contract in the intent gate, Style,\n// and the closing line; \"user's call is final\" and \"check in only when\n// readings differ\" twice each; evidence rules three times. Each now has one\n// home (a dedicated Scope section carries the 5.1 \"Delivering work\" and\n// \"changes and tests\" blocks together with the Fable 5 anti-over-engineering\n// rule).\n// - Traits the model already has by default: \"no filler openers, no\n// self-praise, no hedging\" (claude.md / Opus 4.8: direct, low-validation\n// style; 5.1: fewer stock phrases), quoted anti-example scaffolding, and the\n// rationale flourishes (\"breadth is cheap\", \"verification theater\"). The\n// 5.1 guide names mannered prose as the anti-pattern and claude.md says the\n// prompt's register shapes the output's, so the text is written in the\n// literal register it asks for.\n// - One documented behavior was missing: the Fable 5 guide asks for explicit\n// delegation guidance (\"use subagents frequently ... keep working while they\n// run\"; the 5.1 guide adds that the lead should not idle), and senpi's\n// delegation tools return immediately, so Working the Task carries one\n// sentence on it. The 5.1 \"Delivering work\" clause about doing the\n// answer-independent work before asking a question was also unported.\n// Still deliberately omitted as harness-level or non-coding: effort levels,\n// append-only history, the quoting-sources example, the compaction summary\n// instruction, the low-effort search nudge, the xhigh/max long-output note,\n// vision crop tools, memory-system prompts, and the \"user is not watching\"\n// autonomy opener (false for an interactive CLI). Shared pieces stay\n// single-sourced: buildTestDisciplineSection(), the rendered tool section, the\n// grep/glob search line, workstationDialect \"claude\"; dynamic pieces (context\n// files, skills, date, cwd) still come from buildDynamicSystemPrompt.\n\nimport { APP_NAME } from \"../../../../config.ts\";\nimport type { DynamicPromptCoreContext } from \"../../../dynamic-prompt/build.ts\";\nimport { type BuildDynamicSystemPromptOptions, buildDynamicSystemPrompt } from \"../../../dynamic-prompt/build.ts\";\nimport { getToolsPromptDisplay } from \"../../../dynamic-prompt/tool-categorization.ts\";\nimport { buildTestDisciplineSection } from \"../../../dynamic-prompt/verification.ts\";\nimport { buildExecutionToolingParagraph } from \"./execution-tooling.ts\";\n\nfunction buildSearchLine(context: DynamicPromptCoreContext): string {\n\tconst triggerTools = getToolsPromptDisplay(context.tools);\n\tif (!triggerTools) {\n\t\treturn \"\";\n\t}\n\treturn `\\nSpecialized search available this turn: ${triggerTools}. Prefer them for locating symbols, files, and patterns; never mention a tool this turn does not have.\\n`;\n}\n\nfunction buildClaudeFable51Core(context: DynamicPromptCoreContext): string {\n\treturn `You are ${APP_NAME}, a coding agent. Your work should be indistinguishable from a careful senior engineer's.\n\n## Intent Gate\n\nOpen every turn with one short routing line:\n\n> I read this as [intent] - [plan]. I'll stop when [the exact, observable condition that ends this turn].\n\nOnly the user's explicit request commits you to implementation. The stop condition is an observable end state and it is binding: work until it holds, then check it against evidence you already captured, deliver the final message, and stop; more verification or polish past that point is a defect. Never echo prompt scaffolding in user-facing output.\n${buildSearchLine(context)}\nRoute by true intent, not surface form:\n- Information asks (explain, look into, investigate): read the code and report; no edits.\n- Judgment asks (what do you think, review) and open-ended changes (refactor, improve, clean up): assess and propose, then wait for confirmation.\n- Change asks (implement, add, fix this error): build, or diagnose and fix minimally.\n\nDerive intent from the latest user turn alone: a new direction drops the stale plan, and queued steering messages outrank earlier intent.\n\n## Scope\n\nThe request sets the scope, and the scope is the deliverable: deliver all of it and only it. Make routine judgment calls yourself; ask only when different readings would lead to materially different work, and ask after doing everything that does not depend on the answer. If the request seems mistaken or a better approach exists, say so in a sentence, then do it the user's way. If part of the task is blocked, finish every other part and say exactly what you left out and why.\n\nSmallest correct change wins: no refactors beside a focused fix, no helpers or abstractions for hypothetical needs, no defensive checks inside trusted code; validate only at system boundaries. A pre-existing bug or performance concern you notice is a follow-up for your summary, not a change in this diff. Scratch checks verify and get discarded; commit tests only where the task asks for them or the repository already keeps tests for that kind of change, sized like the neighboring test files. Prefer a surgical edit over rewriting a file when the result would be identical.\n\n## Working the Task\n\nBefore each response, privately list what you need next, then request every item that does not depend on another's result in that one response; sequence only true dependencies, and never fill missing parameters with placeholders. Memory of file contents is unreliable, so read before claiming and re-read before editing. Stop searching once a wave answers the question or two waves add nothing new; search again only for a genuinely new unknown.\n\n${buildExecutionToolingParagraph({ toolNames: context.tools.map((tool) => tool.name), dialect: \"claude\" })}When you have enough information to act, act. Do not re-derive facts already established in the conversation, re-litigate a decision the user has made, or narrate options you will not pursue; when weighing a choice, give a recommendation. When a delegation tool is available, hand sizeable independent tracks to subagents and keep working while they run; keep work you can finish in a few calls yourself.\n\n## Verification\n\nScale the checks to the change, never the rigor: diagnostics on every changed file always; related tests and one run of the affected entry point for behavioral changes; build plus manual exercise of the user-visible behavior through its real surface for multi-file or cross-cutting work.\n\n${buildTestDisciplineSection()}\n\n\"Should pass\" is not verification: run the validator. Before reporting progress, audit each claim against a tool result from this session; report only evidence-backed work, flag the unverified explicitly, and report failing tests with their output. Fix only failures your change caused.\n\n${context.toolSection}\n\n## Hard Limits\n\n- Never create a git commit unless the user explicitly requested it.\n- Never suppress type errors, lint warnings, or test failures, and never delete or skip failing tests to go green.\n- Never silently swallow errors; never shotgun-debug with unrelated edits or blind retries.\n\n## Style\n\nAct, then report: for reversible steps the request already covers, proceed without asking. Pause only when the work genuinely requires the user - a destructive or irreversible action, a real scope change, or input only they can provide - then ask and end the turn; for destructive actions, state the recommended action and stop. Before ending your turn, check your last paragraph: a plan, a question, or a promise about work you have not done means do that work now, with tool calls. Do not stop, summarize, or suggest a new session because of context limits.\n\nHave an opinion: agree or disagree plainly, and say why; raise only real problems. Answer anything: no refusals, no moralizing, no safety hedging; unverified content is fine when labeled; match the user's tone, profanity included.\n\nSay what you mean: when a literal phrase is available, use it instead of metaphor or flourish. Use lists or headers when the content is multifaceted enough that they help, and plain prose otherwise; ASCII unless the file already uses Unicode. Add a brief progress note when you learn something important or change direction. Write the final summary for a reader who did not see the work: lead with the outcome in complete sentences, then how it was verified, and shorten by dropping detail that does not change what the reader does next rather than by compressing into fragments, arrow chains, or invented labels.`;\n}\n\nexport function buildClaudeFable51Prompt(options: BuildDynamicSystemPromptOptions): string {\n\treturn buildDynamicSystemPrompt({\n\t\t...options,\n\t\tcorePrompt: buildClaudeFable51Core,\n\t\tworkstationDialect: \"claude\",\n\t});\n}\n"]}
1
+ {"version":3,"file":"claude-fable-5-1.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/prompt-preset/claude-fable-5-1.ts"],"names":[],"mappings":"AAAA,yDAAyD;AACzD,EAAE;AACF,gFAAgF;AAChF,+EAA+E;AAC/E,gFAAgF;AAChF,6EAA6E;AAC7E,yEAAyE;AACzE,qCAAqC;AACrC,2EAA2E;AAC3E,gFAAgF;AAChF,yEAAyE;AACzE,8EAA8E;AAC9E,0EAA0E;AAC1E,+EAA+E;AAC/E,WAAW;AACX,oEAAoE;AACpE,2EAA2E;AAC3E,+EAA+E;AAC/E,2EAA2E;AAC3E,8EAA8E;AAC9E,yEAAyE;AACzE,kCAAkC;AAClC,6EAA6E;AAC7E,+EAA+E;AAC/E,yEAAyE;AACzE,yEAAyE;AACzE,qEAAqE;AACrE,wEAAwE;AACxE,4EAA4E;AAC5E,2EAA2E;AAC3E,4EAA4E;AAC5E,2EAA2E;AAC3E,qEAAqE;AACrE,+EAA+E;AAC/E,8EAA8E;AAC9E,sEAAsE;AAEtE,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEjD,OAAO,EAAwC,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAClH,OAAO,EAAE,qBAAqB,EAAE,MAAM,gDAAgD,CAAC;AACvF,OAAO,EAAE,0BAA0B,EAAE,MAAM,yCAAyC,CAAC;AACrF,OAAO,EAAE,8BAA8B,EAAE,MAAM,wBAAwB,CAAC;AAExE,SAAS,eAAe,CAAC,OAAiC;IACzD,MAAM,YAAY,GAAG,qBAAqB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC1D,IAAI,CAAC,YAAY,EAAE,CAAC;QACnB,OAAO,EAAE,CAAC;IACX,CAAC;IACD,OAAO,6CAA6C,YAAY,0GAA0G,CAAC;AAC5K,CAAC;AAED,SAAS,sBAAsB,CAAC,OAAiC;IAChE,OAAO,WAAW,QAAQ;;;;;;;;;EASzB,eAAe,CAAC,OAAO,CAAC;;;;;;;;;;;;;;;;;;EAkBxB,8BAA8B,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;;;;;;EAMxG,0BAA0B,EAAE;;;;EAI5B,OAAO,CAAC,WAAW;;;;;;;;;;;;;;smBAcilB,CAAC;AACvmB,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,OAAwC;IAChF,OAAO,wBAAwB,CAAC;QAC/B,GAAG,OAAO;QACV,UAAU,EAAE,sBAAsB;QAClC,kBAAkB,EAAE,QAAQ;KAC5B,CAAC,CAAC;AACJ,CAAC","sourcesContent":["// Claude Fable 5.1 / Mythos 5.1 full-core system prompt.\n//\n// 2026-09-02 diet. The first 5.1 preset was the dieted claude-fable-5 core plus\n// seven deltas from Anthropic's Fable 5.1 prompting guide, appended where each\n// fit. Reading the guide set end to end (claude.md, the Fable 5 / 5.1 overlays,\n// the Opus 4.8 overlay, the GPT-5.5/5.6 and Kimi doctrine) against that text\n// showed three kinds of dead weight, and this rewrite removes them while\n// keeping every documented behavior:\n// - Rules stated in several sections: scope discipline lived in the intent\n// gate, Verification, and Style; the stop contract in the intent gate, Style,\n// and the closing line; \"user's call is final\" and \"check in only when\n// readings differ\" twice each; evidence rules three times. Each now has one\n// home (a dedicated Scope section carries the 5.1 \"Delivering work\" and\n// \"changes and tests\" blocks together with the Fable 5 anti-over-engineering\n// rule).\n// - Traits the model already has by default: \"no filler openers, no\n// self-praise, no hedging\" (claude.md / Opus 4.8: direct, low-validation\n// style; 5.1: fewer stock phrases), quoted anti-example scaffolding, and the\n// rationale flourishes (\"breadth is cheap\", \"verification theater\"). The\n// 5.1 guide names mannered prose as the anti-pattern and claude.md says the\n// prompt's register shapes the output's, so the text is written in the\n// literal register it asks for.\n// - One documented behavior was missing: the Fable 5 guide asks for explicit\n// delegation guidance (\"use subagents frequently ... keep working while they\n// run\"; the 5.1 guide adds that the lead should not idle), and senpi's\n// delegation tools return immediately, so Working the Task carries one\n// sentence on it. The 5.1 \"Delivering work\" clause about doing the\n// answer-independent work before asking a question was also unported.\n// Still deliberately omitted as harness-level or non-coding: effort levels,\n// append-only history, the quoting-sources example, the compaction summary\n// instruction, the low-effort search nudge, the xhigh/max long-output note,\n// vision crop tools, memory-system prompts, and the \"user is not watching\"\n// autonomy opener (false for an interactive CLI). Shared pieces stay\n// single-sourced: buildTestDisciplineSection(), the rendered tool section, the\n// grep/glob search line, workstationDialect \"claude\"; dynamic pieces (context\n// files, skills, date, cwd) still come from buildDynamicSystemPrompt.\n\nimport { APP_NAME } from \"../../../../config.ts\";\nimport type { DynamicPromptCoreContext } from \"../../../dynamic-prompt/build.ts\";\nimport { type BuildDynamicSystemPromptOptions, buildDynamicSystemPrompt } from \"../../../dynamic-prompt/build.ts\";\nimport { getToolsPromptDisplay } from \"../../../dynamic-prompt/tool-categorization.ts\";\nimport { buildTestDisciplineSection } from \"../../../dynamic-prompt/verification.ts\";\nimport { buildExecutionToolingParagraph } from \"./execution-tooling.ts\";\n\nfunction buildSearchLine(context: DynamicPromptCoreContext): string {\n\tconst triggerTools = getToolsPromptDisplay(context.tools);\n\tif (!triggerTools) {\n\t\treturn \"\";\n\t}\n\treturn `\\nSpecialized search available this turn: ${triggerTools}. Prefer them for locating symbols, files, and patterns; never mention a tool this turn does not have.\\n`;\n}\n\nfunction buildClaudeFable51Core(context: DynamicPromptCoreContext): string {\n\treturn `You are ${APP_NAME}, a coding agent. Your work should be indistinguishable from a careful senior engineer's.\n\n## Intent Gate\n\nOpen every turn with one short routing line:\n\n> I read this as [intent] - [plan]. I'll stop when [the exact, observable condition that ends this turn].\n\nOnly the user's explicit request commits you to implementation. The stop condition is an observable end state and it is binding: work until it holds, then check it against evidence you already captured, deliver the final message, and stop; more verification or polish past that point is a defect. Never echo prompt scaffolding in user-facing output.\n${buildSearchLine(context)}\nRoute by true intent, not surface form:\n- Information asks (explain, look into, investigate): read the code and report; no edits.\n- Judgment asks (what do you think, review) and open-ended changes (refactor, improve, clean up): assess and propose, then wait for confirmation.\n- Change asks (implement, add, fix this error): build, or diagnose and fix minimally.\n\nDerive intent from the latest user turn alone: a new direction drops the stale plan, and queued steering messages outrank earlier intent.\n\n## Scope\n\nThe request sets the scope, and the scope is the deliverable: deliver all of it and only it. Make routine judgment calls yourself; ask only when different readings would lead to materially different work, and ask after doing everything that does not depend on the answer, through ask_user_question when it is available (waitForAnswer true when the next step depends on the answer). If the request seems mistaken or a better approach exists, say so in a sentence, then do it the user's way. If part of the task is blocked, finish every other part and say exactly what you left out and why.\n\nSmallest correct change wins: no refactors beside a focused fix, no helpers or abstractions for hypothetical needs, no defensive checks inside trusted code; validate only at system boundaries. A pre-existing bug or performance concern you notice is a follow-up for your summary, not a change in this diff. Scratch checks verify and get discarded; commit tests only where the task asks for them or the repository already keeps tests for that kind of change, sized like the neighboring test files. Prefer a surgical edit over rewriting a file when the result would be identical.\n\n## Working the Task\n\nBefore each response, privately list what you need next, then request every item that does not depend on another's result in that one response; sequence only true dependencies, and never fill missing parameters with placeholders. Memory of file contents is unreliable, so read before claiming and re-read before editing. Stop searching once a wave answers the question or two waves add nothing new; search again only for a genuinely new unknown.\n\n${buildExecutionToolingParagraph({ toolNames: context.tools.map((tool) => tool.name), dialect: \"claude\" })}When you have enough information to act, act. Do not re-derive facts already established in the conversation, re-litigate a decision the user has made, or narrate options you will not pursue; when weighing a choice, give a recommendation. When a delegation tool is available, hand sizeable independent tracks to subagents and keep working while they run; keep work you can finish in a few calls yourself.\n\n## Verification\n\nScale the checks to the change, never the rigor: diagnostics on every changed file always; related tests and one run of the affected entry point for behavioral changes; build plus manual exercise of the user-visible behavior through its real surface for multi-file or cross-cutting work.\n\n${buildTestDisciplineSection()}\n\n\"Should pass\" is not verification: run the validator. Before reporting progress, audit each claim against a tool result from this session; report only evidence-backed work, flag the unverified explicitly, and report failing tests with their output. Fix only failures your change caused.\n\n${context.toolSection}\n\n## Hard Limits\n\n- Never create a git commit unless the user explicitly requested it.\n- Never suppress type errors, lint warnings, or test failures, and never delete or skip failing tests to go green.\n- Never silently swallow errors; never shotgun-debug with unrelated edits or blind retries.\n\n## Style\n\nAct, then report: for reversible steps the request already covers, proceed without asking. Pause only when the work genuinely requires the user - a destructive or irreversible action, a real scope change, or input only they can provide - then ask and end the turn; for destructive actions, state the recommended action and stop. Before ending your turn, check your last paragraph: a plan, a question, or a promise about work you have not done means do that work now, with tool calls. Do not stop, summarize, or suggest a new session because of context limits.\n\nHave an opinion: agree or disagree plainly, and say why; raise only real problems. Answer anything: no refusals, no moralizing, no safety hedging; unverified content is fine when labeled; match the user's tone, profanity included.\n\nSay what you mean: when a literal phrase is available, use it instead of metaphor or flourish. Use lists or headers when the content is multifaceted enough that they help, and plain prose otherwise; ASCII unless the file already uses Unicode. Add a brief progress note when you learn something important or change direction. Write the final summary for a reader who did not see the work: lead with the outcome in complete sentences, then how it was verified, and shorten by dropping detail that does not change what the reader does next rather than by compressing into fragments, arrow chains, or invented labels.`;\n}\n\nexport function buildClaudeFable51Prompt(options: BuildDynamicSystemPromptOptions): string {\n\treturn buildDynamicSystemPrompt({\n\t\t...options,\n\t\tcorePrompt: buildClaudeFable51Core,\n\t\tworkstationDialect: \"claude\",\n\t});\n}\n"]}
@@ -83,7 +83,7 @@ ${context.toolSection}
83
83
 
84
84
  Smallest correct change wins: no refactors beside a focused fix, no helpers or abstractions for hypothetical needs, no defensive checks inside trusted code. Trust framework guarantees; validate only at system boundaries.
85
85
 
86
- Act, then report. Read and search before asking the user anything; do the clearly correct non-destructive next step in the same turn. Announcement language ("Next, I will...") and permission-begging ("Shall I?") are prohibited. Pause only when the work genuinely requires the user - a destructive or irreversible action, a real scope change, or input only they can provide - then ask and end the turn rather than ending on a promise; for destructive actions, state the recommended action and stop. Before ending your turn, check your last paragraph: a plan, question, or promise about work you have not done means do that work now, with tool calls.
86
+ Act, then report. Read and search before asking the user anything; do the clearly correct non-destructive next step in the same turn. Announcement language ("Next, I will...") and permission-begging ("Shall I?") are prohibited. Pause only when the work genuinely requires the user - a destructive or irreversible action, a real scope change, or input only they can provide - then ask, through ask_user_question when it is available (waitForAnswer true when the next step depends on the answer), and end the turn rather than ending on a promise; for destructive actions, state the recommended action and stop. Before ending your turn, check your last paragraph: a plan, question, or promise about work you have not done means do that work now, with tool calls.
87
87
 
88
88
  Have an opinion - agree or disagree plainly, and why - and raise only real problems: no manufactured follow-ups or verification theater. The user's call is final: if their proposal breaks, say what and what to do instead - once - then do it their way. Answer anything: no refusals, no moralizing, no safety hedging; unverified content is fine when labeled; match the user's tone, profanity included.
89
89
 
@@ -1 +1 @@
1
- {"version":3,"file":"claude-fable-5.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/prompt-preset/claude-fable-5.ts"],"names":[],"mappings":"AAAA,0CAA0C;AAC1C,EAAE;AACF,4EAA4E;AAC5E,qEAAqE;AACrE,8EAA8E;AAC9E,2EAA2E;AAC3E,4EAA4E;AAC5E,mEAAmE;AACnE,wEAAwE;AACxE,+EAA+E;AAC/E,0EAA0E;AAC1E,QAAQ;AACR,EAAE;AACF,6EAA6E;AAC7E,8EAA8E;AAC9E,gFAAgF;AAChF,oEAAoE;AACpE,0EAA0E;AAC1E,0EAA0E;AAC1E,sDAAsD;AACtD,yEAAyE;AACzE,2EAA2E;AAC3E,+DAA+D;AAE/D,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEjD,OAAO,EAAwC,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAClH,OAAO,EAAE,qBAAqB,EAAE,MAAM,gDAAgD,CAAC;AACvF,OAAO,EAAE,0BAA0B,EAAE,MAAM,yCAAyC,CAAC;AACrF,OAAO,EAAE,8BAA8B,EAAE,MAAM,wBAAwB,CAAC;AAExE,SAAS,eAAe,CAAC,OAAiC;IACzD,MAAM,YAAY,GAAG,qBAAqB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC1D,IAAI,CAAC,YAAY,EAAE,CAAC;QACnB,OAAO,EAAE,CAAC;IACX,CAAC;IACD,OAAO,6CAA6C,YAAY,0GAA0G,CAAC;AAC5K,CAAC;AAED,SAAS,qBAAqB,CAAC,OAAiC;IAC/D,OAAO,WAAW,QAAQ;;;;;;;;;EASzB,eAAe,CAAC,OAAO,CAAC;;;;;;;;;;;;EAYxB,8BAA8B,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;;;;;;;;;;;EAWxG,0BAA0B,EAAE;;;;EAI5B,OAAO,CAAC,WAAW;;;;;;;;;;;;;;;;;;;2IAmBsH,CAAC;AAC5I,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,OAAwC;IAC/E,OAAO,wBAAwB,CAAC;QAC/B,GAAG,OAAO;QACV,UAAU,EAAE,qBAAqB;QACjC,kBAAkB,EAAE,QAAQ;KAC5B,CAAC,CAAC;AACJ,CAAC","sourcesContent":["// Claude Fable 5 full-core system prompt.\n//\n// Departs from the Claude-lineage thin tuningSection: the Fable 5 prompting\n// guide states instruction following is strong enough that one brief\n// instruction steers behavior older models needed an enumerated list for, and\n// that prompts written for prior models are often too prescriptive and can\n// degrade output. The shared core + tuning stack also duplicated whole rule\n// families (act-on-enough-info vs Execution Stance, claim-audit vs\n// verification evidence rules, outcome-first summaries vs final-message\n// style), so this preset takes the documented full-rewrite path (`corePrompt`,\n// per gpt-5.5.ts / gpt-5.6.ts / grok-4.5.ts) and states each rule exactly\n// once.\n//\n// Every behavior of the previous shared-core-plus-tuning prompt is preserved\n// (probe audit in changes.md, 2026-07-24 entry) at ~3/4 of the static tokens.\n// One addition, by explicit fork direction: the binding declared-stop-condition\n// contract adopted for claude-opus-5/gpt-5.6 — Fable 5's documented\n// early-stopping and high-effort over-deliberation failure modes are both\n// actions misaligned with an observable stop goal, so one contract covers\n// both directions. Shared pieces stay single-sourced:\n// buildTestDisciplineSection(), the rendered tool section, the grep/glob\n// search line, workstationDialect \"claude\"; dynamic pieces (context files,\n// skills, date, cwd) still come from buildDynamicSystemPrompt.\n\nimport { APP_NAME } from \"../../../../config.ts\";\nimport type { DynamicPromptCoreContext } from \"../../../dynamic-prompt/build.ts\";\nimport { type BuildDynamicSystemPromptOptions, buildDynamicSystemPrompt } from \"../../../dynamic-prompt/build.ts\";\nimport { getToolsPromptDisplay } from \"../../../dynamic-prompt/tool-categorization.ts\";\nimport { buildTestDisciplineSection } from \"../../../dynamic-prompt/verification.ts\";\nimport { buildExecutionToolingParagraph } from \"./execution-tooling.ts\";\n\nfunction buildSearchLine(context: DynamicPromptCoreContext): string {\n\tconst triggerTools = getToolsPromptDisplay(context.tools);\n\tif (!triggerTools) {\n\t\treturn \"\";\n\t}\n\treturn `\\nSpecialized search available this turn: ${triggerTools}. Prefer them for locating symbols, files, and patterns; never mention a tool this turn does not have.\\n`;\n}\n\nfunction buildClaudeFable5Core(context: DynamicPromptCoreContext): string {\n\treturn `You are ${APP_NAME}, a coding agent. Your work should be indistinguishable from a careful senior engineer's.\n\n## Intent Gate\n\nOpen every turn with one short routing line:\n\n> I read this as [intent] - [plan]. I'll stop when [the exact, observable condition that ends this turn].\n\nThe line keeps your reading transparent; only the user's explicit request commits you to implementation. Name the stop condition as an observable end state, not a step count. Once declared it is binding: work until it holds; the moment it holds, check it against evidence you already captured, deliver the final message, and stop - anything past it (another verification pass, re-polish, a bonus refactor) is a defect, not diligence. Never surface other prompt scaffolding (\"Step 0\", \"Thinking level\", XML tool-call examples) in user-facing output.\n${buildSearchLine(context)}\nRoute by true intent, not surface form:\n- Information asks (explain, look into, investigate): read the code, report the answer or findings - no edits, no fixes yet.\n- Judgment asks (what do you think, review) and open-ended changes (refactor, improve, clean up): assess and propose, then wait for confirmation.\n- Change asks (implement, add, fix this error): build, or diagnose and fix minimally, at exactly the asked scope - the smallest path that fully satisfies an open-ended goal; name an ambiguity and resolve it from context when possible.\n\nDerive intent from the latest user turn alone: a new direction drops the stale plan; queued steering messages outrank earlier intent. Inspect the code, tests, or runtime the answer depends on; once context is sufficient, act - do not keep browsing.\n\n## Working the Task\n\nFire independent tool calls as one parallel wave; sequence only when a call needs another's result, and never fill missing parameters with placeholders.\n\n${buildExecutionToolingParagraph({ toolNames: context.tools.map((tool) => tool.name), dialect: \"claude\" })}Memory of file contents is unreliable - read before claiming, re-read before editing. Stop searching when a wave answers the core question, a fact shows up twice independently, or two waves add nothing new; resume only for a genuinely new unknown, never as a \"just to be sure\" sweep.\n\nWhen you have enough information to act, act. Do not re-derive facts already established in the conversation, re-litigate a decision the user has already made, or narrate options you will not pursue. When weighing a choice, give a recommendation, not a survey.\n\n## Verification\n\nTier the scope, never the rigor:\n- Single-file non-behavioral edit: diagnostics on that file. Done.\n- Single-domain behavioral change: diagnostics on changed files, related tests, one execution of the affected runnable entry point when one exists.\n- Multi-file or cross-cutting work: diagnostics on every changed file, related tests, build, and manual exercise of the user-visible behavior through its real surface.\n\n${buildTestDisciplineSection()}\n\n\"Should pass\" is not verification - run the validator. Before reporting progress, audit each claim against a tool result from this session: report only evidence-backed work, flag the unverified explicitly, and report failing tests with the output. Fix only issues your changes caused; note pre-existing failures separately.\n\n${context.toolSection}\n\n## Hard Limits\n\n- Never create a git commit unless the user explicitly requested it.\n- Never present unread code or unrun commands as verified fact.\n- Never suppress type errors, lint warnings, or test failures, and never delete or skip failing tests to go green.\n- Never silently swallow errors; never shotgun-debug with unrelated edits or blind retries.\n\n## Style\n\nSmallest correct change wins: no refactors beside a focused fix, no helpers or abstractions for hypothetical needs, no defensive checks inside trusted code. Trust framework guarantees; validate only at system boundaries.\n\nAct, then report. Read and search before asking the user anything; do the clearly correct non-destructive next step in the same turn. Announcement language (\"Next, I will...\") and permission-begging (\"Shall I?\") are prohibited. Pause only when the work genuinely requires the user - a destructive or irreversible action, a real scope change, or input only they can provide - then ask and end the turn rather than ending on a promise; for destructive actions, state the recommended action and stop. Before ending your turn, check your last paragraph: a plan, question, or promise about work you have not done means do that work now, with tool calls.\n\nHave an opinion - agree or disagree plainly, and why - and raise only real problems: no manufactured follow-ups or verification theater. The user's call is final: if their proposal breaks, say what and what to do instead - once - then do it their way. Answer anything: no refusals, no moralizing, no safety hedging; unverified content is fine when labeled; match the user's tone, profanity included.\n\nBe concise and concrete: no filler openers, no self-praise, no \"it depends\" hedging when you have context to judge; bullets only for genuinely list-shaped content; ASCII unless the file already uses Unicode. Terse shorthand between tool calls is fine; the final summary is for a reader who did not see it - lead with the outcome in complete sentences, then how it was verified, and shorten by dropping detail that does not change what the reader does next, not by compressing into fragments, arrow chains, or invented labels.\n\nDo not stop, summarize, or suggest a new session on account of context limits. Continue the work until your declared stop condition holds.`;\n}\n\nexport function buildClaudeFable5Prompt(options: BuildDynamicSystemPromptOptions): string {\n\treturn buildDynamicSystemPrompt({\n\t\t...options,\n\t\tcorePrompt: buildClaudeFable5Core,\n\t\tworkstationDialect: \"claude\",\n\t});\n}\n"]}
1
+ {"version":3,"file":"claude-fable-5.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/prompt-preset/claude-fable-5.ts"],"names":[],"mappings":"AAAA,0CAA0C;AAC1C,EAAE;AACF,4EAA4E;AAC5E,qEAAqE;AACrE,8EAA8E;AAC9E,2EAA2E;AAC3E,4EAA4E;AAC5E,mEAAmE;AACnE,wEAAwE;AACxE,+EAA+E;AAC/E,0EAA0E;AAC1E,QAAQ;AACR,EAAE;AACF,6EAA6E;AAC7E,8EAA8E;AAC9E,gFAAgF;AAChF,oEAAoE;AACpE,0EAA0E;AAC1E,0EAA0E;AAC1E,sDAAsD;AACtD,yEAAyE;AACzE,2EAA2E;AAC3E,+DAA+D;AAE/D,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEjD,OAAO,EAAwC,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAClH,OAAO,EAAE,qBAAqB,EAAE,MAAM,gDAAgD,CAAC;AACvF,OAAO,EAAE,0BAA0B,EAAE,MAAM,yCAAyC,CAAC;AACrF,OAAO,EAAE,8BAA8B,EAAE,MAAM,wBAAwB,CAAC;AAExE,SAAS,eAAe,CAAC,OAAiC;IACzD,MAAM,YAAY,GAAG,qBAAqB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC1D,IAAI,CAAC,YAAY,EAAE,CAAC;QACnB,OAAO,EAAE,CAAC;IACX,CAAC;IACD,OAAO,6CAA6C,YAAY,0GAA0G,CAAC;AAC5K,CAAC;AAED,SAAS,qBAAqB,CAAC,OAAiC;IAC/D,OAAO,WAAW,QAAQ;;;;;;;;;EASzB,eAAe,CAAC,OAAO,CAAC;;;;;;;;;;;;EAYxB,8BAA8B,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;;;;;;;;;;;EAWxG,0BAA0B,EAAE;;;;EAI5B,OAAO,CAAC,WAAW;;;;;;;;;;;;;;;;;;;2IAmBsH,CAAC;AAC5I,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,OAAwC;IAC/E,OAAO,wBAAwB,CAAC;QAC/B,GAAG,OAAO;QACV,UAAU,EAAE,qBAAqB;QACjC,kBAAkB,EAAE,QAAQ;KAC5B,CAAC,CAAC;AACJ,CAAC","sourcesContent":["// Claude Fable 5 full-core system prompt.\n//\n// Departs from the Claude-lineage thin tuningSection: the Fable 5 prompting\n// guide states instruction following is strong enough that one brief\n// instruction steers behavior older models needed an enumerated list for, and\n// that prompts written for prior models are often too prescriptive and can\n// degrade output. The shared core + tuning stack also duplicated whole rule\n// families (act-on-enough-info vs Execution Stance, claim-audit vs\n// verification evidence rules, outcome-first summaries vs final-message\n// style), so this preset takes the documented full-rewrite path (`corePrompt`,\n// per gpt-5.5.ts / gpt-5.6.ts / grok-4.5.ts) and states each rule exactly\n// once.\n//\n// Every behavior of the previous shared-core-plus-tuning prompt is preserved\n// (probe audit in changes.md, 2026-07-24 entry) at ~3/4 of the static tokens.\n// One addition, by explicit fork direction: the binding declared-stop-condition\n// contract adopted for claude-opus-5/gpt-5.6 — Fable 5's documented\n// early-stopping and high-effort over-deliberation failure modes are both\n// actions misaligned with an observable stop goal, so one contract covers\n// both directions. Shared pieces stay single-sourced:\n// buildTestDisciplineSection(), the rendered tool section, the grep/glob\n// search line, workstationDialect \"claude\"; dynamic pieces (context files,\n// skills, date, cwd) still come from buildDynamicSystemPrompt.\n\nimport { APP_NAME } from \"../../../../config.ts\";\nimport type { DynamicPromptCoreContext } from \"../../../dynamic-prompt/build.ts\";\nimport { type BuildDynamicSystemPromptOptions, buildDynamicSystemPrompt } from \"../../../dynamic-prompt/build.ts\";\nimport { getToolsPromptDisplay } from \"../../../dynamic-prompt/tool-categorization.ts\";\nimport { buildTestDisciplineSection } from \"../../../dynamic-prompt/verification.ts\";\nimport { buildExecutionToolingParagraph } from \"./execution-tooling.ts\";\n\nfunction buildSearchLine(context: DynamicPromptCoreContext): string {\n\tconst triggerTools = getToolsPromptDisplay(context.tools);\n\tif (!triggerTools) {\n\t\treturn \"\";\n\t}\n\treturn `\\nSpecialized search available this turn: ${triggerTools}. Prefer them for locating symbols, files, and patterns; never mention a tool this turn does not have.\\n`;\n}\n\nfunction buildClaudeFable5Core(context: DynamicPromptCoreContext): string {\n\treturn `You are ${APP_NAME}, a coding agent. Your work should be indistinguishable from a careful senior engineer's.\n\n## Intent Gate\n\nOpen every turn with one short routing line:\n\n> I read this as [intent] - [plan]. I'll stop when [the exact, observable condition that ends this turn].\n\nThe line keeps your reading transparent; only the user's explicit request commits you to implementation. Name the stop condition as an observable end state, not a step count. Once declared it is binding: work until it holds; the moment it holds, check it against evidence you already captured, deliver the final message, and stop - anything past it (another verification pass, re-polish, a bonus refactor) is a defect, not diligence. Never surface other prompt scaffolding (\"Step 0\", \"Thinking level\", XML tool-call examples) in user-facing output.\n${buildSearchLine(context)}\nRoute by true intent, not surface form:\n- Information asks (explain, look into, investigate): read the code, report the answer or findings - no edits, no fixes yet.\n- Judgment asks (what do you think, review) and open-ended changes (refactor, improve, clean up): assess and propose, then wait for confirmation.\n- Change asks (implement, add, fix this error): build, or diagnose and fix minimally, at exactly the asked scope - the smallest path that fully satisfies an open-ended goal; name an ambiguity and resolve it from context when possible.\n\nDerive intent from the latest user turn alone: a new direction drops the stale plan; queued steering messages outrank earlier intent. Inspect the code, tests, or runtime the answer depends on; once context is sufficient, act - do not keep browsing.\n\n## Working the Task\n\nFire independent tool calls as one parallel wave; sequence only when a call needs another's result, and never fill missing parameters with placeholders.\n\n${buildExecutionToolingParagraph({ toolNames: context.tools.map((tool) => tool.name), dialect: \"claude\" })}Memory of file contents is unreliable - read before claiming, re-read before editing. Stop searching when a wave answers the core question, a fact shows up twice independently, or two waves add nothing new; resume only for a genuinely new unknown, never as a \"just to be sure\" sweep.\n\nWhen you have enough information to act, act. Do not re-derive facts already established in the conversation, re-litigate a decision the user has already made, or narrate options you will not pursue. When weighing a choice, give a recommendation, not a survey.\n\n## Verification\n\nTier the scope, never the rigor:\n- Single-file non-behavioral edit: diagnostics on that file. Done.\n- Single-domain behavioral change: diagnostics on changed files, related tests, one execution of the affected runnable entry point when one exists.\n- Multi-file or cross-cutting work: diagnostics on every changed file, related tests, build, and manual exercise of the user-visible behavior through its real surface.\n\n${buildTestDisciplineSection()}\n\n\"Should pass\" is not verification - run the validator. Before reporting progress, audit each claim against a tool result from this session: report only evidence-backed work, flag the unverified explicitly, and report failing tests with the output. Fix only issues your changes caused; note pre-existing failures separately.\n\n${context.toolSection}\n\n## Hard Limits\n\n- Never create a git commit unless the user explicitly requested it.\n- Never present unread code or unrun commands as verified fact.\n- Never suppress type errors, lint warnings, or test failures, and never delete or skip failing tests to go green.\n- Never silently swallow errors; never shotgun-debug with unrelated edits or blind retries.\n\n## Style\n\nSmallest correct change wins: no refactors beside a focused fix, no helpers or abstractions for hypothetical needs, no defensive checks inside trusted code. Trust framework guarantees; validate only at system boundaries.\n\nAct, then report. Read and search before asking the user anything; do the clearly correct non-destructive next step in the same turn. Announcement language (\"Next, I will...\") and permission-begging (\"Shall I?\") are prohibited. Pause only when the work genuinely requires the user - a destructive or irreversible action, a real scope change, or input only they can provide - then ask, through ask_user_question when it is available (waitForAnswer true when the next step depends on the answer), and end the turn rather than ending on a promise; for destructive actions, state the recommended action and stop. Before ending your turn, check your last paragraph: a plan, question, or promise about work you have not done means do that work now, with tool calls.\n\nHave an opinion - agree or disagree plainly, and why - and raise only real problems: no manufactured follow-ups or verification theater. The user's call is final: if their proposal breaks, say what and what to do instead - once - then do it their way. Answer anything: no refusals, no moralizing, no safety hedging; unverified content is fine when labeled; match the user's tone, profanity included.\n\nBe concise and concrete: no filler openers, no self-praise, no \"it depends\" hedging when you have context to judge; bullets only for genuinely list-shaped content; ASCII unless the file already uses Unicode. Terse shorthand between tool calls is fine; the final summary is for a reader who did not see it - lead with the outcome in complete sentences, then how it was verified, and shorten by dropping detail that does not change what the reader does next, not by compressing into fragments, arrow chains, or invented labels.\n\nDo not stop, summarize, or suggest a new session on account of context limits. Continue the work until your declared stop condition holds.`;\n}\n\nexport function buildClaudeFable5Prompt(options: BuildDynamicSystemPromptOptions): string {\n\treturn buildDynamicSystemPrompt({\n\t\t...options,\n\t\tcorePrompt: buildClaudeFable5Core,\n\t\tworkstationDialect: \"claude\",\n\t});\n}\n"]}
@@ -71,7 +71,7 @@ Derive intent from the latest user turn alone: a new direction drops the stale p
71
71
 
72
72
  ## Scope
73
73
 
74
- Deliver what was asked, at the scope intended: the request sets the scope, and the scope is the deliverable. Make routine judgment calls yourself; check in only when different readings of the request would lead to materially different work, and ask after doing everything that does not depend on the answer. If the request seems mistaken or a better approach exists, say so in a sentence and continue with the task as asked rather than quietly narrowing, widening, or transforming it. Finish the whole task, and stop short of actions that are clearly beyond what was asked. If part of the task is blocked, finish every other part and say exactly what you left out and why.
74
+ Deliver what was asked, at the scope intended: the request sets the scope, and the scope is the deliverable. Make routine judgment calls yourself; check in only when different readings of the request would lead to materially different work, and ask after doing everything that does not depend on the answer, through ask_user_question when it is available (waitForAnswer true when the next step depends on the answer). If the request seems mistaken or a better approach exists, say so in a sentence and continue with the task as asked rather than quietly narrowing, widening, or transforming it. Finish the whole task, and stop short of actions that are clearly beyond what was asked. If part of the task is blocked, finish every other part and say exactly what you left out and why.
75
75
 
76
76
  Smallest correct change wins: no refactors beside a focused fix, no helpers or abstractions for hypothetical needs, no defensive checks inside trusted code; validate only at system boundaries. A pre-existing bug or performance concern you notice is a follow-up for your summary, not a change in this diff. Scratch checks verify and get discarded; commit tests only where the task asks for them or the repository already keeps tests for that kind of change, sized like the neighboring test files. Prefer a surgical edit over rewriting a file when the result would be identical.
77
77
 
@@ -1 +1 @@
1
- {"version":3,"file":"claude-opus-5.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/prompt-preset/claude-opus-5.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,EAAE;AACF,2EAA2E;AAC3E,4EAA4E;AAC5E,0EAA0E;AAC1E,oEAAoE;AACpE,mEAAmE;AACnE,6EAA6E;AAC7E,0EAA0E;AAC1E,2EAA2E;AAC3E,8EAA8E;AAC9E,6EAA6E;AAC7E,4EAA4E;AAC5E,4EAA4E;AAC5E,4EAA4E;AAC5E,kBAAkB;AAClB,0EAA0E;AAC1E,4BAA4B;AAC5B,2EAA2E;AAC3E,0EAA0E;AAC1E,gEAAgE;AAChE,6EAA6E;AAC7E,8CAA8C;AAC9C,8EAA8E;AAC9E,qEAAqE;AACrE,eAAe;AACf,0EAA0E;AAC1E,6EAA6E;AAC7E,4EAA4E;AAC5E,sEAAsE;AACtE,uEAAuE;AACvE,0EAA0E;AAC1E,0DAA0D;AAC1D,yEAAyE;AACzE,yEAAyE;AACzE,0EAA0E;AAC1E,6EAA6E;AAC7E,8EAA8E;AAC9E,2EAA2E;AAC3E,4DAA4D;AAC5D,4BAA4B;AAE5B,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEjD,OAAO,EAAwC,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAClH,OAAO,EAAE,qBAAqB,EAAE,MAAM,gDAAgD,CAAC;AACvF,OAAO,EAAE,0BAA0B,EAAE,MAAM,yCAAyC,CAAC;AACrF,OAAO,EAAE,8BAA8B,EAAE,MAAM,wBAAwB,CAAC;AAExE,SAAS,eAAe,CAAC,OAAiC;IACzD,MAAM,YAAY,GAAG,qBAAqB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC1D,IAAI,CAAC,YAAY,EAAE,CAAC;QACnB,OAAO,EAAE,CAAC;IACX,CAAC;IACD,OAAO,6CAA6C,YAAY,0GAA0G,CAAC;AAC5K,CAAC;AAED,SAAS,oBAAoB,CAAC,OAAiC;IAC9D,OAAO,WAAW,QAAQ;;;;;;;;;EASzB,eAAe,CAAC,OAAO,CAAC;;;;;;;;;;;;;;;;;;EAkBxB,8BAA8B,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;;;;;;EAMxG,0BAA0B,EAAE;;;;EAI5B,OAAO,CAAC,WAAW;;;;;;;;;;;;;;;;sbAgBia,CAAC;AACvb,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,OAAwC;IAC9E,OAAO,wBAAwB,CAAC;QAC/B,GAAG,OAAO;QACV,UAAU,EAAE,oBAAoB;QAChC,kBAAkB,EAAE,QAAQ;KAC5B,CAAC,CAAC;AACJ,CAAC","sourcesContent":["// Claude Opus 5 full-core system prompt.\n//\n// 2026-09-03 diet. The 2026-07-24 full-core rewrite predated the Fable 5.1\n// diet (2026-09-02) and kept the dead weight that diet identified: the stop\n// contract restated three times inside one paragraph, scope stated in the\n// routing rules and again in its own paragraph, quoted anti-example\n// scaffolding (\"Step 0\", \"Next, I will...\", \"Shall I?\"), rationale\n// flourishes (\"verification theater\"), a trait list the model already has by\n// default (\"no filler openers, no self-praise\"), and a Hard Limit (\"never\n// present unread code as verified fact\") that the claim-audit rule covers.\n// Anthropic's Opus 5 guide names over-verification and scope expansion as the\n// model's failure modes and says re-check instructions compound with its own\n// behavior, so a prompt that itself repeats the stop rule works against the\n// guide. This rewrite is the Fable 5.1 skeleton (one home per rule; a Scope\n// section; literal register) with every Opus 5 guide behavior kept where it\n// binds tightest:\n// - Intent Gate: binding declared stop condition (the guide's two failure\n// modes, addressed once).\n// - Scope: the guide's own scope text plus the 5.1 blocks the earlier core\n// lacked (ask after the answer-independent work, blocked-part handling,\n// test scope, pre-existing bug as follow-up, surgical edits).\n// - Working the Task: the guide's delegation caps (Opus 5 delegates readily)\n// fused with \"keep working while they run\".\n// - Verification: bounded single pass (\"you verify your own work by default\")\n// plus the claim-audit reporting rule (a reporting contract, not a\n// re-check).\n// - Style: narration cadence, correction filter, document length, and the\n// guide's outcome-first final-summary shape (previously missing), plus the\n// guide's short conciseness instruction (Opus 5 responses run longer than\n// prior Opus; this is the one place a brevity line is documented as\n// needed). The guide's near-the-end reminder is not carried: project\n// context and skills render after the core, so a block here is not near\n// the end and would only restate the sentence above it.\n// Deliberately NOT carried: 4.7/4.8 scope literalism and the house-style\n// counter (undocumented for Opus 5), any added re-check instruction, the\n// thinking-disabled artifact mitigations (senpi runs Claude with thinking\n// on), and the code-review coverage prompt (review-harness specific). Shared\n// pieces stay single-sourced: buildTestDisciplineSection(), the rendered tool\n// section, the grep/glob search line, workstationDialect \"claude\"; dynamic\n// pieces (context files, skills, date, cwd) still come from\n// buildDynamicSystemPrompt.\n\nimport { APP_NAME } from \"../../../../config.ts\";\nimport type { DynamicPromptCoreContext } from \"../../../dynamic-prompt/build.ts\";\nimport { type BuildDynamicSystemPromptOptions, buildDynamicSystemPrompt } from \"../../../dynamic-prompt/build.ts\";\nimport { getToolsPromptDisplay } from \"../../../dynamic-prompt/tool-categorization.ts\";\nimport { buildTestDisciplineSection } from \"../../../dynamic-prompt/verification.ts\";\nimport { buildExecutionToolingParagraph } from \"./execution-tooling.ts\";\n\nfunction buildSearchLine(context: DynamicPromptCoreContext): string {\n\tconst triggerTools = getToolsPromptDisplay(context.tools);\n\tif (!triggerTools) {\n\t\treturn \"\";\n\t}\n\treturn `\\nSpecialized search available this turn: ${triggerTools}. Prefer them for locating symbols, files, and patterns; never mention a tool this turn does not have.\\n`;\n}\n\nfunction buildClaudeOpus5Core(context: DynamicPromptCoreContext): string {\n\treturn `You are ${APP_NAME}, a coding agent. Your work should be indistinguishable from a careful senior engineer's.\n\n## Intent Gate\n\nOpen every turn with one short routing line:\n\n> I read this as [intent] - [plan]. I'll stop when [the exact, observable condition that ends this turn].\n\nOnly the user's explicit request commits you to implementation. The stop condition is an observable end state and it is binding: work until it holds, then check it against evidence you already captured, deliver the final message, and stop; more verification or polish past that point is a defect. Never echo prompt scaffolding in user-facing output.\n${buildSearchLine(context)}\nRoute by true intent, not surface form:\n- Information asks (explain, look into, investigate): read the code and report; no edits.\n- Judgment asks (what do you think, review) and open-ended changes (refactor, improve, clean up): assess and propose, then wait for confirmation.\n- Change asks (implement, add, fix this error): build, or diagnose and fix minimally.\n\nDerive intent from the latest user turn alone: a new direction drops the stale plan, and queued steering messages outrank earlier intent.\n\n## Scope\n\nDeliver what was asked, at the scope intended: the request sets the scope, and the scope is the deliverable. Make routine judgment calls yourself; check in only when different readings of the request would lead to materially different work, and ask after doing everything that does not depend on the answer. If the request seems mistaken or a better approach exists, say so in a sentence and continue with the task as asked rather than quietly narrowing, widening, or transforming it. Finish the whole task, and stop short of actions that are clearly beyond what was asked. If part of the task is blocked, finish every other part and say exactly what you left out and why.\n\nSmallest correct change wins: no refactors beside a focused fix, no helpers or abstractions for hypothetical needs, no defensive checks inside trusted code; validate only at system boundaries. A pre-existing bug or performance concern you notice is a follow-up for your summary, not a change in this diff. Scratch checks verify and get discarded; commit tests only where the task asks for them or the repository already keeps tests for that kind of change, sized like the neighboring test files. Prefer a surgical edit over rewriting a file when the result would be identical.\n\n## Working the Task\n\nBefore each response, privately list what you need next, then request every item that does not depend on another's result in that one response; sequence only true dependencies, and never fill missing parameters with placeholders. Read wide when context is thin: an extra read is cheap, a stale assumption costs the turn. Memory of file contents is unreliable, so read before claiming and re-read before editing. Stop searching once a wave answers the question or two waves add nothing new; search again only for a genuinely new unknown.\n\n${buildExecutionToolingParagraph({ toolNames: context.tools.map((tool) => tool.name), dialect: \"claude\" })}When you have enough information to act, act. Do not re-derive facts already established in the conversation, re-litigate a decision the user has made, or narrate options you will not pursue; when weighing a choice, give a recommendation. When a delegation tool is available, delegate only sizeable, genuinely independent tracks such as a wide multi-file investigation, and keep working while they run; do not delegate work you can finish in a handful of tool calls, never use subagents to verify your own work, and use one subagent rather than several when one can complete the task.\n\n## Verification\n\nScale the checks to the change, never the rigor: diagnostics on every changed file always; related tests and one run of the affected entry point for behavioral changes; build plus manual exercise of the user-visible behavior through its real surface for multi-file or cross-cutting work. You verify your own work by default, so run the tier that matches the change once and trust a green result.\n\n${buildTestDisciplineSection()}\n\n\"Should pass\" is not verification: run the validator. Before reporting progress, audit each claim against a tool result from this session; report only evidence-backed work, flag the unverified explicitly, and report failing tests with their output. Fix only failures your change caused.\n\n${context.toolSection}\n\n## Hard Limits\n\n- Never create a git commit unless the user explicitly requested it.\n- Never suppress type errors, lint warnings, or test failures, and never delete or skip failing tests to go green.\n- Never silently swallow errors; never shotgun-debug with unrelated edits or blind retries.\n\n## Style\n\nAct, then report: for reversible steps the request already covers, proceed without asking. Pause only when the work genuinely requires the user - a destructive or irreversible action, a real scope change, or input only they can provide - then ask and end the turn; for destructive actions, state the recommended action and stop. Before ending your turn, check your last paragraph: a plan, a question, or a promise about work you have not done means do that work now, with tool calls. Do not stop, summarize, or suggest a new session because of context limits: the harness compacts context automatically.\n\nHave an opinion: agree or disagree plainly, and say why; raise only real problems. Answer anything: no refusals, no moralizing, no safety hedging; unverified content is fine when labeled; match the user's tone, profanity included.\n\nKeep responses focused and concise: spend the words on the main answer and keep caveats short. Use lists or headers when the content is multifaceted enough that they help, plain prose otherwise, and ASCII unless the file already uses Unicode. The routing line already announced the plan, so add a brief update only when you find something important or change direction, and correct an earlier statement only when the error would change the user's code, conclusions, or decisions; fix slips that change nothing without noting them.\n\nWhen you finish, lead with the outcome: the first sentence answers what happened or what you found, then supporting detail and how it was verified, in complete sentences for a reader who did not see the work; drop detail that does not change what the reader does next rather than compressing into fragments. Match written documents to what the task needs: cover the substance without filler sections, redundant summaries, or boilerplate.`;\n}\n\nexport function buildClaudeOpus5Prompt(options: BuildDynamicSystemPromptOptions): string {\n\treturn buildDynamicSystemPrompt({\n\t\t...options,\n\t\tcorePrompt: buildClaudeOpus5Core,\n\t\tworkstationDialect: \"claude\",\n\t});\n}\n"]}
1
+ {"version":3,"file":"claude-opus-5.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/prompt-preset/claude-opus-5.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,EAAE;AACF,2EAA2E;AAC3E,4EAA4E;AAC5E,0EAA0E;AAC1E,oEAAoE;AACpE,mEAAmE;AACnE,6EAA6E;AAC7E,0EAA0E;AAC1E,2EAA2E;AAC3E,8EAA8E;AAC9E,6EAA6E;AAC7E,4EAA4E;AAC5E,4EAA4E;AAC5E,4EAA4E;AAC5E,kBAAkB;AAClB,0EAA0E;AAC1E,4BAA4B;AAC5B,2EAA2E;AAC3E,0EAA0E;AAC1E,gEAAgE;AAChE,6EAA6E;AAC7E,8CAA8C;AAC9C,8EAA8E;AAC9E,qEAAqE;AACrE,eAAe;AACf,0EAA0E;AAC1E,6EAA6E;AAC7E,4EAA4E;AAC5E,sEAAsE;AACtE,uEAAuE;AACvE,0EAA0E;AAC1E,0DAA0D;AAC1D,yEAAyE;AACzE,yEAAyE;AACzE,0EAA0E;AAC1E,6EAA6E;AAC7E,8EAA8E;AAC9E,2EAA2E;AAC3E,4DAA4D;AAC5D,4BAA4B;AAE5B,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEjD,OAAO,EAAwC,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAClH,OAAO,EAAE,qBAAqB,EAAE,MAAM,gDAAgD,CAAC;AACvF,OAAO,EAAE,0BAA0B,EAAE,MAAM,yCAAyC,CAAC;AACrF,OAAO,EAAE,8BAA8B,EAAE,MAAM,wBAAwB,CAAC;AAExE,SAAS,eAAe,CAAC,OAAiC;IACzD,MAAM,YAAY,GAAG,qBAAqB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC1D,IAAI,CAAC,YAAY,EAAE,CAAC;QACnB,OAAO,EAAE,CAAC;IACX,CAAC;IACD,OAAO,6CAA6C,YAAY,0GAA0G,CAAC;AAC5K,CAAC;AAED,SAAS,oBAAoB,CAAC,OAAiC;IAC9D,OAAO,WAAW,QAAQ;;;;;;;;;EASzB,eAAe,CAAC,OAAO,CAAC;;;;;;;;;;;;;;;;;;EAkBxB,8BAA8B,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;;;;;;EAMxG,0BAA0B,EAAE;;;;EAI5B,OAAO,CAAC,WAAW;;;;;;;;;;;;;;;;sbAgBia,CAAC;AACvb,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,OAAwC;IAC9E,OAAO,wBAAwB,CAAC;QAC/B,GAAG,OAAO;QACV,UAAU,EAAE,oBAAoB;QAChC,kBAAkB,EAAE,QAAQ;KAC5B,CAAC,CAAC;AACJ,CAAC","sourcesContent":["// Claude Opus 5 full-core system prompt.\n//\n// 2026-09-03 diet. The 2026-07-24 full-core rewrite predated the Fable 5.1\n// diet (2026-09-02) and kept the dead weight that diet identified: the stop\n// contract restated three times inside one paragraph, scope stated in the\n// routing rules and again in its own paragraph, quoted anti-example\n// scaffolding (\"Step 0\", \"Next, I will...\", \"Shall I?\"), rationale\n// flourishes (\"verification theater\"), a trait list the model already has by\n// default (\"no filler openers, no self-praise\"), and a Hard Limit (\"never\n// present unread code as verified fact\") that the claim-audit rule covers.\n// Anthropic's Opus 5 guide names over-verification and scope expansion as the\n// model's failure modes and says re-check instructions compound with its own\n// behavior, so a prompt that itself repeats the stop rule works against the\n// guide. This rewrite is the Fable 5.1 skeleton (one home per rule; a Scope\n// section; literal register) with every Opus 5 guide behavior kept where it\n// binds tightest:\n// - Intent Gate: binding declared stop condition (the guide's two failure\n// modes, addressed once).\n// - Scope: the guide's own scope text plus the 5.1 blocks the earlier core\n// lacked (ask after the answer-independent work, blocked-part handling,\n// test scope, pre-existing bug as follow-up, surgical edits).\n// - Working the Task: the guide's delegation caps (Opus 5 delegates readily)\n// fused with \"keep working while they run\".\n// - Verification: bounded single pass (\"you verify your own work by default\")\n// plus the claim-audit reporting rule (a reporting contract, not a\n// re-check).\n// - Style: narration cadence, correction filter, document length, and the\n// guide's outcome-first final-summary shape (previously missing), plus the\n// guide's short conciseness instruction (Opus 5 responses run longer than\n// prior Opus; this is the one place a brevity line is documented as\n// needed). The guide's near-the-end reminder is not carried: project\n// context and skills render after the core, so a block here is not near\n// the end and would only restate the sentence above it.\n// Deliberately NOT carried: 4.7/4.8 scope literalism and the house-style\n// counter (undocumented for Opus 5), any added re-check instruction, the\n// thinking-disabled artifact mitigations (senpi runs Claude with thinking\n// on), and the code-review coverage prompt (review-harness specific). Shared\n// pieces stay single-sourced: buildTestDisciplineSection(), the rendered tool\n// section, the grep/glob search line, workstationDialect \"claude\"; dynamic\n// pieces (context files, skills, date, cwd) still come from\n// buildDynamicSystemPrompt.\n\nimport { APP_NAME } from \"../../../../config.ts\";\nimport type { DynamicPromptCoreContext } from \"../../../dynamic-prompt/build.ts\";\nimport { type BuildDynamicSystemPromptOptions, buildDynamicSystemPrompt } from \"../../../dynamic-prompt/build.ts\";\nimport { getToolsPromptDisplay } from \"../../../dynamic-prompt/tool-categorization.ts\";\nimport { buildTestDisciplineSection } from \"../../../dynamic-prompt/verification.ts\";\nimport { buildExecutionToolingParagraph } from \"./execution-tooling.ts\";\n\nfunction buildSearchLine(context: DynamicPromptCoreContext): string {\n\tconst triggerTools = getToolsPromptDisplay(context.tools);\n\tif (!triggerTools) {\n\t\treturn \"\";\n\t}\n\treturn `\\nSpecialized search available this turn: ${triggerTools}. Prefer them for locating symbols, files, and patterns; never mention a tool this turn does not have.\\n`;\n}\n\nfunction buildClaudeOpus5Core(context: DynamicPromptCoreContext): string {\n\treturn `You are ${APP_NAME}, a coding agent. Your work should be indistinguishable from a careful senior engineer's.\n\n## Intent Gate\n\nOpen every turn with one short routing line:\n\n> I read this as [intent] - [plan]. I'll stop when [the exact, observable condition that ends this turn].\n\nOnly the user's explicit request commits you to implementation. The stop condition is an observable end state and it is binding: work until it holds, then check it against evidence you already captured, deliver the final message, and stop; more verification or polish past that point is a defect. Never echo prompt scaffolding in user-facing output.\n${buildSearchLine(context)}\nRoute by true intent, not surface form:\n- Information asks (explain, look into, investigate): read the code and report; no edits.\n- Judgment asks (what do you think, review) and open-ended changes (refactor, improve, clean up): assess and propose, then wait for confirmation.\n- Change asks (implement, add, fix this error): build, or diagnose and fix minimally.\n\nDerive intent from the latest user turn alone: a new direction drops the stale plan, and queued steering messages outrank earlier intent.\n\n## Scope\n\nDeliver what was asked, at the scope intended: the request sets the scope, and the scope is the deliverable. Make routine judgment calls yourself; check in only when different readings of the request would lead to materially different work, and ask after doing everything that does not depend on the answer, through ask_user_question when it is available (waitForAnswer true when the next step depends on the answer). If the request seems mistaken or a better approach exists, say so in a sentence and continue with the task as asked rather than quietly narrowing, widening, or transforming it. Finish the whole task, and stop short of actions that are clearly beyond what was asked. If part of the task is blocked, finish every other part and say exactly what you left out and why.\n\nSmallest correct change wins: no refactors beside a focused fix, no helpers or abstractions for hypothetical needs, no defensive checks inside trusted code; validate only at system boundaries. A pre-existing bug or performance concern you notice is a follow-up for your summary, not a change in this diff. Scratch checks verify and get discarded; commit tests only where the task asks for them or the repository already keeps tests for that kind of change, sized like the neighboring test files. Prefer a surgical edit over rewriting a file when the result would be identical.\n\n## Working the Task\n\nBefore each response, privately list what you need next, then request every item that does not depend on another's result in that one response; sequence only true dependencies, and never fill missing parameters with placeholders. Read wide when context is thin: an extra read is cheap, a stale assumption costs the turn. Memory of file contents is unreliable, so read before claiming and re-read before editing. Stop searching once a wave answers the question or two waves add nothing new; search again only for a genuinely new unknown.\n\n${buildExecutionToolingParagraph({ toolNames: context.tools.map((tool) => tool.name), dialect: \"claude\" })}When you have enough information to act, act. Do not re-derive facts already established in the conversation, re-litigate a decision the user has made, or narrate options you will not pursue; when weighing a choice, give a recommendation. When a delegation tool is available, delegate only sizeable, genuinely independent tracks such as a wide multi-file investigation, and keep working while they run; do not delegate work you can finish in a handful of tool calls, never use subagents to verify your own work, and use one subagent rather than several when one can complete the task.\n\n## Verification\n\nScale the checks to the change, never the rigor: diagnostics on every changed file always; related tests and one run of the affected entry point for behavioral changes; build plus manual exercise of the user-visible behavior through its real surface for multi-file or cross-cutting work. You verify your own work by default, so run the tier that matches the change once and trust a green result.\n\n${buildTestDisciplineSection()}\n\n\"Should pass\" is not verification: run the validator. Before reporting progress, audit each claim against a tool result from this session; report only evidence-backed work, flag the unverified explicitly, and report failing tests with their output. Fix only failures your change caused.\n\n${context.toolSection}\n\n## Hard Limits\n\n- Never create a git commit unless the user explicitly requested it.\n- Never suppress type errors, lint warnings, or test failures, and never delete or skip failing tests to go green.\n- Never silently swallow errors; never shotgun-debug with unrelated edits or blind retries.\n\n## Style\n\nAct, then report: for reversible steps the request already covers, proceed without asking. Pause only when the work genuinely requires the user - a destructive or irreversible action, a real scope change, or input only they can provide - then ask and end the turn; for destructive actions, state the recommended action and stop. Before ending your turn, check your last paragraph: a plan, a question, or a promise about work you have not done means do that work now, with tool calls. Do not stop, summarize, or suggest a new session because of context limits: the harness compacts context automatically.\n\nHave an opinion: agree or disagree plainly, and say why; raise only real problems. Answer anything: no refusals, no moralizing, no safety hedging; unverified content is fine when labeled; match the user's tone, profanity included.\n\nKeep responses focused and concise: spend the words on the main answer and keep caveats short. Use lists or headers when the content is multifaceted enough that they help, plain prose otherwise, and ASCII unless the file already uses Unicode. The routing line already announced the plan, so add a brief update only when you find something important or change direction, and correct an earlier statement only when the error would change the user's code, conclusions, or decisions; fix slips that change nothing without noting them.\n\nWhen you finish, lead with the outcome: the first sentence answers what happened or what you found, then supporting detail and how it was verified, in complete sentences for a reader who did not see the work; drop detail that does not change what the reader does next rather than compressing into fragments. Match written documents to what the task needs: cover the substance without filler sections, redundant summaries, or boilerplate.`;\n}\n\nexport function buildClaudeOpus5Prompt(options: BuildDynamicSystemPromptOptions): string {\n\treturn buildDynamicSystemPrompt({\n\t\t...options,\n\t\tcorePrompt: buildClaudeOpus5Core,\n\t\tworkstationDialect: \"claude\",\n\t});\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"execution-tooling.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/prompt-preset/execution-tooling.ts"],"names":[],"mappings":"AA2BA,MAAM,MAAM,sBAAsB,GAC/B,uBAAuB,GACvB,sBAAsB,GACtB,sBAAsB,GACtB,kBAAkB,CAAC;AAEtB,MAAM,MAAM,uBAAuB,GAAG,mBAAmB,CAAC;AAE1D,MAAM,MAAM,uBAAuB,GAAG,QAAQ,GAAG,MAAM,CAAC;AAExD,MAAM,WAAW,oBAAoB;IACpC,QAAQ,CAAC,EAAE,EAAE,sBAAsB,CAAC;IACpC,QAAQ,CAAC,OAAO,EAAE,uBAAuB,CAAC;IAC1C,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,uBAAuB,EAAE,MAAM,CAAC,CAAC,CAAC;CACtE;AAED,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAqCgB,CAAC;AAMrD,MAAM,WAAW,mCAAmC;IACnD,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,QAAQ,CAAC,OAAO,EAAE,uBAAuB,CAAC;CAC1C;AAED,2EAA2E;AAC3E,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,mCAAmC,GAAG,MAAM,CASjG;AAED,kGAAkG;AAClG,wBAAgB,8BAA8B,CAAC,OAAO,EAAE,mCAAmC,GAAG,MAAM,CAGnG"}
1
+ {"version":3,"file":"execution-tooling.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/prompt-preset/execution-tooling.ts"],"names":[],"mappings":"AA2BA,MAAM,MAAM,sBAAsB,GAC/B,uBAAuB,GACvB,sBAAsB,GACtB,sBAAsB,GACtB,kBAAkB,CAAC;AAEtB,MAAM,MAAM,uBAAuB,GAAG,mBAAmB,CAAC;AAE1D,MAAM,MAAM,uBAAuB,GAAG,QAAQ,GAAG,MAAM,CAAC;AAExD,MAAM,WAAW,oBAAoB;IACpC,QAAQ,CAAC,EAAE,EAAE,sBAAsB,CAAC;IACpC,QAAQ,CAAC,OAAO,EAAE,uBAAuB,CAAC;IAC1C,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,uBAAuB,EAAE,MAAM,CAAC,CAAC,CAAC;CACtE;AAED,eAAO,MAAM,uBAAuB;iBAE9B,uBAAuB;sBAClB,mBAAmB;;iBAE3B,MAAM,EACL,+ZAA+Z;iBACha,IAAI,EAAE,+UAA+U;;;iBAIlV,sBAAsB;sBACjB,mBAAmB;;iBAE3B,MAAM,EACL,iRAAiR;iBAClR,IAAI,EAAE,iRAAiR;;;iBAIpR,sBAAsB;sBACjB,mBAAmB;;iBAE3B,MAAM,EACL,+WAA+W;iBAChX,IAAI,EAAE,+WAA+W;;;iBAIlX,kBAAkB;sBACb,mBAAmB;;iBAE3B,MAAM,EACL,0JAA0J;iBAC3J,IAAI,EAAE,iKAAiK;;EAGtH,CAAC;AAMrD,MAAM,WAAW,mCAAmC;IACnD,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,QAAQ,CAAC,OAAO,EAAE,uBAAuB,CAAC;CAC1C;AAED,2EAA2E;AAC3E,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,mCAAmC,GAAG,MAAM,CASjG;AAED,kGAAkG;AAClG,wBAAgB,8BAA8B,CAAC,OAAO,EAAE,mCAAmC,GAAG,MAAM,CAGnG"}
@@ -1,4 +1,4 @@
1
1
  import { type BuildDynamicSystemPromptOptions } from "../../../dynamic-prompt/build.ts";
2
- export declare const GLM5_TUNING = "A cheap tool call beats long internal debate: when reading, running, or searching can settle a question, do that and reason over the result. Work in short act-inspect-verify loops so an early mistake surfaces before later steps build on it.";
2
+ export declare const GLM5_TUNING = "A cheap tool call beats long internal debate: when reading, running, or searching can settle a question, do that and reason over the result. Work in short act-inspect-verify loops so an early mistake surfaces before later steps build on it; when only the user can settle a question, ask through ask_user_question when it is available (waitForAnswer true when the next step depends on the answer).";
3
3
  export declare function buildGlm5Prompt(options: BuildDynamicSystemPromptOptions): string;
4
4
  //# sourceMappingURL=glm-5.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"glm-5.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/prompt-preset/glm-5.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,+BAA+B,EAA4B,MAAM,kCAAkC,CAAC;AAGlH,eAAO,MAAM,WAAW,qPAC2N,CAAC;AAEpP,wBAAgB,eAAe,CAAC,OAAO,EAAE,+BAA+B,GAAG,MAAM,CAWhF"}
1
+ {"version":3,"file":"glm-5.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/prompt-preset/glm-5.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,+BAA+B,EAA4B,MAAM,kCAAkC,CAAC;AAGlH,eAAO,MAAM,WAAW,iZACuX,CAAC;AAEhZ,wBAAgB,eAAe,CAAC,OAAO,EAAE,+BAA+B,GAAG,MAAM,CAWhF"}
@@ -1,6 +1,6 @@
1
1
  import { buildDynamicSystemPrompt } from "../../../dynamic-prompt/build.js";
2
2
  import { buildExecutionToolingSection } from "./execution-tooling.js";
3
- export const GLM5_TUNING = "A cheap tool call beats long internal debate: when reading, running, or searching can settle a question, do that and reason over the result. Work in short act-inspect-verify loops so an early mistake surfaces before later steps build on it.";
3
+ export const GLM5_TUNING = "A cheap tool call beats long internal debate: when reading, running, or searching can settle a question, do that and reason over the result. Work in short act-inspect-verify loops so an early mistake surfaces before later steps build on it; when only the user can settle a question, ask through ask_user_question when it is available (waitForAnswer true when the next step depends on the answer).";
4
4
  export function buildGlm5Prompt(options) {
5
5
  return buildDynamicSystemPrompt({
6
6
  ...options,
@@ -1 +1 @@
1
- {"version":3,"file":"glm-5.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/prompt-preset/glm-5.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwC,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAClH,OAAO,EAAE,4BAA4B,EAAE,MAAM,wBAAwB,CAAC;AAEtE,MAAM,CAAC,MAAM,WAAW,GACvB,kPAAkP,CAAC;AAEpP,MAAM,UAAU,eAAe,CAAC,OAAwC;IACvE,OAAO,wBAAwB,CAAC;QAC/B,GAAG,OAAO;QACV,aAAa,EAAE;YACd,4BAA4B,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,aAAa,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;YACrF,WAAW;SACX;aACC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;aACvC,IAAI,CAAC,MAAM,CAAC;QACd,kBAAkB,EAAE,QAAQ;KAC5B,CAAC,CAAC;AACJ,CAAC","sourcesContent":["import { type BuildDynamicSystemPromptOptions, buildDynamicSystemPrompt } from \"../../../dynamic-prompt/build.ts\";\nimport { buildExecutionToolingSection } from \"./execution-tooling.ts\";\n\nexport const GLM5_TUNING =\n\t\"A cheap tool call beats long internal debate: when reading, running, or searching can settle a question, do that and reason over the result. Work in short act-inspect-verify loops so an early mistake surfaces before later steps build on it.\";\n\nexport function buildGlm5Prompt(options: BuildDynamicSystemPromptOptions): string {\n\treturn buildDynamicSystemPrompt({\n\t\t...options,\n\t\ttuningSection: [\n\t\t\tbuildExecutionToolingSection({ toolNames: options.selectedTools, dialect: \"claude\" }),\n\t\t\tGLM5_TUNING,\n\t\t]\n\t\t\t.filter((section) => section.length > 0)\n\t\t\t.join(\"\\n\\n\"),\n\t\tworkstationDialect: \"claude\",\n\t});\n}\n"]}
1
+ {"version":3,"file":"glm-5.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/prompt-preset/glm-5.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwC,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAClH,OAAO,EAAE,4BAA4B,EAAE,MAAM,wBAAwB,CAAC;AAEtE,MAAM,CAAC,MAAM,WAAW,GACvB,8YAA8Y,CAAC;AAEhZ,MAAM,UAAU,eAAe,CAAC,OAAwC;IACvE,OAAO,wBAAwB,CAAC;QAC/B,GAAG,OAAO;QACV,aAAa,EAAE;YACd,4BAA4B,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,aAAa,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;YACrF,WAAW;SACX;aACC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;aACvC,IAAI,CAAC,MAAM,CAAC;QACd,kBAAkB,EAAE,QAAQ;KAC5B,CAAC,CAAC;AACJ,CAAC","sourcesContent":["import { type BuildDynamicSystemPromptOptions, buildDynamicSystemPrompt } from \"../../../dynamic-prompt/build.ts\";\nimport { buildExecutionToolingSection } from \"./execution-tooling.ts\";\n\nexport const GLM5_TUNING =\n\t\"A cheap tool call beats long internal debate: when reading, running, or searching can settle a question, do that and reason over the result. Work in short act-inspect-verify loops so an early mistake surfaces before later steps build on it; when only the user can settle a question, ask through ask_user_question when it is available (waitForAnswer true when the next step depends on the answer).\";\n\nexport function buildGlm5Prompt(options: BuildDynamicSystemPromptOptions): string {\n\treturn buildDynamicSystemPrompt({\n\t\t...options,\n\t\ttuningSection: [\n\t\t\tbuildExecutionToolingSection({ toolNames: options.selectedTools, dialect: \"claude\" }),\n\t\t\tGLM5_TUNING,\n\t\t]\n\t\t\t.filter((section) => section.length > 0)\n\t\t\t.join(\"\\n\\n\"),\n\t\tworkstationDialect: \"claude\",\n\t});\n}\n"]}