@compilr-dev/cli 0.4.0 → 0.5.1

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 (634) hide show
  1. package/README.md +254 -68
  2. package/dist/.tsbuildinfo.app +1 -0
  3. package/dist/.tsbuildinfo.data +1 -0
  4. package/dist/.tsbuildinfo.domain +1 -0
  5. package/dist/.tsbuildinfo.foundation +1 -0
  6. package/dist/agent.d.ts +134 -4
  7. package/dist/agent.js +345 -166
  8. package/dist/anchors/index.d.ts +9 -0
  9. package/dist/anchors/index.js +9 -0
  10. package/dist/anchors/project-anchors.d.ts +79 -0
  11. package/dist/anchors/project-anchors.js +202 -0
  12. package/dist/auth/api-client.d.ts +124 -0
  13. package/dist/auth/api-client.js +261 -0
  14. package/dist/auth/index.d.ts +172 -0
  15. package/dist/auth/index.js +545 -0
  16. package/dist/auth/storage.d.ts +52 -0
  17. package/dist/auth/storage.js +118 -0
  18. package/dist/changelog/index.d.ts +16 -0
  19. package/dist/changelog/index.js +24 -0
  20. package/dist/changelog/releases.d.ts +17 -0
  21. package/dist/changelog/releases.js +63 -0
  22. package/dist/commands/index.d.ts +2 -1
  23. package/dist/commands-v2/handlers/auth.d.ts +10 -0
  24. package/dist/commands-v2/handlers/auth.js +118 -0
  25. package/dist/commands-v2/handlers/background.d.ts +14 -0
  26. package/dist/commands-v2/handlers/background.js +276 -0
  27. package/dist/commands-v2/handlers/context.d.ts +13 -0
  28. package/dist/commands-v2/handlers/context.js +533 -0
  29. package/dist/commands-v2/handlers/core.d.ts +14 -0
  30. package/dist/commands-v2/handlers/core.js +290 -0
  31. package/dist/commands-v2/handlers/debug.d.ts +11 -0
  32. package/dist/commands-v2/handlers/debug.js +177 -0
  33. package/dist/commands-v2/handlers/delegations.d.ts +8 -0
  34. package/dist/commands-v2/handlers/delegations.js +29 -0
  35. package/dist/commands-v2/handlers/files.d.ts +8 -0
  36. package/dist/commands-v2/handlers/files.js +162 -0
  37. package/dist/commands-v2/handlers/filter.d.ts +9 -0
  38. package/dist/commands-v2/handlers/filter.js +130 -0
  39. package/dist/commands-v2/handlers/games.d.ts +7 -0
  40. package/dist/commands-v2/handlers/games.js +57 -0
  41. package/dist/commands-v2/handlers/index.d.ts +25 -0
  42. package/dist/commands-v2/handlers/index.js +63 -0
  43. package/dist/commands-v2/handlers/mcp.d.ts +8 -0
  44. package/dist/commands-v2/handlers/mcp.js +39 -0
  45. package/dist/commands-v2/handlers/notifications.d.ts +9 -0
  46. package/dist/commands-v2/handlers/notifications.js +34 -0
  47. package/dist/commands-v2/handlers/project.d.ts +22 -0
  48. package/dist/commands-v2/handlers/project.js +1035 -0
  49. package/dist/commands-v2/handlers/reset.d.ts +11 -0
  50. package/dist/commands-v2/handlers/reset.js +118 -0
  51. package/dist/commands-v2/handlers/session.d.ts +161 -0
  52. package/dist/commands-v2/handlers/session.js +805 -0
  53. package/dist/commands-v2/handlers/settings.d.ts +17 -0
  54. package/dist/commands-v2/handlers/settings.js +417 -0
  55. package/dist/commands-v2/handlers/tasks.d.ts +5 -0
  56. package/dist/commands-v2/handlers/tasks.js +36 -0
  57. package/dist/commands-v2/handlers/team.d.ts +9 -0
  58. package/dist/commands-v2/handlers/team.js +549 -0
  59. package/dist/commands-v2/handlers/terminals.d.ts +9 -0
  60. package/dist/commands-v2/handlers/terminals.js +34 -0
  61. package/dist/commands-v2/index.d.ts +14 -0
  62. package/dist/commands-v2/index.js +18 -0
  63. package/dist/commands-v2/registry.d.ts +52 -0
  64. package/dist/commands-v2/registry.js +114 -0
  65. package/dist/commands-v2/types.d.ts +153 -0
  66. package/dist/commands-v2/types.js +7 -0
  67. package/dist/commands.js +123 -7
  68. package/dist/compilr-diff-companion.vsix +0 -0
  69. package/dist/db/index.js +98 -4
  70. package/dist/db/repositories/document-repository.d.ts +2 -0
  71. package/dist/db/repositories/document-repository.js +5 -1
  72. package/dist/db/repositories/index.d.ts +2 -0
  73. package/dist/db/repositories/index.js +1 -0
  74. package/dist/db/repositories/plan-repository.d.ts +101 -0
  75. package/dist/db/repositories/plan-repository.js +275 -0
  76. package/dist/db/repositories/project-repository.d.ts +6 -0
  77. package/dist/db/repositories/project-repository.js +41 -0
  78. package/dist/db/repositories/work-item-repository.d.ts +15 -0
  79. package/dist/db/repositories/work-item-repository.js +69 -4
  80. package/dist/db/schema.d.ts +40 -3
  81. package/dist/db/schema.js +66 -3
  82. package/dist/episodes/index.d.ts +20 -0
  83. package/dist/episodes/index.js +27 -0
  84. package/dist/episodes/recorder.d.ts +51 -0
  85. package/dist/episodes/recorder.js +195 -0
  86. package/dist/episodes/significant-work.d.ts +21 -0
  87. package/dist/episodes/significant-work.js +56 -0
  88. package/dist/episodes/store.d.ts +38 -0
  89. package/dist/episodes/store.js +199 -0
  90. package/dist/episodes/types.d.ts +35 -0
  91. package/dist/episodes/types.js +6 -0
  92. package/dist/episodes/work-at-risk.d.ts +12 -0
  93. package/dist/episodes/work-at-risk.js +38 -0
  94. package/dist/episodes/work-summary-anchor.d.ts +23 -0
  95. package/dist/episodes/work-summary-anchor.js +73 -0
  96. package/dist/games/coins.d.ts +66 -0
  97. package/dist/games/coins.js +165 -0
  98. package/dist/games/game-base.d.ts +84 -0
  99. package/dist/games/game-base.js +204 -0
  100. package/dist/games/index.d.ts +16 -0
  101. package/dist/games/index.js +49 -0
  102. package/dist/games/scores.d.ts +69 -0
  103. package/dist/games/scores.js +191 -0
  104. package/dist/games/tetris/board.d.ts +59 -0
  105. package/dist/games/tetris/board.js +170 -0
  106. package/dist/games/tetris/index.d.ts +109 -0
  107. package/dist/games/tetris/index.js +610 -0
  108. package/dist/games/tetris/pieces.d.ts +44 -0
  109. package/dist/games/tetris/pieces.js +271 -0
  110. package/dist/games/tetris/renderer.d.ts +26 -0
  111. package/dist/games/tetris/renderer.js +77 -0
  112. package/dist/guide/guide-content.d.ts +23 -0
  113. package/dist/guide/guide-content.js +196 -0
  114. package/dist/guide/index.d.ts +8 -0
  115. package/dist/guide/index.js +7 -0
  116. package/dist/guide/shared-content.d.ts +37 -0
  117. package/dist/guide/shared-content.js +1272 -0
  118. package/dist/guide/tutorial-helpers.d.ts +57 -0
  119. package/dist/guide/tutorial-helpers.js +147 -0
  120. package/dist/handlers/ask-user-handlers.d.ts +32 -0
  121. package/dist/handlers/ask-user-handlers.js +104 -0
  122. package/dist/handlers/delegation-handlers.d.ts +34 -0
  123. package/dist/handlers/delegation-handlers.js +291 -0
  124. package/dist/handlers/permission-handler.d.ts +30 -0
  125. package/dist/handlers/permission-handler.js +205 -0
  126. package/dist/index.d.ts +11 -1
  127. package/dist/index.js +615 -179
  128. package/dist/input-handlers/index.d.ts +7 -0
  129. package/dist/input-handlers/index.js +7 -0
  130. package/dist/input-handlers/memory-handler.d.ts +26 -0
  131. package/dist/input-handlers/memory-handler.js +69 -0
  132. package/dist/models/index.d.ts +10 -0
  133. package/dist/models/index.js +12 -0
  134. package/dist/models/model-registry.d.ts +38 -0
  135. package/dist/models/model-registry.js +69 -0
  136. package/dist/models/model-tiers.d.ts +28 -0
  137. package/dist/models/model-tiers.js +71 -0
  138. package/dist/models/model-validation.d.ts +25 -0
  139. package/dist/models/model-validation.js +291 -0
  140. package/dist/models/ollama-models.d.ts +73 -0
  141. package/dist/models/ollama-models.js +178 -0
  142. package/dist/models/provider-types.d.ts +6 -0
  143. package/dist/models/provider-types.js +1 -0
  144. package/dist/models/providers.d.ts +35 -0
  145. package/dist/models/providers.js +58 -0
  146. package/dist/models/types.d.ts +4 -0
  147. package/dist/models/types.js +4 -0
  148. package/dist/multi-agent/activity.d.ts +21 -0
  149. package/dist/multi-agent/activity.js +34 -0
  150. package/dist/multi-agent/agent-selection.d.ts +55 -0
  151. package/dist/multi-agent/agent-selection.js +90 -0
  152. package/dist/multi-agent/artifacts.d.ts +197 -0
  153. package/dist/multi-agent/artifacts.js +379 -0
  154. package/dist/multi-agent/checkpointer.d.ts +138 -0
  155. package/dist/multi-agent/checkpointer.js +471 -0
  156. package/dist/multi-agent/collision-utils.d.ts +16 -0
  157. package/dist/multi-agent/collision-utils.js +28 -0
  158. package/dist/multi-agent/context-resolver.d.ts +97 -0
  159. package/dist/multi-agent/context-resolver.js +316 -0
  160. package/dist/multi-agent/custom-agents.d.ts +83 -0
  161. package/dist/multi-agent/custom-agents.js +227 -0
  162. package/dist/multi-agent/delegation-tracker.d.ts +157 -0
  163. package/dist/multi-agent/delegation-tracker.js +243 -0
  164. package/dist/multi-agent/file-lock-hook.d.ts +29 -0
  165. package/dist/multi-agent/file-lock-hook.js +97 -0
  166. package/dist/multi-agent/file-locks.d.ts +58 -0
  167. package/dist/multi-agent/file-locks.js +194 -0
  168. package/dist/multi-agent/index.d.ts +24 -0
  169. package/dist/multi-agent/index.js +30 -0
  170. package/dist/multi-agent/mention-parser.d.ts +64 -0
  171. package/dist/multi-agent/mention-parser.js +146 -0
  172. package/dist/multi-agent/notification-manager.d.ts +84 -0
  173. package/dist/multi-agent/notification-manager.js +224 -0
  174. package/dist/multi-agent/pending-requests.d.ts +122 -0
  175. package/dist/multi-agent/pending-requests.js +155 -0
  176. package/dist/multi-agent/session-registry.d.ts +139 -0
  177. package/dist/multi-agent/session-registry.js +514 -0
  178. package/dist/multi-agent/shared-context.d.ts +293 -0
  179. package/dist/multi-agent/shared-context.js +671 -0
  180. package/dist/multi-agent/skill-requirements.d.ts +66 -0
  181. package/dist/multi-agent/skill-requirements.js +178 -0
  182. package/dist/multi-agent/task-assignment.d.ts +69 -0
  183. package/dist/multi-agent/task-assignment.js +123 -0
  184. package/dist/multi-agent/task-suggestion.d.ts +31 -0
  185. package/dist/multi-agent/task-suggestion.js +72 -0
  186. package/dist/multi-agent/team-agent.d.ts +201 -0
  187. package/dist/multi-agent/team-agent.js +488 -0
  188. package/dist/multi-agent/team.d.ts +286 -0
  189. package/dist/multi-agent/team.js +610 -0
  190. package/dist/multi-agent/tool-config.d.ts +110 -0
  191. package/dist/multi-agent/tool-config.js +661 -0
  192. package/dist/multi-agent/types.d.ts +211 -0
  193. package/dist/multi-agent/types.js +617 -0
  194. package/dist/prompts/plan-mode-prompt.d.ts +11 -0
  195. package/dist/prompts/plan-mode-prompt.js +95 -0
  196. package/dist/repl-helpers.d.ts +63 -0
  197. package/dist/repl-helpers.js +319 -0
  198. package/dist/repl-v2.d.ts +554 -0
  199. package/dist/repl-v2.js +3286 -0
  200. package/dist/session/index.d.ts +6 -0
  201. package/dist/session/index.js +6 -0
  202. package/dist/session/project-session-manager.d.ts +158 -0
  203. package/dist/session/project-session-manager.js +650 -0
  204. package/dist/settings/index.d.ts +156 -13
  205. package/dist/settings/index.js +377 -24
  206. package/dist/settings/mcp-config.d.ts +76 -0
  207. package/dist/settings/mcp-config.js +143 -0
  208. package/dist/settings/paths.d.ts +114 -0
  209. package/dist/settings/paths.js +270 -0
  210. package/dist/shared-handlers.d.ts +62 -0
  211. package/dist/shared-handlers.js +48 -0
  212. package/dist/system-prompt/builder.d.ts +5 -0
  213. package/dist/system-prompt/builder.js +4 -0
  214. package/dist/system-prompt/index.d.ts +18 -0
  215. package/dist/system-prompt/index.js +18 -0
  216. package/dist/system-prompt/modules.d.ts +5 -0
  217. package/dist/system-prompt/modules.js +4 -0
  218. package/dist/tabbed-menu.js +2 -1
  219. package/dist/templates/compilr-md-import.d.ts +16 -0
  220. package/dist/templates/compilr-md-import.js +241 -0
  221. package/dist/templates/compilr-md.js +10 -58
  222. package/dist/templates/config-json.d.ts +1 -25
  223. package/dist/templates/index.d.ts +2 -0
  224. package/dist/templates/index.js +35 -75
  225. package/dist/themes/colors.js +3 -1
  226. package/dist/themes/registry.d.ts +5 -36
  227. package/dist/themes/registry.js +11 -95
  228. package/dist/themes/types.d.ts +3 -38
  229. package/dist/themes/types.js +2 -2
  230. package/dist/tool-names.d.ts +108 -0
  231. package/dist/tool-names.js +227 -0
  232. package/dist/tools/anchor-tools.d.ts +31 -0
  233. package/dist/tools/anchor-tools.js +255 -0
  234. package/dist/tools/artifact-tools.d.ts +42 -0
  235. package/dist/tools/artifact-tools.js +328 -0
  236. package/dist/tools/ask-user-simple.d.ts +1 -1
  237. package/dist/tools/ask-user-simple.js +2 -1
  238. package/dist/tools/ask-user.d.ts +1 -1
  239. package/dist/tools/ask-user.js +2 -1
  240. package/dist/tools/backlog-wrappers.d.ts +56 -0
  241. package/dist/tools/backlog-wrappers.js +353 -0
  242. package/dist/tools/backlog.d.ts +2 -2
  243. package/dist/tools/backlog.js +2 -2
  244. package/dist/tools/db-tools.d.ts +12 -0
  245. package/dist/tools/db-tools.js +14 -0
  246. package/dist/tools/delegate-background.d.ts +27 -0
  247. package/dist/tools/delegate-background.js +115 -0
  248. package/dist/tools/delegate.d.ts +22 -0
  249. package/dist/tools/delegate.js +97 -0
  250. package/dist/tools/delegation-status.d.ts +16 -0
  251. package/dist/tools/delegation-status.js +128 -0
  252. package/dist/tools/document-db.d.ts +43 -0
  253. package/dist/tools/document-db.js +220 -0
  254. package/dist/tools/guide-tool.d.ts +12 -0
  255. package/dist/tools/guide-tool.js +59 -0
  256. package/dist/tools/handoff.d.ts +25 -0
  257. package/dist/tools/handoff.js +99 -0
  258. package/dist/tools/meta-tools.d.ts +26 -0
  259. package/dist/tools/meta-tools.js +47 -0
  260. package/dist/tools/plan-tools.d.ts +54 -0
  261. package/dist/tools/plan-tools.js +338 -0
  262. package/dist/tools/platform-adapter.d.ts +29 -0
  263. package/dist/tools/platform-adapter.js +394 -0
  264. package/dist/tools/project-db.d.ts +34 -0
  265. package/dist/tools/project-db.js +39 -0
  266. package/dist/tools/recall-work-tool.d.ts +18 -0
  267. package/dist/tools/recall-work-tool.js +82 -0
  268. package/dist/tools/workitem-db.d.ts +135 -0
  269. package/dist/tools/workitem-db.js +730 -0
  270. package/dist/tools.d.ts +67 -2
  271. package/dist/tools.js +238 -38
  272. package/dist/ui/ask-user-overlay.d.ts +2 -2
  273. package/dist/ui/ask-user-overlay.js +443 -535
  274. package/dist/ui/ask-user-simple-overlay.d.ts +2 -2
  275. package/dist/ui/ask-user-simple-overlay.js +182 -209
  276. package/dist/ui/autocomplete-controller.d.ts +42 -0
  277. package/dist/ui/autocomplete-controller.js +384 -0
  278. package/dist/ui/base/index.d.ts +26 -0
  279. package/dist/ui/base/index.js +33 -0
  280. package/dist/ui/base/inline-overlay-utils.d.ts +217 -0
  281. package/dist/ui/base/inline-overlay-utils.js +320 -0
  282. package/dist/ui/base/inline-overlay.d.ts +159 -0
  283. package/dist/ui/base/inline-overlay.js +257 -0
  284. package/dist/ui/base/key-utils.d.ts +15 -0
  285. package/dist/ui/base/key-utils.js +30 -0
  286. package/dist/ui/base/overlay-base-v2.d.ts +203 -0
  287. package/dist/ui/base/overlay-base-v2.js +260 -0
  288. package/dist/ui/base/overlay-base.d.ts +156 -0
  289. package/dist/ui/base/overlay-base.js +238 -0
  290. package/dist/ui/base/overlay-lifecycle.d.ts +65 -0
  291. package/dist/ui/base/overlay-lifecycle.js +159 -0
  292. package/dist/ui/base/overlay-types.d.ts +185 -0
  293. package/dist/ui/base/overlay-types.js +7 -0
  294. package/dist/ui/base/render-utils.d.ts +27 -0
  295. package/dist/ui/base/render-utils.js +36 -0
  296. package/dist/ui/base/screen-stack.d.ts +148 -0
  297. package/dist/ui/base/screen-stack.js +184 -0
  298. package/dist/ui/base/tabbed-list-overlay-v2.d.ts +118 -0
  299. package/dist/ui/base/tabbed-list-overlay-v2.js +335 -0
  300. package/dist/ui/base/tabbed-list-overlay.d.ts +153 -0
  301. package/dist/ui/base/tabbed-list-overlay.js +369 -0
  302. package/dist/ui/constants/labels.d.ts +14 -0
  303. package/dist/ui/constants/labels.js +51 -0
  304. package/dist/ui/conversation-store.d.ts +55 -0
  305. package/dist/ui/conversation-store.js +107 -0
  306. package/dist/ui/conversation.d.ts +75 -4
  307. package/dist/ui/conversation.js +376 -165
  308. package/dist/ui/diff.d.ts +7 -1
  309. package/dist/ui/diff.js +85 -48
  310. package/dist/ui/ephemeral.d.ts +1 -1
  311. package/dist/ui/ephemeral.js +4 -10
  312. package/dist/ui/features/index.d.ts +34 -0
  313. package/dist/ui/features/index.js +34 -0
  314. package/dist/ui/features/input-feature.d.ts +85 -0
  315. package/dist/ui/features/input-feature.js +238 -0
  316. package/dist/ui/features/list-feature.d.ts +155 -0
  317. package/dist/ui/features/list-feature.js +244 -0
  318. package/dist/ui/features/pagination-feature.d.ts +154 -0
  319. package/dist/ui/features/pagination-feature.js +238 -0
  320. package/dist/ui/features/search-feature.d.ts +148 -0
  321. package/dist/ui/features/search-feature.js +185 -0
  322. package/dist/ui/features/tab-feature.d.ts +194 -0
  323. package/dist/ui/features/tab-feature.js +307 -0
  324. package/dist/ui/file-autocomplete.d.ts +24 -0
  325. package/dist/ui/file-autocomplete.js +56 -0
  326. package/dist/ui/footer-renderer.d.ts +69 -0
  327. package/dist/ui/footer-renderer.js +431 -0
  328. package/dist/ui/footer.d.ts +181 -7
  329. package/dist/ui/footer.js +523 -74
  330. package/dist/ui/guardrail-overlay.d.ts +29 -0
  331. package/dist/ui/guardrail-overlay.js +145 -0
  332. package/dist/ui/index.d.ts +1 -1
  333. package/dist/ui/index.js +1 -3
  334. package/dist/ui/input-controller.d.ts +51 -0
  335. package/dist/ui/input-controller.js +176 -0
  336. package/dist/ui/input-prompt.d.ts +135 -33
  337. package/dist/ui/input-prompt.js +728 -337
  338. package/dist/ui/iteration-limit-overlay.d.ts +2 -2
  339. package/dist/ui/iteration-limit-overlay.js +92 -128
  340. package/dist/ui/keyboard-handler.d.ts +57 -0
  341. package/dist/ui/keyboard-handler.js +557 -0
  342. package/dist/ui/keys-overlay.d.ts +1 -0
  343. package/dist/ui/keys-overlay.js +203 -141
  344. package/dist/ui/line-utils.d.ts +88 -0
  345. package/dist/ui/line-utils.js +150 -0
  346. package/dist/ui/live-region-facade.d.ts +42 -0
  347. package/dist/ui/live-region-facade.js +205 -0
  348. package/dist/ui/live-region.d.ts +157 -0
  349. package/dist/ui/live-region.js +379 -0
  350. package/dist/ui/mascot/expressions.d.ts +32 -0
  351. package/dist/ui/mascot/expressions.js +213 -0
  352. package/dist/ui/mascot/index.d.ts +8 -0
  353. package/dist/ui/mascot/index.js +8 -0
  354. package/dist/ui/mascot/renderer.d.ts +19 -0
  355. package/dist/ui/mascot/renderer.js +132 -0
  356. package/dist/ui/overlay/data/tutorial-content.d.ts +9 -0
  357. package/dist/ui/overlay/data/tutorial-content.js +9 -0
  358. package/dist/ui/overlay/data/tutorial-registry.d.ts +12 -0
  359. package/dist/ui/overlay/data/tutorial-registry.js +116 -0
  360. package/dist/ui/overlay/data/tutorial-types.d.ts +35 -0
  361. package/dist/ui/overlay/data/tutorial-types.js +6 -0
  362. package/dist/ui/overlay/data/tutorials/basics/first-conversation.d.ts +7 -0
  363. package/dist/ui/overlay/data/tutorials/basics/first-conversation.js +220 -0
  364. package/dist/ui/overlay/data/tutorials/basics/first-project.d.ts +7 -0
  365. package/dist/ui/overlay/data/tutorials/basics/first-project.js +284 -0
  366. package/dist/ui/overlay/data/tutorials/basics/navigation.d.ts +8 -0
  367. package/dist/ui/overlay/data/tutorials/basics/navigation.js +22 -0
  368. package/dist/ui/overlay/data/tutorials/basics/welcome.d.ts +7 -0
  369. package/dist/ui/overlay/data/tutorials/basics/welcome.js +174 -0
  370. package/dist/ui/overlay/data/tutorials/config/context-management.d.ts +7 -0
  371. package/dist/ui/overlay/data/tutorials/config/context-management.js +158 -0
  372. package/dist/ui/overlay/data/tutorials/config/mcp-servers.d.ts +8 -0
  373. package/dist/ui/overlay/data/tutorials/config/mcp-servers.js +155 -0
  374. package/dist/ui/overlay/data/tutorials/config/model-selection.d.ts +7 -0
  375. package/dist/ui/overlay/data/tutorials/config/model-selection.js +162 -0
  376. package/dist/ui/overlay/data/tutorials/config/permissions-safety.d.ts +7 -0
  377. package/dist/ui/overlay/data/tutorials/config/permissions-safety.js +163 -0
  378. package/dist/ui/overlay/data/tutorials/config/settings-config.d.ts +7 -0
  379. package/dist/ui/overlay/data/tutorials/config/settings-config.js +166 -0
  380. package/dist/ui/overlay/data/tutorials/planning/arch.d.ts +7 -0
  381. package/dist/ui/overlay/data/tutorials/planning/arch.js +168 -0
  382. package/dist/ui/overlay/data/tutorials/planning/backlog.d.ts +7 -0
  383. package/dist/ui/overlay/data/tutorials/planning/backlog.js +103 -0
  384. package/dist/ui/overlay/data/tutorials/planning/build.d.ts +7 -0
  385. package/dist/ui/overlay/data/tutorials/planning/build.js +173 -0
  386. package/dist/ui/overlay/data/tutorials/planning/design.d.ts +7 -0
  387. package/dist/ui/overlay/data/tutorials/planning/design.js +205 -0
  388. package/dist/ui/overlay/data/tutorials/planning/docs.d.ts +7 -0
  389. package/dist/ui/overlay/data/tutorials/planning/docs.js +143 -0
  390. package/dist/ui/overlay/data/tutorials/planning/prd.d.ts +7 -0
  391. package/dist/ui/overlay/data/tutorials/planning/prd.js +173 -0
  392. package/dist/ui/overlay/data/tutorials/planning/scaffold.d.ts +7 -0
  393. package/dist/ui/overlay/data/tutorials/planning/scaffold.js +164 -0
  394. package/dist/ui/overlay/data/tutorials/planning/sketch.d.ts +7 -0
  395. package/dist/ui/overlay/data/tutorials/planning/sketch.js +58 -0
  396. package/dist/ui/overlay/data/tutorials/projects/anchors.d.ts +7 -0
  397. package/dist/ui/overlay/data/tutorials/projects/anchors.js +248 -0
  398. package/dist/ui/overlay/data/tutorials/projects/import-project.d.ts +7 -0
  399. package/dist/ui/overlay/data/tutorials/projects/import-project.js +172 -0
  400. package/dist/ui/overlay/data/tutorials/projects/managing-projects.d.ts +8 -0
  401. package/dist/ui/overlay/data/tutorials/projects/managing-projects.js +212 -0
  402. package/dist/ui/overlay/data/tutorials/projects/new-project.d.ts +7 -0
  403. package/dist/ui/overlay/data/tutorials/projects/new-project.js +251 -0
  404. package/dist/ui/overlay/data/tutorials/projects/session-management.d.ts +7 -0
  405. package/dist/ui/overlay/data/tutorials/projects/session-management.js +169 -0
  406. package/dist/ui/overlay/data/tutorials/teams/background-execution.d.ts +7 -0
  407. package/dist/ui/overlay/data/tutorials/teams/background-execution.js +171 -0
  408. package/dist/ui/overlay/data/tutorials/teams/multi-terminal.d.ts +8 -0
  409. package/dist/ui/overlay/data/tutorials/teams/multi-terminal.js +147 -0
  410. package/dist/ui/overlay/data/tutorials/teams/task-assignment.d.ts +7 -0
  411. package/dist/ui/overlay/data/tutorials/teams/task-assignment.js +204 -0
  412. package/dist/ui/overlay/data/tutorials/teams/team-overview.d.ts +7 -0
  413. package/dist/ui/overlay/data/tutorials/teams/team-overview.js +165 -0
  414. package/dist/ui/overlay/data/tutorials/teams/working-with-agents.d.ts +7 -0
  415. package/dist/ui/overlay/data/tutorials/teams/working-with-agents.js +172 -0
  416. package/dist/ui/overlay/impl/agents-overlay-v2.d.ts +45 -0
  417. package/dist/ui/overlay/impl/agents-overlay-v2.js +814 -0
  418. package/dist/ui/overlay/impl/anchors-overlay-v2.d.ts +47 -0
  419. package/dist/ui/overlay/impl/anchors-overlay-v2.js +749 -0
  420. package/dist/ui/overlay/impl/arch-type-overlay-v2.d.ts +37 -0
  421. package/dist/ui/overlay/impl/arch-type-overlay-v2.js +240 -0
  422. package/dist/ui/overlay/impl/artifact-detail-overlay-v2.d.ts +43 -0
  423. package/dist/ui/overlay/impl/artifact-detail-overlay-v2.js +232 -0
  424. package/dist/ui/overlay/impl/artifact-overlay-v2.d.ts +40 -0
  425. package/dist/ui/overlay/impl/artifact-overlay-v2.js +115 -0
  426. package/dist/ui/overlay/impl/ask-user-overlay-v2.d.ts +72 -0
  427. package/dist/ui/overlay/impl/ask-user-overlay-v2.js +581 -0
  428. package/dist/ui/overlay/impl/ask-user-simple-overlay-v2.d.ts +46 -0
  429. package/dist/ui/overlay/impl/ask-user-simple-overlay-v2.js +204 -0
  430. package/dist/ui/overlay/impl/background-overlay-v2.d.ts +40 -0
  431. package/dist/ui/overlay/impl/background-overlay-v2.js +147 -0
  432. package/dist/ui/overlay/impl/backlog-overlay-v2.d.ts +52 -0
  433. package/dist/ui/overlay/impl/backlog-overlay-v2.js +681 -0
  434. package/dist/ui/overlay/impl/changelog-overlay-v2.d.ts +44 -0
  435. package/dist/ui/overlay/impl/changelog-overlay-v2.js +165 -0
  436. package/dist/ui/overlay/impl/commands-overlay-v2.d.ts +33 -0
  437. package/dist/ui/overlay/impl/commands-overlay-v2.js +439 -0
  438. package/dist/ui/overlay/impl/config-overlay-v2.d.ts +111 -0
  439. package/dist/ui/overlay/impl/config-overlay-v2.js +718 -0
  440. package/dist/ui/overlay/impl/custom-agent-form-overlay-v2.d.ts +83 -0
  441. package/dist/ui/overlay/impl/custom-agent-form-overlay-v2.js +711 -0
  442. package/dist/ui/overlay/impl/dashboard-overlay-v2.d.ts +57 -0
  443. package/dist/ui/overlay/impl/dashboard-overlay-v2.js +382 -0
  444. package/dist/ui/overlay/impl/delegations-overlay-v2.d.ts +28 -0
  445. package/dist/ui/overlay/impl/delegations-overlay-v2.js +279 -0
  446. package/dist/ui/overlay/impl/docs-overlay-v2.d.ts +45 -0
  447. package/dist/ui/overlay/impl/docs-overlay-v2.js +117 -0
  448. package/dist/ui/overlay/impl/document-detail-overlay-v2.d.ts +84 -0
  449. package/dist/ui/overlay/impl/document-detail-overlay-v2.js +1112 -0
  450. package/dist/ui/overlay/impl/filter-overlay-v2.d.ts +41 -0
  451. package/dist/ui/overlay/impl/filter-overlay-v2.js +110 -0
  452. package/dist/ui/overlay/impl/games-overlay-v2.d.ts +31 -0
  453. package/dist/ui/overlay/impl/games-overlay-v2.js +135 -0
  454. package/dist/ui/overlay/impl/guardrail-overlay-v2.d.ts +43 -0
  455. package/dist/ui/overlay/impl/guardrail-overlay-v2.js +114 -0
  456. package/dist/ui/overlay/impl/help-overlay-v2.d.ts +57 -0
  457. package/dist/ui/overlay/impl/help-overlay-v2.js +287 -0
  458. package/dist/ui/overlay/impl/init-setup-overlay-v2.d.ts +25 -0
  459. package/dist/ui/overlay/impl/init-setup-overlay-v2.js +97 -0
  460. package/dist/ui/overlay/impl/iteration-limit-overlay-v2.d.ts +35 -0
  461. package/dist/ui/overlay/impl/iteration-limit-overlay-v2.js +105 -0
  462. package/dist/ui/overlay/impl/keys-overlay-v2.d.ts +41 -0
  463. package/dist/ui/overlay/impl/keys-overlay-v2.js +248 -0
  464. package/dist/ui/overlay/impl/login-overlay-v2.d.ts +49 -0
  465. package/dist/ui/overlay/impl/login-overlay-v2.js +277 -0
  466. package/dist/ui/overlay/impl/mascot-overlay-v2.d.ts +41 -0
  467. package/dist/ui/overlay/impl/mascot-overlay-v2.js +138 -0
  468. package/dist/ui/overlay/impl/mcp-overlay-v2.d.ts +63 -0
  469. package/dist/ui/overlay/impl/mcp-overlay-v2.js +907 -0
  470. package/dist/ui/overlay/impl/model-overlay-v2.d.ts +93 -0
  471. package/dist/ui/overlay/impl/model-overlay-v2.js +1143 -0
  472. package/dist/ui/overlay/impl/model-warning-overlay-v2.d.ts +46 -0
  473. package/dist/ui/overlay/impl/model-warning-overlay-v2.js +132 -0
  474. package/dist/ui/overlay/impl/new-overlay-v2.d.ts +108 -0
  475. package/dist/ui/overlay/impl/new-overlay-v2.js +1243 -0
  476. package/dist/ui/overlay/impl/notifications-overlay-v2.d.ts +20 -0
  477. package/dist/ui/overlay/impl/notifications-overlay-v2.js +116 -0
  478. package/dist/ui/overlay/impl/onboarding-wizard-overlay-v2.d.ts +76 -0
  479. package/dist/ui/overlay/impl/onboarding-wizard-overlay-v2.js +728 -0
  480. package/dist/ui/overlay/impl/pending-overlay-v2.d.ts +51 -0
  481. package/dist/ui/overlay/impl/pending-overlay-v2.js +445 -0
  482. package/dist/ui/overlay/impl/permission-overlay-v2.d.ts +36 -0
  483. package/dist/ui/overlay/impl/permission-overlay-v2.js +380 -0
  484. package/dist/ui/overlay/impl/permissions-overlay-v2.d.ts +85 -0
  485. package/dist/ui/overlay/impl/permissions-overlay-v2.js +820 -0
  486. package/dist/ui/overlay/impl/plan-approval-overlay-v2.d.ts +35 -0
  487. package/dist/ui/overlay/impl/plan-approval-overlay-v2.js +181 -0
  488. package/dist/ui/overlay/impl/project-edit-overlay-v2.d.ts +36 -0
  489. package/dist/ui/overlay/impl/project-edit-overlay-v2.js +195 -0
  490. package/dist/ui/overlay/impl/projects-overlay-v2.d.ts +37 -0
  491. package/dist/ui/overlay/impl/projects-overlay-v2.js +733 -0
  492. package/dist/ui/overlay/impl/reset-overlay-v2.d.ts +39 -0
  493. package/dist/ui/overlay/impl/reset-overlay-v2.js +107 -0
  494. package/dist/ui/overlay/impl/resume-overlay-v2.d.ts +60 -0
  495. package/dist/ui/overlay/impl/resume-overlay-v2.js +414 -0
  496. package/dist/ui/overlay/impl/session-mode-overlay-v2.d.ts +43 -0
  497. package/dist/ui/overlay/impl/session-mode-overlay-v2.js +124 -0
  498. package/dist/ui/overlay/impl/tasks-overlay-v2.d.ts +28 -0
  499. package/dist/ui/overlay/impl/tasks-overlay-v2.js +283 -0
  500. package/dist/ui/overlay/impl/team-overlay-v2.d.ts +86 -0
  501. package/dist/ui/overlay/impl/team-overlay-v2.js +692 -0
  502. package/dist/ui/overlay/impl/terminals-overlay-v2.d.ts +26 -0
  503. package/dist/ui/overlay/impl/terminals-overlay-v2.js +217 -0
  504. package/dist/ui/overlay/impl/theme-overlay-v2.d.ts +42 -0
  505. package/dist/ui/overlay/impl/theme-overlay-v2.js +135 -0
  506. package/dist/ui/overlay/impl/tools-overlay-v2.d.ts +47 -0
  507. package/dist/ui/overlay/impl/tools-overlay-v2.js +214 -0
  508. package/dist/ui/overlay/impl/tutorial-overlay-v2.d.ts +45 -0
  509. package/dist/ui/overlay/impl/tutorial-overlay-v2.js +212 -0
  510. package/dist/ui/overlay/impl/workflow-overlay-v2.d.ts +80 -0
  511. package/dist/ui/overlay/impl/workflow-overlay-v2.js +641 -0
  512. package/dist/ui/overlay/index.d.ts +52 -0
  513. package/dist/ui/overlay/index.js +54 -0
  514. package/dist/ui/overlay/key-utils.d.ts +6 -0
  515. package/dist/ui/overlay/key-utils.js +6 -0
  516. package/dist/ui/overlay/types.d.ts +140 -0
  517. package/dist/ui/overlay/types.js +22 -0
  518. package/dist/ui/overlay-manager.d.ts +43 -0
  519. package/dist/ui/overlay-manager.js +238 -0
  520. package/dist/ui/overlays.d.ts +0 -4
  521. package/dist/ui/overlays.js +4 -460
  522. package/dist/ui/permission-overlay.d.ts +1 -1
  523. package/dist/ui/permission-overlay.js +189 -300
  524. package/dist/ui/providers/types.d.ts +178 -0
  525. package/dist/ui/providers/types.js +9 -0
  526. package/dist/ui/render-modes.d.ts +36 -0
  527. package/dist/ui/render-modes.js +44 -0
  528. package/dist/ui/startup-menu.d.ts +36 -0
  529. package/dist/ui/startup-menu.js +236 -0
  530. package/dist/ui/status-bar-controller.d.ts +33 -0
  531. package/dist/ui/status-bar-controller.js +99 -0
  532. package/dist/ui/subagent-renderer.d.ts +117 -0
  533. package/dist/ui/subagent-renderer.js +318 -0
  534. package/dist/ui/terminal-autocomplete-utils.d.ts +23 -0
  535. package/dist/ui/terminal-autocomplete-utils.js +83 -0
  536. package/dist/ui/terminal-codes.d.ts +94 -0
  537. package/dist/ui/terminal-codes.js +124 -0
  538. package/dist/ui/terminal-line-builders.d.ts +17 -0
  539. package/dist/ui/terminal-line-builders.js +42 -0
  540. package/dist/ui/terminal-render-item.d.ts +16 -0
  541. package/dist/ui/terminal-render-item.js +267 -0
  542. package/dist/ui/terminal-renderer.d.ts +220 -0
  543. package/dist/ui/terminal-renderer.js +750 -0
  544. package/dist/ui/terminal-types.d.ts +179 -0
  545. package/dist/ui/terminal-types.js +34 -0
  546. package/dist/ui/terminal-ui.d.ts +331 -0
  547. package/dist/ui/terminal-ui.js +819 -0
  548. package/dist/ui/terminal.d.ts +20 -0
  549. package/dist/ui/terminal.js +72 -0
  550. package/dist/ui/todo-zone.d.ts +19 -1
  551. package/dist/ui/todo-zone.js +124 -38
  552. package/dist/ui/tool-formatters.d.ts +16 -0
  553. package/dist/ui/tool-formatters.js +1027 -0
  554. package/dist/ui/turn-metrics.d.ts +56 -0
  555. package/dist/ui/turn-metrics.js +75 -0
  556. package/dist/ui/types.d.ts +28 -0
  557. package/dist/ui/types.js +1 -0
  558. package/dist/ui/vscode-diff-ipc.d.ts +102 -0
  559. package/dist/ui/vscode-diff-ipc.js +385 -0
  560. package/dist/utils/credentials.d.ts +24 -5
  561. package/dist/utils/credentials.js +123 -9
  562. package/dist/utils/debug-log.d.ts +28 -0
  563. package/dist/utils/debug-log.js +57 -0
  564. package/dist/utils/format-tokens.d.ts +13 -0
  565. package/dist/utils/format-tokens.js +18 -0
  566. package/dist/utils/git-config.d.ts +26 -0
  567. package/dist/utils/git-config.js +54 -0
  568. package/dist/utils/message-utils.d.ts +61 -0
  569. package/dist/utils/message-utils.js +72 -0
  570. package/dist/utils/model-tiers.d.ts +8 -1
  571. package/dist/utils/model-tiers.js +39 -17
  572. package/dist/utils/open-browser.d.ts +5 -0
  573. package/dist/utils/open-browser.js +32 -0
  574. package/dist/utils/path-safety.d.ts +56 -0
  575. package/dist/utils/path-safety.js +240 -0
  576. package/dist/utils/project-detection.d.ts +58 -0
  577. package/dist/utils/project-detection.js +424 -0
  578. package/dist/utils/project-memory.js +2 -1
  579. package/dist/utils/project-status.d.ts +2 -2
  580. package/dist/utils/startup-perf.d.ts +18 -0
  581. package/dist/utils/startup-perf.js +60 -0
  582. package/dist/utils/token-tracker.d.ts +62 -0
  583. package/dist/utils/token-tracker.js +150 -0
  584. package/dist/utils/token-types.d.ts +23 -0
  585. package/dist/utils/token-types.js +18 -0
  586. package/dist/utils/types/config-types.d.ts +32 -0
  587. package/dist/utils/types/config-types.js +8 -0
  588. package/dist/utils/update-checker.d.ts +28 -0
  589. package/dist/utils/update-checker.js +106 -0
  590. package/dist/utils/version.d.ts +7 -0
  591. package/dist/utils/version.js +10 -0
  592. package/dist/utils/vscode-detect.d.ts +39 -0
  593. package/dist/utils/vscode-detect.js +137 -0
  594. package/dist/workflow/guided-mode-injector.d.ts +42 -0
  595. package/dist/workflow/guided-mode-injector.js +191 -0
  596. package/dist/workflow/index.d.ts +8 -0
  597. package/dist/workflow/index.js +8 -0
  598. package/dist/workflow/step-criteria.d.ts +62 -0
  599. package/dist/workflow/step-criteria.js +150 -0
  600. package/dist/workflow/step-tracker.d.ts +92 -0
  601. package/dist/workflow/step-tracker.js +141 -0
  602. package/package.json +32 -12
  603. package/dist/index.old.d.ts +0 -7
  604. package/dist/index.old.js +0 -1014
  605. package/dist/repl.d.ts +0 -121
  606. package/dist/repl.js +0 -1878
  607. package/dist/templates/claude-md.d.ts +0 -7
  608. package/dist/templates/claude-md.js +0 -189
  609. package/dist/test-autocomplete.d.ts +0 -7
  610. package/dist/test-autocomplete.js +0 -85
  611. package/dist/test-tabbed-menu.d.ts +0 -7
  612. package/dist/test-tabbed-menu.js +0 -25
  613. package/dist/tool-selector.d.ts +0 -71
  614. package/dist/tool-selector.js +0 -184
  615. package/dist/ui/agents-overlay.d.ts +0 -12
  616. package/dist/ui/agents-overlay.js +0 -501
  617. package/dist/ui/arch-type-overlay.d.ts +0 -20
  618. package/dist/ui/arch-type-overlay.js +0 -229
  619. package/dist/ui/backlog-overlay.d.ts +0 -17
  620. package/dist/ui/backlog-overlay.js +0 -786
  621. package/dist/ui/commands-overlay.d.ts +0 -11
  622. package/dist/ui/commands-overlay.js +0 -410
  623. package/dist/ui/config-overlay.d.ts +0 -34
  624. package/dist/ui/config-overlay.js +0 -977
  625. package/dist/ui/init-overlay.d.ts +0 -24
  626. package/dist/ui/init-overlay.js +0 -525
  627. package/dist/ui/input-prompt-v2.d.ts +0 -179
  628. package/dist/ui/input-prompt-v2.js +0 -991
  629. package/dist/ui/model-warning-overlay.d.ts +0 -30
  630. package/dist/ui/model-warning-overlay.js +0 -171
  631. package/dist/ui/tools-overlay.d.ts +0 -26
  632. package/dist/ui/tools-overlay.js +0 -278
  633. package/dist/ui/tutorial-overlay.d.ts +0 -10
  634. package/dist/ui/tutorial-overlay.js +0 -936
