@eminent337/aery 0.1.57 → 0.1.59

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 (688) hide show
  1. package/CHANGELOG.md +0 -0
  2. package/README.md +0 -0
  3. package/docs/compaction.md +0 -0
  4. package/docs/custom-provider.md +0 -0
  5. package/docs/development.md +0 -0
  6. package/docs/docs.json +133 -0
  7. package/docs/extensions.md +0 -0
  8. package/docs/images/doom-extension.png +0 -0
  9. package/docs/images/exy.png +0 -0
  10. package/docs/images/interactive-mode.png +0 -0
  11. package/docs/images/tree-view.png +0 -0
  12. package/docs/index.md +61 -0
  13. package/docs/json.md +0 -0
  14. package/docs/keybindings.md +0 -0
  15. package/docs/models.md +0 -0
  16. package/docs/packages.md +0 -0
  17. package/docs/prompt-templates.md +0 -0
  18. package/docs/providers.md +1 -1
  19. package/docs/quickstart.md +142 -0
  20. package/docs/rpc.md +0 -0
  21. package/docs/sdk.md +0 -0
  22. package/docs/session.md +0 -0
  23. package/docs/settings.md +0 -0
  24. package/docs/shell-aliases.md +0 -0
  25. package/docs/skills.md +0 -0
  26. package/docs/terminal-setup.md +0 -0
  27. package/docs/termux.md +0 -0
  28. package/docs/themes.md +0 -0
  29. package/docs/tmux.md +0 -0
  30. package/docs/tree.md +0 -0
  31. package/docs/tui.md +0 -0
  32. package/docs/usage.md +275 -0
  33. package/docs/windows.md +0 -0
  34. package/examples/README.md +0 -0
  35. package/examples/extensions/README.md +0 -0
  36. package/examples/extensions/antigravity-image-gen.ts +0 -0
  37. package/examples/extensions/auto-commit-on-exit.ts +0 -0
  38. package/examples/extensions/bash-spawn-hook.ts +0 -0
  39. package/examples/extensions/bookmark.ts +0 -0
  40. package/examples/extensions/built-in-tool-renderer.ts +0 -0
  41. package/examples/extensions/claude-rules.ts +0 -0
  42. package/examples/extensions/commands.ts +0 -0
  43. package/examples/extensions/confirm-destructive.ts +0 -0
  44. package/examples/extensions/custom-compaction.ts +0 -0
  45. package/examples/extensions/custom-footer.ts +0 -0
  46. package/examples/extensions/custom-header.ts +0 -0
  47. package/examples/extensions/custom-provider-anthropic/index.ts +0 -0
  48. package/examples/extensions/custom-provider-anthropic/package-lock.json +0 -0
  49. package/examples/extensions/custom-provider-anthropic/package.json +0 -0
  50. package/examples/extensions/custom-provider-gitlab-duo/index.ts +0 -0
  51. package/examples/extensions/custom-provider-gitlab-duo/package.json +0 -0
  52. package/examples/extensions/custom-provider-gitlab-duo/test.ts +0 -0
  53. package/examples/extensions/custom-provider-qwen-cli/index.ts +0 -0
  54. package/examples/extensions/custom-provider-qwen-cli/package.json +0 -0
  55. package/examples/extensions/dirty-repo-guard.ts +0 -0
  56. package/examples/extensions/doom-overlay/README.md +0 -0
  57. package/examples/extensions/doom-overlay/doom/build/doom.js +0 -0
  58. package/examples/extensions/doom-overlay/doom/doomgeneric_pi.c +0 -0
  59. package/examples/extensions/doom-overlay/doom-component.ts +0 -0
  60. package/examples/extensions/doom-overlay/doom-engine.ts +0 -0
  61. package/examples/extensions/doom-overlay/doom-keys.ts +0 -0
  62. package/examples/extensions/doom-overlay/index.ts +0 -0
  63. package/examples/extensions/doom-overlay/wad-finder.ts +0 -0
  64. package/examples/extensions/dynamic-resources/SKILL.md +0 -0
  65. package/examples/extensions/dynamic-resources/dynamic.json +0 -0
  66. package/examples/extensions/dynamic-resources/dynamic.md +0 -0
  67. package/examples/extensions/dynamic-resources/index.ts +0 -0
  68. package/examples/extensions/dynamic-tools.ts +0 -0
  69. package/examples/extensions/event-bus.ts +0 -0
  70. package/examples/extensions/file-trigger.ts +0 -0
  71. package/examples/extensions/git-checkpoint.ts +0 -0
  72. package/examples/extensions/handoff.ts +0 -0
  73. package/examples/extensions/hello.ts +0 -0
  74. package/examples/extensions/hidden-thinking-label.ts +0 -0
  75. package/examples/extensions/inline-bash.ts +0 -0
  76. package/examples/extensions/input-transform.ts +0 -0
  77. package/examples/extensions/interactive-shell.ts +0 -0
  78. package/examples/extensions/mac-system-theme.ts +0 -0
  79. package/examples/extensions/message-renderer.ts +0 -0
  80. package/examples/extensions/minimal-mode.ts +0 -0
  81. package/examples/extensions/modal-editor.ts +0 -0
  82. package/examples/extensions/model-status.ts +0 -0
  83. package/examples/extensions/notify.ts +0 -0
  84. package/examples/extensions/overlay-qa-tests.ts +0 -0
  85. package/examples/extensions/overlay-test.ts +0 -0
  86. package/examples/extensions/permission-gate.ts +0 -0
  87. package/examples/extensions/pirate.ts +0 -0
  88. package/examples/extensions/plan-mode/README.md +0 -0
  89. package/examples/extensions/plan-mode/index.ts +0 -0
  90. package/examples/extensions/plan-mode/utils.ts +0 -0
  91. package/examples/extensions/preset.ts +0 -0
  92. package/examples/extensions/protected-paths.ts +0 -0
  93. package/examples/extensions/provider-payload.ts +0 -0
  94. package/examples/extensions/qna.ts +0 -0
  95. package/examples/extensions/question.ts +0 -0
  96. package/examples/extensions/questionnaire.ts +0 -0
  97. package/examples/extensions/rainbow-editor.ts +0 -0
  98. package/examples/extensions/reload-runtime.ts +0 -0
  99. package/examples/extensions/rpc-demo.ts +0 -0
  100. package/examples/extensions/sandbox/index.ts +0 -0
  101. package/examples/extensions/sandbox/package-lock.json +0 -0
  102. package/examples/extensions/sandbox/package.json +0 -0
  103. package/examples/extensions/send-user-message.ts +0 -0
  104. package/examples/extensions/session-name.ts +0 -0
  105. package/examples/extensions/shutdown-command.ts +0 -0
  106. package/examples/extensions/snake.ts +0 -0
  107. package/examples/extensions/space-invaders.ts +0 -0
  108. package/examples/extensions/ssh.ts +0 -0
  109. package/examples/extensions/status-line.ts +0 -0
  110. package/examples/extensions/subagent/README.md +0 -0
  111. package/examples/extensions/subagent/agents/planner.md +0 -0
  112. package/examples/extensions/subagent/agents/reviewer.md +0 -0
  113. package/examples/extensions/subagent/agents/scout.md +0 -0
  114. package/examples/extensions/subagent/agents/worker.md +0 -0
  115. package/examples/extensions/subagent/agents.ts +0 -0
  116. package/examples/extensions/subagent/index.ts +0 -0
  117. package/examples/extensions/subagent/prompts/implement-and-review.md +0 -0
  118. package/examples/extensions/subagent/prompts/implement.md +0 -0
  119. package/examples/extensions/subagent/prompts/scout-and-plan.md +0 -0
  120. package/examples/extensions/summarize.ts +0 -0
  121. package/examples/extensions/system-prompt-header.ts +0 -0
  122. package/examples/extensions/tic-tac-toe.ts +0 -0
  123. package/examples/extensions/timed-confirm.ts +0 -0
  124. package/examples/extensions/titlebar-spinner.ts +0 -0
  125. package/examples/extensions/todo.ts +0 -0
  126. package/examples/extensions/tool-override.ts +0 -0
  127. package/examples/extensions/tools.ts +0 -0
  128. package/examples/extensions/trigger-compact.ts +0 -0
  129. package/examples/extensions/truncated-tool.ts +0 -0
  130. package/examples/extensions/widget-placement.ts +0 -0
  131. package/examples/extensions/with-deps/index.ts +0 -0
  132. package/examples/extensions/with-deps/package-lock.json +0 -0
  133. package/examples/extensions/with-deps/package.json +0 -0
  134. package/examples/extensions/working-indicator.ts +0 -0
  135. package/examples/rpc-extension-ui.ts +0 -0
  136. package/examples/sdk/01-minimal.ts +0 -0
  137. package/examples/sdk/02-custom-model.ts +0 -0
  138. package/examples/sdk/03-custom-prompt.ts +0 -0
  139. package/examples/sdk/04-skills.ts +0 -0
  140. package/examples/sdk/05-tools.ts +0 -0
  141. package/examples/sdk/06-extensions.ts +0 -0
  142. package/examples/sdk/07-context-files.ts +0 -0
  143. package/examples/sdk/08-prompt-templates.ts +0 -0
  144. package/examples/sdk/09-api-keys-and-oauth.ts +0 -0
  145. package/examples/sdk/10-settings.ts +0 -0
  146. package/examples/sdk/11-sessions.ts +0 -0
  147. package/examples/sdk/12-full-control.ts +0 -0
  148. package/examples/sdk/13-session-runtime.ts +0 -0
  149. package/examples/sdk/README.md +0 -0
  150. package/package.json +3 -3
  151. package/dist/bun/cli.d.ts +0 -3
  152. package/dist/bun/cli.d.ts.map +0 -1
  153. package/dist/bun/cli.js +0 -7
  154. package/dist/bun/cli.js.map +0 -1
  155. package/dist/bun/register-bedrock.d.ts +0 -2
  156. package/dist/bun/register-bedrock.d.ts.map +0 -1
  157. package/dist/bun/register-bedrock.js +0 -4
  158. package/dist/bun/register-bedrock.js.map +0 -1
  159. package/dist/cli/args.d.ts +0 -52
  160. package/dist/cli/args.d.ts.map +0 -1
  161. package/dist/cli/args.js +0 -321
  162. package/dist/cli/args.js.map +0 -1
  163. package/dist/cli/config-selector.d.ts +0 -14
  164. package/dist/cli/config-selector.d.ts.map +0 -1
  165. package/dist/cli/config-selector.js +0 -31
  166. package/dist/cli/config-selector.js.map +0 -1
  167. package/dist/cli/file-processor.d.ts +0 -15
  168. package/dist/cli/file-processor.d.ts.map +0 -1
  169. package/dist/cli/file-processor.js +0 -83
  170. package/dist/cli/file-processor.js.map +0 -1
  171. package/dist/cli/initial-message.d.ts +0 -18
  172. package/dist/cli/initial-message.d.ts.map +0 -1
  173. package/dist/cli/initial-message.js +0 -22
  174. package/dist/cli/initial-message.js.map +0 -1
  175. package/dist/cli/list-models.d.ts +0 -9
  176. package/dist/cli/list-models.d.ts.map +0 -1
  177. package/dist/cli/list-models.js +0 -97
  178. package/dist/cli/list-models.js.map +0 -1
  179. package/dist/cli/session-picker.d.ts +0 -9
  180. package/dist/cli/session-picker.d.ts.map +0 -1
  181. package/dist/cli/session-picker.js +0 -35
  182. package/dist/cli/session-picker.js.map +0 -1
  183. package/dist/cli.d.ts +0 -3
  184. package/dist/cli.d.ts.map +0 -1
  185. package/dist/cli.js +0 -15
  186. package/dist/cli.js.map +0 -1
  187. package/dist/config.d.ts +0 -77
  188. package/dist/config.d.ts.map +0 -1
  189. package/dist/config.js +0 -221
  190. package/dist/config.js.map +0 -1
  191. package/dist/core/agent-session-runtime.d.ts +0 -99
  192. package/dist/core/agent-session-runtime.d.ts.map +0 -1
  193. package/dist/core/agent-session-runtime.js +0 -261
  194. package/dist/core/agent-session-runtime.js.map +0 -1
  195. package/dist/core/agent-session-services.d.ts +0 -85
  196. package/dist/core/agent-session-services.d.ts.map +0 -1
  197. package/dist/core/agent-session-services.js +0 -116
  198. package/dist/core/agent-session-services.js.map +0 -1
  199. package/dist/core/agent-session.d.ts +0 -590
  200. package/dist/core/agent-session.d.ts.map +0 -1
  201. package/dist/core/agent-session.js +0 -2505
  202. package/dist/core/agent-session.js.map +0 -1
  203. package/dist/core/auth-storage.d.ts +0 -132
  204. package/dist/core/auth-storage.d.ts.map +0 -1
  205. package/dist/core/auth-storage.js +0 -422
  206. package/dist/core/auth-storage.js.map +0 -1
  207. package/dist/core/bash-executor.d.ts +0 -32
  208. package/dist/core/bash-executor.d.ts.map +0 -1
  209. package/dist/core/bash-executor.js +0 -108
  210. package/dist/core/bash-executor.js.map +0 -1
  211. package/dist/core/compaction/branch-summarization.d.ts +0 -88
  212. package/dist/core/compaction/branch-summarization.d.ts.map +0 -1
  213. package/dist/core/compaction/branch-summarization.js +0 -243
  214. package/dist/core/compaction/branch-summarization.js.map +0 -1
  215. package/dist/core/compaction/compaction.d.ts +0 -121
  216. package/dist/core/compaction/compaction.d.ts.map +0 -1
  217. package/dist/core/compaction/compaction.js +0 -615
  218. package/dist/core/compaction/compaction.js.map +0 -1
  219. package/dist/core/compaction/index.d.ts +0 -7
  220. package/dist/core/compaction/index.d.ts.map +0 -1
  221. package/dist/core/compaction/index.js +0 -7
  222. package/dist/core/compaction/index.js.map +0 -1
  223. package/dist/core/compaction/utils.d.ts +0 -38
  224. package/dist/core/compaction/utils.d.ts.map +0 -1
  225. package/dist/core/compaction/utils.js +0 -153
  226. package/dist/core/compaction/utils.js.map +0 -1
  227. package/dist/core/defaults.d.ts +0 -3
  228. package/dist/core/defaults.d.ts.map +0 -1
  229. package/dist/core/defaults.js +0 -2
  230. package/dist/core/defaults.js.map +0 -1
  231. package/dist/core/diagnostics.d.ts +0 -15
  232. package/dist/core/diagnostics.d.ts.map +0 -1
  233. package/dist/core/diagnostics.js +0 -2
  234. package/dist/core/diagnostics.js.map +0 -1
  235. package/dist/core/event-bus.d.ts +0 -9
  236. package/dist/core/event-bus.d.ts.map +0 -1
  237. package/dist/core/event-bus.js +0 -25
  238. package/dist/core/event-bus.js.map +0 -1
  239. package/dist/core/exec.d.ts +0 -29
  240. package/dist/core/exec.d.ts.map +0 -1
  241. package/dist/core/exec.js +0 -75
  242. package/dist/core/exec.js.map +0 -1
  243. package/dist/core/export-html/ansi-to-html.d.ts +0 -22
  244. package/dist/core/export-html/ansi-to-html.d.ts.map +0 -1
  245. package/dist/core/export-html/ansi-to-html.js +0 -249
  246. package/dist/core/export-html/ansi-to-html.js.map +0 -1
  247. package/dist/core/export-html/index.d.ts +0 -37
  248. package/dist/core/export-html/index.d.ts.map +0 -1
  249. package/dist/core/export-html/index.js +0 -224
  250. package/dist/core/export-html/index.js.map +0 -1
  251. package/dist/core/export-html/template.css +0 -1017
  252. package/dist/core/export-html/template.html +0 -55
  253. package/dist/core/export-html/template.js +0 -1729
  254. package/dist/core/export-html/tool-renderer.d.ts +0 -40
  255. package/dist/core/export-html/tool-renderer.d.ts.map +0 -1
  256. package/dist/core/export-html/tool-renderer.js +0 -95
  257. package/dist/core/export-html/tool-renderer.js.map +0 -1
  258. package/dist/core/export-html/vendor/highlight.min.js +0 -1213
  259. package/dist/core/export-html/vendor/marked.min.js +0 -6
  260. package/dist/core/extensions/index.d.ts +0 -12
  261. package/dist/core/extensions/index.d.ts.map +0 -1
  262. package/dist/core/extensions/index.js +0 -9
  263. package/dist/core/extensions/index.js.map +0 -1
  264. package/dist/core/extensions/loader.d.ts +0 -25
  265. package/dist/core/extensions/loader.d.ts.map +0 -1
  266. package/dist/core/extensions/loader.js +0 -436
  267. package/dist/core/extensions/loader.js.map +0 -1
  268. package/dist/core/extensions/runner.d.ts +0 -150
  269. package/dist/core/extensions/runner.d.ts.map +0 -1
  270. package/dist/core/extensions/runner.js +0 -706
  271. package/dist/core/extensions/runner.js.map +0 -1
  272. package/dist/core/extensions/types.d.ts +0 -1111
  273. package/dist/core/extensions/types.d.ts.map +0 -1
  274. package/dist/core/extensions/types.js +0 -45
  275. package/dist/core/extensions/types.js.map +0 -1
  276. package/dist/core/extensions/wrapper.d.ts +0 -20
  277. package/dist/core/extensions/wrapper.d.ts.map +0 -1
  278. package/dist/core/extensions/wrapper.js +0 -22
  279. package/dist/core/extensions/wrapper.js.map +0 -1
  280. package/dist/core/footer-data-provider.d.ts +0 -48
  281. package/dist/core/footer-data-provider.d.ts.map +0 -1
  282. package/dist/core/footer-data-provider.js +0 -314
  283. package/dist/core/footer-data-provider.js.map +0 -1
  284. package/dist/core/index.d.ts +0 -12
  285. package/dist/core/index.d.ts.map +0 -1
  286. package/dist/core/index.js +0 -12
  287. package/dist/core/index.js.map +0 -1
  288. package/dist/core/keybindings.d.ts +0 -353
  289. package/dist/core/keybindings.d.ts.map +0 -1
  290. package/dist/core/keybindings.js +0 -295
  291. package/dist/core/keybindings.js.map +0 -1
  292. package/dist/core/messages.d.ts +0 -77
  293. package/dist/core/messages.d.ts.map +0 -1
  294. package/dist/core/messages.js +0 -123
  295. package/dist/core/messages.js.map +0 -1
  296. package/dist/core/model-registry.d.ts +0 -132
  297. package/dist/core/model-registry.d.ts.map +0 -1
  298. package/dist/core/model-registry.js +0 -635
  299. package/dist/core/model-registry.js.map +0 -1
  300. package/dist/core/model-resolver.d.ts +0 -110
  301. package/dist/core/model-resolver.d.ts.map +0 -1
  302. package/dist/core/model-resolver.js +0 -486
  303. package/dist/core/model-resolver.js.map +0 -1
  304. package/dist/core/output-guard.d.ts +0 -6
  305. package/dist/core/output-guard.d.ts.map +0 -1
  306. package/dist/core/output-guard.js +0 -59
  307. package/dist/core/output-guard.js.map +0 -1
  308. package/dist/core/package-manager.d.ts +0 -194
  309. package/dist/core/package-manager.d.ts.map +0 -1
  310. package/dist/core/package-manager.js +0 -1882
  311. package/dist/core/package-manager.js.map +0 -1
  312. package/dist/core/prompt-templates.d.ts +0 -52
  313. package/dist/core/prompt-templates.d.ts.map +0 -1
  314. package/dist/core/prompt-templates.js +0 -250
  315. package/dist/core/prompt-templates.js.map +0 -1
  316. package/dist/core/resolve-config-value.d.ts +0 -23
  317. package/dist/core/resolve-config-value.d.ts.map +0 -1
  318. package/dist/core/resolve-config-value.js +0 -126
  319. package/dist/core/resolve-config-value.js.map +0 -1
  320. package/dist/core/resource-loader.d.ts +0 -194
  321. package/dist/core/resource-loader.d.ts.map +0 -1
  322. package/dist/core/resource-loader.js +0 -726
  323. package/dist/core/resource-loader.js.map +0 -1
  324. package/dist/core/sdk.d.ts +0 -99
  325. package/dist/core/sdk.d.ts.map +0 -1
  326. package/dist/core/sdk.js +0 -261
  327. package/dist/core/sdk.js.map +0 -1
  328. package/dist/core/session-cwd.d.ts +0 -19
  329. package/dist/core/session-cwd.d.ts.map +0 -1
  330. package/dist/core/session-cwd.js +0 -38
  331. package/dist/core/session-cwd.js.map +0 -1
  332. package/dist/core/session-manager.d.ts +0 -333
  333. package/dist/core/session-manager.d.ts.map +0 -1
  334. package/dist/core/session-manager.js +0 -1109
  335. package/dist/core/session-manager.js.map +0 -1
  336. package/dist/core/settings-manager.d.ts +0 -240
  337. package/dist/core/settings-manager.d.ts.map +0 -1
  338. package/dist/core/settings-manager.js +0 -711
  339. package/dist/core/settings-manager.js.map +0 -1
  340. package/dist/core/skills.d.ts +0 -60
  341. package/dist/core/skills.d.ts.map +0 -1
  342. package/dist/core/skills.js +0 -409
  343. package/dist/core/skills.js.map +0 -1
  344. package/dist/core/slash-commands.d.ts +0 -14
  345. package/dist/core/slash-commands.d.ts.map +0 -1
  346. package/dist/core/slash-commands.js +0 -24
  347. package/dist/core/slash-commands.js.map +0 -1
  348. package/dist/core/source-info.d.ts +0 -18
  349. package/dist/core/source-info.d.ts.map +0 -1
  350. package/dist/core/source-info.js +0 -19
  351. package/dist/core/source-info.js.map +0 -1
  352. package/dist/core/system-prompt.d.ts +0 -28
  353. package/dist/core/system-prompt.d.ts.map +0 -1
  354. package/dist/core/system-prompt.js +0 -120
  355. package/dist/core/system-prompt.js.map +0 -1
  356. package/dist/core/telemetry.d.ts +0 -3
  357. package/dist/core/telemetry.d.ts.map +0 -1
  358. package/dist/core/telemetry.js +0 -9
  359. package/dist/core/telemetry.js.map +0 -1
  360. package/dist/core/timings.d.ts +0 -8
  361. package/dist/core/timings.d.ts.map +0 -1
  362. package/dist/core/timings.js +0 -31
  363. package/dist/core/timings.js.map +0 -1
  364. package/dist/core/tools/bash.d.ts +0 -64
  365. package/dist/core/tools/bash.d.ts.map +0 -1
  366. package/dist/core/tools/bash.js +0 -355
  367. package/dist/core/tools/bash.js.map +0 -1
  368. package/dist/core/tools/edit-diff.d.ts +0 -85
  369. package/dist/core/tools/edit-diff.d.ts.map +0 -1
  370. package/dist/core/tools/edit-diff.js +0 -337
  371. package/dist/core/tools/edit-diff.js.map +0 -1
  372. package/dist/core/tools/edit.d.ts +0 -49
  373. package/dist/core/tools/edit.d.ts.map +0 -1
  374. package/dist/core/tools/edit.js +0 -323
  375. package/dist/core/tools/edit.js.map +0 -1
  376. package/dist/core/tools/file-mutation-queue.d.ts +0 -6
  377. package/dist/core/tools/file-mutation-queue.d.ts.map +0 -1
  378. package/dist/core/tools/file-mutation-queue.js +0 -37
  379. package/dist/core/tools/file-mutation-queue.js.map +0 -1
  380. package/dist/core/tools/find.d.ts +0 -35
  381. package/dist/core/tools/find.d.ts.map +0 -1
  382. package/dist/core/tools/find.js +0 -298
  383. package/dist/core/tools/find.js.map +0 -1
  384. package/dist/core/tools/grep.d.ts +0 -37
  385. package/dist/core/tools/grep.d.ts.map +0 -1
  386. package/dist/core/tools/grep.js +0 -304
  387. package/dist/core/tools/grep.js.map +0 -1
  388. package/dist/core/tools/index.d.ts +0 -40
  389. package/dist/core/tools/index.d.ts.map +0 -1
  390. package/dist/core/tools/index.js +0 -112
  391. package/dist/core/tools/index.js.map +0 -1
  392. package/dist/core/tools/ls.d.ts +0 -37
  393. package/dist/core/tools/ls.d.ts.map +0 -1
  394. package/dist/core/tools/ls.js +0 -169
  395. package/dist/core/tools/ls.js.map +0 -1
  396. package/dist/core/tools/path-utils.d.ts +0 -8
  397. package/dist/core/tools/path-utils.d.ts.map +0 -1
  398. package/dist/core/tools/path-utils.js +0 -81
  399. package/dist/core/tools/path-utils.js.map +0 -1
  400. package/dist/core/tools/read.d.ts +0 -35
  401. package/dist/core/tools/read.d.ts.map +0 -1
  402. package/dist/core/tools/read.js +0 -232
  403. package/dist/core/tools/read.js.map +0 -1
  404. package/dist/core/tools/render-utils.d.ts +0 -21
  405. package/dist/core/tools/render-utils.d.ts.map +0 -1
  406. package/dist/core/tools/render-utils.js +0 -49
  407. package/dist/core/tools/render-utils.js.map +0 -1
  408. package/dist/core/tools/tool-definition-wrapper.d.ts +0 -14
  409. package/dist/core/tools/tool-definition-wrapper.d.ts.map +0 -1
  410. package/dist/core/tools/tool-definition-wrapper.js +0 -34
  411. package/dist/core/tools/tool-definition-wrapper.js.map +0 -1
  412. package/dist/core/tools/truncate.d.ts +0 -70
  413. package/dist/core/tools/truncate.d.ts.map +0 -1
  414. package/dist/core/tools/truncate.js +0 -205
  415. package/dist/core/tools/truncate.js.map +0 -1
  416. package/dist/core/tools/write.d.ts +0 -26
  417. package/dist/core/tools/write.d.ts.map +0 -1
  418. package/dist/core/tools/write.js +0 -213
  419. package/dist/core/tools/write.js.map +0 -1
  420. package/dist/index.d.ts +0 -28
  421. package/dist/index.d.ts.map +0 -1
  422. package/dist/index.js +0 -41
  423. package/dist/index.js.map +0 -1
  424. package/dist/main.d.ts +0 -12
  425. package/dist/main.d.ts.map +0 -1
  426. package/dist/main.js +0 -589
  427. package/dist/main.js.map +0 -1
  428. package/dist/migrations.d.ts +0 -33
  429. package/dist/migrations.d.ts.map +0 -1
  430. package/dist/migrations.js +0 -281
  431. package/dist/migrations.js.map +0 -1
  432. package/dist/modes/index.d.ts +0 -9
  433. package/dist/modes/index.d.ts.map +0 -1
  434. package/dist/modes/index.js +0 -8
  435. package/dist/modes/index.js.map +0 -1
  436. package/dist/modes/interactive/assets/clankolas.png +0 -0
  437. package/dist/modes/interactive/components/aery-splash.d.ts +0 -18
  438. package/dist/modes/interactive/components/aery-splash.d.ts.map +0 -1
  439. package/dist/modes/interactive/components/aery-splash.js +0 -60
  440. package/dist/modes/interactive/components/aery-splash.js.map +0 -1
  441. package/dist/modes/interactive/components/armin.d.ts +0 -34
  442. package/dist/modes/interactive/components/armin.d.ts.map +0 -1
  443. package/dist/modes/interactive/components/armin.js +0 -333
  444. package/dist/modes/interactive/components/armin.js.map +0 -1
  445. package/dist/modes/interactive/components/assistant-message.d.ts +0 -20
  446. package/dist/modes/interactive/components/assistant-message.d.ts.map +0 -1
  447. package/dist/modes/interactive/components/assistant-message.js +0 -121
  448. package/dist/modes/interactive/components/assistant-message.js.map +0 -1
  449. package/dist/modes/interactive/components/bash-execution.d.ts +0 -34
  450. package/dist/modes/interactive/components/bash-execution.d.ts.map +0 -1
  451. package/dist/modes/interactive/components/bash-execution.js +0 -175
  452. package/dist/modes/interactive/components/bash-execution.js.map +0 -1
  453. package/dist/modes/interactive/components/bordered-loader.d.ts +0 -16
  454. package/dist/modes/interactive/components/bordered-loader.d.ts.map +0 -1
  455. package/dist/modes/interactive/components/bordered-loader.js +0 -54
  456. package/dist/modes/interactive/components/bordered-loader.js.map +0 -1
  457. package/dist/modes/interactive/components/branch-summary-message.d.ts +0 -16
  458. package/dist/modes/interactive/components/branch-summary-message.d.ts.map +0 -1
  459. package/dist/modes/interactive/components/branch-summary-message.js +0 -44
  460. package/dist/modes/interactive/components/branch-summary-message.js.map +0 -1
  461. package/dist/modes/interactive/components/compaction-summary-message.d.ts +0 -16
  462. package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +0 -1
  463. package/dist/modes/interactive/components/compaction-summary-message.js +0 -45
  464. package/dist/modes/interactive/components/compaction-summary-message.js.map +0 -1
  465. package/dist/modes/interactive/components/config-selector.d.ts +0 -71
  466. package/dist/modes/interactive/components/config-selector.d.ts.map +0 -1
  467. package/dist/modes/interactive/components/config-selector.js +0 -479
  468. package/dist/modes/interactive/components/config-selector.js.map +0 -1
  469. package/dist/modes/interactive/components/countdown-timer.d.ts +0 -14
  470. package/dist/modes/interactive/components/countdown-timer.d.ts.map +0 -1
  471. package/dist/modes/interactive/components/countdown-timer.js +0 -33
  472. package/dist/modes/interactive/components/countdown-timer.js.map +0 -1
  473. package/dist/modes/interactive/components/custom-editor.d.ts +0 -21
  474. package/dist/modes/interactive/components/custom-editor.d.ts.map +0 -1
  475. package/dist/modes/interactive/components/custom-editor.js +0 -70
  476. package/dist/modes/interactive/components/custom-editor.js.map +0 -1
  477. package/dist/modes/interactive/components/custom-message.d.ts +0 -20
  478. package/dist/modes/interactive/components/custom-message.d.ts.map +0 -1
  479. package/dist/modes/interactive/components/custom-message.js +0 -79
  480. package/dist/modes/interactive/components/custom-message.js.map +0 -1
  481. package/dist/modes/interactive/components/daxnuts.d.ts +0 -23
  482. package/dist/modes/interactive/components/daxnuts.d.ts.map +0 -1
  483. package/dist/modes/interactive/components/daxnuts.js +0 -140
  484. package/dist/modes/interactive/components/daxnuts.js.map +0 -1
  485. package/dist/modes/interactive/components/diff.d.ts +0 -12
  486. package/dist/modes/interactive/components/diff.d.ts.map +0 -1
  487. package/dist/modes/interactive/components/diff.js +0 -133
  488. package/dist/modes/interactive/components/diff.js.map +0 -1
  489. package/dist/modes/interactive/components/dynamic-border.d.ts +0 -15
  490. package/dist/modes/interactive/components/dynamic-border.d.ts.map +0 -1
  491. package/dist/modes/interactive/components/dynamic-border.js +0 -21
  492. package/dist/modes/interactive/components/dynamic-border.js.map +0 -1
  493. package/dist/modes/interactive/components/earendil-announcement.d.ts +0 -5
  494. package/dist/modes/interactive/components/earendil-announcement.d.ts.map +0 -1
  495. package/dist/modes/interactive/components/earendil-announcement.js +0 -40
  496. package/dist/modes/interactive/components/earendil-announcement.js.map +0 -1
  497. package/dist/modes/interactive/components/extension-editor.d.ts +0 -20
  498. package/dist/modes/interactive/components/extension-editor.d.ts.map +0 -1
  499. package/dist/modes/interactive/components/extension-editor.js +0 -111
  500. package/dist/modes/interactive/components/extension-editor.js.map +0 -1
  501. package/dist/modes/interactive/components/extension-input.d.ts +0 -23
  502. package/dist/modes/interactive/components/extension-input.d.ts.map +0 -1
  503. package/dist/modes/interactive/components/extension-input.js +0 -61
  504. package/dist/modes/interactive/components/extension-input.js.map +0 -1
  505. package/dist/modes/interactive/components/extension-selector.d.ts +0 -24
  506. package/dist/modes/interactive/components/extension-selector.d.ts.map +0 -1
  507. package/dist/modes/interactive/components/extension-selector.js +0 -78
  508. package/dist/modes/interactive/components/extension-selector.js.map +0 -1
  509. package/dist/modes/interactive/components/footer.d.ts +0 -27
  510. package/dist/modes/interactive/components/footer.d.ts.map +0 -1
  511. package/dist/modes/interactive/components/footer.js +0 -201
  512. package/dist/modes/interactive/components/footer.js.map +0 -1
  513. package/dist/modes/interactive/components/index.d.ts +0 -32
  514. package/dist/modes/interactive/components/index.d.ts.map +0 -1
  515. package/dist/modes/interactive/components/index.js +0 -33
  516. package/dist/modes/interactive/components/index.js.map +0 -1
  517. package/dist/modes/interactive/components/keybinding-hints.d.ts +0 -8
  518. package/dist/modes/interactive/components/keybinding-hints.d.ts.map +0 -1
  519. package/dist/modes/interactive/components/keybinding-hints.js +0 -22
  520. package/dist/modes/interactive/components/keybinding-hints.js.map +0 -1
  521. package/dist/modes/interactive/components/login-dialog.d.ts +0 -42
  522. package/dist/modes/interactive/components/login-dialog.d.ts.map +0 -1
  523. package/dist/modes/interactive/components/login-dialog.js +0 -145
  524. package/dist/modes/interactive/components/login-dialog.js.map +0 -1
  525. package/dist/modes/interactive/components/model-selector.d.ts +0 -47
  526. package/dist/modes/interactive/components/model-selector.d.ts.map +0 -1
  527. package/dist/modes/interactive/components/model-selector.js +0 -278
  528. package/dist/modes/interactive/components/model-selector.js.map +0 -1
  529. package/dist/modes/interactive/components/oauth-selector.d.ts +0 -19
  530. package/dist/modes/interactive/components/oauth-selector.d.ts.map +0 -1
  531. package/dist/modes/interactive/components/oauth-selector.js +0 -97
  532. package/dist/modes/interactive/components/oauth-selector.js.map +0 -1
  533. package/dist/modes/interactive/components/scoped-models-selector.d.ts +0 -42
  534. package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +0 -1
  535. package/dist/modes/interactive/components/scoped-models-selector.js +0 -290
  536. package/dist/modes/interactive/components/scoped-models-selector.js.map +0 -1
  537. package/dist/modes/interactive/components/session-selector-search.d.ts +0 -23
  538. package/dist/modes/interactive/components/session-selector-search.d.ts.map +0 -1
  539. package/dist/modes/interactive/components/session-selector-search.js +0 -155
  540. package/dist/modes/interactive/components/session-selector-search.js.map +0 -1
  541. package/dist/modes/interactive/components/session-selector.d.ts +0 -96
  542. package/dist/modes/interactive/components/session-selector.d.ts.map +0 -1
  543. package/dist/modes/interactive/components/session-selector.js +0 -865
  544. package/dist/modes/interactive/components/session-selector.js.map +0 -1
  545. package/dist/modes/interactive/components/settings-selector.d.ts +0 -60
  546. package/dist/modes/interactive/components/settings-selector.d.ts.map +0 -1
  547. package/dist/modes/interactive/components/settings-selector.js +0 -311
  548. package/dist/modes/interactive/components/settings-selector.js.map +0 -1
  549. package/dist/modes/interactive/components/show-images-selector.d.ts +0 -10
  550. package/dist/modes/interactive/components/show-images-selector.d.ts.map +0 -1
  551. package/dist/modes/interactive/components/show-images-selector.js +0 -39
  552. package/dist/modes/interactive/components/show-images-selector.js.map +0 -1
  553. package/dist/modes/interactive/components/skill-invocation-message.d.ts +0 -17
  554. package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +0 -1
  555. package/dist/modes/interactive/components/skill-invocation-message.js +0 -47
  556. package/dist/modes/interactive/components/skill-invocation-message.js.map +0 -1
  557. package/dist/modes/interactive/components/theme-selector.d.ts +0 -11
  558. package/dist/modes/interactive/components/theme-selector.d.ts.map +0 -1
  559. package/dist/modes/interactive/components/theme-selector.js +0 -50
  560. package/dist/modes/interactive/components/theme-selector.js.map +0 -1
  561. package/dist/modes/interactive/components/thinking-selector.d.ts +0 -11
  562. package/dist/modes/interactive/components/thinking-selector.d.ts.map +0 -1
  563. package/dist/modes/interactive/components/thinking-selector.js +0 -51
  564. package/dist/modes/interactive/components/thinking-selector.js.map +0 -1
  565. package/dist/modes/interactive/components/tool-execution.d.ts +0 -60
  566. package/dist/modes/interactive/components/tool-execution.d.ts.map +0 -1
  567. package/dist/modes/interactive/components/tool-execution.js +0 -289
  568. package/dist/modes/interactive/components/tool-execution.js.map +0 -1
  569. package/dist/modes/interactive/components/tree-selector.d.ts +0 -89
  570. package/dist/modes/interactive/components/tree-selector.d.ts.map +0 -1
  571. package/dist/modes/interactive/components/tree-selector.js +0 -1092
  572. package/dist/modes/interactive/components/tree-selector.js.map +0 -1
  573. package/dist/modes/interactive/components/user-message-selector.d.ts +0 -30
  574. package/dist/modes/interactive/components/user-message-selector.d.ts.map +0 -1
  575. package/dist/modes/interactive/components/user-message-selector.js +0 -114
  576. package/dist/modes/interactive/components/user-message-selector.js.map +0 -1
  577. package/dist/modes/interactive/components/user-message.d.ts +0 -10
  578. package/dist/modes/interactive/components/user-message.d.ts.map +0 -1
  579. package/dist/modes/interactive/components/user-message.js +0 -29
  580. package/dist/modes/interactive/components/user-message.js.map +0 -1
  581. package/dist/modes/interactive/components/visual-truncate.d.ts +0 -24
  582. package/dist/modes/interactive/components/visual-truncate.d.ts.map +0 -1
  583. package/dist/modes/interactive/components/visual-truncate.js +0 -33
  584. package/dist/modes/interactive/components/visual-truncate.js.map +0 -1
  585. package/dist/modes/interactive/interactive-mode.d.ts +0 -344
  586. package/dist/modes/interactive/interactive-mode.d.ts.map +0 -1
  587. package/dist/modes/interactive/interactive-mode.js +0 -4352
  588. package/dist/modes/interactive/interactive-mode.js.map +0 -1
  589. package/dist/modes/interactive/theme/aery.json +0 -84
  590. package/dist/modes/interactive/theme/catppuccin-mocha.json +0 -81
  591. package/dist/modes/interactive/theme/dark.json +0 -85
  592. package/dist/modes/interactive/theme/dracula.json +0 -81
  593. package/dist/modes/interactive/theme/light.json +0 -84
  594. package/dist/modes/interactive/theme/nord.json +0 -81
  595. package/dist/modes/interactive/theme/theme-schema.json +0 -335
  596. package/dist/modes/interactive/theme/theme.d.ts +0 -81
  597. package/dist/modes/interactive/theme/theme.d.ts.map +0 -1
  598. package/dist/modes/interactive/theme/theme.js +0 -983
  599. package/dist/modes/interactive/theme/theme.js.map +0 -1
  600. package/dist/modes/interactive/theme/tokyo-night.json +0 -81
  601. package/dist/modes/print-mode.d.ts +0 -28
  602. package/dist/modes/print-mode.d.ts.map +0 -1
  603. package/dist/modes/print-mode.js +0 -141
  604. package/dist/modes/print-mode.js.map +0 -1
  605. package/dist/modes/rpc/jsonl.d.ts +0 -17
  606. package/dist/modes/rpc/jsonl.d.ts.map +0 -1
  607. package/dist/modes/rpc/jsonl.js +0 -49
  608. package/dist/modes/rpc/jsonl.js.map +0 -1
  609. package/dist/modes/rpc/rpc-client.d.ts +0 -224
  610. package/dist/modes/rpc/rpc-client.d.ts.map +0 -1
  611. package/dist/modes/rpc/rpc-client.js +0 -410
  612. package/dist/modes/rpc/rpc-client.js.map +0 -1
  613. package/dist/modes/rpc/rpc-mode.d.ts +0 -20
  614. package/dist/modes/rpc/rpc-mode.d.ts.map +0 -1
  615. package/dist/modes/rpc/rpc-mode.js +0 -601
  616. package/dist/modes/rpc/rpc-mode.js.map +0 -1
  617. package/dist/modes/rpc/rpc-types.d.ts +0 -419
  618. package/dist/modes/rpc/rpc-types.d.ts.map +0 -1
  619. package/dist/modes/rpc/rpc-types.js +0 -8
  620. package/dist/modes/rpc/rpc-types.js.map +0 -1
  621. package/dist/package-manager-cli.d.ts +0 -4
  622. package/dist/package-manager-cli.d.ts.map +0 -1
  623. package/dist/package-manager-cli.js +0 -234
  624. package/dist/package-manager-cli.js.map +0 -1
  625. package/dist/utils/changelog.d.ts +0 -21
  626. package/dist/utils/changelog.d.ts.map +0 -1
  627. package/dist/utils/changelog.js +0 -87
  628. package/dist/utils/changelog.js.map +0 -1
  629. package/dist/utils/child-process.d.ts +0 -11
  630. package/dist/utils/child-process.d.ts.map +0 -1
  631. package/dist/utils/child-process.js +0 -78
  632. package/dist/utils/child-process.js.map +0 -1
  633. package/dist/utils/clipboard-image.d.ts +0 -11
  634. package/dist/utils/clipboard-image.d.ts.map +0 -1
  635. package/dist/utils/clipboard-image.js +0 -245
  636. package/dist/utils/clipboard-image.js.map +0 -1
  637. package/dist/utils/clipboard-native.d.ts +0 -8
  638. package/dist/utils/clipboard-native.d.ts.map +0 -1
  639. package/dist/utils/clipboard-native.js +0 -14
  640. package/dist/utils/clipboard-native.js.map +0 -1
  641. package/dist/utils/clipboard.d.ts +0 -2
  642. package/dist/utils/clipboard.d.ts.map +0 -1
  643. package/dist/utils/clipboard.js +0 -78
  644. package/dist/utils/clipboard.js.map +0 -1
  645. package/dist/utils/exif-orientation.d.ts +0 -5
  646. package/dist/utils/exif-orientation.d.ts.map +0 -1
  647. package/dist/utils/exif-orientation.js +0 -158
  648. package/dist/utils/exif-orientation.js.map +0 -1
  649. package/dist/utils/frontmatter.d.ts +0 -8
  650. package/dist/utils/frontmatter.d.ts.map +0 -1
  651. package/dist/utils/frontmatter.js +0 -26
  652. package/dist/utils/frontmatter.js.map +0 -1
  653. package/dist/utils/git.d.ts +0 -26
  654. package/dist/utils/git.d.ts.map +0 -1
  655. package/dist/utils/git.js +0 -163
  656. package/dist/utils/git.js.map +0 -1
  657. package/dist/utils/image-convert.d.ts +0 -9
  658. package/dist/utils/image-convert.d.ts.map +0 -1
  659. package/dist/utils/image-convert.js +0 -39
  660. package/dist/utils/image-convert.js.map +0 -1
  661. package/dist/utils/image-resize.d.ts +0 -36
  662. package/dist/utils/image-resize.d.ts.map +0 -1
  663. package/dist/utils/image-resize.js +0 -137
  664. package/dist/utils/image-resize.js.map +0 -1
  665. package/dist/utils/mime.d.ts +0 -2
  666. package/dist/utils/mime.d.ts.map +0 -1
  667. package/dist/utils/mime.js +0 -26
  668. package/dist/utils/mime.js.map +0 -1
  669. package/dist/utils/paths.d.ts +0 -7
  670. package/dist/utils/paths.d.ts.map +0 -1
  671. package/dist/utils/paths.js +0 -19
  672. package/dist/utils/paths.js.map +0 -1
  673. package/dist/utils/photon.d.ts +0 -21
  674. package/dist/utils/photon.d.ts.map +0 -1
  675. package/dist/utils/photon.js +0 -121
  676. package/dist/utils/photon.js.map +0 -1
  677. package/dist/utils/shell.d.ts +0 -29
  678. package/dist/utils/shell.d.ts.map +0 -1
  679. package/dist/utils/shell.js +0 -203
  680. package/dist/utils/shell.js.map +0 -1
  681. package/dist/utils/sleep.d.ts +0 -5
  682. package/dist/utils/sleep.d.ts.map +0 -1
  683. package/dist/utils/sleep.js +0 -17
  684. package/dist/utils/sleep.js.map +0 -1
  685. package/dist/utils/tools-manager.d.ts +0 -3
  686. package/dist/utils/tools-manager.d.ts.map +0 -1
  687. package/dist/utils/tools-manager.js +0 -252
  688. package/dist/utils/tools-manager.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"config-selector.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/components/config-selector.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * TUI component for managing package resources (enable/disable)\n */\n\nimport { basename, dirname, join, relative } from \"node:path\";\nimport {\n\ttype Component,\n\tContainer,\n\ttype Focusable,\n\tgetKeybindings,\n\tInput,\n\tmatchesKey,\n\tSpacer,\n\ttruncateToWidth,\n\tvisibleWidth,\n} from \"@eminent337/aery-tui\";\nimport { CONFIG_DIR_NAME } from \"../../../config.js\";\nimport type { PathMetadata, ResolvedPaths, ResolvedResource } from \"../../../core/package-manager.js\";\nimport type { PackageSource, SettingsManager } from \"../../../core/settings-manager.js\";\nimport { theme } from \"../theme/theme.js\";\nimport { DynamicBorder } from \"./dynamic-border.js\";\nimport { rawKeyHint } from \"./keybinding-hints.js\";\n\ntype ResourceType = \"extensions\" | \"skills\" | \"prompts\" | \"themes\";\n\nconst RESOURCE_TYPE_LABELS: Record<ResourceType, string> = {\n\textensions: \"Extensions\",\n\tskills: \"Skills\",\n\tprompts: \"Prompts\",\n\tthemes: \"Themes\",\n};\n\ninterface ResourceItem {\n\tpath: string;\n\tenabled: boolean;\n\tmetadata: PathMetadata;\n\tresourceType: ResourceType;\n\tdisplayName: string;\n\tgroupKey: string;\n\tsubgroupKey: string;\n}\n\ninterface ResourceSubgroup {\n\ttype: ResourceType;\n\tlabel: string;\n\titems: ResourceItem[];\n}\n\ninterface ResourceGroup {\n\tkey: string;\n\tlabel: string;\n\tscope: \"user\" | \"project\" | \"temporary\";\n\torigin: \"package\" | \"top-level\";\n\tsource: string;\n\tsubgroups: ResourceSubgroup[];\n}\n\nfunction getGroupLabel(metadata: PathMetadata): string {\n\tif (metadata.origin === \"package\") {\n\t\treturn `${metadata.source} (${metadata.scope})`;\n\t}\n\t// Top-level resources\n\tif (metadata.source === \"auto\") {\n\t\treturn metadata.scope === \"user\" ? \"User (~/.aery/agent/)\" : \"Project (.aery/)\";\n\t}\n\treturn metadata.scope === \"user\" ? \"User settings\" : \"Project settings\";\n}\n\nfunction buildGroups(resolved: ResolvedPaths): ResourceGroup[] {\n\tconst groupMap = new Map<string, ResourceGroup>();\n\n\tconst addToGroup = (resources: ResolvedResource[], resourceType: ResourceType) => {\n\t\tfor (const res of resources) {\n\t\t\tconst { path, enabled, metadata } = res;\n\t\t\tconst groupKey = `${metadata.origin}:${metadata.scope}:${metadata.source}`;\n\n\t\t\tif (!groupMap.has(groupKey)) {\n\t\t\t\tgroupMap.set(groupKey, {\n\t\t\t\t\tkey: groupKey,\n\t\t\t\t\tlabel: getGroupLabel(metadata),\n\t\t\t\t\tscope: metadata.scope,\n\t\t\t\t\torigin: metadata.origin,\n\t\t\t\t\tsource: metadata.source,\n\t\t\t\t\tsubgroups: [],\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst group = groupMap.get(groupKey)!;\n\t\t\tconst subgroupKey = `${groupKey}:${resourceType}`;\n\n\t\t\tlet subgroup = group.subgroups.find((sg) => sg.type === resourceType);\n\t\t\tif (!subgroup) {\n\t\t\t\tsubgroup = {\n\t\t\t\t\ttype: resourceType,\n\t\t\t\t\tlabel: RESOURCE_TYPE_LABELS[resourceType],\n\t\t\t\t\titems: [],\n\t\t\t\t};\n\t\t\t\tgroup.subgroups.push(subgroup);\n\t\t\t}\n\n\t\t\tconst fileName = basename(path);\n\t\t\tconst parentFolder = basename(dirname(path));\n\t\t\tlet displayName: string;\n\t\t\tif (resourceType === \"extensions\" && parentFolder !== \"extensions\") {\n\t\t\t\tdisplayName = `${parentFolder}/${fileName}`;\n\t\t\t} else if (resourceType === \"skills\" && fileName === \"SKILL.md\") {\n\t\t\t\tdisplayName = parentFolder;\n\t\t\t} else {\n\t\t\t\tdisplayName = fileName;\n\t\t\t}\n\t\t\tsubgroup.items.push({\n\t\t\t\tpath,\n\t\t\t\tenabled,\n\t\t\t\tmetadata,\n\t\t\t\tresourceType,\n\t\t\t\tdisplayName,\n\t\t\t\tgroupKey,\n\t\t\t\tsubgroupKey,\n\t\t\t});\n\t\t}\n\t};\n\n\taddToGroup(resolved.extensions, \"extensions\");\n\taddToGroup(resolved.skills, \"skills\");\n\taddToGroup(resolved.prompts, \"prompts\");\n\taddToGroup(resolved.themes, \"themes\");\n\n\t// Sort groups: packages first, then top-level; user before project\n\tconst groups = Array.from(groupMap.values());\n\tgroups.sort((a, b) => {\n\t\tif (a.origin !== b.origin) {\n\t\t\treturn a.origin === \"package\" ? -1 : 1;\n\t\t}\n\t\tif (a.scope !== b.scope) {\n\t\t\treturn a.scope === \"user\" ? -1 : 1;\n\t\t}\n\t\treturn a.source.localeCompare(b.source);\n\t});\n\n\t// Sort subgroups within each group by type order, and items by name\n\tconst typeOrder: Record<ResourceType, number> = { extensions: 0, skills: 1, prompts: 2, themes: 3 };\n\tfor (const group of groups) {\n\t\tgroup.subgroups.sort((a, b) => typeOrder[a.type] - typeOrder[b.type]);\n\t\tfor (const subgroup of group.subgroups) {\n\t\t\tsubgroup.items.sort((a, b) => a.displayName.localeCompare(b.displayName));\n\t\t}\n\t}\n\n\treturn groups;\n}\n\ntype FlatEntry =\n\t| { type: \"group\"; group: ResourceGroup }\n\t| { type: \"subgroup\"; subgroup: ResourceSubgroup; group: ResourceGroup }\n\t| { type: \"item\"; item: ResourceItem };\n\nclass ConfigSelectorHeader implements Component {\n\tinvalidate(): void {}\n\n\trender(width: number): string[] {\n\t\tconst title = theme.bold(\"Resource Configuration\");\n\t\tconst sep = theme.fg(\"muted\", \" · \");\n\t\tconst hint = rawKeyHint(\"space\", \"toggle\") + sep + rawKeyHint(\"esc\", \"close\");\n\t\tconst hintWidth = visibleWidth(hint);\n\t\tconst titleWidth = visibleWidth(title);\n\t\tconst spacing = Math.max(1, width - titleWidth - hintWidth);\n\n\t\treturn [\n\t\t\ttruncateToWidth(`${title}${\" \".repeat(spacing)}${hint}`, width, \"\"),\n\t\t\ttheme.fg(\"muted\", \"Type to filter resources\"),\n\t\t];\n\t}\n}\n\nclass ResourceList implements Component, Focusable {\n\tprivate groups: ResourceGroup[];\n\tprivate flatItems: FlatEntry[] = [];\n\tprivate filteredItems: FlatEntry[] = [];\n\tprivate selectedIndex = 0;\n\tprivate searchInput: Input;\n\tprivate maxVisible = 15;\n\tprivate settingsManager: SettingsManager;\n\tprivate cwd: string;\n\tprivate agentDir: string;\n\n\tpublic onCancel?: () => void;\n\tpublic onExit?: () => void;\n\tpublic onToggle?: (item: ResourceItem, newEnabled: boolean) => void;\n\n\tprivate _focused = false;\n\tget focused(): boolean {\n\t\treturn this._focused;\n\t}\n\tset focused(value: boolean) {\n\t\tthis._focused = value;\n\t\tthis.searchInput.focused = value;\n\t}\n\n\tconstructor(groups: ResourceGroup[], settingsManager: SettingsManager, cwd: string, agentDir: string) {\n\t\tthis.groups = groups;\n\t\tthis.settingsManager = settingsManager;\n\t\tthis.cwd = cwd;\n\t\tthis.agentDir = agentDir;\n\t\tthis.searchInput = new Input();\n\t\tthis.buildFlatList();\n\t\tthis.filteredItems = [...this.flatItems];\n\t}\n\n\tprivate buildFlatList(): void {\n\t\tthis.flatItems = [];\n\t\tfor (const group of this.groups) {\n\t\t\tthis.flatItems.push({ type: \"group\", group });\n\t\t\tfor (const subgroup of group.subgroups) {\n\t\t\t\tthis.flatItems.push({ type: \"subgroup\", subgroup, group });\n\t\t\t\tfor (const item of subgroup.items) {\n\t\t\t\t\tthis.flatItems.push({ type: \"item\", item });\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// Start selection on first item (not header)\n\t\tthis.selectedIndex = this.flatItems.findIndex((e) => e.type === \"item\");\n\t\tif (this.selectedIndex < 0) this.selectedIndex = 0;\n\t}\n\n\tprivate findNextItem(fromIndex: number, direction: 1 | -1): number {\n\t\tlet idx = fromIndex + direction;\n\t\twhile (idx >= 0 && idx < this.filteredItems.length) {\n\t\t\tif (this.filteredItems[idx].type === \"item\") {\n\t\t\t\treturn idx;\n\t\t\t}\n\t\t\tidx += direction;\n\t\t}\n\t\treturn fromIndex; // Stay at current if no item found\n\t}\n\n\tprivate filterItems(query: string): void {\n\t\tif (!query.trim()) {\n\t\t\tthis.filteredItems = [...this.flatItems];\n\t\t\tthis.selectFirstItem();\n\t\t\treturn;\n\t\t}\n\n\t\tconst lowerQuery = query.toLowerCase();\n\t\tconst matchingItems = new Set<ResourceItem>();\n\t\tconst matchingSubgroups = new Set<ResourceSubgroup>();\n\t\tconst matchingGroups = new Set<ResourceGroup>();\n\n\t\tfor (const entry of this.flatItems) {\n\t\t\tif (entry.type === \"item\") {\n\t\t\t\tconst item = entry.item;\n\t\t\t\tif (\n\t\t\t\t\titem.displayName.toLowerCase().includes(lowerQuery) ||\n\t\t\t\t\titem.resourceType.toLowerCase().includes(lowerQuery) ||\n\t\t\t\t\titem.path.toLowerCase().includes(lowerQuery)\n\t\t\t\t) {\n\t\t\t\t\tmatchingItems.add(item);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Find which subgroups and groups contain matching items\n\t\tfor (const group of this.groups) {\n\t\t\tfor (const subgroup of group.subgroups) {\n\t\t\t\tfor (const item of subgroup.items) {\n\t\t\t\t\tif (matchingItems.has(item)) {\n\t\t\t\t\t\tmatchingSubgroups.add(subgroup);\n\t\t\t\t\t\tmatchingGroups.add(group);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.filteredItems = [];\n\t\tfor (const entry of this.flatItems) {\n\t\t\tif (entry.type === \"group\" && matchingGroups.has(entry.group)) {\n\t\t\t\tthis.filteredItems.push(entry);\n\t\t\t} else if (entry.type === \"subgroup\" && matchingSubgroups.has(entry.subgroup)) {\n\t\t\t\tthis.filteredItems.push(entry);\n\t\t\t} else if (entry.type === \"item\" && matchingItems.has(entry.item)) {\n\t\t\t\tthis.filteredItems.push(entry);\n\t\t\t}\n\t\t}\n\n\t\tthis.selectFirstItem();\n\t}\n\n\tprivate selectFirstItem(): void {\n\t\tconst firstItemIndex = this.filteredItems.findIndex((e) => e.type === \"item\");\n\t\tthis.selectedIndex = firstItemIndex >= 0 ? firstItemIndex : 0;\n\t}\n\n\tupdateItem(item: ResourceItem, enabled: boolean): void {\n\t\titem.enabled = enabled;\n\t\t// Update in groups too\n\t\tfor (const group of this.groups) {\n\t\t\tfor (const subgroup of group.subgroups) {\n\t\t\t\tconst found = subgroup.items.find((i) => i.path === item.path && i.resourceType === item.resourceType);\n\t\t\t\tif (found) {\n\t\t\t\t\tfound.enabled = enabled;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tinvalidate(): void {}\n\n\trender(width: number): string[] {\n\t\tconst lines: string[] = [];\n\n\t\t// Search input\n\t\tlines.push(...this.searchInput.render(width));\n\t\tlines.push(\"\");\n\n\t\tif (this.filteredItems.length === 0) {\n\t\t\tlines.push(theme.fg(\"muted\", \" No resources found\"));\n\t\t\treturn lines;\n\t\t}\n\n\t\t// Calculate visible range\n\t\tconst startIndex = Math.max(\n\t\t\t0,\n\t\t\tMath.min(this.selectedIndex - Math.floor(this.maxVisible / 2), this.filteredItems.length - this.maxVisible),\n\t\t);\n\t\tconst endIndex = Math.min(startIndex + this.maxVisible, this.filteredItems.length);\n\n\t\tfor (let i = startIndex; i < endIndex; i++) {\n\t\t\tconst entry = this.filteredItems[i];\n\t\t\tconst isSelected = i === this.selectedIndex;\n\n\t\t\tif (entry.type === \"group\") {\n\t\t\t\t// Main group header (no cursor)\n\t\t\t\tconst groupLine = theme.fg(\"accent\", theme.bold(entry.group.label));\n\t\t\t\tlines.push(truncateToWidth(` ${groupLine}`, width, \"\"));\n\t\t\t} else if (entry.type === \"subgroup\") {\n\t\t\t\t// Subgroup header (indented, no cursor)\n\t\t\t\tconst subgroupLine = theme.fg(\"muted\", entry.subgroup.label);\n\t\t\t\tlines.push(truncateToWidth(` ${subgroupLine}`, width, \"\"));\n\t\t\t} else {\n\t\t\t\t// Resource item (cursor only on items)\n\t\t\t\tconst item = entry.item;\n\t\t\t\tconst cursor = isSelected ? \"> \" : \" \";\n\t\t\t\tconst checkbox = item.enabled ? theme.fg(\"success\", \"[x]\") : theme.fg(\"dim\", \"[ ]\");\n\t\t\t\tconst name = isSelected ? theme.bold(item.displayName) : item.displayName;\n\t\t\t\tlines.push(truncateToWidth(`${cursor} ${checkbox} ${name}`, width, \"...\"));\n\t\t\t}\n\t\t}\n\n\t\t// Scroll indicator\n\t\tif (startIndex > 0 || endIndex < this.filteredItems.length) {\n\t\t\tlines.push(theme.fg(\"dim\", ` (${this.selectedIndex + 1}/${this.filteredItems.length})`));\n\t\t}\n\n\t\treturn lines;\n\t}\n\n\thandleInput(data: string): void {\n\t\tconst kb = getKeybindings();\n\n\t\tif (kb.matches(data, \"tui.select.up\")) {\n\t\t\tthis.selectedIndex = this.findNextItem(this.selectedIndex, -1);\n\t\t\treturn;\n\t\t}\n\t\tif (kb.matches(data, \"tui.select.down\")) {\n\t\t\tthis.selectedIndex = this.findNextItem(this.selectedIndex, 1);\n\t\t\treturn;\n\t\t}\n\t\tif (kb.matches(data, \"tui.select.pageUp\")) {\n\t\t\t// Jump up by maxVisible, then find nearest item\n\t\t\tlet target = Math.max(0, this.selectedIndex - this.maxVisible);\n\t\t\twhile (target < this.filteredItems.length && this.filteredItems[target].type !== \"item\") {\n\t\t\t\ttarget++;\n\t\t\t}\n\t\t\tif (target < this.filteredItems.length) {\n\t\t\t\tthis.selectedIndex = target;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tif (kb.matches(data, \"tui.select.pageDown\")) {\n\t\t\t// Jump down by maxVisible, then find nearest item\n\t\t\tlet target = Math.min(this.filteredItems.length - 1, this.selectedIndex + this.maxVisible);\n\t\t\twhile (target >= 0 && this.filteredItems[target].type !== \"item\") {\n\t\t\t\ttarget--;\n\t\t\t}\n\t\t\tif (target >= 0) {\n\t\t\t\tthis.selectedIndex = target;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tif (kb.matches(data, \"tui.select.cancel\")) {\n\t\t\tthis.onCancel?.();\n\t\t\treturn;\n\t\t}\n\t\tif (matchesKey(data, \"ctrl+c\")) {\n\t\t\tthis.onExit?.();\n\t\t\treturn;\n\t\t}\n\t\tif (data === \" \" || kb.matches(data, \"tui.select.confirm\")) {\n\t\t\tconst entry = this.filteredItems[this.selectedIndex];\n\t\t\tif (entry?.type === \"item\") {\n\t\t\t\tconst newEnabled = !entry.item.enabled;\n\t\t\t\tthis.toggleResource(entry.item, newEnabled);\n\t\t\t\tthis.updateItem(entry.item, newEnabled);\n\t\t\t\tthis.onToggle?.(entry.item, newEnabled);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// Pass to search input\n\t\tthis.searchInput.handleInput(data);\n\t\tthis.filterItems(this.searchInput.getValue());\n\t}\n\n\tprivate toggleResource(item: ResourceItem, enabled: boolean): void {\n\t\tif (item.metadata.origin === \"top-level\") {\n\t\t\tthis.toggleTopLevelResource(item, enabled);\n\t\t} else {\n\t\t\tthis.togglePackageResource(item, enabled);\n\t\t}\n\t}\n\n\tprivate toggleTopLevelResource(item: ResourceItem, enabled: boolean): void {\n\t\tconst scope = item.metadata.scope as \"user\" | \"project\";\n\t\tconst settings =\n\t\t\tscope === \"project\" ? this.settingsManager.getProjectSettings() : this.settingsManager.getGlobalSettings();\n\n\t\tconst arrayKey = item.resourceType as \"extensions\" | \"skills\" | \"prompts\" | \"themes\";\n\t\tconst current = (settings[arrayKey] ?? []) as string[];\n\n\t\t// Generate pattern for this resource\n\t\tconst pattern = this.getResourcePattern(item);\n\t\tconst disablePattern = `-${pattern}`;\n\t\tconst enablePattern = `+${pattern}`;\n\n\t\t// Filter out existing patterns for this resource\n\t\tconst updated = current.filter((p) => {\n\t\t\tconst stripped = p.startsWith(\"!\") || p.startsWith(\"+\") || p.startsWith(\"-\") ? p.slice(1) : p;\n\t\t\treturn stripped !== pattern;\n\t\t});\n\n\t\tif (enabled) {\n\t\t\tupdated.push(enablePattern);\n\t\t} else {\n\t\t\tupdated.push(disablePattern);\n\t\t}\n\n\t\tif (scope === \"project\") {\n\t\t\tif (arrayKey === \"extensions\") {\n\t\t\t\tthis.settingsManager.setProjectExtensionPaths(updated);\n\t\t\t} else if (arrayKey === \"skills\") {\n\t\t\t\tthis.settingsManager.setProjectSkillPaths(updated);\n\t\t\t} else if (arrayKey === \"prompts\") {\n\t\t\t\tthis.settingsManager.setProjectPromptTemplatePaths(updated);\n\t\t\t} else if (arrayKey === \"themes\") {\n\t\t\t\tthis.settingsManager.setProjectThemePaths(updated);\n\t\t\t}\n\t\t} else {\n\t\t\tif (arrayKey === \"extensions\") {\n\t\t\t\tthis.settingsManager.setExtensionPaths(updated);\n\t\t\t} else if (arrayKey === \"skills\") {\n\t\t\t\tthis.settingsManager.setSkillPaths(updated);\n\t\t\t} else if (arrayKey === \"prompts\") {\n\t\t\t\tthis.settingsManager.setPromptTemplatePaths(updated);\n\t\t\t} else if (arrayKey === \"themes\") {\n\t\t\t\tthis.settingsManager.setThemePaths(updated);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate togglePackageResource(item: ResourceItem, enabled: boolean): void {\n\t\tconst scope = item.metadata.scope as \"user\" | \"project\";\n\t\tconst settings =\n\t\t\tscope === \"project\" ? this.settingsManager.getProjectSettings() : this.settingsManager.getGlobalSettings();\n\n\t\tconst packages = [...(settings.packages ?? [])] as PackageSource[];\n\t\tconst pkgIndex = packages.findIndex((pkg) => {\n\t\t\tconst source = typeof pkg === \"string\" ? pkg : pkg.source;\n\t\t\treturn source === item.metadata.source;\n\t\t});\n\n\t\tif (pkgIndex === -1) return;\n\n\t\tlet pkg = packages[pkgIndex];\n\n\t\t// Convert string to object form if needed\n\t\tif (typeof pkg === \"string\") {\n\t\t\tpkg = { source: pkg };\n\t\t\tpackages[pkgIndex] = pkg;\n\t\t}\n\n\t\t// Get the resource array for this type\n\t\tconst arrayKey = item.resourceType as \"extensions\" | \"skills\" | \"prompts\" | \"themes\";\n\t\tconst current = (pkg[arrayKey] ?? []) as string[];\n\n\t\t// Generate pattern relative to package root\n\t\tconst pattern = this.getPackageResourcePattern(item);\n\t\tconst disablePattern = `-${pattern}`;\n\t\tconst enablePattern = `+${pattern}`;\n\n\t\t// Filter out existing patterns for this resource\n\t\tconst updated = current.filter((p) => {\n\t\t\tconst stripped = p.startsWith(\"!\") || p.startsWith(\"+\") || p.startsWith(\"-\") ? p.slice(1) : p;\n\t\t\treturn stripped !== pattern;\n\t\t});\n\n\t\tif (enabled) {\n\t\t\tupdated.push(enablePattern);\n\t\t} else {\n\t\t\tupdated.push(disablePattern);\n\t\t}\n\n\t\t(pkg as Record<string, unknown>)[arrayKey] = updated.length > 0 ? updated : undefined;\n\n\t\t// Clean up empty filter object\n\t\tconst hasFilters = [\"extensions\", \"skills\", \"prompts\", \"themes\"].some(\n\t\t\t(k) => (pkg as Record<string, unknown>)[k] !== undefined,\n\t\t);\n\t\tif (!hasFilters) {\n\t\t\tpackages[pkgIndex] = (pkg as { source: string }).source;\n\t\t}\n\n\t\tif (scope === \"project\") {\n\t\t\tthis.settingsManager.setProjectPackages(packages);\n\t\t} else {\n\t\t\tthis.settingsManager.setPackages(packages);\n\t\t}\n\t}\n\n\tprivate getTopLevelBaseDir(scope: \"user\" | \"project\"): string {\n\t\treturn scope === \"project\" ? join(this.cwd, CONFIG_DIR_NAME) : this.agentDir;\n\t}\n\n\tprivate getResourcePattern(item: ResourceItem): string {\n\t\tconst scope = item.metadata.scope as \"user\" | \"project\";\n\t\tconst baseDir = this.getTopLevelBaseDir(scope);\n\t\treturn relative(baseDir, item.path);\n\t}\n\n\tprivate getPackageResourcePattern(item: ResourceItem): string {\n\t\tconst baseDir = item.metadata.baseDir ?? dirname(item.path);\n\t\treturn relative(baseDir, item.path);\n\t}\n}\n\nexport class ConfigSelectorComponent extends Container implements Focusable {\n\tprivate resourceList: ResourceList;\n\n\tprivate _focused = false;\n\tget focused(): boolean {\n\t\treturn this._focused;\n\t}\n\tset focused(value: boolean) {\n\t\tthis._focused = value;\n\t\tthis.resourceList.focused = value;\n\t}\n\n\tconstructor(\n\t\tresolvedPaths: ResolvedPaths,\n\t\tsettingsManager: SettingsManager,\n\t\tcwd: string,\n\t\tagentDir: string,\n\t\tonClose: () => void,\n\t\tonExit: () => void,\n\t\trequestRender: () => void,\n\t) {\n\t\tsuper();\n\n\t\tconst groups = buildGroups(resolvedPaths);\n\n\t\t// Add header\n\t\tthis.addChild(new Spacer(1));\n\t\tthis.addChild(new DynamicBorder());\n\t\tthis.addChild(new Spacer(1));\n\t\tthis.addChild(new ConfigSelectorHeader());\n\t\tthis.addChild(new Spacer(1));\n\n\t\t// Resource list\n\t\tthis.resourceList = new ResourceList(groups, settingsManager, cwd, agentDir);\n\t\tthis.resourceList.onCancel = onClose;\n\t\tthis.resourceList.onExit = onExit;\n\t\tthis.resourceList.onToggle = () => requestRender();\n\t\tthis.addChild(this.resourceList);\n\n\t\t// Bottom border\n\t\tthis.addChild(new Spacer(1));\n\t\tthis.addChild(new DynamicBorder());\n\t}\n\n\tgetResourceList(): ResourceList {\n\t\treturn this.resourceList;\n\t}\n}\n"]}
