@agents-ensemble/cli 0.5.3 → 0.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (117) hide show
  1. package/README.md +67 -0
  2. package/config.example.yaml +46 -0
  3. package/dist/async-operator-input.d.ts +1 -0
  4. package/dist/async-operator-input.d.ts.map +1 -1
  5. package/dist/async-operator-input.js +4 -4
  6. package/dist/async-operator-input.js.map +1 -1
  7. package/dist/display/create-session-display-sink.d.ts.map +1 -1
  8. package/dist/display/create-session-display-sink.js +1 -0
  9. package/dist/display/create-session-display-sink.js.map +1 -1
  10. package/dist/display/session-display-reducer.d.ts.map +1 -1
  11. package/dist/display/session-display-reducer.js +11 -0
  12. package/dist/display/session-display-reducer.js.map +1 -1
  13. package/dist/display/session-display-state.d.ts +5 -0
  14. package/dist/display/session-display-state.d.ts.map +1 -1
  15. package/dist/display/session-display-state.js +4 -0
  16. package/dist/display/session-display-state.js.map +1 -1
  17. package/dist/index.js +5 -2
  18. package/dist/index.js.map +1 -1
  19. package/dist/issue-command.d.ts +3 -0
  20. package/dist/issue-command.d.ts.map +1 -1
  21. package/dist/issue-command.js +34 -5
  22. package/dist/issue-command.js.map +1 -1
  23. package/dist/operator-message.d.ts +6 -0
  24. package/dist/operator-message.d.ts.map +1 -0
  25. package/dist/operator-message.js +17 -0
  26. package/dist/operator-message.js.map +1 -0
  27. package/dist/prompt-operator-input.d.ts +2 -2
  28. package/dist/prompt-operator-input.d.ts.map +1 -1
  29. package/dist/prompt-operator-input.js +5 -5
  30. package/dist/prompt-operator-input.js.map +1 -1
  31. package/dist/session-log-lines.d.ts.map +1 -1
  32. package/dist/session-log-lines.js +12 -4
  33. package/dist/session-log-lines.js.map +1 -1
  34. package/dist/session-sinks.d.ts.map +1 -1
  35. package/dist/session-sinks.js +1 -0
  36. package/dist/session-sinks.js.map +1 -1
  37. package/dist/tui/compute-operator-input-cursor-y.d.ts +14 -0
  38. package/dist/tui/compute-operator-input-cursor-y.d.ts.map +1 -1
  39. package/dist/tui/compute-operator-input-cursor-y.js +17 -0
  40. package/dist/tui/compute-operator-input-cursor-y.js.map +1 -1
  41. package/dist/tui/create-issue-session-tui-host.d.ts +7 -2
  42. package/dist/tui/create-issue-session-tui-host.d.ts.map +1 -1
  43. package/dist/tui/create-issue-session-tui-host.js +29 -11
  44. package/dist/tui/create-issue-session-tui-host.js.map +1 -1
  45. package/dist/tui/create-issue-session-tui-host.test.js +142 -1
  46. package/dist/tui/create-issue-session-tui-host.test.js.map +1 -1
  47. package/dist/tui/create-tui-telemetry-sink.d.ts +1 -1
  48. package/dist/tui/create-tui-telemetry-sink.d.ts.map +1 -1
  49. package/dist/tui/create-tui-telemetry-sink.js +5 -5
  50. package/dist/tui/create-tui-telemetry-sink.js.map +1 -1
  51. package/dist/tui/format-operator-context.d.ts +26 -4
  52. package/dist/tui/format-operator-context.d.ts.map +1 -1
  53. package/dist/tui/format-operator-context.js +73 -18
  54. package/dist/tui/format-operator-context.js.map +1 -1
  55. package/dist/tui/issue-session-tui-stream-cursor.test.d.ts +2 -0
  56. package/dist/tui/issue-session-tui-stream-cursor.test.d.ts.map +1 -0
  57. package/dist/tui/issue-session-tui-stream-cursor.test.js +47 -0
  58. package/dist/tui/issue-session-tui-stream-cursor.test.js.map +1 -0
  59. package/dist/tui/issue-session-tui-stream.d.ts +11 -0
  60. package/dist/tui/issue-session-tui-stream.d.ts.map +1 -0
  61. package/dist/tui/issue-session-tui-stream.js +117 -0
  62. package/dist/tui/issue-session-tui-stream.js.map +1 -0
  63. package/dist/tui/issue-session-tui-stream.test.d.ts +2 -0
  64. package/dist/tui/issue-session-tui-stream.test.d.ts.map +1 -0
  65. package/dist/tui/issue-session-tui-stream.test.js +380 -0
  66. package/dist/tui/issue-session-tui-stream.test.js.map +1 -0
  67. package/dist/tui/issue-session-tui.d.ts +24 -1
  68. package/dist/tui/issue-session-tui.d.ts.map +1 -1
  69. package/dist/tui/issue-session-tui.js +35 -26
  70. package/dist/tui/issue-session-tui.js.map +1 -1
  71. package/dist/tui/issue-session-tui.test.js +299 -23
  72. package/dist/tui/issue-session-tui.test.js.map +1 -1
  73. package/dist/tui/open-questions-pane.d.ts +2 -0
  74. package/dist/tui/open-questions-pane.d.ts.map +1 -1
  75. package/dist/tui/open-questions-pane.js +5 -3
  76. package/dist/tui/open-questions-pane.js.map +1 -1
  77. package/dist/tui/operator-text-area-emacs-keys.test.js +28 -25
  78. package/dist/tui/operator-text-area-emacs-keys.test.js.map +1 -1
  79. package/dist/tui/operator-text-area-keyboard-harness.d.ts +3 -2
  80. package/dist/tui/operator-text-area-keyboard-harness.d.ts.map +1 -1
  81. package/dist/tui/operator-text-area-keyboard-harness.js +3 -3
  82. package/dist/tui/operator-text-area-keyboard-harness.js.map +1 -1
  83. package/dist/tui/operator-text-area.d.ts.map +1 -1
  84. package/dist/tui/operator-text-area.js +2 -1
  85. package/dist/tui/operator-text-area.js.map +1 -1
  86. package/dist/tui/operator-text-area.test-double.d.ts.map +1 -1
  87. package/dist/tui/operator-text-area.test-double.js +3 -2
  88. package/dist/tui/operator-text-area.test-double.js.map +1 -1
  89. package/dist/tui/stream-layout.d.ts +20 -0
  90. package/dist/tui/stream-layout.d.ts.map +1 -0
  91. package/dist/tui/stream-layout.js +55 -0
  92. package/dist/tui/stream-layout.js.map +1 -0
  93. package/dist/tui/titled-border-line.d.ts +10 -1
  94. package/dist/tui/titled-border-line.d.ts.map +1 -1
  95. package/dist/tui/titled-border-line.js +62 -12
  96. package/dist/tui/titled-border-line.js.map +1 -1
  97. package/dist/tui/titled-border-pane.d.ts +5 -1
  98. package/dist/tui/titled-border-pane.d.ts.map +1 -1
  99. package/dist/tui/titled-border-pane.ink.test.js +67 -0
  100. package/dist/tui/titled-border-pane.ink.test.js.map +1 -1
  101. package/dist/tui/titled-border-pane.js +32 -3
  102. package/dist/tui/titled-border-pane.js.map +1 -1
  103. package/dist/tui/tui-layout-constants.d.ts +12 -0
  104. package/dist/tui/tui-layout-constants.d.ts.map +1 -1
  105. package/dist/tui/tui-layout-constants.js +12 -0
  106. package/dist/tui/tui-layout-constants.js.map +1 -1
  107. package/dist/tui/tui-layout-mode.d.ts +13 -0
  108. package/dist/tui/tui-layout-mode.d.ts.map +1 -0
  109. package/dist/tui/tui-layout-mode.js +16 -0
  110. package/dist/tui/tui-layout-mode.js.map +1 -0
  111. package/dist/tui/tui-view-model.d.ts +12 -1
  112. package/dist/tui/tui-view-model.d.ts.map +1 -1
  113. package/dist/tui/tui-view-model.js +25 -4
  114. package/dist/tui/tui-view-model.js.map +1 -1
  115. package/docs/config.md +170 -0
  116. package/docs/settings.md +161 -0
  117. package/package.json +8 -5
