@bastani/atomic 0.9.11-alpha.8 → 0.9.11-alpha.9

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 (1674) hide show
  1. package/CHANGELOG.md +75 -1
  2. package/dist/builtin/intercom/package.json +3 -3
  3. package/dist/builtin/mcp/CHANGELOG.md +6 -0
  4. package/dist/builtin/mcp/commands.ts +7 -3
  5. package/dist/builtin/mcp/package.json +6 -6
  6. package/dist/builtin/subagents/CHANGELOG.md +9 -0
  7. package/dist/builtin/subagents/package.json +5 -5
  8. package/dist/builtin/subagents/src/agents/agent-discovery.ts +26 -15
  9. package/dist/builtin/subagents/src/agents/agent-loaders.ts +48 -34
  10. package/dist/builtin/subagents/src/agents/agent-management-helpers.ts +80 -31
  11. package/dist/builtin/subagents/src/agents/agent-management.ts +194 -55
  12. package/dist/builtin/subagents/src/agents/agent-overrides.ts +85 -32
  13. package/dist/builtin/subagents/src/agents/agent-paths.ts +4 -1
  14. package/dist/builtin/subagents/src/agents/agent-selection.ts +1 -1
  15. package/dist/builtin/subagents/src/agents/agent-serializer.ts +1 -4
  16. package/dist/builtin/subagents/src/agents/agents.ts +9 -9
  17. package/dist/builtin/subagents/src/agents/chain-serializer.ts +9 -5
  18. package/dist/builtin/subagents/src/agents/identity.ts +12 -3
  19. package/dist/builtin/subagents/src/agents/skills-paths.ts +64 -24
  20. package/dist/builtin/subagents/src/agents/skills.ts +29 -26
  21. package/dist/builtin/subagents/src/extension/doctor.ts +31 -20
  22. package/dist/builtin/subagents/src/extension/fanout-child.ts +27 -12
  23. package/dist/builtin/subagents/src/extension/index.ts +119 -43
  24. package/dist/builtin/subagents/src/extension/prompt-guidance.ts +0 -1
  25. package/dist/builtin/subagents/src/extension/schemas.ts +304 -177
  26. package/dist/builtin/subagents/src/extension/startup-maintenance.ts +137 -73
  27. package/dist/builtin/subagents/src/intercom/intercom-bridge.ts +49 -21
  28. package/dist/builtin/subagents/src/intercom/result-intercom.ts +76 -38
  29. package/dist/builtin/subagents/src/runs/background/async-event-journal.ts +12 -6
  30. package/dist/builtin/subagents/src/runs/background/async-execution-chain.ts +164 -57
  31. package/dist/builtin/subagents/src/runs/background/async-execution-common.ts +15 -18
  32. package/dist/builtin/subagents/src/runs/background/async-execution-single.ts +66 -27
  33. package/dist/builtin/subagents/src/runs/background/async-execution-types.ts +4 -14
  34. package/dist/builtin/subagents/src/runs/background/async-execution.ts +1 -1
  35. package/dist/builtin/subagents/src/runs/background/async-job-tracker.ts +86 -32
  36. package/dist/builtin/subagents/src/runs/background/async-resume.ts +93 -36
  37. package/dist/builtin/subagents/src/runs/background/async-status.ts +82 -27
  38. package/dist/builtin/subagents/src/runs/background/completion-claims.ts +12 -5
  39. package/dist/builtin/subagents/src/runs/background/completion-dedupe.ts +3 -1
  40. package/dist/builtin/subagents/src/runs/background/completion-notification.ts +3 -1
  41. package/dist/builtin/subagents/src/runs/background/notify.ts +36 -18
  42. package/dist/builtin/subagents/src/runs/background/parallel-groups.ts +28 -14
  43. package/dist/builtin/subagents/src/runs/background/result-delivery-processor.ts +147 -79
  44. package/dist/builtin/subagents/src/runs/background/result-file-claims.ts +20 -5
  45. package/dist/builtin/subagents/src/runs/background/result-quarantine.ts +7 -2
  46. package/dist/builtin/subagents/src/runs/background/result-status.ts +11 -5
  47. package/dist/builtin/subagents/src/runs/background/result-watcher-data.ts +18 -5
  48. package/dist/builtin/subagents/src/runs/background/result-watcher.ts +104 -35
  49. package/dist/builtin/subagents/src/runs/background/run-id-resolver.ts +28 -7
  50. package/dist/builtin/subagents/src/runs/background/run-status.ts +120 -32
  51. package/dist/builtin/subagents/src/runs/background/stale-run-reconciler.ts +98 -39
  52. package/dist/builtin/subagents/src/runs/background/subagent-runner-dynamic.ts +185 -37
  53. package/dist/builtin/subagents/src/runs/background/subagent-runner-finalize.ts +23 -9
  54. package/dist/builtin/subagents/src/runs/background/subagent-runner-output.ts +6 -2
  55. package/dist/builtin/subagents/src/runs/background/subagent-runner-parallel-helpers.ts +34 -18
  56. package/dist/builtin/subagents/src/runs/background/subagent-runner-parallel.ts +175 -26
  57. package/dist/builtin/subagents/src/runs/background/subagent-runner-sequential.ts +68 -23
  58. package/dist/builtin/subagents/src/runs/background/subagent-runner-state.ts +200 -49
  59. package/dist/builtin/subagents/src/runs/background/subagent-runner-step.ts +81 -49
  60. package/dist/builtin/subagents/src/runs/background/subagent-runner-streaming.ts +33 -11
  61. package/dist/builtin/subagents/src/runs/background/subagent-runner-types.ts +16 -6
  62. package/dist/builtin/subagents/src/runs/background/subagent-runner-utils.ts +2 -3
  63. package/dist/builtin/subagents/src/runs/background/subagent-runner.ts +11 -8
  64. package/dist/builtin/subagents/src/runs/foreground/chain-execution-details.ts +5 -2
  65. package/dist/builtin/subagents/src/runs/foreground/chain-execution-dynamic-step.ts +113 -31
  66. package/dist/builtin/subagents/src/runs/foreground/chain-execution-parallel-runner.ts +64 -55
  67. package/dist/builtin/subagents/src/runs/foreground/chain-execution-parallel-step.ts +103 -37
  68. package/dist/builtin/subagents/src/runs/foreground/chain-execution-sequential-step.ts +97 -62
  69. package/dist/builtin/subagents/src/runs/foreground/chain-execution-types.ts +22 -10
  70. package/dist/builtin/subagents/src/runs/foreground/chain-execution.ts +9 -6
  71. package/dist/builtin/subagents/src/runs/foreground/detached-cleanup-barrier.ts +22 -22
  72. package/dist/builtin/subagents/src/runs/foreground/execution-attempt-control.ts +45 -40
  73. package/dist/builtin/subagents/src/runs/foreground/execution-attempt-finalize.ts +6 -5
  74. package/dist/builtin/subagents/src/runs/foreground/execution-attempt.ts +118 -43
  75. package/dist/builtin/subagents/src/runs/foreground/execution-detach-reservations.ts +17 -7
  76. package/dist/builtin/subagents/src/runs/foreground/execution-detach-route.ts +5 -3
  77. package/dist/builtin/subagents/src/runs/foreground/execution-intercom-detach.ts +39 -35
  78. package/dist/builtin/subagents/src/runs/foreground/execution-run-sync.ts +81 -42
  79. package/dist/builtin/subagents/src/runs/foreground/execution-structured-retries.ts +27 -21
  80. package/dist/builtin/subagents/src/runs/foreground/execution-updates.ts +2 -5
  81. package/dist/builtin/subagents/src/runs/foreground/execution-utils.ts +9 -4
  82. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-async.ts +64 -27
  83. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-chain.ts +31 -18
  84. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-context.ts +95 -62
  85. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-input.ts +30 -9
  86. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-parallel-task.ts +106 -96
  87. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-parallel.ts +68 -37
  88. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-resume.ts +260 -84
  89. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-runtime.ts +6 -1
  90. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-single.ts +63 -40
  91. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-status.ts +110 -59
  92. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-types.ts +20 -3
  93. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-worktree.ts +8 -6
  94. package/dist/builtin/subagents/src/runs/foreground/subagent-executor.ts +65 -47
  95. package/dist/builtin/subagents/src/runs/shared/chain-outputs.ts +37 -12
  96. package/dist/builtin/subagents/src/runs/shared/dynamic-fanout.ts +120 -34
  97. package/dist/builtin/subagents/src/runs/shared/final-drain.ts +12 -7
  98. package/dist/builtin/subagents/src/runs/shared/intercom-group.ts +3 -2
  99. package/dist/builtin/subagents/src/runs/shared/long-running-guard.ts +8 -3
  100. package/dist/builtin/subagents/src/runs/shared/mcp-direct-tool-allowlist.ts +42 -19
  101. package/dist/builtin/subagents/src/runs/shared/model-candidate-filter.ts +8 -4
  102. package/dist/builtin/subagents/src/runs/shared/model-fallback.ts +103 -38
  103. package/dist/builtin/subagents/src/runs/shared/nested-events-control.ts +30 -20
  104. package/dist/builtin/subagents/src/runs/shared/nested-events-core.ts +45 -20
  105. package/dist/builtin/subagents/src/runs/shared/nested-events-projection.ts +57 -23
  106. package/dist/builtin/subagents/src/runs/shared/nested-events-registry.ts +77 -29
  107. package/dist/builtin/subagents/src/runs/shared/nested-events-sanitize.ts +99 -42
  108. package/dist/builtin/subagents/src/runs/shared/nested-events.ts +32 -26
  109. package/dist/builtin/subagents/src/runs/shared/nested-path.ts +22 -17
  110. package/dist/builtin/subagents/src/runs/shared/nested-render.ts +31 -10
  111. package/dist/builtin/subagents/src/runs/shared/parallel-utils.ts +9 -8
  112. package/dist/builtin/subagents/src/runs/shared/pi-args.ts +54 -30
  113. package/dist/builtin/subagents/src/runs/shared/pi-spawn.ts +17 -13
  114. package/dist/builtin/subagents/src/runs/shared/run-history.ts +13 -6
  115. package/dist/builtin/subagents/src/runs/shared/single-output.ts +11 -6
  116. package/dist/builtin/subagents/src/runs/shared/spawn-env.ts +21 -0
  117. package/dist/builtin/subagents/src/runs/shared/structured-output.ts +33 -19
  118. package/dist/builtin/subagents/src/runs/shared/subagent-control.ts +59 -48
  119. package/dist/builtin/subagents/src/runs/shared/subagent-prompt-runtime.ts +18 -11
  120. package/dist/builtin/subagents/src/runs/shared/workflow-graph.ts +41 -11
  121. package/dist/builtin/subagents/src/runs/shared/worktree-post-create.ts +46 -10
  122. package/dist/builtin/subagents/src/runs/shared/worktree-root.ts +21 -5
  123. package/dist/builtin/subagents/src/runs/shared/worktree.ts +89 -34
  124. package/dist/builtin/subagents/src/shared/artifacts.ts +137 -7
  125. package/dist/builtin/subagents/src/shared/event-jsonl-writer.ts +49 -13
  126. package/dist/builtin/subagents/src/shared/fast-mode.ts +13 -6
  127. package/dist/builtin/subagents/src/shared/fork-context.ts +7 -4
  128. package/dist/builtin/subagents/src/shared/formatters.ts +14 -9
  129. package/dist/builtin/subagents/src/shared/jsonl-writer.ts +2 -1
  130. package/dist/builtin/subagents/src/shared/model-info.ts +10 -3
  131. package/dist/builtin/subagents/src/shared/post-exit-stdio-guard.ts +7 -6
  132. package/dist/builtin/subagents/src/shared/session-tokens.ts +2 -1
  133. package/dist/builtin/subagents/src/shared/settings.ts +39 -43
  134. package/dist/builtin/subagents/src/shared/status-format.ts +10 -2
  135. package/dist/builtin/subagents/src/shared/types-async.ts +22 -19
  136. package/dist/builtin/subagents/src/shared/types-config.ts +1 -1
  137. package/dist/builtin/subagents/src/shared/types-depth.ts +23 -11
  138. package/dist/builtin/subagents/src/shared/types-results.ts +49 -6
  139. package/dist/builtin/subagents/src/shared/types-runtime.ts +16 -17
  140. package/dist/builtin/subagents/src/shared/types.ts +2 -2
  141. package/dist/builtin/subagents/src/shared/utils.ts +34 -20
  142. package/dist/builtin/subagents/src/slash/prompt-template-bridge.ts +44 -47
  143. package/dist/builtin/subagents/src/slash/saved-chain-mapping.ts +5 -7
  144. package/dist/builtin/subagents/src/slash/slash-bridge.ts +3 -3
  145. package/dist/builtin/subagents/src/slash/slash-commands.ts +78 -52
  146. package/dist/builtin/subagents/src/slash/slash-live-state.ts +59 -32
  147. package/dist/builtin/subagents/src/tui/render-chain-graph.ts +120 -32
  148. package/dist/builtin/subagents/src/tui/render-event-formatting.ts +85 -22
  149. package/dist/builtin/subagents/src/tui/render-helpers.ts +16 -6
  150. package/dist/builtin/subagents/src/tui/render-layout.ts +8 -3
  151. package/dist/builtin/subagents/src/tui/render-result-compact.ts +125 -43
  152. package/dist/builtin/subagents/src/tui/render-result.ts +128 -85
  153. package/dist/builtin/subagents/src/tui/render-stable-output.ts +17 -13
  154. package/dist/builtin/subagents/src/tui/render-status-progress.ts +52 -20
  155. package/dist/builtin/subagents/src/tui/render-widget-graph.ts +130 -28
  156. package/dist/builtin/subagents/src/tui/render-widget.ts +54 -27
  157. package/dist/builtin/subagents/src/tui/render.ts +10 -3
  158. package/dist/builtin/web-access/package.json +2 -2
  159. package/dist/builtin/workflows/CHANGELOG.md +30 -0
  160. package/dist/builtin/workflows/README.md +6 -0
  161. package/dist/builtin/workflows/builtin/open-claude-design-phases.ts +104 -40
  162. package/dist/builtin/workflows/builtin/open-claude-design-runner.ts +57 -26
  163. package/dist/builtin/workflows/builtin/open-claude-design-setup.ts +125 -12
  164. package/dist/builtin/workflows/package.json +3 -3
  165. package/dist/builtin/workflows/skills/impeccable/scripts/live-accept.mjs +4 -1
  166. package/dist/builtin/workflows/skills/impeccable/scripts/live-browser-dom.js +5 -1
  167. package/dist/builtin/workflows/skills/impeccable/scripts/live-browser-session.js +7 -1
  168. package/dist/builtin/workflows/skills/impeccable/scripts/live-manual-edit-evidence.mjs +5 -2
  169. package/dist/builtin/workflows/skills/impeccable/scripts/live-server.mjs +7 -1
  170. package/dist/builtin/workflows/src/authoring/typebox-defaults.d.ts +5 -5
  171. package/dist/builtin/workflows/src/authoring/typebox-defaults.ts +160 -197
  172. package/dist/builtin/workflows/src/authoring/workflow.ts +137 -133
  173. package/dist/builtin/workflows/src/authoring.d.ts +3 -3
  174. package/dist/builtin/workflows/src/durable/backend.ts +507 -439
  175. package/dist/builtin/workflows/src/durable/boundary-lifecycle.ts +142 -118
  176. package/dist/builtin/workflows/src/durable/boundary-topology.ts +410 -355
  177. package/dist/builtin/workflows/src/durable/child-invocation.ts +6 -6
  178. package/dist/builtin/workflows/src/durable/child-primitive.ts +109 -101
  179. package/dist/builtin/workflows/src/durable/completed-catalog-stage-groups.ts +234 -194
  180. package/dist/builtin/workflows/src/durable/completed-catalog.ts +379 -372
  181. package/dist/builtin/workflows/src/durable/completed-inspection.ts +118 -116
  182. package/dist/builtin/workflows/src/durable/completed-subtree.ts +24 -20
  183. package/dist/builtin/workflows/src/durable/dbos-backend.ts +484 -418
  184. package/dist/builtin/workflows/src/durable/dbos-embedded-postgres-root.ts +86 -87
  185. package/dist/builtin/workflows/src/durable/dbos-embedded-postgres.ts +171 -149
  186. package/dist/builtin/workflows/src/durable/dbos-envelope.ts +400 -324
  187. package/dist/builtin/workflows/src/durable/dbos-lifecycle.ts +117 -121
  188. package/dist/builtin/workflows/src/durable/dbos-local-postgres.ts +75 -68
  189. package/dist/builtin/workflows/src/durable/dbos-metadata.ts +138 -119
  190. package/dist/builtin/workflows/src/durable/dbos-prompt-reservations.ts +316 -259
  191. package/dist/builtin/workflows/src/durable/dbos-sdk-handle.ts +138 -117
  192. package/dist/builtin/workflows/src/durable/dbos-status-transition.ts +48 -43
  193. package/dist/builtin/workflows/src/durable/dbos-tombstone.ts +14 -14
  194. package/dist/builtin/workflows/src/durable/durable-hash.ts +9 -11
  195. package/dist/builtin/workflows/src/durable/factory.ts +45 -46
  196. package/dist/builtin/workflows/src/durable/format-version.ts +1 -1
  197. package/dist/builtin/workflows/src/durable/index.ts +69 -70
  198. package/dist/builtin/workflows/src/durable/local-command.ts +47 -43
  199. package/dist/builtin/workflows/src/durable/prompt-reservation-state.ts +156 -149
  200. package/dist/builtin/workflows/src/durable/prompt-reservations.ts +16 -16
  201. package/dist/builtin/workflows/src/durable/resume-catalog.ts +11 -11
  202. package/dist/builtin/workflows/src/durable/resume-eligibility.ts +27 -25
  203. package/dist/builtin/workflows/src/durable/resume-runtime.ts +261 -226
  204. package/dist/builtin/workflows/src/durable/retention-policy.ts +31 -30
  205. package/dist/builtin/workflows/src/durable/run-timing.ts +42 -41
  206. package/dist/builtin/workflows/src/durable/scoped-backend.ts +249 -228
  207. package/dist/builtin/workflows/src/durable/stage-primitive.ts +456 -398
  208. package/dist/builtin/workflows/src/durable/stage-topology-validation.ts +199 -186
  209. package/dist/builtin/workflows/src/durable/stage-topology.ts +40 -40
  210. package/dist/builtin/workflows/src/durable/tool-failure-checkpoint.ts +37 -37
  211. package/dist/builtin/workflows/src/durable/tool-outcome.ts +95 -85
  212. package/dist/builtin/workflows/src/durable/tool-primitive.ts +606 -410
  213. package/dist/builtin/workflows/src/durable/types.ts +219 -216
  214. package/dist/builtin/workflows/src/durable/ui-primitive.ts +241 -208
  215. package/dist/builtin/workflows/src/durable/workflow-child-result.ts +40 -37
  216. package/dist/builtin/workflows/src/durable/workflow-status-transition.ts +16 -15
  217. package/dist/builtin/workflows/src/engine/graph-inference.ts +76 -76
  218. package/dist/builtin/workflows/src/engine/options.ts +35 -36
  219. package/dist/builtin/workflows/src/engine/primitives/chain.ts +27 -22
  220. package/dist/builtin/workflows/src/engine/primitives/exit.ts +1 -1
  221. package/dist/builtin/workflows/src/engine/primitives/parallel.ts +64 -52
  222. package/dist/builtin/workflows/src/engine/primitives/task.ts +110 -95
  223. package/dist/builtin/workflows/src/engine/primitives/ui.ts +46 -50
  224. package/dist/builtin/workflows/src/engine/primitives/workflow.ts +194 -160
  225. package/dist/builtin/workflows/src/engine/replay.ts +6 -6
  226. package/dist/builtin/workflows/src/engine/run-durable-admission.ts +30 -30
  227. package/dist/builtin/workflows/src/engine/run-durable-finalize.ts +64 -47
  228. package/dist/builtin/workflows/src/engine/run-durable-stage-session.ts +29 -23
  229. package/dist/builtin/workflows/src/engine/run-durable-topology.ts +246 -219
  230. package/dist/builtin/workflows/src/engine/run-returned-status.ts +60 -57
  231. package/dist/builtin/workflows/src/engine/run-terminal-event.ts +25 -23
  232. package/dist/builtin/workflows/src/engine/run-terminal-failure.ts +45 -42
  233. package/dist/builtin/workflows/src/engine/run-tool-admission-boundary.ts +99 -0
  234. package/dist/builtin/workflows/src/engine/run-tool-control-registry.ts +179 -0
  235. package/dist/builtin/workflows/src/engine/run-tool-execution-tracker.ts +144 -132
  236. package/dist/builtin/workflows/src/engine/run-tool-node-lifecycle.ts +134 -69
  237. package/dist/builtin/workflows/src/engine/run.ts +678 -473
  238. package/dist/builtin/workflows/src/engine/runtime.ts +160 -153
  239. package/dist/builtin/workflows/src/engine/workflow-activity.ts +7 -3
  240. package/dist/builtin/workflows/src/engine/workflow-tool-abort.ts +92 -0
  241. package/dist/builtin/workflows/src/extension/atomic-stage-session.ts +123 -120
  242. package/dist/builtin/workflows/src/extension/background-ui-adapter.ts +108 -112
  243. package/dist/builtin/workflows/src/extension/companions.ts +116 -116
  244. package/dist/builtin/workflows/src/extension/completed-stage-intercom-ask.ts +123 -111
  245. package/dist/builtin/workflows/src/extension/config-file-loader.ts +153 -148
  246. package/dist/builtin/workflows/src/extension/config-loader.ts +264 -283
  247. package/dist/builtin/workflows/src/extension/discovery-loaders.ts +81 -84
  248. package/dist/builtin/workflows/src/extension/discovery.ts +267 -272
  249. package/dist/builtin/workflows/src/extension/dispatcher.ts +214 -217
  250. package/dist/builtin/workflows/src/extension/extension-factory.ts +102 -108
  251. package/dist/builtin/workflows/src/extension/extension-lifecycle.ts +118 -116
  252. package/dist/builtin/workflows/src/extension/extension-runtime-state.ts +413 -396
  253. package/dist/builtin/workflows/src/extension/hil-answer-notifications.ts +270 -261
  254. package/dist/builtin/workflows/src/extension/index.bundle.mjs +33724 -32828
  255. package/dist/builtin/workflows/src/extension/index.ts +37 -37
  256. package/dist/builtin/workflows/src/extension/lifecycle-notification-delivery.ts +64 -64
  257. package/dist/builtin/workflows/src/extension/lifecycle-notifications.ts +384 -378
  258. package/dist/builtin/workflows/src/extension/mcp.ts +35 -35
  259. package/dist/builtin/workflows/src/extension/postmortem-deps.ts +31 -35
  260. package/dist/builtin/workflows/src/extension/public-types.ts +160 -182
  261. package/dist/builtin/workflows/src/extension/render-call.ts +85 -88
  262. package/dist/builtin/workflows/src/extension/render-component.ts +9 -11
  263. package/dist/builtin/workflows/src/extension/render-result.ts +447 -386
  264. package/dist/builtin/workflows/src/extension/renderers.ts +35 -35
  265. package/dist/builtin/workflows/src/extension/runtime-active-block-claim.ts +37 -37
  266. package/dist/builtin/workflows/src/extension/runtime-durable-resume.ts +145 -143
  267. package/dist/builtin/workflows/src/extension/runtime.ts +346 -264
  268. package/dist/builtin/workflows/src/extension/status-writer.ts +95 -95
  269. package/dist/builtin/workflows/src/extension/ui-surface.ts +224 -222
  270. package/dist/builtin/workflows/src/extension/wiring.ts +307 -283
  271. package/dist/builtin/workflows/src/extension/workflow-command-completions.ts +109 -108
  272. package/dist/builtin/workflows/src/extension/workflow-command-registration.ts +257 -227
  273. package/dist/builtin/workflows/src/extension/workflow-command-surfaces.ts +84 -84
  274. package/dist/builtin/workflows/src/extension/workflow-command-utils.ts +126 -132
  275. package/dist/builtin/workflows/src/extension/workflow-durable-resume-command.ts +213 -205
  276. package/dist/builtin/workflows/src/extension/workflow-model-catalog.ts +19 -21
  277. package/dist/builtin/workflows/src/extension/workflow-module-loader.ts +104 -104
  278. package/dist/builtin/workflows/src/extension/workflow-policy.ts +7 -9
  279. package/dist/builtin/workflows/src/extension/workflow-ports.ts +30 -34
  280. package/dist/builtin/workflows/src/extension/workflow-prompts.ts +13 -13
  281. package/dist/builtin/workflows/src/extension/workflow-reload-coordinator.ts +46 -46
  282. package/dist/builtin/workflows/src/extension/workflow-reload-report.ts +28 -25
  283. package/dist/builtin/workflows/src/extension/workflow-resume-picker-rows.ts +48 -45
  284. package/dist/builtin/workflows/src/extension/workflow-resume-shadow.ts +28 -31
  285. package/dist/builtin/workflows/src/extension/workflow-run-control-command.ts +539 -453
  286. package/dist/builtin/workflows/src/extension/workflow-schema.ts +149 -92
  287. package/dist/builtin/workflows/src/extension/workflow-stage-results.ts +182 -194
  288. package/dist/builtin/workflows/src/extension/workflow-status-summary.ts +150 -155
  289. package/dist/builtin/workflows/src/extension/workflow-targets.ts +151 -121
  290. package/dist/builtin/workflows/src/extension/workflow-tool-content.ts +204 -224
  291. package/dist/builtin/workflows/src/extension/workflow-tool-control.ts +512 -372
  292. package/dist/builtin/workflows/src/extension/workflow-tool-inspection.ts +146 -150
  293. package/dist/builtin/workflows/src/extension/workflow-tool-registration.ts +43 -46
  294. package/dist/builtin/workflows/src/extension/workflow-tool-send.ts +341 -292
  295. package/dist/builtin/workflows/src/extension/workflow-tool.ts +122 -129
  296. package/dist/builtin/workflows/src/intercom/intercom-bridge.ts +17 -20
  297. package/dist/builtin/workflows/src/intercom/intercom-routing.ts +62 -62
  298. package/dist/builtin/workflows/src/intercom/result-intercom.ts +123 -123
  299. package/dist/builtin/workflows/src/runs/background/cancellation-registry.ts +72 -59
  300. package/dist/builtin/workflows/src/runs/background/durable-resume-transition.ts +45 -45
  301. package/dist/builtin/workflows/src/runs/background/job-tracker.ts +69 -34
  302. package/dist/builtin/workflows/src/runs/background/quit-tool-node.ts +71 -0
  303. package/dist/builtin/workflows/src/runs/background/quit.ts +359 -138
  304. package/dist/builtin/workflows/src/runs/background/resume-acknowledgements.ts +70 -69
  305. package/dist/builtin/workflows/src/runs/background/run-inspect.ts +85 -80
  306. package/dist/builtin/workflows/src/runs/background/runner.ts +122 -121
  307. package/dist/builtin/workflows/src/runs/background/startup-admission.ts +56 -60
  308. package/dist/builtin/workflows/src/runs/background/status.ts +324 -294
  309. package/dist/builtin/workflows/src/runs/background/workflow-lifecycle-aggregate.ts +23 -17
  310. package/dist/builtin/workflows/src/runs/foreground/executor-abort.ts +311 -309
  311. package/dist/builtin/workflows/src/runs/foreground/executor-child-boundary.ts +228 -201
  312. package/dist/builtin/workflows/src/runs/foreground/executor-child-helpers.ts +56 -51
  313. package/dist/builtin/workflows/src/runs/foreground/executor-continuation.ts +168 -152
  314. package/dist/builtin/workflows/src/runs/foreground/executor-direct-helpers.ts +255 -217
  315. package/dist/builtin/workflows/src/runs/foreground/executor-exit-manager.ts +178 -173
  316. package/dist/builtin/workflows/src/runs/foreground/executor-hil.ts +273 -269
  317. package/dist/builtin/workflows/src/runs/foreground/executor-inputs.ts +59 -56
  318. package/dist/builtin/workflows/src/runs/foreground/executor-lifecycle.ts +368 -361
  319. package/dist/builtin/workflows/src/runs/foreground/executor-outputs.ts +123 -127
  320. package/dist/builtin/workflows/src/runs/foreground/executor-prompt-nodes.ts +355 -339
  321. package/dist/builtin/workflows/src/runs/foreground/executor-queued-user-message.ts +47 -47
  322. package/dist/builtin/workflows/src/runs/foreground/executor-run-finalizers.ts +125 -104
  323. package/dist/builtin/workflows/src/runs/foreground/executor-scheduler.ts +189 -189
  324. package/dist/builtin/workflows/src/runs/foreground/executor-stage-call.ts +294 -250
  325. package/dist/builtin/workflows/src/runs/foreground/executor-stage-context.ts +141 -127
  326. package/dist/builtin/workflows/src/runs/foreground/executor-stage-control.ts +218 -213
  327. package/dist/builtin/workflows/src/runs/foreground/executor-stage-factory.ts +406 -364
  328. package/dist/builtin/workflows/src/runs/foreground/executor-stage-replay.ts +143 -127
  329. package/dist/builtin/workflows/src/runs/foreground/executor-stage-types.ts +49 -49
  330. package/dist/builtin/workflows/src/runs/foreground/executor-task-context.ts +1 -1
  331. package/dist/builtin/workflows/src/runs/foreground/executor-task-prompts.ts +148 -153
  332. package/dist/builtin/workflows/src/runs/foreground/executor-types.ts +155 -117
  333. package/dist/builtin/workflows/src/runs/foreground/executor.ts +10 -10
  334. package/dist/builtin/workflows/src/runs/foreground/postmortem-stage-chat.ts +168 -141
  335. package/dist/builtin/workflows/src/runs/foreground/stage-control-registry.ts +356 -379
  336. package/dist/builtin/workflows/src/runs/foreground/stage-delivery-activity.ts +53 -53
  337. package/dist/builtin/workflows/src/runs/foreground/stage-queued-user-messages.ts +95 -0
  338. package/dist/builtin/workflows/src/runs/foreground/stage-runner-candidate.ts +8 -8
  339. package/dist/builtin/workflows/src/runs/foreground/stage-runner-context.ts +232 -232
  340. package/dist/builtin/workflows/src/runs/foreground/stage-runner-controller.ts +630 -493
  341. package/dist/builtin/workflows/src/runs/foreground/stage-runner-message-admission.ts +182 -181
  342. package/dist/builtin/workflows/src/runs/foreground/stage-runner-messages.ts +80 -80
  343. package/dist/builtin/workflows/src/runs/foreground/stage-runner-options.ts +78 -78
  344. package/dist/builtin/workflows/src/runs/foreground/stage-runner-output.ts +102 -104
  345. package/dist/builtin/workflows/src/runs/foreground/stage-runner-pause.ts +178 -173
  346. package/dist/builtin/workflows/src/runs/foreground/stage-runner-replacement.ts +31 -32
  347. package/dist/builtin/workflows/src/runs/foreground/stage-runner-send-user-message.ts +114 -105
  348. package/dist/builtin/workflows/src/runs/foreground/stage-runner-session-options.ts +29 -29
  349. package/dist/builtin/workflows/src/runs/foreground/stage-runner-session.ts +44 -52
  350. package/dist/builtin/workflows/src/runs/foreground/stage-runner-structured-output.ts +63 -58
  351. package/dist/builtin/workflows/src/runs/foreground/stage-runner-types.ts +157 -148
  352. package/dist/builtin/workflows/src/runs/foreground/stage-runner-unresolved-overflow.ts +27 -23
  353. package/dist/builtin/workflows/src/runs/foreground/stage-runner.ts +10 -10
  354. package/dist/builtin/workflows/src/runs/foreground/stage-tool-execution-buffer.ts +33 -31
  355. package/dist/builtin/workflows/src/runs/shared/concurrency.ts +53 -53
  356. package/dist/builtin/workflows/src/runs/shared/graph-inference.ts +1 -1
  357. package/dist/builtin/workflows/src/runs/shared/model-fallback-candidates.ts +257 -245
  358. package/dist/builtin/workflows/src/runs/shared/model-fallback-failures.ts +378 -363
  359. package/dist/builtin/workflows/src/runs/shared/prompt-callsite.ts +55 -55
  360. package/dist/builtin/workflows/src/runs/shared/validate-inputs.ts +75 -84
  361. package/dist/builtin/workflows/src/runs/shared/worktree-cache-lifecycle.ts +1 -3
  362. package/dist/builtin/workflows/src/runs/shared/worktree-cwd.ts +96 -83
  363. package/dist/builtin/workflows/src/runs/shared/worktree-diff.ts +9 -2
  364. package/dist/builtin/workflows/src/runs/shared/worktree-git-runner.ts +21 -6
  365. package/dist/builtin/workflows/src/runs/shared/worktree-git.ts +60 -30
  366. package/dist/builtin/workflows/src/runs/shared/worktree-post-create.ts +12 -5
  367. package/dist/builtin/workflows/src/runs/shared/worktree-setup.ts +51 -30
  368. package/dist/builtin/workflows/src/runs/shared/worktree.ts +4 -4
  369. package/dist/builtin/workflows/src/sdk-surface.ts +38 -19
  370. package/dist/builtin/workflows/src/shared/authoring-contract-stage.d.ts +11 -5
  371. package/dist/builtin/workflows/src/shared/authoring-contract-stage.ts +299 -275
  372. package/dist/builtin/workflows/src/shared/authoring-contract-ui.d.ts +21 -7
  373. package/dist/builtin/workflows/src/shared/authoring-contract-ui.ts +290 -264
  374. package/dist/builtin/workflows/src/shared/expanded-workflow-graph.ts +220 -211
  375. package/dist/builtin/workflows/src/shared/intercom-group.ts +22 -22
  376. package/dist/builtin/workflows/src/shared/persistence-compaction-policy.ts +30 -30
  377. package/dist/builtin/workflows/src/shared/persistence-restore-helpers.ts +432 -406
  378. package/dist/builtin/workflows/src/shared/persistence-restore.ts +187 -181
  379. package/dist/builtin/workflows/src/shared/persistence-session-entries.ts +211 -212
  380. package/dist/builtin/workflows/src/shared/prompt-callsite-context.ts +3 -3
  381. package/dist/builtin/workflows/src/shared/render-inputs-schema.ts +84 -91
  382. package/dist/builtin/workflows/src/shared/resume-continuation.ts +1 -1
  383. package/dist/builtin/workflows/src/shared/returned-run-status.ts +91 -77
  384. package/dist/builtin/workflows/src/shared/run-visibility.ts +2 -2
  385. package/dist/builtin/workflows/src/shared/schema-introspection.ts +50 -60
  386. package/dist/builtin/workflows/src/shared/serializable.ts +72 -86
  387. package/dist/builtin/workflows/src/shared/session-transcript.ts +44 -39
  388. package/dist/builtin/workflows/src/shared/stage-prompt.ts +183 -202
  389. package/dist/builtin/workflows/src/shared/stage-ui-broker.ts +270 -274
  390. package/dist/builtin/workflows/src/shared/store-factory.ts +8 -8
  391. package/dist/builtin/workflows/src/shared/store-internal.ts +168 -172
  392. package/dist/builtin/workflows/src/shared/store-prompt-methods.ts +196 -200
  393. package/dist/builtin/workflows/src/shared/store-public-types.ts +208 -204
  394. package/dist/builtin/workflows/src/shared/store-run-methods.ts +238 -231
  395. package/dist/builtin/workflows/src/shared/store-stage-methods.ts +284 -285
  396. package/dist/builtin/workflows/src/shared/store-tool-node-methods.ts +43 -36
  397. package/dist/builtin/workflows/src/shared/store-types.ts +263 -263
  398. package/dist/builtin/workflows/src/shared/store.ts +7 -7
  399. package/dist/builtin/workflows/src/shared/timing.ts +36 -34
  400. package/dist/builtin/workflows/src/shared/types.ts +256 -213
  401. package/dist/builtin/workflows/src/shared/workflow-authoring-types.d.ts +10 -4
  402. package/dist/builtin/workflows/src/shared/workflow-authoring-types.ts +81 -59
  403. package/dist/builtin/workflows/src/shared/workflow-failures-classifier.ts +247 -227
  404. package/dist/builtin/workflows/src/shared/workflow-failures-contract.ts +45 -46
  405. package/dist/builtin/workflows/src/shared/workflow-failures-decisions.ts +330 -351
  406. package/dist/builtin/workflows/src/shared/workflow-failures-signals.ts +192 -195
  407. package/dist/builtin/workflows/src/shared/workflow-failures.ts +10 -10
  408. package/dist/builtin/workflows/src/shared/workflow-run-ownership.ts +32 -36
  409. package/dist/builtin/workflows/src/tui/chat-surface-message.ts +157 -184
  410. package/dist/builtin/workflows/src/tui/chat-surface.ts +332 -355
  411. package/dist/builtin/workflows/src/tui/color-utils.ts +21 -30
  412. package/dist/builtin/workflows/src/tui/connectors.ts +57 -61
  413. package/dist/builtin/workflows/src/tui/dispatch-confirm.ts +168 -192
  414. package/dist/builtin/workflows/src/tui/edge.ts +10 -9
  415. package/dist/builtin/workflows/src/tui/graph-canvas.ts +131 -134
  416. package/dist/builtin/workflows/src/tui/graph-theme.ts +139 -148
  417. package/dist/builtin/workflows/src/tui/graph-view-constants.ts +6 -6
  418. package/dist/builtin/workflows/src/tui/graph-view-graph-render.ts +146 -179
  419. package/dist/builtin/workflows/src/tui/graph-view-input.ts +295 -323
  420. package/dist/builtin/workflows/src/tui/graph-view-render-helpers.ts +291 -327
  421. package/dist/builtin/workflows/src/tui/graph-view-render.ts +171 -191
  422. package/dist/builtin/workflows/src/tui/graph-view-state.ts +317 -303
  423. package/dist/builtin/workflows/src/tui/graph-view-types.ts +65 -59
  424. package/dist/builtin/workflows/src/tui/header.ts +140 -156
  425. package/dist/builtin/workflows/src/tui/host-input-form.ts +47 -45
  426. package/dist/builtin/workflows/src/tui/inline-form-card.ts +277 -266
  427. package/dist/builtin/workflows/src/tui/inline-form-editor-text.ts +61 -62
  428. package/dist/builtin/workflows/src/tui/inline-form-editor.ts +407 -412
  429. package/dist/builtin/workflows/src/tui/inline-form-overlay.ts +203 -214
  430. package/dist/builtin/workflows/src/tui/inline-form-store.ts +24 -24
  431. package/dist/builtin/workflows/src/tui/inputs-overlay.ts +116 -129
  432. package/dist/builtin/workflows/src/tui/inputs-picker-editing.ts +111 -115
  433. package/dist/builtin/workflows/src/tui/inputs-picker-input.ts +255 -269
  434. package/dist/builtin/workflows/src/tui/inputs-picker-render.ts +248 -236
  435. package/dist/builtin/workflows/src/tui/inputs-picker-types.ts +111 -140
  436. package/dist/builtin/workflows/src/tui/inputs-picker.ts +12 -12
  437. package/dist/builtin/workflows/src/tui/keybindings-adapter.ts +49 -57
  438. package/dist/builtin/workflows/src/tui/layout.ts +124 -133
  439. package/dist/builtin/workflows/src/tui/mouse-input.ts +45 -47
  440. package/dist/builtin/workflows/src/tui/node-card.ts +230 -219
  441. package/dist/builtin/workflows/src/tui/overlay-adapter.ts +381 -394
  442. package/dist/builtin/workflows/src/tui/overlay-terminal-modes.ts +20 -19
  443. package/dist/builtin/workflows/src/tui/prompt-card-input.ts +183 -194
  444. package/dist/builtin/workflows/src/tui/prompt-card-render.ts +243 -302
  445. package/dist/builtin/workflows/src/tui/prompt-card-select.ts +76 -98
  446. package/dist/builtin/workflows/src/tui/prompt-card-state.ts +40 -40
  447. package/dist/builtin/workflows/src/tui/prompt-card-text.ts +76 -83
  448. package/dist/builtin/workflows/src/tui/prompt-card.ts +3 -3
  449. package/dist/builtin/workflows/src/tui/renderers.ts +6 -6
  450. package/dist/builtin/workflows/src/tui/run-detail.ts +287 -279
  451. package/dist/builtin/workflows/src/tui/session-list.ts +19 -22
  452. package/dist/builtin/workflows/src/tui/session-overlays.ts +82 -87
  453. package/dist/builtin/workflows/src/tui/session-picker.ts +258 -275
  454. package/dist/builtin/workflows/src/tui/stage-chat-composer-drafts.ts +11 -11
  455. package/dist/builtin/workflows/src/tui/stage-chat-layout.ts +55 -62
  456. package/dist/builtin/workflows/src/tui/stage-chat-view-archive-history.ts +220 -263
  457. package/dist/builtin/workflows/src/tui/stage-chat-view-custom-ui.ts +91 -102
  458. package/dist/builtin/workflows/src/tui/stage-chat-view-delivery-activity.ts +51 -59
  459. package/dist/builtin/workflows/src/tui/stage-chat-view-footer-status.ts +154 -208
  460. package/dist/builtin/workflows/src/tui/stage-chat-view-input.ts +174 -208
  461. package/dist/builtin/workflows/src/tui/stage-chat-view-live-events.ts +32 -44
  462. package/dist/builtin/workflows/src/tui/stage-chat-view-pending-tools.ts +2 -4
  463. package/dist/builtin/workflows/src/tui/stage-chat-view-render-helpers.ts +82 -97
  464. package/dist/builtin/workflows/src/tui/stage-chat-view-render-settings.ts +33 -31
  465. package/dist/builtin/workflows/src/tui/stage-chat-view-state.ts +428 -400
  466. package/dist/builtin/workflows/src/tui/stage-chat-view-status.ts +24 -25
  467. package/dist/builtin/workflows/src/tui/stage-chat-view-transcript.ts +181 -197
  468. package/dist/builtin/workflows/src/tui/stage-chat-view-types.ts +125 -134
  469. package/dist/builtin/workflows/src/tui/stage-chat-view.ts +210 -211
  470. package/dist/builtin/workflows/src/tui/status-helpers.ts +65 -69
  471. package/dist/builtin/workflows/src/tui/status-list.ts +316 -294
  472. package/dist/builtin/workflows/src/tui/store-widget-installer.ts +213 -214
  473. package/dist/builtin/workflows/src/tui/submit-pane.ts +114 -130
  474. package/dist/builtin/workflows/src/tui/switcher.ts +116 -134
  475. package/dist/builtin/workflows/src/tui/text-helpers.ts +136 -145
  476. package/dist/builtin/workflows/src/tui/toast.ts +68 -67
  477. package/dist/builtin/workflows/src/tui/widget.ts +265 -285
  478. package/dist/builtin/workflows/src/tui/workflow-attach-pane-handle.ts +12 -17
  479. package/dist/builtin/workflows/src/tui/workflow-attach-pane-types.ts +81 -82
  480. package/dist/builtin/workflows/src/tui/workflow-attach-pane.ts +467 -445
  481. package/dist/builtin/workflows/src/tui/workflow-list.ts +130 -145
  482. package/dist/builtin/workflows/src/tui/workflow-notice-card.ts +127 -144
  483. package/dist/builtin/workflows/src/tui/workflow-resume-selector.ts +217 -216
  484. package/dist/builtin/workflows/src/workflows/identity.ts +11 -11
  485. package/dist/builtin/workflows/src/workflows/registry.ts +66 -68
  486. package/dist/bun/cli.js.map +1 -1
  487. package/dist/bun/internal-intercom-broker.d.ts.map +1 -1
  488. package/dist/bun/internal-intercom-broker.js +1 -1
  489. package/dist/bun/internal-intercom-broker.js.map +1 -1
  490. package/dist/bun/register-bedrock.js +1 -1
  491. package/dist/bun/register-bedrock.js.map +1 -1
  492. package/dist/cli/args.d.ts.map +1 -1
  493. package/dist/cli/args.js +8 -1
  494. package/dist/cli/args.js.map +1 -1
  495. package/dist/cli/credential-print.d.ts +170 -0
  496. package/dist/cli/credential-print.d.ts.map +1 -0
  497. package/dist/cli/credential-print.js +513 -0
  498. package/dist/cli/credential-print.js.map +1 -0
  499. package/dist/cli/project-trust.d.ts +1 -1
  500. package/dist/cli/project-trust.d.ts.map +1 -1
  501. package/dist/cli/project-trust.js.map +1 -1
  502. package/dist/cli/startup-ui.d.ts.map +1 -1
  503. package/dist/cli/startup-ui.js +13 -6
  504. package/dist/cli/startup-ui.js.map +1 -1
  505. package/dist/config-self-update.d.ts.map +1 -1
  506. package/dist/config-self-update.js +5 -2
  507. package/dist/config-self-update.js.map +1 -1
  508. package/dist/config.d.ts.map +1 -1
  509. package/dist/config.js +1 -3
  510. package/dist/config.js.map +1 -1
  511. package/dist/core/agent-session-accessors.d.ts.map +1 -1
  512. package/dist/core/agent-session-accessors.js +125 -25
  513. package/dist/core/agent-session-accessors.js.map +1 -1
  514. package/dist/core/agent-session-auto-compaction.d.ts.map +1 -1
  515. package/dist/core/agent-session-auto-compaction.js +4 -2
  516. package/dist/core/agent-session-auto-compaction.js.map +1 -1
  517. package/dist/core/agent-session-bash.d.ts +1 -1
  518. package/dist/core/agent-session-bash.d.ts.map +1 -1
  519. package/dist/core/agent-session-bash.js +3 -1
  520. package/dist/core/agent-session-bash.js.map +1 -1
  521. package/dist/core/agent-session-compaction.d.ts.map +1 -1
  522. package/dist/core/agent-session-compaction.js +45 -8
  523. package/dist/core/agent-session-compaction.js.map +1 -1
  524. package/dist/core/agent-session-custom-message-commit.d.ts +1 -1
  525. package/dist/core/agent-session-custom-message-commit.d.ts.map +1 -1
  526. package/dist/core/agent-session-custom-message-commit.js +13 -9
  527. package/dist/core/agent-session-custom-message-commit.js.map +1 -1
  528. package/dist/core/agent-session-delivery-forwarding.d.ts +1 -1
  529. package/dist/core/agent-session-delivery-forwarding.d.ts.map +1 -1
  530. package/dist/core/agent-session-delivery-forwarding.js.map +1 -1
  531. package/dist/core/agent-session-events.d.ts.map +1 -1
  532. package/dist/core/agent-session-events.js +15 -8
  533. package/dist/core/agent-session-events.js.map +1 -1
  534. package/dist/core/agent-session-export.d.ts +1 -1
  535. package/dist/core/agent-session-export.d.ts.map +1 -1
  536. package/dist/core/agent-session-export.js.map +1 -1
  537. package/dist/core/agent-session-extension-bindings.d.ts.map +1 -1
  538. package/dist/core/agent-session-extension-bindings.js +12 -5
  539. package/dist/core/agent-session-extension-bindings.js.map +1 -1
  540. package/dist/core/agent-session-message-queue.d.ts +4 -4
  541. package/dist/core/agent-session-message-queue.d.ts.map +1 -1
  542. package/dist/core/agent-session-message-queue.js +21 -12
  543. package/dist/core/agent-session-message-queue.js.map +1 -1
  544. package/dist/core/agent-session-methods.d.ts +4 -5
  545. package/dist/core/agent-session-methods.d.ts.map +1 -1
  546. package/dist/core/agent-session-methods.js.map +1 -1
  547. package/dist/core/agent-session-models.d.ts.map +1 -1
  548. package/dist/core/agent-session-models.js +1 -1
  549. package/dist/core/agent-session-models.js.map +1 -1
  550. package/dist/core/agent-session-persistent-custom-messages.d.ts +1 -1
  551. package/dist/core/agent-session-persistent-custom-messages.d.ts.map +1 -1
  552. package/dist/core/agent-session-persistent-custom-messages.js +6 -4
  553. package/dist/core/agent-session-persistent-custom-messages.js.map +1 -1
  554. package/dist/core/agent-session-post-tool-compaction.d.ts +1 -1
  555. package/dist/core/agent-session-post-tool-compaction.d.ts.map +1 -1
  556. package/dist/core/agent-session-post-tool-compaction.js.map +1 -1
  557. package/dist/core/agent-session-prompt.d.ts.map +1 -1
  558. package/dist/core/agent-session-prompt.js +5 -5
  559. package/dist/core/agent-session-prompt.js.map +1 -1
  560. package/dist/core/agent-session-queue-pause.d.ts.map +1 -1
  561. package/dist/core/agent-session-queue-pause.js +8 -7
  562. package/dist/core/agent-session-queue-pause.js.map +1 -1
  563. package/dist/core/agent-session-retry.d.ts.map +1 -1
  564. package/dist/core/agent-session-retry.js +30 -7
  565. package/dist/core/agent-session-retry.js.map +1 -1
  566. package/dist/core/agent-session-runtime-auth.d.ts.map +1 -1
  567. package/dist/core/agent-session-runtime-auth.js +3 -1
  568. package/dist/core/agent-session-runtime-auth.js.map +1 -1
  569. package/dist/core/agent-session-runtime.d.ts +14 -3
  570. package/dist/core/agent-session-runtime.d.ts.map +1 -1
  571. package/dist/core/agent-session-runtime.js +17 -1
  572. package/dist/core/agent-session-runtime.js.map +1 -1
  573. package/dist/core/agent-session-services.d.ts.map +1 -1
  574. package/dist/core/agent-session-services.js +4 -2
  575. package/dist/core/agent-session-services.js.map +1 -1
  576. package/dist/core/agent-session-state.d.ts +1 -1
  577. package/dist/core/agent-session-state.d.ts.map +1 -1
  578. package/dist/core/agent-session-state.js.map +1 -1
  579. package/dist/core/agent-session-tool-hooks.d.ts.map +1 -1
  580. package/dist/core/agent-session-tool-hooks.js +2 -6
  581. package/dist/core/agent-session-tool-hooks.js.map +1 -1
  582. package/dist/core/agent-session-tool-registry.d.ts.map +1 -1
  583. package/dist/core/agent-session-tool-registry.js +4 -3
  584. package/dist/core/agent-session-tool-registry.js.map +1 -1
  585. package/dist/core/agent-session-transfer.d.ts.map +1 -1
  586. package/dist/core/agent-session-transfer.js +6 -10
  587. package/dist/core/agent-session-transfer.js.map +1 -1
  588. package/dist/core/agent-session-tree.d.ts +1 -1
  589. package/dist/core/agent-session-tree.d.ts.map +1 -1
  590. package/dist/core/agent-session-tree.js +5 -0
  591. package/dist/core/agent-session-tree.js.map +1 -1
  592. package/dist/core/agent-session-types.d.ts +1 -1
  593. package/dist/core/agent-session-types.d.ts.map +1 -1
  594. package/dist/core/agent-session-types.js +4 -1
  595. package/dist/core/agent-session-types.js.map +1 -1
  596. package/dist/core/agent-session.d.ts +14 -10
  597. package/dist/core/agent-session.d.ts.map +1 -1
  598. package/dist/core/agent-session.js +8 -9
  599. package/dist/core/agent-session.js.map +1 -1
  600. package/dist/core/anthropic-thinking-guard.d.ts.map +1 -1
  601. package/dist/core/anthropic-thinking-guard.js +4 -2
  602. package/dist/core/anthropic-thinking-guard.js.map +1 -1
  603. package/dist/core/async/format.d.ts +1 -1
  604. package/dist/core/async/format.d.ts.map +1 -1
  605. package/dist/core/async/format.js +3 -1
  606. package/dist/core/async/format.js.map +1 -1
  607. package/dist/core/async/job-manager.d.ts.map +1 -1
  608. package/dist/core/async/job-manager.js +20 -5
  609. package/dist/core/async/job-manager.js.map +1 -1
  610. package/dist/core/async/session-manager.d.ts.map +1 -1
  611. package/dist/core/async/session-manager.js.map +1 -1
  612. package/dist/core/atomic-guide-command.d.ts.map +1 -1
  613. package/dist/core/atomic-guide-command.js +1 -2
  614. package/dist/core/atomic-guide-command.js.map +1 -1
  615. package/dist/core/auth-guidance.d.ts.map +1 -1
  616. package/dist/core/auth-guidance.js.map +1 -1
  617. package/dist/core/auth-storage-backends.d.ts.map +1 -1
  618. package/dist/core/auth-storage-backends.js.map +1 -1
  619. package/dist/core/auth-storage.d.ts +1 -1
  620. package/dist/core/auth-storage.d.ts.map +1 -1
  621. package/dist/core/auth-storage.js +4 -8
  622. package/dist/core/auth-storage.js.map +1 -1
  623. package/dist/core/builtin-packages.d.ts.map +1 -1
  624. package/dist/core/builtin-packages.js +1 -4
  625. package/dist/core/builtin-packages.js.map +1 -1
  626. package/dist/core/cache-stats.d.ts.map +1 -1
  627. package/dist/core/cache-stats.js +8 -6
  628. package/dist/core/cache-stats.js.map +1 -1
  629. package/dist/core/callback-activity.d.ts.map +1 -1
  630. package/dist/core/callback-activity.js.map +1 -1
  631. package/dist/core/codex-errors.d.ts.map +1 -1
  632. package/dist/core/codex-errors.js +1 -1
  633. package/dist/core/codex-errors.js.map +1 -1
  634. package/dist/core/codex-fast-mode.d.ts.map +1 -1
  635. package/dist/core/codex-fast-mode.js.map +1 -1
  636. package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
  637. package/dist/core/compaction/branch-summarization.js +1 -1
  638. package/dist/core/compaction/branch-summarization.js.map +1 -1
  639. package/dist/core/compaction/compaction-boundary.d.ts.map +1 -1
  640. package/dist/core/compaction/compaction-boundary.js +10 -6
  641. package/dist/core/compaction/compaction-boundary.js.map +1 -1
  642. package/dist/core/compaction/compaction-runner.d.ts +1 -1
  643. package/dist/core/compaction/compaction-runner.d.ts.map +1 -1
  644. package/dist/core/compaction/compaction-runner.js +2 -4
  645. package/dist/core/compaction/compaction-runner.js.map +1 -1
  646. package/dist/core/compaction/compaction.d.ts.map +1 -1
  647. package/dist/core/compaction/compaction.js +5 -1
  648. package/dist/core/compaction/compaction.js.map +1 -1
  649. package/dist/core/compaction/deleted-ranges.d.ts.map +1 -1
  650. package/dist/core/compaction/deleted-ranges.js.map +1 -1
  651. package/dist/core/compaction/fallback-planner.d.ts.map +1 -1
  652. package/dist/core/compaction/fallback-planner.js.map +1 -1
  653. package/dist/core/compaction/index.d.ts +6 -6
  654. package/dist/core/compaction/index.d.ts.map +1 -1
  655. package/dist/core/compaction/index.js +6 -6
  656. package/dist/core/compaction/index.js.map +1 -1
  657. package/dist/core/compaction/planner-outcome.d.ts.map +1 -1
  658. package/dist/core/compaction/planner-outcome.js.map +1 -1
  659. package/dist/core/compaction/range-planner-diagnostics.d.ts.map +1 -1
  660. package/dist/core/compaction/range-planner-diagnostics.js +4 -2
  661. package/dist/core/compaction/range-planner-diagnostics.js.map +1 -1
  662. package/dist/core/compaction/range-planner.d.ts.map +1 -1
  663. package/dist/core/compaction/range-planner.js +4 -1
  664. package/dist/core/compaction/range-planner.js.map +1 -1
  665. package/dist/core/compaction/transcript-serialization.d.ts.map +1 -1
  666. package/dist/core/compaction/transcript-serialization.js.map +1 -1
  667. package/dist/core/context-tool-pairing.js +3 -3
  668. package/dist/core/context-tool-pairing.js.map +1 -1
  669. package/dist/core/copilot-env-routing.d.ts.map +1 -1
  670. package/dist/core/copilot-env-routing.js.map +1 -1
  671. package/dist/core/exec.d.ts.map +1 -1
  672. package/dist/core/exec.js +5 -0
  673. package/dist/core/exec.js.map +1 -1
  674. package/dist/core/experimental.d.ts.map +1 -1
  675. package/dist/core/experimental.js +2 -1
  676. package/dist/core/experimental.js.map +1 -1
  677. package/dist/core/extensions/api-types.d.ts +2 -2
  678. package/dist/core/extensions/api-types.d.ts.map +1 -1
  679. package/dist/core/extensions/api-types.js.map +1 -1
  680. package/dist/core/extensions/context-types.d.ts +7 -1
  681. package/dist/core/extensions/context-types.d.ts.map +1 -1
  682. package/dist/core/extensions/context-types.js.map +1 -1
  683. package/dist/core/extensions/index.d.ts +7 -7
  684. package/dist/core/extensions/index.d.ts.map +1 -1
  685. package/dist/core/extensions/index.js +2 -2
  686. package/dist/core/extensions/index.js.map +1 -1
  687. package/dist/core/extensions/loader-api.d.ts +1 -1
  688. package/dist/core/extensions/loader-api.d.ts.map +1 -1
  689. package/dist/core/extensions/loader-api.js +4 -2
  690. package/dist/core/extensions/loader-api.js.map +1 -1
  691. package/dist/core/extensions/loader-core.d.ts.map +1 -1
  692. package/dist/core/extensions/loader-core.js +2 -2
  693. package/dist/core/extensions/loader-core.js.map +1 -1
  694. package/dist/core/extensions/loader-discovery.d.ts.map +1 -1
  695. package/dist/core/extensions/loader-discovery.js.map +1 -1
  696. package/dist/core/extensions/loader-resources.d.ts.map +1 -1
  697. package/dist/core/extensions/loader-resources.js.map +1 -1
  698. package/dist/core/extensions/loader-runtime.d.ts.map +1 -1
  699. package/dist/core/extensions/loader-runtime.js +23 -11
  700. package/dist/core/extensions/loader-runtime.js.map +1 -1
  701. package/dist/core/extensions/loader-virtual-modules.d.ts +17 -0
  702. package/dist/core/extensions/loader-virtual-modules.d.ts.map +1 -1
  703. package/dist/core/extensions/loader-virtual-modules.js +281 -20
  704. package/dist/core/extensions/loader-virtual-modules.js.map +1 -1
  705. package/dist/core/extensions/loader.d.ts.map +1 -1
  706. package/dist/core/extensions/loader.js.map +1 -1
  707. package/dist/core/extensions/provider-types.d.ts +2 -2
  708. package/dist/core/extensions/provider-types.d.ts.map +1 -1
  709. package/dist/core/extensions/provider-types.js.map +1 -1
  710. package/dist/core/extensions/reactive-widget.d.ts.map +1 -1
  711. package/dist/core/extensions/reactive-widget.js.map +1 -1
  712. package/dist/core/extensions/runner-context.d.ts +27 -1
  713. package/dist/core/extensions/runner-context.d.ts.map +1 -1
  714. package/dist/core/extensions/runner-context.js +52 -0
  715. package/dist/core/extensions/runner-context.js.map +1 -1
  716. package/dist/core/extensions/runner-events.d.ts.map +1 -1
  717. package/dist/core/extensions/runner-events.js.map +1 -1
  718. package/dist/core/extensions/runner.d.ts +1 -0
  719. package/dist/core/extensions/runner.d.ts.map +1 -1
  720. package/dist/core/extensions/runner.js +18 -6
  721. package/dist/core/extensions/runner.js.map +1 -1
  722. package/dist/core/extensions/runtime-types.d.ts +3 -1
  723. package/dist/core/extensions/runtime-types.d.ts.map +1 -1
  724. package/dist/core/extensions/runtime-types.js.map +1 -1
  725. package/dist/core/extensions/session-events.d.ts.map +1 -1
  726. package/dist/core/extensions/session-events.js.map +1 -1
  727. package/dist/core/extensions/tool-types.d.ts.map +1 -1
  728. package/dist/core/extensions/tool-types.js.map +1 -1
  729. package/dist/core/extensions/types.d.ts +15 -2
  730. package/dist/core/extensions/types.d.ts.map +1 -1
  731. package/dist/core/extensions/types.js +1 -1
  732. package/dist/core/extensions/types.js.map +1 -1
  733. package/dist/core/extensions/ui-types.d.ts +16 -2
  734. package/dist/core/extensions/ui-types.d.ts.map +1 -1
  735. package/dist/core/extensions/ui-types.js.map +1 -1
  736. package/dist/core/fallback-models.d.ts.map +1 -1
  737. package/dist/core/fallback-models.js +11 -2
  738. package/dist/core/fallback-models.js.map +1 -1
  739. package/dist/core/flattened-tool-arguments.d.ts.map +1 -1
  740. package/dist/core/flattened-tool-arguments.js.map +1 -1
  741. package/dist/core/footer-data-provider.d.ts +10 -0
  742. package/dist/core/footer-data-provider.d.ts.map +1 -1
  743. package/dist/core/footer-data-provider.js +5 -3
  744. package/dist/core/footer-data-provider.js.map +1 -1
  745. package/dist/core/http-dispatcher.d.ts.map +1 -1
  746. package/dist/core/http-dispatcher.js.map +1 -1
  747. package/dist/core/keybindings.d.ts +1 -1
  748. package/dist/core/keybindings.d.ts.map +1 -1
  749. package/dist/core/keybindings.js.map +1 -1
  750. package/dist/core/messages.d.ts.map +1 -1
  751. package/dist/core/messages.js.map +1 -1
  752. package/dist/core/model-capabilities.d.ts.map +1 -1
  753. package/dist/core/model-capabilities.js +1 -2
  754. package/dist/core/model-capabilities.js.map +1 -1
  755. package/dist/core/model-resolver-cli.d.ts.map +1 -1
  756. package/dist/core/model-resolver-cli.js.map +1 -1
  757. package/dist/core/model-resolver-defaults.js.map +1 -1
  758. package/dist/core/model-resolver-initial.d.ts +1 -1
  759. package/dist/core/model-resolver-initial.d.ts.map +1 -1
  760. package/dist/core/model-resolver-initial.js +1 -1
  761. package/dist/core/model-resolver-initial.js.map +1 -1
  762. package/dist/core/model-resolver-patterns.d.ts.map +1 -1
  763. package/dist/core/model-resolver-patterns.js.map +1 -1
  764. package/dist/core/model-resolver-scope.d.ts +1 -1
  765. package/dist/core/model-resolver-scope.d.ts.map +1 -1
  766. package/dist/core/model-resolver-scope.js +12 -2
  767. package/dist/core/model-resolver-scope.js.map +1 -1
  768. package/dist/core/model-resolver-types.d.ts.map +1 -1
  769. package/dist/core/model-resolver-types.js.map +1 -1
  770. package/dist/core/model-resolver.d.ts +3 -3
  771. package/dist/core/model-resolver.d.ts.map +1 -1
  772. package/dist/core/model-resolver.js +1 -1
  773. package/dist/core/model-resolver.js.map +1 -1
  774. package/dist/core/model-runtime-auth.d.ts.map +1 -1
  775. package/dist/core/model-runtime-auth.js +5 -2
  776. package/dist/core/model-runtime-auth.js.map +1 -1
  777. package/dist/core/model-runtime-restoration.d.ts.map +1 -1
  778. package/dist/core/model-runtime-restoration.js +2 -2
  779. package/dist/core/model-runtime-restoration.js.map +1 -1
  780. package/dist/core/model-runtime-snapshot.d.ts.map +1 -1
  781. package/dist/core/model-runtime-snapshot.js.map +1 -1
  782. package/dist/core/model-runtime-streaming.d.ts.map +1 -1
  783. package/dist/core/model-runtime-streaming.js.map +1 -1
  784. package/dist/core/model-runtime.d.ts.map +1 -1
  785. package/dist/core/model-runtime.js +9 -7
  786. package/dist/core/model-runtime.js.map +1 -1
  787. package/dist/core/oauth-login.d.ts.map +1 -1
  788. package/dist/core/oauth-login.js +7 -2
  789. package/dist/core/oauth-login.js.map +1 -1
  790. package/dist/core/oauth-provider-metadata.d.ts.map +1 -1
  791. package/dist/core/oauth-provider-metadata.js +20 -6
  792. package/dist/core/oauth-provider-metadata.js.map +1 -1
  793. package/dist/core/openai-responses-payload-sanitizer.js.map +1 -1
  794. package/dist/core/output-guard.d.ts +44 -0
  795. package/dist/core/output-guard.d.ts.map +1 -1
  796. package/dist/core/output-guard.js +63 -0
  797. package/dist/core/output-guard.js.map +1 -1
  798. package/dist/core/package-manager-auto-resources.d.ts.map +1 -1
  799. package/dist/core/package-manager-auto-resources.js +6 -1
  800. package/dist/core/package-manager-auto-resources.js.map +1 -1
  801. package/dist/core/package-manager-git.d.ts.map +1 -1
  802. package/dist/core/package-manager-git.js +27 -11
  803. package/dist/core/package-manager-git.js.map +1 -1
  804. package/dist/core/package-manager-npm.d.ts.map +1 -1
  805. package/dist/core/package-manager-npm.js +4 -2
  806. package/dist/core/package-manager-npm.js.map +1 -1
  807. package/dist/core/package-manager-operations.d.ts.map +1 -1
  808. package/dist/core/package-manager-operations.js +2 -2
  809. package/dist/core/package-manager-operations.js.map +1 -1
  810. package/dist/core/package-manager-paths.d.ts.map +1 -1
  811. package/dist/core/package-manager-paths.js.map +1 -1
  812. package/dist/core/package-manager-resolver.d.ts.map +1 -1
  813. package/dist/core/package-manager-resolver.js +19 -16
  814. package/dist/core/package-manager-resolver.js.map +1 -1
  815. package/dist/core/package-manager-resource-collector.d.ts.map +1 -1
  816. package/dist/core/package-manager-resource-collector.js +6 -6
  817. package/dist/core/package-manager-resource-collector.js.map +1 -1
  818. package/dist/core/package-manager-resource-files.d.ts.map +1 -1
  819. package/dist/core/package-manager-resource-files.js +4 -3
  820. package/dist/core/package-manager-resource-files.js.map +1 -1
  821. package/dist/core/package-manager-resource-patterns.d.ts.map +1 -1
  822. package/dist/core/package-manager-resource-patterns.js.map +1 -1
  823. package/dist/core/package-manager-settings.d.ts.map +1 -1
  824. package/dist/core/package-manager-settings.js +3 -2
  825. package/dist/core/package-manager-settings.js.map +1 -1
  826. package/dist/core/package-manager-source.d.ts.map +1 -1
  827. package/dist/core/package-manager-source.js +1 -1
  828. package/dist/core/package-manager-source.js.map +1 -1
  829. package/dist/core/package-manager.d.ts +1 -1
  830. package/dist/core/package-manager.d.ts.map +1 -1
  831. package/dist/core/package-manager.js +2 -3
  832. package/dist/core/package-manager.js.map +1 -1
  833. package/dist/core/prompt-templates-async.d.ts.map +1 -1
  834. package/dist/core/prompt-templates-async.js +15 -7
  835. package/dist/core/prompt-templates-async.js.map +1 -1
  836. package/dist/core/prompt-templates.d.ts.map +1 -1
  837. package/dist/core/prompt-templates.js +1 -3
  838. package/dist/core/prompt-templates.js.map +1 -1
  839. package/dist/core/provider-composer-internal.d.ts +1 -1
  840. package/dist/core/provider-composer-internal.d.ts.map +1 -1
  841. package/dist/core/provider-composer-internal.js.map +1 -1
  842. package/dist/core/provider-composer.d.ts +1 -1
  843. package/dist/core/provider-composer.d.ts.map +1 -1
  844. package/dist/core/provider-composer.js.map +1 -1
  845. package/dist/core/provider-context-usage.d.ts.map +1 -1
  846. package/dist/core/provider-context-usage.js +2 -1
  847. package/dist/core/provider-context-usage.js.map +1 -1
  848. package/dist/core/resource-loader-assets.d.ts.map +1 -1
  849. package/dist/core/resource-loader-assets.js +31 -7
  850. package/dist/core/resource-loader-assets.js.map +1 -1
  851. package/dist/core/resource-loader-context-files.d.ts +6 -0
  852. package/dist/core/resource-loader-context-files.d.ts.map +1 -1
  853. package/dist/core/resource-loader-context-files.js +83 -4
  854. package/dist/core/resource-loader-context-files.js.map +1 -1
  855. package/dist/core/resource-loader-core.d.ts +12 -3
  856. package/dist/core/resource-loader-core.d.ts.map +1 -1
  857. package/dist/core/resource-loader-core.js +36 -19
  858. package/dist/core/resource-loader-core.js.map +1 -1
  859. package/dist/core/resource-loader-discovery.d.ts.map +1 -1
  860. package/dist/core/resource-loader-discovery.js.map +1 -1
  861. package/dist/core/resource-loader-extensions.d.ts.map +1 -1
  862. package/dist/core/resource-loader-extensions.js +33 -21
  863. package/dist/core/resource-loader-extensions.js.map +1 -1
  864. package/dist/core/resource-loader-internals.d.ts +13 -6
  865. package/dist/core/resource-loader-internals.d.ts.map +1 -1
  866. package/dist/core/resource-loader-internals.js.map +1 -1
  867. package/dist/core/resource-loader-package-resources.d.ts.map +1 -1
  868. package/dist/core/resource-loader-package-resources.js +1 -1
  869. package/dist/core/resource-loader-package-resources.js.map +1 -1
  870. package/dist/core/resource-loader-paths.js.map +1 -1
  871. package/dist/core/resource-loader-reload.d.ts.map +1 -1
  872. package/dist/core/resource-loader-reload.js +28 -13
  873. package/dist/core/resource-loader-reload.js.map +1 -1
  874. package/dist/core/resource-loader-source-info.d.ts +1 -1
  875. package/dist/core/resource-loader-source-info.d.ts.map +1 -1
  876. package/dist/core/resource-loader-source-info.js +1 -1
  877. package/dist/core/resource-loader-source-info.js.map +1 -1
  878. package/dist/core/resource-loader-types.d.ts +9 -3
  879. package/dist/core/resource-loader-types.d.ts.map +1 -1
  880. package/dist/core/resource-loader-types.js.map +1 -1
  881. package/dist/core/resource-loader.d.ts +1 -1
  882. package/dist/core/resource-loader.d.ts.map +1 -1
  883. package/dist/core/resource-loader.js +1 -1
  884. package/dist/core/resource-loader.js.map +1 -1
  885. package/dist/core/sdk-exports.d.ts +1 -1
  886. package/dist/core/sdk-exports.d.ts.map +1 -1
  887. package/dist/core/sdk-exports.js +2 -2
  888. package/dist/core/sdk-exports.js.map +1 -1
  889. package/dist/core/sdk-types.d.ts +3 -3
  890. package/dist/core/sdk-types.d.ts.map +1 -1
  891. package/dist/core/sdk-types.js.map +1 -1
  892. package/dist/core/sdk.d.ts +1 -1
  893. package/dist/core/sdk.d.ts.map +1 -1
  894. package/dist/core/sdk.js +13 -20
  895. package/dist/core/sdk.js.map +1 -1
  896. package/dist/core/session-manager-archive.d.ts.map +1 -1
  897. package/dist/core/session-manager-archive.js +5 -2
  898. package/dist/core/session-manager-archive.js.map +1 -1
  899. package/dist/core/session-manager-classification.js +3 -3
  900. package/dist/core/session-manager-classification.js.map +1 -1
  901. package/dist/core/session-manager-core.d.ts.map +1 -1
  902. package/dist/core/session-manager-core.js +3 -3
  903. package/dist/core/session-manager-core.js.map +1 -1
  904. package/dist/core/session-manager-entries.d.ts +1 -1
  905. package/dist/core/session-manager-entries.d.ts.map +1 -1
  906. package/dist/core/session-manager-entries.js.map +1 -1
  907. package/dist/core/session-manager-history.d.ts.map +1 -1
  908. package/dist/core/session-manager-history.js +13 -5
  909. package/dist/core/session-manager-history.js.map +1 -1
  910. package/dist/core/session-manager-list.d.ts.map +1 -1
  911. package/dist/core/session-manager-list.js +1 -1
  912. package/dist/core/session-manager-list.js.map +1 -1
  913. package/dist/core/session-manager-migrations.js.map +1 -1
  914. package/dist/core/session-manager-storage.d.ts.map +1 -1
  915. package/dist/core/session-manager-storage.js.map +1 -1
  916. package/dist/core/session-manager-types.d.ts.map +1 -1
  917. package/dist/core/session-manager-types.js.map +1 -1
  918. package/dist/core/session-manager.d.ts +4 -4
  919. package/dist/core/session-manager.d.ts.map +1 -1
  920. package/dist/core/session-manager.js +2 -2
  921. package/dist/core/session-manager.js.map +1 -1
  922. package/dist/core/settings-manager-core.d.ts.map +1 -1
  923. package/dist/core/settings-manager-core.js.map +1 -1
  924. package/dist/core/settings-manager-ui-accessors.js +2 -1
  925. package/dist/core/settings-manager-ui-accessors.js.map +1 -1
  926. package/dist/core/settings-storage.d.ts.map +1 -1
  927. package/dist/core/settings-storage.js +3 -3
  928. package/dist/core/settings-storage.js.map +1 -1
  929. package/dist/core/settings-types.d.ts.map +1 -1
  930. package/dist/core/settings-types.js.map +1 -1
  931. package/dist/core/skills-async.d.ts.map +1 -1
  932. package/dist/core/skills-async.js +18 -8
  933. package/dist/core/skills-async.js.map +1 -1
  934. package/dist/core/slash-commands.d.ts.map +1 -1
  935. package/dist/core/slash-commands.js +76 -19
  936. package/dist/core/slash-commands.js.map +1 -1
  937. package/dist/core/system-prompt.d.ts.map +1 -1
  938. package/dist/core/system-prompt.js +5 -19
  939. package/dist/core/system-prompt.js.map +1 -1
  940. package/dist/core/thinking-blocks.d.ts.map +1 -1
  941. package/dist/core/thinking-blocks.js +2 -2
  942. package/dist/core/thinking-blocks.js.map +1 -1
  943. package/dist/core/tools/artifact-protocol.d.ts.map +1 -1
  944. package/dist/core/tools/artifact-protocol.js.map +1 -1
  945. package/dist/core/tools/artifacts.d.ts.map +1 -1
  946. package/dist/core/tools/artifacts.js.map +1 -1
  947. package/dist/core/tools/ask-user-question/ask-user-question.d.ts.map +1 -1
  948. package/dist/core/tools/ask-user-question/ask-user-question.js.map +1 -1
  949. package/dist/core/tools/ask-user-question/state/build-questionnaire.d.ts +1 -1
  950. package/dist/core/tools/ask-user-question/state/build-questionnaire.d.ts.map +1 -1
  951. package/dist/core/tools/ask-user-question/state/build-questionnaire.js +1 -1
  952. package/dist/core/tools/ask-user-question/state/build-questionnaire.js.map +1 -1
  953. package/dist/core/tools/ask-user-question/state/questionnaire-session.d.ts.map +1 -1
  954. package/dist/core/tools/ask-user-question/state/questionnaire-session.js +2 -4
  955. package/dist/core/tools/ask-user-question/state/questionnaire-session.js.map +1 -1
  956. package/dist/core/tools/ask-user-question/state/state-reducer.d.ts.map +1 -1
  957. package/dist/core/tools/ask-user-question/state/state-reducer.js.map +1 -1
  958. package/dist/core/tools/ask-user-question/view/body-residual-spacer.d.ts.map +1 -1
  959. package/dist/core/tools/ask-user-question/view/body-residual-spacer.js.map +1 -1
  960. package/dist/core/tools/ask-user-question/view/components/multi-select-view.d.ts.map +1 -1
  961. package/dist/core/tools/ask-user-question/view/components/multi-select-view.js.map +1 -1
  962. package/dist/core/tools/ask-user-question/view/components/preview/markdown-content-cache.d.ts +1 -1
  963. package/dist/core/tools/ask-user-question/view/components/preview/markdown-content-cache.d.ts.map +1 -1
  964. package/dist/core/tools/ask-user-question/view/components/preview/markdown-content-cache.js.map +1 -1
  965. package/dist/core/tools/ask-user-question/view/components/preview/preview-block-renderer.d.ts +1 -1
  966. package/dist/core/tools/ask-user-question/view/components/preview/preview-block-renderer.d.ts.map +1 -1
  967. package/dist/core/tools/ask-user-question/view/components/preview/preview-block-renderer.js +1 -3
  968. package/dist/core/tools/ask-user-question/view/components/preview/preview-block-renderer.js.map +1 -1
  969. package/dist/core/tools/ask-user-question/view/components/submit-picker.d.ts.map +1 -1
  970. package/dist/core/tools/ask-user-question/view/components/submit-picker.js.map +1 -1
  971. package/dist/core/tools/ask-user-question/view/components/tab-bar.d.ts.map +1 -1
  972. package/dist/core/tools/ask-user-question/view/components/tab-bar.js.map +1 -1
  973. package/dist/core/tools/ask-user-question/view/dialog-builder.d.ts +1 -1
  974. package/dist/core/tools/ask-user-question/view/dialog-builder.d.ts.map +1 -1
  975. package/dist/core/tools/ask-user-question/view/dialog-builder.js +1 -1
  976. package/dist/core/tools/ask-user-question/view/dialog-builder.js.map +1 -1
  977. package/dist/core/tools/ask-user-question/view/props-adapter.d.ts.map +1 -1
  978. package/dist/core/tools/ask-user-question/view/props-adapter.js +2 -4
  979. package/dist/core/tools/ask-user-question/view/props-adapter.js.map +1 -1
  980. package/dist/core/tools/ask-user-question/view/tab-content-strategy.d.ts +1 -1
  981. package/dist/core/tools/ask-user-question/view/tab-content-strategy.d.ts.map +1 -1
  982. package/dist/core/tools/ask-user-question/view/tab-content-strategy.js +2 -9
  983. package/dist/core/tools/ask-user-question/view/tab-content-strategy.js.map +1 -1
  984. package/dist/core/tools/bash-async-execution.d.ts.map +1 -1
  985. package/dist/core/tools/bash-async-execution.js +11 -4
  986. package/dist/core/tools/bash-async-execution.js.map +1 -1
  987. package/dist/core/tools/bash-async-jobs.d.ts.map +1 -1
  988. package/dist/core/tools/bash-async-jobs.js +14 -2
  989. package/dist/core/tools/bash-async-jobs.js.map +1 -1
  990. package/dist/core/tools/bash-async-output.d.ts.map +1 -1
  991. package/dist/core/tools/bash-async-output.js +6 -2
  992. package/dist/core/tools/bash-async-output.js.map +1 -1
  993. package/dist/core/tools/bash-interceptor.d.ts.map +1 -1
  994. package/dist/core/tools/bash-interceptor.js +20 -4
  995. package/dist/core/tools/bash-interceptor.js.map +1 -1
  996. package/dist/core/tools/bash-leading-cd.d.ts.map +1 -1
  997. package/dist/core/tools/bash-leading-cd.js +9 -3
  998. package/dist/core/tools/bash-leading-cd.js.map +1 -1
  999. package/dist/core/tools/bash-pty-native.d.ts.map +1 -1
  1000. package/dist/core/tools/bash-pty-native.js.map +1 -1
  1001. package/dist/core/tools/bash-session-environment.d.ts.map +1 -1
  1002. package/dist/core/tools/bash-session-environment.js +24 -12
  1003. package/dist/core/tools/bash-session-environment.js.map +1 -1
  1004. package/dist/core/tools/bash.d.ts.map +1 -1
  1005. package/dist/core/tools/bash.js +123 -27
  1006. package/dist/core/tools/bash.js.map +1 -1
  1007. package/dist/core/tools/block-resolver.d.ts.map +1 -1
  1008. package/dist/core/tools/block-resolver.js.map +1 -1
  1009. package/dist/core/tools/conflict-registry.d.ts.map +1 -1
  1010. package/dist/core/tools/conflict-registry.js.map +1 -1
  1011. package/dist/core/tools/directory-tree.d.ts.map +1 -1
  1012. package/dist/core/tools/directory-tree.js +20 -4
  1013. package/dist/core/tools/directory-tree.js.map +1 -1
  1014. package/dist/core/tools/edit.d.ts.map +1 -1
  1015. package/dist/core/tools/edit.js +37 -13
  1016. package/dist/core/tools/edit.js.map +1 -1
  1017. package/dist/core/tools/fetch-url.d.ts.map +1 -1
  1018. package/dist/core/tools/fetch-url.js +127 -41
  1019. package/dist/core/tools/fetch-url.js.map +1 -1
  1020. package/dist/core/tools/find.d.ts.map +1 -1
  1021. package/dist/core/tools/find.js +176 -46
  1022. package/dist/core/tools/find.js.map +1 -1
  1023. package/dist/core/tools/grep.d.ts.map +1 -1
  1024. package/dist/core/tools/grep.js +43 -10
  1025. package/dist/core/tools/grep.js.map +1 -1
  1026. package/dist/core/tools/hashline-engine/apply.d.ts.map +1 -1
  1027. package/dist/core/tools/hashline-engine/apply.js +6 -6
  1028. package/dist/core/tools/hashline-engine/apply.js.map +1 -1
  1029. package/dist/core/tools/hashline-engine/block.js +1 -1
  1030. package/dist/core/tools/hashline-engine/block.js.map +1 -1
  1031. package/dist/core/tools/hashline-engine/format.d.ts.map +1 -1
  1032. package/dist/core/tools/hashline-engine/format.js +1 -1
  1033. package/dist/core/tools/hashline-engine/format.js.map +1 -1
  1034. package/dist/core/tools/hashline-engine/input.d.ts.map +1 -1
  1035. package/dist/core/tools/hashline-engine/input.js +7 -7
  1036. package/dist/core/tools/hashline-engine/input.js.map +1 -1
  1037. package/dist/core/tools/hashline-engine/parser.js +1 -1
  1038. package/dist/core/tools/hashline-engine/parser.js.map +1 -1
  1039. package/dist/core/tools/hashline-engine/patcher.js +5 -5
  1040. package/dist/core/tools/hashline-engine/patcher.js.map +1 -1
  1041. package/dist/core/tools/hashline-engine/prefixes.js +4 -4
  1042. package/dist/core/tools/hashline-engine/prefixes.js.map +1 -1
  1043. package/dist/core/tools/hashline-engine/recovery.d.ts.map +1 -1
  1044. package/dist/core/tools/hashline-engine/recovery.js +4 -2
  1045. package/dist/core/tools/hashline-engine/recovery.js.map +1 -1
  1046. package/dist/core/tools/hashline-engine/snapshots.js +5 -5
  1047. package/dist/core/tools/hashline-engine/snapshots.js.map +1 -1
  1048. package/dist/core/tools/hashline.d.ts.map +1 -1
  1049. package/dist/core/tools/hashline.js +24 -13
  1050. package/dist/core/tools/hashline.js.map +1 -1
  1051. package/dist/core/tools/index.d.ts +6 -6
  1052. package/dist/core/tools/index.d.ts.map +1 -1
  1053. package/dist/core/tools/index.js +6 -6
  1054. package/dist/core/tools/index.js.map +1 -1
  1055. package/dist/core/tools/ls.d.ts.map +1 -1
  1056. package/dist/core/tools/ls.js +2 -1
  1057. package/dist/core/tools/ls.js.map +1 -1
  1058. package/dist/core/tools/notebook.d.ts.map +1 -1
  1059. package/dist/core/tools/notebook.js +13 -3
  1060. package/dist/core/tools/notebook.js.map +1 -1
  1061. package/dist/core/tools/read-document-extract.d.ts.map +1 -1
  1062. package/dist/core/tools/read-document-extract.js +30 -10
  1063. package/dist/core/tools/read-document-extract.js.map +1 -1
  1064. package/dist/core/tools/read-selectors.d.ts.map +1 -1
  1065. package/dist/core/tools/read-selectors.js +59 -15
  1066. package/dist/core/tools/read-selectors.js.map +1 -1
  1067. package/dist/core/tools/read-url.d.ts.map +1 -1
  1068. package/dist/core/tools/read-url.js +41 -7
  1069. package/dist/core/tools/read-url.js.map +1 -1
  1070. package/dist/core/tools/read.d.ts.map +1 -1
  1071. package/dist/core/tools/read.js +306 -71
  1072. package/dist/core/tools/read.js.map +1 -1
  1073. package/dist/core/tools/resource-selectors.d.ts +4 -0
  1074. package/dist/core/tools/resource-selectors.d.ts.map +1 -1
  1075. package/dist/core/tools/resource-selectors.js +324 -84
  1076. package/dist/core/tools/resource-selectors.js.map +1 -1
  1077. package/dist/core/tools/search-details.d.ts.map +1 -1
  1078. package/dist/core/tools/search-details.js +13 -1
  1079. package/dist/core/tools/search-details.js.map +1 -1
  1080. package/dist/core/tools/search-line-ranges.d.ts.map +1 -1
  1081. package/dist/core/tools/search-line-ranges.js +5 -2
  1082. package/dist/core/tools/search-line-ranges.js.map +1 -1
  1083. package/dist/core/tools/search-native.d.ts.map +1 -1
  1084. package/dist/core/tools/search-native.js.map +1 -1
  1085. package/dist/core/tools/search.d.ts.map +1 -1
  1086. package/dist/core/tools/search.js +244 -90
  1087. package/dist/core/tools/search.js.map +1 -1
  1088. package/dist/core/tools/structured-output.d.ts +1 -1
  1089. package/dist/core/tools/structured-output.d.ts.map +1 -1
  1090. package/dist/core/tools/structured-output.js.map +1 -1
  1091. package/dist/core/tools/todos-execute.d.ts.map +1 -1
  1092. package/dist/core/tools/todos-execute.js +4 -4
  1093. package/dist/core/tools/todos-execute.js.map +1 -1
  1094. package/dist/core/tools/todos-locks.d.ts.map +1 -1
  1095. package/dist/core/tools/todos-locks.js.map +1 -1
  1096. package/dist/core/tools/todos-mutations.js +1 -1
  1097. package/dist/core/tools/todos-mutations.js.map +1 -1
  1098. package/dist/core/tools/todos-paths.js +2 -2
  1099. package/dist/core/tools/todos-paths.js.map +1 -1
  1100. package/dist/core/tools/todos-render.d.ts.map +1 -1
  1101. package/dist/core/tools/todos-render.js +2 -2
  1102. package/dist/core/tools/todos-render.js.map +1 -1
  1103. package/dist/core/tools/todos-storage.d.ts.map +1 -1
  1104. package/dist/core/tools/todos-storage.js +1 -2
  1105. package/dist/core/tools/todos-storage.js.map +1 -1
  1106. package/dist/core/tools/todos-types.d.ts.map +1 -1
  1107. package/dist/core/tools/todos-types.js +1 -11
  1108. package/dist/core/tools/todos-types.js.map +1 -1
  1109. package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -1
  1110. package/dist/core/tools/tool-definition-wrapper.js +2 -6
  1111. package/dist/core/tools/tool-definition-wrapper.js.map +1 -1
  1112. package/dist/core/tools/url-ip-guards.d.ts.map +1 -1
  1113. package/dist/core/tools/url-ip-guards.js +27 -17
  1114. package/dist/core/tools/url-ip-guards.js.map +1 -1
  1115. package/dist/core/tools/write.d.ts.map +1 -1
  1116. package/dist/core/tools/write.js +88 -29
  1117. package/dist/core/tools/write.js.map +1 -1
  1118. package/dist/core/usage-totals.d.ts.map +1 -1
  1119. package/dist/core/usage-totals.js +5 -2
  1120. package/dist/core/usage-totals.js.map +1 -1
  1121. package/dist/core/workflow-stage-admission.d.ts.map +1 -1
  1122. package/dist/core/workflow-stage-admission.js +8 -2
  1123. package/dist/core/workflow-stage-admission.js.map +1 -1
  1124. package/dist/extensions/llama/provider.js +1 -1
  1125. package/dist/extensions/llama/provider.js.map +1 -1
  1126. package/dist/extensions/llama/ui.d.ts.map +1 -1
  1127. package/dist/extensions/llama/ui.js.map +1 -1
  1128. package/dist/index-extensions.d.ts +2 -2
  1129. package/dist/index-extensions.d.ts.map +1 -1
  1130. package/dist/index-extensions.js +1 -1
  1131. package/dist/index-extensions.js.map +1 -1
  1132. package/dist/index.d.ts +20 -20
  1133. package/dist/index.d.ts.map +1 -1
  1134. package/dist/index.js +23 -23
  1135. package/dist/index.js.map +1 -1
  1136. package/dist/main-deferred-startup.d.ts +1 -1
  1137. package/dist/main-deferred-startup.d.ts.map +1 -1
  1138. package/dist/main-deferred-startup.js +16 -15
  1139. package/dist/main-deferred-startup.js.map +1 -1
  1140. package/dist/main-early-input.js.map +1 -1
  1141. package/dist/main-first-time-setup.d.ts +1 -1
  1142. package/dist/main-first-time-setup.d.ts.map +1 -1
  1143. package/dist/main-first-time-setup.js.map +1 -1
  1144. package/dist/main-session-options.d.ts +1 -1
  1145. package/dist/main-session-options.d.ts.map +1 -1
  1146. package/dist/main-session-options.js.map +1 -1
  1147. package/dist/main-session.d.ts.map +1 -1
  1148. package/dist/main-session.js +4 -4
  1149. package/dist/main-session.js.map +1 -1
  1150. package/dist/main.d.ts +1 -1
  1151. package/dist/main.d.ts.map +1 -1
  1152. package/dist/main.js +143 -38
  1153. package/dist/main.js.map +1 -1
  1154. package/dist/migrations-config-values.d.ts.map +1 -1
  1155. package/dist/migrations-config-values.js +3 -1
  1156. package/dist/migrations-config-values.js.map +1 -1
  1157. package/dist/migrations.d.ts.map +1 -1
  1158. package/dist/migrations.js.map +1 -1
  1159. package/dist/modes/interactive/chat-input-actions.d.ts.map +1 -1
  1160. package/dist/modes/interactive/chat-input-actions.js +3 -6
  1161. package/dist/modes/interactive/chat-input-actions.js.map +1 -1
  1162. package/dist/modes/interactive/components/atomic-banner.d.ts.map +1 -1
  1163. package/dist/modes/interactive/components/atomic-banner.js +7 -5
  1164. package/dist/modes/interactive/components/atomic-banner.js.map +1 -1
  1165. package/dist/modes/interactive/components/atomic-working-status.d.ts.map +1 -1
  1166. package/dist/modes/interactive/components/atomic-working-status.js +26 -13
  1167. package/dist/modes/interactive/components/atomic-working-status.js.map +1 -1
  1168. package/dist/modes/interactive/components/chat-message-renderer.d.ts +1 -1
  1169. package/dist/modes/interactive/components/chat-message-renderer.d.ts.map +1 -1
  1170. package/dist/modes/interactive/components/chat-message-renderer.js +6 -5
  1171. package/dist/modes/interactive/components/chat-message-renderer.js.map +1 -1
  1172. package/dist/modes/interactive/components/chat-session-host-actions.d.ts +3 -2
  1173. package/dist/modes/interactive/components/chat-session-host-actions.d.ts.map +1 -1
  1174. package/dist/modes/interactive/components/chat-session-host-actions.js +14 -18
  1175. package/dist/modes/interactive/components/chat-session-host-actions.js.map +1 -1
  1176. package/dist/modes/interactive/components/chat-session-host-editor.d.ts +4 -4
  1177. package/dist/modes/interactive/components/chat-session-host-editor.d.ts.map +1 -1
  1178. package/dist/modes/interactive/components/chat-session-host-editor.js +9 -4
  1179. package/dist/modes/interactive/components/chat-session-host-editor.js.map +1 -1
  1180. package/dist/modes/interactive/components/chat-session-host-events.d.ts.map +1 -1
  1181. package/dist/modes/interactive/components/chat-session-host-events.js +9 -8
  1182. package/dist/modes/interactive/components/chat-session-host-events.js.map +1 -1
  1183. package/dist/modes/interactive/components/chat-session-host-rendering.d.ts +1 -1
  1184. package/dist/modes/interactive/components/chat-session-host-rendering.d.ts.map +1 -1
  1185. package/dist/modes/interactive/components/chat-session-host-rendering.js +22 -7
  1186. package/dist/modes/interactive/components/chat-session-host-rendering.js.map +1 -1
  1187. package/dist/modes/interactive/components/chat-session-host-runtime.d.ts +9 -2
  1188. package/dist/modes/interactive/components/chat-session-host-runtime.d.ts.map +1 -1
  1189. package/dist/modes/interactive/components/chat-session-host-runtime.js +15 -13
  1190. package/dist/modes/interactive/components/chat-session-host-runtime.js.map +1 -1
  1191. package/dist/modes/interactive/components/chat-session-host-state.d.ts +2 -2
  1192. package/dist/modes/interactive/components/chat-session-host-state.d.ts.map +1 -1
  1193. package/dist/modes/interactive/components/chat-session-host-state.js.map +1 -1
  1194. package/dist/modes/interactive/components/chat-session-host-terminal-cleanup.d.ts.map +1 -1
  1195. package/dist/modes/interactive/components/chat-session-host-terminal-cleanup.js.map +1 -1
  1196. package/dist/modes/interactive/components/chat-session-host-types.d.ts +9 -2
  1197. package/dist/modes/interactive/components/chat-session-host-types.d.ts.map +1 -1
  1198. package/dist/modes/interactive/components/chat-session-host-types.js.map +1 -1
  1199. package/dist/modes/interactive/components/chat-session-host-utils.d.ts +1 -1
  1200. package/dist/modes/interactive/components/chat-session-host-utils.d.ts.map +1 -1
  1201. package/dist/modes/interactive/components/chat-session-host-utils.js +3 -8
  1202. package/dist/modes/interactive/components/chat-session-host-utils.js.map +1 -1
  1203. package/dist/modes/interactive/components/chat-session-host.d.ts +4 -4
  1204. package/dist/modes/interactive/components/chat-session-host.d.ts.map +1 -1
  1205. package/dist/modes/interactive/components/chat-session-host.js +1 -2
  1206. package/dist/modes/interactive/components/chat-session-host.js.map +1 -1
  1207. package/dist/modes/interactive/components/chat-transcript.d.ts +1 -1
  1208. package/dist/modes/interactive/components/chat-transcript.d.ts.map +1 -1
  1209. package/dist/modes/interactive/components/chat-transcript.js +5 -12
  1210. package/dist/modes/interactive/components/chat-transcript.js.map +1 -1
  1211. package/dist/modes/interactive/components/compaction-boundary-message.d.ts.map +1 -1
  1212. package/dist/modes/interactive/components/compaction-boundary-message.js +18 -7
  1213. package/dist/modes/interactive/components/compaction-boundary-message.js.map +1 -1
  1214. package/dist/modes/interactive/components/config-selector-list.d.ts.map +1 -1
  1215. package/dist/modes/interactive/components/config-selector-list.js +4 -2
  1216. package/dist/modes/interactive/components/config-selector-list.js.map +1 -1
  1217. package/dist/modes/interactive/components/config-selector-project-scope.d.ts.map +1 -1
  1218. package/dist/modes/interactive/components/config-selector-project-scope.js +2 -4
  1219. package/dist/modes/interactive/components/config-selector-project-scope.js.map +1 -1
  1220. package/dist/modes/interactive/components/config-selector.d.ts.map +1 -1
  1221. package/dist/modes/interactive/components/config-selector.js +15 -6
  1222. package/dist/modes/interactive/components/config-selector.js.map +1 -1
  1223. package/dist/modes/interactive/components/countdown-timer.d.ts.map +1 -1
  1224. package/dist/modes/interactive/components/countdown-timer.js.map +1 -1
  1225. package/dist/modes/interactive/components/custom-editor.d.ts +11 -0
  1226. package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -1
  1227. package/dist/modes/interactive/components/custom-editor.js +21 -5
  1228. package/dist/modes/interactive/components/custom-editor.js.map +1 -1
  1229. package/dist/modes/interactive/components/custom-entry.d.ts.map +1 -1
  1230. package/dist/modes/interactive/components/custom-entry.js.map +1 -1
  1231. package/dist/modes/interactive/components/custom-message.d.ts.map +1 -1
  1232. package/dist/modes/interactive/components/custom-message.js +1 -3
  1233. package/dist/modes/interactive/components/custom-message.js.map +1 -1
  1234. package/dist/modes/interactive/components/diff.js +2 -2
  1235. package/dist/modes/interactive/components/diff.js.map +1 -1
  1236. package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -1
  1237. package/dist/modes/interactive/components/extension-editor.js +1 -1
  1238. package/dist/modes/interactive/components/extension-editor.js.map +1 -1
  1239. package/dist/modes/interactive/components/first-time-setup.d.ts.map +1 -1
  1240. package/dist/modes/interactive/components/first-time-setup.js +15 -4
  1241. package/dist/modes/interactive/components/first-time-setup.js.map +1 -1
  1242. package/dist/modes/interactive/components/footer.d.ts.map +1 -1
  1243. package/dist/modes/interactive/components/footer.js +16 -15
  1244. package/dist/modes/interactive/components/footer.js.map +1 -1
  1245. package/dist/modes/interactive/components/host-input-form-mount.d.ts.map +1 -1
  1246. package/dist/modes/interactive/components/host-input-form-mount.js +4 -2
  1247. package/dist/modes/interactive/components/host-input-form-mount.js.map +1 -1
  1248. package/dist/modes/interactive/components/host-input-form.d.ts.map +1 -1
  1249. package/dist/modes/interactive/components/host-input-form.js +55 -21
  1250. package/dist/modes/interactive/components/host-input-form.js.map +1 -1
  1251. package/dist/modes/interactive/components/host-session-picker.d.ts.map +1 -1
  1252. package/dist/modes/interactive/components/host-session-picker.js +8 -3
  1253. package/dist/modes/interactive/components/host-session-picker.js.map +1 -1
  1254. package/dist/modes/interactive/components/index.d.ts +7 -7
  1255. package/dist/modes/interactive/components/index.d.ts.map +1 -1
  1256. package/dist/modes/interactive/components/index.js +4 -4
  1257. package/dist/modes/interactive/components/index.js.map +1 -1
  1258. package/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -1
  1259. package/dist/modes/interactive/components/keybinding-hints.js.map +1 -1
  1260. package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
  1261. package/dist/modes/interactive/components/login-dialog.js.map +1 -1
  1262. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
  1263. package/dist/modes/interactive/components/model-selector.js +4 -1
  1264. package/dist/modes/interactive/components/model-selector.js.map +1 -1
  1265. package/dist/modes/interactive/components/oauth-selector.d.ts +1 -1
  1266. package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -1
  1267. package/dist/modes/interactive/components/oauth-selector.js +12 -6
  1268. package/dist/modes/interactive/components/oauth-selector.js.map +1 -1
  1269. package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -1
  1270. package/dist/modes/interactive/components/scoped-models-selector.js +5 -1
  1271. package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -1
  1272. package/dist/modes/interactive/components/session-selector-list.d.ts +1 -1
  1273. package/dist/modes/interactive/components/session-selector-list.d.ts.map +1 -1
  1274. package/dist/modes/interactive/components/session-selector-list.js.map +1 -1
  1275. package/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
  1276. package/dist/modes/interactive/components/session-selector.js.map +1 -1
  1277. package/dist/modes/interactive/components/settings-selector-handlers.d.ts.map +1 -1
  1278. package/dist/modes/interactive/components/settings-selector-handlers.js.map +1 -1
  1279. package/dist/modes/interactive/components/settings-selector-submenus.d.ts.map +1 -1
  1280. package/dist/modes/interactive/components/settings-selector-submenus.js.map +1 -1
  1281. package/dist/modes/interactive/components/startup-identity.d.ts.map +1 -1
  1282. package/dist/modes/interactive/components/startup-identity.js.map +1 -1
  1283. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  1284. package/dist/modes/interactive/components/tool-execution.js.map +1 -1
  1285. package/dist/modes/interactive/components/tree-selector-model.js +1 -9
  1286. package/dist/modes/interactive/components/tree-selector-model.js.map +1 -1
  1287. package/dist/modes/interactive/components/tree-selector-viewport.d.ts.map +1 -1
  1288. package/dist/modes/interactive/components/tree-selector-viewport.js.map +1 -1
  1289. package/dist/modes/interactive/components/working-status.d.ts.map +1 -1
  1290. package/dist/modes/interactive/components/working-status.js +1 -1
  1291. package/dist/modes/interactive/components/working-status.js.map +1 -1
  1292. package/dist/modes/interactive/external-editor.d.ts.map +1 -1
  1293. package/dist/modes/interactive/external-editor.js.map +1 -1
  1294. package/dist/modes/interactive/interactive-agent-events.js +20 -13
  1295. package/dist/modes/interactive/interactive-agent-events.js.map +1 -1
  1296. package/dist/modes/interactive/interactive-auth-login.js +6 -6
  1297. package/dist/modes/interactive/interactive-auth-login.js.map +1 -1
  1298. package/dist/modes/interactive/interactive-auth-routing.d.ts.map +1 -1
  1299. package/dist/modes/interactive/interactive-auth-routing.js +3 -6
  1300. package/dist/modes/interactive/interactive-auth-routing.js.map +1 -1
  1301. package/dist/modes/interactive/interactive-autocomplete.js +4 -10
  1302. package/dist/modes/interactive/interactive-autocomplete.js.map +1 -1
  1303. package/dist/modes/interactive/interactive-bash-compact.d.ts.map +1 -1
  1304. package/dist/modes/interactive/interactive-bash-compact.js +18 -8
  1305. package/dist/modes/interactive/interactive-bash-compact.js.map +1 -1
  1306. package/dist/modes/interactive/interactive-deferred-startup.d.ts.map +1 -1
  1307. package/dist/modes/interactive/interactive-deferred-startup.js +6 -2
  1308. package/dist/modes/interactive/interactive-deferred-startup.js.map +1 -1
  1309. package/dist/modes/interactive/interactive-editor-actions.js +6 -11
  1310. package/dist/modes/interactive/interactive-editor-actions.js.map +1 -1
  1311. package/dist/modes/interactive/interactive-extension-context.js +4 -4
  1312. package/dist/modes/interactive/interactive-extension-context.js.map +1 -1
  1313. package/dist/modes/interactive/interactive-extension-custom-ui.js +15 -8
  1314. package/dist/modes/interactive/interactive-extension-custom-ui.js.map +1 -1
  1315. package/dist/modes/interactive/interactive-extension-dialogs.js +50 -24
  1316. package/dist/modes/interactive/interactive-extension-dialogs.js.map +1 -1
  1317. package/dist/modes/interactive/interactive-extension-runtime.js +9 -6
  1318. package/dist/modes/interactive/interactive-extension-runtime.js.map +1 -1
  1319. package/dist/modes/interactive/interactive-extension-widgets.js +1 -1
  1320. package/dist/modes/interactive/interactive-extension-widgets.js.map +1 -1
  1321. package/dist/modes/interactive/interactive-global-clear.d.ts +45 -1
  1322. package/dist/modes/interactive/interactive-global-clear.d.ts.map +1 -1
  1323. package/dist/modes/interactive/interactive-global-clear.js +60 -4
  1324. package/dist/modes/interactive/interactive-global-clear.js.map +1 -1
  1325. package/dist/modes/interactive/interactive-hotkeys-debug.js +2 -3
  1326. package/dist/modes/interactive/interactive-hotkeys-debug.js.map +1 -1
  1327. package/dist/modes/interactive/interactive-input-handling.d.ts.map +1 -1
  1328. package/dist/modes/interactive/interactive-input-handling.js +55 -20
  1329. package/dist/modes/interactive/interactive-input-handling.js.map +1 -1
  1330. package/dist/modes/interactive/interactive-key-identity.d.ts +22 -0
  1331. package/dist/modes/interactive/interactive-key-identity.d.ts.map +1 -0
  1332. package/dist/modes/interactive/interactive-key-identity.js +29 -0
  1333. package/dist/modes/interactive/interactive-key-identity.js.map +1 -0
  1334. package/dist/modes/interactive/interactive-mode-base.d.ts +7 -6
  1335. package/dist/modes/interactive/interactive-mode-base.d.ts.map +1 -1
  1336. package/dist/modes/interactive/interactive-mode-base.js +12 -12
  1337. package/dist/modes/interactive/interactive-mode-base.js.map +1 -1
  1338. package/dist/modes/interactive/interactive-mode-deps.d.ts +20 -20
  1339. package/dist/modes/interactive/interactive-mode-deps.d.ts.map +1 -1
  1340. package/dist/modes/interactive/interactive-mode-deps.js +16 -16
  1341. package/dist/modes/interactive/interactive-mode-deps.js.map +1 -1
  1342. package/dist/modes/interactive/interactive-mode-helpers.d.ts +1 -1
  1343. package/dist/modes/interactive/interactive-mode-helpers.d.ts.map +1 -1
  1344. package/dist/modes/interactive/interactive-mode-helpers.js +3 -9
  1345. package/dist/modes/interactive/interactive-mode-helpers.js.map +1 -1
  1346. package/dist/modes/interactive/interactive-mode-surface.d.ts +8 -7
  1347. package/dist/modes/interactive/interactive-mode-surface.d.ts.map +1 -1
  1348. package/dist/modes/interactive/interactive-mode-surface.js +1 -0
  1349. package/dist/modes/interactive/interactive-mode-surface.js.map +1 -1
  1350. package/dist/modes/interactive/interactive-mode-types.d.ts +2 -2
  1351. package/dist/modes/interactive/interactive-mode-types.d.ts.map +1 -1
  1352. package/dist/modes/interactive/interactive-mode-types.js.map +1 -1
  1353. package/dist/modes/interactive/interactive-model-catalog-startup.d.ts.map +1 -1
  1354. package/dist/modes/interactive/interactive-model-catalog-startup.js +2 -1
  1355. package/dist/modes/interactive/interactive-model-catalog-startup.js.map +1 -1
  1356. package/dist/modes/interactive/interactive-model-routing.js +6 -6
  1357. package/dist/modes/interactive/interactive-model-routing.js.map +1 -1
  1358. package/dist/modes/interactive/interactive-onboarding.js +7 -7
  1359. package/dist/modes/interactive/interactive-onboarding.js.map +1 -1
  1360. package/dist/modes/interactive/interactive-pause.js.map +1 -1
  1361. package/dist/modes/interactive/interactive-process-lifecycle.js +38 -8
  1362. package/dist/modes/interactive/interactive-process-lifecycle.js.map +1 -1
  1363. package/dist/modes/interactive/interactive-prompt-restore.d.ts +58 -0
  1364. package/dist/modes/interactive/interactive-prompt-restore.d.ts.map +1 -0
  1365. package/dist/modes/interactive/interactive-prompt-restore.js +87 -0
  1366. package/dist/modes/interactive/interactive-prompt-restore.js.map +1 -0
  1367. package/dist/modes/interactive/interactive-prompt-turn.js +18 -3
  1368. package/dist/modes/interactive/interactive-prompt-turn.js.map +1 -1
  1369. package/dist/modes/interactive/interactive-queueing.js +3 -7
  1370. package/dist/modes/interactive/interactive-queueing.js.map +1 -1
  1371. package/dist/modes/interactive/interactive-render-chat.js +47 -36
  1372. package/dist/modes/interactive/interactive-render-chat.js.map +1 -1
  1373. package/dist/modes/interactive/interactive-resource-disclosure.js +1 -3
  1374. package/dist/modes/interactive/interactive-resource-disclosure.js.map +1 -1
  1375. package/dist/modes/interactive/interactive-resource-paths.js +6 -19
  1376. package/dist/modes/interactive/interactive-resource-paths.js.map +1 -1
  1377. package/dist/modes/interactive/interactive-resource-rendering.js +15 -16
  1378. package/dist/modes/interactive/interactive-resource-rendering.js.map +1 -1
  1379. package/dist/modes/interactive/interactive-selectors.js +3 -5
  1380. package/dist/modes/interactive/interactive-selectors.js.map +1 -1
  1381. package/dist/modes/interactive/interactive-session-routing.js +16 -4
  1382. package/dist/modes/interactive/interactive-session-routing.js.map +1 -1
  1383. package/dist/modes/interactive/interactive-session-runtime.js +11 -0
  1384. package/dist/modes/interactive/interactive-session-runtime.js.map +1 -1
  1385. package/dist/modes/interactive/interactive-slash-commands.js +11 -6
  1386. package/dist/modes/interactive/interactive-slash-commands.js.map +1 -1
  1387. package/dist/modes/interactive/interactive-startup.d.ts.map +1 -1
  1388. package/dist/modes/interactive/interactive-startup.js +9 -11
  1389. package/dist/modes/interactive/interactive-startup.js.map +1 -1
  1390. package/dist/modes/interactive/interactive-submission.d.ts +24 -0
  1391. package/dist/modes/interactive/interactive-submission.d.ts.map +1 -0
  1392. package/dist/modes/interactive/interactive-submission.js +10 -0
  1393. package/dist/modes/interactive/interactive-submission.js.map +1 -0
  1394. package/dist/modes/interactive/interactive-summarization-retry-events.d.ts +1 -1
  1395. package/dist/modes/interactive/interactive-summarization-retry-events.d.ts.map +1 -1
  1396. package/dist/modes/interactive/interactive-summarization-retry-events.js +4 -2
  1397. package/dist/modes/interactive/interactive-summarization-retry-events.js.map +1 -1
  1398. package/dist/modes/interactive/login-provider-options.d.ts.map +1 -1
  1399. package/dist/modes/interactive/login-provider-options.js +1 -2
  1400. package/dist/modes/interactive/login-provider-options.js.map +1 -1
  1401. package/dist/modes/interactive/theme/global-theme.d.ts +1 -1
  1402. package/dist/modes/interactive/theme/global-theme.d.ts.map +1 -1
  1403. package/dist/modes/interactive/theme/global-theme.js.map +1 -1
  1404. package/dist/modes/interactive/theme/theme-class.d.ts.map +1 -1
  1405. package/dist/modes/interactive/theme/theme-class.js.map +1 -1
  1406. package/dist/modes/interactive/theme/theme-loading.d.ts.map +1 -1
  1407. package/dist/modes/interactive/theme/theme-loading.js +1 -1
  1408. package/dist/modes/interactive/theme/theme-loading.js.map +1 -1
  1409. package/dist/modes/interactive/theme/theme-schema.d.ts.map +1 -1
  1410. package/dist/modes/interactive/theme/theme-schema.js.map +1 -1
  1411. package/dist/modes/interactive/theme/theme.d.ts +2 -2
  1412. package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  1413. package/dist/modes/interactive/theme/theme.js +2 -2
  1414. package/dist/modes/interactive/theme/theme.js.map +1 -1
  1415. package/dist/modes/interactive/whimsical-messages.d.ts.map +1 -1
  1416. package/dist/modes/interactive/whimsical-messages.js.map +1 -1
  1417. package/dist/modes/interactive-engine/activity-watchdog.d.ts +16 -6
  1418. package/dist/modes/interactive-engine/activity-watchdog.d.ts.map +1 -1
  1419. package/dist/modes/interactive-engine/activity-watchdog.js +12 -6
  1420. package/dist/modes/interactive-engine/activity-watchdog.js.map +1 -1
  1421. package/dist/modes/interactive-engine/create-isolated-runtime.d.ts.map +1 -1
  1422. package/dist/modes/interactive-engine/create-isolated-runtime.js +5 -4
  1423. package/dist/modes/interactive-engine/create-isolated-runtime.js.map +1 -1
  1424. package/dist/modes/interactive-engine/engine-child-liveness.d.ts.map +1 -1
  1425. package/dist/modes/interactive-engine/engine-child-liveness.js +6 -4
  1426. package/dist/modes/interactive-engine/engine-child-liveness.js.map +1 -1
  1427. package/dist/modes/interactive-engine/engine-custom-ui.d.ts +3 -2
  1428. package/dist/modes/interactive-engine/engine-custom-ui.d.ts.map +1 -1
  1429. package/dist/modes/interactive-engine/engine-custom-ui.js +32 -11
  1430. package/dist/modes/interactive-engine/engine-custom-ui.js.map +1 -1
  1431. package/dist/modes/interactive-engine/engine-diagnostic-view.d.ts +16 -0
  1432. package/dist/modes/interactive-engine/engine-diagnostic-view.d.ts.map +1 -0
  1433. package/dist/modes/interactive-engine/engine-diagnostic-view.js +19 -0
  1434. package/dist/modes/interactive-engine/engine-diagnostic-view.js.map +1 -0
  1435. package/dist/modes/interactive-engine/engine-dialog-host.d.ts +33 -0
  1436. package/dist/modes/interactive-engine/engine-dialog-host.d.ts.map +1 -0
  1437. package/dist/modes/interactive-engine/engine-dialog-host.js +129 -0
  1438. package/dist/modes/interactive-engine/engine-dialog-host.js.map +1 -0
  1439. package/dist/modes/interactive-engine/engine-generation.d.ts +29 -0
  1440. package/dist/modes/interactive-engine/engine-generation.d.ts.map +1 -0
  1441. package/dist/modes/interactive-engine/engine-generation.js +11 -0
  1442. package/dist/modes/interactive-engine/engine-generation.js.map +1 -0
  1443. package/dist/modes/interactive-engine/engine-health.d.ts +101 -0
  1444. package/dist/modes/interactive-engine/engine-health.d.ts.map +1 -0
  1445. package/dist/modes/interactive-engine/engine-health.js +236 -0
  1446. package/dist/modes/interactive-engine/engine-health.js.map +1 -0
  1447. package/dist/modes/interactive-engine/engine-input-form.d.ts.map +1 -1
  1448. package/dist/modes/interactive-engine/engine-input-form.js +12 -3
  1449. package/dist/modes/interactive-engine/engine-input-form.js.map +1 -1
  1450. package/dist/modes/interactive-engine/engine-monitor.d.ts.map +1 -1
  1451. package/dist/modes/interactive-engine/engine-monitor.js +7 -2
  1452. package/dist/modes/interactive-engine/engine-monitor.js.map +1 -1
  1453. package/dist/modes/interactive-engine/engine-render-service.d.ts.map +1 -1
  1454. package/dist/modes/interactive-engine/engine-render-service.js +11 -5
  1455. package/dist/modes/interactive-engine/engine-render-service.js.map +1 -1
  1456. package/dist/modes/interactive-engine/engine-session-picker.d.ts.map +1 -1
  1457. package/dist/modes/interactive-engine/engine-session-picker.js +4 -2
  1458. package/dist/modes/interactive-engine/engine-session-picker.js.map +1 -1
  1459. package/dist/modes/interactive-engine/extension-ui-bridge.d.ts +14 -3
  1460. package/dist/modes/interactive-engine/extension-ui-bridge.d.ts.map +1 -1
  1461. package/dist/modes/interactive-engine/extension-ui-bridge.js +32 -45
  1462. package/dist/modes/interactive-engine/extension-ui-bridge.js.map +1 -1
  1463. package/dist/modes/interactive-engine/input-form-host.d.ts +1 -0
  1464. package/dist/modes/interactive-engine/input-form-host.d.ts.map +1 -1
  1465. package/dist/modes/interactive-engine/input-form-host.js +12 -2
  1466. package/dist/modes/interactive-engine/input-form-host.js.map +1 -1
  1467. package/dist/modes/interactive-engine/isolated-auth.d.ts.map +1 -1
  1468. package/dist/modes/interactive-engine/isolated-auth.js +1 -1
  1469. package/dist/modes/interactive-engine/isolated-auth.js.map +1 -1
  1470. package/dist/modes/interactive-engine/isolated-runtime.d.ts +32 -6
  1471. package/dist/modes/interactive-engine/isolated-runtime.d.ts.map +1 -1
  1472. package/dist/modes/interactive-engine/isolated-runtime.js +122 -59
  1473. package/dist/modes/interactive-engine/isolated-runtime.js.map +1 -1
  1474. package/dist/modes/interactive-engine/protocol.d.ts +20 -1
  1475. package/dist/modes/interactive-engine/protocol.d.ts.map +1 -1
  1476. package/dist/modes/interactive-engine/protocol.js +183 -55
  1477. package/dist/modes/interactive-engine/protocol.js.map +1 -1
  1478. package/dist/modes/interactive-engine/remote-component.d.ts +38 -0
  1479. package/dist/modes/interactive-engine/remote-component.d.ts.map +1 -1
  1480. package/dist/modes/interactive-engine/remote-component.js +111 -22
  1481. package/dist/modes/interactive-engine/remote-component.js.map +1 -1
  1482. package/dist/modes/interactive-engine/remote-input-ownership.d.ts +48 -0
  1483. package/dist/modes/interactive-engine/remote-input-ownership.d.ts.map +1 -0
  1484. package/dist/modes/interactive-engine/remote-input-ownership.js +42 -0
  1485. package/dist/modes/interactive-engine/remote-input-ownership.js.map +1 -0
  1486. package/dist/modes/interactive-engine/remote-model-catalog.d.ts.map +1 -1
  1487. package/dist/modes/interactive-engine/remote-model-catalog.js +10 -4
  1488. package/dist/modes/interactive-engine/remote-model-catalog.js.map +1 -1
  1489. package/dist/modes/interactive-engine/remote-queue-pause.d.ts.map +1 -1
  1490. package/dist/modes/interactive-engine/remote-queue-pause.js.map +1 -1
  1491. package/dist/modes/interactive-engine/remote-renderer.d.ts.map +1 -1
  1492. package/dist/modes/interactive-engine/remote-renderer.js +38 -10
  1493. package/dist/modes/interactive-engine/remote-renderer.js.map +1 -1
  1494. package/dist/modes/interactive-engine/session-picker-host.d.ts +1 -0
  1495. package/dist/modes/interactive-engine/session-picker-host.d.ts.map +1 -1
  1496. package/dist/modes/interactive-engine/session-picker-host.js +4 -0
  1497. package/dist/modes/interactive-engine/session-picker-host.js.map +1 -1
  1498. package/dist/modes/print-mode.d.ts.map +1 -1
  1499. package/dist/modes/print-mode.js.map +1 -1
  1500. package/dist/modes/rpc/jsonl.d.ts +7 -0
  1501. package/dist/modes/rpc/jsonl.d.ts.map +1 -1
  1502. package/dist/modes/rpc/jsonl.js +17 -1
  1503. package/dist/modes/rpc/jsonl.js.map +1 -1
  1504. package/dist/modes/rpc/queued-writer.d.ts +14 -0
  1505. package/dist/modes/rpc/queued-writer.d.ts.map +1 -1
  1506. package/dist/modes/rpc/queued-writer.js +33 -9
  1507. package/dist/modes/rpc/queued-writer.js.map +1 -1
  1508. package/dist/modes/rpc/rpc-bash-request-owners.js +1 -1
  1509. package/dist/modes/rpc/rpc-bash-request-owners.js.map +1 -1
  1510. package/dist/modes/rpc/rpc-client-api.d.ts +3 -3
  1511. package/dist/modes/rpc/rpc-client-api.d.ts.map +1 -1
  1512. package/dist/modes/rpc/rpc-client-api.js +63 -22
  1513. package/dist/modes/rpc/rpc-client-api.js.map +1 -1
  1514. package/dist/modes/rpc/rpc-client-process.d.ts +10 -0
  1515. package/dist/modes/rpc/rpc-client-process.d.ts.map +1 -1
  1516. package/dist/modes/rpc/rpc-client-process.js +72 -15
  1517. package/dist/modes/rpc/rpc-client-process.js.map +1 -1
  1518. package/dist/modes/rpc/rpc-client-waits.d.ts +17 -1
  1519. package/dist/modes/rpc/rpc-client-waits.d.ts.map +1 -1
  1520. package/dist/modes/rpc/rpc-client-waits.js +25 -0
  1521. package/dist/modes/rpc/rpc-client-waits.js.map +1 -1
  1522. package/dist/modes/rpc/rpc-client.d.ts +61 -6
  1523. package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  1524. package/dist/modes/rpc/rpc-client.js +200 -145
  1525. package/dist/modes/rpc/rpc-client.js.map +1 -1
  1526. package/dist/modes/rpc/rpc-command-handler.d.ts +2 -2
  1527. package/dist/modes/rpc/rpc-command-handler.d.ts.map +1 -1
  1528. package/dist/modes/rpc/rpc-command-handler.js +35 -13
  1529. package/dist/modes/rpc/rpc-command-handler.js.map +1 -1
  1530. package/dist/modes/rpc/rpc-command-timeouts.d.ts +30 -0
  1531. package/dist/modes/rpc/rpc-command-timeouts.d.ts.map +1 -0
  1532. package/dist/modes/rpc/rpc-command-timeouts.js +52 -0
  1533. package/dist/modes/rpc/rpc-command-timeouts.js.map +1 -0
  1534. package/dist/modes/rpc/rpc-event-buffer.d.ts.map +1 -1
  1535. package/dist/modes/rpc/rpc-event-buffer.js +3 -1
  1536. package/dist/modes/rpc/rpc-event-buffer.js.map +1 -1
  1537. package/dist/modes/rpc/rpc-extension-ui.d.ts +1 -1
  1538. package/dist/modes/rpc/rpc-extension-ui.d.ts.map +1 -1
  1539. package/dist/modes/rpc/rpc-extension-ui.js +44 -16
  1540. package/dist/modes/rpc/rpc-extension-ui.js.map +1 -1
  1541. package/dist/modes/rpc/rpc-generation-buffer.d.ts +21 -0
  1542. package/dist/modes/rpc/rpc-generation-buffer.d.ts.map +1 -0
  1543. package/dist/modes/rpc/rpc-generation-buffer.js +35 -0
  1544. package/dist/modes/rpc/rpc-generation-buffer.js.map +1 -0
  1545. package/dist/modes/rpc/rpc-input-scheduler.d.ts.map +1 -1
  1546. package/dist/modes/rpc/rpc-input-scheduler.js +13 -6
  1547. package/dist/modes/rpc/rpc-input-scheduler.js.map +1 -1
  1548. package/dist/modes/rpc/rpc-input.d.ts +7 -1
  1549. package/dist/modes/rpc/rpc-input.d.ts.map +1 -1
  1550. package/dist/modes/rpc/rpc-input.js +14 -4
  1551. package/dist/modes/rpc/rpc-input.js.map +1 -1
  1552. package/dist/modes/rpc/rpc-keybindings-reload.d.ts.map +1 -1
  1553. package/dist/modes/rpc/rpc-keybindings-reload.js.map +1 -1
  1554. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  1555. package/dist/modes/rpc/rpc-mode.js +17 -18
  1556. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  1557. package/dist/modes/rpc/rpc-oauth-client.d.ts +1 -2
  1558. package/dist/modes/rpc/rpc-oauth-client.d.ts.map +1 -1
  1559. package/dist/modes/rpc/rpc-oauth-client.js +11 -4
  1560. package/dist/modes/rpc/rpc-oauth-client.js.map +1 -1
  1561. package/dist/modes/rpc/rpc-oauth-interaction.d.ts.map +1 -1
  1562. package/dist/modes/rpc/rpc-oauth-interaction.js.map +1 -1
  1563. package/dist/modes/rpc/rpc-output-buffer.d.ts.map +1 -1
  1564. package/dist/modes/rpc/rpc-output-buffer.js +3 -1
  1565. package/dist/modes/rpc/rpc-output-buffer.js.map +1 -1
  1566. package/dist/modes/rpc/rpc-pending-requests.d.ts +37 -0
  1567. package/dist/modes/rpc/rpc-pending-requests.d.ts.map +1 -0
  1568. package/dist/modes/rpc/rpc-pending-requests.js +57 -0
  1569. package/dist/modes/rpc/rpc-pending-requests.js.map +1 -0
  1570. package/dist/modes/rpc/rpc-provider-auth.d.ts.map +1 -1
  1571. package/dist/modes/rpc/rpc-provider-auth.js +24 -5
  1572. package/dist/modes/rpc/rpc-provider-auth.js.map +1 -1
  1573. package/dist/modes/rpc/rpc-responses.js.map +1 -1
  1574. package/dist/modes/rpc/rpc-session-binding.d.ts +1 -1
  1575. package/dist/modes/rpc/rpc-session-binding.d.ts.map +1 -1
  1576. package/dist/modes/rpc/rpc-session-binding.js +7 -2
  1577. package/dist/modes/rpc/rpc-session-binding.js.map +1 -1
  1578. package/dist/modes/rpc/rpc-terminal-drain.d.ts +52 -0
  1579. package/dist/modes/rpc/rpc-terminal-drain.d.ts.map +1 -0
  1580. package/dist/modes/rpc/rpc-terminal-drain.js +85 -0
  1581. package/dist/modes/rpc/rpc-terminal-drain.js.map +1 -0
  1582. package/dist/modes/rpc/rpc-transport-error.d.ts +49 -0
  1583. package/dist/modes/rpc/rpc-transport-error.d.ts.map +1 -0
  1584. package/dist/modes/rpc/rpc-transport-error.js +78 -0
  1585. package/dist/modes/rpc/rpc-transport-error.js.map +1 -0
  1586. package/dist/modes/rpc/rpc-types.d.ts +10 -8
  1587. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  1588. package/dist/modes/rpc/rpc-types.js.map +1 -1
  1589. package/dist/package-manager-cli-parser.js.map +1 -1
  1590. package/dist/package-manager-cli.d.ts.map +1 -1
  1591. package/dist/package-manager-cli.js +22 -11
  1592. package/dist/package-manager-cli.js.map +1 -1
  1593. package/dist/utils/child-process.d.ts.map +1 -1
  1594. package/dist/utils/child-process.js.map +1 -1
  1595. package/dist/utils/clipboard-image.js +1 -1
  1596. package/dist/utils/clipboard-image.js.map +1 -1
  1597. package/dist/utils/clipboard.d.ts.map +1 -1
  1598. package/dist/utils/clipboard.js.map +1 -1
  1599. package/dist/utils/fs-watch.d.ts.map +1 -1
  1600. package/dist/utils/fs-watch.js +1 -3
  1601. package/dist/utils/fs-watch.js.map +1 -1
  1602. package/dist/utils/git.js +1 -1
  1603. package/dist/utils/git.js.map +1 -1
  1604. package/dist/utils/interactive-engine-bootstrap.d.ts +67 -0
  1605. package/dist/utils/interactive-engine-bootstrap.d.ts.map +1 -0
  1606. package/dist/utils/interactive-engine-bootstrap.js +117 -0
  1607. package/dist/utils/interactive-engine-bootstrap.js.map +1 -0
  1608. package/dist/utils/interactive-engine-env.d.ts +41 -0
  1609. package/dist/utils/interactive-engine-env.d.ts.map +1 -0
  1610. package/dist/utils/interactive-engine-env.js +67 -0
  1611. package/dist/utils/interactive-engine-env.js.map +1 -0
  1612. package/dist/utils/markit.d.ts.map +1 -1
  1613. package/dist/utils/markit.js +15 -5
  1614. package/dist/utils/markit.js.map +1 -1
  1615. package/dist/utils/shell.js +2 -2
  1616. package/dist/utils/shell.js.map +1 -1
  1617. package/dist/utils/split-launcher.d.ts.map +1 -1
  1618. package/dist/utils/split-launcher.js +1 -2
  1619. package/dist/utils/split-launcher.js.map +1 -1
  1620. package/dist/utils/tools-manager.d.ts.map +1 -1
  1621. package/dist/utils/tools-manager.js +8 -34
  1622. package/dist/utils/tools-manager.js.map +1 -1
  1623. package/dist/utils/version-check.d.ts.map +1 -1
  1624. package/dist/utils/version-check.js +1 -1
  1625. package/dist/utils/version-check.js.map +1 -1
  1626. package/docs/changelog.mdx +11 -0
  1627. package/docs/custom-provider.md +26 -3
  1628. package/docs/development.md +14 -15
  1629. package/docs/extensions.md +60 -2
  1630. package/docs/keybindings.md +13 -1
  1631. package/docs/providers.md +15 -2
  1632. package/docs/rpc.md +1 -1
  1633. package/docs/security.md +15 -0
  1634. package/docs/session-format.md +2 -0
  1635. package/docs/usage.md +34 -0
  1636. package/docs/workflows.md +86 -9
  1637. package/examples/extensions/border-status-editor.ts +1 -6
  1638. package/examples/extensions/custom-compaction.ts +7 -2
  1639. package/examples/extensions/custom-footer.ts +1 -1
  1640. package/examples/extensions/custom-provider-anthropic/index.ts +14 -2
  1641. package/examples/extensions/custom-provider-gitlab-duo/index.ts +1 -1
  1642. package/examples/extensions/gondolin/index.ts +1 -1
  1643. package/examples/extensions/handoff.ts +2 -2
  1644. package/examples/extensions/hello.ts +1 -1
  1645. package/examples/extensions/minimal-mode.ts +6 -6
  1646. package/examples/extensions/overlay-qa-focus-components.ts +0 -1
  1647. package/examples/extensions/overlay-qa-streaming-input-components.ts +2 -2
  1648. package/examples/extensions/overlay-qa-tests.ts +16 -14
  1649. package/examples/extensions/overlay-qa-toggle-passive-components.ts +3 -5
  1650. package/examples/extensions/overlay-test.ts +3 -6
  1651. package/examples/extensions/plan-mode/index.ts +1 -1
  1652. package/examples/extensions/preset.ts +1 -1
  1653. package/examples/extensions/qna.ts +1 -1
  1654. package/examples/extensions/structured-output.ts +9 -9
  1655. package/examples/extensions/subagent/display.ts +115 -127
  1656. package/examples/extensions/subagent/index.ts +310 -349
  1657. package/examples/extensions/subagent/render.ts +244 -345
  1658. package/examples/extensions/subagent/runner.ts +223 -230
  1659. package/examples/extensions/subagent/schemas.ts +39 -46
  1660. package/examples/extensions/subagent/types.ts +22 -22
  1661. package/examples/extensions/summarize.ts +2 -2
  1662. package/examples/extensions/tic-tac-toe.ts +4 -4
  1663. package/examples/extensions/todo.ts +1 -1
  1664. package/examples/extensions/tool-override.ts +1 -1
  1665. package/examples/extensions/trigger-compact.ts +4 -1
  1666. package/examples/extensions/working-indicator.ts +2 -1
  1667. package/examples/rpc-extension-ui-components.ts +1 -2
  1668. package/examples/sdk/02-custom-model.ts +1 -1
  1669. package/examples/sdk/03-custom-prompt.ts +1 -6
  1670. package/examples/sdk/06-extensions.ts +1 -6
  1671. package/examples/sdk/07-context-files.ts +1 -6
  1672. package/examples/sdk/12-full-control.ts +1 -1
  1673. package/npm-shrinkwrap.json +300 -303
  1674. package/package.json +11 -11