@@ -1,479 +0,0 @@
1
- /**
2
- * TUI component for managing package resources (enable/disable)
3
- */
4
- import { basename, dirname, join, relative } from "node:path";
5
- import { Container, getKeybindings, Input, matchesKey, Spacer, truncateToWidth, visibleWidth, } from "@eminent337/aery-tui";
6
- import { CONFIG_DIR_NAME } from "../../../config.js";
7
- import { theme } from "../theme/theme.js";
8
- import { DynamicBorder } from "./dynamic-border.js";
9
- import { rawKeyHint } from "./keybinding-hints.js";
10
- const RESOURCE_TYPE_LABELS = {
11
- extensions: "Extensions",
12
- skills: "Skills",
13
- prompts: "Prompts",
14
- themes: "Themes",
15
- };
16
- function getGroupLabel(metadata) {
17
- if (metadata.origin === "package") {
18
- return `${metadata.source} (${metadata.scope})`;
19
- }
20
- // Top-level resources
21
- if (metadata.source === "auto") {
22
- return metadata.scope === "user" ? "User (~/.aery/agent/)" : "Project (.aery/)";
23
- }
24
- return metadata.scope === "user" ? "User settings" : "Project settings";
25
- }
26
- function buildGroups(resolved) {
27
- const groupMap = new Map();
28
- const addToGroup = (resources, resourceType) => {
29
- for (const res of resources) {
30
- const { path, enabled, metadata } = res;
31
- const groupKey = `${metadata.origin}:${metadata.scope}:${metadata.source}`;
32
- if (!groupMap.has(groupKey)) {
33
- groupMap.set(groupKey, {
34
- key: groupKey,
35
- label: getGroupLabel(metadata),
36
- scope: metadata.scope,
37
- origin: metadata.origin,
38
- source: metadata.source,
39
- subgroups: [],
40
- });
41
- }
42
- const group = groupMap.get(groupKey);
43
- const subgroupKey = `${groupKey}:${resourceType}`;
44
- let subgroup = group.subgroups.find((sg) => sg.type === resourceType);
45
- if (!subgroup) {
46
- subgroup = {
47
- type: resourceType,
48
- label: RESOURCE_TYPE_LABELS[resourceType],
49
- items: [],
50
- };
51
- group.subgroups.push(subgroup);
52
- }
53
- const fileName = basename(path);
54
- const parentFolder = basename(dirname(path));
55
- let displayName;
56
- if (resourceType === "extensions" && parentFolder !== "extensions") {
57
- displayName = `${parentFolder}/${fileName}`;
58
- }
59
- else if (resourceType === "skills" && fileName === "SKILL.md") {
60
- displayName = parentFolder;
61
- }
62
- else {
63
- displayName = fileName;
64
- }
65
- subgroup.items.push({
66
- path,
67
- enabled,
68
- metadata,
69
- resourceType,
70
- displayName,
71
- groupKey,
72
- subgroupKey,
73
- });
74
- }
75
- };
76
- addToGroup(resolved.extensions, "extensions");
77
- addToGroup(resolved.skills, "skills");
78
- addToGroup(resolved.prompts, "prompts");
79
- addToGroup(resolved.themes, "themes");
80
- // Sort groups: packages first, then top-level; user before project
81
- const groups = Array.from(groupMap.values());
82
- groups.sort((a, b) => {
83
- if (a.origin !== b.origin) {
84
- return a.origin === "package" ? -1 : 1;
85
- }
86
- if (a.scope !== b.scope) {
87
- return a.scope === "user" ? -1 : 1;
88
- }
89
- return a.source.localeCompare(b.source);
90
- });
91
- // Sort subgroups within each group by type order, and items by name
92
- const typeOrder = { extensions: 0, skills: 1, prompts: 2, themes: 3 };
93
- for (const group of groups) {
94
- group.subgroups.sort((a, b) => typeOrder[a.type] - typeOrder[b.type]);
95
- for (const subgroup of group.subgroups) {
96
- subgroup.items.sort((a, b) => a.displayName.localeCompare(b.displayName));
97
- }
98
- }
99
- return groups;
100
- }
101
- class ConfigSelectorHeader {
102
- invalidate() { }
103
- render(width) {
104
- const title = theme.bold("Resource Configuration");
105
- const sep = theme.fg("muted", " · ");
106
- const hint = rawKeyHint("space", "toggle") + sep + rawKeyHint("esc", "close");
107
- const hintWidth = visibleWidth(hint);
108
- const titleWidth = visibleWidth(title);
109
- const spacing = Math.max(1, width - titleWidth - hintWidth);
110
- return [
111
- truncateToWidth(`${title}${" ".repeat(spacing)}${hint}`, width, ""),
112
- theme.fg("muted", "Type to filter resources"),
113
- ];
114
- }
115
- }
116
- class ResourceList {
117
- groups;
118
- flatItems = [];
119
- filteredItems = [];
120
- selectedIndex = 0;
121
- searchInput;
122
- maxVisible = 15;
123
- settingsManager;
124
- cwd;
125
- agentDir;
126
- onCancel;
127
- onExit;
128
- onToggle;
129
- _focused = false;
130
- get focused() {
131
- return this._focused;
132
- }
133
- set focused(value) {
134
- this._focused = value;
135
- this.searchInput.focused = value;
136
- }
137
- constructor(groups, settingsManager, cwd, agentDir) {
138
- this.groups = groups;
139
- this.settingsManager = settingsManager;
140
- this.cwd = cwd;
141
- this.agentDir = agentDir;
142
- this.searchInput = new Input();
143
- this.buildFlatList();
144
- this.filteredItems = [...this.flatItems];
145
- }
146
- buildFlatList() {
147
- this.flatItems = [];
148
- for (const group of this.groups) {
149
- this.flatItems.push({ type: "group", group });
150
- for (const subgroup of group.subgroups) {
151
- this.flatItems.push({ type: "subgroup", subgroup, group });
152
- for (const item of subgroup.items) {
153
- this.flatItems.push({ type: "item", item });
154
- }
155
- }
156
- }
157
- // Start selection on first item (not header)
158
- this.selectedIndex = this.flatItems.findIndex((e) => e.type === "item");
159
- if (this.selectedIndex < 0)
160
- this.selectedIndex = 0;
161
- }
162
- findNextItem(fromIndex, direction) {
163
- let idx = fromIndex + direction;
164
- while (idx >= 0 && idx < this.filteredItems.length) {
165
- if (this.filteredItems[idx].type === "item") {
166
- return idx;
167
- }
168
- idx += direction;
169
- }
170
- return fromIndex; // Stay at current if no item found
171
- }
172
- filterItems(query) {
173
- if (!query.trim()) {
174
- this.filteredItems = [...this.flatItems];
175
- this.selectFirstItem();
176
- return;
177
- }
178
- const lowerQuery = query.toLowerCase();
179
- const matchingItems = new Set();
180
- const matchingSubgroups = new Set();
181
- const matchingGroups = new Set();
182
- for (const entry of this.flatItems) {
183
- if (entry.type === "item") {
184
- const item = entry.item;
185
- if (item.displayName.toLowerCase().includes(lowerQuery) ||
186
- item.resourceType.toLowerCase().includes(lowerQuery) ||
187
- item.path.toLowerCase().includes(lowerQuery)) {
188
- matchingItems.add(item);
189
- }
190
- }
191
- }
192
- // Find which subgroups and groups contain matching items
193
- for (const group of this.groups) {
194
- for (const subgroup of group.subgroups) {
195
- for (const item of subgroup.items) {
196
- if (matchingItems.has(item)) {
197
- matchingSubgroups.add(subgroup);
198
- matchingGroups.add(group);
199
- }
200
- }
201
- }
202
- }
203
- this.filteredItems = [];
204
- for (const entry of this.flatItems) {
205
- if (entry.type === "group" && matchingGroups.has(entry.group)) {
206
- this.filteredItems.push(entry);
207
- }
208
- else if (entry.type === "subgroup" && matchingSubgroups.has(entry.subgroup)) {
209
- this.filteredItems.push(entry);
210
- }
211
- else if (entry.type === "item" && matchingItems.has(entry.item)) {
212
- this.filteredItems.push(entry);
213
- }
214
- }
215
- this.selectFirstItem();
216
- }
217
- selectFirstItem() {
218
- const firstItemIndex = this.filteredItems.findIndex((e) => e.type === "item");
219
- this.selectedIndex = firstItemIndex >= 0 ? firstItemIndex : 0;
220
- }
221
- updateItem(item, enabled) {
222
- item.enabled = enabled;
223
- // Update in groups too
224
- for (const group of this.groups) {
225
- for (const subgroup of group.subgroups) {
226
- const found = subgroup.items.find((i) => i.path === item.path && i.resourceType === item.resourceType);
227
- if (found) {
228
- found.enabled = enabled;
229
- return;
230
- }
231
- }
232
- }
233
- }
234
- invalidate() { }
235
- render(width) {
236
- const lines = [];
237
- // Search input
238
- lines.push(...this.searchInput.render(width));
239
- lines.push("");
240
- if (this.filteredItems.length === 0) {
241
- lines.push(theme.fg("muted", " No resources found"));
242
- return lines;
243
- }
244
- // Calculate visible range
245
- const startIndex = Math.max(0, Math.min(this.selectedIndex - Math.floor(this.maxVisible / 2), this.filteredItems.length - this.maxVisible));
246
- const endIndex = Math.min(startIndex + this.maxVisible, this.filteredItems.length);
247
- for (let i = startIndex; i < endIndex; i++) {
248
- const entry = this.filteredItems[i];
249
- const isSelected = i === this.selectedIndex;
250
- if (entry.type === "group") {
251
- // Main group header (no cursor)
252
- const groupLine = theme.fg("accent", theme.bold(entry.group.label));
253
- lines.push(truncateToWidth(` ${groupLine}`, width, ""));
254
- }
255
- else if (entry.type === "subgroup") {
256
- // Subgroup header (indented, no cursor)
257
- const subgroupLine = theme.fg("muted", entry.subgroup.label);
258
- lines.push(truncateToWidth(` ${subgroupLine}`, width, ""));
259
- }
260
- else {
261
- // Resource item (cursor only on items)
262
- const item = entry.item;
263
- const cursor = isSelected ? "> " : " ";
264
- const checkbox = item.enabled ? theme.fg("success", "[x]") : theme.fg("dim", "[ ]");
265
- const name = isSelected ? theme.bold(item.displayName) : item.displayName;
266
- lines.push(truncateToWidth(`${cursor} ${checkbox} ${name}`, width, "..."));
267
- }
268
- }
269
- // Scroll indicator
270
- if (startIndex > 0 || endIndex < this.filteredItems.length) {
271
- lines.push(theme.fg("dim", ` (${this.selectedIndex + 1}/${this.filteredItems.length})`));
272
- }
273
- return lines;
274
- }
275
- handleInput(data) {
276
- const kb = getKeybindings();
277
- if (kb.matches(data, "tui.select.up")) {
278
- this.selectedIndex = this.findNextItem(this.selectedIndex, -1);
279
- return;
280
- }
281
- if (kb.matches(data, "tui.select.down")) {
282
- this.selectedIndex = this.findNextItem(this.selectedIndex, 1);
283
- return;
284
- }
285
- if (kb.matches(data, "tui.select.pageUp")) {
286
- // Jump up by maxVisible, then find nearest item
287
- let target = Math.max(0, this.selectedIndex - this.maxVisible);
288
- while (target < this.filteredItems.length && this.filteredItems[target].type !== "item") {
289
- target++;
290
- }
291
- if (target < this.filteredItems.length) {
292
- this.selectedIndex = target;
293
- }
294
- return;
295
- }
296
- if (kb.matches(data, "tui.select.pageDown")) {
297
- // Jump down by maxVisible, then find nearest item
298
- let target = Math.min(this.filteredItems.length - 1, this.selectedIndex + this.maxVisible);
299
- while (target >= 0 && this.filteredItems[target].type !== "item") {
300
- target--;
301
- }
302
- if (target >= 0) {
303
- this.selectedIndex = target;
304
- }
305
- return;
306
- }
307
- if (kb.matches(data, "tui.select.cancel")) {
308
- this.onCancel?.();
309
- return;
310
- }
311
- if (matchesKey(data, "ctrl+c")) {
312
- this.onExit?.();
313
- return;
314
- }
315
- if (data === " " || kb.matches(data, "tui.select.confirm")) {
316
- const entry = this.filteredItems[this.selectedIndex];
317
- if (entry?.type === "item") {
318
- const newEnabled = !entry.item.enabled;
319
- this.toggleResource(entry.item, newEnabled);
320
- this.updateItem(entry.item, newEnabled);
321
- this.onToggle?.(entry.item, newEnabled);
322
- }
323
- return;
324
- }
325
- // Pass to search input
326
- this.searchInput.handleInput(data);
327
- this.filterItems(this.searchInput.getValue());
328
- }
329
- toggleResource(item, enabled) {
330
- if (item.metadata.origin === "top-level") {
331
- this.toggleTopLevelResource(item, enabled);
332
- }
333
- else {
334
- this.togglePackageResource(item, enabled);
335
- }
336
- }
337
- toggleTopLevelResource(item, enabled) {
338
- const scope = item.metadata.scope;
339
- const settings = scope === "project" ? this.settingsManager.getProjectSettings() : this.settingsManager.getGlobalSettings();
340
- const arrayKey = item.resourceType;
341
- const current = (settings[arrayKey] ?? []);
342
- // Generate pattern for this resource
343
- const pattern = this.getResourcePattern(item);
344
- const disablePattern = `-${pattern}`;
345
- const enablePattern = `+${pattern}`;
346
- // Filter out existing patterns for this resource
347
- const updated = current.filter((p) => {
348
- const stripped = p.startsWith("!") || p.startsWith("+") || p.startsWith("-") ? p.slice(1) : p;
349
- return stripped !== pattern;
350
- });
351
- if (enabled) {
352
- updated.push(enablePattern);
353
- }
354
- else {
355
- updated.push(disablePattern);
356
- }
357
- if (scope === "project") {
358
- if (arrayKey === "extensions") {
359
- this.settingsManager.setProjectExtensionPaths(updated);
360
- }
361
- else if (arrayKey === "skills") {
362
- this.settingsManager.setProjectSkillPaths(updated);
363
- }
364
- else if (arrayKey === "prompts") {
365
- this.settingsManager.setProjectPromptTemplatePaths(updated);
366
- }
367
- else if (arrayKey === "themes") {
368
- this.settingsManager.setProjectThemePaths(updated);
369
- }
370
- }
371
- else {
372
- if (arrayKey === "extensions") {
373
- this.settingsManager.setExtensionPaths(updated);
374
- }
375
- else if (arrayKey === "skills") {
376
- this.settingsManager.setSkillPaths(updated);
377
- }
378
- else if (arrayKey === "prompts") {
379
- this.settingsManager.setPromptTemplatePaths(updated);
380
- }
381
- else if (arrayKey === "themes") {
382
- this.settingsManager.setThemePaths(updated);
383
- }
384
- }
385
- }
386
- togglePackageResource(item, enabled) {
387
- const scope = item.metadata.scope;
388
- const settings = scope === "project" ? this.settingsManager.getProjectSettings() : this.settingsManager.getGlobalSettings();
389
- const packages = [...(settings.packages ?? [])];
390
- const pkgIndex = packages.findIndex((pkg) => {
391
- const source = typeof pkg === "string" ? pkg : pkg.source;
392
- return source === item.metadata.source;
393
- });
394
- if (pkgIndex === -1)
395
- return;
396
- let pkg = packages[pkgIndex];
397
- // Convert string to object form if needed
398
- if (typeof pkg === "string") {
399
- pkg = { source: pkg };
400
- packages[pkgIndex] = pkg;
401
- }
402
- // Get the resource array for this type
403
- const arrayKey = item.resourceType;
404
- const current = (pkg[arrayKey] ?? []);
405
- // Generate pattern relative to package root
406
- const pattern = this.getPackageResourcePattern(item);
407
- const disablePattern = `-${pattern}`;
408
- const enablePattern = `+${pattern}`;
409
- // Filter out existing patterns for this resource
410
- const updated = current.filter((p) => {
411
- const stripped = p.startsWith("!") || p.startsWith("+") || p.startsWith("-") ? p.slice(1) : p;
412
- return stripped !== pattern;
413
- });
414
- if (enabled) {
415
- updated.push(enablePattern);
416
- }
417
- else {
418
- updated.push(disablePattern);
419
- }
420
- pkg[arrayKey] = updated.length > 0 ? updated : undefined;
421
- // Clean up empty filter object
422
- const hasFilters = ["extensions", "skills", "prompts", "themes"].some((k) => pkg[k] !== undefined);
423
- if (!hasFilters) {
424
- packages[pkgIndex] = pkg.source;
425
- }
426
- if (scope === "project") {
427
- this.settingsManager.setProjectPackages(packages);
428
- }
429
- else {
430
- this.settingsManager.setPackages(packages);
431
- }
432
- }
433
- getTopLevelBaseDir(scope) {
434
- return scope === "project" ? join(this.cwd, CONFIG_DIR_NAME) : this.agentDir;
435
- }
436
- getResourcePattern(item) {
437
- const scope = item.metadata.scope;
438
- const baseDir = this.getTopLevelBaseDir(scope);
439
- return relative(baseDir, item.path);
440
- }
441
- getPackageResourcePattern(item) {
442
- const baseDir = item.metadata.baseDir ?? dirname(item.path);
443
- return relative(baseDir, item.path);
444
- }
445
- }
446
- export class ConfigSelectorComponent extends Container {
447
- resourceList;
448
- _focused = false;
449
- get focused() {
450
- return this._focused;
451
- }
452
- set focused(value) {
453
- this._focused = value;
454
- this.resourceList.focused = value;
455
- }
456
- constructor(resolvedPaths, settingsManager, cwd, agentDir, onClose, onExit, requestRender) {
457
- super();
458
- const groups = buildGroups(resolvedPaths);
459
- // Add header
460
- this.addChild(new Spacer(1));
461
- this.addChild(new DynamicBorder());
462
- this.addChild(new Spacer(1));
463
- this.addChild(new ConfigSelectorHeader());
464
- this.addChild(new Spacer(1));
465
- // Resource list
466
- this.resourceList = new ResourceList(groups, settingsManager, cwd, agentDir);
467
- this.resourceList.onCancel = onClose;
468
- this.resourceList.onExit = onExit;
469
- this.resourceList.onToggle = () => requestRender();
470
- this.addChild(this.resourceList);
471
- // Bottom border
472
- this.addChild(new Spacer(1));
473
- this.addChild(new DynamicBorder());
474
- }
475
- getResourceList() {
476
- return this.resourceList;
477
- }
478
- }
479
- //# sourceMappingURL=config-selector.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config-selector.js","sourceRoot":"","sources":["../../../../src/modes/interactive/components/config-selector.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * TUI component for managing package resources (enable/disable)\n */\n\nimport { basename, dirname, join, relative } from \"node:path\";\nimport {\n\ttype Component,\n\tContainer,\n\ttype Focusable,\n\tgetKeybindings,\n\tInput,\n\tmatchesKey,\n\tSpacer,\n\ttruncateToWidth,\n\tvisibleWidth,\n} from \"@eminent337/aery-tui\";\nimport { CONFIG_DIR_NAME } from \"../../../config.js\";\nimport type { PathMetadata, ResolvedPaths, ResolvedResource } from \"../../../core/package-manager.js\";\nimport type { PackageSource, SettingsManager } from \"../../../core/settings-manager.js\";\nimport { theme } from \"../theme/theme.js\";\nimport { DynamicBorder } from \"./dynamic-border.js\";\nimport { rawKeyHint } from \"./keybinding-hints.js\";\n\ntype ResourceType = \"extensions\" | \"skills\" | \"prompts\" | \"themes\";\n\nconst RESOURCE_TYPE_LABELS: Record<ResourceType, string> = {\n\textensions: \"Extensions\",\n\tskills: \"Skills\",\n\tprompts: \"Prompts\",\n\tthemes: \"Themes\",\n};\n\ninterface ResourceItem {\n\tpath: string;\n\tenabled: boolean;\n\tmetadata: PathMetadata;\n\tresourceType: ResourceType;\n\tdisplayName: string;\n\tgroupKey: string;\n\tsubgroupKey: string;\n}\n\ninterface ResourceSubgroup {\n\ttype: ResourceType;\n\tlabel: string;\n\titems: ResourceItem[];\n}\n\ninterface ResourceGroup {\n\tkey: string;\n\tlabel: string;\n\tscope: \"user\" | \"project\" | \"temporary\";\n\torigin: \"package\" | \"top-level\";\n\tsource: string;\n\tsubgroups: ResourceSubgroup[];\n}\n\nfunction getGroupLabel(metadata: PathMetadata): string {\n\tif (metadata.origin === \"package\") {\n\t\treturn `${metadata.source} (${metadata.scope})`;\n\t}\n\t// Top-level resources\n\tif (metadata.source === \"auto\") {\n\t\treturn metadata.scope === \"user\" ? \"User (~/.aery/agent/)\" : \"Project (.aery/)\";\n\t}\n\treturn metadata.scope === \"user\" ? \"User settings\" : \"Project settings\";\n}\n\nfunction buildGroups(resolved: ResolvedPaths): ResourceGroup[] {\n\tconst groupMap = new Map<string, ResourceGroup>();\n\n\tconst addToGroup = (resources: ResolvedResource[], resourceType: ResourceType) => {\n\t\tfor (const res of resources) {\n\t\t\tconst { path, enabled, metadata } = res;\n\t\t\tconst groupKey = `${metadata.origin}:${metadata.scope}:${metadata.source}`;\n\n\t\t\tif (!groupMap.has(groupKey)) {\n\t\t\t\tgroupMap.set(groupKey, {\n\t\t\t\t\tkey: groupKey,\n\t\t\t\t\tlabel: getGroupLabel(metadata),\n\t\t\t\t\tscope: metadata.scope,\n\t\t\t\t\torigin: metadata.origin,\n\t\t\t\t\tsource: metadata.source,\n\t\t\t\t\tsubgroups: [],\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst group = groupMap.get(groupKey)!;\n\t\t\tconst subgroupKey = `${groupKey}:${resourceType}`;\n\n\t\t\tlet subgroup = group.subgroups.find((sg) => sg.type === resourceType);\n\t\t\tif (!subgroup) {\n\t\t\t\tsubgroup = {\n\t\t\t\t\ttype: resourceType,\n\t\t\t\t\tlabel: RESOURCE_TYPE_LABELS[resourceType],\n\t\t\t\t\titems: [],\n\t\t\t\t};\n\t\t\t\tgroup.subgroups.push(subgroup);\n\t\t\t}\n\n\t\t\tconst fileName = basename(path);\n\t\t\tconst parentFolder = basename(dirname(path));\n\t\t\tlet displayName: string;\n\t\t\tif (resourceType === \"extensions\" && parentFolder !== \"extensions\") {\n\t\t\t\tdisplayName = `${parentFolder}/${fileName}`;\n\t\t\t} else if (resourceType === \"skills\" && fileName === \"SKILL.md\") {\n\t\t\t\tdisplayName = parentFolder;\n\t\t\t} else {\n\t\t\t\tdisplayName = fileName;\n\t\t\t}\n\t\t\tsubgroup.items.push({\n\t\t\t\tpath,\n\t\t\t\tenabled,\n\t\t\t\tmetadata,\n\t\t\t\tresourceType,\n\t\t\t\tdisplayName,\n\t\t\t\tgroupKey,\n\t\t\t\tsubgroupKey,\n\t\t\t});\n\t\t}\n\t};\n\n\taddToGroup(resolved.extensions, \"extensions\");\n\taddToGroup(resolved.skills, \"skills\");\n\taddToGroup(resolved.prompts, \"prompts\");\n\taddToGroup(resolved.themes, \"themes\");\n\n\t// Sort groups: packages first, then top-level; user before project\n\tconst groups = Array.from(groupMap.values());\n\tgroups.sort((a, b) => {\n\t\tif (a.origin !== b.origin) {\n\t\t\treturn a.origin === \"package\" ? -1 : 1;\n\t\t}\n\t\tif (a.scope !== b.scope) {\n\t\t\treturn a.scope === \"user\" ? -1 : 1;\n\t\t}\n\t\treturn a.source.localeCompare(b.source);\n\t});\n\n\t// Sort subgroups within each group by type order, and items by name\n\tconst typeOrder: Record<ResourceType, number> = { extensions: 0, skills: 1, prompts: 2, themes: 3 };\n\tfor (const group of groups) {\n\t\tgroup.subgroups.sort((a, b) => typeOrder[a.type] - typeOrder[b.type]);\n\t\tfor (const subgroup of group.subgroups) {\n\t\t\tsubgroup.items.sort((a, b) => a.displayName.localeCompare(b.displayName));\n\t\t}\n\t}\n\n\treturn groups;\n}\n\ntype FlatEntry =\n\t| { type: \"group\"; group: ResourceGroup }\n\t| { type: \"subgroup\"; subgroup: ResourceSubgroup; group: ResourceGroup }\n\t| { type: \"item\"; item: ResourceItem };\n\nclass ConfigSelectorHeader implements Component {\n\tinvalidate(): void {}\n\n\trender(width: number): string[] {\n\t\tconst title = theme.bold(\"Resource Configuration\");\n\t\tconst sep = theme.fg(\"muted\", \" · \");\n\t\tconst hint = rawKeyHint(\"space\", \"toggle\") + sep + rawKeyHint(\"esc\", \"close\");\n\t\tconst hintWidth = visibleWidth(hint);\n\t\tconst titleWidth = visibleWidth(title);\n\t\tconst spacing = Math.max(1, width - titleWidth - hintWidth);\n\n\t\treturn [\n\t\t\ttruncateToWidth(`${title}${\" \".repeat(spacing)}${hint}`, width, \"\"),\n\t\t\ttheme.fg(\"muted\", \"Type to filter resources\"),\n\t\t];\n\t}\n}\n\nclass ResourceList implements Component, Focusable {\n\tprivate groups: ResourceGroup[];\n\tprivate flatItems: FlatEntry[] = [];\n\tprivate filteredItems: FlatEntry[] = [];\n\tprivate selectedIndex = 0;\n\tprivate searchInput: Input;\n\tprivate maxVisible = 15;\n\tprivate settingsManager: SettingsManager;\n\tprivate cwd: string;\n\tprivate agentDir: string;\n\n\tpublic onCancel?: () => void;\n\tpublic onExit?: () => void;\n\tpublic onToggle?: (item: ResourceItem, newEnabled: boolean) => void;\n\n\tprivate _focused = false;\n\tget focused(): boolean {\n\t\treturn this._focused;\n\t}\n\tset focused(value: boolean) {\n\t\tthis._focused = value;\n\t\tthis.searchInput.focused = value;\n\t}\n\n\tconstructor(groups: ResourceGroup[], settingsManager: SettingsManager, cwd: string, agentDir: string) {\n\t\tthis.groups = groups;\n\t\tthis.settingsManager = settingsManager;\n\t\tthis.cwd = cwd;\n\t\tthis.agentDir = agentDir;\n\t\tthis.searchInput = new Input();\n\t\tthis.buildFlatList();\n\t\tthis.filteredItems = [...this.flatItems];\n\t}\n\n\tprivate buildFlatList(): void {\n\t\tthis.flatItems = [];\n\t\tfor (const group of this.groups) {\n\t\t\tthis.flatItems.push({ type: \"group\", group });\n\t\t\tfor (const subgroup of group.subgroups) {\n\t\t\t\tthis.flatItems.push({ type: \"subgroup\", subgroup, group });\n\t\t\t\tfor (const item of subgroup.items) {\n\t\t\t\t\tthis.flatItems.push({ type: \"item\", item });\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// Start selection on first item (not header)\n\t\tthis.selectedIndex = this.flatItems.findIndex((e) => e.type === \"item\");\n\t\tif (this.selectedIndex < 0) this.selectedIndex = 0;\n\t}\n\n\tprivate findNextItem(fromIndex: number, direction: 1 | -1): number {\n\t\tlet idx = fromIndex + direction;\n\t\twhile (idx >= 0 && idx < this.filteredItems.length) {\n\t\t\tif (this.filteredItems[idx].type === \"item\") {\n\t\t\t\treturn idx;\n\t\t\t}\n\t\t\tidx += direction;\n\t\t}\n\t\treturn fromIndex; // Stay at current if no item found\n\t}\n\n\tprivate filterItems(query: string): void {\n\t\tif (!query.trim()) {\n\t\t\tthis.filteredItems = [...this.flatItems];\n\t\t\tthis.selectFirstItem();\n\t\t\treturn;\n\t\t}\n\n\t\tconst lowerQuery = query.toLowerCase();\n\t\tconst matchingItems = new Set<ResourceItem>();\n\t\tconst matchingSubgroups = new Set<ResourceSubgroup>();\n\t\tconst matchingGroups = new Set<ResourceGroup>();\n\n\t\tfor (const entry of this.flatItems) {\n\t\t\tif (entry.type === \"item\") {\n\t\t\t\tconst item = entry.item;\n\t\t\t\tif (\n\t\t\t\t\titem.displayName.toLowerCase().includes(lowerQuery) ||\n\t\t\t\t\titem.resourceType.toLowerCase().includes(lowerQuery) ||\n\t\t\t\t\titem.path.toLowerCase().includes(lowerQuery)\n\t\t\t\t) {\n\t\t\t\t\tmatchingItems.add(item);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Find which subgroups and groups contain matching items\n\t\tfor (const group of this.groups) {\n\t\t\tfor (const subgroup of group.subgroups) {\n\t\t\t\tfor (const item of subgroup.items) {\n\t\t\t\t\tif (matchingItems.has(item)) {\n\t\t\t\t\t\tmatchingSubgroups.add(subgroup);\n\t\t\t\t\t\tmatchingGroups.add(group);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.filteredItems = [];\n\t\tfor (const entry of this.flatItems) {\n\t\t\tif (entry.type === \"group\" && matchingGroups.has(entry.group)) {\n\t\t\t\tthis.filteredItems.push(entry);\n\t\t\t} else if (entry.type === \"subgroup\" && matchingSubgroups.has(entry.subgroup)) {\n\t\t\t\tthis.filteredItems.push(entry);\n\t\t\t} else if (entry.type === \"item\" && matchingItems.has(entry.item)) {\n\t\t\t\tthis.filteredItems.push(entry);\n\t\t\t}\n\t\t}\n\n\t\tthis.selectFirstItem();\n\t}\n\n\tprivate selectFirstItem(): void {\n\t\tconst firstItemIndex = this.filteredItems.findIndex((e) => e.type === \"item\");\n\t\tthis.selectedIndex = firstItemIndex >= 0 ? firstItemIndex : 0;\n\t}\n\n\tupdateItem(item: ResourceItem, enabled: boolean): void {\n\t\titem.enabled = enabled;\n\t\t// Update in groups too\n\t\tfor (const group of this.groups) {\n\t\t\tfor (const subgroup of group.subgroups) {\n\t\t\t\tconst found = subgroup.items.find((i) => i.path === item.path && i.resourceType === item.resourceType);\n\t\t\t\tif (found) {\n\t\t\t\t\tfound.enabled = enabled;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tinvalidate(): void {}\n\n\trender(width: number): string[] {\n\t\tconst lines: string[] = [];\n\n\t\t// Search input\n\t\tlines.push(...this.searchInput.render(width));\n\t\tlines.push(\"\");\n\n\t\tif (this.filteredItems.length === 0) {\n\t\t\tlines.push(theme.fg(\"muted\", \" No resources found\"));\n\t\t\treturn lines;\n\t\t}\n\n\t\t// Calculate visible range\n\t\tconst startIndex = Math.max(\n\t\t\t0,\n\t\t\tMath.min(this.selectedIndex - Math.floor(this.maxVisible / 2), this.filteredItems.length - this.maxVisible),\n\t\t);\n\t\tconst endIndex = Math.min(startIndex + this.maxVisible, this.filteredItems.length);\n\n\t\tfor (let i = startIndex; i < endIndex; i++) {\n\t\t\tconst entry = this.filteredItems[i];\n\t\t\tconst isSelected = i === this.selectedIndex;\n\n\t\t\tif (entry.type === \"group\") {\n\t\t\t\t// Main group header (no cursor)\n\t\t\t\tconst groupLine = theme.fg(\"accent\", theme.bold(entry.group.label));\n\t\t\t\tlines.push(truncateToWidth(` ${groupLine}`, width, \"\"));\n\t\t\t} else if (entry.type === \"subgroup\") {\n\t\t\t\t// Subgroup header (indented, no cursor)\n\t\t\t\tconst subgroupLine = theme.fg(\"muted\", entry.subgroup.label);\n\t\t\t\tlines.push(truncateToWidth(` ${subgroupLine}`, width, \"\"));\n\t\t\t} else {\n\t\t\t\t// Resource item (cursor only on items)\n\t\t\t\tconst item = entry.item;\n\t\t\t\tconst cursor = isSelected ? \"> \" : \" \";\n\t\t\t\tconst checkbox = item.enabled ? theme.fg(\"success\", \"[x]\") : theme.fg(\"dim\", \"[ ]\");\n\t\t\t\tconst name = isSelected ? theme.bold(item.displayName) : item.displayName;\n\t\t\t\tlines.push(truncateToWidth(`${cursor} ${checkbox} ${name}`, width, \"...\"));\n\t\t\t}\n\t\t}\n\n\t\t// Scroll indicator\n\t\tif (startIndex > 0 || endIndex < this.filteredItems.length) {\n\t\t\tlines.push(theme.fg(\"dim\", ` (${this.selectedIndex + 1}/${this.filteredItems.length})`));\n\t\t}\n\n\t\treturn lines;\n\t}\n\n\thandleInput(data: string): void {\n\t\tconst kb = getKeybindings();\n\n\t\tif (kb.matches(data, \"tui.select.up\")) {\n\t\t\tthis.selectedIndex = this.findNextItem(this.selectedIndex, -1);\n\t\t\treturn;\n\t\t}\n\t\tif (kb.matches(data, \"tui.select.down\")) {\n\t\t\tthis.selectedIndex = this.findNextItem(this.selectedIndex, 1);\n\t\t\treturn;\n\t\t}\n\t\tif (kb.matches(data, \"tui.select.pageUp\")) {\n\t\t\t// Jump up by maxVisible, then find nearest item\n\t\t\tlet target = Math.max(0, this.selectedIndex - this.maxVisible);\n\t\t\twhile (target < this.filteredItems.length && this.filteredItems[target].type !== \"item\") {\n\t\t\t\ttarget++;\n\t\t\t}\n\t\t\tif (target < this.filteredItems.length) {\n\t\t\t\tthis.selectedIndex = target;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tif (kb.matches(data, \"tui.select.pageDown\")) {\n\t\t\t// Jump down by maxVisible, then find nearest item\n\t\t\tlet target = Math.min(this.filteredItems.length - 1, this.selectedIndex + this.maxVisible);\n\t\t\twhile (target >= 0 && this.filteredItems[target].type !== \"item\") {\n\t\t\t\ttarget--;\n\t\t\t}\n\t\t\tif (target >= 0) {\n\t\t\t\tthis.selectedIndex = target;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tif (kb.matches(data, \"tui.select.cancel\")) {\n\t\t\tthis.onCancel?.();\n\t\t\treturn;\n\t\t}\n\t\tif (matchesKey(data, \"ctrl+c\")) {\n\t\t\tthis.onExit?.();\n\t\t\treturn;\n\t\t}\n\t\tif (data === \" \" || kb.matches(data, \"tui.select.confirm\")) {\n\t\t\tconst entry = this.filteredItems[this.selectedIndex];\n\t\t\tif (entry?.type === \"item\") {\n\t\t\t\tconst newEnabled = !entry.item.enabled;\n\t\t\t\tthis.toggleResource(entry.item, newEnabled);\n\t\t\t\tthis.updateItem(entry.item, newEnabled);\n\t\t\t\tthis.onToggle?.(entry.item, newEnabled);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// Pass to search input\n\t\tthis.searchInput.handleInput(data);\n\t\tthis.filterItems(this.searchInput.getValue());\n\t}\n\n\tprivate toggleResource(item: ResourceItem, enabled: boolean): void {\n\t\tif (item.metadata.origin === \"top-level\") {\n\t\t\tthis.toggleTopLevelResource(item, enabled);\n\t\t} else {\n\t\t\tthis.togglePackageResource(item, enabled);\n\t\t}\n\t}\n\n\tprivate toggleTopLevelResource(item: ResourceItem, enabled: boolean): void {\n\t\tconst scope = item.metadata.scope as \"user\" | \"project\";\n\t\tconst settings =\n\t\t\tscope === \"project\" ? this.settingsManager.getProjectSettings() : this.settingsManager.getGlobalSettings();\n\n\t\tconst arrayKey = item.resourceType as \"extensions\" | \"skills\" | \"prompts\" | \"themes\";\n\t\tconst current = (settings[arrayKey] ?? []) as string[];\n\n\t\t// Generate pattern for this resource\n\t\tconst pattern = this.getResourcePattern(item);\n\t\tconst disablePattern = `-${pattern}`;\n\t\tconst enablePattern = `+${pattern}`;\n\n\t\t// Filter out existing patterns for this resource\n\t\tconst updated = current.filter((p) => {\n\t\t\tconst stripped = p.startsWith(\"!\") || p.startsWith(\"+\") || p.startsWith(\"-\") ? p.slice(1) : p;\n\t\t\treturn stripped !== pattern;\n\t\t});\n\n\t\tif (enabled) {\n\t\t\tupdated.push(enablePattern);\n\t\t} else {\n\t\t\tupdated.push(disablePattern);\n\t\t}\n\n\t\tif (scope === \"project\") {\n\t\t\tif (arrayKey === \"extensions\") {\n\t\t\t\tthis.settingsManager.setProjectExtensionPaths(updated);\n\t\t\t} else if (arrayKey === \"skills\") {\n\t\t\t\tthis.settingsManager.setProjectSkillPaths(updated);\n\t\t\t} else if (arrayKey === \"prompts\") {\n\t\t\t\tthis.settingsManager.setProjectPromptTemplatePaths(updated);\n\t\t\t} else if (arrayKey === \"themes\") {\n\t\t\t\tthis.settingsManager.setProjectThemePaths(updated);\n\t\t\t}\n\t\t} else {\n\t\t\tif (arrayKey === \"extensions\") {\n\t\t\t\tthis.settingsManager.setExtensionPaths(updated);\n\t\t\t} else if (arrayKey === \"skills\") {\n\t\t\t\tthis.settingsManager.setSkillPaths(updated);\n\t\t\t} else if (arrayKey === \"prompts\") {\n\t\t\t\tthis.settingsManager.setPromptTemplatePaths(updated);\n\t\t\t} else if (arrayKey === \"themes\") {\n\t\t\t\tthis.settingsManager.setThemePaths(updated);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate togglePackageResource(item: ResourceItem, enabled: boolean): void {\n\t\tconst scope = item.metadata.scope as \"user\" | \"project\";\n\t\tconst settings =\n\t\t\tscope === \"project\" ? this.settingsManager.getProjectSettings() : this.settingsManager.getGlobalSettings();\n\n\t\tconst packages = [...(settings.packages ?? [])] as PackageSource[];\n\t\tconst pkgIndex = packages.findIndex((pkg) => {\n\t\t\tconst source = typeof pkg === \"string\" ? pkg : pkg.source;\n\t\t\treturn source === item.metadata.source;\n\t\t});\n\n\t\tif (pkgIndex === -1) return;\n\n\t\tlet pkg = packages[pkgIndex];\n\n\t\t// Convert string to object form if needed\n\t\tif (typeof pkg === \"string\") {\n\t\t\tpkg = { source: pkg };\n\t\t\tpackages[pkgIndex] = pkg;\n\t\t}\n\n\t\t// Get the resource array for this type\n\t\tconst arrayKey = item.resourceType as \"extensions\" | \"skills\" | \"prompts\" | \"themes\";\n\t\tconst current = (pkg[arrayKey] ?? []) as string[];\n\n\t\t// Generate pattern relative to package root\n\t\tconst pattern = this.getPackageResourcePattern(item);\n\t\tconst disablePattern = `-${pattern}`;\n\t\tconst enablePattern = `+${pattern}`;\n\n\t\t// Filter out existing patterns for this resource\n\t\tconst updated = current.filter((p) => {\n\t\t\tconst stripped = p.startsWith(\"!\") || p.startsWith(\"+\") || p.startsWith(\"-\") ? p.slice(1) : p;\n\t\t\treturn stripped !== pattern;\n\t\t});\n\n\t\tif (enabled) {\n\t\t\tupdated.push(enablePattern);\n\t\t} else {\n\t\t\tupdated.push(disablePattern);\n\t\t}\n\n\t\t(pkg as Record<string, unknown>)[arrayKey] = updated.length > 0 ? updated : undefined;\n\n\t\t// Clean up empty filter object\n\t\tconst hasFilters = [\"extensions\", \"skills\", \"prompts\", \"themes\"].some(\n\t\t\t(k) => (pkg as Record<string, unknown>)[k] !== undefined,\n\t\t);\n\t\tif (!hasFilters) {\n\t\t\tpackages[pkgIndex] = (pkg as { source: string }).source;\n\t\t}\n\n\t\tif (scope === \"project\") {\n\t\t\tthis.settingsManager.setProjectPackages(packages);\n\t\t} else {\n\t\t\tthis.settingsManager.setPackages(packages);\n\t\t}\n\t}\n\n\tprivate getTopLevelBaseDir(scope: \"user\" | \"project\"): string {\n\t\treturn scope === \"project\" ? join(this.cwd, CONFIG_DIR_NAME) : this.agentDir;\n\t}\n\n\tprivate getResourcePattern(item: ResourceItem): string {\n\t\tconst scope = item.metadata.scope as \"user\" | \"project\";\n\t\tconst baseDir = this.getTopLevelBaseDir(scope);\n\t\treturn relative(baseDir, item.path);\n\t}\n\n\tprivate getPackageResourcePattern(item: ResourceItem): string {\n\t\tconst baseDir = item.metadata.baseDir ?? dirname(item.path);\n\t\treturn relative(baseDir, item.path);\n\t}\n}\n\nexport class ConfigSelectorComponent extends Container implements Focusable {\n\tprivate resourceList: ResourceList;\n\n\tprivate _focused = false;\n\tget focused(): boolean {\n\t\treturn this._focused;\n\t}\n\tset focused(value: boolean) {\n\t\tthis._focused = value;\n\t\tthis.resourceList.focused = value;\n\t}\n\n\tconstructor(\n\t\tresolvedPaths: ResolvedPaths,\n\t\tsettingsManager: SettingsManager,\n\t\tcwd: string,\n\t\tagentDir: string,\n\t\tonClose: () => void,\n\t\tonExit: () => void,\n\t\trequestRender: () => void,\n\t) {\n\t\tsuper();\n\n\t\tconst groups = buildGroups(resolvedPaths);\n\n\t\t// Add header\n\t\tthis.addChild(new Spacer(1));\n\t\tthis.addChild(new DynamicBorder());\n\t\tthis.addChild(new Spacer(1));\n\t\tthis.addChild(new ConfigSelectorHeader());\n\t\tthis.addChild(new Spacer(1));\n\n\t\t// Resource list\n\t\tthis.resourceList = new ResourceList(groups, settingsManager, cwd, agentDir);\n\t\tthis.resourceList.onCancel = onClose;\n\t\tthis.resourceList.onExit = onExit;\n\t\tthis.resourceList.onToggle = () => requestRender();\n\t\tthis.addChild(this.resourceList);\n\n\t\t// Bottom border\n\t\tthis.addChild(new Spacer(1));\n\t\tthis.addChild(new DynamicBorder());\n\t}\n\n\tgetResourceList(): ResourceList {\n\t\treturn this.resourceList;\n\t}\n}\n"]}
@@ -1,14 +0,0 @@
1
- /**
2
- * Reusable countdown timer for dialog components.
3
- */
4
- import type { TUI } from "@eminent337/aery-tui";
5
- export declare class CountdownTimer {
6
- private tui;
7
- private onTick;
8
- private onExpire;
9
- private intervalId;
10
- private remainingSeconds;
11
- constructor(timeoutMs: number, tui: TUI | undefined, onTick: (seconds: number) => void, onExpire: () => void);
12
- dispose(): void;
13
- }
14
- //# sourceMappingURL=countdown-timer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"countdown-timer.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/components/countdown-timer.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,sBAAsB,CAAC;AAEhD,qBAAa,cAAc;IAMzB,OAAO,CAAC,GAAG;IACX,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,QAAQ;IAPjB,OAAO,CAAC,UAAU,CAA6C;IAC/D,OAAO,CAAC,gBAAgB,CAAS;IAEjC,YACC,SAAS,EAAE,MAAM,EACT,GAAG,EAAE,GAAG,GAAG,SAAS,EACpB,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,EACjC,QAAQ,EAAE,MAAM,IAAI,EAe5B;IAED,OAAO,IAAI,IAAI,CAKd;CACD","sourcesContent":["/**\n * Reusable countdown timer for dialog components.\n */\n\nimport type { TUI } from \"@eminent337/aery-tui\";\n\nexport class CountdownTimer {\n\tprivate intervalId: ReturnType<typeof setInterval> | undefined;\n\tprivate remainingSeconds: number;\n\n\tconstructor(\n\t\ttimeoutMs: number,\n\t\tprivate tui: TUI | undefined,\n\t\tprivate onTick: (seconds: number) => void,\n\t\tprivate onExpire: () => void,\n\t) {\n\t\tthis.remainingSeconds = Math.ceil(timeoutMs / 1000);\n\t\tthis.onTick(this.remainingSeconds);\n\n\t\tthis.intervalId = setInterval(() => {\n\t\t\tthis.remainingSeconds--;\n\t\t\tthis.onTick(this.remainingSeconds);\n\t\t\tthis.tui?.requestRender();\n\n\t\t\tif (this.remainingSeconds <= 0) {\n\t\t\t\tthis.dispose();\n\t\t\t\tthis.onExpire();\n\t\t\t}\n\t\t}, 1000);\n\t}\n\n\tdispose(): void {\n\t\tif (this.intervalId) {\n\t\t\tclearInterval(this.intervalId);\n\t\t\tthis.intervalId = undefined;\n\t\t}\n\t}\n}\n"]}