| 1 | import assert from "node:assert/strict"; |
| 2 | import React,{act} from "react"; |
| 3 | import {createRoot} from "react-dom/client"; |
| 4 | import {installDom,installBridgeApp} from "./composerInboxHarness"; |
| 5 | import {makeSessionUIMock} from "../lib/sessionUIMock"; |
| 6 | import {useComposerRouter, type ComposerRouterInput} from "../app-runtime/useComposerRouter"; |
| 7 | import {sendPersistedComposer,useSessionComposerPersistence} from "../lib/sessionComposerPersistence"; |
| 8 | const dom=installDom(); |
| 9 | installBridgeApp({...makeSessionUIMock(async()=>{})}); |
| 10 | let applied=false; |
| 11 | let editor!:ReturnType<typeof useSessionComposerPersistence>,router!:ReturnType<typeof useComposerRouter>; |
| 12 | const noop=()=>{}; |
| 13 | const ports:ComposerRouterInput["ports"]={runShellForTab:async()=>{},switchModel:async()=>applied,newSession:async()=>{},setSettingsTarget:noop,setClearContextPending:noop,clearWorkspaceConflict:noop,setWorkspaceConflict:noop,setPendingClose:noop,submitComposerTurn:async()=>{throw Error("must not dispatch a model command to provider");},steerForTab:async()=>{},isRemoteTab:()=>false}; |
| 14 | function Probe(){editor=useSessionComposerPersistence({hostId:"local",sessionId:"command"},"command-tab");router=useComposerRouter({activeTabId:"command-tab",goalDraftActive:false,t:key=>key,notice:noop,showToast:noop,ports});return null;} |
| 15 | const root=createRoot(document.getElementById("root")!); |
| 16 | try { |
| 17 | await act(async()=>{root.render(React.createElement(Probe));await new Promise(resolve=>setTimeout(resolve,0));}); |
| 18 | const owner=editor.target!; |
| 19 | await act(async()=>owner.onPatch!(owner.draftId,owner.generation,{text:"/model configured/model"})); |
| 20 | await act(async()=>assert.rejects(sendPersistedComposer("command-tab","/model configured/model","/model configured/model","failed-command",()=>router.handleSend("/model configured/model")),/inbox_not_submitted/)); |
| 21 | assert.equal(editor.blocked,false);assert.equal(editor.target!.initial.text,"/model configured/model"); |
| 22 | applied=true; |
| 23 | await act(async()=>{await sendPersistedComposer("command-tab","/model configured/model","/model configured/model","success-command",()=>router.handleSend("/model configured/model"));}); |
| 24 | assert.equal(editor.target!.initial.text,""); |
| 25 | console.log("PASS /model settles saved input only after an applied switch"); |
| 26 | } finally {await act(async()=>root.unmount());dom.window.close();} |
| 27 |