@@ -2,13 +2,14 @@
2
2
  * Permission Overlay
3
3
  *
4
4
  * Modal overlay for tool permission requests.
5
- * Uses the same pattern as ask-user-simple-overlay for consistent behavior.
5
+ * Renders inline above the footer using InlineOverlay base class.
6
6
  */
7
7
  import chalk from 'chalk';
8
- import * as terminal from './terminal.js';
9
8
  import { getStyles } from '../themes/index.js';
9
+ import { InlineOverlay } from './base/inline-overlay.js';
10
+ import { truncate } from './base/index.js';
10
11
  // =============================================================================
11
- // Helpers
12
+ // Helpers (unchanged from original)
12
13
  // =============================================================================
13
14
  /**
14
15
  * Format a value for display, handling nested structures
@@ -16,9 +17,8 @@ import { getStyles } from '../themes/index.js';
16
17
  */
17
18
  function formatValue(value, maxLen) {
18
19
  if (typeof value === 'string') {
19
- // Replace all newlines with ↵ to prevent multi-line rendering
20
20
  const singleLine = value.replace(/\r?\n|\r/g, '↵');
21
- return singleLine.length > maxLen ? singleLine.slice(0, maxLen) + '...' : singleLine;
21
+ return truncate(singleLine, maxLen);
22
22
  }
23
23
  if (typeof value === 'boolean' || typeof value === 'number') {
24
24
  return String(value);
@@ -26,18 +26,19 @@ function formatValue(value, maxLen) {
26
26
  if (Array.isArray(value)) {
27
27
  if (value.length === 0)
28
28
  return '[]';
29
- // Show array contents briefly
30
29
  const items = value.slice(0, 3).map((item) => {
31
30
  if (typeof item === 'object' && item !== null) {
32
- // For objects in array, show key highlights
33
31
  const obj = item;
34
32
  const keys = Object.keys(obj);
35
33
  if (keys.length === 0)
36
34
  return '{}';
37
- const preview = keys.slice(0, 2).map(k => {
35
+ const preview = keys
36
+ .slice(0, 2)
37
+ .map((k) => {
38
38
  const v = obj[k];
39
39
  return `${k}: ${formatValue(v, 20)}`;
40
- }).join(', ');
40
+ })
41
+ .join(', ');
41
42
  return `{${preview}${keys.length > 2 ? ', ...' : ''}}`;
42
43
  }
43
44
  return formatValue(item, 20);
@@ -51,21 +52,20 @@ function formatValue(value, maxLen) {
51
52
  const keys = Object.keys(obj);
52
53
  if (keys.length === 0)
53
54
  return '{}';
54
- const preview = keys.slice(0, 3).map(k => `${k}: ${formatValue(obj[k], 15)}`).join(', ');
55
+ const preview = keys
56
+ .slice(0, 3)
57
+ .map((k) => `${k}: ${formatValue(obj[k], 15)}`)
58
+ .join(', ');
55
59
  return keys.length > 3 ? `{${preview}, ...}` : `{${preview}}`;
56
60
  }
57
61
  return String(value);
58
62
  }
59
63
  /**
60
64
  * Format tool args for display.
61
- * - For bash commands: show the command prominently
62
- * - For file operations: show the path
63
- * - For backlog operations: show action and details clearly
64
- * - Strip JSON syntax for readability
65
65
  */
66
66
  function formatArgs(toolName, args, maxWidth) {
67
67
  const lines = [];
68
- // Special handling for bash commands - show full command
68
+ // Special handling for bash commands
69
69
  if (toolName === 'bash' && typeof args.command === 'string') {
70
70
  const cmd = args.command;
71
71
  const prefix = 'Command: ';
@@ -76,51 +76,13 @@ function formatArgs(toolName, args, maxWidth) {
76
76
  else {
77
77
  lines.push(prefix);
78
78
  const maxCmdLength = availableWidth * 3;
79
- const truncatedCmd = cmd.length > maxCmdLength
80
- ? cmd.slice(0, maxCmdLength) + '...'
81
- : cmd;
79
+ const truncatedCmd = truncate(cmd, maxCmdLength);
82
80
  lines.push(' ' + truncatedCmd);
83
81
  }
84
82
  return lines;
85
83
  }
86
- // Special handling for backlog_write - show action details clearly
87
- if (toolName === 'backlog_write') {
88
- const action = args.action;
89
- if (action) {
90
- lines.push(`Action: ${action}`);
91
- }
92
- // For updates, show what's being changed
93
- if (action === 'update' && args.id) {
94
- lines.push(`Item: ${typeof args.id === 'string' ? args.id : JSON.stringify(args.id)}`);
95
- if (args.updates && typeof args.updates === 'object') {
96
- const updates = args.updates;
97
- const changes = Object.entries(updates)
98
- .map(([k, v]) => `${k} → ${formatValue(v, 25)}`)
99
- .join(', ');
100
- const maxChangesWidth = maxWidth - 14;
101
- lines.push(`Changes: ${changes.length > maxChangesWidth ? changes.slice(0, maxChangesWidth - 3) + '...' : changes}`);
102
- }
103
- }
104
- // For add, show what's being added
105
- if (action === 'add' && args.item && typeof args.item === 'object') {
106
- const item = args.item;
107
- if (item.id)
108
- lines.push(`ID: ${typeof item.id === 'string' ? item.id : JSON.stringify(item.id)}`);
109
- if (item.title) {
110
- const maxTitleLen = maxWidth - 12;
111
- const titleStr = formatValue(item.title, maxTitleLen);
112
- lines.push(`Title: ${titleStr}`);
113
- }
114
- if (item.type)
115
- lines.push(`Type: ${typeof item.type === 'string' ? item.type : JSON.stringify(item.type)}`);
116
- }
117
- // For delete, show what's being removed
118
- if (action === 'delete' && args.id) {
119
- lines.push(`Deleting: ${typeof args.id === 'string' ? args.id : JSON.stringify(args.id)}`);
120
- }
121
- return lines;
122
- }
123
- // Special handling for edit tool - show what's being changed
84
+ // Note: backlog_write special handling removed - tool deprecated in favor of workitem_* tools
85
+ // Special handling for edit tool
124
86
  if (toolName === 'edit') {
125
87
  const path = args.path ?? args.file_path ?? args.filePath;
126
88
  if (typeof path === 'string') {
@@ -131,24 +93,23 @@ function formatArgs(toolName, args, maxWidth) {
131
93
  const oldText = args.old_text ?? args.oldText ?? args.old_string ?? args.oldString;
132
94
  const newText = args.new_text ?? args.newText ?? args.new_string ?? args.newString;
133
95
  if (typeof oldText === 'string' && typeof newText === 'string') {
134
- const maxPreview = maxWidth - 8; // "- " or "+ " plus buffer
96
+ const maxPreview = maxWidth - 8;
135
97
  lines.push(`- ${formatValue(oldText, maxPreview)}`);
136
98
  lines.push(`+ ${formatValue(newText, maxPreview)}`);
137
99
  }
138
100
  return lines;
139
101
  }
140
- // Special handling for write_file - show path and content preview
102
+ // Special handling for write_file
141
103
  if (toolName === 'write_file') {
142
104
  const path = args.path ?? args.file_path ?? args.filePath;
143
105
  if (typeof path === 'string') {
144
- const maxPathLen = maxWidth - 10; // "File: " + buffer
106
+ const maxPathLen = maxWidth - 10;
145
107
  const truncPath = path.length > maxPathLen ? '...' + path.slice(-(maxPathLen - 3)) : path;
146
108
  lines.push(`File: ${truncPath}`);
147
109
  }
148
110
  const content = args.content;
149
111
  if (typeof content === 'string') {
150
- const maxContentLen = maxWidth - 15; // "Content: " + buffer
151
- // Use formatValue to handle newline replacement
112
+ const maxContentLen = maxWidth - 15;
152
113
  lines.push(`Content: ${formatValue(content, maxContentLen)}`);
153
114
  }
154
115
  return lines;
@@ -160,16 +121,15 @@ function formatArgs(toolName, args, maxWidth) {
160
121
  const truncPath = path.length > maxPathLen ? '...' + path.slice(-(maxPathLen - 3)) : path;
161
122
  lines.push('Path: ' + truncPath);
162
123
  }
163
- // Show other args in a clean format (key: value), one per line for clarity
124
+ // Show other args
164
125
  const skipKeys = ['path', 'file_path', 'filePath', 'command'];
165
126
  for (const [key, value] of Object.entries(args)) {
166
127
  if (skipKeys.includes(key))
167
128
  continue;
168
129
  const valueStr = formatValue(value, maxWidth - key.length - 6);
169
130
  const line = `${key}: ${valueStr}`;
170
- // Truncate if too long
171
131
  if (line.length > maxWidth - 4) {
172
- lines.push(line.slice(0, maxWidth - 7) + '...');
132
+ lines.push(truncate(line, maxWidth - 4));
173
133
  }
174
134
  else {
175
135
  lines.push(line);
@@ -186,16 +146,13 @@ function formatArgsForDetail(toolName, args, maxWidth) {
186
146
  lines.push('');
187
147
  for (const [key, value] of Object.entries(args)) {
188
148
  if (typeof value === 'string') {
189
- // For strings, show full content with word wrapping
190
149
  lines.push(`${key}:`);
191
- // Split by newlines first, then wrap each line
192
150
  const valueLines = value.split(/\r?\n/);
193
151
  for (const valueLine of valueLines) {
194
152
  if (valueLine.length <= maxWidth - 4) {
195
153
  lines.push(` ${valueLine}`);
196
154
  }
197
155
  else {
198
- // Word wrap long lines
199
156
  let remaining = valueLine;
200
157
  while (remaining.length > 0) {
201
158
  const chunk = remaining.slice(0, maxWidth - 4);
@@ -238,160 +195,181 @@ function formatArgsForDetail(toolName, args, maxWidth) {
238
195
  }
239
196
  return lines;
240
197
  }
241
- // Fixed height for detail view overlay (predictable rendering)
198
+ // Fixed height for detail view
242
199
  const DETAIL_VIEW_CONTENT_LINES = 15;
243
- // Note: Total = CONTENT_LINES + header(4) + footer(3) = 22 lines
244
- /**
245
- * Render the detail view as an overlay (fixed height)
246
- */
247
- function renderDetailView(options, state, contentLines, previousLineCount = 0) {
248
- const s = getStyles();
249
- const cols = terminal.getTerminalWidth();
250
- // Clear previous render
251
- if (previousLineCount > 0) {
252
- terminal.clearLinesAbove(previousLineCount);
200
+ // =============================================================================
201
+ // Permission Overlay Class
202
+ // =============================================================================
203
+ class PermissionOverlayImpl extends InlineOverlay {
204
+ options;
205
+ constructor(options) {
206
+ super();
207
+ this.options = options;
253
208
  }
254
- const lines = [];
255
- const border = s.muted('─'.repeat(Math.max(1, cols - 1)));
256
- // Header
257
- lines.push(border);
258
- lines.push(' ' + s.warning('⚠') + ' ' + chalk.bold('Permission Details') + s.muted(` (${options.toolName})`));
259
- lines.push(border);
260
- lines.push('');
261
- // Fixed visible area
262
- state.visibleLines = DETAIL_VIEW_CONTENT_LINES;
263
- state.totalLines = contentLines.length;
264
- // Show content with scroll
265
- const endLine = Math.min(state.scrollOffset + state.visibleLines, contentLines.length);
266
- for (let i = state.scrollOffset; i < endLine; i++) {
267
- const line = contentLines[i];
268
- // Truncate to prevent wrapping
269
- const safeLine = line.length > cols - 4 ? line.slice(0, cols - 7) + '...' : line;
270
- lines.push(' ' + safeLine);
209
+ getInitialState() {
210
+ return {
211
+ selectedIndex: 0, // Default to "Yes"
212
+ showingDetail: false,
213
+ detailScrollOffset: 0,
214
+ detailContentLines: [],
215
+ };
271
216
  }
272
- // Pad to fixed height
273
- const renderedLines = endLine - state.scrollOffset;
274
- for (let i = renderedLines; i < DETAIL_VIEW_CONTENT_LINES; i++) {
275
- lines.push('');
217
+ render() {
218
+ if (this.state.showingDetail) {
219
+ return this.renderDetailView();
220
+ }
221
+ return this.renderMainView();
276
222
  }
277
- // Footer with scroll indicator
278
- lines.push('');
279
- const scrollInfo = contentLines.length > state.visibleLines
280
- ? s.muted(` [${String(state.scrollOffset + 1)}-${String(endLine)}/${String(contentLines.length)}]`)
281
- : '';
282
- lines.push(border);
283
- lines.push(s.muted(' ↑↓/PgUp/PgDn Scroll · q/Esc Back') + scrollInfo);
284
- // Render all lines
285
- terminal.write(lines.join('\n'));
286
- return lines.length;
287
- }
288
- /**
289
- * Show the detail view (blocking, returns when user presses q/Esc)
290
- * Returns the line count so caller can clear it properly
291
- */
292
- async function showDetailView(options) {
293
- const cols = terminal.getTerminalWidth();
294
- const contentLines = formatArgsForDetail(options.toolName, options.args, cols - 4);
295
- const state = {
296
- scrollOffset: 0,
297
- totalLines: contentLines.length,
298
- visibleLines: DETAIL_VIEW_CONTENT_LINES,
299
- };
300
- let lineCount = 0;
301
- // Initial render (no previous lines to clear)
302
- lineCount = renderDetailView(options, state, contentLines, 0);
303
- return new Promise((resolve) => {
304
- const handleData = (data) => {
305
- const isEscape = data.length === 1 && data[0] === 0x1b;
306
- const isUpArrow = data.length === 3 && data[0] === 0x1b && data[1] === 0x5b && data[2] === 0x41;
307
- const isDownArrow = data.length === 3 && data[0] === 0x1b && data[1] === 0x5b && data[2] === 0x42;
308
- const isPageUp = data.length === 4 && data[0] === 0x1b && data[1] === 0x5b && data[2] === 0x35 && data[3] === 0x7e;
309
- const isPageDown = data.length === 4 && data[0] === 0x1b && data[1] === 0x5b && data[2] === 0x36 && data[3] === 0x7e;
310
- const key = data.toString().toLowerCase();
311
- // q or Escape = go back
312
- if (key === 'q' || isEscape) {
313
- process.stdin.removeListener('data', handleData);
314
- // Clear the detail view before returning
315
- terminal.clearLinesAbove(lineCount);
316
- resolve(lineCount);
317
- return;
318
- }
319
- // Scroll up
320
- if (isUpArrow) {
321
- state.scrollOffset = Math.max(0, state.scrollOffset - 1);
322
- }
323
- else if (isPageUp) {
324
- state.scrollOffset = Math.max(0, state.scrollOffset - state.visibleLines);
325
- }
326
- // Scroll down
327
- else if (isDownArrow) {
328
- const maxOffset = Math.max(0, state.totalLines - state.visibleLines);
329
- state.scrollOffset = Math.min(maxOffset, state.scrollOffset + 1);
223
+ renderMainView() {
224
+ const s = getStyles();
225
+ const lines = [];
226
+ const cols = this.getTerminalWidth();
227
+ const border = s.muted(''.repeat(Math.max(1, cols - 1)));
228
+ // Header
229
+ lines.push(border);
230
+ lines.push(' ' + s.warning('⚠') + ' ' + chalk.bold('Permission Required'));
231
+ lines.push('');
232
+ // Tool info
233
+ lines.push(' Tool: ' + s.primary(this.options.toolName));
234
+ // Format and display args
235
+ const maxArgWidth = cols - 6;
236
+ const argLines = formatArgs(this.options.toolName, this.options.args, maxArgWidth);
237
+ for (const argLine of argLines) {
238
+ const safeArg = truncate(argLine, maxArgWidth);
239
+ lines.push(' ' + s.muted(safeArg));
240
+ }
241
+ lines.push('');
242
+ // Options
243
+ const optionLabels = ['Yes, allow this', 'No, deny', 'Always allow this tool'];
244
+ const optionKeys = ['y', 'n', 'a'];
245
+ for (let i = 0; i < optionLabels.length; i++) {
246
+ const isCursor = this.state.selectedIndex === i;
247
+ const prefix = isCursor ? ' ' : ' ';
248
+ const key = `[${optionKeys[i]}] `;
249
+ if (isCursor) {
250
+ lines.push(s.primary(prefix + key + optionLabels[i]));
330
251
  }
331
- else if (isPageDown) {
332
- const maxOffset = Math.max(0, state.totalLines - state.visibleLines);
333
- state.scrollOffset = Math.min(maxOffset, state.scrollOffset + state.visibleLines);
252
+ else {
253
+ lines.push(s.muted(prefix + key + optionLabels[i]));
334
254
  }
335
- // Re-render with previous line count
336
- lineCount = renderDetailView(options, state, contentLines, lineCount);
337
- };
338
- process.stdin.on('data', handleData);
339
- });
340
- }
341
- // =============================================================================
342
- // Rendering
343
- // =============================================================================
344
- function render(options, state, previousLineCount = 0, targetLineCount = 0) {
345
- const s = getStyles();
346
- const lines = [];
347
- const cols = terminal.getTerminalWidth();
348
- const border = s.muted('─'.repeat(Math.max(1, cols - 1)));
349
- // Clear previous render
350
- if (previousLineCount > 0) {
351
- terminal.clearLinesAbove(previousLineCount);
255
+ }
256
+ // Footer
257
+ lines.push('');
258
+ lines.push(s.muted(' ↑↓ Navigate · Enter Select · y/n/a Quick select · ') + s.primary('d') + s.muted(' Details'));
259
+ lines.push(border);
260
+ return lines;
352
261
  }
353
- // Header
354
- lines.push(border);
355
- lines.push(' ' + s.warning('⚠') + ' ' + chalk.bold('Permission Required'));
356
- lines.push('');
357
- // Tool info
358
- lines.push(' Tool: ' + s.primary(options.toolName));
359
- // Format and display args
360
- // Use cols - 6 to account for ' ' indent and buffer for safety
361
- const maxArgWidth = cols - 6;
362
- const argLines = formatArgs(options.toolName, options.args, maxArgWidth);
363
- for (const argLine of argLines) {
364
- // Final safety truncation to prevent any line from wrapping
365
- const safeArg = argLine.length > maxArgWidth ? argLine.slice(0, maxArgWidth - 3) + '...' : argLine;
366
- lines.push(' ' + s.muted(safeArg));
262
+ renderDetailView() {
263
+ const s = getStyles();
264
+ const cols = this.getTerminalWidth();
265
+ const lines = [];
266
+ const border = s.muted('─'.repeat(Math.max(1, cols - 1)));
267
+ // Header
268
+ lines.push(border);
269
+ lines.push(' ' + s.warning('⚠') + ' ' + chalk.bold('Permission Details') + s.muted(` (${this.options.toolName})`));
270
+ lines.push(border);
271
+ lines.push('');
272
+ // Content with scroll
273
+ const contentLines = this.state.detailContentLines;
274
+ const visibleLines = DETAIL_VIEW_CONTENT_LINES;
275
+ const endLine = Math.min(this.state.detailScrollOffset + visibleLines, contentLines.length);
276
+ for (let i = this.state.detailScrollOffset; i < endLine; i++) {
277
+ const line = contentLines[i];
278
+ const safeLine = truncate(line, cols - 4);
279
+ lines.push(' ' + safeLine);
280
+ }
281
+ // Pad to fixed height
282
+ const renderedLines = endLine - this.state.detailScrollOffset;
283
+ for (let i = renderedLines; i < DETAIL_VIEW_CONTENT_LINES; i++) {
284
+ lines.push('');
285
+ }
286
+ // Footer with scroll indicator
287
+ lines.push('');
288
+ const scrollInfo = contentLines.length > visibleLines
289
+ ? s.muted(` [${String(this.state.detailScrollOffset + 1)}-${String(endLine)}/${String(contentLines.length)}]`)
290
+ : '';
291
+ lines.push(border);
292
+ lines.push(s.muted(' ↑↓/PgUp/PgDn Scroll · q/Esc Back') + scrollInfo);
293
+ return lines;
367
294
  }
368
- lines.push('');
369
- // Options
370
- const optionLabels = ['Yes, allow this', 'No, deny', 'Always allow this tool'];
371
- const optionKeys = ['y', 'n', 'a'];
372
- for (let i = 0; i < optionLabels.length; i++) {
373
- const isCursor = state.selectedIndex === i;
374
- const prefix = isCursor ? ' ❯ ' : ' ';
375
- const key = `[${optionKeys[i]}] `;
376
- if (isCursor) {
377
- lines.push(s.primary(prefix + key + optionLabels[i]));
295
+ handleKey(data) {
296
+ if (this.state.showingDetail) {
297
+ return this.handleDetailKey(data);
378
298
  }
379
- else {
380
- lines.push(s.muted(prefix + key + optionLabels[i]));
299
+ return this.handleMainKey(data);
300
+ }
301
+ handleMainKey(data) {
302
+ // Escape or Ctrl+C = deny
303
+ if (this.isEscapeKey(data) || this.isCtrlCKey(data)) {
304
+ return { type: 'close', result: 'deny' };
305
+ }
306
+ // Quick keys
307
+ const key = data.toString().toLowerCase();
308
+ if (key === 'y') {
309
+ return { type: 'close', result: 'allow' };
310
+ }
311
+ if (key === 'n') {
312
+ return { type: 'close', result: 'deny' };
313
+ }
314
+ if (key === 'a') {
315
+ return { type: 'close', result: 'allow-always' };
316
+ }
317
+ if (key === 'd') {
318
+ // Switch to detail view
319
+ const cols = this.getTerminalWidth();
320
+ this.state.showingDetail = true;
321
+ this.state.detailScrollOffset = 0;
322
+ this.state.detailContentLines = formatArgsForDetail(this.options.toolName, this.options.args, cols - 4);
323
+ return { type: 'continue' };
381
324
  }
325
+ // Arrow navigation
326
+ if (this.isUpArrowKey(data)) {
327
+ this.state.selectedIndex = Math.max(0, this.state.selectedIndex - 1);
328
+ }
329
+ else if (this.isDownArrowKey(data)) {
330
+ this.state.selectedIndex = Math.min(2, this.state.selectedIndex + 1);
331
+ }
332
+ else if (this.isEnterKey(data)) {
333
+ const results = ['allow', 'deny', 'allow-always'];
334
+ return { type: 'close', result: results[this.state.selectedIndex] };
335
+ }
336
+ return { type: 'continue' };
382
337
  }
383
- // Footer
384
- lines.push('');
385
- lines.push(s.muted(' ↑↓ Navigate · Enter Select · y/n/a Quick select · ') + s.primary('d') + s.muted(' Details'));
386
- // Bottom border
387
- lines.push(border);
388
- // Pad with empty lines to maintain consistent height
389
- while (lines.length < targetLineCount) {
390
- lines.push('');
338
+ handleDetailKey(data) {
339
+ const key = data.toString().toLowerCase();
340
+ const isPageUp = data.length === 4 && data[0] === 0x1b && data[1] === 0x5b && data[2] === 0x35 && data[3] === 0x7e;
341
+ const isPageDown = data.length === 4 && data[0] === 0x1b && data[1] === 0x5b && data[2] === 0x36 && data[3] === 0x7e;
342
+ // q or Escape = go back to main view
343
+ if (key === 'q' || this.isEscapeKey(data)) {
344
+ this.state.showingDetail = false;
345
+ return { type: 'continue' };
346
+ }
347
+ // Scroll
348
+ const visibleLines = DETAIL_VIEW_CONTENT_LINES;
349
+ const maxOffset = Math.max(0, this.state.detailContentLines.length - visibleLines);
350
+ if (this.isUpArrowKey(data)) {
351
+ this.state.detailScrollOffset = Math.max(0, this.state.detailScrollOffset - 1);
352
+ }
353
+ else if (isPageUp) {
354
+ this.state.detailScrollOffset = Math.max(0, this.state.detailScrollOffset - visibleLines);
355
+ }
356
+ else if (this.isDownArrowKey(data)) {
357
+ this.state.detailScrollOffset = Math.min(maxOffset, this.state.detailScrollOffset + 1);
358
+ }
359
+ else if (isPageDown) {
360
+ this.state.detailScrollOffset = Math.min(maxOffset, this.state.detailScrollOffset + visibleLines);
361
+ }
362
+ return { type: 'continue' };
363
+ }
364
+ getCleanupSummary(result) {
365
+ const s = getStyles();
366
+ const resultText = result === 'allow'
367
+ ? s.success('Allowed')
368
+ : result === 'allow-always'
369
+ ? s.primary('Always allowed')
370
+ : s.error('Denied');
371
+ return s.muted(`Permission: ${resultText}`);
391
372
  }
392
- // Render all lines
393
- terminal.write(lines.join('\n'));
394
- return lines.length;
395
373
  }
396
374
  // =============================================================================
397
375
  // Main Export
@@ -400,95 +378,6 @@ function render(options, state, previousLineCount = 0, targetLineCount = 0) {
400
378
  * Show the permission overlay
401
379
  */
402
380
  export async function showPermissionOverlay(options) {
403
- const state = {
404
- selectedIndex: 0, // Default to "Yes"
405
- };
406
- let lineCount = 0;
407
- let maxLineCount = 0;
408
- // NOTE: Footer is already paused by the caller (index.ts handler calls sharedState.pauseFooter)
409
- // Do NOT call pauseForOverlay() here - it causes double-pause issues
410
- // Ensure we start from a fresh line
411
- terminal.writeLine('');
412
- terminal.hideCursor();
413
- const wasRawMode = process.stdin.isRaw;
414
- terminal.enableRawMode();
415
- // Initial render
416
- lineCount = render(options, state, 0);
417
- maxLineCount = Math.max(maxLineCount, lineCount);
418
- return new Promise((resolve) => {
419
- const cleanup = (result) => {
420
- terminal.clearLinesAbove(maxLineCount);
421
- // Show result summary
422
- const s = getStyles();
423
- const resultText = result === 'allow'
424
- ? s.success('Allowed')
425
- : result === 'allow-always'
426
- ? s.primary('Always allowed')
427
- : s.error('Denied');
428
- terminal.writeLine(s.muted(`Permission: ${resultText}`));
429
- terminal.writeLine(''); // Blank line for separation
430
- terminal.showCursor();
431
- if (!wasRawMode) {
432
- terminal.disableRawMode();
433
- }
434
- process.stdin.removeListener('data', handleData);
435
- resolve(result);
436
- };
437
- const handleData = (data) => {
438
- const isEscape = data.length === 1 && data[0] === 0x1b;
439
- const isUpArrow = data.length === 3 && data[0] === 0x1b && data[1] === 0x5b && data[2] === 0x41;
440
- const isDownArrow = data.length === 3 && data[0] === 0x1b && data[1] === 0x5b && data[2] === 0x42;
441
- const isCtrlC = data.length === 1 && data[0] === 0x03;
442
- const isEnter = data.length === 1 && (data[0] === 0x0d || data[0] === 0x0a);
443
- // Ctrl+C or Escape = deny
444
- if (isCtrlC || isEscape) {
445
- cleanup('deny');
446
- return;
447
- }
448
- // Quick keys
449
- const key = data.toString().toLowerCase();
450
- if (key === 'y') {
451
- cleanup('allow');
452
- return;
453
- }
454
- if (key === 'n') {
455
- cleanup('deny');
456
- return;
457
- }
458
- if (key === 'a') {
459
- cleanup('allow-always');
460
- return;
461
- }
462
- if (key === 'd') {
463
- // Show detail view, then return to permission overlay
464
- process.stdin.removeListener('data', handleData);
465
- // First clear the current permission overlay
466
- terminal.clearLinesAbove(maxLineCount);
467
- void showDetailView(options).then(() => {
468
- // Detail view already cleared itself, just re-render permission overlay
469
- lineCount = render(options, state, 0);
470
- maxLineCount = lineCount;
471
- process.stdin.on('data', handleData);
472
- });
473
- return;
474
- }
475
- // Arrow navigation
476
- if (isUpArrow) {
477
- state.selectedIndex = Math.max(0, state.selectedIndex - 1);
478
- }
479
- else if (isDownArrow) {
480
- state.selectedIndex = Math.min(2, state.selectedIndex + 1);
481
- }
482
- else if (isEnter) {
483
- // Select based on current index
484
- const results = ['allow', 'deny', 'allow-always'];
485
- cleanup(results[state.selectedIndex]);
486
- return;
487
- }
488
- // Re-render
489
- lineCount = render(options, state, maxLineCount, maxLineCount);
490
- maxLineCount = Math.max(maxLineCount, lineCount);
491
- };
492
- process.stdin.on('data', handleData);
493
- });
381
+ const overlay = new PermissionOverlayImpl(options);
382
+ return overlay.show();
494
383
  }