@code-yeongyu/senpi 2026.5.19 → 2026.5.20-2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (580) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/dist/bun/cli.d.ts.map +1 -1
  3. package/dist/bun/cli.js.map +1 -1
  4. package/dist/cli/args.d.ts +1 -1
  5. package/dist/cli/args.d.ts.map +1 -1
  6. package/dist/cli/args.js.map +1 -1
  7. package/dist/cli/config-selector.d.ts +2 -2
  8. package/dist/cli/config-selector.d.ts.map +1 -1
  9. package/dist/cli/config-selector.js.map +1 -1
  10. package/dist/cli/file-processor.d.ts.map +1 -1
  11. package/dist/cli/file-processor.js.map +1 -1
  12. package/dist/cli/initial-message.d.ts +1 -1
  13. package/dist/cli/initial-message.d.ts.map +1 -1
  14. package/dist/cli/initial-message.js.map +1 -1
  15. package/dist/cli/list-models.d.ts +1 -1
  16. package/dist/cli/list-models.d.ts.map +1 -1
  17. package/dist/cli/list-models.js.map +1 -1
  18. package/dist/cli/session-picker.d.ts +1 -1
  19. package/dist/cli/session-picker.d.ts.map +1 -1
  20. package/dist/cli/session-picker.js.map +1 -1
  21. package/dist/cli.d.ts.map +1 -1
  22. package/dist/cli.js.map +1 -1
  23. package/dist/config.d.ts.map +1 -1
  24. package/dist/config.js.map +1 -1
  25. package/dist/core/agent-session-runtime.d.ts +9 -9
  26. package/dist/core/agent-session-runtime.d.ts.map +1 -1
  27. package/dist/core/agent-session-runtime.js +2 -2
  28. package/dist/core/agent-session-runtime.js.map +1 -1
  29. package/dist/core/agent-session-services.d.ts +8 -8
  30. package/dist/core/agent-session-services.d.ts.map +1 -1
  31. package/dist/core/agent-session-services.js.map +1 -1
  32. package/dist/core/agent-session.d.ts +23 -14
  33. package/dist/core/agent-session.d.ts.map +1 -1
  34. package/dist/core/agent-session.js +36 -6
  35. package/dist/core/agent-session.js.map +1 -1
  36. package/dist/core/auth-guidance.d.ts.map +1 -1
  37. package/dist/core/auth-guidance.js.map +1 -1
  38. package/dist/core/auth-storage.d.ts +1 -1
  39. package/dist/core/auth-storage.d.ts.map +1 -1
  40. package/dist/core/auth-storage.js +1 -1
  41. package/dist/core/auth-storage.js.map +1 -1
  42. package/dist/core/bash-executor.d.ts +1 -1
  43. package/dist/core/bash-executor.d.ts.map +1 -1
  44. package/dist/core/bash-executor.js.map +1 -1
  45. package/dist/core/compaction/branch-summarization.d.ts +4 -4
  46. package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
  47. package/dist/core/compaction/branch-summarization.js.map +1 -1
  48. package/dist/core/compaction/compaction.d.ts +2 -2
  49. package/dist/core/compaction/compaction.d.ts.map +1 -1
  50. package/dist/core/compaction/compaction.js.map +1 -1
  51. package/dist/core/compaction/index.d.ts +3 -3
  52. package/dist/core/compaction/index.d.ts.map +1 -1
  53. package/dist/core/compaction/index.js.map +1 -1
  54. package/dist/core/compaction/utils.d.ts.map +1 -1
  55. package/dist/core/compaction/utils.js.map +1 -1
  56. package/dist/core/dynamic-prompt/build.d.ts +1 -1
  57. package/dist/core/dynamic-prompt/build.d.ts.map +1 -1
  58. package/dist/core/dynamic-prompt/build.js.map +1 -1
  59. package/dist/core/dynamic-prompt/index.d.ts +12 -12
  60. package/dist/core/dynamic-prompt/index.d.ts.map +1 -1
  61. package/dist/core/dynamic-prompt/index.js.map +1 -1
  62. package/dist/core/dynamic-prompt/intent-gate.d.ts +1 -1
  63. package/dist/core/dynamic-prompt/intent-gate.d.ts.map +1 -1
  64. package/dist/core/dynamic-prompt/intent-gate.js.map +1 -1
  65. package/dist/core/dynamic-prompt/tool-categorization.d.ts +1 -1
  66. package/dist/core/dynamic-prompt/tool-categorization.d.ts.map +1 -1
  67. package/dist/core/dynamic-prompt/tool-categorization.js.map +1 -1
  68. package/dist/core/dynamic-prompt/tool-section.d.ts +1 -1
  69. package/dist/core/dynamic-prompt/tool-section.d.ts.map +1 -1
  70. package/dist/core/dynamic-prompt/tool-section.js.map +1 -1
  71. package/dist/core/exec.d.ts.map +1 -1
  72. package/dist/core/exec.js.map +1 -1
  73. package/dist/core/export-html/index.d.ts +1 -1
  74. package/dist/core/export-html/index.d.ts.map +1 -1
  75. package/dist/core/export-html/index.js.map +1 -1
  76. package/dist/core/export-html/tool-renderer.d.ts +2 -2
  77. package/dist/core/export-html/tool-renderer.d.ts.map +1 -1
  78. package/dist/core/export-html/tool-renderer.js.map +1 -1
  79. package/dist/core/extensions/builtin/anthropic-bash/index.d.ts +1 -1
  80. package/dist/core/extensions/builtin/anthropic-bash/index.d.ts.map +1 -1
  81. package/dist/core/extensions/builtin/anthropic-bash/index.js.map +1 -1
  82. package/dist/core/extensions/builtin/anthropic-web-search/index.d.ts +1 -1
  83. package/dist/core/extensions/builtin/anthropic-web-search/index.d.ts.map +1 -1
  84. package/dist/core/extensions/builtin/anthropic-web-search/index.js.map +1 -1
  85. package/dist/core/extensions/builtin/bash-timeout/index.d.ts +3 -3
  86. package/dist/core/extensions/builtin/bash-timeout/index.d.ts.map +1 -1
  87. package/dist/core/extensions/builtin/bash-timeout/index.js.map +1 -1
  88. package/dist/core/extensions/builtin/compaction/checkpoint-state.d.ts +1 -1
  89. package/dist/core/extensions/builtin/compaction/checkpoint-state.d.ts.map +1 -1
  90. package/dist/core/extensions/builtin/compaction/checkpoint-state.js.map +1 -1
  91. package/dist/core/extensions/builtin/compaction/circuit-breaker.d.ts +2 -2
  92. package/dist/core/extensions/builtin/compaction/circuit-breaker.d.ts.map +1 -1
  93. package/dist/core/extensions/builtin/compaction/circuit-breaker.js.map +1 -1
  94. package/dist/core/extensions/builtin/compaction/index.d.ts +1 -1
  95. package/dist/core/extensions/builtin/compaction/index.d.ts.map +1 -1
  96. package/dist/core/extensions/builtin/compaction/index.js.map +1 -1
  97. package/dist/core/extensions/builtin/compaction/openai-remote.d.ts +4 -3
  98. package/dist/core/extensions/builtin/compaction/openai-remote.d.ts.map +1 -1
  99. package/dist/core/extensions/builtin/compaction/openai-remote.js +88 -17
  100. package/dist/core/extensions/builtin/compaction/openai-remote.js.map +1 -1
  101. package/dist/core/extensions/builtin/compaction/per-turn-cap.d.ts +2 -2
  102. package/dist/core/extensions/builtin/compaction/per-turn-cap.d.ts.map +1 -1
  103. package/dist/core/extensions/builtin/compaction/per-turn-cap.js.map +1 -1
  104. package/dist/core/extensions/builtin/compaction/policy.d.ts +2 -2
  105. package/dist/core/extensions/builtin/compaction/policy.d.ts.map +1 -1
  106. package/dist/core/extensions/builtin/compaction/policy.js.map +1 -1
  107. package/dist/core/extensions/builtin/compaction/restoration-tracker.d.ts +1 -1
  108. package/dist/core/extensions/builtin/compaction/restoration-tracker.d.ts.map +1 -1
  109. package/dist/core/extensions/builtin/compaction/restoration-tracker.js.map +1 -1
  110. package/dist/core/extensions/builtin/compaction/speculative.d.ts +5 -5
  111. package/dist/core/extensions/builtin/compaction/speculative.d.ts.map +1 -1
  112. package/dist/core/extensions/builtin/compaction/speculative.js.map +1 -1
  113. package/dist/core/extensions/builtin/compaction/state.d.ts +1 -1
  114. package/dist/core/extensions/builtin/compaction/state.d.ts.map +1 -1
  115. package/dist/core/extensions/builtin/compaction/state.js.map +1 -1
  116. package/dist/core/extensions/builtin/compaction/todo-bridge.d.ts +2 -2
  117. package/dist/core/extensions/builtin/compaction/todo-bridge.d.ts.map +1 -1
  118. package/dist/core/extensions/builtin/compaction/todo-bridge.js.map +1 -1
  119. package/dist/core/extensions/builtin/diff.d.ts +1 -1
  120. package/dist/core/extensions/builtin/diff.d.ts.map +1 -1
  121. package/dist/core/extensions/builtin/diff.js.map +1 -1
  122. package/dist/core/extensions/builtin/files.d.ts +1 -1
  123. package/dist/core/extensions/builtin/files.d.ts.map +1 -1
  124. package/dist/core/extensions/builtin/files.js.map +1 -1
  125. package/dist/core/extensions/builtin/gpt-apply-patch/apply.d.ts +1 -1
  126. package/dist/core/extensions/builtin/gpt-apply-patch/apply.d.ts.map +1 -1
  127. package/dist/core/extensions/builtin/gpt-apply-patch/apply.js.map +1 -1
  128. package/dist/core/extensions/builtin/gpt-apply-patch/errors.d.ts +1 -1
  129. package/dist/core/extensions/builtin/gpt-apply-patch/errors.d.ts.map +1 -1
  130. package/dist/core/extensions/builtin/gpt-apply-patch/errors.js.map +1 -1
  131. package/dist/core/extensions/builtin/gpt-apply-patch/extension.d.ts +1 -1
  132. package/dist/core/extensions/builtin/gpt-apply-patch/extension.d.ts.map +1 -1
  133. package/dist/core/extensions/builtin/gpt-apply-patch/extension.js.map +1 -1
  134. package/dist/core/extensions/builtin/gpt-apply-patch/index.d.ts +11 -11
  135. package/dist/core/extensions/builtin/gpt-apply-patch/index.d.ts.map +1 -1
  136. package/dist/core/extensions/builtin/gpt-apply-patch/index.js.map +1 -1
  137. package/dist/core/extensions/builtin/gpt-apply-patch/params.d.ts +1 -1
  138. package/dist/core/extensions/builtin/gpt-apply-patch/params.d.ts.map +1 -1
  139. package/dist/core/extensions/builtin/gpt-apply-patch/params.js.map +1 -1
  140. package/dist/core/extensions/builtin/gpt-apply-patch/parser.d.ts +1 -1
  141. package/dist/core/extensions/builtin/gpt-apply-patch/parser.d.ts.map +1 -1
  142. package/dist/core/extensions/builtin/gpt-apply-patch/parser.js.map +1 -1
  143. package/dist/core/extensions/builtin/gpt-apply-patch/patch-replace.d.ts +1 -1
  144. package/dist/core/extensions/builtin/gpt-apply-patch/patch-replace.d.ts.map +1 -1
  145. package/dist/core/extensions/builtin/gpt-apply-patch/patch-replace.js.map +1 -1
  146. package/dist/core/extensions/builtin/gpt-apply-patch/preview-format.d.ts +1 -1
  147. package/dist/core/extensions/builtin/gpt-apply-patch/preview-format.d.ts.map +1 -1
  148. package/dist/core/extensions/builtin/gpt-apply-patch/preview-format.js.map +1 -1
  149. package/dist/core/extensions/builtin/gpt-apply-patch/preview.d.ts +1 -1
  150. package/dist/core/extensions/builtin/gpt-apply-patch/preview.d.ts.map +1 -1
  151. package/dist/core/extensions/builtin/gpt-apply-patch/preview.js.map +1 -1
  152. package/dist/core/extensions/builtin/gpt-apply-patch/streaming-parser.d.ts +1 -1
  153. package/dist/core/extensions/builtin/gpt-apply-patch/streaming-parser.d.ts.map +1 -1
  154. package/dist/core/extensions/builtin/gpt-apply-patch/streaming-parser.js.map +1 -1
  155. package/dist/core/extensions/builtin/gpt-apply-patch/streaming-render.d.ts +1 -1
  156. package/dist/core/extensions/builtin/gpt-apply-patch/streaming-render.d.ts.map +1 -1
  157. package/dist/core/extensions/builtin/gpt-apply-patch/streaming-render.js.map +1 -1
  158. package/dist/core/extensions/builtin/gpt-apply-patch/tool.d.ts +1 -1
  159. package/dist/core/extensions/builtin/gpt-apply-patch/tool.d.ts.map +1 -1
  160. package/dist/core/extensions/builtin/gpt-apply-patch/tool.js.map +1 -1
  161. package/dist/core/extensions/builtin/gpt-apply-patch/types.d.ts +2 -2
  162. package/dist/core/extensions/builtin/gpt-apply-patch/types.d.ts.map +1 -1
  163. package/dist/core/extensions/builtin/gpt-apply-patch/types.js.map +1 -1
  164. package/dist/core/extensions/builtin/index.d.ts +5 -5
  165. package/dist/core/extensions/builtin/index.d.ts.map +1 -1
  166. package/dist/core/extensions/builtin/index.js +2 -0
  167. package/dist/core/extensions/builtin/index.js.map +1 -1
  168. package/dist/core/extensions/builtin/kimi-web-search/index.d.ts +3 -0
  169. package/dist/core/extensions/builtin/kimi-web-search/index.d.ts.map +1 -0
  170. package/dist/core/extensions/builtin/kimi-web-search/index.js +208 -0
  171. package/dist/core/extensions/builtin/kimi-web-search/index.js.map +1 -0
  172. package/dist/core/extensions/builtin/openai-web-search/index.d.ts +1 -1
  173. package/dist/core/extensions/builtin/openai-web-search/index.d.ts.map +1 -1
  174. package/dist/core/extensions/builtin/openai-web-search/index.js.map +1 -1
  175. package/dist/core/extensions/builtin/permission-system/arity.d.ts +3 -3
  176. package/dist/core/extensions/builtin/permission-system/arity.d.ts.map +1 -1
  177. package/dist/core/extensions/builtin/permission-system/arity.js +155 -158
  178. package/dist/core/extensions/builtin/permission-system/arity.js.map +1 -1
  179. package/dist/core/extensions/builtin/permission-system/cli.d.ts +2 -2
  180. package/dist/core/extensions/builtin/permission-system/cli.d.ts.map +1 -1
  181. package/dist/core/extensions/builtin/permission-system/cli.js.map +1 -1
  182. package/dist/core/extensions/builtin/permission-system/config.d.ts +1 -1
  183. package/dist/core/extensions/builtin/permission-system/config.d.ts.map +1 -1
  184. package/dist/core/extensions/builtin/permission-system/config.js.map +1 -1
  185. package/dist/core/extensions/builtin/permission-system/evaluate.d.ts +1 -1
  186. package/dist/core/extensions/builtin/permission-system/evaluate.d.ts.map +1 -1
  187. package/dist/core/extensions/builtin/permission-system/evaluate.js.map +1 -1
  188. package/dist/core/extensions/builtin/permission-system/events.d.ts +2 -2
  189. package/dist/core/extensions/builtin/permission-system/events.d.ts.map +1 -1
  190. package/dist/core/extensions/builtin/permission-system/events.js.map +1 -1
  191. package/dist/core/extensions/builtin/permission-system/index.d.ts +1 -1
  192. package/dist/core/extensions/builtin/permission-system/index.d.ts.map +1 -1
  193. package/dist/core/extensions/builtin/permission-system/index.js.map +1 -1
  194. package/dist/core/extensions/builtin/permission-system/non-interactive.d.ts +1 -1
  195. package/dist/core/extensions/builtin/permission-system/non-interactive.d.ts.map +1 -1
  196. package/dist/core/extensions/builtin/permission-system/non-interactive.js.map +1 -1
  197. package/dist/core/extensions/builtin/permission-system/parsers.d.ts +1 -1
  198. package/dist/core/extensions/builtin/permission-system/parsers.d.ts.map +1 -1
  199. package/dist/core/extensions/builtin/permission-system/parsers.js.map +1 -1
  200. package/dist/core/extensions/builtin/permission-system/prompt.d.ts +2 -2
  201. package/dist/core/extensions/builtin/permission-system/prompt.d.ts.map +1 -1
  202. package/dist/core/extensions/builtin/permission-system/prompt.js.map +1 -1
  203. package/dist/core/extensions/builtin/permission-system/service.d.ts +2 -2
  204. package/dist/core/extensions/builtin/permission-system/service.d.ts.map +1 -1
  205. package/dist/core/extensions/builtin/permission-system/service.js.map +1 -1
  206. package/dist/core/extensions/builtin/permission-system/settings.d.ts +2 -2
  207. package/dist/core/extensions/builtin/permission-system/settings.d.ts.map +1 -1
  208. package/dist/core/extensions/builtin/permission-system/settings.js.map +1 -1
  209. package/dist/core/extensions/builtin/permission-system/storage.d.ts +1 -1
  210. package/dist/core/extensions/builtin/permission-system/storage.d.ts.map +1 -1
  211. package/dist/core/extensions/builtin/permission-system/storage.js.map +1 -1
  212. package/dist/core/extensions/builtin/permission-system/types.d.ts +2 -2
  213. package/dist/core/extensions/builtin/permission-system/types.d.ts.map +1 -1
  214. package/dist/core/extensions/builtin/permission-system/types.js +4 -4
  215. package/dist/core/extensions/builtin/permission-system/types.js.map +1 -1
  216. package/dist/core/extensions/builtin/permission-system/wildcard.d.ts +3 -3
  217. package/dist/core/extensions/builtin/permission-system/wildcard.d.ts.map +1 -1
  218. package/dist/core/extensions/builtin/permission-system/wildcard.js +4 -7
  219. package/dist/core/extensions/builtin/permission-system/wildcard.js.map +1 -1
  220. package/dist/core/extensions/builtin/prompt-preset/claude-opus-4-5.d.ts +1 -1
  221. package/dist/core/extensions/builtin/prompt-preset/claude-opus-4-5.d.ts.map +1 -1
  222. package/dist/core/extensions/builtin/prompt-preset/claude-opus-4-5.js.map +1 -1
  223. package/dist/core/extensions/builtin/prompt-preset/claude-opus-4-6.d.ts +1 -1
  224. package/dist/core/extensions/builtin/prompt-preset/claude-opus-4-6.d.ts.map +1 -1
  225. package/dist/core/extensions/builtin/prompt-preset/claude-opus-4-6.js.map +1 -1
  226. package/dist/core/extensions/builtin/prompt-preset/claude-opus-4-7.d.ts +1 -1
  227. package/dist/core/extensions/builtin/prompt-preset/claude-opus-4-7.d.ts.map +1 -1
  228. package/dist/core/extensions/builtin/prompt-preset/claude-opus-4-7.js.map +1 -1
  229. package/dist/core/extensions/builtin/prompt-preset/gpt-5.2.d.ts +1 -1
  230. package/dist/core/extensions/builtin/prompt-preset/gpt-5.2.d.ts.map +1 -1
  231. package/dist/core/extensions/builtin/prompt-preset/gpt-5.2.js.map +1 -1
  232. package/dist/core/extensions/builtin/prompt-preset/gpt-5.3-codex.d.ts +1 -1
  233. package/dist/core/extensions/builtin/prompt-preset/gpt-5.3-codex.d.ts.map +1 -1
  234. package/dist/core/extensions/builtin/prompt-preset/gpt-5.3-codex.js.map +1 -1
  235. package/dist/core/extensions/builtin/prompt-preset/gpt-5.4.d.ts +1 -1
  236. package/dist/core/extensions/builtin/prompt-preset/gpt-5.4.d.ts.map +1 -1
  237. package/dist/core/extensions/builtin/prompt-preset/gpt-5.4.js.map +1 -1
  238. package/dist/core/extensions/builtin/prompt-preset/gpt-5.5.d.ts +1 -1
  239. package/dist/core/extensions/builtin/prompt-preset/gpt-5.5.d.ts.map +1 -1
  240. package/dist/core/extensions/builtin/prompt-preset/gpt-5.5.js.map +1 -1
  241. package/dist/core/extensions/builtin/prompt-preset/gpt-5.d.ts +1 -1
  242. package/dist/core/extensions/builtin/prompt-preset/gpt-5.d.ts.map +1 -1
  243. package/dist/core/extensions/builtin/prompt-preset/gpt-5.js.map +1 -1
  244. package/dist/core/extensions/builtin/prompt-preset/index.d.ts +1 -1
  245. package/dist/core/extensions/builtin/prompt-preset/index.d.ts.map +1 -1
  246. package/dist/core/extensions/builtin/prompt-preset/index.js.map +1 -1
  247. package/dist/core/extensions/builtin/prompt-preset/kimi-k2-6.d.ts +1 -1
  248. package/dist/core/extensions/builtin/prompt-preset/kimi-k2-6.d.ts.map +1 -1
  249. package/dist/core/extensions/builtin/prompt-preset/kimi-k2-6.js.map +1 -1
  250. package/dist/core/extensions/builtin/prompt-preset/presets.d.ts +3 -3
  251. package/dist/core/extensions/builtin/prompt-preset/presets.d.ts.map +1 -1
  252. package/dist/core/extensions/builtin/prompt-preset/presets.js.map +1 -1
  253. package/dist/core/extensions/builtin/prompt-preset/settings.d.ts +1 -1
  254. package/dist/core/extensions/builtin/prompt-preset/settings.d.ts.map +1 -1
  255. package/dist/core/extensions/builtin/prompt-preset/settings.js.map +1 -1
  256. package/dist/core/extensions/builtin/prompt-url-widget.d.ts +1 -1
  257. package/dist/core/extensions/builtin/prompt-url-widget.d.ts.map +1 -1
  258. package/dist/core/extensions/builtin/prompt-url-widget.js.map +1 -1
  259. package/dist/core/extensions/builtin/redraws.d.ts +1 -1
  260. package/dist/core/extensions/builtin/redraws.d.ts.map +1 -1
  261. package/dist/core/extensions/builtin/redraws.js.map +1 -1
  262. package/dist/core/extensions/builtin/service-tier.d.ts +1 -1
  263. package/dist/core/extensions/builtin/service-tier.d.ts.map +1 -1
  264. package/dist/core/extensions/builtin/service-tier.js.map +1 -1
  265. package/dist/core/extensions/builtin/system-messages.d.ts +2 -2
  266. package/dist/core/extensions/builtin/system-messages.d.ts.map +1 -1
  267. package/dist/core/extensions/builtin/system-messages.js.map +1 -1
  268. package/dist/core/extensions/builtin/todotools/continuation/index.d.ts +1 -1
  269. package/dist/core/extensions/builtin/todotools/continuation/index.d.ts.map +1 -1
  270. package/dist/core/extensions/builtin/todotools/continuation/index.js.map +1 -1
  271. package/dist/core/extensions/builtin/todotools/continuation/prompt.d.ts +1 -1
  272. package/dist/core/extensions/builtin/todotools/continuation/prompt.d.ts.map +1 -1
  273. package/dist/core/extensions/builtin/todotools/continuation/prompt.js.map +1 -1
  274. package/dist/core/extensions/builtin/todotools/continuation/runtime.d.ts +2 -2
  275. package/dist/core/extensions/builtin/todotools/continuation/runtime.d.ts.map +1 -1
  276. package/dist/core/extensions/builtin/todotools/continuation/runtime.js.map +1 -1
  277. package/dist/core/extensions/builtin/todotools/index.d.ts +3 -3
  278. package/dist/core/extensions/builtin/todotools/index.d.ts.map +1 -1
  279. package/dist/core/extensions/builtin/todotools/index.js.map +1 -1
  280. package/dist/core/extensions/builtin/todotools/state.d.ts.map +1 -1
  281. package/dist/core/extensions/builtin/todotools/state.js.map +1 -1
  282. package/dist/core/extensions/builtin/todotools/system-messages.d.ts +1 -1
  283. package/dist/core/extensions/builtin/todotools/system-messages.d.ts.map +1 -1
  284. package/dist/core/extensions/builtin/todotools/system-messages.js.map +1 -1
  285. package/dist/core/extensions/builtin/todotools/tools/todoread.d.ts +2 -2
  286. package/dist/core/extensions/builtin/todotools/tools/todoread.d.ts.map +1 -1
  287. package/dist/core/extensions/builtin/todotools/tools/todoread.js.map +1 -1
  288. package/dist/core/extensions/builtin/todotools/tools/todowrite.d.ts +2 -2
  289. package/dist/core/extensions/builtin/todotools/tools/todowrite.d.ts.map +1 -1
  290. package/dist/core/extensions/builtin/todotools/tools/todowrite.js.map +1 -1
  291. package/dist/core/extensions/builtin/tool-pair-guard/index.d.ts +1 -1
  292. package/dist/core/extensions/builtin/tool-pair-guard/index.d.ts.map +1 -1
  293. package/dist/core/extensions/builtin/tool-pair-guard/index.js.map +1 -1
  294. package/dist/core/extensions/builtin/tps.d.ts +1 -1
  295. package/dist/core/extensions/builtin/tps.d.ts.map +1 -1
  296. package/dist/core/extensions/builtin/tps.js.map +1 -1
  297. package/dist/core/extensions/index.d.ts +8 -8
  298. package/dist/core/extensions/index.d.ts.map +1 -1
  299. package/dist/core/extensions/index.js.map +1 -1
  300. package/dist/core/extensions/loader.d.ts +2 -2
  301. package/dist/core/extensions/loader.d.ts.map +1 -1
  302. package/dist/core/extensions/loader.js.map +1 -1
  303. package/dist/core/extensions/runner.d.ts +32 -6
  304. package/dist/core/extensions/runner.d.ts.map +1 -1
  305. package/dist/core/extensions/runner.js +109 -5
  306. package/dist/core/extensions/runner.js.map +1 -1
  307. package/dist/core/extensions/types.d.ts +19 -19
  308. package/dist/core/extensions/types.d.ts.map +1 -1
  309. package/dist/core/extensions/types.js.map +1 -1
  310. package/dist/core/extensions/wrapper.d.ts +2 -2
  311. package/dist/core/extensions/wrapper.d.ts.map +1 -1
  312. package/dist/core/extensions/wrapper.js.map +1 -1
  313. package/dist/core/footer-data-provider.d.ts.map +1 -1
  314. package/dist/core/footer-data-provider.js.map +1 -1
  315. package/dist/core/index.d.ts +8 -8
  316. package/dist/core/index.d.ts.map +1 -1
  317. package/dist/core/index.js.map +1 -1
  318. package/dist/core/keybindings.d.ts.map +1 -1
  319. package/dist/core/keybindings.js.map +1 -1
  320. package/dist/core/model-registry.d.ts +4 -4
  321. package/dist/core/model-registry.d.ts.map +1 -1
  322. package/dist/core/model-registry.js +2 -2
  323. package/dist/core/model-registry.js.map +1 -1
  324. package/dist/core/model-resolver.d.ts +2 -2
  325. package/dist/core/model-resolver.d.ts.map +1 -1
  326. package/dist/core/model-resolver.js.map +1 -1
  327. package/dist/core/package-manager.d.ts +1 -1
  328. package/dist/core/package-manager.d.ts.map +1 -1
  329. package/dist/core/package-manager.js.map +1 -1
  330. package/dist/core/prompt-templates.d.ts +1 -1
  331. package/dist/core/prompt-templates.d.ts.map +1 -1
  332. package/dist/core/prompt-templates.js.map +1 -1
  333. package/dist/core/resolve-config-value.d.ts.map +1 -1
  334. package/dist/core/resolve-config-value.js.map +1 -1
  335. package/dist/core/resource-loader.d.ts +9 -9
  336. package/dist/core/resource-loader.d.ts.map +1 -1
  337. package/dist/core/resource-loader.js.map +1 -1
  338. package/dist/core/sdk.d.ts +14 -14
  339. package/dist/core/sdk.d.ts.map +1 -1
  340. package/dist/core/sdk.js +7 -5
  341. package/dist/core/sdk.js.map +1 -1
  342. package/dist/core/session-manager.d.ts +1 -1
  343. package/dist/core/session-manager.d.ts.map +1 -1
  344. package/dist/core/session-manager.js.map +1 -1
  345. package/dist/core/settings-manager.d.ts +1 -1
  346. package/dist/core/settings-manager.d.ts.map +1 -1
  347. package/dist/core/settings-manager.js +2 -1
  348. package/dist/core/settings-manager.js.map +1 -1
  349. package/dist/core/skills.d.ts +2 -2
  350. package/dist/core/skills.d.ts.map +1 -1
  351. package/dist/core/skills.js.map +1 -1
  352. package/dist/core/slash-commands.d.ts +1 -1
  353. package/dist/core/slash-commands.d.ts.map +1 -1
  354. package/dist/core/slash-commands.js.map +1 -1
  355. package/dist/core/source-info.d.ts +1 -1
  356. package/dist/core/source-info.d.ts.map +1 -1
  357. package/dist/core/source-info.js.map +1 -1
  358. package/dist/core/system-prompt.d.ts +1 -1
  359. package/dist/core/system-prompt.d.ts.map +1 -1
  360. package/dist/core/system-prompt.js +1 -0
  361. package/dist/core/system-prompt.js.map +1 -1
  362. package/dist/core/telemetry.d.ts +1 -1
  363. package/dist/core/telemetry.d.ts.map +1 -1
  364. package/dist/core/telemetry.js.map +1 -1
  365. package/dist/core/tools/bash.d.ts +2 -2
  366. package/dist/core/tools/bash.d.ts.map +1 -1
  367. package/dist/core/tools/bash.js.map +1 -1
  368. package/dist/core/tools/diff-render.d.ts.map +1 -1
  369. package/dist/core/tools/diff-render.js.map +1 -1
  370. package/dist/core/tools/edit-diff.d.ts.map +1 -1
  371. package/dist/core/tools/edit-diff.js.map +1 -1
  372. package/dist/core/tools/edit.d.ts +2 -2
  373. package/dist/core/tools/edit.d.ts.map +1 -1
  374. package/dist/core/tools/edit.js.map +1 -1
  375. package/dist/core/tools/find.d.ts +2 -2
  376. package/dist/core/tools/find.d.ts.map +1 -1
  377. package/dist/core/tools/find.js.map +1 -1
  378. package/dist/core/tools/grep.d.ts +2 -2
  379. package/dist/core/tools/grep.d.ts.map +1 -1
  380. package/dist/core/tools/grep.js.map +1 -1
  381. package/dist/core/tools/index.d.ts +17 -17
  382. package/dist/core/tools/index.d.ts.map +1 -1
  383. package/dist/core/tools/index.js.map +1 -1
  384. package/dist/core/tools/ls.d.ts +2 -2
  385. package/dist/core/tools/ls.d.ts.map +1 -1
  386. package/dist/core/tools/ls.js.map +1 -1
  387. package/dist/core/tools/output-accumulator.d.ts +1 -1
  388. package/dist/core/tools/output-accumulator.d.ts.map +1 -1
  389. package/dist/core/tools/output-accumulator.js.map +1 -1
  390. package/dist/core/tools/read.d.ts +2 -2
  391. package/dist/core/tools/read.d.ts.map +1 -1
  392. package/dist/core/tools/read.js.map +1 -1
  393. package/dist/core/tools/render-utils.d.ts.map +1 -1
  394. package/dist/core/tools/render-utils.js.map +1 -1
  395. package/dist/core/tools/tool-definition-wrapper.d.ts +1 -1
  396. package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -1
  397. package/dist/core/tools/tool-definition-wrapper.js.map +1 -1
  398. package/dist/core/tools/write.d.ts +1 -1
  399. package/dist/core/tools/write.d.ts.map +1 -1
  400. package/dist/core/tools/write.js.map +1 -1
  401. package/dist/index.d.ts +28 -27
  402. package/dist/index.d.ts.map +1 -1
  403. package/dist/index.js +1 -0
  404. package/dist/index.js.map +1 -1
  405. package/dist/main.d.ts +1 -1
  406. package/dist/main.d.ts.map +1 -1
  407. package/dist/main.js +1 -0
  408. package/dist/main.js.map +1 -1
  409. package/dist/migrations.d.ts.map +1 -1
  410. package/dist/migrations.js.map +1 -1
  411. package/dist/modes/index.d.ts +5 -5
  412. package/dist/modes/index.d.ts.map +1 -1
  413. package/dist/modes/index.js.map +1 -1
  414. package/dist/modes/interactive/components/armin.d.ts.map +1 -1
  415. package/dist/modes/interactive/components/armin.js.map +1 -1
  416. package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
  417. package/dist/modes/interactive/components/assistant-message.js.map +1 -1
  418. package/dist/modes/interactive/components/bash-execution.d.ts +1 -1
  419. package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -1
  420. package/dist/modes/interactive/components/bash-execution.js.map +1 -1
  421. package/dist/modes/interactive/components/bordered-loader.d.ts +1 -1
  422. package/dist/modes/interactive/components/bordered-loader.d.ts.map +1 -1
  423. package/dist/modes/interactive/components/bordered-loader.js.map +1 -1
  424. package/dist/modes/interactive/components/branch-summary-message.d.ts +1 -1
  425. package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -1
  426. package/dist/modes/interactive/components/branch-summary-message.js.map +1 -1
  427. package/dist/modes/interactive/components/compaction-summary-message.d.ts +1 -1
  428. package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -1
  429. package/dist/modes/interactive/components/compaction-summary-message.js.map +1 -1
  430. package/dist/modes/interactive/components/config-selector.d.ts +2 -2
  431. package/dist/modes/interactive/components/config-selector.d.ts.map +1 -1
  432. package/dist/modes/interactive/components/config-selector.js.map +1 -1
  433. package/dist/modes/interactive/components/countdown-timer.d.ts +2 -2
  434. package/dist/modes/interactive/components/countdown-timer.d.ts.map +1 -1
  435. package/dist/modes/interactive/components/countdown-timer.js +2 -2
  436. package/dist/modes/interactive/components/countdown-timer.js.map +1 -1
  437. package/dist/modes/interactive/components/custom-editor.d.ts +1 -1
  438. package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -1
  439. package/dist/modes/interactive/components/custom-editor.js.map +1 -1
  440. package/dist/modes/interactive/components/custom-message.d.ts +2 -2
  441. package/dist/modes/interactive/components/custom-message.d.ts.map +1 -1
  442. package/dist/modes/interactive/components/custom-message.js.map +1 -1
  443. package/dist/modes/interactive/components/daxnuts.d.ts.map +1 -1
  444. package/dist/modes/interactive/components/daxnuts.js.map +1 -1
  445. package/dist/modes/interactive/components/diff.d.ts.map +1 -1
  446. package/dist/modes/interactive/components/diff.js.map +1 -1
  447. package/dist/modes/interactive/components/dynamic-border.d.ts.map +1 -1
  448. package/dist/modes/interactive/components/dynamic-border.js.map +1 -1
  449. package/dist/modes/interactive/components/earendil-announcement.d.ts.map +1 -1
  450. package/dist/modes/interactive/components/earendil-announcement.js.map +1 -1
  451. package/dist/modes/interactive/components/extension-editor.d.ts +1 -1
  452. package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -1
  453. package/dist/modes/interactive/components/extension-editor.js.map +1 -1
  454. package/dist/modes/interactive/components/extension-input.d.ts.map +1 -1
  455. package/dist/modes/interactive/components/extension-input.js.map +1 -1
  456. package/dist/modes/interactive/components/extension-selector.d.ts.map +1 -1
  457. package/dist/modes/interactive/components/extension-selector.js.map +1 -1
  458. package/dist/modes/interactive/components/favorite-models-selector.d.ts +1 -1
  459. package/dist/modes/interactive/components/favorite-models-selector.d.ts.map +1 -1
  460. package/dist/modes/interactive/components/favorite-models-selector.js.map +1 -1
  461. package/dist/modes/interactive/components/footer.d.ts +3 -2
  462. package/dist/modes/interactive/components/footer.d.ts.map +1 -1
  463. package/dist/modes/interactive/components/footer.js +42 -42
  464. package/dist/modes/interactive/components/footer.js.map +1 -1
  465. package/dist/modes/interactive/components/index.d.ts +31 -31
  466. package/dist/modes/interactive/components/index.d.ts.map +1 -1
  467. package/dist/modes/interactive/components/index.js.map +1 -1
  468. package/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -1
  469. package/dist/modes/interactive/components/keybinding-hints.js.map +1 -1
  470. package/dist/modes/interactive/components/login-dialog.d.ts +1 -1
  471. package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
  472. package/dist/modes/interactive/components/login-dialog.js +2 -2
  473. package/dist/modes/interactive/components/login-dialog.js.map +1 -1
  474. package/dist/modes/interactive/components/model-selector.d.ts +3 -3
  475. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
  476. package/dist/modes/interactive/components/model-selector.js.map +1 -1
  477. package/dist/modes/interactive/components/oauth-selector.d.ts +1 -1
  478. package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -1
  479. package/dist/modes/interactive/components/oauth-selector.js.map +1 -1
  480. package/dist/modes/interactive/components/session-selector-search.d.ts +1 -1
  481. package/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -1
  482. package/dist/modes/interactive/components/session-selector-search.js.map +1 -1
  483. package/dist/modes/interactive/components/session-selector.d.ts +3 -3
  484. package/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
  485. package/dist/modes/interactive/components/session-selector.js.map +1 -1
  486. package/dist/modes/interactive/components/settings-selector.d.ts +1 -1
  487. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  488. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  489. package/dist/modes/interactive/components/show-images-selector.d.ts.map +1 -1
  490. package/dist/modes/interactive/components/show-images-selector.js.map +1 -1
  491. package/dist/modes/interactive/components/skill-invocation-message.d.ts +1 -1
  492. package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -1
  493. package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -1
  494. package/dist/modes/interactive/components/theme-selector.d.ts.map +1 -1
  495. package/dist/modes/interactive/components/theme-selector.js.map +1 -1
  496. package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
  497. package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
  498. package/dist/modes/interactive/components/tool-execution.d.ts +1 -1
  499. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  500. package/dist/modes/interactive/components/tool-execution.js.map +1 -1
  501. package/dist/modes/interactive/components/tree-selector.d.ts +1 -1
  502. package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -1
  503. package/dist/modes/interactive/components/tree-selector.js.map +1 -1
  504. package/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -1
  505. package/dist/modes/interactive/components/user-message-selector.js.map +1 -1
  506. package/dist/modes/interactive/components/user-message.d.ts.map +1 -1
  507. package/dist/modes/interactive/components/user-message.js.map +1 -1
  508. package/dist/modes/interactive/interactive-mode.d.ts +10 -3
  509. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  510. package/dist/modes/interactive/interactive-mode.js +67 -7
  511. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  512. package/dist/modes/interactive/session-info-format.d.ts +1 -1
  513. package/dist/modes/interactive/session-info-format.d.ts.map +1 -1
  514. package/dist/modes/interactive/session-info-format.js.map +1 -1
  515. package/dist/modes/interactive/startup-tools.d.ts.map +1 -1
  516. package/dist/modes/interactive/startup-tools.js.map +1 -1
  517. package/dist/modes/interactive/theme/theme.d.ts +1 -1
  518. package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  519. package/dist/modes/interactive/theme/theme.js.map +1 -1
  520. package/dist/modes/interactive/working-status.d.ts +3 -0
  521. package/dist/modes/interactive/working-status.d.ts.map +1 -1
  522. package/dist/modes/interactive/working-status.js +10 -0
  523. package/dist/modes/interactive/working-status.js.map +1 -1
  524. package/dist/modes/neo-mode.d.ts +20 -1
  525. package/dist/modes/neo-mode.d.ts.map +1 -1
  526. package/dist/modes/neo-mode.js +30 -2
  527. package/dist/modes/neo-mode.js.map +1 -1
  528. package/dist/modes/print-mode.d.ts +1 -1
  529. package/dist/modes/print-mode.d.ts.map +1 -1
  530. package/dist/modes/print-mode.js.map +1 -1
  531. package/dist/modes/rpc/rpc-client.d.ts +5 -5
  532. package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  533. package/dist/modes/rpc/rpc-client.js +1 -1
  534. package/dist/modes/rpc/rpc-client.js.map +1 -1
  535. package/dist/modes/rpc/rpc-mode.d.ts +2 -2
  536. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  537. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  538. package/dist/modes/rpc/rpc-types.d.ts +4 -4
  539. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  540. package/dist/modes/rpc/rpc-types.js.map +1 -1
  541. package/dist/neo-tui-bin/senpi-neo-tui-linux-x64 +0 -0
  542. package/dist/package-manager-cli.d.ts.map +1 -1
  543. package/dist/package-manager-cli.js +40 -1
  544. package/dist/package-manager-cli.js.map +1 -1
  545. package/dist/utils/changelog.d.ts +1 -1
  546. package/dist/utils/changelog.d.ts.map +1 -1
  547. package/dist/utils/changelog.js.map +1 -1
  548. package/dist/utils/clipboard-image.d.ts.map +1 -1
  549. package/dist/utils/clipboard-image.js.map +1 -1
  550. package/dist/utils/clipboard.d.ts.map +1 -1
  551. package/dist/utils/clipboard.js.map +1 -1
  552. package/dist/utils/exif-orientation.d.ts +1 -1
  553. package/dist/utils/exif-orientation.d.ts.map +1 -1
  554. package/dist/utils/exif-orientation.js.map +1 -1
  555. package/dist/utils/image-convert.d.ts.map +1 -1
  556. package/dist/utils/image-convert.js.map +1 -1
  557. package/dist/utils/image-resize.d.ts.map +1 -1
  558. package/dist/utils/image-resize.js.map +1 -1
  559. package/dist/utils/pi-user-agent.d.ts.map +1 -1
  560. package/dist/utils/pi-user-agent.js.map +1 -1
  561. package/dist/utils/shell.d.ts.map +1 -1
  562. package/dist/utils/shell.js.map +1 -1
  563. package/dist/utils/syntax-highlight.d.ts.map +1 -1
  564. package/dist/utils/syntax-highlight.js.map +1 -1
  565. package/dist/utils/tools-manager.d.ts.map +1 -1
  566. package/dist/utils/tools-manager.js.map +1 -1
  567. package/dist/utils/version-check.d.ts +2 -1
  568. package/dist/utils/version-check.d.ts.map +1 -1
  569. package/dist/utils/version-check.js +5 -4
  570. package/dist/utils/version-check.js.map +1 -1
  571. package/dist/utils/windows-self-update.d.ts.map +1 -1
  572. package/dist/utils/windows-self-update.js.map +1 -1
  573. package/docs/settings.md +1 -1
  574. package/examples/extensions/custom-provider-gitlab-duo/test.ts +1 -1
  575. package/examples/extensions/doom-overlay/doom-component.ts +2 -2
  576. package/examples/extensions/doom-overlay/index.ts +3 -3
  577. package/examples/extensions/overlay-qa-tests.ts +97 -66
  578. package/examples/extensions/overlay-test.ts +7 -4
  579. package/examples/extensions/plan-mode/index.ts +1 -1
  580. package/package.json +4 -3
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/openai-web-search/index.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Api, Model, OpenAIResponsesCompat } from \"@earendil-works/pi-ai\";\nimport type { ExtensionAPI, ExtensionContext } from \"../../types.js\";\n\ntype ToolDefinition = Record<string, unknown>;\ntype OpenAiWebSearchModel = Pick<Model<Api>, \"api\" | \"baseUrl\" | \"compat\">;\ntype OpenAiWebSearchTarget = Api | OpenAiWebSearchModel | undefined;\n\nconst OPENAI_RESPONSES_APIS: ReadonlySet<Api> = new Set([\"openai-responses\", \"azure-openai-responses\"]);\nconst ENABLE_ENV = \"PI_OPENAI_WEB_SEARCH\";\nconst NATIVE_OPENAI_WEB_SEARCH_TYPE = \"web_search_preview\";\nconst WEB_SEARCH_SOURCES_INCLUDE = \"web_search_call.action.sources\";\nconst STATUS_KEY = \"openai-web-search\";\nconst WIDGET_KEY = \"openai-web-search\";\n\nfunction parseEnableEnv(envVar: string): boolean {\n\tconst envValue = process.env[envVar];\n\tif (!envValue) {\n\t\treturn true;\n\t}\n\n\tconst normalized = envValue.trim().toLowerCase();\n\tif (normalized === \"0\" || normalized === \"false\" || normalized === \"no\" || normalized === \"off\") {\n\t\treturn false;\n\t}\n\n\tif (normalized === \"1\" || normalized === \"true\" || normalized === \"yes\" || normalized === \"on\") {\n\t\treturn true;\n\t}\n\n\t// Unknown values fall back to default-on behavior.\n\treturn true;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null;\n}\n\nfunction isOpenAiResponsesApi(api: Api | undefined): api is \"openai-responses\" | \"azure-openai-responses\" {\n\treturn api !== undefined && OPENAI_RESPONSES_APIS.has(api);\n}\n\nfunction resolveTarget(target: OpenAiWebSearchTarget): OpenAiWebSearchModel | undefined {\n\tif (target === undefined) {\n\t\treturn undefined;\n\t}\n\tif (typeof target === \"string\") {\n\t\treturn { api: target, baseUrl: target === \"openai-responses\" ? \"https://api.openai.com/v1\" : \"\" };\n\t}\n\treturn target;\n}\n\nfunction isOpenAiResponsesNativeEndpoint(model: OpenAiWebSearchModel): boolean {\n\ttry {\n\t\treturn new URL(model.baseUrl || \"https://api.openai.com/v1\").hostname === \"api.openai.com\";\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nexport function supportsNativeOpenAiWebSearch(target: OpenAiWebSearchTarget): boolean {\n\tconst model = resolveTarget(target);\n\tif (!isOpenAiResponsesApi(model?.api)) {\n\t\treturn false;\n\t}\n\tif (model.api === \"azure-openai-responses\") {\n\t\treturn true;\n\t}\n\n\tconst compat = model.compat as OpenAIResponsesCompat | undefined;\n\treturn compat?.supportsWebSearchPreview ?? isOpenAiResponsesNativeEndpoint(model);\n}\n\nfunction isNativeOpenAiWebSearchType(value: unknown): value is \"web_search_preview\" | \"web_search_preview_2025_03_11\" {\n\treturn value === \"web_search_preview\" || value === \"web_search_preview_2025_03_11\";\n}\n\nfunction isUnsupportedWebSearchType(value: unknown): boolean {\n\treturn (\n\t\ttypeof value === \"string\" &&\n\t\t(value === \"web_search\" || value.startsWith(\"web_search_\")) &&\n\t\t!isNativeOpenAiWebSearchType(value)\n\t);\n}\n\nfunction isAnthropicWebFetchType(value: unknown): boolean {\n\treturn typeof value === \"string\" && value.startsWith(\"web_fetch_\");\n}\n\ntype SanitizedTools = {\n\tchanged: boolean;\n\ttools: ToolDefinition[];\n};\n\ntype SanitizeToolsOptions = {\n\tstripFunctionWebSearch: boolean;\n};\n\nfunction stripNativeOpenAiWebSearch(payload: unknown): unknown {\n\tif (!isRecord(payload)) {\n\t\treturn payload;\n\t}\n\n\tlet changed = false;\n\tconst sanitized: Record<string, unknown> = { ...payload };\n\n\tconst tools = payload.tools;\n\tif (Array.isArray(tools)) {\n\t\tconst sanitizedTools = tools.filter((tool) => !(isRecord(tool) && isNativeOpenAiWebSearchType(tool.type)));\n\t\tif (sanitizedTools.length !== tools.length) {\n\t\t\tchanged = true;\n\t\t\tsanitized.tools = sanitizedTools;\n\t\t}\n\t}\n\n\tconst include = payload.include;\n\tif (Array.isArray(include)) {\n\t\tconst sanitizedInclude = include.filter((value) => value !== WEB_SEARCH_SOURCES_INCLUDE);\n\t\tif (sanitizedInclude.length !== include.length) {\n\t\t\tchanged = true;\n\t\t\tsanitized.include = sanitizedInclude;\n\t\t}\n\t}\n\n\tif (isRecord(payload.tool_choice) && isNativeOpenAiWebSearchType(payload.tool_choice.type)) {\n\t\tchanged = true;\n\t\tdelete sanitized.tool_choice;\n\t}\n\n\treturn changed ? sanitized : payload;\n}\n\nfunction sanitizeTools(tools: unknown[], options: SanitizeToolsOptions): SanitizedTools {\n\tconst sanitized: ToolDefinition[] = [];\n\tlet changed = false;\n\tfor (const tool of tools) {\n\t\tif (!isRecord(tool)) {\n\t\t\tchanged = true;\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst type = tool.type;\n\t\tconst shouldStripFunctionVariant =\n\t\t\toptions.stripFunctionWebSearch && tool.name === \"web_search\" && !isNativeOpenAiWebSearchType(type);\n\t\tconst shouldStripProviderNativeVariant = isUnsupportedWebSearchType(type) || isAnthropicWebFetchType(type);\n\t\tif (shouldStripFunctionVariant || shouldStripProviderNativeVariant) {\n\t\t\tchanged = true;\n\t\t} else {\n\t\t\tsanitized.push(tool);\n\t\t}\n\t}\n\n\treturn { changed, tools: sanitized };\n}\n\nfunction includeWebSearchSources(payload: Record<string, unknown>): string[] {\n\tconst include = Array.isArray(payload.include)\n\t\t? payload.include.filter((value): value is string => typeof value === \"string\")\n\t\t: [];\n\treturn include.includes(WEB_SEARCH_SOURCES_INCLUDE) ? include : [...include, WEB_SEARCH_SOURCES_INCLUDE];\n}\n\nexport function addOpenAiWebSearchToPayload(target: OpenAiWebSearchTarget, payload: unknown): unknown {\n\tconst model = resolveTarget(target);\n\tif (!isOpenAiResponsesApi(model?.api)) {\n\t\t// Defense in depth. `web_search_preview` is an OpenAI Responses-only tool\n\t\t// type, but proxies that translate openai-responses → anthropic-messages\n\t\t// (e.g., ccapi/quotio for Claude models) can forward it verbatim, which\n\t\t// Anthropic rejects with `tools.N: Input tag 'web_search_preview'...`.\n\t\t// Strip the OpenAI-native variants for any non-openai-responses payload\n\t\t// so they never leak to Anthropic or Chat Completions backends.\n\t\treturn stripNativeOpenAiWebSearch(payload);\n\t}\n\n\tif (!isRecord(payload)) {\n\t\treturn payload;\n\t}\n\n\tconst supportsNativeWebSearch = supportsNativeOpenAiWebSearch(model);\n\tconst tools = Array.isArray(payload.tools) ? payload.tools : [];\n\tconst shouldInjectWebSearch = supportsNativeWebSearch && isOpenaiWebSearchEnabled();\n\tconst strippedPayload = supportsNativeWebSearch ? payload : stripNativeOpenAiWebSearch(payload);\n\tif (!isRecord(strippedPayload)) {\n\t\treturn strippedPayload;\n\t}\n\n\tconst strippedTools = Array.isArray(strippedPayload.tools) ? strippedPayload.tools : [];\n\tconst activeTools = supportsNativeWebSearch ? tools : strippedTools;\n\tconst sanitized = sanitizeTools(tools, { stripFunctionWebSearch: shouldInjectWebSearch });\n\tconst sanitizedTools = sanitized.tools;\n\tif (!shouldInjectWebSearch) {\n\t\tconst nativeStripped = strippedPayload !== payload;\n\t\tconst passiveSanitized = sanitizeTools(activeTools, { stripFunctionWebSearch: false });\n\t\tif (!nativeStripped && !passiveSanitized.changed) {\n\t\t\treturn strippedPayload;\n\t\t}\n\n\t\treturn {\n\t\t\t...strippedPayload,\n\t\t\ttools: passiveSanitized.tools,\n\t\t};\n\t}\n\n\tconst hasNativeWebSearch = sanitizedTools.some((tool) => isNativeOpenAiWebSearchType(tool.type));\n\n\tif (!hasNativeWebSearch) {\n\t\tsanitizedTools.push({ type: NATIVE_OPENAI_WEB_SEARCH_TYPE });\n\t}\n\n\treturn {\n\t\t...payload,\n\t\ttools: sanitizedTools,\n\t\tinclude: includeWebSearchSources(payload),\n\t};\n}\n\nexport function isOpenaiWebSearchEnabled(): boolean {\n\treturn parseEnableEnv(ENABLE_ENV);\n}\n\nfunction clearUi(ctx: ExtensionContext): void {\n\tif (!ctx.hasUI) return;\n\tctx.ui.setStatus(STATUS_KEY, undefined);\n\tctx.ui.setWidget(WIDGET_KEY, undefined);\n}\n\nfunction syncUi(ctx: ExtensionContext): void {\n\tclearUi(ctx);\n}\n\nexport const OPENAI_WEB_SEARCH_SECTION = `\n## Web Search\n\nNative web search is available in this session.\nUse web search when the user asks for current or online information.\nPrefer web search over guessing when freshness matters.\n`;\n\nexport default function openaiWebSearchExtension(pi: ExtensionAPI): void {\n\tpi.on(\"before_provider_request\", (event, ctx) => {\n\t\treturn addOpenAiWebSearchToPayload(ctx.model, event.payload);\n\t});\n\n\tpi.on(\"session_start\", async (_event, ctx) => {\n\t\tsyncUi(ctx);\n\t});\n\n\tpi.on(\"model_select\", async (_event, ctx) => {\n\t\tsyncUi(ctx);\n\t});\n\n\tpi.on(\"session_shutdown\", async (_event, ctx) => {\n\t\tclearUi(ctx);\n\t});\n\n\tpi.on(\"before_agent_start\", async (event, ctx) => {\n\t\tif (!supportsNativeOpenAiWebSearch(ctx.model)) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (!isOpenaiWebSearchEnabled()) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\treturn {\n\t\t\tsystemPrompt: `${event.systemPrompt}\\n${OPENAI_WEB_SEARCH_SECTION}`,\n\t\t};\n\t});\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/openai-web-search/index.ts"],"names":[],"mappings":"AAOA,MAAM,qBAAqB,GAAqB,IAAI,GAAG,CAAC,CAAC,kBAAkB,EAAE,wBAAwB,CAAC,CAAC,CAAC;AACxG,MAAM,UAAU,GAAG,sBAAsB,CAAC;AAC1C,MAAM,6BAA6B,GAAG,oBAAoB,CAAC;AAC3D,MAAM,0BAA0B,GAAG,gCAAgC,CAAC;AACpE,MAAM,UAAU,GAAG,mBAAmB,CAAC;AACvC,MAAM,UAAU,GAAG,mBAAmB,CAAC;AAEvC,SAAS,cAAc,CAAC,MAAc,EAAW;IAChD,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACrC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACf,OAAO,IAAI,CAAC;IACb,CAAC;IAED,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACjD,IAAI,UAAU,KAAK,GAAG,IAAI,UAAU,KAAK,OAAO,IAAI,UAAU,KAAK,IAAI,IAAI,UAAU,KAAK,KAAK,EAAE,CAAC;QACjG,OAAO,KAAK,CAAC;IACd,CAAC;IAED,IAAI,UAAU,KAAK,GAAG,IAAI,UAAU,KAAK,MAAM,IAAI,UAAU,KAAK,KAAK,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;QAChG,OAAO,IAAI,CAAC;IACb,CAAC;IAED,mDAAmD;IACnD,OAAO,IAAI,CAAC;AAAA,CACZ;AAED,SAAS,QAAQ,CAAC,KAAc,EAAoC;IACnE,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAC;AAAA,CACnD;AAED,SAAS,oBAAoB,CAAC,GAAoB,EAAwD;IACzG,OAAO,GAAG,KAAK,SAAS,IAAI,qBAAqB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAAA,CAC3D;AAED,SAAS,aAAa,CAAC,MAA6B,EAAoC;IACvF,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QAC1B,OAAO,SAAS,CAAC;IAClB,CAAC;IACD,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAChC,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,kBAAkB,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IACnG,CAAC;IACD,OAAO,MAAM,CAAC;AAAA,CACd;AAED,SAAS,+BAA+B,CAAC,KAA2B,EAAW;IAC9E,IAAI,CAAC;QACJ,OAAO,IAAI,GAAG,CAAC,KAAK,CAAC,OAAO,IAAI,2BAA2B,CAAC,CAAC,QAAQ,KAAK,gBAAgB,CAAC;IAC5F,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,KAAK,CAAC;IACd,CAAC;AAAA,CACD;AAED,MAAM,UAAU,6BAA6B,CAAC,MAA6B,EAAW;IACrF,MAAM,KAAK,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IACpC,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC;QACvC,OAAO,KAAK,CAAC;IACd,CAAC;IACD,IAAI,KAAK,CAAC,GAAG,KAAK,wBAAwB,EAAE,CAAC;QAC5C,OAAO,IAAI,CAAC;IACb,CAAC;IAED,MAAM,MAAM,GAAG,KAAK,CAAC,MAA2C,CAAC;IACjE,OAAO,MAAM,EAAE,wBAAwB,IAAI,+BAA+B,CAAC,KAAK,CAAC,CAAC;AAAA,CAClF;AAED,SAAS,2BAA2B,CAAC,KAAc,EAAmE;IACrH,OAAO,KAAK,KAAK,oBAAoB,IAAI,KAAK,KAAK,+BAA+B,CAAC;AAAA,CACnF;AAED,SAAS,0BAA0B,CAAC,KAAc,EAAW;IAC5D,OAAO,CACN,OAAO,KAAK,KAAK,QAAQ;QACzB,CAAC,KAAK,KAAK,YAAY,IAAI,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;QAC3D,CAAC,2BAA2B,CAAC,KAAK,CAAC,CACnC,CAAC;AAAA,CACF;AAED,SAAS,uBAAuB,CAAC,KAAc,EAAW;IACzD,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AAAA,CACnE;AAWD,SAAS,0BAA0B,CAAC,OAAgB,EAAW;IAC9D,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QACxB,OAAO,OAAO,CAAC;IAChB,CAAC;IAED,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,MAAM,SAAS,GAA4B,EAAE,GAAG,OAAO,EAAE,CAAC;IAE1D,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAC5B,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,MAAM,cAAc,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,2BAA2B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC3G,IAAI,cAAc,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,EAAE,CAAC;YAC5C,OAAO,GAAG,IAAI,CAAC;YACf,SAAS,CAAC,KAAK,GAAG,cAAc,CAAC;QAClC,CAAC;IACF,CAAC;IAED,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAChC,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,MAAM,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,0BAA0B,CAAC,CAAC;QACzF,IAAI,gBAAgB,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC;YAChD,OAAO,GAAG,IAAI,CAAC;YACf,SAAS,CAAC,OAAO,GAAG,gBAAgB,CAAC;QACtC,CAAC;IACF,CAAC;IAED,IAAI,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,2BAA2B,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5F,OAAO,GAAG,IAAI,CAAC;QACf,OAAO,SAAS,CAAC,WAAW,CAAC;IAC9B,CAAC;IAED,OAAO,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC;AAAA,CACrC;AAED,SAAS,aAAa,CAAC,KAAgB,EAAE,OAA6B,EAAkB;IACvF,MAAM,SAAS,GAAqB,EAAE,CAAC;IACvC,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QAC1B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YACrB,OAAO,GAAG,IAAI,CAAC;YACf,SAAS;QACV,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACvB,MAAM,0BAA0B,GAC/B,OAAO,CAAC,sBAAsB,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,CAAC;QACpG,MAAM,gCAAgC,GAAG,0BAA0B,CAAC,IAAI,CAAC,IAAI,uBAAuB,CAAC,IAAI,CAAC,CAAC;QAC3G,IAAI,0BAA0B,IAAI,gCAAgC,EAAE,CAAC;YACpE,OAAO,GAAG,IAAI,CAAC;QAChB,CAAC;aAAM,CAAC;YACP,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtB,CAAC;IACF,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;AAAA,CACrC;AAED,SAAS,uBAAuB,CAAC,OAAgC,EAAY;IAC5E,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC;QAC7C,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAmB,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC;QAC/E,CAAC,CAAC,EAAE,CAAC;IACN,OAAO,OAAO,CAAC,QAAQ,CAAC,0BAA0B,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,EAAE,0BAA0B,CAAC,CAAC;AAAA,CACzG;AAED,MAAM,UAAU,2BAA2B,CAAC,MAA6B,EAAE,OAAgB,EAAW;IACrG,MAAM,KAAK,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IACpC,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC;QACvC,0EAA0E;QAC1E,2EAAyE;QACzE,wEAAwE;QACxE,uEAAuE;QACvE,wEAAwE;QACxE,gEAAgE;QAChE,OAAO,0BAA0B,CAAC,OAAO,CAAC,CAAC;IAC5C,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QACxB,OAAO,OAAO,CAAC;IAChB,CAAC;IAED,MAAM,uBAAuB,GAAG,6BAA6B,CAAC,KAAK,CAAC,CAAC;IACrE,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IAChE,MAAM,qBAAqB,GAAG,uBAAuB,IAAI,wBAAwB,EAAE,CAAC;IACpF,MAAM,eAAe,GAAG,uBAAuB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,0BAA0B,CAAC,OAAO,CAAC,CAAC;IAChG,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;QAChC,OAAO,eAAe,CAAC;IACxB,CAAC;IAED,MAAM,aAAa,GAAG,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IACxF,MAAM,WAAW,GAAG,uBAAuB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC;IACpE,MAAM,SAAS,GAAG,aAAa,CAAC,KAAK,EAAE,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,CAAC,CAAC;IAC1F,MAAM,cAAc,GAAG,SAAS,CAAC,KAAK,CAAC;IACvC,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC5B,MAAM,cAAc,GAAG,eAAe,KAAK,OAAO,CAAC;QACnD,MAAM,gBAAgB,GAAG,aAAa,CAAC,WAAW,EAAE,EAAE,sBAAsB,EAAE,KAAK,EAAE,CAAC,CAAC;QACvF,IAAI,CAAC,cAAc,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC;YAClD,OAAO,eAAe,CAAC;QACxB,CAAC;QAED,OAAO;YACN,GAAG,eAAe;YAClB,KAAK,EAAE,gBAAgB,CAAC,KAAK;SAC7B,CAAC;IACH,CAAC;IAED,MAAM,kBAAkB,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,2BAA2B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAEjG,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACzB,cAAc,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,6BAA6B,EAAE,CAAC,CAAC;IAC9D,CAAC;IAED,OAAO;QACN,GAAG,OAAO;QACV,KAAK,EAAE,cAAc;QACrB,OAAO,EAAE,uBAAuB,CAAC,OAAO,CAAC;KACzC,CAAC;AAAA,CACF;AAED,MAAM,UAAU,wBAAwB,GAAY;IACnD,OAAO,cAAc,CAAC,UAAU,CAAC,CAAC;AAAA,CAClC;AAED,SAAS,OAAO,CAAC,GAAqB,EAAQ;IAC7C,IAAI,CAAC,GAAG,CAAC,KAAK;QAAE,OAAO;IACvB,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;IACxC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;AAAA,CACxC;AAED,SAAS,MAAM,CAAC,GAAqB,EAAQ;IAC5C,OAAO,CAAC,GAAG,CAAC,CAAC;AAAA,CACb;AAED,MAAM,CAAC,MAAM,yBAAyB,GAAG;;;;;;CAMxC,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,wBAAwB,CAAC,EAAgB,EAAQ;IACxE,EAAE,CAAC,EAAE,CAAC,yBAAyB,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC;QAChD,OAAO,2BAA2B,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IAAA,CAC7D,CAAC,CAAC;IAEH,EAAE,CAAC,EAAE,CAAC,eAAe,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC;QAC7C,MAAM,CAAC,GAAG,CAAC,CAAC;IAAA,CACZ,CAAC,CAAC;IAEH,EAAE,CAAC,EAAE,CAAC,cAAc,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC;QAC5C,MAAM,CAAC,GAAG,CAAC,CAAC;IAAA,CACZ,CAAC,CAAC;IAEH,EAAE,CAAC,EAAE,CAAC,kBAAkB,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC;QAChD,OAAO,CAAC,GAAG,CAAC,CAAC;IAAA,CACb,CAAC,CAAC;IAEH,EAAE,CAAC,EAAE,CAAC,oBAAoB,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC;QACjD,IAAI,CAAC,6BAA6B,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAC/C,OAAO,SAAS,CAAC;QAClB,CAAC;QAED,IAAI,CAAC,wBAAwB,EAAE,EAAE,CAAC;YACjC,OAAO,SAAS,CAAC;QAClB,CAAC;QAED,OAAO;YACN,YAAY,EAAE,GAAG,KAAK,CAAC,YAAY,KAAK,yBAAyB,EAAE;SACnE,CAAC;IAAA,CACF,CAAC,CAAC;AAAA,CACH","sourcesContent":["import type { Api, Model, OpenAIResponsesCompat } from \"@earendil-works/pi-ai\";\nimport type { ExtensionAPI, ExtensionContext } from \"../../types.ts\";\n\ntype ToolDefinition = Record<string, unknown>;\ntype OpenAiWebSearchModel = Pick<Model<Api>, \"api\" | \"baseUrl\" | \"compat\">;\ntype OpenAiWebSearchTarget = Api | OpenAiWebSearchModel | undefined;\n\nconst OPENAI_RESPONSES_APIS: ReadonlySet<Api> = new Set([\"openai-responses\", \"azure-openai-responses\"]);\nconst ENABLE_ENV = \"PI_OPENAI_WEB_SEARCH\";\nconst NATIVE_OPENAI_WEB_SEARCH_TYPE = \"web_search_preview\";\nconst WEB_SEARCH_SOURCES_INCLUDE = \"web_search_call.action.sources\";\nconst STATUS_KEY = \"openai-web-search\";\nconst WIDGET_KEY = \"openai-web-search\";\n\nfunction parseEnableEnv(envVar: string): boolean {\n\tconst envValue = process.env[envVar];\n\tif (!envValue) {\n\t\treturn true;\n\t}\n\n\tconst normalized = envValue.trim().toLowerCase();\n\tif (normalized === \"0\" || normalized === \"false\" || normalized === \"no\" || normalized === \"off\") {\n\t\treturn false;\n\t}\n\n\tif (normalized === \"1\" || normalized === \"true\" || normalized === \"yes\" || normalized === \"on\") {\n\t\treturn true;\n\t}\n\n\t// Unknown values fall back to default-on behavior.\n\treturn true;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null;\n}\n\nfunction isOpenAiResponsesApi(api: Api | undefined): api is \"openai-responses\" | \"azure-openai-responses\" {\n\treturn api !== undefined && OPENAI_RESPONSES_APIS.has(api);\n}\n\nfunction resolveTarget(target: OpenAiWebSearchTarget): OpenAiWebSearchModel | undefined {\n\tif (target === undefined) {\n\t\treturn undefined;\n\t}\n\tif (typeof target === \"string\") {\n\t\treturn { api: target, baseUrl: target === \"openai-responses\" ? \"https://api.openai.com/v1\" : \"\" };\n\t}\n\treturn target;\n}\n\nfunction isOpenAiResponsesNativeEndpoint(model: OpenAiWebSearchModel): boolean {\n\ttry {\n\t\treturn new URL(model.baseUrl || \"https://api.openai.com/v1\").hostname === \"api.openai.com\";\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nexport function supportsNativeOpenAiWebSearch(target: OpenAiWebSearchTarget): boolean {\n\tconst model = resolveTarget(target);\n\tif (!isOpenAiResponsesApi(model?.api)) {\n\t\treturn false;\n\t}\n\tif (model.api === \"azure-openai-responses\") {\n\t\treturn true;\n\t}\n\n\tconst compat = model.compat as OpenAIResponsesCompat | undefined;\n\treturn compat?.supportsWebSearchPreview ?? isOpenAiResponsesNativeEndpoint(model);\n}\n\nfunction isNativeOpenAiWebSearchType(value: unknown): value is \"web_search_preview\" | \"web_search_preview_2025_03_11\" {\n\treturn value === \"web_search_preview\" || value === \"web_search_preview_2025_03_11\";\n}\n\nfunction isUnsupportedWebSearchType(value: unknown): boolean {\n\treturn (\n\t\ttypeof value === \"string\" &&\n\t\t(value === \"web_search\" || value.startsWith(\"web_search_\")) &&\n\t\t!isNativeOpenAiWebSearchType(value)\n\t);\n}\n\nfunction isAnthropicWebFetchType(value: unknown): boolean {\n\treturn typeof value === \"string\" && value.startsWith(\"web_fetch_\");\n}\n\ntype SanitizedTools = {\n\tchanged: boolean;\n\ttools: ToolDefinition[];\n};\n\ntype SanitizeToolsOptions = {\n\tstripFunctionWebSearch: boolean;\n};\n\nfunction stripNativeOpenAiWebSearch(payload: unknown): unknown {\n\tif (!isRecord(payload)) {\n\t\treturn payload;\n\t}\n\n\tlet changed = false;\n\tconst sanitized: Record<string, unknown> = { ...payload };\n\n\tconst tools = payload.tools;\n\tif (Array.isArray(tools)) {\n\t\tconst sanitizedTools = tools.filter((tool) => !(isRecord(tool) && isNativeOpenAiWebSearchType(tool.type)));\n\t\tif (sanitizedTools.length !== tools.length) {\n\t\t\tchanged = true;\n\t\t\tsanitized.tools = sanitizedTools;\n\t\t}\n\t}\n\n\tconst include = payload.include;\n\tif (Array.isArray(include)) {\n\t\tconst sanitizedInclude = include.filter((value) => value !== WEB_SEARCH_SOURCES_INCLUDE);\n\t\tif (sanitizedInclude.length !== include.length) {\n\t\t\tchanged = true;\n\t\t\tsanitized.include = sanitizedInclude;\n\t\t}\n\t}\n\n\tif (isRecord(payload.tool_choice) && isNativeOpenAiWebSearchType(payload.tool_choice.type)) {\n\t\tchanged = true;\n\t\tdelete sanitized.tool_choice;\n\t}\n\n\treturn changed ? sanitized : payload;\n}\n\nfunction sanitizeTools(tools: unknown[], options: SanitizeToolsOptions): SanitizedTools {\n\tconst sanitized: ToolDefinition[] = [];\n\tlet changed = false;\n\tfor (const tool of tools) {\n\t\tif (!isRecord(tool)) {\n\t\t\tchanged = true;\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst type = tool.type;\n\t\tconst shouldStripFunctionVariant =\n\t\t\toptions.stripFunctionWebSearch && tool.name === \"web_search\" && !isNativeOpenAiWebSearchType(type);\n\t\tconst shouldStripProviderNativeVariant = isUnsupportedWebSearchType(type) || isAnthropicWebFetchType(type);\n\t\tif (shouldStripFunctionVariant || shouldStripProviderNativeVariant) {\n\t\t\tchanged = true;\n\t\t} else {\n\t\t\tsanitized.push(tool);\n\t\t}\n\t}\n\n\treturn { changed, tools: sanitized };\n}\n\nfunction includeWebSearchSources(payload: Record<string, unknown>): string[] {\n\tconst include = Array.isArray(payload.include)\n\t\t? payload.include.filter((value): value is string => typeof value === \"string\")\n\t\t: [];\n\treturn include.includes(WEB_SEARCH_SOURCES_INCLUDE) ? include : [...include, WEB_SEARCH_SOURCES_INCLUDE];\n}\n\nexport function addOpenAiWebSearchToPayload(target: OpenAiWebSearchTarget, payload: unknown): unknown {\n\tconst model = resolveTarget(target);\n\tif (!isOpenAiResponsesApi(model?.api)) {\n\t\t// Defense in depth. `web_search_preview` is an OpenAI Responses-only tool\n\t\t// type, but proxies that translate openai-responses → anthropic-messages\n\t\t// (e.g., ccapi/quotio for Claude models) can forward it verbatim, which\n\t\t// Anthropic rejects with `tools.N: Input tag 'web_search_preview'...`.\n\t\t// Strip the OpenAI-native variants for any non-openai-responses payload\n\t\t// so they never leak to Anthropic or Chat Completions backends.\n\t\treturn stripNativeOpenAiWebSearch(payload);\n\t}\n\n\tif (!isRecord(payload)) {\n\t\treturn payload;\n\t}\n\n\tconst supportsNativeWebSearch = supportsNativeOpenAiWebSearch(model);\n\tconst tools = Array.isArray(payload.tools) ? payload.tools : [];\n\tconst shouldInjectWebSearch = supportsNativeWebSearch && isOpenaiWebSearchEnabled();\n\tconst strippedPayload = supportsNativeWebSearch ? payload : stripNativeOpenAiWebSearch(payload);\n\tif (!isRecord(strippedPayload)) {\n\t\treturn strippedPayload;\n\t}\n\n\tconst strippedTools = Array.isArray(strippedPayload.tools) ? strippedPayload.tools : [];\n\tconst activeTools = supportsNativeWebSearch ? tools : strippedTools;\n\tconst sanitized = sanitizeTools(tools, { stripFunctionWebSearch: shouldInjectWebSearch });\n\tconst sanitizedTools = sanitized.tools;\n\tif (!shouldInjectWebSearch) {\n\t\tconst nativeStripped = strippedPayload !== payload;\n\t\tconst passiveSanitized = sanitizeTools(activeTools, { stripFunctionWebSearch: false });\n\t\tif (!nativeStripped && !passiveSanitized.changed) {\n\t\t\treturn strippedPayload;\n\t\t}\n\n\t\treturn {\n\t\t\t...strippedPayload,\n\t\t\ttools: passiveSanitized.tools,\n\t\t};\n\t}\n\n\tconst hasNativeWebSearch = sanitizedTools.some((tool) => isNativeOpenAiWebSearchType(tool.type));\n\n\tif (!hasNativeWebSearch) {\n\t\tsanitizedTools.push({ type: NATIVE_OPENAI_WEB_SEARCH_TYPE });\n\t}\n\n\treturn {\n\t\t...payload,\n\t\ttools: sanitizedTools,\n\t\tinclude: includeWebSearchSources(payload),\n\t};\n}\n\nexport function isOpenaiWebSearchEnabled(): boolean {\n\treturn parseEnableEnv(ENABLE_ENV);\n}\n\nfunction clearUi(ctx: ExtensionContext): void {\n\tif (!ctx.hasUI) return;\n\tctx.ui.setStatus(STATUS_KEY, undefined);\n\tctx.ui.setWidget(WIDGET_KEY, undefined);\n}\n\nfunction syncUi(ctx: ExtensionContext): void {\n\tclearUi(ctx);\n}\n\nexport const OPENAI_WEB_SEARCH_SECTION = `\n## Web Search\n\nNative web search is available in this session.\nUse web search when the user asks for current or online information.\nPrefer web search over guessing when freshness matters.\n`;\n\nexport default function openaiWebSearchExtension(pi: ExtensionAPI): void {\n\tpi.on(\"before_provider_request\", (event, ctx) => {\n\t\treturn addOpenAiWebSearchToPayload(ctx.model, event.payload);\n\t});\n\n\tpi.on(\"session_start\", async (_event, ctx) => {\n\t\tsyncUi(ctx);\n\t});\n\n\tpi.on(\"model_select\", async (_event, ctx) => {\n\t\tsyncUi(ctx);\n\t});\n\n\tpi.on(\"session_shutdown\", async (_event, ctx) => {\n\t\tclearUi(ctx);\n\t});\n\n\tpi.on(\"before_agent_start\", async (event, ctx) => {\n\t\tif (!supportsNativeOpenAiWebSearch(ctx.model)) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (!isOpenaiWebSearchEnabled()) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\treturn {\n\t\t\tsystemPrompt: `${event.systemPrompt}\\n${OPENAI_WEB_SEARCH_SECTION}`,\n\t\t};\n\t});\n}\n"]}
@@ -1,4 +1,4 @@
1
- export declare namespace BashArity {
2
- function prefix(tokens: string[]): string[];
3
- }
1
+ export declare const BashArity: {
2
+ prefix(tokens: string[]): string[];
3
+ };
4
4
  //# sourceMappingURL=arity.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"arity.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/permission-system/arity.ts"],"names":[],"mappings":"AAAA,yBAAiB,SAAS,CAAC,CAAC;IAC3B,SAAgB,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,YAQtC;CAyJD","sourcesContent":["export namespace BashArity {\n\texport function prefix(tokens: string[]) {\n\t\tfor (let len = tokens.length; len > 0; len--) {\n\t\t\tconst prefix = tokens.slice(0, len).join(\" \");\n\t\t\tconst arity = ARITY[prefix];\n\t\t\tif (arity !== undefined) return tokens.slice(0, arity);\n\t\t}\n\t\tif (tokens.length === 0) return [];\n\t\treturn tokens.slice(0, 1);\n\t}\n\n\t/* Generated with following prompt:\nYou are generating a dictionary of command-prefix arities for bash-style commands.\nThis dictionary is used to identify the \"human-understandable command\" from an input shell command.### **RULES (follow strictly)**1. Each entry maps a **command prefix string → number**, representing how many **tokens** define the command.\n2. **Flags NEVER count as tokens**. Only subcommands count.\n3. **Longest matching prefix wins**.\n4. **Only include a longer prefix if its arity is different from what the shorter prefix already implies**. * Example: If `git` is 2, then do **not** include `git checkout`, `git commit`, etc. unless they require *different* arity.\n5. The output must be a **single JSON object**. Each entry should have a comment with an example real world matching command. DO NOT MAKE ANY OTHER COMMENTS. Should be alphabetical\n6. Include the **most commonly used commands** across many stacks and languages. More is better.### **Semantics examples*** `touch foo.txt` → `touch` (arity 1, explicitly listed)\n* `git checkout main` → `git checkout` (because `git` has arity 2)\n* `npm install` → `npm install` (because `npm` has arity 2)\n* `npm run dev` → `npm run dev` (because `npm run` has arity 3)\n* `python script.py` → `python script.py` (default: whole input, not in dictionary)### **Now generate the dictionary.**\n*/\n\tconst ARITY: Record<string, number> = {\n\t\tcat: 1, // cat file.txt\n\t\tcd: 1, // cd /path/to/dir\n\t\tchmod: 1, // chmod 755 script.sh\n\t\tchown: 1, // chown user:group file.txt\n\t\tcp: 1, // cp source.txt dest.txt\n\t\techo: 1, // echo \"hello world\"\n\t\tenv: 1, // env\n\t\texport: 1, // export PATH=/usr/bin\n\t\tgrep: 1, // grep pattern file.txt\n\t\tkill: 1, // kill 1234\n\t\tkillall: 1, // killall process\n\t\tln: 1, // ln -s source target\n\t\tls: 1, // ls -la\n\t\tmkdir: 1, // mkdir new-dir\n\t\tmv: 1, // mv old.txt new.txt\n\t\tps: 1, // ps aux\n\t\tpwd: 1, // pwd\n\t\trm: 1, // rm file.txt\n\t\trmdir: 1, // rmdir empty-dir\n\t\tsleep: 1, // sleep 5\n\t\tsource: 1, // source ~/.bashrc\n\t\ttail: 1, // tail -f log.txt\n\t\ttouch: 1, // touch file.txt\n\t\tunset: 1, // unset VAR\n\t\twhich: 1, // which node\n\t\taws: 3, // aws s3 ls\n\t\taz: 3, // az storage blob list\n\t\tbazel: 2, // bazel build\n\t\tbrew: 2, // brew install node\n\t\tbun: 2, // bun install\n\t\t\"bun run\": 3, // bun run dev\n\t\t\"bun x\": 3, // bun x vite\n\t\tcargo: 2, // cargo build\n\t\t\"cargo add\": 3, // cargo add tokio\n\t\t\"cargo run\": 3, // cargo run main\n\t\tcdk: 2, // cdk deploy\n\t\tcf: 2, // cf push app\n\t\tcmake: 2, // cmake build\n\t\tcomposer: 2, // composer require laravel\n\t\tconsul: 2, // consul members\n\t\t\"consul kv\": 3, // consul kv get config/app\n\t\tcrictl: 2, // crictl ps\n\t\tdeno: 2, // deno run server.ts\n\t\t\"deno task\": 3, // deno task dev\n\t\tdoctl: 3, // doctl kubernetes cluster list\n\t\tdocker: 2, // docker run nginx\n\t\t\"docker builder\": 3, // docker builder prune\n\t\t\"docker compose\": 3, // docker compose up\n\t\t\"docker container\": 3, // docker container ls\n\t\t\"docker image\": 3, // docker image prune\n\t\t\"docker network\": 3, // docker network inspect\n\t\t\"docker volume\": 3, // docker volume ls\n\t\teksctl: 2, // eksctl get clusters\n\t\t\"eksctl create\": 3, // eksctl create cluster\n\t\tfirebase: 2, // firebase deploy\n\t\tflyctl: 2, // flyctl deploy\n\t\tgcloud: 3, // gcloud compute instances list\n\t\tgh: 3, // gh pr list\n\t\tgit: 2, // git checkout main\n\t\t\"git config\": 3, // git config user.name\n\t\t\"git remote\": 3, // git remote add origin\n\t\t\"git stash\": 3, // git stash pop\n\t\tgo: 2, // go build\n\t\tgradle: 2, // gradle build\n\t\thelm: 2, // helm install mychart\n\t\theroku: 2, // heroku logs\n\t\thugo: 2, // hugo new site blog\n\t\tip: 2, // ip link show\n\t\t\"ip addr\": 3, // ip addr show\n\t\t\"ip link\": 3, // ip link set eth0 up\n\t\t\"ip netns\": 3, // ip netns exec foo bash\n\t\t\"ip route\": 3, // ip route add default via 1.1.1.1\n\t\tkind: 2, // kind delete cluster\n\t\t\"kind create\": 3, // kind create cluster\n\t\tkubectl: 2, // kubectl get pods\n\t\t\"kubectl kustomize\": 3, // kubectl kustomize overlays/dev\n\t\t\"kubectl rollout\": 3, // kubectl rollout restart deploy/api\n\t\tkustomize: 2, // kustomize build .\n\t\tmake: 2, // make build\n\t\tmc: 2, // mc ls myminio\n\t\t\"mc admin\": 3, // mc admin info myminio\n\t\tminikube: 2, // minikube start\n\t\tmongosh: 2, // mongosh test\n\t\tmysql: 2, // mysql -u root\n\t\tmvn: 2, // mvn compile\n\t\tng: 2, // ng generate component home\n\t\tnpm: 2, // npm install\n\t\t\"npm exec\": 3, // npm exec vite\n\t\t\"npm init\": 3, // npm init vue\n\t\t\"npm run\": 3, // npm run dev\n\t\t\"npm view\": 3, // npm view react version\n\t\tnvm: 2, // nvm use 18\n\t\tnx: 2, // nx build\n\t\topenssl: 2, // openssl genrsa 2048\n\t\t\"openssl req\": 3, // openssl req -new -key key.pem\n\t\t\"openssl x509\": 3, // openssl x509 -in cert.pem\n\t\tpip: 2, // pip install numpy\n\t\tpipenv: 2, // pipenv install flask\n\t\tpnpm: 2, // pnpm install\n\t\t\"pnpm dlx\": 3, // pnpm dlx create-next-app\n\t\t\"pnpm exec\": 3, // pnpm exec vite\n\t\t\"pnpm run\": 3, // pnpm run dev\n\t\tpoetry: 2, // poetry add requests\n\t\tpodman: 2, // podman run alpine\n\t\t\"podman container\": 3, // podman container ls\n\t\t\"podman image\": 3, // podman image prune\n\t\tpsql: 2, // psql -d mydb\n\t\tpulumi: 2, // pulumi up\n\t\t\"pulumi stack\": 3, // pulumi stack output\n\t\tpyenv: 2, // pyenv install 3.11\n\t\tpython: 2, // python -m venv env\n\t\trake: 2, // rake db:migrate\n\t\trbenv: 2, // rbenv install 3.2.0\n\t\t\"redis-cli\": 2, // redis-cli ping\n\t\trustup: 2, // rustup update\n\t\tserverless: 2, // serverless invoke\n\t\tsfdx: 3, // sfdx force:org:list\n\t\tskaffold: 2, // skaffold dev\n\t\tsls: 2, // sls deploy\n\t\tsst: 2, // sst deploy\n\t\tswift: 2, // swift build\n\t\tsystemctl: 2, // systemctl restart nginx\n\t\tterraform: 2, // terraform apply\n\t\t\"terraform workspace\": 3, // terraform workspace select prod\n\t\ttmux: 2, // tmux new -s dev\n\t\tturbo: 2, // turbo run build\n\t\tufw: 2, // ufw allow 22\n\t\tvault: 2, // vault login\n\t\t\"vault auth\": 3, // vault auth list\n\t\t\"vault kv\": 3, // vault kv get secret/api\n\t\tvercel: 2, // vercel deploy\n\t\tvolta: 2, // volta install node\n\t\twp: 2, // wp plugin install\n\t\tyarn: 2, // yarn add react\n\t\t\"yarn dlx\": 3, // yarn dlx create-react-app\n\t\t\"yarn run\": 3, // yarn run dev\n\t};\n}\n"]}
