mirror of
https://github.com/binaricat/Netcatty.git
synced 2026-11-10 16:21:22 +00:00
* feat: add --open-terminal-shell launch flag
Queue local-terminal launches as { path?, shell? } so a discovered shell
id or executable can open a tab on its own or with --open-terminal-path.
Co-authored-by: 陈大猫 <binaricat@users.noreply.github.com>
* fix: serialize open-terminal launches during shell discovery
Await shell discovery on an ordered queue so a later path-only request
cannot create its tab first, including when App Lock drains.
Co-authored-by: 陈大猫 <binaricat@users.noreply.github.com>
---------
Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Co-authored-by: 陈大猫 <binaricat@users.noreply.github.com>
29 lines
1.6 KiB
TypeScript
29 lines
1.6 KiB
TypeScript
import assert from "node:assert/strict";
|
|
import { readFileSync } from "node:fs";
|
|
import test from "node:test";
|
|
|
|
const source = readFileSync(new URL("./AppSideEffects.tsx", import.meta.url), "utf8");
|
|
|
|
test("open-terminal requests wait behind App Lock and resume after unlock", () => {
|
|
const handlerStart = source.indexOf("const _handleOpenTerminalPath");
|
|
const handlerEnd = source.indexOf("useEffect(() =>", handlerStart);
|
|
const handlerSource = source.slice(handlerStart, handlerEnd);
|
|
const drainStart = source.indexOf("const pending = pendingDeepLinksWhileLockedRef.current.splice(0)");
|
|
const drainEnd = source.indexOf("}, [appLockLocked]);", drainStart);
|
|
const drainSource = source.slice(drainStart, drainEnd);
|
|
|
|
assert.match(handlerSource, /shouldDeferExternalActionWhileAppLocked/);
|
|
assert.match(handlerSource, /kind: 'open-terminal-path'/);
|
|
assert.match(drainSource, /_processOpenTerminalPath\(item\.payload\)/);
|
|
|
|
const processStart = source.indexOf("const _processOpenTerminalPath");
|
|
const processSource = source.slice(processStart, handlerStart);
|
|
assert.match(processSource, /handleCreateLocalTerminal\(undefined, \{ localStartDir \}\)/);
|
|
assert.match(processSource, /resolveShellSetting\(shellSetting, shells\)/);
|
|
assert.match(source, /const openTerminalQueueRef = useRef\(createOpenTerminalQueue\(\)\)/);
|
|
const enqueueAt = processSource.indexOf("openTerminalQueueRef.current.enqueue(() => {");
|
|
const createAt = processSource.indexOf("handleCreateLocalTerminal");
|
|
assert.ok(enqueueAt >= 0 && createAt > enqueueAt);
|
|
assert.match(processSource, /await ensureDiscoveredShells\(\)/);
|
|
});
|