@@ -1 +1 @@
1
- {"version":3,"file":"issue-session-tui.js","sourceRoot":"","sources":["../../src/tui/issue-session-tui.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"issue-session-tui.js","sourceRoot":"","sources":["../../src/tui/issue-session-tui.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,oBAAoB,EAAkB,MAAM,OAAO,CAAC;AAChH,OAAO,EACL,mBAAmB,GAGpB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,+BAA+B,GAEhC,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,yBAAyB,EACzB,8BAA8B,EAC9B,4BAA4B,EAC5B,4BAA4B,GAK7B,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,4BAA4B,EAC5B,+BAA+B,EAC/B,8BAA8B,GAE/B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,gBAAgB,EAChB,uBAAuB,EACvB,qBAAqB,EACrB,eAAe,EACf,cAAc,EACd,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EACL,yBAAyB,EACzB,sBAAsB,EACtB,2BAA2B,EAC3B,2BAA2B,EAC3B,uCAAuC,GACxC,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EACL,2BAA2B,EAC3B,kBAAkB,GACnB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAS/E,SAAS,mBAAmB;IAC1B,OAAO,mBAAmB,CAAC;QACzB,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE;QACrC,QAAQ,EAAE,cAAc;QACxB,WAAW,EAAE,kBAAkB;KAChC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,EAC/B,IAAI,EACJ,KAAK,EACL,QAAQ,GAAG,KAAK,EAChB,KAAK,EACL,QAAQ,EACR,aAAa,GAAG,OAAO,GAQxB;IACC,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC3C,MAAM,UAAU,GAAG,QAAQ,CAAC,CAAC,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACrE,MAAM,SAAS,GACb,QAAQ,IAAI,UAAU,IAAI,aAAa,KAAK,MAAM;QAChD,CAAC,CAAC,oBAAoB,CAAC,QAAQ,EAAE,MAAM,CAAC;QACxC,CAAC,CAAC,SAAS,CAAC;IAChB,OAAO,CACL,4BACG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAC1B,KAAC,IAAI,IAA0B,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,YAC5D,KAAK,KAAK,CAAC,IAAI,SAAS,IAAI,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CACvE,8BACE,KAAC,IAAI,cAAE,SAAS,GAAQ,EACxB,KAAC,IAAI,cAAE,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,GAAQ,IAC3C,CACJ,CAAC,CAAC,CAAC,CACF,IAAI,CACL,IARQ,GAAG,KAAK,IAAI,IAAI,EAAE,CAStB,CACR,CAAC,GACD,CACJ,CAAC;AACJ,CAAC;AAED,SAAS,sBAAsB,CAAC,KAAuB;IACrD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,CACL,MAAC,IAAI,IAAC,KAAK,EAAC,QAAQ,EAAC,QAAQ,wBACzB,KAAK,SACF,CACR,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAG,yBAAyB,CAAC,KAAK,CAAC,CAAC;IAC/C,OAAO,KAAK,CAAC,CAAC,CAAC,MAAC,IAAI,IAAC,KAAK,EAAE,KAAK,kBAAI,KAAK,SAAS,CAAC,CAAC,CAAC,MAAC,IAAI,oBAAG,KAAK,SAAS,CAAC;AAC/E,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,EAAE,IAAI,EAAoC;IAClF,IAAI,IAAI,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;QAChC,OAAO,KAAC,IAAI,oBAAS,CAAC;IACxB,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;QAC/B,2DAA2D;QAC3D,OAAO,IAAI,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,KAAC,IAAI,oBAAS,CAAC,CAAC,CAAC,KAAC,IAAI,cAAE,IAAI,CAAC,IAAI,GAAQ,CAAC;IACtE,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;QAChC,IAAI,IAAI,CAAC,KAAK,KAAK,WAAW,EAAE,CAAC;YAC/B,OAAO,KAAC,IAAI,oBAAS,CAAC;QACxB,CAAC;QACD,OAAO,KAAC,IAAI,cAAE,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAC,GAAQ,CAAC;IAC3D,CAAC;IAED,IAAI,IAAI,CAAC,KAAK,KAAK,WAAW,EAAE,CAAC;QAC/B,OAAO,KAAC,IAAI,oBAAS,CAAC;IACxB,CAAC;IAED,OAAO,CACL,MAAC,IAAI,eACF,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAC,EACnC,MAAC,IAAI,oBAAG,IAAI,CAAC,IAAI,IAAQ,IACpB,CACR,CAAC;AACJ,CAAC;AAED,SAAS,+BAA+B,CACtC,IAAY,EACZ,MAAwE;IAExE,IAAI,MAAM,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QAChC,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAChC,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,IAAI,UAAU,CAAC;YAC5C,OAAO,cAAc,KAAK,EAAE,CAAC;QAC/B,CAAC;QACD,OAAO,cAAc,MAAM,CAAC,MAAM,EAAE,CAAC;IACvC,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACnD,OAAO,GAAG,IAAI,KAAK,MAAM,CAAC,IAAI,eAAe,MAAM,CAAC,QAAQ,GAAG,CAAC;IAClE,CAAC;IACD,OAAO,GAAG,IAAI,KAAK,MAAM,CAAC,IAAI,MAAM,MAAM,CAAC,MAAM,EAAE,CAAC;AACtD,CAAC;AAED,SAAS,iBAAiB,CACxB,OAAkE;IAElE,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE;QAC5C,IAAI,KAAK,KAAK,WAAW,EAAE,CAAC;YAC1B,OAAO,CAAC,CAAC,CAAC;QACZ,CAAC;QACD,IAAI,KAAK,KAAK,WAAW,EAAE,CAAC;YAC1B,OAAO,CAAC,CAAC;QACX,CAAC;QACD,OAAO,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,EAC/B,OAAO,EACP,YAAY,EACZ,MAAM,GAAG,kBAAkB,EAC3B,QAAQ,EACR,aAAa,GAAG,OAAO,GAOxB;IACC,MAAM,OAAO,GAAG,iBAAiB,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;IAC3D,MAAM,eAAe,GAAG,QAAQ,CAAC,CAAC,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC1E,MAAM,kBAAkB,GACtB,YAAY,IAAI,CAAC,YAAY,CAAC,IAAI,IAAI,YAAY,CAAC,cAAc,GAAG,CAAC,CAAC;QACpE,CAAC,CAAC,6BAA6B,YAAY,CAAC,cAAc,KAAK;QAC/D,CAAC,CAAC,SAAS,CAAC;IAChB,OAAO,CACL,KAAC,gBAAgB,IACf,KAAK,EAAE,iBAAiB,EACxB,WAAW,EAAE,kBAAkB,EAC/B,UAAU,EAAE,eAAe,EAC3B,kBAAkB,EAAE,QAAQ,EAC5B,kBAAkB,EAAE,aAAa,EACjC,WAAW,EAAC,OAAO,EACnB,WAAW,EAAC,MAAM,EAClB,QAAQ,EAAE,cAAc,EACxB,MAAM,EAAE,MAAM,YAEb,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CACtB,KAAC,IAAI,IAAC,QAAQ,2CAAa,CAC5B,CAAC,CAAC,CAAC,CACF,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAC9B,KAAC,IAAI,cAAa,+BAA+B,CAAC,IAAI,EAAE,MAAM,CAAC,IAApD,IAAI,CAAwD,CACxE,CAAC,CACH,GACgB,CACpB,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,EACzB,WAAW,EACX,YAAY,EACZ,UAAU,EACV,eAAe,GAMhB;IACC,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IAChC,MAAM,EAAE,MAAM,EAAE,qBAAqB,EAAE,WAAW,EAAE,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC;IACjF,MAAM,cAAc,GAAG,eAAe,KAAK,CAAC,CAAC;IAC7C,MAAM,UAAU,GAAG,cAAc;QAC/B,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,sDAAsD,CAAC;IAC3D,MAAM,qBAAqB,GAAG,uCAAuC,CAAC,UAAU,CAAC,CAAC;IAClF,MAAM,YAAY,GAChB,WAAW,IAAI,qBAAqB,GAAG,CAAC;QACtC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;QAChD,CAAC,CAAC,qBAAqB,CAAC;IAC5B,MAAM,YAAY,GAAG,OAAO,CAC1B,GAAG,EAAE,CAAC,4BAA4B,CAAC,WAAW,EAAE,YAAY,CAAC,EAC7D,CAAC,WAAW,EAAE,YAAY,CAAC,CAC5B,CAAC;IACF,MAAM,YAAY,GAAG,4BAA4B,CAC/C,YAAY,EACZ,YAAY,EACZ,eAAe,CAChB,CAAC;IAEF,OAAO,CACL,KAAC,gBAAgB,IACf,KAAK,EAAE,eAAe,EACtB,WAAW,EAAE,UAAU,EACvB,WAAW,EAAC,OAAO,EACnB,WAAW,EAAC,OAAO,EACnB,QAAQ,EAAE,cAAc,EACxB,MAAM,EAAE,UAAU,YAElB,KAAC,GAAG,IAAC,GAAG,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,EAAE,aAAa,EAAC,QAAQ,EAAC,QAAQ,EAAC,QAAQ,YACxE,WAAW,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAC1B,KAAC,IAAI,IAAC,QAAQ,6DAAgB,CAC/B,CAAC,CAAC,CAAC,CACF,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAChC,KAAC,yBAAyB,IAA2B,IAAI,EAAE,IAAI,IAA/B,YAAY,KAAK,EAAE,CAAgB,CACpE,CAAC,CACH,GACG,GACW,CACpB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,EAChC,MAAM,GAGP;IACC,IAAI,MAAM,CAAC,UAAU,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CACL,KAAC,gBAAgB,IACf,KAAK,EAAE,MAAM,CAAC,SAAS,EACvB,WAAW,EAAE,MAAM,CAAC,WAAW,EAC/B,WAAW,EAAC,OAAO,EACnB,WAAW,EAAC,SAAS,EACrB,QAAQ,EAAE,cAAc,EACxB,MAAM,EAAE,MAAM,CAAC,UAAU,EACzB,SAAS,EAAE,KAAK,YAEf,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAC7B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC,CAClC,KAAC,IAAI,IAAiC,QAAQ,EAAE,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,YAC7E,IAAI,IADI,GAAG,IAAI,CAAC,EAAE,IAAI,SAAS,EAAE,CAE7B,CACR,CAAC,CACH,GACgB,CACpB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,EAC9B,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,aAAa,GAAG,MAAM,GACD;IACrB,MAAM,QAAQ,GAAG,oBAAoB,CACnC,SAAS,CAAC,SAAS,EACnB,SAAS,CAAC,WAAW,EACrB,SAAS,CAAC,WAAW,CACtB,CAAC;IACF,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IACjD,MAAM,CAAC,qBAAqB,EAAE,wBAAwB,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IACtE,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC1D,MAAM,CAAC,qBAAqB,EAAE,wBAAwB,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IACtE,MAAM,YAAY,GAAG,mBAAmB,EAAE,CAAC;IAC3C,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;IAC/C,MAAM,cAAc,GAAG,YAAY,CAAC;IACpC,MAAM,oBAAoB,GAAG,2BAA2B,CAAC,YAAY,CAAC,CAAC;IACvE,MAAM,aAAa,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IACpD,MAAM,mBAAmB,GAAG,OAAO,CACjC,GAAG,EAAE,CACH,8BAA8B,CAAC;QAC7B,aAAa;QACb,aAAa,EAAE,qBAAqB;QACpC,YAAY;QACZ,YAAY;KACb,CAAC,EACJ,CAAC,aAAa,EAAE,qBAAqB,EAAE,YAAY,EAAE,YAAY,CAAC,CACnE,CAAC;IACF,MAAM,gBAAgB,GAAG,aAAa,CAAC,mBAAmB,CAAC,aAAa,CAAC,CAAC;IAC1E,MAAM,oBAAoB,GAAG,+BAA+B,CAAC;QAC3D,aAAa;QACb,SAAS,EAAE,gBAAgB;YACzB,CAAC,CAAC;gBACE,EAAE,EAAE,gBAAgB,CAAC,EAAE;gBACvB,KAAK,EAAE,mBAAmB,CAAC,aAAa;gBACxC,KAAK,EAAE,aAAa,CAAC,MAAM;aAC5B;YACH,CAAC,CAAC,SAAS;QACb,eAAe,EAAE,QAAQ,CAAC,eAAe;QACzC,YAAY,EAAE,QAAQ,CAAC,YAAY;KACpC,CAAC,CAAC;IACH,MAAM,uBAAuB,GAC3B,oBAAoB,CAAC,IAAI,KAAK,eAAe,CAAC,CAAC,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;IACrF,MAAM,aAAa,GAAG,oBAAoB,CAAC,SAAS,CAAC,MAAM,CACzD,CAAC,SAAS,EAAE,QAAQ,EAAE,EAAE,CAAC,SAAS,GAAG,eAAe,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC,MAAM,EACnF,CAAC,CACF,CAAC;IACF,MAAM,4BAA4B,GAAG,IAAI,CAAC,GAAG,CAAC,qBAAqB,EAAE,oBAAoB,CAAC,CAAC;IAC3F,MAAM,eAAe,GAAG,sBAAsB,CAAC;QAC7C,aAAa;QACb,qBAAqB,EAAE,4BAA4B;KACpD,CAAC,CAAC;IACH,MAAM,kBAAkB,GAAG,yBAAyB,CAAC;QACnD,YAAY;QACZ,aAAa;QACb,qBAAqB,EAAE,4BAA4B;QACnD,uBAAuB;KACxB,CAAC,CAAC;IACH,MAAM,gBAAgB,GAAG,uCAAuC,CAAC,kBAAkB,CAAC,CAAC;IACrF,MAAM,gBAAgB,GAAG,OAAO,CAC9B,GAAG,EAAE,CAAC,4BAA4B,CAAC,QAAQ,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC,MAAM,EAC7E,CAAC,QAAQ,CAAC,WAAW,EAAE,YAAY,CAAC,CACrC,CAAC;IACF,MAAM,kBAAkB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,gBAAgB,GAAG,gBAAgB,CAAC,CAAC;IAC5E,MAAM,WAAW,GAAG;QAClB,CAAC,EAAE,2BAA2B,CAAC,cAAc,CAAC;QAC9C,CAAC,EAAE,2BAA2B,CAAC;YAC7B,YAAY;YACZ,aAAa;YACb,qBAAqB,EAAE,4BAA4B;YACnD,uBAAuB;YACvB,gBAAgB,EAAE,CAAC;SACpB,CAAC;KACH,CAAC;IACF,MAAM,4BAA4B,GAAG,WAAW,CAAC,CAAC,SAAiB,EAAE,EAAE;QACrE,wBAAwB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;IACnD,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,SAAS,CAAC,GAAG,EAAE;QACb,kBAAkB,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC,CAAC;IACzE,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC;IAEzB,SAAS,CAAC,GAAG,EAAE;QACb,wBAAwB,CAAC,CAAC,OAAO,EAAE,EAAE,CACnC,+BAA+B,CAAC,OAAO,EAAE,aAAa,CAAC,MAAM,CAAC,CAC/D,CAAC;IACJ,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;IAEpB,MAAM,iBAAiB,GAAG,CAAC,MAA+B,EAAE,EAAE;QAC5D,kBAAkB,CAAC,CAAC,OAAO,EAAE,EAAE,CAC7B,8BAA8B,CAC5B,OAAO,EACP,MAAM,EACN,gBAAgB,EAChB,kBAAkB,CACnB,CACF,CAAC;IACJ,CAAC,CAAC;IAEF,QAAQ,CAAC,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;QACvB,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;YAC1C,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;gBAChB,wBAAwB,CAAC,CAAC,OAAO,EAAE,EAAE,CACnC,4BAA4B,CAAC,OAAO,EAAE,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,CAClE,CAAC;gBACF,OAAO;YACT,CAAC;YACD,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;gBAClB,wBAAwB,CAAC,CAAC,OAAO,EAAE,EAAE,CACnC,4BAA4B,CAAC,OAAO,EAAE,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,CACpE,CAAC;gBACF,OAAO;YACT,CAAC;QACH,CAAC;QAED,MAAM,kBAAkB,GAAG,GAAG,CAAC,IAAI,CAAC;QACpC,MAAM,qBAAqB,GAAG,UAAU,CAAC,MAAM,KAAK,CAAC,CAAC;QACtD,IAAI,CAAC,kBAAkB,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAClD,OAAO;QACT,CAAC;QAED,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YACf,iBAAiB,CAAC,QAAQ,CAAC,CAAC;YAC5B,OAAO;QACT,CAAC;QACD,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;YACjB,iBAAiB,CAAC,UAAU,CAAC,CAAC;YAC9B,OAAO;QACT,CAAC;QACD,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;YACb,iBAAiB,CAAC,MAAM,CAAC,CAAC;YAC1B,OAAO;QACT,CAAC;QACD,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC;YACZ,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,YAAY,GAAG,CAAC,KAAa,EAAE,EAAE;QACrC,IAAI,QAAQ,CAAC,YAAY,EAAE,CAAC;YAC1B,OAAO;QACT,CAAC;QAED,MAAM,OAAO,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;QAC1C,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO;QACT,CAAC;QAED,QAAQ,CACN,OAAO,EACP,gBAAgB,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC;YAC1C,CAAC,CAAC,EAAE,oBAAoB,EAAE,gBAAgB,CAAC,EAAE,EAAE;YAC/C,CAAC,CAAC,SAAS,CACd,CAAC;QACF,aAAa,CAAC,EAAE,CAAC,CAAC;QAClB,wBAAwB,CAAC,CAAC,CAAC,CAAC;IAC9B,CAAC,CAAC;IAEF,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,MAAM,EAAE,YAAY,aAC9C,KAAC,gBAAgB,IACf,OAAO,EAAE,QAAQ,CAAC,YAAY,CAAC,OAAO,EACtC,YAAY,EAAE,QAAQ,CAAC,YAAY,CAAC,YAAY,EAChD,QAAQ,EAAE,QAAQ,EAClB,aAAa,EAAE,aAAa,GAC5B,EACF,KAAC,iBAAiB,IAChB,WAAW,EAAE,QAAQ,CAAC,WAAW,EACjC,YAAY,EAAE,YAAY,EAC1B,UAAU,EAAE,kBAAkB,EAC9B,eAAe,EAAE,eAAe,GAChC,EACD,oBAAoB,CAAC,IAAI,KAAK,eAAe,CAAC,CAAC,CAAC,CAC/C,KAAC,iBAAiB,IAAC,MAAM,EAAE,mBAAmB,GAAI,CACnD,CAAC,CAAC,CAAC,IAAI,EACR,MAAC,gBAAgB,IACf,KAAK,EAAE,gBAAgB,EACvB,WAAW,EAAC,QAAQ,EACpB,WAAW,EAAE,uBAAuB,EACpC,QAAQ,EAAE,cAAc,EACxB,MAAM,EAAE,eAAe,aAEtB,oBAAoB,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE,CAAC,CACvD,KAAC,gBAAgB,IAEf,IAAI,EAAE,QAAQ,EACd,KAAK,EAAE,YAAY,EACnB,KAAK,EAAE,qBAAqB,IAHvB,gBAAgB,KAAK,EAAE,CAI5B,CACH,CAAC,EACF,KAAC,gBAAgB,IACf,KAAK,EAAE,UAAU,EACjB,QAAQ,EAAE,aAAa,EACvB,QAAQ,EAAE,YAAY,EACtB,KAAK,EAAE,CAAC,QAAQ,CAAC,YAAY,EAC7B,YAAY,EAAE,YAAY,EAC1B,YAAY,EAAE,cAAc,EAC5B,eAAe,EAAE,oBAAoB,EACrC,wBAAwB,EAAE,4BAA4B,EACtD,WAAW,EAAE,WAAW,GACxB,IACe,IACf,CACP,CAAC;AACJ,CAAC"}
@@ -37,6 +37,7 @@ function fillScrollableHarnessLog(viewModel, count = 30) {
37
37
  }
38
38
  const SCROLL_HINT = 'PgUp/PgDn でスクロール';
39
39
  const ISSUE_URL = 'https://github.com/otolab/agents-ensemble/issues/249';
40
+ const NON_CANONICAL_ISSUE_URL = 'http://github.com/otolab/agents-ensemble/issues/249/';
40
41
  function createOpenQuestion(overrides) {
41
42
  return {
42
43
  responseType: 'text',
@@ -90,6 +91,7 @@ describe('IssueSessionTui', () => {
90
91
  askedAt: 1,
91
92
  },
92
93
  ],
94
+ dispatchHold: { hold: false, heldEventCount: 0 },
93
95
  });
94
96
  viewModel.appendActivityLog('operator', 'operator ping');
95
97
  viewModel.appendActivityLog('conductor', 'conductor says hi');
@@ -107,13 +109,37 @@ describe('IssueSessionTui', () => {
107
109
  expect(frame).toContain('operator>');
108
110
  expect(frame).toContain(INPUT_PANE_TITLE);
109
111
  });
110
- it('shows post-loop hint in input area', () => {
112
+ it('shows dispatch hold count in the Workers pane title', () => {
113
+ const viewModel = createTuiViewModel();
114
+ viewModel.setDisplayState({
115
+ workers: {},
116
+ conductorOutput: null,
117
+ openQuestions: [],
118
+ dispatchHold: { hold: true, heldEventCount: 3 },
119
+ });
120
+ const { lastFrame } = render(_jsx(IssueSessionTui, { viewModel: viewModel, onSubmit: () => { } }));
121
+ expect(lastFrame() ?? '').toContain('conductor dispatch 保留中(3 件)');
122
+ });
123
+ it('keeps pending held events visible after dispatch hold release', () => {
124
+ const viewModel = createTuiViewModel();
125
+ viewModel.setDisplayState({
126
+ workers: {},
127
+ conductorOutput: null,
128
+ openQuestions: [],
129
+ dispatchHold: { hold: false, heldEventCount: 1 },
130
+ });
131
+ const { lastFrame } = render(_jsx(IssueSessionTui, { viewModel: viewModel, onSubmit: () => { } }));
132
+ expect(lastFrame() ?? '').toContain('conductor dispatch 保留中(1 件)');
133
+ });
134
+ it('shows post-loop prompt in input area without waiting status', () => {
111
135
  const viewModel = createTuiViewModel();
112
136
  viewModel.setPostLoopWaiting(true);
113
137
  const { lastFrame } = render(_jsx(IssueSessionTui, { viewModel: viewModel, onSubmit: () => { } }));
114
- expect(lastFrame() ?? '').toContain('post-loop 待機中');
138
+ const frame = lastFrame() ?? '';
139
+ expect(frame).toContain('追加指示を入力するか /exit で終了');
140
+ expect(frame).not.toContain('post-loop 待機中');
115
141
  });
116
- it('keeps the current issue link across context hint lifecycle states', async () => {
142
+ it('shows the issue link in the workers pane header and prompt-only operator input', async () => {
117
143
  const viewModel = createTuiViewModel();
118
144
  viewModel.setOperatorContext({
119
145
  conductorTurn: 1,
@@ -121,16 +147,21 @@ describe('IssueSessionTui', () => {
121
147
  maxTurns: null,
122
148
  openQuestions: [],
123
149
  });
124
- const { lastFrame } = render(_jsx(IssueSessionTui, { viewModel: viewModel, issueUrl: ISSUE_URL, onSubmit: () => { } }));
150
+ const { lastFrame } = render(_jsx(IssueSessionTui, { viewModel: viewModel, issueUrl: NON_CANONICAL_ISSUE_URL, onSubmit: () => { } }));
125
151
  const issueLabel = 'otolab/agents-ensemble#249';
126
152
  const osc8Open = `\u001b]8;;${ISSUE_URL}\u0007`;
127
- expect(lastFrame() ?? '').toContain(issueLabel);
128
- expect(lastFrame() ?? '').toContain(osc8Open);
129
- expect(lastFrame() ?? '').toContain('自律ターン 2/∞');
153
+ const nonCanonicalOsc8Open = `\u001b]8;;${NON_CANONICAL_ISSUE_URL}\u0007`;
154
+ const frame = lastFrame() ?? '';
155
+ expect(frame).toContain(issueLabel);
156
+ expect(frame).toContain(osc8Open);
157
+ expect(frame).not.toContain(nonCanonicalOsc8Open);
158
+ expect(frame).toContain('任意のタイミングで入力 · /exit で終了');
159
+ expect(frame).not.toContain(`${issueLabel} — 任意のタイミングで入力 · /exit で終了`);
130
160
  viewModel.setDisplayState({
131
161
  workers: {},
132
162
  conductorOutput: null,
133
163
  openQuestions: [createOpenQuestion({ id: 'inq-1', question: 'Continue?' })],
164
+ dispatchHold: { hold: false, heldEventCount: 0 },
134
165
  });
135
166
  viewModel.setOperatorContext({
136
167
  conductorTurn: 1,
@@ -140,17 +171,37 @@ describe('IssueSessionTui', () => {
140
171
  });
141
172
  await flushInkStdin();
142
173
  expect(lastFrame() ?? '').toContain(issueLabel);
143
- expect(lastFrame() ?? '').toContain('— inq-1');
174
+ expect(lastFrame() ?? '').toContain(osc8Open);
175
+ expect(lastFrame() ?? '').not.toContain(nonCanonicalOsc8Open);
176
+ expect(lastFrame() ?? '').toContain('inq-1 (1/1) への回答');
177
+ viewModel.setDisplayState({
178
+ workers: {},
179
+ conductorOutput: null,
180
+ openQuestions: [],
181
+ dispatchHold: { hold: false, heldEventCount: 0 },
182
+ });
183
+ viewModel.setOperatorContext({
184
+ conductorTurn: 1,
185
+ autonomousTurns: 2,
186
+ maxTurns: null,
187
+ openQuestions: [],
188
+ });
144
189
  viewModel.setPostLoopWaiting(true);
145
190
  await flushInkStdin();
146
191
  expect(lastFrame() ?? '').toContain(issueLabel);
147
- expect(lastFrame() ?? '').toContain('— post-loop 待機中');
192
+ expect(lastFrame() ?? '').toContain(osc8Open);
193
+ expect(lastFrame() ?? '').not.toContain(nonCanonicalOsc8Open);
194
+ expect(lastFrame() ?? '').toContain('追加指示を入力するか /exit で終了');
195
+ expect(lastFrame() ?? '').not.toContain('post-loop 待機中');
148
196
  viewModel.setShuttingDown(true);
149
197
  await flushInkStdin();
150
198
  expect(lastFrame() ?? '').toContain(issueLabel);
151
- expect(lastFrame() ?? '').toContain('— 終了しています…');
199
+ expect(lastFrame() ?? '').toContain(osc8Open);
200
+ expect(lastFrame() ?? '').not.toContain(nonCanonicalOsc8Open);
201
+ expect(lastFrame() ?? '').toContain('終了しています…');
202
+ expect(lastFrame() ?? '').not.toContain(`${issueLabel} — 終了しています…`);
152
203
  });
153
- it('renders only the issue label when OSC 8 is unavailable', () => {
204
+ it('renders only the issue label in the workers header when OSC 8 is unavailable', () => {
154
205
  const viewModel = createTuiViewModel();
155
206
  viewModel.setOperatorContext({
156
207
  conductorTurn: 1,
@@ -163,24 +214,135 @@ describe('IssueSessionTui', () => {
163
214
  expect(frame).toContain('otolab/agents-ensemble#249');
164
215
  expect(frame).not.toContain('\u001b]8;;');
165
216
  });
166
- it('does not split an OSC 8 sequence when the issue label cannot fit', () => {
217
+ it('renders the canonical Issue URL in the workers header with URL fallback', () => {
218
+ const viewModel = createTuiViewModel();
219
+ const { lastFrame } = render(_jsx(IssueSessionTui, { viewModel: viewModel, issueUrl: NON_CANONICAL_ISSUE_URL, issueLinkMode: "url", onSubmit: () => { } }));
220
+ const frame = lastFrame() ?? '';
221
+ expect(frame).toContain(`${ISSUE_URL} ─╮`);
222
+ expect(frame).not.toContain('otolab/agents-ensemble#249');
223
+ expect(frame).not.toContain('\u001b]8;;');
224
+ });
225
+ it('keeps the canonical Issue URL in URL fallback at a narrow width', () => {
226
+ Object.defineProperty(process.stdout, 'columns', {
227
+ configurable: true,
228
+ value: 24,
229
+ });
230
+ const viewModel = createTuiViewModel();
231
+ const { lastFrame } = render(_jsx(IssueSessionTui, { viewModel: viewModel, issueUrl: NON_CANONICAL_ISSUE_URL, issueLinkMode: "url", onSubmit: () => { } }));
232
+ const workersBorderLine = (lastFrame() ?? '').split('\n').find((line) => line.includes('Workers')) ?? '';
233
+ expect(workersBorderLine).toContain(ISSUE_URL);
234
+ expect(workersBorderLine).toContain(`${ISSUE_URL} ─╮`);
235
+ expect(workersBorderLine).not.toContain('https:/…');
236
+ expect(workersBorderLine).not.toContain('\u001b]8;;');
237
+ });
238
+ it('keeps the canonical Issue URL in URL fallback across context lifecycle states', async () => {
167
239
  Object.defineProperty(process.stdout, 'columns', {
168
240
  configurable: true,
169
- value: 20,
241
+ value: 24,
170
242
  });
171
243
  const viewModel = createTuiViewModel();
244
+ const { lastFrame } = render(_jsx(IssueSessionTui, { viewModel: viewModel, issueUrl: NON_CANONICAL_ISSUE_URL, issueLinkMode: "url", onSubmit: () => { } }));
245
+ const expectCanonicalIssueUrl = () => {
246
+ const workersBorderLine = (lastFrame() ?? '').split('\n').find((line) => line.includes('Workers')) ?? '';
247
+ expect(workersBorderLine).toContain(ISSUE_URL);
248
+ expect(workersBorderLine).toContain(`${ISSUE_URL} ─╮`);
249
+ expect(workersBorderLine).not.toContain('https:/…');
250
+ expect(workersBorderLine).not.toContain('\u001b]8;;');
251
+ };
252
+ expectCanonicalIssueUrl();
253
+ const question = createOpenQuestion({ id: 'inq-1', question: 'Continue?' });
254
+ viewModel.setDisplayState({
255
+ workers: {},
256
+ conductorOutput: null,
257
+ openQuestions: [question],
258
+ dispatchHold: { hold: false, heldEventCount: 0 },
259
+ });
260
+ viewModel.setOperatorContext({
261
+ conductorTurn: 1,
262
+ autonomousTurns: 0,
263
+ maxTurns: null,
264
+ openQuestions: [question],
265
+ });
266
+ await flushInkStdin();
267
+ expectCanonicalIssueUrl();
268
+ expect(lastFrame() ?? '').toContain('inq-1 (1/1)');
269
+ expect(lastFrame() ?? '').toContain('への回答');
270
+ viewModel.setDisplayState({
271
+ workers: {},
272
+ conductorOutput: null,
273
+ openQuestions: [],
274
+ dispatchHold: { hold: false, heldEventCount: 0 },
275
+ });
172
276
  viewModel.setOperatorContext({
173
277
  conductorTurn: 1,
174
278
  autonomousTurns: 0,
175
279
  maxTurns: null,
176
280
  openQuestions: [],
177
281
  });
178
- const { lastFrame } = render(_jsx(IssueSessionTui, { viewModel: viewModel, issueUrl: ISSUE_URL, onSubmit: () => { } }));
282
+ viewModel.setPostLoopWaiting(true);
283
+ await flushInkStdin();
284
+ expectCanonicalIssueUrl();
285
+ expect(lastFrame() ?? '').toContain('追加指示を入力するか');
286
+ expect(lastFrame() ?? '').toContain('/exit で終了');
287
+ viewModel.setShuttingDown(true);
288
+ await flushInkStdin();
289
+ expectCanonicalIssueUrl();
290
+ expect(lastFrame() ?? '').toContain('終了しています…');
291
+ });
292
+ it('preserves the canonical Issue URL when dispatch hold adds a title suffix', () => {
293
+ const viewModel = createTuiViewModel();
294
+ viewModel.setDisplayState({
295
+ workers: {},
296
+ conductorOutput: null,
297
+ openQuestions: [],
298
+ dispatchHold: { hold: true, heldEventCount: 3 },
299
+ });
300
+ const { lastFrame } = render(_jsx(IssueSessionTui, { viewModel: viewModel, issueUrl: NON_CANONICAL_ISSUE_URL, issueLinkMode: "url", onSubmit: () => { } }));
301
+ const workersBorderLine = (lastFrame() ?? '').split('\n').find((line) => line.includes('Workers')) ?? '';
302
+ expect(workersBorderLine).toContain(ISSUE_URL);
303
+ expect(workersBorderLine).toContain(`${ISSUE_URL} ─╮`);
304
+ expect(workersBorderLine).not.toContain('https://github.com/otolab/a…');
305
+ expect(workersBorderLine).not.toContain('\u001b]8;;');
306
+ });
307
+ it('truncates the issue label in the workers header on a narrow terminal', () => {
308
+ Object.defineProperty(process.stdout, 'columns', {
309
+ configurable: true,
310
+ value: 24,
311
+ });
312
+ const viewModel = createTuiViewModel();
313
+ viewModel.setOperatorContext({
314
+ conductorTurn: 1,
315
+ autonomousTurns: 0,
316
+ maxTurns: null,
317
+ openQuestions: [],
318
+ });
319
+ const { lastFrame } = render(_jsx(IssueSessionTui, { viewModel: viewModel, issueUrl: ISSUE_URL, issueLinkMode: "label", onSubmit: () => { } }));
179
320
  const frame = lastFrame() ?? '';
180
- expect(frame).toContain('otolab/agents-en');
181
- expect(frame).toContain('semble#249');
321
+ const workersBorderLine = frame.split('\n')[0] ?? '';
322
+ expect(workersBorderLine).toContain('Workers');
323
+ expect(workersBorderLine).toContain('…');
182
324
  expect(frame).not.toContain('\u001b]8;;');
183
325
  });
326
+ it('closes the narrow Workers header Issue hyperlink before the border', () => {
327
+ Object.defineProperty(process.stdout, 'columns', {
328
+ configurable: true,
329
+ value: 24,
330
+ });
331
+ const viewModel = createTuiViewModel();
332
+ const { lastFrame } = render(_jsx(IssueSessionTui, { viewModel: viewModel, issueUrl: NON_CANONICAL_ISSUE_URL, onSubmit: () => { } }));
333
+ const workersBorderLine = (lastFrame() ?? '').split('\n').find((line) => line.includes('Workers')) ?? '';
334
+ const canonicalOsc8Open = `\u001b]8;;${ISSUE_URL}\u0007`;
335
+ const osc8Close = '\u001b]8;;\u0007';
336
+ const linkOpenIndex = workersBorderLine.indexOf(canonicalOsc8Open);
337
+ const linkCloseIndex = workersBorderLine.indexOf(osc8Close, linkOpenIndex + canonicalOsc8Open.length);
338
+ const closingBorderIndex = workersBorderLine.lastIndexOf('─╮');
339
+ expect(workersBorderLine).toContain(`${canonicalOsc8Open}otolab/a…${osc8Close}`);
340
+ expect(workersBorderLine).not.toContain(`\u001b]8;;${NON_CANONICAL_ISSUE_URL}\u0007`);
341
+ expect(linkCloseIndex).toBeGreaterThan(linkOpenIndex);
342
+ expect(linkCloseIndex).toBeLessThan(closingBorderIndex);
343
+ expect(workersBorderLine.slice(closingBorderIndex)).not.toContain(osc8Close);
344
+ expect(workersBorderLine.match(/\u001b\]8;;/g)).toHaveLength(2);
345
+ });
184
346
  it('aligns IME cursor coordinates with the rendered operator input line', () => {
185
347
  const terminalRows = 24;
186
348
  const terminalColumns = 80;
@@ -207,7 +369,7 @@ describe('IssueSessionTui', () => {
207
369
  });
208
370
  const contextHint = formatOperatorContextHint(viewModel.getSnapshot().operatorContext);
209
371
  const hintLineCount = wrapTextToWidth(contextHint, contentWidth).length;
210
- const openQuestionsPaneHeight = OPEN_QUESTIONS_PANE_MIN_HEIGHT;
372
+ const openQuestionsPaneHeight = 0;
211
373
  const expectedInputLineIndex = computeOperatorInputLineIndex({
212
374
  terminalRows,
213
375
  hintLineCount,
@@ -250,7 +412,7 @@ describe('IssueSessionTui', () => {
250
412
  });
251
413
  const contextHint = formatOperatorContextHint(viewModel.getSnapshot().operatorContext);
252
414
  const hintLineCount = wrapTextToWidth(contextHint, contentWidth).length;
253
- const openQuestionsPaneHeight = OPEN_QUESTIONS_PANE_MIN_HEIGHT;
415
+ const openQuestionsPaneHeight = 0;
254
416
  const expectedInputLineIndex = computeOperatorInputLineIndex({
255
417
  terminalRows,
256
418
  hintLineCount,
@@ -277,6 +439,7 @@ describe('IssueSessionTui', () => {
277
439
  },
278
440
  conductorOutput: null,
279
441
  openQuestions: [],
442
+ dispatchHold: { hold: false, heldEventCount: 0 },
280
443
  });
281
444
  const { lastFrame: thinkingFrame, unmount: unmountThinking } = render(_jsx(IssueSessionTui, { viewModel: viewModel, onSubmit: () => { } }));
282
445
  expect(thinkingFrame() ?? '').toContain('conductor: thinking');
@@ -288,6 +451,7 @@ describe('IssueSessionTui', () => {
288
451
  },
289
452
  conductorOutput: 'done',
290
453
  openQuestions: [],
454
+ dispatchHold: { hold: false, heldEventCount: 0 },
291
455
  });
292
456
  const { lastFrame: idleFrame } = render(_jsx(IssueSessionTui, { viewModel: viewModel, onSubmit: () => { } }));
293
457
  expect(idleFrame() ?? '').toContain('conductor: idle');
@@ -322,6 +486,7 @@ describe('IssueSessionTui', () => {
322
486
  askedAt: 1,
323
487
  },
324
488
  ],
489
+ dispatchHold: { hold: false, heldEventCount: 0 },
325
490
  });
326
491
  viewModel.setOperatorContext({
327
492
  conductorTurn: 1,
@@ -338,13 +503,98 @@ describe('IssueSessionTui', () => {
338
503
  expectNoContentOnBorderLines(frame);
339
504
  expect(frame.split('\n')).toHaveLength(terminalRows);
340
505
  });
341
- it('shows empty-state placeholders when no session activity yet', () => {
506
+ it('shows the no-question input mode when no session activity yet', () => {
342
507
  const viewModel = createTuiViewModel();
343
508
  const { lastFrame } = render(_jsx(IssueSessionTui, { viewModel: viewModel, onSubmit: () => { } }));
344
509
  const frame = lastFrame() ?? '';
345
510
  expect(frame).toContain('(待機中)');
346
511
  expect(frame).toContain('(活動ログなし)');
347
- expect(frame).toContain('(未回答なし)');
512
+ expect(frame).not.toContain('Open questions');
513
+ expect(frame).not.toContain('(未回答なし)');
514
+ expect(frame).toContain('任意のタイミングで入力 · /exit で終了');
515
+ });
516
+ it('switches the lower UI between no-question and question modes', async () => {
517
+ const viewModel = createTuiViewModel();
518
+ const { lastFrame } = render(_jsx(IssueSessionTui, { viewModel: viewModel, onSubmit: () => { } }));
519
+ expect(lastFrame() ?? '').not.toContain('Open questions');
520
+ expect(lastFrame() ?? '').toContain('任意のタイミングで入力 · /exit で終了');
521
+ viewModel.setDisplayState({
522
+ workers: {},
523
+ conductorOutput: null,
524
+ openQuestions: [createOpenQuestion({ id: 'inq-1', question: 'Answer?' })],
525
+ dispatchHold: { hold: false, heldEventCount: 0 },
526
+ });
527
+ await flushInkStdin();
528
+ expect(lastFrame() ?? '').toContain('Open questions');
529
+ expect(lastFrame() ?? '').toContain('inq-1 (1/1) への回答');
530
+ expect(lastFrame() ?? '').not.toContain('任意のタイミングで入力 · /exit で終了');
531
+ viewModel.setDisplayState({
532
+ workers: {},
533
+ conductorOutput: null,
534
+ openQuestions: [],
535
+ dispatchHold: { hold: false, heldEventCount: 0 },
536
+ });
537
+ await flushInkStdin();
538
+ expect(lastFrame() ?? '').not.toContain('Open questions');
539
+ expect(lastFrame() ?? '').toContain('任意のタイミングで入力 · /exit で終了');
540
+ });
541
+ it.each([
542
+ [
543
+ 'one restored question',
544
+ [createOpenQuestion({ id: 'inq-resumed-1', question: 'Resume one?' })],
545
+ ],
546
+ [
547
+ 'multiple restored questions',
548
+ [
549
+ createOpenQuestion({ id: 'inq-resumed-1', question: 'Resume first?' }),
550
+ createOpenQuestion({ id: 'inq-resumed-2', question: 'Resume second?' }),
551
+ ],
552
+ ],
553
+ ])('renders %s from the resumed operator context', async (_name, restoredQuestions) => {
554
+ const viewModel = createTuiViewModel();
555
+ const setOperatorQuestions = (openQuestions) => {
556
+ viewModel.setOperatorContext({
557
+ conductorTurn: 2,
558
+ autonomousTurns: 1,
559
+ maxTurns: null,
560
+ openQuestions,
561
+ });
562
+ };
563
+ setOperatorQuestions(restoredQuestions);
564
+ const selectedIndex = restoredQuestions.length > 1 ? 1 : 0;
565
+ let submittedOptions;
566
+ const { stdin, lastFrame } = render(_jsx(IssueSessionTui, { viewModel: viewModel, onSubmit: (_text, options) => {
567
+ setOperatorQuestions(restoredQuestions.filter((_question, index) => index !== selectedIndex));
568
+ submittedOptions = options;
569
+ } }));
570
+ const initialFrame = lastFrame() ?? '';
571
+ expect(initialFrame).toContain('Open questions');
572
+ expect(initialFrame).toContain('inq-resumed-1');
573
+ expect(initialFrame).not.toContain('任意のタイミングで入力 · /exit で終了');
574
+ if (selectedIndex === 1) {
575
+ stdin.write(INK_TEST_KEYS.shiftDownArrow);
576
+ await flushInkStdin();
577
+ }
578
+ stdin.write('answer');
579
+ await flushInkStdin();
580
+ stdin.write('\r');
581
+ await flushInkStdin();
582
+ expect(submittedOptions).toEqual({
583
+ targetOpenQuestionId: restoredQuestions[selectedIndex]?.id,
584
+ });
585
+ if (restoredQuestions.length === 1) {
586
+ expect(lastFrame() ?? '').not.toContain('Open questions');
587
+ expect(lastFrame() ?? '').toContain('任意のタイミングで入力 · /exit で終了');
588
+ }
589
+ else {
590
+ expect(lastFrame() ?? '').toContain('Open questions');
591
+ expect(lastFrame() ?? '').toContain('inq-resumed-1');
592
+ expect(lastFrame() ?? '').not.toContain('任意のタイミングで入力 · /exit で終了');
593
+ setOperatorQuestions([]);
594
+ await flushInkStdin();
595
+ expect(lastFrame() ?? '').not.toContain('Open questions');
596
+ expect(lastFrame() ?? '').toContain('任意のタイミングで入力 · /exit で終了');
597
+ }
348
598
  });
349
599
  it('renders all activity log label kinds with distinct markers', () => {
350
600
  const viewModel = createTuiViewModel();
@@ -361,6 +611,12 @@ describe('IssueSessionTui', () => {
361
611
  });
362
612
  it('embeds pane titles on top borders without inner title rows', () => {
363
613
  const viewModel = createTuiViewModel();
614
+ viewModel.setDisplayState({
615
+ workers: {},
616
+ conductorOutput: null,
617
+ openQuestions: [createOpenQuestion({ id: 'inq-1', question: 'Answer?' })],
618
+ dispatchHold: { hold: false, heldEventCount: 0 },
619
+ });
364
620
  viewModel.appendActivityLog('operator', 'ping');
365
621
  const { lastFrame } = render(_jsx(IssueSessionTui, { viewModel: viewModel, onSubmit: () => { } }));
366
622
  const frame = lastFrame() ?? '';
@@ -392,8 +648,8 @@ describe('IssueSessionTui', () => {
392
648
  await flushInkStdin();
393
649
  const capacity = computeOrchestrationLogVisibleLineCount(computeActivityPaneHeight({
394
650
  terminalRows: 24,
395
- hintLineCount: 1,
396
- openQuestionsPaneHeight: OPEN_QUESTIONS_PANE_MIN_HEIGHT,
651
+ hintLineCount: 2,
652
+ openQuestionsPaneHeight: 0,
397
653
  }));
398
654
  const stats = extractOrchestrationPaneFrameStats(lastFrame() ?? '');
399
655
  expect(lastFrame() ?? '').toContain('PgUp/PgDn');
@@ -414,7 +670,7 @@ describe('IssueSessionTui', () => {
414
670
  const capacity = computeActivityLogLineCapacity({
415
671
  terminalRows,
416
672
  hintLineCount: 1,
417
- openQuestionsPaneHeight: OPEN_QUESTIONS_PANE_MIN_HEIGHT,
673
+ openQuestionsPaneHeight: 0,
418
674
  });
419
675
  const stats = extractOrchestrationPaneFrameStats(lastFrame() ?? '');
420
676
  expect(capacity).toBeGreaterThan(0);
@@ -490,6 +746,7 @@ describe('IssueSessionTui', () => {
490
746
  createOpenQuestion({ id: 'inq-1', question: 'First question' }),
491
747
  createOpenQuestion({ id: 'inq-2', question: 'Second question' }),
492
748
  ],
749
+ dispatchHold: { hold: false, heldEventCount: 0 },
493
750
  });
494
751
  const { stdin, lastFrame } = render(_jsx(IssueSessionTui, { viewModel: viewModel, onSubmit: () => { } }));
495
752
  expect(lastFrame() ?? '').toContain('▸ inq-1');
@@ -508,6 +765,7 @@ describe('IssueSessionTui', () => {
508
765
  createOpenQuestion({ id: 'inq-1', question: 'First question' }),
509
766
  createOpenQuestion({ id: 'inq-2', question: 'Second question' }),
510
767
  ],
768
+ dispatchHold: { hold: false, heldEventCount: 0 },
511
769
  });
512
770
  const { stdin, lastFrame } = render(_jsx(IssueSessionTui, { viewModel: viewModel, onSubmit: () => { } }));
513
771
  stdin.write(INK_TEST_KEYS.downArrow);
@@ -524,6 +782,7 @@ describe('IssueSessionTui', () => {
524
782
  createOpenQuestion({ id: 'inq-1', question: 'First' }),
525
783
  createOpenQuestion({ id: 'inq-2', question: 'Second' }),
526
784
  ],
785
+ dispatchHold: { hold: false, heldEventCount: 0 },
527
786
  });
528
787
  let submitted = '';
529
788
  let submitOptions;
@@ -541,6 +800,22 @@ describe('IssueSessionTui', () => {
541
800
  expect(submitted).toBe('approved');
542
801
  expect(submitOptions).toEqual({ targetOpenQuestionId: 'inq-2' });
543
802
  });
803
+ it('submits ordinary input without an open-question target', async () => {
804
+ const viewModel = createTuiViewModel();
805
+ viewModel.setDisplayState({
806
+ workers: {},
807
+ conductorOutput: null,
808
+ openQuestions: [],
809
+ dispatchHold: { hold: false, heldEventCount: 0 },
810
+ });
811
+ const onSubmit = vi.fn();
812
+ const { stdin } = render(_jsx(IssueSessionTui, { viewModel: viewModel, onSubmit: onSubmit }));
813
+ stdin.write('follow-up');
814
+ await flushInkStdin();
815
+ stdin.write('\r');
816
+ await flushInkStdin();
817
+ expect(onSubmit).toHaveBeenCalledWith('follow-up', undefined);
818
+ });
544
819
  it('grows open questions pane for long selected question text', () => {
545
820
  const viewModel = createTuiViewModel();
546
821
  viewModel.setDisplayState({
@@ -553,6 +828,7 @@ describe('IssueSessionTui', () => {
553
828
  context: 'context '.repeat(10),
554
829
  }),
555
830
  ],
831
+ dispatchHold: { hold: false, heldEventCount: 0 },
556
832
  });
557
833
  const { lastFrame } = render(_jsx(IssueSessionTui, { viewModel: viewModel, onSubmit: () => { } }));
558
834
  const paneHeight = resolveOpenQuestionsPaneHeight(viewModel.getSnapshot().displayState.openQuestions);