1
+ {"version":3,"file":"arity.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/permission-system/arity.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,SAAS;;CAUrB,CAAC","sourcesContent":["export const BashArity = {\n\tprefix(tokens: string[]): string[] {\n\t\tfor (let len = tokens.length; len > 0; len--) {\n\t\t\tconst prefix = tokens.slice(0, len).join(\" \");\n\t\t\tconst arity = ARITY[prefix];\n\t\t\tif (arity !== undefined) return tokens.slice(0, arity);\n\t\t}\n\t\tif (tokens.length === 0) return [];\n\t\treturn tokens.slice(0, 1);\n\t},\n};\n\n/* Generated with following prompt:\nYou are generating a dictionary of command-prefix arities for bash-style commands.\nThis dictionary is used to identify the \"human-understandable command\" from an input shell command.### **RULES (follow strictly)**1. Each entry maps a **command prefix string → number**, representing how many **tokens** define the command.\n2. **Flags NEVER count as tokens**. Only subcommands count.\n3. **Longest matching prefix wins**.\n4. **Only include a longer prefix if its arity is different from what the shorter prefix already implies**. * Example: If `git` is 2, then do **not** include `git checkout`, `git commit`, etc. unless they require *different* arity.\n5. The output must be a **single JSON object**. Each entry should have a comment with an example real world matching command. DO NOT MAKE ANY OTHER COMMENTS. Should be alphabetical\n6. Include the **most commonly used commands** across many stacks and languages. More is better.### **Semantics examples*** `touch foo.txt` → `touch` (arity 1, explicitly listed)\n* `git checkout main` → `git checkout` (because `git` has arity 2)\n* `npm install` → `npm install` (because `npm` has arity 2)\n* `npm run dev` → `npm run dev` (because `npm run` has arity 3)\n* `python script.py` → `python script.py` (default: whole input, not in dictionary)### **Now generate the dictionary.**\n*/\nconst ARITY: Record<string, number> = {\n\tcat: 1, // cat file.txt\n\tcd: 1, // cd /path/to/dir\n\tchmod: 1, // chmod 755 script.sh\n\tchown: 1, // chown user:group file.txt\n\tcp: 1, // cp source.txt dest.txt\n\techo: 1, // echo \"hello world\"\n\tenv: 1, // env\n\texport: 1, // export PATH=/usr/bin\n\tgrep: 1, // grep pattern file.txt\n\tkill: 1, // kill 1234\n\tkillall: 1, // killall process\n\tln: 1, // ln -s source target\n\tls: 1, // ls -la\n\tmkdir: 1, // mkdir new-dir\n\tmv: 1, // mv old.txt new.txt\n\tps: 1, // ps aux\n\tpwd: 1, // pwd\n\trm: 1, // rm file.txt\n\trmdir: 1, // rmdir empty-dir\n\tsleep: 1, // sleep 5\n\tsource: 1, // source ~/.bashrc\n\ttail: 1, // tail -f log.txt\n\ttouch: 1, // touch file.txt\n\tunset: 1, // unset VAR\n\twhich: 1, // which node\n\taws: 3, // aws s3 ls\n\taz: 3, // az storage blob list\n\tbazel: 2, // bazel build\n\tbrew: 2, // brew install node\n\tbun: 2, // bun install\n\t\"bun run\": 3, // bun run dev\n\t\"bun x\": 3, // bun x vite\n\tcargo: 2, // cargo build\n\t\"cargo add\": 3, // cargo add tokio\n\t\"cargo run\": 3, // cargo run main\n\tcdk: 2, // cdk deploy\n\tcf: 2, // cf push app\n\tcmake: 2, // cmake build\n\tcomposer: 2, // composer require laravel\n\tconsul: 2, // consul members\n\t\"consul kv\": 3, // consul kv get config/app\n\tcrictl: 2, // crictl ps\n\tdeno: 2, // deno run server.ts\n\t\"deno task\": 3, // deno task dev\n\tdoctl: 3, // doctl kubernetes cluster list\n\tdocker: 2, // docker run nginx\n\t\"docker builder\": 3, // docker builder prune\n\t\"docker compose\": 3, // docker compose up\n\t\"docker container\": 3, // docker container ls\n\t\"docker image\": 3, // docker image prune\n\t\"docker network\": 3, // docker network inspect\n\t\"docker volume\": 3, // docker volume ls\n\teksctl: 2, // eksctl get clusters\n\t\"eksctl create\": 3, // eksctl create cluster\n\tfirebase: 2, // firebase deploy\n\tflyctl: 2, // flyctl deploy\n\tgcloud: 3, // gcloud compute instances list\n\tgh: 3, // gh pr list\n\tgit: 2, // git checkout main\n\t\"git config\": 3, // git config user.name\n\t\"git remote\": 3, // git remote add origin\n\t\"git stash\": 3, // git stash pop\n\tgo: 2, // go build\n\tgradle: 2, // gradle build\n\thelm: 2, // helm install mychart\n\theroku: 2, // heroku logs\n\thugo: 2, // hugo new site blog\n\tip: 2, // ip link show\n\t\"ip addr\": 3, // ip addr show\n\t\"ip link\": 3, // ip link set eth0 up\n\t\"ip netns\": 3, // ip netns exec foo bash\n\t\"ip route\": 3, // ip route add default via 1.1.1.1\n\tkind: 2, // kind delete cluster\n\t\"kind create\": 3, // kind create cluster\n\tkubectl: 2, // kubectl get pods\n\t\"kubectl kustomize\": 3, // kubectl kustomize overlays/dev\n\t\"kubectl rollout\": 3, // kubectl rollout restart deploy/api\n\tkustomize: 2, // kustomize build .\n\tmake: 2, // make build\n\tmc: 2, // mc ls myminio\n\t\"mc admin\": 3, // mc admin info myminio\n\tminikube: 2, // minikube start\n\tmongosh: 2, // mongosh test\n\tmysql: 2, // mysql -u root\n\tmvn: 2, // mvn compile\n\tng: 2, // ng generate component home\n\tnpm: 2, // npm install\n\t\"npm exec\": 3, // npm exec vite\n\t\"npm init\": 3, // npm init vue\n\t\"npm run\": 3, // npm run dev\n\t\"npm view\": 3, // npm view react version\n\tnvm: 2, // nvm use 18\n\tnx: 2, // nx build\n\topenssl: 2, // openssl genrsa 2048\n\t\"openssl req\": 3, // openssl req -new -key key.pem\n\t\"openssl x509\": 3, // openssl x509 -in cert.pem\n\tpip: 2, // pip install numpy\n\tpipenv: 2, // pipenv install flask\n\tpnpm: 2, // pnpm install\n\t\"pnpm dlx\": 3, // pnpm dlx create-next-app\n\t\"pnpm exec\": 3, // pnpm exec vite\n\t\"pnpm run\": 3, // pnpm run dev\n\tpoetry: 2, // poetry add requests\n\tpodman: 2, // podman run alpine\n\t\"podman container\": 3, // podman container ls\n\t\"podman image\": 3, // podman image prune\n\tpsql: 2, // psql -d mydb\n\tpulumi: 2, // pulumi up\n\t\"pulumi stack\": 3, // pulumi stack output\n\tpyenv: 2, // pyenv install 3.11\n\tpython: 2, // python -m venv env\n\trake: 2, // rake db:migrate\n\trbenv: 2, // rbenv install 3.2.0\n\t\"redis-cli\": 2, // redis-cli ping\n\trustup: 2, // rustup update\n\tserverless: 2, // serverless invoke\n\tsfdx: 3, // sfdx force:org:list\n\tskaffold: 2, // skaffold dev\n\tsls: 2, // sls deploy\n\tsst: 2, // sst deploy\n\tswift: 2, // swift build\n\tsystemctl: 2, // systemctl restart nginx\n\tterraform: 2, // terraform apply\n\t\"terraform workspace\": 3, // terraform workspace select prod\n\ttmux: 2, // tmux new -s dev\n\tturbo: 2, // turbo run build\n\tufw: 2, // ufw allow 22\n\tvault: 2, // vault login\n\t\"vault auth\": 3, // vault auth list\n\t\"vault kv\": 3, // vault kv get secret/api\n\tvercel: 2, // vercel deploy\n\tvolta: 2, // volta install node\n\twp: 2, // wp plugin install\n\tyarn: 2, // yarn add react\n\t\"yarn dlx\": 3, // yarn dlx create-react-app\n\t\"yarn run\": 3, // yarn run dev\n};\n"]}
@@ -1,7 +1,5 @@
1
- export { BashArity };
2
- var BashArity;
3
- (function (BashArity) {
4
- function prefix(tokens) {
1
+ export const BashArity = {
2
+ prefix(tokens) {
5
3
  for (let len = tokens.length; len > 0; len--) {
6
4
  const prefix = tokens.slice(0, len).join(" ");
7
5
  const arity = ARITY[prefix];
@@ -11,158 +9,157 @@ var BashArity;
11
9
  if (tokens.length === 0)
12
10
  return [];
13
11
  return tokens.slice(0, 1);
14
- }
15
- BashArity.prefix = prefix;
16
- /* Generated with following prompt:
17
- You are generating a dictionary of command-prefix arities for bash-style commands.
18
- This dictionary is used to identify the "human-understandable command" from an input shell command.### **RULES (follow strictly)**1. Each entry maps a **command prefix string → number**, representing how many **tokens** define the command.
19
- 2. **Flags NEVER count as tokens**. Only subcommands count.
20
- 3. **Longest matching prefix wins**.
21
- 4. **Only include a longer prefix if its arity is different from what the shorter prefix already implies**. * Example: If `git` is 2, then do **not** include `git checkout`, `git commit`, etc. unless they require *different* arity.
22
- 5. The output must be a **single JSON object**. Each entry should have a comment with an example real world matching command. DO NOT MAKE ANY OTHER COMMENTS. Should be alphabetical
23
- 6. Include the **most commonly used commands** across many stacks and languages. More is better.### **Semantics examples*** `touch foo.txt` → `touch` (arity 1, explicitly listed)
24
- * `git checkout main` → `git checkout` (because `git` has arity 2)
25
- * `npm install` → `npm install` (because `npm` has arity 2)
26
- * `npm run dev` → `npm run dev` (because `npm run` has arity 3)
27
- * `python script.py` → `python script.py` (default: whole input, not in dictionary)### **Now generate the dictionary.**
28
- */
29
- const ARITY = {
30
- cat: 1, // cat file.txt
31
- cd: 1, // cd /path/to/dir
32
- chmod: 1, // chmod 755 script.sh
33
- chown: 1, // chown user:group file.txt
34
- cp: 1, // cp source.txt dest.txt
35
- echo: 1, // echo "hello world"
36
- env: 1, // env
37
- export: 1, // export PATH=/usr/bin
38
- grep: 1, // grep pattern file.txt
39
- kill: 1, // kill 1234
40
- killall: 1, // killall process
41
- ln: 1, // ln -s source target
42
- ls: 1, // ls -la
43
- mkdir: 1, // mkdir new-dir
44
- mv: 1, // mv old.txt new.txt
45
- ps: 1, // ps aux
46
- pwd: 1, // pwd
47
- rm: 1, // rm file.txt
48
- rmdir: 1, // rmdir empty-dir
49
- sleep: 1, // sleep 5
50
- source: 1, // source ~/.bashrc
51
- tail: 1, // tail -f log.txt
52
- touch: 1, // touch file.txt
53
- unset: 1, // unset VAR
54
- which: 1, // which node
55
- aws: 3, // aws s3 ls
56
- az: 3, // az storage blob list
57
- bazel: 2, // bazel build
58
- brew: 2, // brew install node
59
- bun: 2, // bun install
60
- "bun run": 3, // bun run dev
61
- "bun x": 3, // bun x vite
62
- cargo: 2, // cargo build
63
- "cargo add": 3, // cargo add tokio
64
- "cargo run": 3, // cargo run main
65
- cdk: 2, // cdk deploy
66
- cf: 2, // cf push app
67
- cmake: 2, // cmake build
68
- composer: 2, // composer require laravel
69
- consul: 2, // consul members
70
- "consul kv": 3, // consul kv get config/app
71
- crictl: 2, // crictl ps
72
- deno: 2, // deno run server.ts
73
- "deno task": 3, // deno task dev
74
- doctl: 3, // doctl kubernetes cluster list
75
- docker: 2, // docker run nginx
76
- "docker builder": 3, // docker builder prune
77
- "docker compose": 3, // docker compose up
78
- "docker container": 3, // docker container ls
79
- "docker image": 3, // docker image prune
80
- "docker network": 3, // docker network inspect
81
- "docker volume": 3, // docker volume ls
82
- eksctl: 2, // eksctl get clusters
83
- "eksctl create": 3, // eksctl create cluster
84
- firebase: 2, // firebase deploy
85
- flyctl: 2, // flyctl deploy
86
- gcloud: 3, // gcloud compute instances list
87
- gh: 3, // gh pr list
88
- git: 2, // git checkout main
89
- "git config": 3, // git config user.name
90
- "git remote": 3, // git remote add origin
91
- "git stash": 3, // git stash pop
92
- go: 2, // go build
93
- gradle: 2, // gradle build
94
- helm: 2, // helm install mychart
95
- heroku: 2, // heroku logs
96
- hugo: 2, // hugo new site blog
97
- ip: 2, // ip link show
98
- "ip addr": 3, // ip addr show
99
- "ip link": 3, // ip link set eth0 up
100
- "ip netns": 3, // ip netns exec foo bash
101
- "ip route": 3, // ip route add default via 1.1.1.1
102
- kind: 2, // kind delete cluster
103
- "kind create": 3, // kind create cluster
104
- kubectl: 2, // kubectl get pods
105
- "kubectl kustomize": 3, // kubectl kustomize overlays/dev
106
- "kubectl rollout": 3, // kubectl rollout restart deploy/api
107
- kustomize: 2, // kustomize build .
108
- make: 2, // make build
109
- mc: 2, // mc ls myminio
110
- "mc admin": 3, // mc admin info myminio
111
- minikube: 2, // minikube start
112
- mongosh: 2, // mongosh test
113
- mysql: 2, // mysql -u root
114
- mvn: 2, // mvn compile
115
- ng: 2, // ng generate component home
116
- npm: 2, // npm install
117
- "npm exec": 3, // npm exec vite
118
- "npm init": 3, // npm init vue
119
- "npm run": 3, // npm run dev
120
- "npm view": 3, // npm view react version
121
- nvm: 2, // nvm use 18
122
- nx: 2, // nx build
123
- openssl: 2, // openssl genrsa 2048
124
- "openssl req": 3, // openssl req -new -key key.pem
125
- "openssl x509": 3, // openssl x509 -in cert.pem
126
- pip: 2, // pip install numpy
127
- pipenv: 2, // pipenv install flask
128
- pnpm: 2, // pnpm install
129
- "pnpm dlx": 3, // pnpm dlx create-next-app
130
- "pnpm exec": 3, // pnpm exec vite
131
- "pnpm run": 3, // pnpm run dev
132
- poetry: 2, // poetry add requests
133
- podman: 2, // podman run alpine
134
- "podman container": 3, // podman container ls
135
- "podman image": 3, // podman image prune
136
- psql: 2, // psql -d mydb
137
- pulumi: 2, // pulumi up
138
- "pulumi stack": 3, // pulumi stack output
139
- pyenv: 2, // pyenv install 3.11
140
- python: 2, // python -m venv env
141
- rake: 2, // rake db:migrate
142
- rbenv: 2, // rbenv install 3.2.0
143
- "redis-cli": 2, // redis-cli ping
144
- rustup: 2, // rustup update
145
- serverless: 2, // serverless invoke
146
- sfdx: 3, // sfdx force:org:list
147
- skaffold: 2, // skaffold dev
148
- sls: 2, // sls deploy
149
- sst: 2, // sst deploy
150
- swift: 2, // swift build
151
- systemctl: 2, // systemctl restart nginx
152
- terraform: 2, // terraform apply
153
- "terraform workspace": 3, // terraform workspace select prod
154
- tmux: 2, // tmux new -s dev
155
- turbo: 2, // turbo run build
156
- ufw: 2, // ufw allow 22
157
- vault: 2, // vault login
158
- "vault auth": 3, // vault auth list
159
- "vault kv": 3, // vault kv get secret/api
160
- vercel: 2, // vercel deploy
161
- volta: 2, // volta install node
162
- wp: 2, // wp plugin install
163
- yarn: 2, // yarn add react
164
- "yarn dlx": 3, // yarn dlx create-react-app
165
- "yarn run": 3, // yarn run dev
166
- };
167
- })(BashArity || (BashArity = {}));
12
+ },
13
+ };
14
+ /* Generated with following prompt:
15
+ You are generating a dictionary of command-prefix arities for bash-style commands.
16
+ This dictionary is used to identify the "human-understandable command" from an input shell command.### **RULES (follow strictly)**1. Each entry maps a **command prefix string → number**, representing how many **tokens** define the command.
17
+ 2. **Flags NEVER count as tokens**. Only subcommands count.
18
+ 3. **Longest matching prefix wins**.
19
+ 4. **Only include a longer prefix if its arity is different from what the shorter prefix already implies**. * Example: If `git` is 2, then do **not** include `git checkout`, `git commit`, etc. unless they require *different* arity.
20
+ 5. The output must be a **single JSON object**. Each entry should have a comment with an example real world matching command. DO NOT MAKE ANY OTHER COMMENTS. Should be alphabetical
21
+ 6. Include the **most commonly used commands** across many stacks and languages. More is better.### **Semantics examples*** `touch foo.txt` → `touch` (arity 1, explicitly listed)
22
+ * `git checkout main` → `git checkout` (because `git` has arity 2)
23
+ * `npm install` → `npm install` (because `npm` has arity 2)
24
+ * `npm run dev` → `npm run dev` (because `npm run` has arity 3)
25
+ * `python script.py` → `python script.py` (default: whole input, not in dictionary)### **Now generate the dictionary.**
26
+ */
27
+ const ARITY = {
28
+ cat: 1, // cat file.txt
29
+ cd: 1, // cd /path/to/dir
30
+ chmod: 1, // chmod 755 script.sh
31
+ chown: 1, // chown user:group file.txt
32
+ cp: 1, // cp source.txt dest.txt
33
+ echo: 1, // echo "hello world"
34
+ env: 1, // env
35
+ export: 1, // export PATH=/usr/bin
36
+ grep: 1, // grep pattern file.txt
37
+ kill: 1, // kill 1234
38
+ killall: 1, // killall process
39
+ ln: 1, // ln -s source target
40
+ ls: 1, // ls -la
41
+ mkdir: 1, // mkdir new-dir
42
+ mv: 1, // mv old.txt new.txt
43
+ ps: 1, // ps aux
44
+ pwd: 1, // pwd
45
+ rm: 1, // rm file.txt
46
+ rmdir: 1, // rmdir empty-dir
47
+ sleep: 1, // sleep 5
48
+ source: 1, // source ~/.bashrc
49
+ tail: 1, // tail -f log.txt
50
+ touch: 1, // touch file.txt
51
+ unset: 1, // unset VAR
52
+ which: 1, // which node
53
+ aws: 3, // aws s3 ls
54
+ az: 3, // az storage blob list
55
+ bazel: 2, // bazel build
56
+ brew: 2, // brew install node
57
+ bun: 2, // bun install
58
+ "bun run": 3, // bun run dev
59
+ "bun x": 3, // bun x vite
60
+ cargo: 2, // cargo build
61
+ "cargo add": 3, // cargo add tokio
62
+ "cargo run": 3, // cargo run main
63
+ cdk: 2, // cdk deploy
64
+ cf: 2, // cf push app
65
+ cmake: 2, // cmake build
66
+ composer: 2, // composer require laravel
67
+ consul: 2, // consul members
68
+ "consul kv": 3, // consul kv get config/app
69
+ crictl: 2, // crictl ps
70
+ deno: 2, // deno run server.ts
71
+ "deno task": 3, // deno task dev
72
+ doctl: 3, // doctl kubernetes cluster list
73
+ docker: 2, // docker run nginx
74
+ "docker builder": 3, // docker builder prune
75
+ "docker compose": 3, // docker compose up
76
+ "docker container": 3, // docker container ls
77
+ "docker image": 3, // docker image prune
78
+ "docker network": 3, // docker network inspect
79
+ "docker volume": 3, // docker volume ls
80
+ eksctl: 2, // eksctl get clusters
81
+ "eksctl create": 3, // eksctl create cluster
82
+ firebase: 2, // firebase deploy
83
+ flyctl: 2, // flyctl deploy
84
+ gcloud: 3, // gcloud compute instances list
85
+ gh: 3, // gh pr list
86
+ git: 2, // git checkout main
87
+ "git config": 3, // git config user.name
88
+ "git remote": 3, // git remote add origin
89
+ "git stash": 3, // git stash pop
90
+ go: 2, // go build
91
+ gradle: 2, // gradle build
92
+ helm: 2, // helm install mychart
93
+ heroku: 2, // heroku logs
94
+ hugo: 2, // hugo new site blog
95
+ ip: 2, // ip link show
96
+ "ip addr": 3, // ip addr show
97
+ "ip link": 3, // ip link set eth0 up
98
+ "ip netns": 3, // ip netns exec foo bash
99
+ "ip route": 3, // ip route add default via 1.1.1.1
100
+ kind: 2, // kind delete cluster
101
+ "kind create": 3, // kind create cluster
102
+ kubectl: 2, // kubectl get pods
103
+ "kubectl kustomize": 3, // kubectl kustomize overlays/dev
104
+ "kubectl rollout": 3, // kubectl rollout restart deploy/api
105
+ kustomize: 2, // kustomize build .
106
+ make: 2, // make build
107
+ mc: 2, // mc ls myminio
108
+ "mc admin": 3, // mc admin info myminio
109
+ minikube: 2, // minikube start
110
+ mongosh: 2, // mongosh test
111
+ mysql: 2, // mysql -u root
112
+ mvn: 2, // mvn compile
113
+ ng: 2, // ng generate component home
114
+ npm: 2, // npm install
115
+ "npm exec": 3, // npm exec vite
116
+ "npm init": 3, // npm init vue
117
+ "npm run": 3, // npm run dev
118
+ "npm view": 3, // npm view react version
119
+ nvm: 2, // nvm use 18
120
+ nx: 2, // nx build
121
+ openssl: 2, // openssl genrsa 2048
122
+ "openssl req": 3, // openssl req -new -key key.pem
123
+ "openssl x509": 3, // openssl x509 -in cert.pem
124
+ pip: 2, // pip install numpy
125
+ pipenv: 2, // pipenv install flask
126
+ pnpm: 2, // pnpm install
127
+ "pnpm dlx": 3, // pnpm dlx create-next-app
128
+ "pnpm exec": 3, // pnpm exec vite
129
+ "pnpm run": 3, // pnpm run dev
130
+ poetry: 2, // poetry add requests
131
+ podman: 2, // podman run alpine
132
+ "podman container": 3, // podman container ls
133
+ "podman image": 3, // podman image prune
134
+ psql: 2, // psql -d mydb
135
+ pulumi: 2, // pulumi up
136
+ "pulumi stack": 3, // pulumi stack output
137
+ pyenv: 2, // pyenv install 3.11
138
+ python: 2, // python -m venv env
139
+ rake: 2, // rake db:migrate
140
+ rbenv: 2, // rbenv install 3.2.0
141
+ "redis-cli": 2, // redis-cli ping
142
+ rustup: 2, // rustup update
143
+ serverless: 2, // serverless invoke
144
+ sfdx: 3, // sfdx force:org:list
145
+ skaffold: 2, // skaffold dev
146
+ sls: 2, // sls deploy
147
+ sst: 2, // sst deploy
148
+ swift: 2, // swift build
149
+ systemctl: 2, // systemctl restart nginx
150
+ terraform: 2, // terraform apply
151
+ "terraform workspace": 3, // terraform workspace select prod
152
+ tmux: 2, // tmux new -s dev
153
+ turbo: 2, // turbo run build
154
+ ufw: 2, // ufw allow 22
155
+ vault: 2, // vault login
156
+ "vault auth": 3, // vault auth list
157
+ "vault kv": 3, // vault kv get secret/api
158
+ vercel: 2, // vercel deploy
159
+ volta: 2, // volta install node
160
+ wp: 2, // wp plugin install
161
+ yarn: 2, // yarn add react
162
+ "yarn dlx": 3, // yarn dlx create-react-app
163
+ "yarn run": 3, // yarn run dev
164
+ };
168
165
  //# sourceMappingURL=arity.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"arity.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/permission-system/arity.ts"],"names":[],"mappings":"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","sourcesContent":["export namespace BashArity {\n\texport function prefix(tokens: string[]) {\n\t\tfor (let len = tokens.length; len > 0; len--) {\n\t\t\tconst prefix = tokens.slice(0, len).join(\" \");\n\t\t\tconst arity = ARITY[prefix];\n\t\t\tif (arity !== undefined) return tokens.slice(0, arity);\n\t\t}\n\t\tif (tokens.length === 0) return [];\n\t\treturn tokens.slice(0, 1);\n\t}\n\n\t/* Generated with following prompt:\nYou are generating a dictionary of command-prefix arities for bash-style commands.\nThis dictionary is used to identify the \"human-understandable command\" from an input shell command.### **RULES (follow strictly)**1. Each entry maps a **command prefix string → number**, representing how many **tokens** define the command.\n2. **Flags NEVER count as tokens**. Only subcommands count.\n3. **Longest matching prefix wins**.\n4. **Only include a longer prefix if its arity is different from what the shorter prefix already implies**. * Example: If `git` is 2, then do **not** include `git checkout`, `git commit`, etc. unless they require *different* arity.\n5. The output must be a **single JSON object**. Each entry should have a comment with an example real world matching command. DO NOT MAKE ANY OTHER COMMENTS. Should be alphabetical\n6. Include the **most commonly used commands** across many stacks and languages. More is better.### **Semantics examples*** `touch foo.txt` → `touch` (arity 1, explicitly listed)\n* `git checkout main` → `git checkout` (because `git` has arity 2)\n* `npm install` → `npm install` (because `npm` has arity 2)\n* `npm run dev` → `npm run dev` (because `npm run` has arity 3)\n* `python script.py` → `python script.py` (default: whole input, not in dictionary)### **Now generate the dictionary.**\n*/\n\tconst ARITY: Record<string, number> = {\n\t\tcat: 1, // cat file.txt\n\t\tcd: 1, // cd /path/to/dir\n\t\tchmod: 1, // chmod 755 script.sh\n\t\tchown: 1, // chown user:group file.txt\n\t\tcp: 1, // cp source.txt dest.txt\n\t\techo: 1, // echo \"hello world\"\n\t\tenv: 1, // env\n\t\texport: 1, // export PATH=/usr/bin\n\t\tgrep: 1, // grep pattern file.txt\n\t\tkill: 1, // kill 1234\n\t\tkillall: 1, // killall process\n\t\tln: 1, // ln -s source target\n\t\tls: 1, // ls -la\n\t\tmkdir: 1, // mkdir new-dir\n\t\tmv: 1, // mv old.txt new.txt\n\t\tps: 1, // ps aux\n\t\tpwd: 1, // pwd\n\t\trm: 1, // rm file.txt\n\t\trmdir: 1, // rmdir empty-dir\n\t\tsleep: 1, // sleep 5\n\t\tsource: 1, // source ~/.bashrc\n\t\ttail: 1, // tail -f log.txt\n\t\ttouch: 1, // touch file.txt\n\t\tunset: 1, // unset VAR\n\t\twhich: 1, // which node\n\t\taws: 3, // aws s3 ls\n\t\taz: 3, // az storage blob list\n\t\tbazel: 2, // bazel build\n\t\tbrew: 2, // brew install node\n\t\tbun: 2, // bun install\n\t\t\"bun run\": 3, // bun run dev\n\t\t\"bun x\": 3, // bun x vite\n\t\tcargo: 2, // cargo build\n\t\t\"cargo add\": 3, // cargo add tokio\n\t\t\"cargo run\": 3, // cargo run main\n\t\tcdk: 2, // cdk deploy\n\t\tcf: 2, // cf push app\n\t\tcmake: 2, // cmake build\n\t\tcomposer: 2, // composer require laravel\n\t\tconsul: 2, // consul members\n\t\t\"consul kv\": 3, // consul kv get config/app\n\t\tcrictl: 2, // crictl ps\n\t\tdeno: 2, // deno run server.ts\n\t\t\"deno task\": 3, // deno task dev\n\t\tdoctl: 3, // doctl kubernetes cluster list\n\t\tdocker: 2, // docker run nginx\n\t\t\"docker builder\": 3, // docker builder prune\n\t\t\"docker compose\": 3, // docker compose up\n\t\t\"docker container\": 3, // docker container ls\n\t\t\"docker image\": 3, // docker image prune\n\t\t\"docker network\": 3, // docker network inspect\n\t\t\"docker volume\": 3, // docker volume ls\n\t\teksctl: 2, // eksctl get clusters\n\t\t\"eksctl create\": 3, // eksctl create cluster\n\t\tfirebase: 2, // firebase deploy\n\t\tflyctl: 2, // flyctl deploy\n\t\tgcloud: 3, // gcloud compute instances list\n\t\tgh: 3, // gh pr list\n\t\tgit: 2, // git checkout main\n\t\t\"git config\": 3, // git config user.name\n\t\t\"git remote\": 3, // git remote add origin\n\t\t\"git stash\": 3, // git stash pop\n\t\tgo: 2, // go build\n\t\tgradle: 2, // gradle build\n\t\thelm: 2, // helm install mychart\n\t\theroku: 2, // heroku logs\n\t\thugo: 2, // hugo new site blog\n\t\tip: 2, // ip link show\n\t\t\"ip addr\": 3, // ip addr show\n\t\t\"ip link\": 3, // ip link set eth0 up\n\t\t\"ip netns\": 3, // ip netns exec foo bash\n\t\t\"ip route\": 3, // ip route add default via 1.1.1.1\n\t\tkind: 2, // kind delete cluster\n\t\t\"kind create\": 3, // kind create cluster\n\t\tkubectl: 2, // kubectl get pods\n\t\t\"kubectl kustomize\": 3, // kubectl kustomize overlays/dev\n\t\t\"kubectl rollout\": 3, // kubectl rollout restart deploy/api\n\t\tkustomize: 2, // kustomize build .\n\t\tmake: 2, // make build\n\t\tmc: 2, // mc ls myminio\n\t\t\"mc admin\": 3, // mc admin info myminio\n\t\tminikube: 2, // minikube start\n\t\tmongosh: 2, // mongosh test\n\t\tmysql: 2, // mysql -u root\n\t\tmvn: 2, // mvn compile\n\t\tng: 2, // ng generate component home\n\t\tnpm: 2, // npm install\n\t\t\"npm exec\": 3, // npm exec vite\n\t\t\"npm init\": 3, // npm init vue\n\t\t\"npm run\": 3, // npm run dev\n\t\t\"npm view\": 3, // npm view react version\n\t\tnvm: 2, // nvm use 18\n\t\tnx: 2, // nx build\n\t\topenssl: 2, // openssl genrsa 2048\n\t\t\"openssl req\": 3, // openssl req -new -key key.pem\n\t\t\"openssl x509\": 3, // openssl x509 -in cert.pem\n\t\tpip: 2, // pip install numpy\n\t\tpipenv: 2, // pipenv install flask\n\t\tpnpm: 2, // pnpm install\n\t\t\"pnpm dlx\": 3, // pnpm dlx create-next-app\n\t\t\"pnpm exec\": 3, // pnpm exec vite\n\t\t\"pnpm run\": 3, // pnpm run dev\n\t\tpoetry: 2, // poetry add requests\n\t\tpodman: 2, // podman run alpine\n\t\t\"podman container\": 3, // podman container ls\n\t\t\"podman image\": 3, // podman image prune\n\t\tpsql: 2, // psql -d mydb\n\t\tpulumi: 2, // pulumi up\n\t\t\"pulumi stack\": 3, // pulumi stack output\n\t\tpyenv: 2, // pyenv install 3.11\n\t\tpython: 2, // python -m venv env\n\t\trake: 2, // rake db:migrate\n\t\trbenv: 2, // rbenv install 3.2.0\n\t\t\"redis-cli\": 2, // redis-cli ping\n\t\trustup: 2, // rustup update\n\t\tserverless: 2, // serverless invoke\n\t\tsfdx: 3, // sfdx force:org:list\n\t\tskaffold: 2, // skaffold dev\n\t\tsls: 2, // sls deploy\n\t\tsst: 2, // sst deploy\n\t\tswift: 2, // swift build\n\t\tsystemctl: 2, // systemctl restart nginx\n\t\tterraform: 2, // terraform apply\n\t\t\"terraform workspace\": 3, // terraform workspace select prod\n\t\ttmux: 2, // tmux new -s dev\n\t\tturbo: 2, // turbo run build\n\t\tufw: 2, // ufw allow 22\n\t\tvault: 2, // vault login\n\t\t\"vault auth\": 3, // vault auth list\n\t\t\"vault kv\": 3, // vault kv get secret/api\n\t\tvercel: 2, // vercel deploy\n\t\tvolta: 2, // volta install node\n\t\twp: 2, // wp plugin install\n\t\tyarn: 2, // yarn add react\n\t\t\"yarn dlx\": 3, // yarn dlx create-react-app\n\t\t\"yarn run\": 3, // yarn run dev\n\t};\n}\n"]}
1
+ {"version":3,"file":"arity.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/permission-system/arity.ts"],"names":[],"mappings":"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","sourcesContent":["export const BashArity = {\n\tprefix(tokens: string[]): string[] {\n\t\tfor (let len = tokens.length; len > 0; len--) {\n\t\t\tconst prefix = tokens.slice(0, len).join(\" \");\n\t\t\tconst arity = ARITY[prefix];\n\t\t\tif (arity !== undefined) return tokens.slice(0, arity);\n\t\t}\n\t\tif (tokens.length === 0) return [];\n\t\treturn tokens.slice(0, 1);\n\t},\n};\n\n/* Generated with following prompt:\nYou are generating a dictionary of command-prefix arities for bash-style commands.\nThis dictionary is used to identify the \"human-understandable command\" from an input shell command.### **RULES (follow strictly)**1. Each entry maps a **command prefix string → number**, representing how many **tokens** define the command.\n2. **Flags NEVER count as tokens**. Only subcommands count.\n3. **Longest matching prefix wins**.\n4. **Only include a longer prefix if its arity is different from what the shorter prefix already implies**. * Example: If `git` is 2, then do **not** include `git checkout`, `git commit`, etc. unless they require *different* arity.\n5. The output must be a **single JSON object**. Each entry should have a comment with an example real world matching command. DO NOT MAKE ANY OTHER COMMENTS. Should be alphabetical\n6. Include the **most commonly used commands** across many stacks and languages. More is better.### **Semantics examples*** `touch foo.txt` → `touch` (arity 1, explicitly listed)\n* `git checkout main` → `git checkout` (because `git` has arity 2)\n* `npm install` → `npm install` (because `npm` has arity 2)\n* `npm run dev` → `npm run dev` (because `npm run` has arity 3)\n* `python script.py` → `python script.py` (default: whole input, not in dictionary)### **Now generate the dictionary.**\n*/\nconst ARITY: Record<string, number> = {\n\tcat: 1, // cat file.txt\n\tcd: 1, // cd /path/to/dir\n\tchmod: 1, // chmod 755 script.sh\n\tchown: 1, // chown user:group file.txt\n\tcp: 1, // cp source.txt dest.txt\n\techo: 1, // echo \"hello world\"\n\tenv: 1, // env\n\texport: 1, // export PATH=/usr/bin\n\tgrep: 1, // grep pattern file.txt\n\tkill: 1, // kill 1234\n\tkillall: 1, // killall process\n\tln: 1, // ln -s source target\n\tls: 1, // ls -la\n\tmkdir: 1, // mkdir new-dir\n\tmv: 1, // mv old.txt new.txt\n\tps: 1, // ps aux\n\tpwd: 1, // pwd\n\trm: 1, // rm file.txt\n\trmdir: 1, // rmdir empty-dir\n\tsleep: 1, // sleep 5\n\tsource: 1, // source ~/.bashrc\n\ttail: 1, // tail -f log.txt\n\ttouch: 1, // touch file.txt\n\tunset: 1, // unset VAR\n\twhich: 1, // which node\n\taws: 3, // aws s3 ls\n\taz: 3, // az storage blob list\n\tbazel: 2, // bazel build\n\tbrew: 2, // brew install node\n\tbun: 2, // bun install\n\t\"bun run\": 3, // bun run dev\n\t\"bun x\": 3, // bun x vite\n\tcargo: 2, // cargo build\n\t\"cargo add\": 3, // cargo add tokio\n\t\"cargo run\": 3, // cargo run main\n\tcdk: 2, // cdk deploy\n\tcf: 2, // cf push app\n\tcmake: 2, // cmake build\n\tcomposer: 2, // composer require laravel\n\tconsul: 2, // consul members\n\t\"consul kv\": 3, // consul kv get config/app\n\tcrictl: 2, // crictl ps\n\tdeno: 2, // deno run server.ts\n\t\"deno task\": 3, // deno task dev\n\tdoctl: 3, // doctl kubernetes cluster list\n\tdocker: 2, // docker run nginx\n\t\"docker builder\": 3, // docker builder prune\n\t\"docker compose\": 3, // docker compose up\n\t\"docker container\": 3, // docker container ls\n\t\"docker image\": 3, // docker image prune\n\t\"docker network\": 3, // docker network inspect\n\t\"docker volume\": 3, // docker volume ls\n\teksctl: 2, // eksctl get clusters\n\t\"eksctl create\": 3, // eksctl create cluster\n\tfirebase: 2, // firebase deploy\n\tflyctl: 2, // flyctl deploy\n\tgcloud: 3, // gcloud compute instances list\n\tgh: 3, // gh pr list\n\tgit: 2, // git checkout main\n\t\"git config\": 3, // git config user.name\n\t\"git remote\": 3, // git remote add origin\n\t\"git stash\": 3, // git stash pop\n\tgo: 2, // go build\n\tgradle: 2, // gradle build\n\thelm: 2, // helm install mychart\n\theroku: 2, // heroku logs\n\thugo: 2, // hugo new site blog\n\tip: 2, // ip link show\n\t\"ip addr\": 3, // ip addr show\n\t\"ip link\": 3, // ip link set eth0 up\n\t\"ip netns\": 3, // ip netns exec foo bash\n\t\"ip route\": 3, // ip route add default via 1.1.1.1\n\tkind: 2, // kind delete cluster\n\t\"kind create\": 3, // kind create cluster\n\tkubectl: 2, // kubectl get pods\n\t\"kubectl kustomize\": 3, // kubectl kustomize overlays/dev\n\t\"kubectl rollout\": 3, // kubectl rollout restart deploy/api\n\tkustomize: 2, // kustomize build .\n\tmake: 2, // make build\n\tmc: 2, // mc ls myminio\n\t\"mc admin\": 3, // mc admin info myminio\n\tminikube: 2, // minikube start\n\tmongosh: 2, // mongosh test\n\tmysql: 2, // mysql -u root\n\tmvn: 2, // mvn compile\n\tng: 2, // ng generate component home\n\tnpm: 2, // npm install\n\t\"npm exec\": 3, // npm exec vite\n\t\"npm init\": 3, // npm init vue\n\t\"npm run\": 3, // npm run dev\n\t\"npm view\": 3, // npm view react version\n\tnvm: 2, // nvm use 18\n\tnx: 2, // nx build\n\topenssl: 2, // openssl genrsa 2048\n\t\"openssl req\": 3, // openssl req -new -key key.pem\n\t\"openssl x509\": 3, // openssl x509 -in cert.pem\n\tpip: 2, // pip install numpy\n\tpipenv: 2, // pipenv install flask\n\tpnpm: 2, // pnpm install\n\t\"pnpm dlx\": 3, // pnpm dlx create-next-app\n\t\"pnpm exec\": 3, // pnpm exec vite\n\t\"pnpm run\": 3, // pnpm run dev\n\tpoetry: 2, // poetry add requests\n\tpodman: 2, // podman run alpine\n\t\"podman container\": 3, // podman container ls\n\t\"podman image\": 3, // podman image prune\n\tpsql: 2, // psql -d mydb\n\tpulumi: 2, // pulumi up\n\t\"pulumi stack\": 3, // pulumi stack output\n\tpyenv: 2, // pyenv install 3.11\n\tpython: 2, // python -m venv env\n\trake: 2, // rake db:migrate\n\trbenv: 2, // rbenv install 3.2.0\n\t\"redis-cli\": 2, // redis-cli ping\n\trustup: 2, // rustup update\n\tserverless: 2, // serverless invoke\n\tsfdx: 3, // sfdx force:org:list\n\tskaffold: 2, // skaffold dev\n\tsls: 2, // sls deploy\n\tsst: 2, // sst deploy\n\tswift: 2, // swift build\n\tsystemctl: 2, // systemctl restart nginx\n\tterraform: 2, // terraform apply\n\t\"terraform workspace\": 3, // terraform workspace select prod\n\ttmux: 2, // tmux new -s dev\n\tturbo: 2, // turbo run build\n\tufw: 2, // ufw allow 22\n\tvault: 2, // vault login\n\t\"vault auth\": 3, // vault auth list\n\t\"vault kv\": 3, // vault kv get secret/api\n\tvercel: 2, // vercel deploy\n\tvolta: 2, // volta install node\n\twp: 2, // wp plugin install\n\tyarn: 2, // yarn add react\n\t\"yarn dlx\": 3, // yarn dlx create-react-app\n\t\"yarn run\": 3, // yarn run dev\n};\n"]}
@@ -1,5 +1,5 @@
1
- import type { ExtensionAPI } from "../../types.js";
2
- import type { Ruleset } from "./types.js";
1
+ import type { ExtensionAPI } from "../../types.ts";
2
+ import type { Ruleset } from "./types.ts";
3
3
  export declare function parsePermissionFlag(value: string): Ruleset;