@@ -1 +1 @@
1
- {"version":3,"file":"ask-user-question.js","sourceRoot":"","sources":["../../../../src/core/tools/ask-user-question/ask-user-question.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC3E,OAAO,EAAE,0BAA0B,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC1F,OAAO,EACN,WAAW,EACX,aAAa,EACb,WAAW,EAIX,oBAAoB,GACpB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AAGzE,MAAM,WAAW,GAAG,2DAA2D,CAAC;AAEhF,MAAM,UAAU,qBAAqB,CAAC,QAAsB;IAC3D,MAAM,KAAK,GAAyB,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAChE,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,CAAC,CAAC,KAAK;QACd,WAAW,EAAE,CAAC,CAAC,WAAW;KAC1B,CAAC,CAAC,CAAC;IACJ,MAAM,aAAa,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC1G,KAAK,MAAM,IAAI,IAAI,iBAAiB,CAAC,QAAQ,EAAE,aAAa,CAAC,EAAE,CAAC;QAC/D,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,eAAe,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;IAC1D,CAAC;IACD,OAAO,KAAK,CAAC;AACd,CAAC;AAED,MAAM,CAAC,MAAM,sBAAsB,GAAG,sBAAsB,aAAa,0BAA0B,WAAW,IAAI,WAAW,gDAAgD,CAAC;AAC9K,MAAM,CAAC,MAAM,yBAAyB,GAAa;IAClD,6IAA6I,aAAa,4BAA4B;IACtL,2BAA2B,WAAW,IAAI,WAAW,uTAAuT;IAC5W,qiBAAqiB;IACriB,kHAAkH;CAClH,CAAC;AAEF,MAAM,UAAU,mCAAmC;IAClD,MAAM,QAAQ,GAAG,sBAAsB,CAAC,UAAU,EAAE,CAAC,QAAQ,CAAC,CAAC;IAC/D,OAAO;QACN,IAAI,EAAE,mBAAmB;QACzB,KAAK,EAAE,mBAAmB;QAC1B,WAAW,EAAE;;;;;;;;;;;;;;;;;;8ZAkB+Y;QAC5Z,aAAa,EAAE,QAAQ,CAAC,aAAa,IAAI,sBAAsB;QAC/D,gBAAgB,EAAE,QAAQ,CAAC,gBAAgB,IAAI,yBAAyB;QACxE,UAAU,EAAE,oBAAoB;QAEhC,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG;YACxD,MAAM,KAAK,GAAG,MAAmC,CAAC;YAClD,IAAI,CAAC,GAAG,CAAC,KAAK;gBAAE,OAAO,eAAe,CAAC,WAAW,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;YAEtG,MAAM,UAAU,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;YAChD,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC;gBACpB,OAAO,eAAe,CAAC,UAAU,CAAC,OAAO,EAAE;oBAC1C,OAAO,EAAE,EAAE;oBACX,SAAS,EAAE,IAAI;oBACf,KAAK,EAAE,UAAU,CAAC,KAAK;iBACvB,CAAC,CAAC;YACJ,CAAC;YAED,MAAM,UAAU,GAA2B,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC;YAEhG,+EAA+E;YAC/E,EAAE;YACF,iFAAiF;YACjF,gFAAgF;YAChF,iFAAiF;YACjF,oFAAoF;YACpF,oFAAoF;YACpF,gFAAgF;YAChF,gFAAgF;YAChF,kEAAkE;YAClE,EAAE;YACF,4EAA4E;YAC5E,gFAAgF;YAChF,8BAA8B;YAC9B,GAAG,CAAC,EAAE,CAAC,iBAAiB,EAAE,CAAC,KAAK,CAAC,CAAC;YAClC,IAAI,CAAC;gBACJ,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,MAAM,CAAsB,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;oBACjF,MAAM,OAAO,GAAG,IAAI,oBAAoB,CAAC;wBACxC,GAAG;wBACH,KAAK;wBACL,MAAM,EAAE,KAAK;wBACb,UAAU;wBACV,IAAI;qBACJ,CAAC,CAAC;oBACH,OAAO,OAAO,CAAC,SAAS,CAAC;gBAC1B,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;gBAEf,OAAO,0BAA0B,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YAClD,CAAC;oBAAS,CAAC;gBACV,GAAG,CAAC,EAAE,CAAC,iBAAiB,EAAE,CAAC,IAAI,CAAC,CAAC;YAClC,CAAC;QACF,CAAC;KACD,CAAC;AACH,CAAC;AAED,OAAO,EAAE,0BAA0B,EAAE,eAAe,EAAE,CAAC","sourcesContent":["import type { ToolDefinition } from \"../../extensions/types.ts\";\nimport { loadConfig, validateGuidanceFields } from \"./config.ts\";\nimport { QuestionnaireSession } from \"./state/questionnaire-session.ts\";\nimport { ROW_INTENT_META, sentinelsToAppend } from \"./state/row-intent.ts\";\nimport { buildQuestionnaireResponse, buildToolResult } from \"./tool/response-envelope.ts\";\nimport {\n\tMAX_OPTIONS,\n\tMAX_QUESTIONS,\n\tMIN_OPTIONS,\n\ttype QuestionData,\n\ttype QuestionnaireResult,\n\ttype QuestionParams,\n\tQuestionParamsSchema,\n} from \"./tool/types.ts\";\nimport { validateQuestionnaire } from \"./tool/validate-questionnaire.ts\";\nimport type { WrappingSelectItem } from \"./view/components/wrapping-select.ts\";\n\nconst ERROR_NO_UI = \"Error: UI not available (running in non-interactive mode)\";\n\nexport function buildItemsForQuestion(question: QuestionData): WrappingSelectItem[] {\n\tconst items: WrappingSelectItem[] = question.options.map((o) => ({\n\t\tkind: \"option\",\n\t\tlabel: o.label,\n\t\tdescription: o.description,\n\t}));\n\tconst hasAnyPreview = question.options.some((o) => typeof o.preview === \"string\" && o.preview.length > 0);\n\tfor (const kind of sentinelsToAppend(question, hasAnyPreview)) {\n\t\titems.push({ kind, label: ROW_INTENT_META[kind].label });\n\t}\n\treturn items;\n}\n\nexport const DEFAULT_PROMPT_SNIPPET = `Ask the user up to ${MAX_QUESTIONS} structured questions (${MIN_OPTIONS}-${MAX_OPTIONS} options each) when requirements are ambiguous`;\nexport const DEFAULT_PROMPT_GUIDELINES: string[] = [\n\t`Use ask_user_question whenever the user's request is underspecified and you cannot proceed without concrete decisions — you can ask up to ${MAX_QUESTIONS} questions per invocation.`,\n\t`Each question MUST have ${MIN_OPTIONS}-${MAX_OPTIONS} options. Every option requires a concise label (1-5 words) and a description explaining what the choice means or its trade-offs. The user can additionally type a custom answer (\"Type something.\" row is appended automatically to single-select questions) or pick \"Chat about this\" to abandon the questionnaire.`,\n\t`Set multiSelect: true when multiple answers are valid; this suppresses the \"Type something.\" row. Provide an options[].preview markdown string when an option benefits from richer side-by-side context (mockups, code snippets, diagrams, configs) — single-select only. NOTE: any non-empty preview on a single-select question ALSO suppresses the \"Type something.\" row (no room in the side-by-side layout); \"Chat about this\" remains the escape hatch. If you recommend a specific option, make it the first option and append \"(Recommended)\" to its label.`,\n\t\"Do not stack multiple ask_user_question calls back-to-back — group all clarifying questions into one invocation.\",\n];\n\nexport function createAskUserQuestionToolDefinition(): ToolDefinition<typeof QuestionParamsSchema, unknown> {\n\tconst guidance = validateGuidanceFields(loadConfig().guidance);\n\treturn {\n\t\tname: \"ask_user_question\",\n\t\tlabel: \"Ask User Question\",\n\t\tdescription: `Ask the user one or more structured questions during execution. Use when you need to:\n1. Gather user preferences or requirements\n2. Clarify ambiguous instructions\n3. Get decisions on implementation choices as you work\n4. Offer choices to the user about what direction to take\n\nUsage notes:\n- Users will always be able to type a custom answer (\"Type something.\" row is appended automatically to every single-select question) or pick \"Chat about this\" to abandon the questionnaire and continue in free-form conversation. Do NOT author \"Other\" / \"Type something.\" / \"Chat about this\" labels yourself — duplicates are rejected at runtime.\n- Use multiSelect: true to allow multiple answers to be selected for a question. The \"Type something.\" row is suppressed on multi-select questions, and is ALSO suppressed on single-select questions where any option carries a \\`preview\\` (the side-by-side layout has no room for inline custom text — \"Chat about this\" remains as the free-form escape hatch).\n- If you recommend a specific option, make that the first option in the list and add \"(Recommended)\" at the end of the label.\n\nPreview feature:\nUse the optional \\`preview\\` field on options when presenting concrete artifacts that users need to visually compare:\n- ASCII mockups of UI layouts or components\n- Code snippets showing different implementations\n- Diagram variations\n- Configuration examples\n\nPreview content is rendered as markdown in a monospace box. Multi-line text with newlines is supported. When any option has a preview, the UI switches to a side-by-side layout with a vertical option list on the left and preview on the right. Do not use previews for simple preference questions where labels and descriptions suffice. Note: previews are only supported for single-select questions (not multiSelect).`,\n\t\tpromptSnippet: guidance.promptSnippet ?? DEFAULT_PROMPT_SNIPPET,\n\t\tpromptGuidelines: guidance.promptGuidelines ?? DEFAULT_PROMPT_GUIDELINES,\n\t\tparameters: QuestionParamsSchema,\n\n\t\tasync execute(_toolCallId, params, signal, _onUpdate, ctx) {\n\t\t\tconst typed = params as unknown as QuestionParams;\n\t\t\tif (!ctx.hasUI) return buildToolResult(ERROR_NO_UI, { answers: [], cancelled: true, error: \"no_ui\" });\n\n\t\t\tconst validation = validateQuestionnaire(typed);\n\t\t\tif (!validation.ok) {\n\t\t\t\treturn buildToolResult(validation.message, {\n\t\t\t\t\tanswers: [],\n\t\t\t\t\tcancelled: true,\n\t\t\t\t\terror: validation.error,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst itemsByTab: WrappingSelectItem[][] = typed.questions.map((q) => buildItemsForQuestion(q));\n\n\t\t\t// Suspend the animated working loader for the lifetime of the blocking dialog.\n\t\t\t//\n\t\t\t// The questionnaire mounts inline, directly below the status/working-loader row.\n\t\t\t// That loader ticks every ~88ms and calls `requestRender()` on each frame. On a\n\t\t\t// short terminal the (tall) side-by-side dialog pushes the loader line above the\n\t\t\t// viewport top, so pi-tui's differential renderer sees `firstChanged < viewportTop`\n\t\t\t// and falls back to a full clear+replay (`\\x1b[2J\\x1b[H\\x1b[3J`) on every tick. The\n\t\t\t// transcript is replayed before the dialog each time, which is the flicker. The\n\t\t\t// loader conveys nothing while we're blocked on human input, so hide it for the\n\t\t\t// duration and restore it once the dialog closes (on every path).\n\t\t\t//\n\t\t\t// Guarded: some hosts (e.g. the workflow stage-UI broker) pass a minimal UI\n\t\t\t// context that only implements `custom`, so treat a missing loader control as a\n\t\t\t// no-op rather than throwing.\n\t\t\tctx.ui.setWorkingVisible?.(false);\n\t\t\ttry {\n\t\t\t\tconst result = await ctx.ui.custom<QuestionnaireResult>((tui, theme, _kb, done) => {\n\t\t\t\t\tconst session = new QuestionnaireSession({\n\t\t\t\t\t\ttui,\n\t\t\t\t\t\ttheme,\n\t\t\t\t\t\tparams: typed,\n\t\t\t\t\t\titemsByTab,\n\t\t\t\t\t\tdone,\n\t\t\t\t\t});\n\t\t\t\t\treturn session.component;\n\t\t\t\t}, { signal });\n\n\t\t\t\treturn buildQuestionnaireResponse(result, typed);\n\t\t\t} finally {\n\t\t\t\tctx.ui.setWorkingVisible?.(true);\n\t\t\t}\n\t\t},\n\t};\n}\n\nexport { buildQuestionnaireResponse, buildToolResult };\n"]}
1
+ {"version":3,"file":"ask-user-question.js","sourceRoot":"","sources":["../../../../src/core/tools/ask-user-question/ask-user-question.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ToolDefinition } from \"../../extensions/types.ts\";\nimport { loadConfig, validateGuidanceFields } from \"./config.ts\";\nimport { QuestionnaireSession } from \"./state/questionnaire-session.ts\";\nimport { ROW_INTENT_META, sentinelsToAppend } from \"./state/row-intent.ts\";\nimport { buildQuestionnaireResponse, buildToolResult } from \"./tool/response-envelope.ts\";\nimport {\n\tMAX_OPTIONS,\n\tMAX_QUESTIONS,\n\tMIN_OPTIONS,\n\ttype QuestionData,\n\ttype QuestionnaireResult,\n\ttype QuestionParams,\n\tQuestionParamsSchema,\n} from \"./tool/types.ts\";\nimport { validateQuestionnaire } from \"./tool/validate-questionnaire.ts\";\nimport type { WrappingSelectItem } from \"./view/components/wrapping-select.ts\";\n\nconst ERROR_NO_UI = \"Error: UI not available (running in non-interactive mode)\";\n\nexport function buildItemsForQuestion(question: QuestionData): WrappingSelectItem[] {\n\tconst items: WrappingSelectItem[] = question.options.map((o) => ({\n\t\tkind: \"option\",\n\t\tlabel: o.label,\n\t\tdescription: o.description,\n\t}));\n\tconst hasAnyPreview = question.options.some((o) => typeof o.preview === \"string\" && o.preview.length > 0);\n\tfor (const kind of sentinelsToAppend(question, hasAnyPreview)) {\n\t\titems.push({ kind, label: ROW_INTENT_META[kind].label });\n\t}\n\treturn items;\n}\n\nexport const DEFAULT_PROMPT_SNIPPET = `Ask the user up to ${MAX_QUESTIONS} structured questions (${MIN_OPTIONS}-${MAX_OPTIONS} options each) when requirements are ambiguous`;\nexport const DEFAULT_PROMPT_GUIDELINES: string[] = [\n\t`Use ask_user_question whenever the user's request is underspecified and you cannot proceed without concrete decisions — you can ask up to ${MAX_QUESTIONS} questions per invocation.`,\n\t`Each question MUST have ${MIN_OPTIONS}-${MAX_OPTIONS} options. Every option requires a concise label (1-5 words) and a description explaining what the choice means or its trade-offs. The user can additionally type a custom answer (\"Type something.\" row is appended automatically to single-select questions) or pick \"Chat about this\" to abandon the questionnaire.`,\n\t`Set multiSelect: true when multiple answers are valid; this suppresses the \"Type something.\" row. Provide an options[].preview markdown string when an option benefits from richer side-by-side context (mockups, code snippets, diagrams, configs) — single-select only. NOTE: any non-empty preview on a single-select question ALSO suppresses the \"Type something.\" row (no room in the side-by-side layout); \"Chat about this\" remains the escape hatch. If you recommend a specific option, make it the first option and append \"(Recommended)\" to its label.`,\n\t\"Do not stack multiple ask_user_question calls back-to-back — group all clarifying questions into one invocation.\",\n];\n\nexport function createAskUserQuestionToolDefinition(): ToolDefinition<typeof QuestionParamsSchema, unknown> {\n\tconst guidance = validateGuidanceFields(loadConfig().guidance);\n\treturn {\n\t\tname: \"ask_user_question\",\n\t\tlabel: \"Ask User Question\",\n\t\tdescription: `Ask the user one or more structured questions during execution. Use when you need to:\n1. Gather user preferences or requirements\n2. Clarify ambiguous instructions\n3. Get decisions on implementation choices as you work\n4. Offer choices to the user about what direction to take\n\nUsage notes:\n- Users will always be able to type a custom answer (\"Type something.\" row is appended automatically to every single-select question) or pick \"Chat about this\" to abandon the questionnaire and continue in free-form conversation. Do NOT author \"Other\" / \"Type something.\" / \"Chat about this\" labels yourself — duplicates are rejected at runtime.\n- Use multiSelect: true to allow multiple answers to be selected for a question. The \"Type something.\" row is suppressed on multi-select questions, and is ALSO suppressed on single-select questions where any option carries a \\`preview\\` (the side-by-side layout has no room for inline custom text — \"Chat about this\" remains as the free-form escape hatch).\n- If you recommend a specific option, make that the first option in the list and add \"(Recommended)\" at the end of the label.\n\nPreview feature:\nUse the optional \\`preview\\` field on options when presenting concrete artifacts that users need to visually compare:\n- ASCII mockups of UI layouts or components\n- Code snippets showing different implementations\n- Diagram variations\n- Configuration examples\n\nPreview content is rendered as markdown in a monospace box. Multi-line text with newlines is supported. When any option has a preview, the UI switches to a side-by-side layout with a vertical option list on the left and preview on the right. Do not use previews for simple preference questions where labels and descriptions suffice. Note: previews are only supported for single-select questions (not multiSelect).`,\n\t\tpromptSnippet: guidance.promptSnippet ?? DEFAULT_PROMPT_SNIPPET,\n\t\tpromptGuidelines: guidance.promptGuidelines ?? DEFAULT_PROMPT_GUIDELINES,\n\t\tparameters: QuestionParamsSchema,\n\n\t\tasync execute(_toolCallId, params, signal, _onUpdate, ctx) {\n\t\t\tconst typed = params as unknown as QuestionParams;\n\t\t\tif (!ctx.hasUI) return buildToolResult(ERROR_NO_UI, { answers: [], cancelled: true, error: \"no_ui\" });\n\n\t\t\tconst validation = validateQuestionnaire(typed);\n\t\t\tif (!validation.ok) {\n\t\t\t\treturn buildToolResult(validation.message, {\n\t\t\t\t\tanswers: [],\n\t\t\t\t\tcancelled: true,\n\t\t\t\t\terror: validation.error,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst itemsByTab: WrappingSelectItem[][] = typed.questions.map((q) => buildItemsForQuestion(q));\n\n\t\t\t// Suspend the animated working loader for the lifetime of the blocking dialog.\n\t\t\t//\n\t\t\t// The questionnaire mounts inline, directly below the status/working-loader row.\n\t\t\t// That loader ticks every ~88ms and calls `requestRender()` on each frame. On a\n\t\t\t// short terminal the (tall) side-by-side dialog pushes the loader line above the\n\t\t\t// viewport top, so pi-tui's differential renderer sees `firstChanged < viewportTop`\n\t\t\t// and falls back to a full clear+replay (`\\x1b[2J\\x1b[H\\x1b[3J`) on every tick. The\n\t\t\t// transcript is replayed before the dialog each time, which is the flicker. The\n\t\t\t// loader conveys nothing while we're blocked on human input, so hide it for the\n\t\t\t// duration and restore it once the dialog closes (on every path).\n\t\t\t//\n\t\t\t// Guarded: some hosts (e.g. the workflow stage-UI broker) pass a minimal UI\n\t\t\t// context that only implements `custom`, so treat a missing loader control as a\n\t\t\t// no-op rather than throwing.\n\t\t\tctx.ui.setWorkingVisible?.(false);\n\t\t\ttry {\n\t\t\t\tconst result = await ctx.ui.custom<QuestionnaireResult>(\n\t\t\t\t\t(tui, theme, _kb, done) => {\n\t\t\t\t\t\tconst session = new QuestionnaireSession({\n\t\t\t\t\t\t\ttui,\n\t\t\t\t\t\t\ttheme,\n\t\t\t\t\t\t\tparams: typed,\n\t\t\t\t\t\t\titemsByTab,\n\t\t\t\t\t\t\tdone,\n\t\t\t\t\t\t});\n\t\t\t\t\t\treturn session.component;\n\t\t\t\t\t},\n\t\t\t\t\t{ signal },\n\t\t\t\t);\n\n\t\t\t\treturn buildQuestionnaireResponse(result, typed);\n\t\t\t} finally {\n\t\t\t\tctx.ui.setWorkingVisible?.(true);\n\t\t\t}\n\t\t},\n\t};\n}\n\nexport { buildQuestionnaireResponse, buildToolResult };\n"]}
@@ -1,5 +1,5 @@
1
- import { type Theme } from "../../../../modes/interactive/theme/theme.ts";
2
1
  import { Input } from "@earendil-works/pi-tui";
2
+ import { type Theme } from "../../../../modes/interactive/theme/theme.ts";
3
3
  import type { QuestionData } from "../tool/types.ts";
4
4
  import type { WrappingSelectItem } from "../view/components/wrapping-select.ts";
5
5
  import { QuestionnairePropsAdapter } from "../view/props-adapter.ts";
@@ -1 +1 @@
1
- {"version":3,"file":"build-questionnaire.d.ts","sourceRoot":"","sources":["../../../../../src/core/tools/ask-user-question/state/build-questionnaire.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,KAAK,KAAK,EAAE,MAAM,8CAA8C,CAAC;AAC5F,OAAO,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAC/C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAgBrD,OAAO,KAAK,EAAE,kBAAkB,EAAuB,MAAM,uCAAuC,CAAC;AAErG,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AAerE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAErD,MAAM,WAAW,wBAAwB;IACxC,GAAG,EAAE;QAAE,QAAQ,EAAE;YAAE,OAAO,EAAE,MAAM,CAAA;SAAE,CAAC;QAAC,aAAa,IAAI,IAAI,CAAA;KAAE,CAAC;IAC9D,KAAK,EAAE,KAAK,CAAC;IACb,SAAS,EAAE,SAAS,YAAY,EAAE,CAAC;IACnC,UAAU,EAAE,aAAa,CAAC,SAAS,kBAAkB,EAAE,CAAC,CAAC;IACzD,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,kBAAkB,CAAC;IACjC,aAAa,EAAE,MAAM,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,kBAAkB;IAClC,OAAO,EAAE,yBAAyB,CAAC;IACnC,UAAU,EAAE,KAAK,CAAC;IAClB,WAAW,EAAE,KAAK,CAAC;IACnB,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,EAAE,CAAC;IACpC,UAAU,EAAE,MAAM,IAAI,CAAC;CACvB;AAwBD;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,wBAAwB,GAAG,kBAAkB,CAEvF"}
1
+ {"version":3,"file":"build-questionnaire.d.ts","sourceRoot":"","sources":["../../../../../src/core/tools/ask-user-question/state/build-questionnaire.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAC/C,OAAO,EAAoB,KAAK,KAAK,EAAE,MAAM,8CAA8C,CAAC;AAC5F,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAgBrD,OAAO,KAAK,EAAE,kBAAkB,EAAuB,MAAM,uCAAuC,CAAC;AAErG,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AAerE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAErD,MAAM,WAAW,wBAAwB;IACxC,GAAG,EAAE;QAAE,QAAQ,EAAE;YAAE,OAAO,EAAE,MAAM,CAAA;SAAE,CAAC;QAAC,aAAa,IAAI,IAAI,CAAA;KAAE,CAAC;IAC9D,KAAK,EAAE,KAAK,CAAC;IACb,SAAS,EAAE,SAAS,YAAY,EAAE,CAAC;IACnC,UAAU,EAAE,aAAa,CAAC,SAAS,kBAAkB,EAAE,CAAC,CAAC;IACzD,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,kBAAkB,CAAC;IACjC,aAAa,EAAE,MAAM,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,kBAAkB;IAClC,OAAO,EAAE,yBAAyB,CAAC;IACnC,UAAU,EAAE,KAAK,CAAC;IAClB,WAAW,EAAE,KAAK,CAAC;IACnB,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,EAAE,CAAC;IACpC,UAAU,EAAE,MAAM,IAAI,CAAC;CACvB;AAwBD;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,wBAAwB,GAAG,kBAAkB,CAEvF"}
@@ -1,5 +1,5 @@
1
- import { getMarkdownTheme } from "../../../../modes/interactive/theme/theme.js";
2
1
  import { Input } from "@earendil-works/pi-tui";
2
+ import { getMarkdownTheme } from "../../../../modes/interactive/theme/theme.js";
3
3
  import { globalBinding, perTabBinding, } from "../view/component-binding.js";
4
4
  import { ChatRowView } from "../view/components/chat-row-view.js";
5
5
  import { MultiSelectView } from "../view/components/multi-select-view.js";
@@ -1 +1 @@
1
- {"version":3,"file":"build-questionnaire.js","sourceRoot":"","sources":["../../../../../src/core/tools/ask-user-question/state/build-questionnaire.ts"],"names":[],"mappings":"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","sourcesContent":["import { getMarkdownTheme, type Theme } from \"../../../../modes/interactive/theme/theme.ts\";\nimport { Input } from \"@earendil-works/pi-tui\";\nimport type { QuestionData } from \"../tool/types.ts\";\nimport {\n\ttype BoundGlobalBinding,\n\ttype BoundPerTabBinding,\n\tglobalBinding,\n\tperTabBinding,\n} from \"../view/component-binding.ts\";\nimport { ChatRowView } from \"../view/components/chat-row-view.ts\";\nimport { MultiSelectView } from \"../view/components/multi-select-view.ts\";\nimport { OptionListView } from \"../view/components/option-list-view.ts\";\nimport { PreviewBlockRenderer } from \"../view/components/preview/preview-block-renderer.ts\";\nimport { crossTabLeftWidthWithDonation } from \"../view/components/preview/preview-layout-decider.ts\";\nimport type { PreviewPaneProps } from \"../view/components/preview/preview-pane.ts\";\nimport { PreviewPane } from \"../view/components/preview/preview-pane.ts\";\nimport { SubmitPicker } from \"../view/components/submit-picker.ts\";\nimport { TabBar } from \"../view/components/tab-bar.ts\";\nimport type { WrappingSelectItem, WrappingSelectTheme } from \"../view/components/wrapping-select.ts\";\nimport { DialogView } from \"../view/dialog-builder.ts\";\nimport { QuestionnairePropsAdapter } from \"../view/props-adapter.ts\";\nimport type { StatefulView } from \"../view/stateful-view.ts\";\nimport type { TabBodyHeights, TabComponents } from \"../view/tab-components.ts\";\nimport { ROW_INTENT_META } from \"./row-intent.ts\";\nimport type { PerTabSelector } from \"./selectors/contract.ts\";\nimport { selectActivePreviewPaneIndex } from \"./selectors/derivations.ts\";\nimport {\n\tselectChatRowProps,\n\tselectDialogProps,\n\tselectMultiSelectProps,\n\tselectOptionListProps,\n\tselectPreviewPaneProps,\n\tselectSubmitPickerProps,\n\tselectTabBarProps,\n} from \"./selectors/projections.ts\";\nimport type { QuestionnaireState } from \"./state.ts\";\n\nexport interface QuestionnaireBuildConfig {\n\ttui: { terminal: { columns: number }; requestRender(): void };\n\ttheme: Theme;\n\tquestions: readonly QuestionData[];\n\titemsByTab: ReadonlyArray<readonly WrappingSelectItem[]>;\n\tisMulti: boolean;\n\tinitialState: QuestionnaireState;\n\tgetCurrentTab: () => number;\n}\n\nexport interface QuestionnaireBuilt {\n\tadapter: QuestionnairePropsAdapter;\n\tnotesInput: Input;\n\tinlineInput: Input;\n\trender: (width: number) => string[];\n\tinvalidate: () => void;\n}\n\ninterface HeightComputers {\n\tglobal: (width: number) => number;\n\tcurrent: (width: number) => number;\n}\n\nfunction previewBodyHeights(pane: PreviewPane): (width: number) => TabBodyHeights {\n\treturn (width) => ({\n\t\tcurrent: pane.naturalHeight(width),\n\t\tmax: pane.maxNaturalHeight(width),\n\t});\n}\n\nfunction multiSelectBodyHeights(view: MultiSelectView): (width: number) => TabBodyHeights {\n\treturn (width) => {\n\t\tconst h = view.naturalHeight(width);\n\t\treturn { current: h, max: h };\n\t};\n}\n\nconst isActiveTab: PerTabSelector<boolean> = (s, ctx) =>\n\tctx.i === selectActivePreviewPaneIndex(s.currentTab, ctx.totalQuestions);\n\n/**\n * Pure factory: assembles every TUI component, the props adapter, and a\n * lifecycle handle. Session-state dependencies arrive via `getCurrentTab` and\n * the `inputBuffer` cell. Initial paint is delegated to\n * `adapter.apply(initialState)` (called by the session at construction-end);\n * no selector is invoked here.\n */\nexport function buildQuestionnaire(config: QuestionnaireBuildConfig): QuestionnaireBuilt {\n\treturn new QuestionnaireBuilder(config).build();\n}\n\n/**\n * Programming-by-intention assembly: each private method names one\n * construction step from `build()`. Read top-down; the class is build-only and\n * discarded once the handle is returned.\n */\nclass QuestionnaireBuilder {\n\tprivate readonly tui: QuestionnaireBuildConfig[\"tui\"];\n\tprivate readonly theme: Theme;\n\tprivate readonly questions: readonly QuestionData[];\n\tprivate readonly itemsByTab: ReadonlyArray<readonly WrappingSelectItem[]>;\n\tprivate readonly isMulti: boolean;\n\tprivate readonly initialState: QuestionnaireState;\n\tprivate readonly getCurrentTab: () => number;\n\n\tprivate readonly selectTheme: WrappingSelectTheme;\n\tprivate readonly markdownTheme = getMarkdownTheme();\n\tprivate readonly chatRow: ChatRowView;\n\tprivate readonly notesInput = new Input();\n\tprivate readonly inlineInput = new Input();\n\tprivate readonly getTerminalWidth = () => this.tui.terminal.columns;\n\n\tconstructor(config: QuestionnaireBuildConfig) {\n\t\tthis.tui = config.tui;\n\t\tthis.theme = config.theme;\n\t\tthis.questions = config.questions;\n\t\tthis.itemsByTab = config.itemsByTab;\n\t\tthis.isMulti = config.isMulti;\n\t\tthis.initialState = config.initialState;\n\t\tthis.getCurrentTab = config.getCurrentTab;\n\n\t\tthis.selectTheme = this.makeSelectTheme();\n\t\tthis.chatRow = new ChatRowView({\n\t\t\titem: { kind: \"chat\", label: ROW_INTENT_META.chat.label },\n\t\t\ttheme: this.selectTheme,\n\t\t});\n\t}\n\n\tbuild(): QuestionnaireBuilt {\n\t\tconst tabs = this.buildTabComponents();\n\t\tthis.injectGlobalLeftWidth(tabs);\n\t\tconst submitPicker = this.buildSubmitPicker();\n\t\tconst tabBar = this.buildTabBar();\n\t\tconst heights = this.buildHeightComputers(tabs);\n\t\tconst dialog = this.buildDialog(tabs, submitPicker, tabBar, heights);\n\t\tconst globalBindings = this.buildGlobalBindings(dialog, submitPicker, tabBar);\n\t\tconst perTabBindings = this.buildPerTabBindings();\n\t\tconst adapter = this.buildAdapter(tabs, globalBindings, perTabBindings);\n\t\treturn this.handle(adapter, dialog);\n\t}\n\n\tprivate makeSelectTheme(): WrappingSelectTheme {\n\t\tconst t = this.theme;\n\t\treturn {\n\t\t\tselectedText: (s) => t.fg(\"accent\", t.bold(s)),\n\t\t\tdescription: (s) => t.fg(\"muted\", s),\n\t\t\tscrollInfo: (s) => t.fg(\"dim\", s),\n\t\t};\n\t}\n\n\tprivate buildTabComponents(): ReadonlyArray<TabComponents> {\n\t\treturn this.questions.map((q, i) => this.buildTabFor(q, i));\n\t}\n\n\tprivate buildTabFor(question: QuestionData, index: number): TabComponents {\n\t\tconst optionList = new OptionListView({\n\t\t\titems: this.itemsByTab[index] ?? [],\n\t\t\ttheme: this.selectTheme,\n\t\t});\n\t\tconst previewBlock = new PreviewBlockRenderer({\n\t\t\tquestion,\n\t\t\ttheme: this.theme,\n\t\t\tmarkdownTheme: this.markdownTheme,\n\t\t});\n\t\tconst preview = new PreviewPane({\n\t\t\tquestion,\n\t\t\tgetTerminalWidth: this.getTerminalWidth,\n\t\t\toptionListView: optionList,\n\t\t\tpreviewBlock,\n\t\t});\n\t\tconst multiSelect = question.multiSelect ? new MultiSelectView(this.theme, question) : undefined;\n\t\tconst bodyHeights = this.buildBodyHeights(question, preview, multiSelect);\n\t\treturn { optionList, preview, multiSelect, bodyHeights };\n\t}\n\n\tprivate buildBodyHeights(\n\t\tquestion: QuestionData,\n\t\tpreview: PreviewPane,\n\t\tmultiSelect: MultiSelectView | undefined,\n\t): (width: number) => TabBodyHeights {\n\t\treturn question.multiSelect ? multiSelectBodyHeights(multiSelect!) : previewBodyHeights(preview);\n\t}\n\n\t/**\n\t * Compute cross-tab max adaptive left width and inject into each PreviewPane.\n\t * Mirrors buildHeightComputers pattern — iterates all tabs, takes max.\n\t * Called after buildTabComponents, before buildDialog (so setGlobalLeftWidth\n\t * is set before any rendering occurs).\n\t */\n\tprivate injectGlobalLeftWidth(tabs: ReadonlyArray<TabComponents>): void {\n\t\tconst questions = this.questions;\n\t\tconst itemsByTab = this.itemsByTab;\n\t\tconst tabsDescriptor = questions.map((q) => ({ multiSelect: q.multiSelect }));\n\t\tconst globalLeftWidth = (paneWidth: number): number =>\n\t\t\tcrossTabLeftWidthWithDonation(tabsDescriptor, itemsByTab, questions, paneWidth);\n\t\tfor (const tab of tabs) {\n\t\t\ttab.preview.setGlobalLeftWidth(globalLeftWidth);\n\t\t}\n\t}\n\n\tprivate buildSubmitPicker(): SubmitPicker | undefined {\n\t\treturn this.isMulti ? new SubmitPicker(this.theme) : undefined;\n\t}\n\n\tprivate buildTabBar(): TabBar | undefined {\n\t\treturn this.isMulti ? new TabBar(this.theme) : undefined;\n\t}\n\n\tprivate buildHeightComputers(tabs: ReadonlyArray<TabComponents>): HeightComputers {\n\t\tconst global = (width: number): number => {\n\t\t\tlet max = 0;\n\t\t\tfor (const tab of tabs) {\n\t\t\t\tconst h = tab.bodyHeights(width).max;\n\t\t\t\tif (h > max) max = h;\n\t\t\t}\n\t\t\treturn Math.max(1, max);\n\t\t};\n\t\tconst current = (width: number): number => {\n\t\t\tconst idx = Math.min(this.getCurrentTab(), tabs.length - 1);\n\t\t\treturn Math.max(0, tabs[idx]?.bodyHeights(width).current ?? 0);\n\t\t};\n\t\treturn { global, current };\n\t}\n\n\tprivate pickInitialActivePreview(tabs: ReadonlyArray<TabComponents>): StatefulView<PreviewPaneProps> {\n\t\tconst idx = selectActivePreviewPaneIndex(this.initialState.currentTab, this.questions.length);\n\t\treturn tabs[idx]?.preview ?? tabs[0]!.preview;\n\t}\n\n\tprivate buildDialog(\n\t\ttabs: ReadonlyArray<TabComponents>,\n\t\tsubmitPicker: SubmitPicker | undefined,\n\t\ttabBar: TabBar | undefined,\n\t\theights: HeightComputers,\n\t): DialogView {\n\t\treturn new DialogView(\n\t\t\t{\n\t\t\t\ttheme: this.theme,\n\t\t\t\tquestions: this.questions,\n\t\t\t\ttabBar,\n\t\t\t\tnotesInput: this.notesInput,\n\t\t\t\tchatRow: this.chatRow,\n\t\t\t\tisMulti: this.isMulti,\n\t\t\t\ttabsByIndex: tabs,\n\t\t\t\tsubmitPicker,\n\t\t\t\tgetBodyHeight: heights.global,\n\t\t\t\tgetCurrentBodyHeight: heights.current,\n\t\t\t},\n\t\t\t{ state: this.initialState, activePreviewPane: this.pickInitialActivePreview(tabs) },\n\t\t);\n\t}\n\n\tprivate buildGlobalBindings(\n\t\tdialog: DialogView,\n\t\tsubmitPicker: SubmitPicker | undefined,\n\t\ttabBar: TabBar | undefined,\n\t): ReadonlyArray<BoundGlobalBinding> {\n\t\treturn [\n\t\t\tglobalBinding({ component: dialog, select: selectDialogProps }),\n\t\t\tglobalBinding({ component: this.chatRow, select: selectChatRowProps }),\n\t\t\t...(submitPicker ? [globalBinding({ component: submitPicker, select: selectSubmitPickerProps })] : []),\n\t\t\t...(tabBar ? [globalBinding({ component: tabBar, select: selectTabBarProps })] : []),\n\t\t];\n\t}\n\n\tprivate buildPerTabBindings(): ReadonlyArray<BoundPerTabBinding> {\n\t\treturn [\n\t\t\tperTabBinding({\n\t\t\t\tresolve: (tab) => tab.optionList,\n\t\t\t\tpredicate: isActiveTab,\n\t\t\t\tselect: selectOptionListProps,\n\t\t\t}),\n\t\t\tperTabBinding({\n\t\t\t\tresolve: (tab) => tab.preview,\n\t\t\t\tpredicate: isActiveTab,\n\t\t\t\tselect: selectPreviewPaneProps,\n\t\t\t}),\n\t\t\tperTabBinding({\n\t\t\t\tresolve: (tab) => tab.multiSelect,\n\t\t\t\tselect: selectMultiSelectProps,\n\t\t\t}),\n\t\t];\n\t}\n\n\tprivate buildAdapter(\n\t\ttabs: ReadonlyArray<TabComponents>,\n\t\tglobalBindings: ReadonlyArray<BoundGlobalBinding>,\n\t\tperTabBindings: ReadonlyArray<BoundPerTabBinding>,\n\t): QuestionnairePropsAdapter {\n\t\treturn new QuestionnairePropsAdapter({\n\t\t\ttui: this.tui,\n\t\t\tquestions: this.questions,\n\t\t\titemsByTab: this.itemsByTab,\n\t\t\ttabsByIndex: tabs,\n\t\t\tinlineInput: this.inlineInput,\n\t\t\tglobalBindings,\n\t\t\tperTabBindings,\n\t\t\textraInvalidatables: [this.notesInput],\n\t\t});\n\t}\n\n\tprivate handle(adapter: QuestionnairePropsAdapter, dialog: DialogView): QuestionnaireBuilt {\n\t\treturn {\n\t\t\tadapter,\n\t\t\tnotesInput: this.notesInput,\n\t\t\tinlineInput: this.inlineInput,\n\t\t\trender: (w) => dialog.render(w),\n\t\t\tinvalidate: () => adapter.invalidate(),\n\t\t};\n\t}\n}\n"]}
1
+ {"version":3,"file":"build-questionnaire.js","sourceRoot":"","sources":["../../../../../src/core/tools/ask-user-question/state/build-questionnaire.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAc,MAAM,8CAA8C,CAAC;AAE5F,OAAO,EAGN,aAAa,EACb,aAAa,GACb,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,qCAAqC,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAC;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAC;AACxE,OAAO,EAAE,oBAAoB,EAAE,MAAM,sDAAsD,CAAC;AAC5F,OAAO,EAAE,6BAA6B,EAAE,MAAM,sDAAsD,CAAC;AAErG,OAAO,EAAE,WAAW,EAAE,MAAM,4CAA4C,CAAC;AACzE,OAAO,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AACnE,OAAO,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAC;AAEvD,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AAGrE,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAElD,OAAO,EAAE,4BAA4B,EAAE,MAAM,4BAA4B,CAAC;AAC1E,OAAO,EACN,kBAAkB,EAClB,iBAAiB,EACjB,sBAAsB,EACtB,qBAAqB,EACrB,sBAAsB,EACtB,uBAAuB,EACvB,iBAAiB,GACjB,MAAM,4BAA4B,CAAC;AA0BpC,SAAS,kBAAkB,CAAC,IAAiB;IAC5C,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAClB,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;QAClC,GAAG,EAAE,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;KACjC,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,sBAAsB,CAAC,IAAqB;IACpD,OAAO,CAAC,KAAK,EAAE,EAAE;QAChB,MAAM,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACpC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;IAC/B,CAAC,CAAC;AACH,CAAC;AAED,MAAM,WAAW,GAA4B,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,CACvD,GAAG,CAAC,CAAC,KAAK,4BAA4B,CAAC,CAAC,CAAC,UAAU,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC;AAE1E;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAgC;IAClE,OAAO,IAAI,oBAAoB,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC;AACjD,CAAC;AAED;;;;GAIG;AACH,MAAM,oBAAoB;IAgBzB,YAAY,MAAgC;QAN3B,kBAAa,GAAG,gBAAgB,EAAE,CAAC;QAEnC,eAAU,GAAG,IAAI,KAAK,EAAE,CAAC;QACzB,gBAAW,GAAG,IAAI,KAAK,EAAE,CAAC;QAC1B,qBAAgB,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC;QAGnE,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;QACtB,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QAC1B,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;QAClC,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;QACpC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;QAC9B,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;QACxC,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;QAE1C,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QAC1C,IAAI,CAAC,OAAO,GAAG,IAAI,WAAW,CAAC;YAC9B,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,CAAC,IAAI,CAAC,KAAK,EAAE;YACzD,KAAK,EAAE,IAAI,CAAC,WAAW;SACvB,CAAC,CAAC;IACJ,CAAC;IAED,KAAK;QACJ,MAAM,IAAI,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACvC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;QACjC,MAAM,YAAY,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QAClC,MAAM,OAAO,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;QAChD,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QACrE,MAAM,cAAc,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC;QAC9E,MAAM,cAAc,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAClD,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,cAAc,EAAE,cAAc,CAAC,CAAC;QACxE,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACrC,CAAC;IAEO,eAAe;QACtB,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;QACrB,OAAO;YACN,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC9C,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;YACpC,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC;SACjC,CAAC;IACH,CAAC;IAEO,kBAAkB;QACzB,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC7D,CAAC;IAEO,WAAW,CAAC,QAAsB,EAAE,KAAa;QACxD,MAAM,UAAU,GAAG,IAAI,cAAc,CAAC;YACrC,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE;YACnC,KAAK,EAAE,IAAI,CAAC,WAAW;SACvB,CAAC,CAAC;QACH,MAAM,YAAY,GAAG,IAAI,oBAAoB,CAAC;YAC7C,QAAQ;YACR,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,aAAa,EAAE,IAAI,CAAC,aAAa;SACjC,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC;YAC/B,QAAQ;YACR,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,cAAc,EAAE,UAAU;YAC1B,YAAY;SACZ,CAAC,CAAC;QACH,MAAM,WAAW,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,eAAe,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACjG,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;QAC1E,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC;IAC1D,CAAC;IAEO,gBAAgB,CACvB,QAAsB,EACtB,OAAoB,EACpB,WAAwC;QAExC,OAAO,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,sBAAsB,CAAC,WAAY,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAClG,CAAC;IAED;;;;;OAKG;IACK,qBAAqB,CAAC,IAAkC;QAC/D,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QACjC,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QACnC,MAAM,cAAc,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;QAC9E,MAAM,eAAe,GAAG,CAAC,SAAiB,EAAU,EAAE,CACrD,6BAA6B,CAAC,cAAc,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;QACjF,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACxB,GAAG,CAAC,OAAO,CAAC,kBAAkB,CAAC,eAAe,CAAC,CAAC;QACjD,CAAC;IACF,CAAC;IAEO,iBAAiB;QACxB,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAChE,CAAC;IAEO,WAAW;QAClB,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC1D,CAAC;IAEO,oBAAoB,CAAC,IAAkC;QAC9D,MAAM,MAAM,GAAG,CAAC,KAAa,EAAU,EAAE;YACxC,IAAI,GAAG,GAAG,CAAC,CAAC;YACZ,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;gBACxB,MAAM,CAAC,GAAG,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC;gBACrC,IAAI,CAAC,GAAG,GAAG;oBAAE,GAAG,GAAG,CAAC,CAAC;YACtB,CAAC;YACD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACzB,CAAC,CAAC;QACF,MAAM,OAAO,GAAG,CAAC,KAAa,EAAU,EAAE;YACzC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAC5D,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC;QAChE,CAAC,CAAC;QACF,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;IAC5B,CAAC;IAEO,wBAAwB,CAAC,IAAkC;QAClE,MAAM,GAAG,GAAG,4BAA4B,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAC9F,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE,OAAO,IAAI,IAAI,CAAC,CAAC,CAAE,CAAC,OAAO,CAAC;IAC/C,CAAC;IAEO,WAAW,CAClB,IAAkC,EAClC,YAAsC,EACtC,MAA0B,EAC1B,OAAwB;QAExB,OAAO,IAAI,UAAU,CACpB;YACC,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,MAAM;YACN,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,WAAW,EAAE,IAAI;YACjB,YAAY;YACZ,aAAa,EAAE,OAAO,CAAC,MAAM;YAC7B,oBAAoB,EAAE,OAAO,CAAC,OAAO;SACrC,EACD,EAAE,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,iBAAiB,EAAE,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,EAAE,CACpF,CAAC;IACH,CAAC;IAEO,mBAAmB,CAC1B,MAAkB,EAClB,YAAsC,EACtC,MAA0B;QAE1B,OAAO;YACN,aAAa,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC;YAC/D,aAAa,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAE,CAAC;YACtE,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,EAAE,uBAAuB,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACtG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;SACpF,CAAC;IACH,CAAC;IAEO,mBAAmB;QAC1B,OAAO;YACN,aAAa,CAAC;gBACb,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU;gBAChC,SAAS,EAAE,WAAW;gBACtB,MAAM,EAAE,qBAAqB;aAC7B,CAAC;YACF,aAAa,CAAC;gBACb,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO;gBAC7B,SAAS,EAAE,WAAW;gBACtB,MAAM,EAAE,sBAAsB;aAC9B,CAAC;YACF,aAAa,CAAC;gBACb,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,WAAW;gBACjC,MAAM,EAAE,sBAAsB;aAC9B,CAAC;SACF,CAAC;IACH,CAAC;IAEO,YAAY,CACnB,IAAkC,EAClC,cAAiD,EACjD,cAAiD;QAEjD,OAAO,IAAI,yBAAyB,CAAC;YACpC,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,WAAW,EAAE,IAAI;YACjB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,cAAc;YACd,cAAc;YACd,mBAAmB,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC;SACtC,CAAC,CAAC;IACJ,CAAC;IAEO,MAAM,CAAC,OAAkC,EAAE,MAAkB;QACpE,OAAO;YACN,OAAO;YACP,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;YAC/B,UAAU,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,UAAU,EAAE;SACtC,CAAC;IACH,CAAC;CACD","sourcesContent":["import { Input } from \"@earendil-works/pi-tui\";\nimport { getMarkdownTheme, type Theme } from \"../../../../modes/interactive/theme/theme.ts\";\nimport type { QuestionData } from \"../tool/types.ts\";\nimport {\n\ttype BoundGlobalBinding,\n\ttype BoundPerTabBinding,\n\tglobalBinding,\n\tperTabBinding,\n} from \"../view/component-binding.ts\";\nimport { ChatRowView } from \"../view/components/chat-row-view.ts\";\nimport { MultiSelectView } from \"../view/components/multi-select-view.ts\";\nimport { OptionListView } from \"../view/components/option-list-view.ts\";\nimport { PreviewBlockRenderer } from \"../view/components/preview/preview-block-renderer.ts\";\nimport { crossTabLeftWidthWithDonation } from \"../view/components/preview/preview-layout-decider.ts\";\nimport type { PreviewPaneProps } from \"../view/components/preview/preview-pane.ts\";\nimport { PreviewPane } from \"../view/components/preview/preview-pane.ts\";\nimport { SubmitPicker } from \"../view/components/submit-picker.ts\";\nimport { TabBar } from \"../view/components/tab-bar.ts\";\nimport type { WrappingSelectItem, WrappingSelectTheme } from \"../view/components/wrapping-select.ts\";\nimport { DialogView } from \"../view/dialog-builder.ts\";\nimport { QuestionnairePropsAdapter } from \"../view/props-adapter.ts\";\nimport type { StatefulView } from \"../view/stateful-view.ts\";\nimport type { TabBodyHeights, TabComponents } from \"../view/tab-components.ts\";\nimport { ROW_INTENT_META } from \"./row-intent.ts\";\nimport type { PerTabSelector } from \"./selectors/contract.ts\";\nimport { selectActivePreviewPaneIndex } from \"./selectors/derivations.ts\";\nimport {\n\tselectChatRowProps,\n\tselectDialogProps,\n\tselectMultiSelectProps,\n\tselectOptionListProps,\n\tselectPreviewPaneProps,\n\tselectSubmitPickerProps,\n\tselectTabBarProps,\n} from \"./selectors/projections.ts\";\nimport type { QuestionnaireState } from \"./state.ts\";\n\nexport interface QuestionnaireBuildConfig {\n\ttui: { terminal: { columns: number }; requestRender(): void };\n\ttheme: Theme;\n\tquestions: readonly QuestionData[];\n\titemsByTab: ReadonlyArray<readonly WrappingSelectItem[]>;\n\tisMulti: boolean;\n\tinitialState: QuestionnaireState;\n\tgetCurrentTab: () => number;\n}\n\nexport interface QuestionnaireBuilt {\n\tadapter: QuestionnairePropsAdapter;\n\tnotesInput: Input;\n\tinlineInput: Input;\n\trender: (width: number) => string[];\n\tinvalidate: () => void;\n}\n\ninterface HeightComputers {\n\tglobal: (width: number) => number;\n\tcurrent: (width: number) => number;\n}\n\nfunction previewBodyHeights(pane: PreviewPane): (width: number) => TabBodyHeights {\n\treturn (width) => ({\n\t\tcurrent: pane.naturalHeight(width),\n\t\tmax: pane.maxNaturalHeight(width),\n\t});\n}\n\nfunction multiSelectBodyHeights(view: MultiSelectView): (width: number) => TabBodyHeights {\n\treturn (width) => {\n\t\tconst h = view.naturalHeight(width);\n\t\treturn { current: h, max: h };\n\t};\n}\n\nconst isActiveTab: PerTabSelector<boolean> = (s, ctx) =>\n\tctx.i === selectActivePreviewPaneIndex(s.currentTab, ctx.totalQuestions);\n\n/**\n * Pure factory: assembles every TUI component, the props adapter, and a\n * lifecycle handle. Session-state dependencies arrive via `getCurrentTab` and\n * the `inputBuffer` cell. Initial paint is delegated to\n * `adapter.apply(initialState)` (called by the session at construction-end);\n * no selector is invoked here.\n */\nexport function buildQuestionnaire(config: QuestionnaireBuildConfig): QuestionnaireBuilt {\n\treturn new QuestionnaireBuilder(config).build();\n}\n\n/**\n * Programming-by-intention assembly: each private method names one\n * construction step from `build()`. Read top-down; the class is build-only and\n * discarded once the handle is returned.\n */\nclass QuestionnaireBuilder {\n\tprivate readonly tui: QuestionnaireBuildConfig[\"tui\"];\n\tprivate readonly theme: Theme;\n\tprivate readonly questions: readonly QuestionData[];\n\tprivate readonly itemsByTab: ReadonlyArray<readonly WrappingSelectItem[]>;\n\tprivate readonly isMulti: boolean;\n\tprivate readonly initialState: QuestionnaireState;\n\tprivate readonly getCurrentTab: () => number;\n\n\tprivate readonly selectTheme: WrappingSelectTheme;\n\tprivate readonly markdownTheme = getMarkdownTheme();\n\tprivate readonly chatRow: ChatRowView;\n\tprivate readonly notesInput = new Input();\n\tprivate readonly inlineInput = new Input();\n\tprivate readonly getTerminalWidth = () => this.tui.terminal.columns;\n\n\tconstructor(config: QuestionnaireBuildConfig) {\n\t\tthis.tui = config.tui;\n\t\tthis.theme = config.theme;\n\t\tthis.questions = config.questions;\n\t\tthis.itemsByTab = config.itemsByTab;\n\t\tthis.isMulti = config.isMulti;\n\t\tthis.initialState = config.initialState;\n\t\tthis.getCurrentTab = config.getCurrentTab;\n\n\t\tthis.selectTheme = this.makeSelectTheme();\n\t\tthis.chatRow = new ChatRowView({\n\t\t\titem: { kind: \"chat\", label: ROW_INTENT_META.chat.label },\n\t\t\ttheme: this.selectTheme,\n\t\t});\n\t}\n\n\tbuild(): QuestionnaireBuilt {\n\t\tconst tabs = this.buildTabComponents();\n\t\tthis.injectGlobalLeftWidth(tabs);\n\t\tconst submitPicker = this.buildSubmitPicker();\n\t\tconst tabBar = this.buildTabBar();\n\t\tconst heights = this.buildHeightComputers(tabs);\n\t\tconst dialog = this.buildDialog(tabs, submitPicker, tabBar, heights);\n\t\tconst globalBindings = this.buildGlobalBindings(dialog, submitPicker, tabBar);\n\t\tconst perTabBindings = this.buildPerTabBindings();\n\t\tconst adapter = this.buildAdapter(tabs, globalBindings, perTabBindings);\n\t\treturn this.handle(adapter, dialog);\n\t}\n\n\tprivate makeSelectTheme(): WrappingSelectTheme {\n\t\tconst t = this.theme;\n\t\treturn {\n\t\t\tselectedText: (s) => t.fg(\"accent\", t.bold(s)),\n\t\t\tdescription: (s) => t.fg(\"muted\", s),\n\t\t\tscrollInfo: (s) => t.fg(\"dim\", s),\n\t\t};\n\t}\n\n\tprivate buildTabComponents(): ReadonlyArray<TabComponents> {\n\t\treturn this.questions.map((q, i) => this.buildTabFor(q, i));\n\t}\n\n\tprivate buildTabFor(question: QuestionData, index: number): TabComponents {\n\t\tconst optionList = new OptionListView({\n\t\t\titems: this.itemsByTab[index] ?? [],\n\t\t\ttheme: this.selectTheme,\n\t\t});\n\t\tconst previewBlock = new PreviewBlockRenderer({\n\t\t\tquestion,\n\t\t\ttheme: this.theme,\n\t\t\tmarkdownTheme: this.markdownTheme,\n\t\t});\n\t\tconst preview = new PreviewPane({\n\t\t\tquestion,\n\t\t\tgetTerminalWidth: this.getTerminalWidth,\n\t\t\toptionListView: optionList,\n\t\t\tpreviewBlock,\n\t\t});\n\t\tconst multiSelect = question.multiSelect ? new MultiSelectView(this.theme, question) : undefined;\n\t\tconst bodyHeights = this.buildBodyHeights(question, preview, multiSelect);\n\t\treturn { optionList, preview, multiSelect, bodyHeights };\n\t}\n\n\tprivate buildBodyHeights(\n\t\tquestion: QuestionData,\n\t\tpreview: PreviewPane,\n\t\tmultiSelect: MultiSelectView | undefined,\n\t): (width: number) => TabBodyHeights {\n\t\treturn question.multiSelect ? multiSelectBodyHeights(multiSelect!) : previewBodyHeights(preview);\n\t}\n\n\t/**\n\t * Compute cross-tab max adaptive left width and inject into each PreviewPane.\n\t * Mirrors buildHeightComputers pattern — iterates all tabs, takes max.\n\t * Called after buildTabComponents, before buildDialog (so setGlobalLeftWidth\n\t * is set before any rendering occurs).\n\t */\n\tprivate injectGlobalLeftWidth(tabs: ReadonlyArray<TabComponents>): void {\n\t\tconst questions = this.questions;\n\t\tconst itemsByTab = this.itemsByTab;\n\t\tconst tabsDescriptor = questions.map((q) => ({ multiSelect: q.multiSelect }));\n\t\tconst globalLeftWidth = (paneWidth: number): number =>\n\t\t\tcrossTabLeftWidthWithDonation(tabsDescriptor, itemsByTab, questions, paneWidth);\n\t\tfor (const tab of tabs) {\n\t\t\ttab.preview.setGlobalLeftWidth(globalLeftWidth);\n\t\t}\n\t}\n\n\tprivate buildSubmitPicker(): SubmitPicker | undefined {\n\t\treturn this.isMulti ? new SubmitPicker(this.theme) : undefined;\n\t}\n\n\tprivate buildTabBar(): TabBar | undefined {\n\t\treturn this.isMulti ? new TabBar(this.theme) : undefined;\n\t}\n\n\tprivate buildHeightComputers(tabs: ReadonlyArray<TabComponents>): HeightComputers {\n\t\tconst global = (width: number): number => {\n\t\t\tlet max = 0;\n\t\t\tfor (const tab of tabs) {\n\t\t\t\tconst h = tab.bodyHeights(width).max;\n\t\t\t\tif (h > max) max = h;\n\t\t\t}\n\t\t\treturn Math.max(1, max);\n\t\t};\n\t\tconst current = (width: number): number => {\n\t\t\tconst idx = Math.min(this.getCurrentTab(), tabs.length - 1);\n\t\t\treturn Math.max(0, tabs[idx]?.bodyHeights(width).current ?? 0);\n\t\t};\n\t\treturn { global, current };\n\t}\n\n\tprivate pickInitialActivePreview(tabs: ReadonlyArray<TabComponents>): StatefulView<PreviewPaneProps> {\n\t\tconst idx = selectActivePreviewPaneIndex(this.initialState.currentTab, this.questions.length);\n\t\treturn tabs[idx]?.preview ?? tabs[0]!.preview;\n\t}\n\n\tprivate buildDialog(\n\t\ttabs: ReadonlyArray<TabComponents>,\n\t\tsubmitPicker: SubmitPicker | undefined,\n\t\ttabBar: TabBar | undefined,\n\t\theights: HeightComputers,\n\t): DialogView {\n\t\treturn new DialogView(\n\t\t\t{\n\t\t\t\ttheme: this.theme,\n\t\t\t\tquestions: this.questions,\n\t\t\t\ttabBar,\n\t\t\t\tnotesInput: this.notesInput,\n\t\t\t\tchatRow: this.chatRow,\n\t\t\t\tisMulti: this.isMulti,\n\t\t\t\ttabsByIndex: tabs,\n\t\t\t\tsubmitPicker,\n\t\t\t\tgetBodyHeight: heights.global,\n\t\t\t\tgetCurrentBodyHeight: heights.current,\n\t\t\t},\n\t\t\t{ state: this.initialState, activePreviewPane: this.pickInitialActivePreview(tabs) },\n\t\t);\n\t}\n\n\tprivate buildGlobalBindings(\n\t\tdialog: DialogView,\n\t\tsubmitPicker: SubmitPicker | undefined,\n\t\ttabBar: TabBar | undefined,\n\t): ReadonlyArray<BoundGlobalBinding> {\n\t\treturn [\n\t\t\tglobalBinding({ component: dialog, select: selectDialogProps }),\n\t\t\tglobalBinding({ component: this.chatRow, select: selectChatRowProps }),\n\t\t\t...(submitPicker ? [globalBinding({ component: submitPicker, select: selectSubmitPickerProps })] : []),\n\t\t\t...(tabBar ? [globalBinding({ component: tabBar, select: selectTabBarProps })] : []),\n\t\t];\n\t}\n\n\tprivate buildPerTabBindings(): ReadonlyArray<BoundPerTabBinding> {\n\t\treturn [\n\t\t\tperTabBinding({\n\t\t\t\tresolve: (tab) => tab.optionList,\n\t\t\t\tpredicate: isActiveTab,\n\t\t\t\tselect: selectOptionListProps,\n\t\t\t}),\n\t\t\tperTabBinding({\n\t\t\t\tresolve: (tab) => tab.preview,\n\t\t\t\tpredicate: isActiveTab,\n\t\t\t\tselect: selectPreviewPaneProps,\n\t\t\t}),\n\t\t\tperTabBinding({\n\t\t\t\tresolve: (tab) => tab.multiSelect,\n\t\t\t\tselect: selectMultiSelectProps,\n\t\t\t}),\n\t\t];\n\t}\n\n\tprivate buildAdapter(\n\t\ttabs: ReadonlyArray<TabComponents>,\n\t\tglobalBindings: ReadonlyArray<BoundGlobalBinding>,\n\t\tperTabBindings: ReadonlyArray<BoundPerTabBinding>,\n\t): QuestionnairePropsAdapter {\n\t\treturn new QuestionnairePropsAdapter({\n\t\t\ttui: this.tui,\n\t\t\tquestions: this.questions,\n\t\t\titemsByTab: this.itemsByTab,\n\t\t\ttabsByIndex: tabs,\n\t\t\tinlineInput: this.inlineInput,\n\t\t\tglobalBindings,\n\t\t\tperTabBindings,\n\t\t\textraInvalidatables: [this.notesInput],\n\t\t});\n\t}\n\n\tprivate handle(adapter: QuestionnairePropsAdapter, dialog: DialogView): QuestionnaireBuilt {\n\t\treturn {\n\t\t\tadapter,\n\t\t\tnotesInput: this.notesInput,\n\t\t\tinlineInput: this.inlineInput,\n\t\t\trender: (w) => dialog.render(w),\n\t\t\tinvalidate: () => adapter.invalidate(),\n\t\t};\n\t}\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"questionnaire-session.d.ts","sourceRoot":"","sources":["../../../../../src/core/tools/ask-user-question/state/questionnaire-session.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,8CAA8C,CAAC;AAE1E,OAAO,KAAK,EAAgB,mBAAmB,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAC1F,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAuBhF,MAAM,WAAW,0BAA0B;IAC1C,GAAG,EAAE;QAAE,QAAQ,EAAE;YAAE,OAAO,EAAE,MAAM,CAAA;SAAE,CAAC;QAAC,aAAa,IAAI,IAAI,CAAA;KAAE,CAAC;IAC9D,KAAK,EAAE,KAAK,CAAC;IACb,MAAM,EAAE,cAAc,CAAC;IACvB,UAAU,EAAE,kBAAkB,EAAE,EAAE,CAAC;IACnC,IAAI,EAAE,CAAC,MAAM,EAAE,mBAAmB,KAAK,IAAI,CAAC;CAC5C;AAED,MAAM,WAAW,6BAA6B;IAC7C,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAChC,UAAU,IAAI,IAAI,CAAC;IACnB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAuBD;;;;;GAKG;AACH,qBAAa,oBAAoB;IAChC,OAAO,CAAC,KAAK,CAAsC;IAEnD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA0B;IACpD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;IAClC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAyB;IAEpD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAQ;IACnC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAQ;IACpC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA4B;IAExD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAoC;IACxD,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAqC;IAE1D,QAAQ,CAAC,SAAS,EAAE,6BAA6B,CAAC;IAElD,YAAY,MAAM,EAAE,0BAA0B,EA8B7C;IAED,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAO3B;IAED,OAAO,CAAC,MAAM;IASd,OAAO,CAAC,gBAAgB;IAKxB,OAAO,CAAC,sBAAsB;IAW9B,OAAO,CAAC,SAAS;IAqBjB;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,kBAAkB;IAO1B,OAAO,CAAC,OAAO;IAWf,OAAO,CAAC,YAAY;IAOpB,OAAO,CAAC,WAAW;CAMnB"}
1
+ {"version":3,"file":"questionnaire-session.d.ts","sourceRoot":"","sources":["../../../../../src/core/tools/ask-user-question/state/questionnaire-session.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,8CAA8C,CAAC;AAC1E,OAAO,KAAK,EAAgB,mBAAmB,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAC1F,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAqBhF,MAAM,WAAW,0BAA0B;IAC1C,GAAG,EAAE;QAAE,QAAQ,EAAE;YAAE,OAAO,EAAE,MAAM,CAAA;SAAE,CAAC;QAAC,aAAa,IAAI,IAAI,CAAA;KAAE,CAAC;IAC9D,KAAK,EAAE,KAAK,CAAC;IACb,MAAM,EAAE,cAAc,CAAC;IACvB,UAAU,EAAE,kBAAkB,EAAE,EAAE,CAAC;IACnC,IAAI,EAAE,CAAC,MAAM,EAAE,mBAAmB,KAAK,IAAI,CAAC;CAC5C;AAED,MAAM,WAAW,6BAA6B;IAC7C,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAChC,UAAU,IAAI,IAAI,CAAC;IACnB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAuBD;;;;;GAKG;AACH,qBAAa,oBAAoB;IAChC,OAAO,CAAC,KAAK,CAAsC;IAEnD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA0B;IACpD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;IAClC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAyB;IAEpD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAQ;IACnC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAQ;IACpC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA4B;IAExD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAoC;IACxD,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAqC;IAE1D,QAAQ,CAAC,SAAS,EAAE,6BAA6B,CAAC;IAElD,YAAY,MAAM,EAAE,0BAA0B,EA8B7C;IAED,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAO3B;IAED,OAAO,CAAC,MAAM;IASd,OAAO,CAAC,gBAAgB;IAKxB,OAAO,CAAC,sBAAsB;IAW9B,OAAO,CAAC,SAAS;IAqBjB;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,kBAAkB;IAO1B,OAAO,CAAC,OAAO;IAWf,OAAO,CAAC,YAAY;IAOpB,OAAO,CAAC,WAAW;CAMnB"}
@@ -1,16 +1,14 @@
1
1
  import { getKeybindings } from "@earendil-works/pi-tui";
2
2
  import { buildQuestionnaire } from "./build-questionnaire.js";
3
3
  import { readInlineCaret, readInlineDraft, withInlineDraft } from "./inline-input.js";
4
- import { ROW_INTENT_META } from "./row-intent.js";
5
4
  import { routeKey } from "./key-router.js";
5
+ import { ROW_INTENT_META } from "./row-intent.js";
6
6
  import { computeFocusedOptionHasPreview } from "./selectors/derivations.js";
7
7
  import { reduce } from "./state-reducer.js";
8
8
  function readInputCursor(input) {
9
9
  const value = input.getValue();
10
10
  const raw = Reflect.get(input, "cursor");
11
- return typeof raw === "number" && Number.isFinite(raw)
12
- ? Math.max(0, Math.min(raw, value.length))
13
- : value.length;
11
+ return typeof raw === "number" && Number.isFinite(raw) ? Math.max(0, Math.min(raw, value.length)) : value.length;
14
12
  }
15
13
  function writeInputCursor(input, cursor) {
16
14
  const value = input.getValue();
@@ -1 +1 @@
1
- {"version":3,"file":"questionnaire-session.js","sourceRoot":"","sources":["../../../../../src/core/tools/ask-user-question/state/questionnaire-session.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Theme } from \"../../../../modes/interactive/theme/theme.ts\";\nimport { getKeybindings, type Input } from \"@earendil-works/pi-tui\";\nimport type { QuestionData, QuestionnaireResult, QuestionParams } from \"../tool/types.ts\";\nimport type { WrappingSelectItem } from \"../view/components/wrapping-select.ts\";\nimport type { QuestionnairePropsAdapter } from \"../view/props-adapter.ts\";\nimport { buildQuestionnaire } from \"./build-questionnaire.ts\";\nimport { readInlineCaret, readInlineDraft, withInlineDraft } from \"./inline-input.ts\";\nimport { ROW_INTENT_META } from \"./row-intent.ts\";\nimport { type QuestionnaireAction, routeKey } from \"./key-router.ts\";\nimport { computeFocusedOptionHasPreview } from \"./selectors/derivations.ts\";\nimport type { QuestionnaireRuntime, QuestionnaireState } from \"./state.ts\";\nimport { type ApplyContext, type Effect, reduce } from \"./state-reducer.ts\";\n\nfunction readInputCursor(input: Input): number {\n\tconst value = input.getValue();\n\tconst raw = Reflect.get(input, \"cursor\");\n\treturn typeof raw === \"number\" && Number.isFinite(raw)\n\t\t? Math.max(0, Math.min(raw, value.length))\n\t\t: value.length;\n}\n\nfunction writeInputCursor(input: Input, cursor: number): void {\n\tconst value = input.getValue();\n\tReflect.set(input, \"cursor\", Math.max(0, Math.min(cursor, value.length)));\n}\n\nexport interface QuestionnaireSessionConfig {\n\ttui: { terminal: { columns: number }; requestRender(): void };\n\ttheme: Theme;\n\tparams: QuestionParams;\n\titemsByTab: WrappingSelectItem[][];\n\tdone: (result: QuestionnaireResult) => void;\n}\n\nexport interface QuestionnaireSessionComponent {\n\trender(width: number): string[];\n\tinvalidate(): void;\n\thandleInput(data: string): void;\n}\n\nfunction initialState(): QuestionnaireState {\n\treturn {\n\t\tcurrentTab: 0,\n\t\toptionIndex: 0,\n\t\tinputMode: false,\n\t\tinlineInputOwner: null,\n\t\tnotesVisible: false,\n\t\tchatFocused: false,\n\t\tanswers: new Map(),\n\t\tmultiSelectChecked: new Set(),\n\t\tnotesByTab: new Map(),\n\t\tfocusedOptionHasPreview: false,\n\t\tsubmitChoiceIndex: 0,\n\t\tnotesDraft: \"\",\n\t\tcustomDraftByTab: new Map(),\n\t\tcustomCaretByTab: new Map(),\n\t\tchatDraftByTab: new Map(),\n\t\tchatCaretByTab: new Map(),\n\t};\n}\n\n/**\n * Slim runtime: owns the canonical state cell, the input-buffer cell, the\n * two-pass `notesVisible` dispatch loop, and the effect runner. State\n * transitions go through the pure `reduce` reducer; UI fan-out goes through\n * the `QuestionnairePropsAdapter` produced by `buildQuestionnaire`.\n */\nexport class QuestionnaireSession {\n\tprivate state: QuestionnaireState = initialState();\n\n\tprivate readonly questions: readonly QuestionData[];\n\tprivate readonly isMulti: boolean;\n\tprivate readonly itemsByTab: WrappingSelectItem[][];\n\n\tprivate readonly notesInput: Input;\n\tprivate readonly inlineInput: Input;\n\tprivate readonly viewAdapter: QuestionnairePropsAdapter;\n\n\tprivate readonly tui: QuestionnaireSessionConfig[\"tui\"];\n\tprivate readonly done: QuestionnaireSessionConfig[\"done\"];\n\n\treadonly component: QuestionnaireSessionComponent;\n\n\tconstructor(config: QuestionnaireSessionConfig) {\n\t\tthis.tui = config.tui;\n\t\tthis.done = config.done;\n\t\tthis.questions = config.params.questions;\n\t\tthis.isMulti = this.questions.length > 1;\n\t\tthis.itemsByTab = config.itemsByTab;\n\t\t// Seed from the focused option at start; the reducer keeps it in sync via withFocusedOptionHasPreview.\n\t\tthis.state = { ...this.state, focusedOptionHasPreview: computeFocusedOptionHasPreview(this.questions, 0, 0) };\n\n\t\tconst built = buildQuestionnaire({\n\t\t\ttui: this.tui,\n\t\t\ttheme: config.theme,\n\t\t\tquestions: this.questions,\n\t\t\titemsByTab: this.itemsByTab,\n\t\t\tisMulti: this.isMulti,\n\t\t\tinitialState: this.state,\n\t\t\tgetCurrentTab: () => this.state.currentTab,\n\t\t});\n\n\t\tthis.notesInput = built.notesInput;\n\t\tthis.inlineInput = built.inlineInput;\n\t\tthis.viewAdapter = built.adapter;\n\n\t\tthis.component = {\n\t\t\trender: built.render,\n\t\t\tinvalidate: built.invalidate,\n\t\t\thandleInput: (data) => this.dispatch(data),\n\t\t};\n\n\t\tthis.viewAdapter.apply(this.state);\n\t}\n\n\tdispatch(data: string): void {\n\t\tconst action = routeKey(data, this.state, this.runtime());\n\t\tif (action.kind === \"ignore\") {\n\t\t\tthis.handleIgnoreInline(data);\n\t\t\treturn;\n\t\t}\n\t\tthis.commit(action);\n\t}\n\n\tprivate commit(action: QuestionnaireAction): void {\n\t\tthis.state = this.mirrorInlineInputDraft(this.state);\n\t\tconst result = reduce(this.state, action, this.applyContext());\n\t\tthis.state = result.state;\n\t\tfor (const effect of result.effects) this.runEffect(effect);\n\t\tthis.state = this.mirrorNotesDraft(this.state);\n\t\tthis.viewAdapter.apply(this.state);\n\t}\n\n\tprivate mirrorNotesDraft(s: QuestionnaireState): QuestionnaireState {\n\t\tconst draft = this.notesInput.getValue();\n\t\treturn s.notesDraft === draft ? s : { ...s, notesDraft: draft };\n\t}\n\n\tprivate mirrorInlineInputDraft(s: QuestionnaireState): QuestionnaireState {\n\t\tif (!s.inputMode || !s.inlineInputOwner) return s;\n\t\tconst owner = s.inlineInputOwner;\n\t\tconst value = this.inlineInput.getValue();\n\t\tconst caret = readInputCursor(this.inlineInput);\n\t\tif (readInlineDraft(s, owner) === value && readInlineCaret(s, owner) === caret) {\n\t\t\treturn s;\n\t\t}\n\t\treturn withInlineDraft(s, owner, value, caret);\n\t}\n\n\tprivate runEffect(effect: Effect): void {\n\t\tswitch (effect.kind) {\n\t\t\tcase \"set_input_buffer\":\n\t\t\t\tthis.inlineInput.setValue(effect.value);\n\t\t\t\twriteInputCursor(this.inlineInput, effect.caret);\n\t\t\t\treturn;\n\t\t\tcase \"set_notes_value\":\n\t\t\t\tthis.notesInput.setValue(effect.value);\n\t\t\t\treturn;\n\t\t\tcase \"set_notes_focused\":\n\t\t\t\tthis.notesInput.focused = effect.focused;\n\t\t\t\treturn;\n\t\t\tcase \"forward_notes_keystroke\":\n\t\t\t\tthis.notesInput.handleInput(effect.data);\n\t\t\t\treturn;\n\t\t\tcase \"done\":\n\t\t\t\tthis.done(effect.result);\n\t\t\t\treturn;\n\t\t}\n\t}\n\n\t/**\n\t * Per-keystroke `ignore` fast path: delegates to the headless `inlineInput`\n\t * Input so bracketed-paste accumulator (`input.js:33-63`) and Kitty CSI-u\n\t * decode (`input.js:155-163`) take effect. Cursor is NOT force-reset here —\n\t * doing so would corrupt split-chunk pastes (a `\\x05` byte mid-paste lands\n\t * verbatim in `pasteBuffer` and survives `handlePaste`'s narrow strip).\n\t * Cursor advances naturally via `insertCharacter` on typing/paste; cursor-\n\t * movement keys (Left/Right/Home/End/word-jumps) are now functional, and\n\t * the live buffer/caret are mirrored into canonical state so rendering can\n\t * draw the same thick cursor at the editing caret. `viewAdapter.apply` is\n\t * called directly without a reducer round-trip — preserves the D3 fast-path\n\t * latency profile from Phase 11.\n\t */\n\tprivate handleIgnoreInline(data: string): void {\n\t\tif (!this.state.inputMode || !this.state.inlineInputOwner) return;\n\t\tthis.inlineInput.handleInput(data);\n\t\tthis.state = this.mirrorInlineInputDraft(this.state);\n\t\tthis.viewAdapter.apply(this.state);\n\t}\n\n\tprivate runtime(): QuestionnaireRuntime {\n\t\treturn {\n\t\t\tkeybindings: getKeybindings(),\n\t\t\tinputBuffer: this.inlineInput.getValue(),\n\t\t\tquestions: this.questions,\n\t\t\tisMulti: this.isMulti,\n\t\t\tcurrentItem: this.currentItem(),\n\t\t\titems: this.itemsByTab[this.state.currentTab] ?? [],\n\t\t};\n\t}\n\n\tprivate applyContext(): ApplyContext {\n\t\treturn {\n\t\t\tquestions: this.questions,\n\t\t\titemsByTab: this.itemsByTab,\n\t\t};\n\t}\n\n\tprivate currentItem(): WrappingSelectItem | undefined {\n\t\tif (this.state.chatFocused) return { kind: \"chat\", label: ROW_INTENT_META.chat.label };\n\t\tconst arr = this.itemsByTab[this.state.currentTab] ?? [];\n\t\tif (this.state.optionIndex < arr.length) return arr[this.state.optionIndex];\n\t\treturn { kind: \"chat\", label: ROW_INTENT_META.chat.label };\n\t}\n}\n"]}
1
+ {"version":3,"file":"questionnaire-session.js","sourceRoot":"","sources":["../../../../../src/core/tools/ask-user-question/state/questionnaire-session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAc,MAAM,wBAAwB,CAAC;AAKpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACtF,OAAO,EAA4B,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,8BAA8B,EAAE,MAAM,4BAA4B,CAAC;AAE5E,OAAO,EAAkC,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5E,SAAS,eAAe,CAAC,KAAY;IACpC,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;IAC/B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IACzC,OAAO,OAAO,GAAG,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;AAClH,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAY,EAAE,MAAc;IACrD,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;IAC/B,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AAC3E,CAAC;AAgBD,SAAS,YAAY;IACpB,OAAO;QACN,UAAU,EAAE,CAAC;QACb,WAAW,EAAE,CAAC;QACd,SAAS,EAAE,KAAK;QAChB,gBAAgB,EAAE,IAAI;QACtB,YAAY,EAAE,KAAK;QACnB,WAAW,EAAE,KAAK;QAClB,OAAO,EAAE,IAAI,GAAG,EAAE;QAClB,kBAAkB,EAAE,IAAI,GAAG,EAAE;QAC7B,UAAU,EAAE,IAAI,GAAG,EAAE;QACrB,uBAAuB,EAAE,KAAK;QAC9B,iBAAiB,EAAE,CAAC;QACpB,UAAU,EAAE,EAAE;QACd,gBAAgB,EAAE,IAAI,GAAG,EAAE;QAC3B,gBAAgB,EAAE,IAAI,GAAG,EAAE;QAC3B,cAAc,EAAE,IAAI,GAAG,EAAE;QACzB,cAAc,EAAE,IAAI,GAAG,EAAE;KACzB,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,OAAO,oBAAoB;IAgBhC,YAAY,MAAkC;QAftC,UAAK,GAAuB,YAAY,EAAE,CAAC;QAgBlD,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;QACtB,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;QACxB,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC;QACzC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;QACzC,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;QACpC,uGAAuG;QACvG,IAAI,CAAC,KAAK,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,uBAAuB,EAAE,8BAA8B,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;QAE9G,MAAM,KAAK,GAAG,kBAAkB,CAAC;YAChC,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,YAAY,EAAE,IAAI,CAAC,KAAK;YACxB,aAAa,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU;SAC1C,CAAC,CAAC;QAEH,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC;QACnC,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC;QACrC,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC;QAEjC,IAAI,CAAC,SAAS,GAAG;YAChB,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,WAAW,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;SAC1C,CAAC;QAEF,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;IAED,QAAQ,CAAC,IAAY;QACpB,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QAC1D,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC9B,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;YAC9B,OAAO;QACR,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACrB,CAAC;IAEO,MAAM,CAAC,MAA2B;QACzC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrD,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;QAC/D,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QAC1B,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,OAAO;YAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAC5D,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC/C,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;IAEO,gBAAgB,CAAC,CAAqB;QAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;QACzC,OAAO,CAAC,CAAC,UAAU,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;IACjE,CAAC;IAEO,sBAAsB,CAAC,CAAqB;QACnD,IAAI,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC,gBAAgB;YAAE,OAAO,CAAC,CAAC;QAClD,MAAM,KAAK,GAAG,CAAC,CAAC,gBAAgB,CAAC;QACjC,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;QAC1C,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAChD,IAAI,eAAe,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,KAAK,IAAI,eAAe,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,KAAK,EAAE,CAAC;YAChF,OAAO,CAAC,CAAC;QACV,CAAC;QACD,OAAO,eAAe,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IAChD,CAAC;IAEO,SAAS,CAAC,MAAc;QAC/B,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;YACrB,KAAK,kBAAkB;gBACtB,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBACxC,gBAAgB,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;gBACjD,OAAO;YACR,KAAK,iBAAiB;gBACrB,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBACvC,OAAO;YACR,KAAK,mBAAmB;gBACvB,IAAI,CAAC,UAAU,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;gBACzC,OAAO;YACR,KAAK,yBAAyB;gBAC7B,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBACzC,OAAO;YACR,KAAK,MAAM;gBACV,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBACzB,OAAO;QACT,CAAC;IACF,CAAC;IAED;;;;;;;;;;;;OAYG;IACK,kBAAkB,CAAC,IAAY;QACtC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB;YAAE,OAAO;QAClE,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrD,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;IAEO,OAAO;QACd,OAAO;YACN,WAAW,EAAE,cAAc,EAAE;YAC7B,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE;YACxC,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE;YAC/B,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE;SACnD,CAAC;IACH,CAAC;IAEO,YAAY;QACnB,OAAO;YACN,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,UAAU,EAAE,IAAI,CAAC,UAAU;SAC3B,CAAC;IACH,CAAC;IAEO,WAAW;QAClB,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW;YAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QACvF,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;QACzD,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,GAAG,CAAC,MAAM;YAAE,OAAO,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAC5E,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;IAC5D,CAAC;CACD","sourcesContent":["import { getKeybindings, type Input } from \"@earendil-works/pi-tui\";\nimport type { Theme } from \"../../../../modes/interactive/theme/theme.ts\";\nimport type { QuestionData, QuestionnaireResult, QuestionParams } from \"../tool/types.ts\";\nimport type { WrappingSelectItem } from \"../view/components/wrapping-select.ts\";\nimport type { QuestionnairePropsAdapter } from \"../view/props-adapter.ts\";\nimport { buildQuestionnaire } from \"./build-questionnaire.ts\";\nimport { readInlineCaret, readInlineDraft, withInlineDraft } from \"./inline-input.ts\";\nimport { type QuestionnaireAction, routeKey } from \"./key-router.ts\";\nimport { ROW_INTENT_META } from \"./row-intent.ts\";\nimport { computeFocusedOptionHasPreview } from \"./selectors/derivations.ts\";\nimport type { QuestionnaireRuntime, QuestionnaireState } from \"./state.ts\";\nimport { type ApplyContext, type Effect, reduce } from \"./state-reducer.ts\";\n\nfunction readInputCursor(input: Input): number {\n\tconst value = input.getValue();\n\tconst raw = Reflect.get(input, \"cursor\");\n\treturn typeof raw === \"number\" && Number.isFinite(raw) ? Math.max(0, Math.min(raw, value.length)) : value.length;\n}\n\nfunction writeInputCursor(input: Input, cursor: number): void {\n\tconst value = input.getValue();\n\tReflect.set(input, \"cursor\", Math.max(0, Math.min(cursor, value.length)));\n}\n\nexport interface QuestionnaireSessionConfig {\n\ttui: { terminal: { columns: number }; requestRender(): void };\n\ttheme: Theme;\n\tparams: QuestionParams;\n\titemsByTab: WrappingSelectItem[][];\n\tdone: (result: QuestionnaireResult) => void;\n}\n\nexport interface QuestionnaireSessionComponent {\n\trender(width: number): string[];\n\tinvalidate(): void;\n\thandleInput(data: string): void;\n}\n\nfunction initialState(): QuestionnaireState {\n\treturn {\n\t\tcurrentTab: 0,\n\t\toptionIndex: 0,\n\t\tinputMode: false,\n\t\tinlineInputOwner: null,\n\t\tnotesVisible: false,\n\t\tchatFocused: false,\n\t\tanswers: new Map(),\n\t\tmultiSelectChecked: new Set(),\n\t\tnotesByTab: new Map(),\n\t\tfocusedOptionHasPreview: false,\n\t\tsubmitChoiceIndex: 0,\n\t\tnotesDraft: \"\",\n\t\tcustomDraftByTab: new Map(),\n\t\tcustomCaretByTab: new Map(),\n\t\tchatDraftByTab: new Map(),\n\t\tchatCaretByTab: new Map(),\n\t};\n}\n\n/**\n * Slim runtime: owns the canonical state cell, the input-buffer cell, the\n * two-pass `notesVisible` dispatch loop, and the effect runner. State\n * transitions go through the pure `reduce` reducer; UI fan-out goes through\n * the `QuestionnairePropsAdapter` produced by `buildQuestionnaire`.\n */\nexport class QuestionnaireSession {\n\tprivate state: QuestionnaireState = initialState();\n\n\tprivate readonly questions: readonly QuestionData[];\n\tprivate readonly isMulti: boolean;\n\tprivate readonly itemsByTab: WrappingSelectItem[][];\n\n\tprivate readonly notesInput: Input;\n\tprivate readonly inlineInput: Input;\n\tprivate readonly viewAdapter: QuestionnairePropsAdapter;\n\n\tprivate readonly tui: QuestionnaireSessionConfig[\"tui\"];\n\tprivate readonly done: QuestionnaireSessionConfig[\"done\"];\n\n\treadonly component: QuestionnaireSessionComponent;\n\n\tconstructor(config: QuestionnaireSessionConfig) {\n\t\tthis.tui = config.tui;\n\t\tthis.done = config.done;\n\t\tthis.questions = config.params.questions;\n\t\tthis.isMulti = this.questions.length > 1;\n\t\tthis.itemsByTab = config.itemsByTab;\n\t\t// Seed from the focused option at start; the reducer keeps it in sync via withFocusedOptionHasPreview.\n\t\tthis.state = { ...this.state, focusedOptionHasPreview: computeFocusedOptionHasPreview(this.questions, 0, 0) };\n\n\t\tconst built = buildQuestionnaire({\n\t\t\ttui: this.tui,\n\t\t\ttheme: config.theme,\n\t\t\tquestions: this.questions,\n\t\t\titemsByTab: this.itemsByTab,\n\t\t\tisMulti: this.isMulti,\n\t\t\tinitialState: this.state,\n\t\t\tgetCurrentTab: () => this.state.currentTab,\n\t\t});\n\n\t\tthis.notesInput = built.notesInput;\n\t\tthis.inlineInput = built.inlineInput;\n\t\tthis.viewAdapter = built.adapter;\n\n\t\tthis.component = {\n\t\t\trender: built.render,\n\t\t\tinvalidate: built.invalidate,\n\t\t\thandleInput: (data) => this.dispatch(data),\n\t\t};\n\n\t\tthis.viewAdapter.apply(this.state);\n\t}\n\n\tdispatch(data: string): void {\n\t\tconst action = routeKey(data, this.state, this.runtime());\n\t\tif (action.kind === \"ignore\") {\n\t\t\tthis.handleIgnoreInline(data);\n\t\t\treturn;\n\t\t}\n\t\tthis.commit(action);\n\t}\n\n\tprivate commit(action: QuestionnaireAction): void {\n\t\tthis.state = this.mirrorInlineInputDraft(this.state);\n\t\tconst result = reduce(this.state, action, this.applyContext());\n\t\tthis.state = result.state;\n\t\tfor (const effect of result.effects) this.runEffect(effect);\n\t\tthis.state = this.mirrorNotesDraft(this.state);\n\t\tthis.viewAdapter.apply(this.state);\n\t}\n\n\tprivate mirrorNotesDraft(s: QuestionnaireState): QuestionnaireState {\n\t\tconst draft = this.notesInput.getValue();\n\t\treturn s.notesDraft === draft ? s : { ...s, notesDraft: draft };\n\t}\n\n\tprivate mirrorInlineInputDraft(s: QuestionnaireState): QuestionnaireState {\n\t\tif (!s.inputMode || !s.inlineInputOwner) return s;\n\t\tconst owner = s.inlineInputOwner;\n\t\tconst value = this.inlineInput.getValue();\n\t\tconst caret = readInputCursor(this.inlineInput);\n\t\tif (readInlineDraft(s, owner) === value && readInlineCaret(s, owner) === caret) {\n\t\t\treturn s;\n\t\t}\n\t\treturn withInlineDraft(s, owner, value, caret);\n\t}\n\n\tprivate runEffect(effect: Effect): void {\n\t\tswitch (effect.kind) {\n\t\t\tcase \"set_input_buffer\":\n\t\t\t\tthis.inlineInput.setValue(effect.value);\n\t\t\t\twriteInputCursor(this.inlineInput, effect.caret);\n\t\t\t\treturn;\n\t\t\tcase \"set_notes_value\":\n\t\t\t\tthis.notesInput.setValue(effect.value);\n\t\t\t\treturn;\n\t\t\tcase \"set_notes_focused\":\n\t\t\t\tthis.notesInput.focused = effect.focused;\n\t\t\t\treturn;\n\t\t\tcase \"forward_notes_keystroke\":\n\t\t\t\tthis.notesInput.handleInput(effect.data);\n\t\t\t\treturn;\n\t\t\tcase \"done\":\n\t\t\t\tthis.done(effect.result);\n\t\t\t\treturn;\n\t\t}\n\t}\n\n\t/**\n\t * Per-keystroke `ignore` fast path: delegates to the headless `inlineInput`\n\t * Input so bracketed-paste accumulator (`input.js:33-63`) and Kitty CSI-u\n\t * decode (`input.js:155-163`) take effect. Cursor is NOT force-reset here —\n\t * doing so would corrupt split-chunk pastes (a `\\x05` byte mid-paste lands\n\t * verbatim in `pasteBuffer` and survives `handlePaste`'s narrow strip).\n\t * Cursor advances naturally via `insertCharacter` on typing/paste; cursor-\n\t * movement keys (Left/Right/Home/End/word-jumps) are now functional, and\n\t * the live buffer/caret are mirrored into canonical state so rendering can\n\t * draw the same thick cursor at the editing caret. `viewAdapter.apply` is\n\t * called directly without a reducer round-trip — preserves the D3 fast-path\n\t * latency profile from Phase 11.\n\t */\n\tprivate handleIgnoreInline(data: string): void {\n\t\tif (!this.state.inputMode || !this.state.inlineInputOwner) return;\n\t\tthis.inlineInput.handleInput(data);\n\t\tthis.state = this.mirrorInlineInputDraft(this.state);\n\t\tthis.viewAdapter.apply(this.state);\n\t}\n\n\tprivate runtime(): QuestionnaireRuntime {\n\t\treturn {\n\t\t\tkeybindings: getKeybindings(),\n\t\t\tinputBuffer: this.inlineInput.getValue(),\n\t\t\tquestions: this.questions,\n\t\t\tisMulti: this.isMulti,\n\t\t\tcurrentItem: this.currentItem(),\n\t\t\titems: this.itemsByTab[this.state.currentTab] ?? [],\n\t\t};\n\t}\n\n\tprivate applyContext(): ApplyContext {\n\t\treturn {\n\t\t\tquestions: this.questions,\n\t\t\titemsByTab: this.itemsByTab,\n\t\t};\n\t}\n\n\tprivate currentItem(): WrappingSelectItem | undefined {\n\t\tif (this.state.chatFocused) return { kind: \"chat\", label: ROW_INTENT_META.chat.label };\n\t\tconst arr = this.itemsByTab[this.state.currentTab] ?? [];\n\t\tif (this.state.optionIndex < arr.length) return arr[this.state.optionIndex];\n\t\treturn { kind: \"chat\", label: ROW_INTENT_META.chat.label };\n\t}\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"state-reducer.d.ts","sourceRoot":"","sources":["../../../../../src/core/tools/ask-user-question/state/state-reducer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAkB,YAAY,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC1F,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAChF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAI3D,OAAO,KAAK,EAAoB,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAEvE,uGAAuG;AACvG,MAAM,WAAW,YAAY;IAC5B,SAAS,EAAE,SAAS,YAAY,EAAE,CAAC;IACnC,UAAU,EAAE,aAAa,CAAC,SAAS,kBAAkB,EAAE,CAAC,CAAC;CACzD;AAED;;;;;GAKG;AACH,MAAM,MAAM,MAAM,GACf;IAAE,IAAI,EAAE,kBAAkB,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC1D;IAAE,IAAI,EAAE,iBAAiB,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC1C;IAAE,IAAI,EAAE,mBAAmB,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,GAC/C;IAAE,IAAI,EAAE,yBAAyB,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACjD;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,mBAAmB,CAAA;CAAE,CAAC;AAEjD,MAAM,WAAW,WAAW;IAC3B,KAAK,EAAE,kBAAkB,CAAC;IAC1B,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;CAC3B;AA4RD;;;;GAIG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,kBAAkB,EAAE,MAAM,EAAE,mBAAmB,EAAE,GAAG,EAAE,YAAY,GAAG,WAAW,CAG7G"}
1
+ {"version":3,"file":"state-reducer.d.ts","sourceRoot":"","sources":["../../../../../src/core/tools/ask-user-question/state/state-reducer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAkB,YAAY,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC1F,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAEhF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAG3D,OAAO,KAAK,EAAoB,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAEvE,uGAAuG;AACvG,MAAM,WAAW,YAAY;IAC5B,SAAS,EAAE,SAAS,YAAY,EAAE,CAAC;IACnC,UAAU,EAAE,aAAa,CAAC,SAAS,kBAAkB,EAAE,CAAC,CAAC;CACzD;AAED;;;;;GAKG;AACH,MAAM,MAAM,MAAM,GACf;IAAE,IAAI,EAAE,kBAAkB,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC1D;IAAE,IAAI,EAAE,iBAAiB,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC1C;IAAE,IAAI,EAAE,mBAAmB,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,GAC/C;IAAE,IAAI,EAAE,yBAAyB,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACjD;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,mBAAmB,CAAA;CAAE,CAAC;AAEjD,MAAM,WAAW,WAAW;IAC3B,KAAK,EAAE,kBAAkB,CAAC;IAC1B,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;CAC3B;AA4RD;;;;GAIG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,kBAAkB,EAAE,MAAM,EAAE,mBAAmB,EAAE,GAAG,EAAE,YAAY,GAAG,WAAW,CAG7G"}
@@ -1 +1 @@
1
- {"version":3,"file":"state-reducer.js","sourceRoot":"","sources":["../../../../../src/core/tools/ask-user-question/state/state-reducer.ts"],"names":[],"mappings":"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","sourcesContent":["import type { QuestionAnswer, QuestionData, QuestionnaireResult } from \"../tool/types.ts\";\nimport type { WrappingSelectItem } from \"../view/components/wrapping-select.ts\";\nimport type { QuestionnaireAction } from \"./key-router.ts\";\nimport { readInlineCaret, resolveInlineDraftValue, withInlineDraft } from \"./inline-input.ts\";\nimport { ROW_INTENT_META } from \"./row-intent.ts\";\nimport { computeFocusedOptionHasPreview } from \"./selectors/derivations.ts\";\nimport type { InlineInputOwner, QuestionnaireState } from \"./state.ts\";\n\n/** Session-lifetime constants. No live-component reads — peripheral values live on canonical state. */\nexport interface ApplyContext {\n\tquestions: readonly QuestionData[];\n\titemsByTab: ReadonlyArray<readonly WrappingSelectItem[]>;\n}\n\n/**\n * Declarative side-effects emitted by `reduce`. The runtime executes them after\n * committing the new state, then asks the props-adapter to re-project. Closed set —\n * adding an effect requires updating both the union AND the runtime's `runEffect` switch\n * (compiler-enforced exhaustive). No string-keyed escape hatch.\n */\nexport type Effect =\n\t| { kind: \"set_input_buffer\"; value: string; caret: number }\n\t| { kind: \"set_notes_value\"; value: string }\n\t| { kind: \"set_notes_focused\"; focused: boolean }\n\t| { kind: \"forward_notes_keystroke\"; data: string }\n\t| { kind: \"done\"; result: QuestionnaireResult };\n\nexport interface ApplyResult {\n\tstate: QuestionnaireState;\n\teffects: readonly Effect[];\n}\n\nfunction orderedAnswers(state: QuestionnaireState, questions: readonly QuestionData[]): QuestionAnswer[] {\n\tconst out: QuestionAnswer[] = [];\n\tfor (let i = 0; i < questions.length; i++) {\n\t\tconst a = state.answers.get(i);\n\t\tif (a) out.push(a);\n\t}\n\treturn out;\n}\n\nfunction withFocusedOptionHasPreview(\n\tstate: QuestionnaireState,\n\tquestions: readonly QuestionData[],\n): QuestionnaireState {\n\tconst focusedOptionHasPreview = computeFocusedOptionHasPreview(questions, state.currentTab, state.optionIndex);\n\tif (state.focusedOptionHasPreview === focusedOptionHasPreview) return state;\n\treturn { ...state, focusedOptionHasPreview };\n}\n\nfunction syncMultiSelectFromAnswers(\n\tanswers: ReadonlyMap<number, QuestionAnswer>,\n\tquestions: readonly QuestionData[],\n\ttab: number,\n): ReadonlySet<number> {\n\tconst q = questions[tab];\n\tif (!q?.multiSelect) return new Set();\n\tconst saved = answers.get(tab);\n\tconst labels = saved?.selected ?? [];\n\tconst indices = new Set<number>();\n\tfor (let i = 0; i < q.options.length; i++) {\n\t\tif (labels.includes(q.options[i]!.label)) indices.add(i);\n\t}\n\treturn indices;\n}\n\nfunction persistMultiSelectAnswer(state: QuestionnaireState, ctx: ApplyContext): ReadonlyMap<number, QuestionAnswer> {\n\tconst q = ctx.questions[state.currentTab];\n\tif (!q?.multiSelect) return state.answers;\n\tconst selected: string[] = [];\n\tfor (let i = 0; i < q.options.length; i++) {\n\t\tif (state.multiSelectChecked.has(i)) selected.push(q.options[i]!.label);\n\t}\n\tconst out = new Map(state.answers);\n\tif (selected.length === 0) {\n\t\tout.delete(state.currentTab);\n\t\treturn out;\n\t}\n\tconst pendingNotes = state.notesByTab.get(state.currentTab);\n\tout.set(state.currentTab, {\n\t\tquestionIndex: state.currentTab,\n\t\tquestion: q.question,\n\t\tkind: \"multi\",\n\t\tanswer: null,\n\t\tselected,\n\t\t...(pendingNotes && pendingNotes.length > 0 ? { notes: pendingNotes } : {}),\n\t});\n\treturn out;\n}\n\nfunction clampCaret(value: string, caret: number | undefined): number {\n\tif (caret === undefined || !Number.isFinite(caret)) return value.length;\n\treturn Math.max(0, Math.min(caret, value.length));\n}\n\nfunction inlineOwnerForItem(item: WrappingSelectItem | undefined): InlineInputOwner | null {\n\tif (!item || !ROW_INTENT_META[item.kind].activatesInputMode) return null;\n\tswitch (item.kind) {\n\t\tcase \"other\":\n\t\tcase \"chat\":\n\t\t\treturn item.kind;\n\t\tcase \"option\":\n\t\tcase \"next\":\n\t\t\treturn null;\n\t}\n}\n\nfunction hydrateInlineInputResult(state: QuestionnaireState, owner: InlineInputOwner): ApplyResult {\n\tconst value = resolveInlineDraftValue(state, owner);\n\tconst caret = clampCaret(value, readInlineCaret(state, owner));\n\treturn {\n\t\tstate: withInlineDraft({ ...state, inputMode: true, inlineInputOwner: owner }, owner, value, caret),\n\t\teffects: [{ kind: \"set_input_buffer\", value, caret }],\n\t};\n}\n\nfunction switchTabResult(state: QuestionnaireState, nextTab: number, ctx: ApplyContext): ApplyResult {\n\tconst notesValue = state.notesByTab.get(nextTab) ?? state.answers.get(nextTab)?.notes ?? \"\";\n\tconst transitioned: QuestionnaireState = {\n\t\t...state,\n\t\tcurrentTab: nextTab,\n\t\toptionIndex: 0,\n\t\tinputMode: false,\n\t\tinlineInputOwner: null,\n\t\tnotesVisible: false,\n\t\tchatFocused: false,\n\t\tsubmitChoiceIndex: 0,\n\t\tmultiSelectChecked: syncMultiSelectFromAnswers(state.answers, ctx.questions, nextTab),\n\t\tnotesDraft: notesValue,\n\t};\n\tconst finalState = withFocusedOptionHasPreview(transitioned, ctx.questions);\n\treturn {\n\t\tstate: finalState,\n\t\teffects: [\n\t\t\t{ kind: \"set_notes_focused\", focused: false },\n\t\t\t{ kind: \"set_notes_value\", value: notesValue },\n\t\t],\n\t};\n}\n\nfunction doneFor(state: QuestionnaireState, ctx: ApplyContext, cancelled: boolean): ApplyResult {\n\tconst result: QuestionnaireResult = { answers: orderedAnswers(state, ctx.questions), cancelled };\n\treturn { state, effects: [{ kind: \"done\", result }] };\n}\n\n/**\n * Per-kind handler signature: action payload narrows to the matching union member\n * via `Extract`, so handlers consume fully-typed actions without `as` casts.\n */\ntype Handler<K extends QuestionnaireAction[\"kind\"]> = (\n\tstate: QuestionnaireState,\n\taction: Extract<QuestionnaireAction, { kind: K }>,\n\tctx: ApplyContext,\n) => ApplyResult;\n\nconst navHandler: Handler<\"nav\"> = (state, action, ctx) => {\n\tconst items = ctx.itemsByTab[state.currentTab] ?? [];\n\tconst item = items[action.nextIndex];\n\tconst owner = inlineOwnerForItem(item);\n\tconst next = withFocusedOptionHasPreview(\n\t\t{\n\t\t\t...state,\n\t\t\tchatFocused: false,\n\t\t\toptionIndex: action.nextIndex,\n\t\t\tinputMode: owner !== null,\n\t\t\tinlineInputOwner: owner,\n\t\t},\n\t\tctx.questions,\n\t);\n\treturn owner ? hydrateInlineInputResult(next, owner) : { state: next, effects: [] };\n};\n\nconst tabSwitchHandler: Handler<\"tab_switch\"> = (state, action, ctx) => switchTabResult(state, action.nextTab, ctx);\n\nconst confirmHandler: Handler<\"confirm\"> = (state, action, ctx) => {\n\tlet answer = action.answer;\n\tif (answer.kind === \"option\" && answer.answer) {\n\t\tconst q = ctx.questions[answer.questionIndex];\n\t\tconst matched = q?.options.find((o) => o.label === answer.answer);\n\t\tif (matched?.preview && matched.preview.length > 0) {\n\t\t\tanswer = { ...answer, preview: matched.preview };\n\t\t}\n\t}\n\tconst pendingNotes = state.notesByTab.get(answer.questionIndex);\n\tif (pendingNotes && pendingNotes.length > 0) {\n\t\tanswer = { ...answer, notes: pendingNotes };\n\t}\n\tconst answers = new Map(state.answers);\n\tanswers.set(answer.questionIndex, answer);\n\tconst next: QuestionnaireState = { ...state, answers };\n\tif (answer.kind === \"chat\") return doneFor(next, ctx, false);\n\tif (action.autoAdvanceTab !== undefined) return switchTabResult(next, action.autoAdvanceTab, ctx);\n\treturn doneFor(next, ctx, false);\n};\n\nconst toggleHandler: Handler<\"toggle\"> = (state, action, ctx) => {\n\tconst checked = new Set(state.multiSelectChecked);\n\tif (checked.has(action.index)) checked.delete(action.index);\n\telse checked.add(action.index);\n\tconst intermediate: QuestionnaireState = { ...state, multiSelectChecked: checked };\n\tconst answers = persistMultiSelectAnswer(intermediate, ctx);\n\treturn { state: { ...intermediate, answers }, effects: [] };\n};\n\nconst multiConfirmHandler: Handler<\"multi_confirm\"> = (state, action, ctx) => {\n\tconst q = ctx.questions[state.currentTab];\n\tif (!q) return { state, effects: [] };\n\tconst pendingNotes = state.notesByTab.get(state.currentTab);\n\tconst answers = new Map(state.answers);\n\tanswers.set(state.currentTab, {\n\t\tquestionIndex: state.currentTab,\n\t\tquestion: q.question,\n\t\tkind: \"multi\",\n\t\tanswer: null,\n\t\tselected: action.selected,\n\t\t...(pendingNotes && pendingNotes.length > 0 ? { notes: pendingNotes } : {}),\n\t});\n\tconst synced: QuestionnaireState = {\n\t\t...state,\n\t\tanswers,\n\t\tmultiSelectChecked: syncMultiSelectFromAnswers(answers, ctx.questions, state.currentTab),\n\t};\n\tif (action.autoAdvanceTab !== undefined) return switchTabResult(synced, action.autoAdvanceTab, ctx);\n\treturn doneFor(synced, ctx, false);\n};\n\nconst notesEnterHandler: Handler<\"notes_enter\"> = (state, _action, _ctx) => {\n\tconst value = state.answers.get(state.currentTab)?.notes ?? \"\";\n\treturn {\n\t\tstate: { ...state, notesVisible: true, notesDraft: value },\n\t\teffects: [\n\t\t\t{ kind: \"set_notes_value\", value },\n\t\t\t{ kind: \"set_notes_focused\", focused: true },\n\t\t],\n\t};\n};\n\nconst notesExitHandler: Handler<\"notes_exit\"> = (state, _action, _ctx) => {\n\tconst trimmed = state.notesDraft.trim();\n\tconst notes = new Map(state.notesByTab);\n\tconst answers = new Map(state.answers);\n\tif (trimmed.length === 0) {\n\t\tnotes.delete(state.currentTab);\n\t\tconst prev = answers.get(state.currentTab);\n\t\tif (prev?.notes) {\n\t\t\tconst stripped = { ...prev };\n\t\t\tdelete (stripped as { notes?: string }).notes;\n\t\t\tanswers.set(state.currentTab, stripped);\n\t\t}\n\t} else {\n\t\tnotes.set(state.currentTab, trimmed);\n\t\tconst prev = answers.get(state.currentTab);\n\t\tif (prev) answers.set(state.currentTab, { ...prev, notes: trimmed });\n\t}\n\treturn {\n\t\tstate: { ...state, notesByTab: notes, answers, notesVisible: false },\n\t\teffects: [{ kind: \"set_notes_focused\", focused: false }],\n\t};\n};\n\nconst focusOptionsHandler: Handler<\"focus_options\"> = (state, action, ctx) => {\n\tconst items = ctx.itemsByTab[state.currentTab] ?? [];\n\tconst focused = items[action.optionIndex];\n\tconst owner = inlineOwnerForItem(focused);\n\tconst next = withFocusedOptionHasPreview(\n\t\t{\n\t\t\t...state,\n\t\t\tchatFocused: false,\n\t\t\toptionIndex: action.optionIndex,\n\t\t\tinputMode: owner !== null,\n\t\t\tinlineInputOwner: owner,\n\t\t},\n\t\tctx.questions,\n\t);\n\treturn owner ? hydrateInlineInputResult(next, owner) : { state: next, effects: [] };\n};\n\nconst cancelHandler: Handler<\"cancel\"> = (s, _a, c) => doneFor(s, c, true);\nconst submitHandler: Handler<\"submit\"> = (s, _a, c) => doneFor(s, c, false);\nconst submitNavHandler: Handler<\"submit_nav\"> = (s, a, _c) => ({\n\tstate: { ...s, submitChoiceIndex: a.nextIndex },\n\teffects: [],\n});\nconst focusChatHandler: Handler<\"focus_chat\"> = (s, _a, _c) =>\n\thydrateInlineInputResult({ ...s, chatFocused: true, inputMode: true, inlineInputOwner: \"chat\" }, \"chat\");\nconst notesForwardHandler: Handler<\"notes_forward\"> = (s, a, _c) => ({\n\tstate: s,\n\teffects: [{ kind: \"forward_notes_keystroke\", data: a.data }],\n});\nconst ignoreHandler: Handler<\"ignore\"> = (s, _a, _c) => ({ state: s, effects: [] });\n\n/**\n * Compile-time-exhaustive dispatch table. `{ [K in Kind]: Handler<K> }` requires\n * an entry per union member — adding a new `QuestionnaireAction` variant fails to\n * compile here until a handler is registered, mirroring the `Record<RowKind, …>`\n * pattern used by `ROW_INTENT_META`.\n */\nconst HANDLERS: { [K in QuestionnaireAction[\"kind\"]]: Handler<K> } = {\n\tnav: navHandler,\n\ttab_switch: tabSwitchHandler,\n\tconfirm: confirmHandler,\n\ttoggle: toggleHandler,\n\tmulti_confirm: multiConfirmHandler,\n\tcancel: cancelHandler,\n\tnotes_enter: notesEnterHandler,\n\tnotes_exit: notesExitHandler,\n\tnotes_forward: notesForwardHandler,\n\tsubmit: submitHandler,\n\tsubmit_nav: submitNavHandler,\n\tfocus_chat: focusChatHandler,\n\tfocus_options: focusOptionsHandler,\n\tignore: ignoreHandler,\n};\n\n/**\n * Pure reducer: (state, action, ctx) → (state, Effect[]). Mirrors `rpiv-todo`'s `applyTaskMutation`.\n * Delegates to `HANDLERS` — per-kind handlers above are pure, named, and individually testable.\n * `ignore` is also handled outside the reducer by `handleIgnoreInline` in the runtime fast path.\n */\nexport function reduce(state: QuestionnaireState, action: QuestionnaireAction, ctx: ApplyContext): ApplyResult {\n\tconst handler = HANDLERS[action.kind] as Handler<typeof action.kind>;\n\treturn handler(state, action as never, ctx);\n}\n"]}
1
+ {"version":3,"file":"state-reducer.js","sourceRoot":"","sources":["../../../../../src/core/tools/ask-user-question/state/state-reducer.ts"],"names":[],"mappings":"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","sourcesContent":["import type { QuestionAnswer, QuestionData, QuestionnaireResult } from \"../tool/types.ts\";\nimport type { WrappingSelectItem } from \"../view/components/wrapping-select.ts\";\nimport { readInlineCaret, resolveInlineDraftValue, withInlineDraft } from \"./inline-input.ts\";\nimport type { QuestionnaireAction } from \"./key-router.ts\";\nimport { ROW_INTENT_META } from \"./row-intent.ts\";\nimport { computeFocusedOptionHasPreview } from \"./selectors/derivations.ts\";\nimport type { InlineInputOwner, QuestionnaireState } from \"./state.ts\";\n\n/** Session-lifetime constants. No live-component reads — peripheral values live on canonical state. */\nexport interface ApplyContext {\n\tquestions: readonly QuestionData[];\n\titemsByTab: ReadonlyArray<readonly WrappingSelectItem[]>;\n}\n\n/**\n * Declarative side-effects emitted by `reduce`. The runtime executes them after\n * committing the new state, then asks the props-adapter to re-project. Closed set —\n * adding an effect requires updating both the union AND the runtime's `runEffect` switch\n * (compiler-enforced exhaustive). No string-keyed escape hatch.\n */\nexport type Effect =\n\t| { kind: \"set_input_buffer\"; value: string; caret: number }\n\t| { kind: \"set_notes_value\"; value: string }\n\t| { kind: \"set_notes_focused\"; focused: boolean }\n\t| { kind: \"forward_notes_keystroke\"; data: string }\n\t| { kind: \"done\"; result: QuestionnaireResult };\n\nexport interface ApplyResult {\n\tstate: QuestionnaireState;\n\teffects: readonly Effect[];\n}\n\nfunction orderedAnswers(state: QuestionnaireState, questions: readonly QuestionData[]): QuestionAnswer[] {\n\tconst out: QuestionAnswer[] = [];\n\tfor (let i = 0; i < questions.length; i++) {\n\t\tconst a = state.answers.get(i);\n\t\tif (a) out.push(a);\n\t}\n\treturn out;\n}\n\nfunction withFocusedOptionHasPreview(\n\tstate: QuestionnaireState,\n\tquestions: readonly QuestionData[],\n): QuestionnaireState {\n\tconst focusedOptionHasPreview = computeFocusedOptionHasPreview(questions, state.currentTab, state.optionIndex);\n\tif (state.focusedOptionHasPreview === focusedOptionHasPreview) return state;\n\treturn { ...state, focusedOptionHasPreview };\n}\n\nfunction syncMultiSelectFromAnswers(\n\tanswers: ReadonlyMap<number, QuestionAnswer>,\n\tquestions: readonly QuestionData[],\n\ttab: number,\n): ReadonlySet<number> {\n\tconst q = questions[tab];\n\tif (!q?.multiSelect) return new Set();\n\tconst saved = answers.get(tab);\n\tconst labels = saved?.selected ?? [];\n\tconst indices = new Set<number>();\n\tfor (let i = 0; i < q.options.length; i++) {\n\t\tif (labels.includes(q.options[i]!.label)) indices.add(i);\n\t}\n\treturn indices;\n}\n\nfunction persistMultiSelectAnswer(state: QuestionnaireState, ctx: ApplyContext): ReadonlyMap<number, QuestionAnswer> {\n\tconst q = ctx.questions[state.currentTab];\n\tif (!q?.multiSelect) return state.answers;\n\tconst selected: string[] = [];\n\tfor (let i = 0; i < q.options.length; i++) {\n\t\tif (state.multiSelectChecked.has(i)) selected.push(q.options[i]!.label);\n\t}\n\tconst out = new Map(state.answers);\n\tif (selected.length === 0) {\n\t\tout.delete(state.currentTab);\n\t\treturn out;\n\t}\n\tconst pendingNotes = state.notesByTab.get(state.currentTab);\n\tout.set(state.currentTab, {\n\t\tquestionIndex: state.currentTab,\n\t\tquestion: q.question,\n\t\tkind: \"multi\",\n\t\tanswer: null,\n\t\tselected,\n\t\t...(pendingNotes && pendingNotes.length > 0 ? { notes: pendingNotes } : {}),\n\t});\n\treturn out;\n}\n\nfunction clampCaret(value: string, caret: number | undefined): number {\n\tif (caret === undefined || !Number.isFinite(caret)) return value.length;\n\treturn Math.max(0, Math.min(caret, value.length));\n}\n\nfunction inlineOwnerForItem(item: WrappingSelectItem | undefined): InlineInputOwner | null {\n\tif (!item || !ROW_INTENT_META[item.kind].activatesInputMode) return null;\n\tswitch (item.kind) {\n\t\tcase \"other\":\n\t\tcase \"chat\":\n\t\t\treturn item.kind;\n\t\tcase \"option\":\n\t\tcase \"next\":\n\t\t\treturn null;\n\t}\n}\n\nfunction hydrateInlineInputResult(state: QuestionnaireState, owner: InlineInputOwner): ApplyResult {\n\tconst value = resolveInlineDraftValue(state, owner);\n\tconst caret = clampCaret(value, readInlineCaret(state, owner));\n\treturn {\n\t\tstate: withInlineDraft({ ...state, inputMode: true, inlineInputOwner: owner }, owner, value, caret),\n\t\teffects: [{ kind: \"set_input_buffer\", value, caret }],\n\t};\n}\n\nfunction switchTabResult(state: QuestionnaireState, nextTab: number, ctx: ApplyContext): ApplyResult {\n\tconst notesValue = state.notesByTab.get(nextTab) ?? state.answers.get(nextTab)?.notes ?? \"\";\n\tconst transitioned: QuestionnaireState = {\n\t\t...state,\n\t\tcurrentTab: nextTab,\n\t\toptionIndex: 0,\n\t\tinputMode: false,\n\t\tinlineInputOwner: null,\n\t\tnotesVisible: false,\n\t\tchatFocused: false,\n\t\tsubmitChoiceIndex: 0,\n\t\tmultiSelectChecked: syncMultiSelectFromAnswers(state.answers, ctx.questions, nextTab),\n\t\tnotesDraft: notesValue,\n\t};\n\tconst finalState = withFocusedOptionHasPreview(transitioned, ctx.questions);\n\treturn {\n\t\tstate: finalState,\n\t\teffects: [\n\t\t\t{ kind: \"set_notes_focused\", focused: false },\n\t\t\t{ kind: \"set_notes_value\", value: notesValue },\n\t\t],\n\t};\n}\n\nfunction doneFor(state: QuestionnaireState, ctx: ApplyContext, cancelled: boolean): ApplyResult {\n\tconst result: QuestionnaireResult = { answers: orderedAnswers(state, ctx.questions), cancelled };\n\treturn { state, effects: [{ kind: \"done\", result }] };\n}\n\n/**\n * Per-kind handler signature: action payload narrows to the matching union member\n * via `Extract`, so handlers consume fully-typed actions without `as` casts.\n */\ntype Handler<K extends QuestionnaireAction[\"kind\"]> = (\n\tstate: QuestionnaireState,\n\taction: Extract<QuestionnaireAction, { kind: K }>,\n\tctx: ApplyContext,\n) => ApplyResult;\n\nconst navHandler: Handler<\"nav\"> = (state, action, ctx) => {\n\tconst items = ctx.itemsByTab[state.currentTab] ?? [];\n\tconst item = items[action.nextIndex];\n\tconst owner = inlineOwnerForItem(item);\n\tconst next = withFocusedOptionHasPreview(\n\t\t{\n\t\t\t...state,\n\t\t\tchatFocused: false,\n\t\t\toptionIndex: action.nextIndex,\n\t\t\tinputMode: owner !== null,\n\t\t\tinlineInputOwner: owner,\n\t\t},\n\t\tctx.questions,\n\t);\n\treturn owner ? hydrateInlineInputResult(next, owner) : { state: next, effects: [] };\n};\n\nconst tabSwitchHandler: Handler<\"tab_switch\"> = (state, action, ctx) => switchTabResult(state, action.nextTab, ctx);\n\nconst confirmHandler: Handler<\"confirm\"> = (state, action, ctx) => {\n\tlet answer = action.answer;\n\tif (answer.kind === \"option\" && answer.answer) {\n\t\tconst q = ctx.questions[answer.questionIndex];\n\t\tconst matched = q?.options.find((o) => o.label === answer.answer);\n\t\tif (matched?.preview && matched.preview.length > 0) {\n\t\t\tanswer = { ...answer, preview: matched.preview };\n\t\t}\n\t}\n\tconst pendingNotes = state.notesByTab.get(answer.questionIndex);\n\tif (pendingNotes && pendingNotes.length > 0) {\n\t\tanswer = { ...answer, notes: pendingNotes };\n\t}\n\tconst answers = new Map(state.answers);\n\tanswers.set(answer.questionIndex, answer);\n\tconst next: QuestionnaireState = { ...state, answers };\n\tif (answer.kind === \"chat\") return doneFor(next, ctx, false);\n\tif (action.autoAdvanceTab !== undefined) return switchTabResult(next, action.autoAdvanceTab, ctx);\n\treturn doneFor(next, ctx, false);\n};\n\nconst toggleHandler: Handler<\"toggle\"> = (state, action, ctx) => {\n\tconst checked = new Set(state.multiSelectChecked);\n\tif (checked.has(action.index)) checked.delete(action.index);\n\telse checked.add(action.index);\n\tconst intermediate: QuestionnaireState = { ...state, multiSelectChecked: checked };\n\tconst answers = persistMultiSelectAnswer(intermediate, ctx);\n\treturn { state: { ...intermediate, answers }, effects: [] };\n};\n\nconst multiConfirmHandler: Handler<\"multi_confirm\"> = (state, action, ctx) => {\n\tconst q = ctx.questions[state.currentTab];\n\tif (!q) return { state, effects: [] };\n\tconst pendingNotes = state.notesByTab.get(state.currentTab);\n\tconst answers = new Map(state.answers);\n\tanswers.set(state.currentTab, {\n\t\tquestionIndex: state.currentTab,\n\t\tquestion: q.question,\n\t\tkind: \"multi\",\n\t\tanswer: null,\n\t\tselected: action.selected,\n\t\t...(pendingNotes && pendingNotes.length > 0 ? { notes: pendingNotes } : {}),\n\t});\n\tconst synced: QuestionnaireState = {\n\t\t...state,\n\t\tanswers,\n\t\tmultiSelectChecked: syncMultiSelectFromAnswers(answers, ctx.questions, state.currentTab),\n\t};\n\tif (action.autoAdvanceTab !== undefined) return switchTabResult(synced, action.autoAdvanceTab, ctx);\n\treturn doneFor(synced, ctx, false);\n};\n\nconst notesEnterHandler: Handler<\"notes_enter\"> = (state, _action, _ctx) => {\n\tconst value = state.answers.get(state.currentTab)?.notes ?? \"\";\n\treturn {\n\t\tstate: { ...state, notesVisible: true, notesDraft: value },\n\t\teffects: [\n\t\t\t{ kind: \"set_notes_value\", value },\n\t\t\t{ kind: \"set_notes_focused\", focused: true },\n\t\t],\n\t};\n};\n\nconst notesExitHandler: Handler<\"notes_exit\"> = (state, _action, _ctx) => {\n\tconst trimmed = state.notesDraft.trim();\n\tconst notes = new Map(state.notesByTab);\n\tconst answers = new Map(state.answers);\n\tif (trimmed.length === 0) {\n\t\tnotes.delete(state.currentTab);\n\t\tconst prev = answers.get(state.currentTab);\n\t\tif (prev?.notes) {\n\t\t\tconst stripped = { ...prev };\n\t\t\tdelete (stripped as { notes?: string }).notes;\n\t\t\tanswers.set(state.currentTab, stripped);\n\t\t}\n\t} else {\n\t\tnotes.set(state.currentTab, trimmed);\n\t\tconst prev = answers.get(state.currentTab);\n\t\tif (prev) answers.set(state.currentTab, { ...prev, notes: trimmed });\n\t}\n\treturn {\n\t\tstate: { ...state, notesByTab: notes, answers, notesVisible: false },\n\t\teffects: [{ kind: \"set_notes_focused\", focused: false }],\n\t};\n};\n\nconst focusOptionsHandler: Handler<\"focus_options\"> = (state, action, ctx) => {\n\tconst items = ctx.itemsByTab[state.currentTab] ?? [];\n\tconst focused = items[action.optionIndex];\n\tconst owner = inlineOwnerForItem(focused);\n\tconst next = withFocusedOptionHasPreview(\n\t\t{\n\t\t\t...state,\n\t\t\tchatFocused: false,\n\t\t\toptionIndex: action.optionIndex,\n\t\t\tinputMode: owner !== null,\n\t\t\tinlineInputOwner: owner,\n\t\t},\n\t\tctx.questions,\n\t);\n\treturn owner ? hydrateInlineInputResult(next, owner) : { state: next, effects: [] };\n};\n\nconst cancelHandler: Handler<\"cancel\"> = (s, _a, c) => doneFor(s, c, true);\nconst submitHandler: Handler<\"submit\"> = (s, _a, c) => doneFor(s, c, false);\nconst submitNavHandler: Handler<\"submit_nav\"> = (s, a, _c) => ({\n\tstate: { ...s, submitChoiceIndex: a.nextIndex },\n\teffects: [],\n});\nconst focusChatHandler: Handler<\"focus_chat\"> = (s, _a, _c) =>\n\thydrateInlineInputResult({ ...s, chatFocused: true, inputMode: true, inlineInputOwner: \"chat\" }, \"chat\");\nconst notesForwardHandler: Handler<\"notes_forward\"> = (s, a, _c) => ({\n\tstate: s,\n\teffects: [{ kind: \"forward_notes_keystroke\", data: a.data }],\n});\nconst ignoreHandler: Handler<\"ignore\"> = (s, _a, _c) => ({ state: s, effects: [] });\n\n/**\n * Compile-time-exhaustive dispatch table. `{ [K in Kind]: Handler<K> }` requires\n * an entry per union member — adding a new `QuestionnaireAction` variant fails to\n * compile here until a handler is registered, mirroring the `Record<RowKind, …>`\n * pattern used by `ROW_INTENT_META`.\n */\nconst HANDLERS: { [K in QuestionnaireAction[\"kind\"]]: Handler<K> } = {\n\tnav: navHandler,\n\ttab_switch: tabSwitchHandler,\n\tconfirm: confirmHandler,\n\ttoggle: toggleHandler,\n\tmulti_confirm: multiConfirmHandler,\n\tcancel: cancelHandler,\n\tnotes_enter: notesEnterHandler,\n\tnotes_exit: notesExitHandler,\n\tnotes_forward: notesForwardHandler,\n\tsubmit: submitHandler,\n\tsubmit_nav: submitNavHandler,\n\tfocus_chat: focusChatHandler,\n\tfocus_options: focusOptionsHandler,\n\tignore: ignoreHandler,\n};\n\n/**\n * Pure reducer: (state, action, ctx) → (state, Effect[]). Mirrors `rpiv-todo`'s `applyTaskMutation`.\n * Delegates to `HANDLERS` — per-kind handlers above are pure, named, and individually testable.\n * `ignore` is also handled outside the reducer by `handleIgnoreInline` in the runtime fast path.\n */\nexport function reduce(state: QuestionnaireState, action: QuestionnaireAction, ctx: ApplyContext): ApplyResult {\n\tconst handler = HANDLERS[action.kind] as Handler<typeof action.kind>;\n\treturn handler(state, action as never, ctx);\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"body-residual-spacer.d.ts","sourceRoot":"","sources":["../../../../../src/core/tools/ask-user-question/view/body-residual-spacer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAExD;;;;;;;GAOG;AACH,qBAAa,kBAAmB,YAAW,SAAS;IACnD,iBAAyB,MAAM,CAA4B;IAC3D,iBAAyB,UAAU,CAA4B;IAE/D,YACC,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,EACjC,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,EAIrC;IAED,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAG;IAEnC,UAAU,IAAI,IAAI,CAAG;IAErB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAG9B;CACD"}
1
+ {"version":3,"file":"body-residual-spacer.d.ts","sourceRoot":"","sources":["../../../../../src/core/tools/ask-user-question/view/body-residual-spacer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAExD;;;;;;;GAOG;AACH,qBAAa,kBAAmB,YAAW,SAAS;IACnD,iBAAyB,MAAM,CAA4B;IAC3D,iBAAyB,UAAU,CAA4B;IAE/D,YAAY,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,EAAE,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,EAGnF;IAED,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAG;IAEnC,UAAU,IAAI,IAAI,CAAG;IAErB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAG9B;CACD"}
@@ -1 +1 @@
1
- {"version":3,"file":"body-residual-spacer.js","sourceRoot":"","sources":["../../../../../src/core/tools/ask-user-question/view/body-residual-spacer.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AACH,MAAM,OAAO,kBAAkB;IAI9B,YACC,MAAiC,EACjC,UAAqC;QAErC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC9B,CAAC;IAED,WAAW,CAAC,KAAa,IAAS,CAAC;IAEnC,UAAU,KAAU,CAAC;IAErB,MAAM,CAAC,KAAa;QACnB,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;QACtE,OAAO,KAAK,CAAS,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACrC,CAAC;CACD","sourcesContent":["import type { Component } from \"@earendil-works/pi-tui\";\n\n/**\n * Emits `max(0, getMax(width) - getCurrent(width))` empty rows. Used in\n * `dialog-builder.ts` to absorb the dialog-height residual OUTSIDE the bordered\n * body region: the body renders at its natural height (no internal `\"\"`\n * padding), and this spacer makes up the difference between the global max\n * across tabs and the current tab's body height so the overall dialog footprint\n * stays constant on tab switches.\n */\nexport class BodyResidualSpacer implements Component {\n\tdeclare private readonly getMax: (width: number) => number;\n\tdeclare private readonly getCurrent: (width: number) => number;\n\n\tconstructor(\n\t\tgetMax: (width: number) => number,\n\t\tgetCurrent: (width: number) => number,\n\t) {\n\t\tthis.getMax = getMax;\n\t\tthis.getCurrent = getCurrent;\n\t}\n\n\thandleInput(_data: string): void {}\n\n\tinvalidate(): void {}\n\n\trender(width: number): string[] {\n\t\tconst diff = Math.max(0, this.getMax(width) - this.getCurrent(width));\n\t\treturn Array<string>(diff).fill(\"\");\n\t}\n}\n"]}
1
+ {"version":3,"file":"body-residual-spacer.js","sourceRoot":"","sources":["../../../../../src/core/tools/ask-user-question/view/body-residual-spacer.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AACH,MAAM,OAAO,kBAAkB;IAI9B,YAAY,MAAiC,EAAE,UAAqC;QACnF,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC9B,CAAC;IAED,WAAW,CAAC,KAAa,IAAS,CAAC;IAEnC,UAAU,KAAU,CAAC;IAErB,MAAM,CAAC,KAAa;QACnB,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;QACtE,OAAO,KAAK,CAAS,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACrC,CAAC;CACD","sourcesContent":["import type { Component } from \"@earendil-works/pi-tui\";\n\n/**\n * Emits `max(0, getMax(width) - getCurrent(width))` empty rows. Used in\n * `dialog-builder.ts` to absorb the dialog-height residual OUTSIDE the bordered\n * body region: the body renders at its natural height (no internal `\"\"`\n * padding), and this spacer makes up the difference between the global max\n * across tabs and the current tab's body height so the overall dialog footprint\n * stays constant on tab switches.\n */\nexport class BodyResidualSpacer implements Component {\n\tprivate declare readonly getMax: (width: number) => number;\n\tprivate declare readonly getCurrent: (width: number) => number;\n\n\tconstructor(getMax: (width: number) => number, getCurrent: (width: number) => number) {\n\t\tthis.getMax = getMax;\n\t\tthis.getCurrent = getCurrent;\n\t}\n\n\thandleInput(_data: string): void {}\n\n\tinvalidate(): void {}\n\n\trender(width: number): string[] {\n\t\tconst diff = Math.max(0, this.getMax(width) - this.getCurrent(width));\n\t\treturn Array<string>(diff).fill(\"\");\n\t}\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"multi-select-view.d.ts","sourceRoot":"","sources":["../../../../../../src/core/tools/ask-user-question/view/components/multi-select-view.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iDAAiD,CAAC;AAG7E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAYxD,eAAO,MAAM,kBAAkB,WAAW,CAAC;AAE3C,MAAM,WAAW,oBAAoB;IACpC,IAAI,EAAE,aAAa,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IAC3D,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;GASG;AACH,qBAAa,eAAgB,YAAW,YAAY,CAAC,oBAAoB,CAAC;IACzE,OAAO,CAAC,KAAK,CAAuB;IAEpC,iBAAyB,KAAK,CAAQ;IACtC,iBAAyB,QAAQ,CAAe;IAEhD,YACC,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,YAAY,EAKtB;IAED,QAAQ,CAAC,KAAK,EAAE,oBAAoB,GAAG,IAAI,CAE1C;IAED,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAG;IAEnC,UAAU,IAAI,IAAI,CAAG;IAErB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAgC9B;IAED,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAWnC;IAED,OAAO,CAAC,kBAAkB;CAW1B"}
1
+ {"version":3,"file":"multi-select-view.d.ts","sourceRoot":"","sources":["../../../../../../src/core/tools/ask-user-question/view/components/multi-select-view.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iDAAiD,CAAC;AAE7E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAYxD,eAAO,MAAM,kBAAkB,WAAW,CAAC;AAE3C,MAAM,WAAW,oBAAoB;IACpC,IAAI,EAAE,aAAa,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IAC3D,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;GASG;AACH,qBAAa,eAAgB,YAAW,YAAY,CAAC,oBAAoB,CAAC;IACzE,OAAO,CAAC,KAAK,CAAuB;IAEpC,iBAAyB,KAAK,CAAQ;IACtC,iBAAyB,QAAQ,CAAe;IAEhD,YAAY,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,YAAY,EAI/C;IAED,QAAQ,CAAC,KAAK,EAAE,oBAAoB,GAAG,IAAI,CAE1C;IAED,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAG;IAEnC,UAAU,IAAI,IAAI,CAAG;IAErB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAgC9B;IAED,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAWnC;IAED,OAAO,CAAC,kBAAkB;CAW1B"}
@@ -1 +1 @@
1
- {"version":3,"file":"multi-select-view.js","sourceRoot":"","sources":["../../../../../../src/core/tools/ask-user-question/view/components/multi-select-view.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AACzF,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAI5D,MAAM,cAAc,GAAG,IAAI,CAAC;AAC5B,MAAM,gBAAgB,GAAG,IAAI,CAAC;AAC9B,MAAM,OAAO,GAAG,KAAK,CAAC;AACtB,MAAM,SAAS,GAAG,KAAK,CAAC;AACxB,MAAM,gBAAgB,GAAG,IAAI,CAAC;AAC9B,MAAM,aAAa,GAAG,GAAG,CAAC;AAC1B,2FAA2F;AAC3F,gGAAgG;AAChG,MAAM,mBAAmB,GAAG,IAAI,CAAC;AAEjC,MAAM,CAAC,MAAM,kBAAkB,GAAG,QAAQ,CAAC;AAQ3C;;;;;;;;;GASG;AACH,MAAM,OAAO,eAAe;IAM3B,YACC,KAAY,EACZ,QAAsB;QAEtB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,KAAK,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,eAAe,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;IACrF,CAAC;IAED,QAAQ,CAAC,KAA2B;QACnC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACpB,CAAC;IAED,WAAW,CAAC,KAAa,IAAS,CAAC;IAEnC,UAAU,KAAU,CAAC;IAErB,MAAM,CAAC,KAAa;QACnB,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,MAAM,WAAW,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC9C,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,WAAW,CAAC,CAAC;QACtD,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;QAC7E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACvD,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YACrC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC/B,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG;gBAAE,SAAS;YAC3B,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC;YACxF,kFAAkF;YAClF,iFAAiF;YACjF,kEAAkE;YAClE,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;YAC/F,MAAM,KAAK,GAAG,eAAe,CAAC,GAAG,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,CAAC,CAAC;YAC5D,MAAM,WAAW,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;YACzF,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;YACrD,MAAM,IAAI,GAAG,GAAG,OAAO,GAAG,GAAG,GAAG,gBAAgB,GAAG,GAAG,GAAG,aAAa,GAAG,WAAW,EAAE,CAAC;YACvF,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;YAC7C,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC;gBACrB,MAAM,OAAO,GAAG,gBAAgB,CAAC,GAAG,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;gBAChE,KAAK,MAAM,OAAO,IAAI,OAAO,EAAE,CAAC;oBAC/B,KAAK,CAAC,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;gBACnE,CAAC;YACF,CAAC;QACF,CAAC;QACD,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC;QACvG,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU;YACtC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YAChE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC;QACxB,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,WAAW,GAAG,SAAS,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;QACrE,OAAO,KAAK,CAAC;IACd,CAAC;IAED,aAAa,CAAC,KAAa;QAC1B,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC;QACpE,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;YACzC,IAAI,CAAC,GAAG;gBAAE,SAAS;YACnB,KAAK,IAAI,CAAC,CAAC,CAAC,WAAW;YACvB,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC;gBACrB,KAAK,IAAI,gBAAgB,CAAC,GAAG,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC,MAAM,CAAC;YACjE,CAAC;QACF,CAAC;QACD,OAAO,KAAK,GAAG,CAAC,CAAC,CAAC,mDAAmD;IACtE,CAAC;IAEO,kBAAkB;QACzB,6FAA6F;QAC7F,uFAAuF;QACvF,gGAAgG;QAChG,+FAA+F;QAC/F,+FAA+F;QAC/F,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;QAC7E,OAAO,CACN,YAAY,CAAC,gBAAgB,CAAC,GAAG,WAAW,GAAG,YAAY,CAAC,GAAG,gBAAgB,GAAG,SAAS,GAAG,aAAa,EAAE,CAAC,CAC9G,CAAC;IACH,CAAC;CACD","sourcesContent":["import type { Theme } from \"../../../../../modes/interactive/theme/theme.ts\";\nimport { truncateToWidth, visibleWidth, wrapTextWithAnsi } from \"@earendil-works/pi-tui\";\nimport { ROW_INTENT_META } from \"../../state/row-intent.ts\";\nimport type { QuestionData } from \"../../tool/types.ts\";\nimport type { StatefulView } from \"../stateful-view.ts\";\n\nconst ACTIVE_POINTER = \"❯ \";\nconst INACTIVE_POINTER = \" \";\nconst CHECKED = \"[✔]\";\nconst UNCHECKED = \"[ ]\";\nconst NUMBER_SEPARATOR = \". \";\nconst BOX_LABEL_GAP = \" \";\n// CC parity: description continuation indents to col 2 (past the pointer slot), NOT to the\n// full prefix column. Wrap width still uses prefixVisibleWidth so naturalHeight matches render.\nconst CONTINUATION_INDENT = \" \";\n\nexport const MULTI_SUBMIT_LABEL = \"Submit\";\n\nexport interface MultiSelectViewProps {\n\trows: ReadonlyArray<{ checked: boolean; active: boolean }>;\n\tnextActive: boolean;\n\tnextLabel: string;\n}\n\n/**\n * Renders the multi-select option list (one row per option — pointer + checkbox + label —\n * plus zero or more wrapped continuation lines per description).\n *\n * `naturalHeight(width)` is state-INDEPENDENT (depends only on theme glyph widths,\n * question.options, and width) so the host can compute a stable globalContentHeight\n * without rendering. `naturalHeight(w) === render(w).length` for every props.\n *\n * `setProps(props)` is a pure field reassignment — no render, no invalidate side effects.\n */\nexport class MultiSelectView implements StatefulView<MultiSelectViewProps> {\n\tprivate props: MultiSelectViewProps;\n\n\tdeclare private readonly theme: Theme;\n\tdeclare private readonly question: QuestionData;\n\n\tconstructor(\n\t\ttheme: Theme,\n\t\tquestion: QuestionData,\n\t) {\n\t\tthis.theme = theme;\n\t\tthis.question = question;\n\t\tthis.props = { rows: [], nextActive: false, nextLabel: ROW_INTENT_META.next.label };\n\t}\n\n\tsetProps(props: MultiSelectViewProps): void {\n\t\tthis.props = props;\n\t}\n\n\thandleInput(_data: string): void {}\n\n\tinvalidate(): void {}\n\n\trender(width: number): string[] {\n\t\tconst lines: string[] = [];\n\t\tconst prefixWidth = this.prefixVisibleWidth();\n\t\tconst contentWidth = Math.max(1, width - prefixWidth);\n\t\tconst numberWidth = String(Math.max(1, this.question.options.length)).length;\n\t\tfor (let i = 0; i < this.question.options.length; i++) {\n\t\t\tconst opt = this.question.options[i];\n\t\t\tconst row = this.props.rows[i];\n\t\t\tif (!opt || !row) continue;\n\t\t\tconst pointer = row.active ? this.theme.fg(\"accent\", ACTIVE_POINTER) : INACTIVE_POINTER;\n\t\t\t// Checked uses the same `accent` hue as the active-row label so checked rows read\n\t\t\t// as \"selected\" rather than \"success\" — matches the visual rhythm of the rest of\n\t\t\t// the dialog (active pointer, label, picker rows are all accent).\n\t\t\tconst box = row.checked ? this.theme.fg(\"accent\", CHECKED) : this.theme.fg(\"muted\", UNCHECKED);\n\t\t\tconst label = truncateToWidth(opt.label, contentWidth, \"…\");\n\t\t\tconst styledLabel = row.active ? this.theme.fg(\"accent\", this.theme.bold(label)) : label;\n\t\t\tconst num = String(i + 1).padStart(numberWidth, \" \");\n\t\t\tconst line = `${pointer}${num}${NUMBER_SEPARATOR}${box}${BOX_LABEL_GAP}${styledLabel}`;\n\t\t\tlines.push(truncateToWidth(line, width, \"\"));\n\t\t\tif (opt.description) {\n\t\t\t\tconst wrapped = wrapTextWithAnsi(opt.description, contentWidth);\n\t\t\t\tfor (const segment of wrapped) {\n\t\t\t\t\tlines.push(CONTINUATION_INDENT + this.theme.fg(\"muted\", segment));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tconst nextPointer = this.props.nextActive ? this.theme.fg(\"accent\", ACTIVE_POINTER) : INACTIVE_POINTER;\n\t\tconst nextLabel = this.props.nextActive\n\t\t\t? this.theme.fg(\"accent\", this.theme.bold(this.props.nextLabel))\n\t\t\t: this.props.nextLabel;\n\t\tlines.push(truncateToWidth(`${nextPointer}${nextLabel}`, width, \"\"));\n\t\treturn lines;\n\t}\n\n\tnaturalHeight(width: number): number {\n\t\tconst contentWidth = Math.max(1, width - this.prefixVisibleWidth());\n\t\tlet total = 0;\n\t\tfor (const opt of this.question.options) {\n\t\t\tif (!opt) continue;\n\t\t\ttotal += 1; // row line\n\t\t\tif (opt.description) {\n\t\t\t\ttotal += wrapTextWithAnsi(opt.description, contentWidth).length;\n\t\t\t}\n\t\t}\n\t\treturn total + 1; // Next sentinel row (no description; never wraps).\n\t}\n\n\tprivate prefixVisibleWidth(): number {\n\t\t// Canonical prefix for OPTION rows: INACTIVE_POINTER + numberWidth digits + NUMBER_SEPARATOR\n\t\t// + UNCHECKED + BOX_LABEL_GAP. State-independent because ACTIVE/INACTIVE pointer share\n\t\t// visibleWidth, CHECKED/UNCHECKED share visibleWidth, and numberWidth is constant per question.\n\t\t// The Next sentinel uses a bare `pointer + \"Next\"` shape — its width never exceeds this prefix\n\t\t// at any reasonable terminal width, so it's safe to leave it out of the canonical computation.\n\t\tconst numberWidth = String(Math.max(1, this.question.options.length)).length;\n\t\treturn (\n\t\t\tvisibleWidth(INACTIVE_POINTER) + numberWidth + visibleWidth(`${NUMBER_SEPARATOR}${UNCHECKED}${BOX_LABEL_GAP}`)\n\t\t);\n\t}\n}\n"]}
1
+ {"version":3,"file":"multi-select-view.js","sourceRoot":"","sources":["../../../../../../src/core/tools/ask-user-question/view/components/multi-select-view.ts"],"names":[],"mappings":"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","sourcesContent":["import { truncateToWidth, visibleWidth, wrapTextWithAnsi } from \"@earendil-works/pi-tui\";\nimport type { Theme } from \"../../../../../modes/interactive/theme/theme.ts\";\nimport { ROW_INTENT_META } from \"../../state/row-intent.ts\";\nimport type { QuestionData } from \"../../tool/types.ts\";\nimport type { StatefulView } from \"../stateful-view.ts\";\n\nconst ACTIVE_POINTER = \"❯ \";\nconst INACTIVE_POINTER = \" \";\nconst CHECKED = \"[✔]\";\nconst UNCHECKED = \"[ ]\";\nconst NUMBER_SEPARATOR = \". \";\nconst BOX_LABEL_GAP = \" \";\n// CC parity: description continuation indents to col 2 (past the pointer slot), NOT to the\n// full prefix column. Wrap width still uses prefixVisibleWidth so naturalHeight matches render.\nconst CONTINUATION_INDENT = \" \";\n\nexport const MULTI_SUBMIT_LABEL = \"Submit\";\n\nexport interface MultiSelectViewProps {\n\trows: ReadonlyArray<{ checked: boolean; active: boolean }>;\n\tnextActive: boolean;\n\tnextLabel: string;\n}\n\n/**\n * Renders the multi-select option list (one row per option — pointer + checkbox + label —\n * plus zero or more wrapped continuation lines per description).\n *\n * `naturalHeight(width)` is state-INDEPENDENT (depends only on theme glyph widths,\n * question.options, and width) so the host can compute a stable globalContentHeight\n * without rendering. `naturalHeight(w) === render(w).length` for every props.\n *\n * `setProps(props)` is a pure field reassignment — no render, no invalidate side effects.\n */\nexport class MultiSelectView implements StatefulView<MultiSelectViewProps> {\n\tprivate props: MultiSelectViewProps;\n\n\tprivate declare readonly theme: Theme;\n\tprivate declare readonly question: QuestionData;\n\n\tconstructor(theme: Theme, question: QuestionData) {\n\t\tthis.theme = theme;\n\t\tthis.question = question;\n\t\tthis.props = { rows: [], nextActive: false, nextLabel: ROW_INTENT_META.next.label };\n\t}\n\n\tsetProps(props: MultiSelectViewProps): void {\n\t\tthis.props = props;\n\t}\n\n\thandleInput(_data: string): void {}\n\n\tinvalidate(): void {}\n\n\trender(width: number): string[] {\n\t\tconst lines: string[] = [];\n\t\tconst prefixWidth = this.prefixVisibleWidth();\n\t\tconst contentWidth = Math.max(1, width - prefixWidth);\n\t\tconst numberWidth = String(Math.max(1, this.question.options.length)).length;\n\t\tfor (let i = 0; i < this.question.options.length; i++) {\n\t\t\tconst opt = this.question.options[i];\n\t\t\tconst row = this.props.rows[i];\n\t\t\tif (!opt || !row) continue;\n\t\t\tconst pointer = row.active ? this.theme.fg(\"accent\", ACTIVE_POINTER) : INACTIVE_POINTER;\n\t\t\t// Checked uses the same `accent` hue as the active-row label so checked rows read\n\t\t\t// as \"selected\" rather than \"success\" — matches the visual rhythm of the rest of\n\t\t\t// the dialog (active pointer, label, picker rows are all accent).\n\t\t\tconst box = row.checked ? this.theme.fg(\"accent\", CHECKED) : this.theme.fg(\"muted\", UNCHECKED);\n\t\t\tconst label = truncateToWidth(opt.label, contentWidth, \"…\");\n\t\t\tconst styledLabel = row.active ? this.theme.fg(\"accent\", this.theme.bold(label)) : label;\n\t\t\tconst num = String(i + 1).padStart(numberWidth, \" \");\n\t\t\tconst line = `${pointer}${num}${NUMBER_SEPARATOR}${box}${BOX_LABEL_GAP}${styledLabel}`;\n\t\t\tlines.push(truncateToWidth(line, width, \"\"));\n\t\t\tif (opt.description) {\n\t\t\t\tconst wrapped = wrapTextWithAnsi(opt.description, contentWidth);\n\t\t\t\tfor (const segment of wrapped) {\n\t\t\t\t\tlines.push(CONTINUATION_INDENT + this.theme.fg(\"muted\", segment));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tconst nextPointer = this.props.nextActive ? this.theme.fg(\"accent\", ACTIVE_POINTER) : INACTIVE_POINTER;\n\t\tconst nextLabel = this.props.nextActive\n\t\t\t? this.theme.fg(\"accent\", this.theme.bold(this.props.nextLabel))\n\t\t\t: this.props.nextLabel;\n\t\tlines.push(truncateToWidth(`${nextPointer}${nextLabel}`, width, \"\"));\n\t\treturn lines;\n\t}\n\n\tnaturalHeight(width: number): number {\n\t\tconst contentWidth = Math.max(1, width - this.prefixVisibleWidth());\n\t\tlet total = 0;\n\t\tfor (const opt of this.question.options) {\n\t\t\tif (!opt) continue;\n\t\t\ttotal += 1; // row line\n\t\t\tif (opt.description) {\n\t\t\t\ttotal += wrapTextWithAnsi(opt.description, contentWidth).length;\n\t\t\t}\n\t\t}\n\t\treturn total + 1; // Next sentinel row (no description; never wraps).\n\t}\n\n\tprivate prefixVisibleWidth(): number {\n\t\t// Canonical prefix for OPTION rows: INACTIVE_POINTER + numberWidth digits + NUMBER_SEPARATOR\n\t\t// + UNCHECKED + BOX_LABEL_GAP. State-independent because ACTIVE/INACTIVE pointer share\n\t\t// visibleWidth, CHECKED/UNCHECKED share visibleWidth, and numberWidth is constant per question.\n\t\t// The Next sentinel uses a bare `pointer + \"Next\"` shape — its width never exceeds this prefix\n\t\t// at any reasonable terminal width, so it's safe to leave it out of the canonical computation.\n\t\tconst numberWidth = String(Math.max(1, this.question.options.length)).length;\n\t\treturn (\n\t\t\tvisibleWidth(INACTIVE_POINTER) + numberWidth + visibleWidth(`${NUMBER_SEPARATOR}${UNCHECKED}${BOX_LABEL_GAP}`)\n\t\t);\n\t}\n}\n"]}
@@ -1,5 +1,5 @@
1
- import type { Theme } from "../../../../../../modes/interactive/theme/theme.ts";
2
1
  import { type MarkdownTheme } from "@earendil-works/pi-tui";
2
+ import type { Theme } from "../../../../../../modes/interactive/theme/theme.ts";
3
3
  import type { QuestionData } from "../../../tool/types.ts";
4
4
  /** CC parity in side-by-side layout. */
5
5
  export declare const MAX_PREVIEW_HEIGHT_SIDE_BY_SIDE = 20;
@@ -1 +1 @@
1
- {"version":3,"file":"markdown-content-cache.d.ts","sourceRoot":"","sources":["../../../../../../../src/core/tools/ask-user-question/view/components/preview/markdown-content-cache.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oDAAoD,CAAC;AAChF,OAAO,EAAY,KAAK,aAAa,EAAgB,MAAM,wBAAwB,CAAC;AACpF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAG3D,wCAAwC;AACxC,eAAO,MAAM,+BAA+B,KAAK,CAAC;AAClD,8DAA8D;AAC9D,eAAO,MAAM,0BAA0B,KAAK,CAAC;AAC7C,eAAO,MAAM,eAAe,yBAAyB,CAAC;AACtD,qJAAqJ;AACrJ,eAAO,MAAM,yBAAyB,IAAI,CAAC;AAE3C;;;;;;;;GAQG;AACH,qBAAa,oBAAoB;IAChC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAsB;IACnD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAwB;IACtD,OAAO,CAAC,WAAW,CAAqB;IACxC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAQ;IAC9B,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;IAE9C,YAAY,QAAQ,EAAE,YAAY,EAAE,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,aAAa,EAS7E;IAED,aAAa,IAAI,OAAO,CAEvB;IAED,GAAG,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAEhC;IAED;;;OAGG;IACH,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,CAiBzD;IAED,UAAU,IAAI,IAAI,CAGjB;CACD"}
1
+ {"version":3,"file":"markdown-content-cache.d.ts","sourceRoot":"","sources":["../../../../../../../src/core/tools/ask-user-question/view/components/preview/markdown-content-cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,aAAa,EAAgB,MAAM,wBAAwB,CAAC;AACpF,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oDAAoD,CAAC;AAChF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAG3D,wCAAwC;AACxC,eAAO,MAAM,+BAA+B,KAAK,CAAC;AAClD,8DAA8D;AAC9D,eAAO,MAAM,0BAA0B,KAAK,CAAC;AAC7C,eAAO,MAAM,eAAe,yBAAyB,CAAC;AACtD,qJAAqJ;AACrJ,eAAO,MAAM,yBAAyB,IAAI,CAAC;AAE3C;;;;;;;;GAQG;AACH,qBAAa,oBAAoB;IAChC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAsB;IACnD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAwB;IACtD,OAAO,CAAC,WAAW,CAAqB;IACxC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAQ;IAC9B,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;IAE9C,YAAY,QAAQ,EAAE,YAAY,EAAE,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,aAAa,EAS7E;IAED,aAAa,IAAI,OAAO,CAEvB;IAED,GAAG,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAEhC;IAED;;;OAGG;IACH,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,CAiBzD;IAED,UAAU,IAAI,IAAI,CAGjB;CACD"}
@@ -1 +1 @@
1
- {"version":3,"file":"markdown-content-cache.js","sourceRoot":"","sources":["../../../../../../../src/core/tools/ask-user-question/view/components/preview/markdown-content-cache.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Theme } from \"../../../../../../modes/interactive/theme/theme.ts\";\nimport { Markdown, type MarkdownTheme, visibleWidth } from \"@earendil-works/pi-tui\";\nimport type { QuestionData } from \"../../../tool/types.ts\";\nimport { stripFenceMarkers } from \"./preview-box-renderer.ts\";\n\n/** CC parity in side-by-side layout. */\nexport const MAX_PREVIEW_HEIGHT_SIDE_BY_SIDE = 20;\n/** Preserves narrow-terminal protection in stacked layout. */\nexport const MAX_PREVIEW_HEIGHT_STACKED = 15;\nexport const NO_PREVIEW_TEXT = \"No preview available\";\n/** 1 blank separator + 1 affordance text row reserved when `hasAnyPreview` (height stability of the affordance row's offset relative to the box). */\nexport const NOTES_AFFORDANCE_OVERHEAD = 2;\n\n/**\n * Per-question cache for rendered markdown previews. Width-keyed: switching the\n * inner width invalidates every cached `Markdown`'s render output (pi-tui's\n * `Markdown.render(width)` re-wraps when width changes).\n *\n * Replaces the inline `previewTexts`, `markdownCache`, `cachedWidth` triple from\n * the previous monolithic `preview-pane.ts`. One Markdown per option, lazy on\n * first request, never re-constructed — count semantics frozen by tests.\n */\nexport class MarkdownContentCache {\n\tprivate readonly previewTexts: Map<number, string>;\n\tprivate readonly markdownCache: Map<number, Markdown>;\n\tprivate cachedWidth: number | undefined;\n\tprivate readonly theme: Theme;\n\tprivate readonly markdownTheme: MarkdownTheme;\n\n\tconstructor(question: QuestionData, theme: Theme, markdownTheme: MarkdownTheme) {\n\t\tthis.theme = theme;\n\t\tthis.markdownTheme = markdownTheme;\n\t\tthis.previewTexts = new Map();\n\t\tfor (let i = 0; i < question.options.length; i++) {\n\t\t\tconst raw = question.options[i]?.preview;\n\t\t\tif (raw && raw.length > 0) this.previewTexts.set(i, raw);\n\t\t}\n\t\tthis.markdownCache = new Map();\n\t}\n\n\thasAnyPreview(): boolean {\n\t\treturn this.previewTexts.size > 0;\n\t}\n\n\thas(optionIndex: number): boolean {\n\t\treturn this.previewTexts.has(optionIndex);\n\t}\n\n\t/**\n\t * Compute the body lines for a given option at a given inner width. Width changes\n\t * invalidate the per-Markdown render cache.\n\t */\n\tbodyFor(optionIndex: number, innerWidth: number): string[] {\n\t\tif (this.cachedWidth !== innerWidth) {\n\t\t\tfor (const md of this.markdownCache.values()) md.invalidate();\n\t\t\tthis.cachedWidth = innerWidth;\n\t\t}\n\t\tconst text = this.previewTexts.get(optionIndex);\n\t\tif (!text) {\n\t\t\tconst placeholder = this.theme.fg(\"dim\", NO_PREVIEW_TEXT);\n\t\t\tconst pad = Math.max(0, innerWidth - visibleWidth(placeholder));\n\t\t\treturn [placeholder + \" \".repeat(pad)];\n\t\t}\n\t\tlet md = this.markdownCache.get(optionIndex);\n\t\tif (!md) {\n\t\t\tmd = new Markdown(text, 0, 0, this.markdownTheme);\n\t\t\tthis.markdownCache.set(optionIndex, md);\n\t\t}\n\t\treturn stripFenceMarkers(md.render(innerWidth));\n\t}\n\n\tinvalidate(): void {\n\t\tfor (const md of this.markdownCache.values()) md.invalidate();\n\t\tthis.cachedWidth = undefined;\n\t}\n}\n"]}
1
+ {"version":3,"file":"markdown-content-cache.js","sourceRoot":"","sources":["../../../../../../../src/core/tools/ask-user-question/view/components/preview/markdown-content-cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAsB,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAGpF,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAE9D,wCAAwC;AACxC,MAAM,CAAC,MAAM,+BAA+B,GAAG,EAAE,CAAC;AAClD,8DAA8D;AAC9D,MAAM,CAAC,MAAM,0BAA0B,GAAG,EAAE,CAAC;AAC7C,MAAM,CAAC,MAAM,eAAe,GAAG,sBAAsB,CAAC;AACtD,qJAAqJ;AACrJ,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC;AAE3C;;;;;;;;GAQG;AACH,MAAM,OAAO,oBAAoB;IAOhC,YAAY,QAAsB,EAAE,KAAY,EAAE,aAA4B;QAC7E,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,YAAY,GAAG,IAAI,GAAG,EAAE,CAAC;QAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAClD,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC;YACzC,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC;gBAAE,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAC1D,CAAC;QACD,IAAI,CAAC,aAAa,GAAG,IAAI,GAAG,EAAE,CAAC;IAChC,CAAC;IAED,aAAa;QACZ,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,CAAC;IACnC,CAAC;IAED,GAAG,CAAC,WAAmB;QACtB,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAC3C,CAAC;IAED;;;OAGG;IACH,OAAO,CAAC,WAAmB,EAAE,UAAkB;QAC9C,IAAI,IAAI,CAAC,WAAW,KAAK,UAAU,EAAE,CAAC;YACrC,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE;gBAAE,EAAE,CAAC,UAAU,EAAE,CAAC;YAC9D,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;QAC/B,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAChD,IAAI,CAAC,IAAI,EAAE,CAAC;YACX,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;YAC1D,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,GAAG,YAAY,CAAC,WAAW,CAAC,CAAC,CAAC;YAChE,OAAO,CAAC,WAAW,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QACxC,CAAC;QACD,IAAI,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAC7C,IAAI,CAAC,EAAE,EAAE,CAAC;YACT,EAAE,GAAG,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;YAClD,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QACzC,CAAC;QACD,OAAO,iBAAiB,CAAC,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;IACjD,CAAC;IAED,UAAU;QACT,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE;YAAE,EAAE,CAAC,UAAU,EAAE,CAAC;QAC9D,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;IAC9B,CAAC;CACD","sourcesContent":["import { Markdown, type MarkdownTheme, visibleWidth } from \"@earendil-works/pi-tui\";\nimport type { Theme } from \"../../../../../../modes/interactive/theme/theme.ts\";\nimport type { QuestionData } from \"../../../tool/types.ts\";\nimport { stripFenceMarkers } from \"./preview-box-renderer.ts\";\n\n/** CC parity in side-by-side layout. */\nexport const MAX_PREVIEW_HEIGHT_SIDE_BY_SIDE = 20;\n/** Preserves narrow-terminal protection in stacked layout. */\nexport const MAX_PREVIEW_HEIGHT_STACKED = 15;\nexport const NO_PREVIEW_TEXT = \"No preview available\";\n/** 1 blank separator + 1 affordance text row reserved when `hasAnyPreview` (height stability of the affordance row's offset relative to the box). */\nexport const NOTES_AFFORDANCE_OVERHEAD = 2;\n\n/**\n * Per-question cache for rendered markdown previews. Width-keyed: switching the\n * inner width invalidates every cached `Markdown`'s render output (pi-tui's\n * `Markdown.render(width)` re-wraps when width changes).\n *\n * Replaces the inline `previewTexts`, `markdownCache`, `cachedWidth` triple from\n * the previous monolithic `preview-pane.ts`. One Markdown per option, lazy on\n * first request, never re-constructed — count semantics frozen by tests.\n */\nexport class MarkdownContentCache {\n\tprivate readonly previewTexts: Map<number, string>;\n\tprivate readonly markdownCache: Map<number, Markdown>;\n\tprivate cachedWidth: number | undefined;\n\tprivate readonly theme: Theme;\n\tprivate readonly markdownTheme: MarkdownTheme;\n\n\tconstructor(question: QuestionData, theme: Theme, markdownTheme: MarkdownTheme) {\n\t\tthis.theme = theme;\n\t\tthis.markdownTheme = markdownTheme;\n\t\tthis.previewTexts = new Map();\n\t\tfor (let i = 0; i < question.options.length; i++) {\n\t\t\tconst raw = question.options[i]?.preview;\n\t\t\tif (raw && raw.length > 0) this.previewTexts.set(i, raw);\n\t\t}\n\t\tthis.markdownCache = new Map();\n\t}\n\n\thasAnyPreview(): boolean {\n\t\treturn this.previewTexts.size > 0;\n\t}\n\n\thas(optionIndex: number): boolean {\n\t\treturn this.previewTexts.has(optionIndex);\n\t}\n\n\t/**\n\t * Compute the body lines for a given option at a given inner width. Width changes\n\t * invalidate the per-Markdown render cache.\n\t */\n\tbodyFor(optionIndex: number, innerWidth: number): string[] {\n\t\tif (this.cachedWidth !== innerWidth) {\n\t\t\tfor (const md of this.markdownCache.values()) md.invalidate();\n\t\t\tthis.cachedWidth = innerWidth;\n\t\t}\n\t\tconst text = this.previewTexts.get(optionIndex);\n\t\tif (!text) {\n\t\t\tconst placeholder = this.theme.fg(\"dim\", NO_PREVIEW_TEXT);\n\t\t\tconst pad = Math.max(0, innerWidth - visibleWidth(placeholder));\n\t\t\treturn [placeholder + \" \".repeat(pad)];\n\t\t}\n\t\tlet md = this.markdownCache.get(optionIndex);\n\t\tif (!md) {\n\t\t\tmd = new Markdown(text, 0, 0, this.markdownTheme);\n\t\t\tthis.markdownCache.set(optionIndex, md);\n\t\t}\n\t\treturn stripFenceMarkers(md.render(innerWidth));\n\t}\n\n\tinvalidate(): void {\n\t\tfor (const md of this.markdownCache.values()) md.invalidate();\n\t\tthis.cachedWidth = undefined;\n\t}\n}\n"]}
@@ -1,5 +1,5 @@
1
- import type { Theme } from "../../../../../../modes/interactive/theme/theme.ts";
2
1
  import type { MarkdownTheme } from "@earendil-works/pi-tui";
2
+ import type { Theme } from "../../../../../../modes/interactive/theme/theme.ts";
3
3
  import type { QuestionData } from "../../../tool/types.ts";
4
4
  import type { PreviewLayoutMode } from "./preview-layout-decider.ts";
5
5
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"preview-block-renderer.d.ts","sourceRoot":"","sources":["../../../../../../../src/core/tools/ask-user-question/view/components/preview/preview-block-renderer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oDAAoD,CAAC;AAChF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAc3D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAErE;;;GAGG;AACH,eAAO,MAAM,qBAAqB,uBAAuB,CAAC;AAE1D,MAAM,WAAW,0BAA0B;IAC1C,QAAQ,EAAE,YAAY,CAAC;IACvB,KAAK,EAAE,KAAK,CAAC;IACb,aAAa,EAAE,aAAa,CAAC;CAC7B;AAED;;;;;;;;;GASG;AACH,qBAAa,oBAAoB;IAChC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAQ;IAC9B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAuB;IAE7C,YAAY,MAAM,EAAE,0BAA0B,EAG7C;IAED,aAAa,IAAI,OAAO,CAEvB;IAED,GAAG,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAEhC;IAED,UAAU,IAAI,IAAI,CAEjB;IAED;;;;OAIG;IACH,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,GAAG,MAAM,CAO/E;IAED;;;;;OAKG;IACH,WAAW,CACV,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,iBAAiB,EACvB,OAAO,EAAE,OAAO,EAChB,YAAY,EAAE,OAAO,GACnB,MAAM,EAAE,CAmBV;CACD"}
1
+ {"version":3,"file":"preview-block-renderer.d.ts","sourceRoot":"","sources":["../../../../../../../src/core/tools/ask-user-question/view/components/preview/preview-block-renderer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oDAAoD,CAAC;AAChF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAc3D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAErE;;;GAGG;AACH,eAAO,MAAM,qBAAqB,uBAAuB,CAAC;AAE1D,MAAM,WAAW,0BAA0B;IAC1C,QAAQ,EAAE,YAAY,CAAC;IACvB,KAAK,EAAE,KAAK,CAAC;IACb,aAAa,EAAE,aAAa,CAAC;CAC7B;AAED;;;;;;;;;GASG;AACH,qBAAa,oBAAoB;IAChC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAQ;IAC9B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAuB;IAE7C,YAAY,MAAM,EAAE,0BAA0B,EAG7C;IAED,aAAa,IAAI,OAAO,CAEvB;IAED,GAAG,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAEhC;IAED,UAAU,IAAI,IAAI,CAEjB;IAED;;;;OAIG;IACH,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,GAAG,MAAM,CAO/E;IAED;;;;;OAKG;IACH,WAAW,CACV,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,iBAAiB,EACvB,OAAO,EAAE,OAAO,EAChB,YAAY,EAAE,OAAO,GACnB,MAAM,EAAE,CAiBV;CACD"}
@@ -60,9 +60,7 @@ export class PreviewBlockRenderer {
60
60
  const colorFn = (s) => this.theme.fg("accent", s);
61
61
  const boxedLines = renderBorderedBox(contentLines, boxWidth, colorFn, hidden);
62
62
  const showAffordance = focused && !notesVisible && this.cache.has(optionIndex);
63
- const affordance = showAffordance
64
- ? this.theme.fg("muted", NOTES_AFFORDANCE_TEXT)
65
- : "";
63
+ const affordance = showAffordance ? this.theme.fg("muted", NOTES_AFFORDANCE_TEXT) : "";
66
64
  return [...boxedLines, "", affordance];
67
65
  }
68
66
  }