crewly 1.20.196 → 1.20.198

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 (234) hide show
  1. package/config/roles/orchestrator/prompt.md +8 -9
  2. package/config/roles/team-leader/prompt.md +6 -0
  3. package/config/skills/agent/computer-use/SKILL.md +16 -0
  4. package/config/skills/agent/core/ask-owner/SKILL.md +14 -0
  5. package/config/skills/agent/core/ask-owner/execute.sh +19 -1
  6. package/config/skills/agent/core/ask-owner/execute.test.sh +12 -0
  7. package/config/skills/agent/core/gmail-send/SKILL.md +16 -0
  8. package/config/skills/agent/core/reply-channel/SKILL.md +16 -0
  9. package/config/skills/agent/core/slack-post/SKILL.md +16 -0
  10. package/config/skills/agent/core/whatsapp-send/SKILL.md +16 -0
  11. package/config/skills/agent/remote-browser/SKILL.md +43 -7
  12. package/config/skills/registry.json +7 -7
  13. package/dist/backend/backend/src/constants.d.ts +143 -0
  14. package/dist/backend/backend/src/constants.d.ts.map +1 -1
  15. package/dist/backend/backend/src/constants.js +159 -0
  16. package/dist/backend/backend/src/constants.js.map +1 -1
  17. package/dist/backend/backend/src/controllers/browser/browser.controller.d.ts +12 -1
  18. package/dist/backend/backend/src/controllers/browser/browser.controller.d.ts.map +1 -1
  19. package/dist/backend/backend/src/controllers/browser/browser.controller.js +170 -9
  20. package/dist/backend/backend/src/controllers/browser/browser.controller.js.map +1 -1
  21. package/dist/backend/backend/src/controllers/browser/browser.routes.d.ts.map +1 -1
  22. package/dist/backend/backend/src/controllers/browser/browser.routes.js +5 -1
  23. package/dist/backend/backend/src/controllers/browser/browser.routes.js.map +1 -1
  24. package/dist/backend/backend/src/controllers/monitoring/terminal.controller.d.ts.map +1 -1
  25. package/dist/backend/backend/src/controllers/monitoring/terminal.controller.js +37 -52
  26. package/dist/backend/backend/src/controllers/monitoring/terminal.controller.js.map +1 -1
  27. package/dist/backend/backend/src/controllers/team/team.controller.d.ts.map +1 -1
  28. package/dist/backend/backend/src/controllers/team/team.controller.js +13 -0
  29. package/dist/backend/backend/src/controllers/team/team.controller.js.map +1 -1
  30. package/dist/backend/backend/src/index.d.ts +17 -0
  31. package/dist/backend/backend/src/index.d.ts.map +1 -1
  32. package/dist/backend/backend/src/index.js +102 -0
  33. package/dist/backend/backend/src/index.js.map +1 -1
  34. package/dist/backend/backend/src/services/agent/agent-heartbeat-monitor.service.d.ts.map +1 -1
  35. package/dist/backend/backend/src/services/agent/agent-heartbeat-monitor.service.js +5 -8
  36. package/dist/backend/backend/src/services/agent/agent-heartbeat-monitor.service.js.map +1 -1
  37. package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts +12 -0
  38. package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
  39. package/dist/backend/backend/src/services/agent/agent-registration.service.js +275 -241
  40. package/dist/backend/backend/src/services/agent/agent-registration.service.js.map +1 -1
  41. package/dist/backend/backend/src/services/agent/context-window-monitor.service.d.ts.map +1 -1
  42. package/dist/backend/backend/src/services/agent/context-window-monitor.service.js +5 -6
  43. package/dist/backend/backend/src/services/agent/context-window-monitor.service.js.map +1 -1
  44. package/dist/backend/backend/src/services/agent/control-plane-guard.service.d.ts +6 -0
  45. package/dist/backend/backend/src/services/agent/control-plane-guard.service.d.ts.map +1 -1
  46. package/dist/backend/backend/src/services/agent/control-plane-guard.service.js +2 -1
  47. package/dist/backend/backend/src/services/agent/control-plane-guard.service.js.map +1 -1
  48. package/dist/backend/backend/src/services/agent/fresh-task-conversation.service.d.ts.map +1 -1
  49. package/dist/backend/backend/src/services/agent/fresh-task-conversation.service.js +12 -8
  50. package/dist/backend/backend/src/services/agent/fresh-task-conversation.service.js.map +1 -1
  51. package/dist/backend/backend/src/services/agent/gemini-runtime.service.d.ts.map +1 -1
  52. package/dist/backend/backend/src/services/agent/gemini-runtime.service.js +32 -27
  53. package/dist/backend/backend/src/services/agent/gemini-runtime.service.js.map +1 -1
  54. package/dist/backend/backend/src/services/agent/owner-stopped.registry.d.ts +44 -0
  55. package/dist/backend/backend/src/services/agent/owner-stopped.registry.d.ts.map +1 -0
  56. package/dist/backend/backend/src/services/agent/owner-stopped.registry.js +54 -0
  57. package/dist/backend/backend/src/services/agent/owner-stopped.registry.js.map +1 -0
  58. package/dist/backend/backend/src/services/agent/runtime-agent.service.abstract.js +4 -4
  59. package/dist/backend/backend/src/services/agent/runtime-agent.service.abstract.js.map +1 -1
  60. package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.d.ts.map +1 -1
  61. package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.js +4 -8
  62. package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.js.map +1 -1
  63. package/dist/backend/backend/src/services/ai/prompt-modules/decision-rights.module.d.ts +19 -4
  64. package/dist/backend/backend/src/services/ai/prompt-modules/decision-rights.module.d.ts.map +1 -1
  65. package/dist/backend/backend/src/services/ai/prompt-modules/decision-rights.module.js +28 -5
  66. package/dist/backend/backend/src/services/ai/prompt-modules/decision-rights.module.js.map +1 -1
  67. package/dist/backend/backend/src/services/browser/browser-approval.service.d.ts +2 -2
  68. package/dist/backend/backend/src/services/browser/browser-approval.service.d.ts.map +1 -1
  69. package/dist/backend/backend/src/services/browser/browser-approval.service.js +13 -2
  70. package/dist/backend/backend/src/services/browser/browser-approval.service.js.map +1 -1
  71. package/dist/backend/backend/src/services/browser/browser-outbound-guard.d.ts +214 -0
  72. package/dist/backend/backend/src/services/browser/browser-outbound-guard.d.ts.map +1 -0
  73. package/dist/backend/backend/src/services/browser/browser-outbound-guard.js +466 -0
  74. package/dist/backend/backend/src/services/browser/browser-outbound-guard.js.map +1 -0
  75. package/dist/backend/backend/src/services/browser/browser-session.service.d.ts +57 -3
  76. package/dist/backend/backend/src/services/browser/browser-session.service.d.ts.map +1 -1
  77. package/dist/backend/backend/src/services/browser/browser-session.service.js +148 -63
  78. package/dist/backend/backend/src/services/browser/browser-session.service.js.map +1 -1
  79. package/dist/backend/backend/src/services/browser/held-action-store.d.ts +4 -0
  80. package/dist/backend/backend/src/services/browser/held-action-store.d.ts.map +1 -1
  81. package/dist/backend/backend/src/services/browser/held-action-store.js.map +1 -1
  82. package/dist/backend/backend/src/services/browser/owner-browser-input.d.ts +98 -10
  83. package/dist/backend/backend/src/services/browser/owner-browser-input.d.ts.map +1 -1
  84. package/dist/backend/backend/src/services/browser/owner-browser-input.js +126 -11
  85. package/dist/backend/backend/src/services/browser/owner-browser-input.js.map +1 -1
  86. package/dist/backend/backend/src/services/cloud/cloud-initializer.d.ts.map +1 -1
  87. package/dist/backend/backend/src/services/cloud/cloud-initializer.js +6 -8
  88. package/dist/backend/backend/src/services/cloud/cloud-initializer.js.map +1 -1
  89. package/dist/backend/backend/src/services/messaging/input-blocked-retry.service.d.ts +129 -0
  90. package/dist/backend/backend/src/services/messaging/input-blocked-retry.service.d.ts.map +1 -0
  91. package/dist/backend/backend/src/services/messaging/input-blocked-retry.service.js +196 -0
  92. package/dist/backend/backend/src/services/messaging/input-blocked-retry.service.js.map +1 -0
  93. package/dist/backend/backend/src/services/messaging/sub-agent-message-queue.service.d.ts +42 -0
  94. package/dist/backend/backend/src/services/messaging/sub-agent-message-queue.service.d.ts.map +1 -1
  95. package/dist/backend/backend/src/services/messaging/sub-agent-message-queue.service.js +88 -10
  96. package/dist/backend/backend/src/services/messaging/sub-agent-message-queue.service.js.map +1 -1
  97. package/dist/backend/backend/src/services/monitoring/agent-hook-state.d.ts.map +1 -1
  98. package/dist/backend/backend/src/services/monitoring/agent-hook-state.js +5 -0
  99. package/dist/backend/backend/src/services/monitoring/agent-hook-state.js.map +1 -1
  100. package/dist/backend/backend/src/services/orchestrator/orchestrator-heartbeat-monitor.service.d.ts.map +1 -1
  101. package/dist/backend/backend/src/services/orchestrator/orchestrator-heartbeat-monitor.service.js +5 -9
  102. package/dist/backend/backend/src/services/orchestrator/orchestrator-heartbeat-monitor.service.js.map +1 -1
  103. package/dist/backend/backend/src/services/session/pty/pty-session-backend.d.ts +11 -0
  104. package/dist/backend/backend/src/services/session/pty/pty-session-backend.d.ts.map +1 -1
  105. package/dist/backend/backend/src/services/session/pty/pty-session-backend.js +14 -0
  106. package/dist/backend/backend/src/services/session/pty/pty-session-backend.js.map +1 -1
  107. package/dist/backend/backend/src/services/session/pty/pty-terminal-buffer.d.ts +37 -0
  108. package/dist/backend/backend/src/services/session/pty/pty-terminal-buffer.d.ts.map +1 -1
  109. package/dist/backend/backend/src/services/session/pty/pty-terminal-buffer.js +78 -0
  110. package/dist/backend/backend/src/services/session/pty/pty-terminal-buffer.js.map +1 -1
  111. package/dist/backend/backend/src/services/session/session-backend.interface.d.ts +13 -0
  112. package/dist/backend/backend/src/services/session/session-backend.interface.d.ts.map +1 -1
  113. package/dist/backend/backend/src/services/session/session-backend.interface.js.map +1 -1
  114. package/dist/backend/backend/src/services/session/session-command-helper.d.ts +118 -105
  115. package/dist/backend/backend/src/services/session/session-command-helper.d.ts.map +1 -1
  116. package/dist/backend/backend/src/services/session/session-command-helper.js +267 -298
  117. package/dist/backend/backend/src/services/session/session-command-helper.js.map +1 -1
  118. package/dist/backend/backend/src/services/session/tui-input-guard.d.ts +144 -0
  119. package/dist/backend/backend/src/services/session/tui-input-guard.d.ts.map +1 -0
  120. package/dist/backend/backend/src/services/session/tui-input-guard.js +312 -0
  121. package/dist/backend/backend/src/services/session/tui-input-guard.js.map +1 -0
  122. package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.d.ts.map +1 -1
  123. package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.js +14 -0
  124. package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.js.map +1 -1
  125. package/dist/backend/backend/src/services/slack/slack-team-channel.service.d.ts +31 -0
  126. package/dist/backend/backend/src/services/slack/slack-team-channel.service.d.ts.map +1 -1
  127. package/dist/backend/backend/src/services/slack/slack-team-channel.service.js +82 -4
  128. package/dist/backend/backend/src/services/slack/slack-team-channel.service.js.map +1 -1
  129. package/dist/backend/backend/src/services/trace/trace.types.d.ts +2 -2
  130. package/dist/backend/backend/src/services/trace/trace.types.d.ts.map +1 -1
  131. package/dist/backend/backend/src/services/trace/trace.types.js +4 -0
  132. package/dist/backend/backend/src/services/trace/trace.types.js.map +1 -1
  133. package/dist/backend/backend/src/services/trace/turn-origin.d.ts +70 -0
  134. package/dist/backend/backend/src/services/trace/turn-origin.d.ts.map +1 -0
  135. package/dist/backend/backend/src/services/trace/turn-origin.js +198 -0
  136. package/dist/backend/backend/src/services/trace/turn-origin.js.map +1 -0
  137. package/dist/backend/backend/src/types/slack.types.d.ts +8 -0
  138. package/dist/backend/backend/src/types/slack.types.d.ts.map +1 -1
  139. package/dist/backend/backend/src/types/slack.types.js.map +1 -1
  140. package/dist/backend/backend/src/utils/terminal-string-ops.d.ts.map +1 -1
  141. package/dist/backend/backend/src/utils/terminal-string-ops.js +3 -2
  142. package/dist/backend/backend/src/utils/terminal-string-ops.js.map +1 -1
  143. package/dist/backend/build-info.json +2 -2
  144. package/dist/cli/backend/src/constants.d.ts +143 -0
  145. package/dist/cli/backend/src/constants.d.ts.map +1 -1
  146. package/dist/cli/backend/src/constants.js +159 -0
  147. package/dist/cli/backend/src/constants.js.map +1 -1
  148. package/dist/cli/backend/src/services/agent/agent-registration.service.d.ts +12 -0
  149. package/dist/cli/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
  150. package/dist/cli/backend/src/services/agent/agent-registration.service.js +275 -241
  151. package/dist/cli/backend/src/services/agent/agent-registration.service.js.map +1 -1
  152. package/dist/cli/backend/src/services/agent/context-window-monitor.service.d.ts.map +1 -1
  153. package/dist/cli/backend/src/services/agent/context-window-monitor.service.js +5 -6
  154. package/dist/cli/backend/src/services/agent/context-window-monitor.service.js.map +1 -1
  155. package/dist/cli/backend/src/services/agent/control-plane-guard.service.d.ts +6 -0
  156. package/dist/cli/backend/src/services/agent/control-plane-guard.service.d.ts.map +1 -1
  157. package/dist/cli/backend/src/services/agent/control-plane-guard.service.js +2 -1
  158. package/dist/cli/backend/src/services/agent/control-plane-guard.service.js.map +1 -1
  159. package/dist/cli/backend/src/services/agent/fresh-task-conversation.service.d.ts.map +1 -1
  160. package/dist/cli/backend/src/services/agent/fresh-task-conversation.service.js +12 -8
  161. package/dist/cli/backend/src/services/agent/fresh-task-conversation.service.js.map +1 -1
  162. package/dist/cli/backend/src/services/agent/gemini-runtime.service.d.ts.map +1 -1
  163. package/dist/cli/backend/src/services/agent/gemini-runtime.service.js +32 -27
  164. package/dist/cli/backend/src/services/agent/gemini-runtime.service.js.map +1 -1
  165. package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.js +4 -4
  166. package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.js.map +1 -1
  167. package/dist/cli/backend/src/services/agent/runtime-exit-monitor.service.d.ts.map +1 -1
  168. package/dist/cli/backend/src/services/agent/runtime-exit-monitor.service.js +4 -8
  169. package/dist/cli/backend/src/services/agent/runtime-exit-monitor.service.js.map +1 -1
  170. package/dist/cli/backend/src/services/ai/prompt-modules/decision-rights.module.d.ts +19 -4
  171. package/dist/cli/backend/src/services/ai/prompt-modules/decision-rights.module.d.ts.map +1 -1
  172. package/dist/cli/backend/src/services/ai/prompt-modules/decision-rights.module.js +28 -5
  173. package/dist/cli/backend/src/services/ai/prompt-modules/decision-rights.module.js.map +1 -1
  174. package/dist/cli/backend/src/services/messaging/input-blocked-retry.service.d.ts +129 -0
  175. package/dist/cli/backend/src/services/messaging/input-blocked-retry.service.d.ts.map +1 -0
  176. package/dist/cli/backend/src/services/messaging/input-blocked-retry.service.js +196 -0
  177. package/dist/cli/backend/src/services/messaging/input-blocked-retry.service.js.map +1 -0
  178. package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.d.ts +42 -0
  179. package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.d.ts.map +1 -1
  180. package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.js +88 -10
  181. package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.js.map +1 -1
  182. package/dist/cli/backend/src/services/session/pty/pty-session-backend.d.ts +11 -0
  183. package/dist/cli/backend/src/services/session/pty/pty-session-backend.d.ts.map +1 -1
  184. package/dist/cli/backend/src/services/session/pty/pty-session-backend.js +14 -0
  185. package/dist/cli/backend/src/services/session/pty/pty-session-backend.js.map +1 -1
  186. package/dist/cli/backend/src/services/session/pty/pty-terminal-buffer.d.ts +37 -0
  187. package/dist/cli/backend/src/services/session/pty/pty-terminal-buffer.d.ts.map +1 -1
  188. package/dist/cli/backend/src/services/session/pty/pty-terminal-buffer.js +78 -0
  189. package/dist/cli/backend/src/services/session/pty/pty-terminal-buffer.js.map +1 -1
  190. package/dist/cli/backend/src/services/session/session-backend.interface.d.ts +13 -0
  191. package/dist/cli/backend/src/services/session/session-backend.interface.d.ts.map +1 -1
  192. package/dist/cli/backend/src/services/session/session-backend.interface.js.map +1 -1
  193. package/dist/cli/backend/src/services/session/session-command-helper.d.ts +118 -105
  194. package/dist/cli/backend/src/services/session/session-command-helper.d.ts.map +1 -1
  195. package/dist/cli/backend/src/services/session/session-command-helper.js +267 -298
  196. package/dist/cli/backend/src/services/session/session-command-helper.js.map +1 -1
  197. package/dist/cli/backend/src/services/session/tui-input-guard.d.ts +144 -0
  198. package/dist/cli/backend/src/services/session/tui-input-guard.d.ts.map +1 -0
  199. package/dist/cli/backend/src/services/session/tui-input-guard.js +312 -0
  200. package/dist/cli/backend/src/services/session/tui-input-guard.js.map +1 -0
  201. package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.d.ts.map +1 -1
  202. package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.js +14 -0
  203. package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.js.map +1 -1
  204. package/dist/cli/backend/src/services/slack/slack-team-channel.service.d.ts +31 -0
  205. package/dist/cli/backend/src/services/slack/slack-team-channel.service.d.ts.map +1 -1
  206. package/dist/cli/backend/src/services/slack/slack-team-channel.service.js +82 -4
  207. package/dist/cli/backend/src/services/slack/slack-team-channel.service.js.map +1 -1
  208. package/dist/cli/backend/src/services/trace/trace.types.d.ts +2 -2
  209. package/dist/cli/backend/src/services/trace/trace.types.d.ts.map +1 -1
  210. package/dist/cli/backend/src/services/trace/trace.types.js +4 -0
  211. package/dist/cli/backend/src/services/trace/trace.types.js.map +1 -1
  212. package/dist/cli/backend/src/services/trace/turn-origin.d.ts +70 -0
  213. package/dist/cli/backend/src/services/trace/turn-origin.d.ts.map +1 -0
  214. package/dist/cli/backend/src/services/trace/turn-origin.js +198 -0
  215. package/dist/cli/backend/src/services/trace/turn-origin.js.map +1 -0
  216. package/dist/cli/backend/src/types/slack.types.d.ts +8 -0
  217. package/dist/cli/backend/src/types/slack.types.d.ts.map +1 -1
  218. package/dist/cli/backend/src/types/slack.types.js.map +1 -1
  219. package/dist/cli/backend/src/utils/terminal-string-ops.d.ts.map +1 -1
  220. package/dist/cli/backend/src/utils/terminal-string-ops.js +3 -2
  221. package/dist/cli/backend/src/utils/terminal-string-ops.js.map +1 -1
  222. package/frontend/dist/assets/index-5cbcf45b.css +42 -0
  223. package/frontend/dist/assets/{index-edfa8e04.js → index-63a33dbf.js} +283 -283
  224. package/frontend/dist/index.html +2 -2
  225. package/package.json +1 -1
  226. package/dist/cli/backend/src/services/agent/agent-suspend.service.d.ts +0 -118
  227. package/dist/cli/backend/src/services/agent/agent-suspend.service.d.ts.map +0 -1
  228. package/dist/cli/backend/src/services/agent/agent-suspend.service.js +0 -304
  229. package/dist/cli/backend/src/services/agent/agent-suspend.service.js.map +0 -1
  230. package/dist/cli/backend/src/services/agent/disk-cleanup.service.d.ts +0 -100
  231. package/dist/cli/backend/src/services/agent/disk-cleanup.service.d.ts.map +0 -1
  232. package/dist/cli/backend/src/services/agent/disk-cleanup.service.js +0 -149
  233. package/dist/cli/backend/src/services/agent/disk-cleanup.service.js.map +0 -1
  234. package/frontend/dist/assets/index-bfa0e2e8.css +0 -42