4
4
  export declare function registerPermissionFlag(pi: ExtensionAPI): Ruleset;
5
5
  export declare function loadPermissionFlag(pi: ExtensionAPI): Ruleset;
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/permission-system/cli.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,KAAK,EAAgB,OAAO,EAAE,MAAM,YAAY,CAAC;AAExD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAoB1D;AAED,wBAAgB,sBAAsB,CAAC,EAAE,EAAE,YAAY,GAAG,OAAO,CAOhE;AAED,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,YAAY,GAAG,OAAO,CAI5D","sourcesContent":["import type { ExtensionAPI } from \"../../types.js\";\nimport type { Action, Rule, Ruleset } from \"./types.js\";\n\nexport function parsePermissionFlag(value: string): Ruleset {\n\tconst rules: Rule[] = [];\n\tconst entries = value.split(\",\");\n\n\tfor (const entry of entries) {\n\t\tconst trimmed = entry.trim();\n\t\tif (!trimmed) continue;\n\n\t\tconst match = trimmed.match(/^([^:=]+)(?::([^=]+))?=(.+)$/);\n\t\tif (!match) continue;\n\n\t\tconst [, permission, pattern, action] = match;\n\t\trules.push({\n\t\t\tpermission: permission.trim(),\n\t\t\tpattern: pattern ? pattern.trim() : \"*\",\n\t\t\taction: action.trim() as Action,\n\t\t});\n\t}\n\n\treturn rules;\n}\n\nexport function registerPermissionFlag(pi: ExtensionAPI): Ruleset {\n\tpi.registerFlag(\"permission\", {\n\t\tdescription: \"Set permission rules (format: tool=action or tool:pattern=action)\",\n\t\ttype: \"string\",\n\t});\n\n\treturn [];\n}\n\nexport function loadPermissionFlag(pi: ExtensionAPI): Ruleset {\n\tconst flagValue = pi.getFlag(\"permission\") as string | undefined;\n\tif (!flagValue) return [];\n\treturn parsePermissionFlag(flagValue);\n}\n"]}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/permission-system/cli.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,KAAK,EAAgB,OAAO,EAAE,MAAM,YAAY,CAAC;AAExD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAoB1D;AAED,wBAAgB,sBAAsB,CAAC,EAAE,EAAE,YAAY,GAAG,OAAO,CAOhE;AAED,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,YAAY,GAAG,OAAO,CAI5D","sourcesContent":["import type { ExtensionAPI } from \"../../types.ts\";\nimport type { Action, Rule, Ruleset } from \"./types.ts\";\n\nexport function parsePermissionFlag(value: string): Ruleset {\n\tconst rules: Rule[] = [];\n\tconst entries = value.split(\",\");\n\n\tfor (const entry of entries) {\n\t\tconst trimmed = entry.trim();\n\t\tif (!trimmed) continue;\n\n\t\tconst match = trimmed.match(/^([^:=]+)(?::([^=]+))?=(.+)$/);\n\t\tif (!match) continue;\n\n\t\tconst [, permission, pattern, action] = match;\n\t\trules.push({\n\t\t\tpermission: permission.trim(),\n\t\t\tpattern: pattern ? pattern.trim() : \"*\",\n\t\t\taction: action.trim() as Action,\n\t\t});\n\t}\n\n\treturn rules;\n}\n\nexport function registerPermissionFlag(pi: ExtensionAPI): Ruleset {\n\tpi.registerFlag(\"permission\", {\n\t\tdescription: \"Set permission rules (format: tool=action or tool:pattern=action)\",\n\t\ttype: \"string\",\n\t});\n\n\treturn [];\n}\n\nexport function loadPermissionFlag(pi: ExtensionAPI): Ruleset {\n\tconst flagValue = pi.getFlag(\"permission\") as string | undefined;\n\tif (!flagValue) return [];\n\treturn parsePermissionFlag(flagValue);\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/permission-system/cli.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,mBAAmB,CAAC,KAAa,EAAW;IAC3D,MAAM,KAAK,GAAW,EAAE,CAAC;IACzB,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAEjC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;QAC7B,IAAI,CAAC,OAAO;YAAE,SAAS;QAEvB,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;QAC5D,IAAI,CAAC,KAAK;YAAE,SAAS;QAErB,MAAM,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,CAAC,GAAG,KAAK,CAAC;QAC9C,KAAK,CAAC,IAAI,CAAC;YACV,UAAU,EAAE,UAAU,CAAC,IAAI,EAAE;YAC7B,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG;YACvC,MAAM,EAAE,MAAM,CAAC,IAAI,EAAY;SAC/B,CAAC,CAAC;IACJ,CAAC;IAED,OAAO,KAAK,CAAC;AAAA,CACb;AAED,MAAM,UAAU,sBAAsB,CAAC,EAAgB,EAAW;IACjE,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE;QAC7B,WAAW,EAAE,mEAAmE;QAChF,IAAI,EAAE,QAAQ;KACd,CAAC,CAAC;IAEH,OAAO,EAAE,CAAC;AAAA,CACV;AAED,MAAM,UAAU,kBAAkB,CAAC,EAAgB,EAAW;IAC7D,MAAM,SAAS,GAAG,EAAE,CAAC,OAAO,CAAC,YAAY,CAAuB,CAAC;IACjE,IAAI,CAAC,SAAS;QAAE,OAAO,EAAE,CAAC;IAC1B,OAAO,mBAAmB,CAAC,SAAS,CAAC,CAAC;AAAA,CACtC","sourcesContent":["import type { ExtensionAPI } from \"../../types.js\";\nimport type { Action, Rule, Ruleset } from \"./types.js\";\n\nexport function parsePermissionFlag(value: string): Ruleset {\n\tconst rules: Rule[] = [];\n\tconst entries = value.split(\",\");\n\n\tfor (const entry of entries) {\n\t\tconst trimmed = entry.trim();\n\t\tif (!trimmed) continue;\n\n\t\tconst match = trimmed.match(/^([^:=]+)(?::([^=]+))?=(.+)$/);\n\t\tif (!match) continue;\n\n\t\tconst [, permission, pattern, action] = match;\n\t\trules.push({\n\t\t\tpermission: permission.trim(),\n\t\t\tpattern: pattern ? pattern.trim() : \"*\",\n\t\t\taction: action.trim() as Action,\n\t\t});\n\t}\n\n\treturn rules;\n}\n\nexport function registerPermissionFlag(pi: ExtensionAPI): Ruleset {\n\tpi.registerFlag(\"permission\", {\n\t\tdescription: \"Set permission rules (format: tool=action or tool:pattern=action)\",\n\t\ttype: \"string\",\n\t});\n\n\treturn [];\n}\n\nexport function loadPermissionFlag(pi: ExtensionAPI): Ruleset {\n\tconst flagValue = pi.getFlag(\"permission\") as string | undefined;\n\tif (!flagValue) return [];\n\treturn parsePermissionFlag(flagValue);\n}\n"]}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/permission-system/cli.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,mBAAmB,CAAC,KAAa,EAAW;IAC3D,MAAM,KAAK,GAAW,EAAE,CAAC;IACzB,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAEjC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;QAC7B,IAAI,CAAC,OAAO;YAAE,SAAS;QAEvB,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;QAC5D,IAAI,CAAC,KAAK;YAAE,SAAS;QAErB,MAAM,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,CAAC,GAAG,KAAK,CAAC;QAC9C,KAAK,CAAC,IAAI,CAAC;YACV,UAAU,EAAE,UAAU,CAAC,IAAI,EAAE;YAC7B,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG;YACvC,MAAM,EAAE,MAAM,CAAC,IAAI,EAAY;SAC/B,CAAC,CAAC;IACJ,CAAC;IAED,OAAO,KAAK,CAAC;AAAA,CACb;AAED,MAAM,UAAU,sBAAsB,CAAC,EAAgB,EAAW;IACjE,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE;QAC7B,WAAW,EAAE,mEAAmE;QAChF,IAAI,EAAE,QAAQ;KACd,CAAC,CAAC;IAEH,OAAO,EAAE,CAAC;AAAA,CACV;AAED,MAAM,UAAU,kBAAkB,CAAC,EAAgB,EAAW;IAC7D,MAAM,SAAS,GAAG,EAAE,CAAC,OAAO,CAAC,YAAY,CAAuB,CAAC;IACjE,IAAI,CAAC,SAAS;QAAE,OAAO,EAAE,CAAC;IAC1B,OAAO,mBAAmB,CAAC,SAAS,CAAC,CAAC;AAAA,CACtC","sourcesContent":["import type { ExtensionAPI } from \"../../types.ts\";\nimport type { Action, Rule, Ruleset } from \"./types.ts\";\n\nexport function parsePermissionFlag(value: string): Ruleset {\n\tconst rules: Rule[] = [];\n\tconst entries = value.split(\",\");\n\n\tfor (const entry of entries) {\n\t\tconst trimmed = entry.trim();\n\t\tif (!trimmed) continue;\n\n\t\tconst match = trimmed.match(/^([^:=]+)(?::([^=]+))?=(.+)$/);\n\t\tif (!match) continue;\n\n\t\tconst [, permission, pattern, action] = match;\n\t\trules.push({\n\t\t\tpermission: permission.trim(),\n\t\t\tpattern: pattern ? pattern.trim() : \"*\",\n\t\t\taction: action.trim() as Action,\n\t\t});\n\t}\n\n\treturn rules;\n}\n\nexport function registerPermissionFlag(pi: ExtensionAPI): Ruleset {\n\tpi.registerFlag(\"permission\", {\n\t\tdescription: \"Set permission rules (format: tool=action or tool:pattern=action)\",\n\t\ttype: \"string\",\n\t});\n\n\treturn [];\n}\n\nexport function loadPermissionFlag(pi: ExtensionAPI): Ruleset {\n\tconst flagValue = pi.getFlag(\"permission\") as string | undefined;\n\tif (!flagValue) return [];\n\treturn parsePermissionFlag(flagValue);\n}\n"]}
@@ -1,4 +1,4 @@
1
- import type { PermissionConfig, Ruleset } from "./types.js";
1
+ import type { PermissionConfig, Ruleset } from "./types.ts";
2
2
  export declare const EDIT_TOOLS: string[];
