diff --git a/.lane/memory/apps/app/src/composer.tsx/01M4YQG7BVWEFZPD56A2BA0VE9-mode-ace-mode-channels-id-an.md b/.lane/memory/apps/app/src/composer.tsx/01M4YQG7BVWEFZPD56A2BA0VE9-mode-ace-mode-channels-id-an.md index 7b9e7df3..bf4db375 100644 --- a/.lane/memory/apps/app/src/composer.tsx/01M4YQG7BVWEFZPD56A2BA0VE9-mode-ace-mode-channels-id-an.md +++ b/.lane/memory/apps/app/src/composer.tsx/01M4YQG7BVWEFZPD56A2BA0VE9-mode-ace-mode-channels-id-an.md @@ -4,9 +4,9 @@ anchor: function Composer created: 2026-10-15T02:50:44Z norm: '1' sig: 6e0e6c5c8afbd01a -body_hash: 50b1bf8d25d5e6da -raw_hash: fcc5ab24dfd60256 -vouched: 2026-10-22T17:49:27Z +body_hash: 7a4597684360db67 +raw_hash: 52e4e5fdab485c4d +vouched: 2026-10-22T17:52:41Z lines: 99-282 --- diff --git a/.lane/memory/apps/app/src/composer.tsx/01M4ZSEZBJJ3AMEBTR7SH36FW4-models-are-read-only-while-t.md b/.lane/memory/apps/app/src/composer.tsx/01M4ZSEZBJJ3AMEBTR7SH36FW4-models-are-read-only-while-t.md index dd425425..afd5a25d 100644 --- a/.lane/memory/apps/app/src/composer.tsx/01M4ZSEZBJJ3AMEBTR7SH36FW4-models-are-read-only-while-t.md +++ b/.lane/memory/apps/app/src/composer.tsx/01M4ZSEZBJJ3AMEBTR7SH36FW4-models-are-read-only-while-t.md @@ -4,9 +4,9 @@ anchor: function Composer created: 2026-10-15T12:44:15Z norm: '1' sig: 6e0e6c5c8afbd01a -body_hash: 50b1bf8d25d5e6da -raw_hash: fcc5ab24dfd60256 -vouched: 2026-10-22T17:49:27Z +body_hash: 7a4597684360db67 +raw_hash: 52e4e5fdab485c4d +vouched: 2026-10-22T17:52:41Z lines: 101-290 --- diff --git a/.lane/memory/apps/app/src/composer.tsx/01M4ZYQVGB6C87WBEV12WPQ8PF-a-withdrawn-message-returns.md b/.lane/memory/apps/app/src/composer.tsx/01M4ZYQVGB6C87WBEV12WPQ8PF-a-withdrawn-message-returns.md index c3d6ae44..b8160bdf 100644 --- a/.lane/memory/apps/app/src/composer.tsx/01M4ZYQVGB6C87WBEV12WPQ8PF-a-withdrawn-message-returns.md +++ b/.lane/memory/apps/app/src/composer.tsx/01M4ZYQVGB6C87WBEV12WPQ8PF-a-withdrawn-message-returns.md @@ -4,9 +4,9 @@ anchor: function Composer created: 2026-10-15T14:16:28Z norm: '1' sig: 6e0e6c5c8afbd01a -body_hash: 50b1bf8d25d5e6da -raw_hash: fcc5ab24dfd60256 -vouched: 2026-10-22T17:49:27Z +body_hash: 7a4597684360db67 +raw_hash: 52e4e5fdab485c4d +vouched: 2026-10-22T17:52:41Z lines: 104-326 --- diff --git a/apps/app/src/composer.tsx b/apps/app/src/composer.tsx index a64d52b2..cee8e5a6 100644 --- a/apps/app/src/composer.tsx +++ b/apps/app/src/composer.tsx @@ -34,6 +34,7 @@ const BLOCKED_MODES = [{ name: "Chat", placeholder: "Message the channel (agent access is off)", }]; +const UNKNOWN_MODES = [{ id: "chat", name: "Chat", placeholder: "Message the channel" }]; const ACE_MENTION = { name: "ace", avatar: aceAvatar }; export const EFFORTS: Record = { off: "Off", @@ -122,8 +123,10 @@ export function Composer( const [stored, changeMode] = useLocalStorage(`ace:mode:${scope}`, "ace"); // The channel refuses a blocked teammate's ask, stop, and kill too. const blocked = shared === false && channel.owner !== user; - const mode = blocked ? "chat" : stored; - const mentions = useMemo(() => blocked ? members : [ACE_MENTION, ...members], [blocked, members]); + // Agent mode only once a teammate's access is known to be on, as it isn't while their Mac is offline. + const agents = channel.owner === user || shared === true; + const mode = agents ? stored : "chat"; + const mentions = useMemo(() => agents ? [ACE_MENTION, ...members] : members, [agents, members]); const [models, setModels] = useState(); const [modelError, setModelError] = useState(); const status = useSyncExternalStore(host.subscribe, () => host.status); @@ -349,7 +352,7 @@ export function Composer( scope={scope} tools={!phone} mic - modes={blocked ? BLOCKED_MODES : MODES} + modes={agents ? MODES : blocked ? BLOCKED_MODES : UNKNOWN_MODES} mode={mode} onModeChange={changeMode} mentions={mentions}