@@ -16,6 +16,7 @@
16
16
  * @module session-command-helper
17
17
  */
18
18
  import type { ISession, ISessionBackend } from './session-backend.interface.js';
19
+ import { type TuiInputReading, type TuiInputStage } from './tui-input-guard.js';
19
20
  /**
20
21
  * Key code mappings for special keys
21
22
  */
@@ -29,6 +30,32 @@ export declare const KEY_CODES: Record<string, string>;
29
30
  export declare class SessionCommandHelper {
30
31
  private logger;
31
32
  private backend;
33
+ /**
34
+ * Per session: the collapsed paste marker ("[Pasted text #1 +29 lines]",
35
+ * "[Pasted Content 1234 chars]") the runtime showed right after the
36
+ * harness pasted `message`. Proof that a marker still in the box later is
37
+ * ours, so a lost Enter can be recovered. Shared across helper instances.
38
+ */
39
+ private static readonly ownPasteMarkers;
40
+ /** Clock for the marker record (tests). */
41
+ static now: () => number;
42
+ /**
43
+ * Forget the recorded paste marker of a session: its runtime is being
44
+ * (re)started, a shell line is typed, or the session is created/killed —
45
+ * Claude Code's paste counter restarts at #1, and Codex markers carry only
46
+ * a character count, so an old record could match the owner's paste.
47
+ *
48
+ * @param sessionName - The session
49
+ */
50
+ static forgetOwnPaste(sessionName: string): void;
51
+ /**
52
+ * The recorded marker, while it may still be ours: at most
53
+ * OWN_MARKER_TTL_MS after our paste.
54
+ *
55
+ * @param sessionName - The session
56
+ * @returns The marker, or undefined
57
+ */
58
+ private static ownMarkerFor;
32
59
  constructor(backend: ISessionBackend);
33
60
  /**
34
61
  * Get a session by name, throwing an error if it doesn't exist.
@@ -47,15 +74,102 @@ export declare class SessionCommandHelper {
47
74
  */
48
75
  getSession(sessionName: string): ISession | undefined;
49
76
  /**
50
- * Send a message to a session with Enter key.
51
- * For multi-line messages, sends the text first then Enter separately
52
- * to avoid bracketed paste mode issues where Enter is treated as part of the paste.
77
+ * Send a message to an agent session and submit it with Enter — guarded.
78
+ *
79
+ * The harness only submits its own text (2026-10-03 phantom-input
80
+ * incident: a predicted "owner" message sitting in Claude Code's input
81
+ * was submitted with a delivery):
82
+ *
83
+ * 1. Before typing, the input box must be readable and empty. A leftover
84
+ * exact copy of this message (an earlier attempt) is cleared; anything
85
+ * else — someone's half-typed text, an unreadable screen — is left
86
+ * untouched and nothing is typed.
87
+ * 2. The message is pasted (bracketed paste) without Enter.
88
+ * 3. Enter is pressed only when the box holds exactly the message (or the
89
+ * runtime's collapsed "[Pasted text …]" marker). Otherwise nothing is
90
+ * submitted and nothing is cleared: text we cannot prove is ours is
91
+ * never wiped.
92
+ *
93
+ * A refusal throws `TuiInputGuardError`; agent delivery keeps the message
94
+ * queued and retries (AgentRegistrationService). Shell command lines
95
+ * typed before a runtime starts use {@link sendShellLine} instead.
53
96
  *
54
97
  * @param sessionName - The session to send to
55
98
  * @param message - The message to send
56
99
  * @throws Error if session does not exist
100
+ * @throws TuiInputGuardError when the box is unreadable or not ours
101
+ */
102
+ sendMessage(sessionName: string, message: string, options?: {
103
+ recordPasteMarker?: boolean;
104
+ }): Promise<void>;
105
+ /**
106
+ * After a delivery: if the box still holds the collapsed marker of our
107
+ * own paste, the Enter was lost — press Enter once and look again. Runs
108
+ * whatever the caller's success checks said: a fast-reply or weak-signal
109
+ * check can report "delivered" while the marker is still sitting there.
110
+ *
111
+ * @param sessionName - The session
112
+ * @returns `clear` (no marker of ours in the box), `submitted` (Enter took
113
+ * it), or `stuck` (still there after one Enter — not delivered)
114
+ */
115
+ ensureOwnPasteSubmitted(sessionName: string): Promise<'clear' | 'submitted' | 'stuck'>;
116
+ /**
117
+ * Forget recorded paste markers (tests).
118
+ */
119
+ static resetOwnPasteMarkersForTesting(): void;
120
+ /**
121
+ * Type a command line into a plain shell and run it (paste + Enter).
122
+ *
123
+ * Only for the lines Crewly types into a session's login shell before a
124
+ * runtime starts there (history off, `cd`, PATH, the launch command). It
125
+ * does not read an input box: a shell has none. Never use it to talk to
126
+ * an agent — that is {@link sendMessage}.
127
+ *
128
+ * @param sessionName - The session
129
+ * @param line - The command line
130
+ */
131
+ sendShellLine(sessionName: string, line: string): Promise<void>;
132
+ /**
133
+ * Read what an agent's input box really holds, relative to a message.
134
+ *
135
+ * Uses the backend's faint-free screen view, so ghost text (Claude Code's
136
+ * prompt suggestion, placeholders) reads as an empty box. Returns
137
+ * `unknown` when the backend has no styled capture or no input box of a
138
+ * known layout is on screen.
139
+ *
140
+ * @param sessionName - The session to read
141
+ * @param message - The harness's message to compare against ('' for none)
142
+ * @param stage - Why it is read (see classifyTuiInput)
143
+ * @returns The reading
144
+ */
145
+ readInputBox(sessionName: string, message: string, stage?: TuiInputStage): TuiInputReading;
146
+ /**
147
+ * Empty the input box — only call it for text proven to be the harness's
148
+ * own. Sends Ctrl+U then Backspace (clear the line, join the empty line to
149
+ * the one above), re-reading after each pair, until the box reads empty;
150
+ * one pair per line plus a margin (verified live on Claude Code, Codex
151
+ * and Gemini). A box that stops being readable is not "cleared": the
152
+ * final reading is then `unknown`, and callers treat only `empty` as
153
+ * success. Never sends Escape (cancels a running Claude Code turn; twice
154
+ * opens Rewind) or Ctrl+C (twice exits).
155
+ *
156
+ * @param sessionName - The session
157
+ * @param message - The harness's message, for classification
158
+ * @param current - A reading just taken (saves one re-read)
159
+ * @returns The final reading (`empty` when cleared)
57
160
  */
58
- sendMessage(sessionName: string, message: string): Promise<void>;
161
+ clearInputBox(sessionName: string, message: string, current?: TuiInputReading): Promise<TuiInputReading>;
162
+ /**
163
+ * Press Enter only when the input box holds exactly the harness's text.
164
+ * The safe replacement for "press Enter / Tab+Enter to recover a stuck
165
+ * message": an empty box (which may show a ghost suggestion) or a box
166
+ * with anyone else's text is never submitted.
167
+ *
168
+ * @param sessionName - The session
169
+ * @param message - The message the harness wrote
170
+ * @returns The reading; Enter was pressed only when its state is `ours`
171
+ */
172
+ submitIfInputIsOurs(sessionName: string, message: string): Promise<TuiInputReading>;
59
173
  /**
60
174
  * Send a key to a session
61
175
  *
@@ -76,20 +190,6 @@ export declare class SessionCommandHelper {
76
190
  * Send Escape key to a session
77
191
  */
78
192
  sendEscape(sessionName: string): Promise<void>;
79
- /**
80
- * Gemini-specific message delivery (#130).
81
- *
82
- * Handles Ink TUI quirks:
83
- * 1. Sends Escape to exit sub-modes (shell mode, error overlay)
84
- * 2. Writes the message text
85
- * 3. Uses a longer delay before Enter (Ink TUI needs processing time)
86
- * 4. Verifies the message text left the input area (accepted)
87
- *
88
- * @param sessionName - The session to send to
89
- * @param message - The message to send
90
- * @returns true if post-write verification shows message was accepted
91
- */
92
- sendMessageGemini(sessionName: string, message: string): Promise<boolean>;
93
193
  /**
94
194
  * Detect and dismiss interactive prompts (e.g., plan mode) before message delivery.
95
195
  * Checks the last terminal output for plan mode patterns and sends Escape to exit
@@ -255,93 +355,6 @@ export declare class SessionCommandHelper {
255
355
  matchedId: string;
256
356
  buffer: string;
257
357
  }>;
258
- /**
259
- * Send message and wait for delivery confirmation via events.
260
- *
261
- * This is the core event-driven message delivery method. It:
262
- * 1. Sends the message to the terminal
263
- * 2. Subscribes to output to detect confirmation patterns
264
- * 3. Resolves when confirmation is detected or timeout occurs
265
- *
266
- * @param sessionName - The session to send to
267
- * @param message - The message to send
268
- * @param confirmationPattern - Pattern indicating successful delivery
269
- * @param timeoutMs - Maximum time to wait for confirmation
270
- * @returns Promise resolving to true if confirmed, false if timeout
271
- *
272
- * @example
273
- * ```typescript
274
- * // Send message and wait for processing indicator
275
- * const confirmed = await helper.sendMessageWithConfirmation(
276
- * 'agent-1',
277
- * 'Hello Claude',
278
- * /⠋|⠙|⠹|Thinking/,
279
- * 5000
280
- * );
281
- * ```
282
- */
283
- sendMessageWithConfirmation(sessionName: string, message: string, confirmationPattern: RegExp | string, timeoutMs?: number): Promise<boolean>;
284
- /**
285
- * Smart message sending with event-driven paste detection.
286
- *
287
- * This method intelligently handles bracketed paste mode by:
288
- * 1. Sending the message text
289
- * 2. Waiting for "[Pasted text" indicator (paste received)
290
- * 3. Sending Enter key only after paste is confirmed
291
- * 4. Optionally waiting for processing indicators
292
- *
293
- * This is much more reliable than fixed delays because it detects
294
- * the actual terminal state rather than guessing timing.
295
- *
296
- * @param sessionName - The session to send to
297
- * @param message - The message to send
298
- * @param options - Configuration options
299
- * @returns Promise with delivery result
300
- *
301
- * @example
302
- * ```typescript
303
- * const result = await helper.sendMessageSmart('agent-1', 'Hello', {
304
- * waitForProcessing: true,
305
- * pasteTimeout: 3000,
306
- * });
307
- * if (result.pasteDetected && result.processingStarted) {
308
- * console.log('Message delivered and being processed');
309
- * }
310
- * ```
311
- */
312
- sendMessageSmart(sessionName: string, message: string, options?: {
313
- /** Timeout for detecting paste confirmation (ms) */
314
- pasteTimeout?: number;
315
- /** Timeout for detecting processing start (ms) */
316
- processingTimeout?: number;
317
- /** Whether to wait for processing indicators after sending */
318
- waitForProcessing?: boolean;
319
- /** Custom pattern for paste detection (default: /\[Pasted text/) */
320
- pastePattern?: RegExp;
321
- /** Custom pattern for processing detection (default: spinner/thinking) */
322
- processingPattern?: RegExp;
323
- /** Fallback delay if paste not detected (ms) - sends Enter anyway */
324
- fallbackDelay?: number;
325
- }): Promise<{
326
- pasteDetected: boolean;
327
- enterSent: boolean;
328
- processingStarted: boolean;
329
- usedFallback: boolean;
330
- }>;
331
- /**
332
- * Send message with retry logic using smart detection.
333
- *
334
- * Attempts to deliver a message with intelligent retry behavior:
335
- * - Uses event-driven paste detection
336
- * - Retries with Enter key if message appears stuck
337
- * - Detects common failure modes (prompt still visible, no response)
338
- *
339
- * @param sessionName - The session to send to
340
- * @param message - The message to send
341
- * @param maxRetries - Maximum number of retry attempts
342
- * @returns Promise resolving to true if message was successfully processed
343
- */
344
- sendMessageWithSmartRetry(sessionName: string, message: string, maxRetries?: number): Promise<boolean>;
345
358
  /**
346
359
  * Write raw data to session without Enter key.
347
360
  *
@@ -1 +1 @@
1
- {"version":3,"file":"session-command-helper.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/session/session-command-helper.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session-command-helper.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/session/session-command-helper.ts"],"names":[],"mappings":"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"}