3
3
  export declare function expand(path: string): string;
4
4
  export declare function fromConfig(config: PermissionConfig): Ruleset;
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/permission-system/config.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAQ,OAAO,EAAE,MAAM,YAAY,CAAC;AAGlE,eAAO,MAAM,UAAU,UAAgD,CAAC;AAExE,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAc3C;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAc5D;AAED,wBAAgB,KAAK,CAAC,GAAG,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAErD;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,CAgBvE","sourcesContent":["import os from \"node:os\";\nimport type { PermissionConfig, Rule, Ruleset } from \"./types.js\";\nimport { Wildcard } from \"./wildcard.js\";\n\nexport const EDIT_TOOLS = [\"edit\", \"write\", \"apply_patch\", \"multiedit\"];\n\nexport function expand(path: string): string {\n\tif (path.startsWith(\"~/\")) {\n\t\treturn os.homedir() + path.slice(1);\n\t}\n\tif (path === \"~\") {\n\t\treturn os.homedir();\n\t}\n\tif (path.startsWith(\"$HOME/\")) {\n\t\treturn os.homedir() + path.slice(5);\n\t}\n\tif (path.startsWith(\"$HOME\")) {\n\t\treturn os.homedir() + path.slice(5);\n\t}\n\treturn path;\n}\n\nexport function fromConfig(config: PermissionConfig): Ruleset {\n\tconst rules: Rule[] = [];\n\n\tfor (const [permission, value] of Object.entries(config)) {\n\t\tif (typeof value === \"string\") {\n\t\t\trules.push({ permission, pattern: \"*\", action: value });\n\t\t} else {\n\t\t\tfor (const [pattern, action] of Object.entries(value)) {\n\t\t\t\trules.push({ permission, pattern: expand(pattern), action });\n\t\t\t}\n\t\t}\n\t}\n\n\treturn rules;\n}\n\nexport function merge(...rulesets: Ruleset[]): Ruleset {\n\treturn rulesets.flat();\n}\n\nexport function disabled(tools: string[], ruleset: Ruleset): Set<string> {\n\tconst result = new Set<string>();\n\n\tfor (const tool of tools) {\n\t\tconst permission = EDIT_TOOLS.includes(tool) ? \"edit\" : tool;\n\n\t\tconst rule = ruleset.findLast((rule) => {\n\t\t\treturn Wildcard.match(permission, rule.permission);\n\t\t});\n\n\t\tif (rule && rule.pattern === \"*\" && rule.action === \"deny\") {\n\t\t\tresult.add(tool);\n\t\t}\n\t}\n\n\treturn result;\n}\n"]}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/permission-system/config.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAQ,OAAO,EAAE,MAAM,YAAY,CAAC;AAGlE,eAAO,MAAM,UAAU,UAAgD,CAAC;AAExE,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAc3C;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAc5D;AAED,wBAAgB,KAAK,CAAC,GAAG,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAErD;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,CAgBvE","sourcesContent":["import os from \"node:os\";\nimport type { PermissionConfig, Rule, Ruleset } from \"./types.ts\";\nimport { Wildcard } from \"./wildcard.ts\";\n\nexport const EDIT_TOOLS = [\"edit\", \"write\", \"apply_patch\", \"multiedit\"];\n\nexport function expand(path: string): string {\n\tif (path.startsWith(\"~/\")) {\n\t\treturn os.homedir() + path.slice(1);\n\t}\n\tif (path === \"~\") {\n\t\treturn os.homedir();\n\t}\n\tif (path.startsWith(\"$HOME/\")) {\n\t\treturn os.homedir() + path.slice(5);\n\t}\n\tif (path.startsWith(\"$HOME\")) {\n\t\treturn os.homedir() + path.slice(5);\n\t}\n\treturn path;\n}\n\nexport function fromConfig(config: PermissionConfig): Ruleset {\n\tconst rules: Rule[] = [];\n\n\tfor (const [permission, value] of Object.entries(config)) {\n\t\tif (typeof value === \"string\") {\n\t\t\trules.push({ permission, pattern: \"*\", action: value });\n\t\t} else {\n\t\t\tfor (const [pattern, action] of Object.entries(value)) {\n\t\t\t\trules.push({ permission, pattern: expand(pattern), action });\n\t\t\t}\n\t\t}\n\t}\n\n\treturn rules;\n}\n\nexport function merge(...rulesets: Ruleset[]): Ruleset {\n\treturn rulesets.flat();\n}\n\nexport function disabled(tools: string[], ruleset: Ruleset): Set<string> {\n\tconst result = new Set<string>();\n\n\tfor (const tool of tools) {\n\t\tconst permission = EDIT_TOOLS.includes(tool) ? \"edit\" : tool;\n\n\t\tconst rule = ruleset.findLast((rule) => {\n\t\t\treturn Wildcard.match(permission, rule.permission);\n\t\t});\n\n\t\tif (rule && rule.pattern === \"*\" && rule.action === \"deny\") {\n\t\t\tresult.add(tool);\n\t\t}\n\t}\n\n\treturn result;\n}\n"]}