storymode-cli 1.3.8 → 1.4.0
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.
- package/package.json +1 -1
- package/src/cli.mjs +5 -33
package/package.json
CHANGED
package/src/cli.mjs
CHANGED
|
@@ -203,10 +203,11 @@ export async function run(args) {
|
|
|
203
203
|
// but iTerm2's \x1b[2J is intercepted by tmux). So for iTerm2 we use native
|
|
204
204
|
// splits (AppleScript) instead of tmux, keeping the companion process direct.
|
|
205
205
|
const renderMode = detectGraphicsProtocol();
|
|
206
|
-
//
|
|
207
|
-
//
|
|
208
|
-
|
|
209
|
-
|
|
206
|
+
// HD only works with Kitty protocol (Kitty/Ghostty/WezTerm) — they have
|
|
207
|
+
// a=d,d=a to delete previous image placements between frames.
|
|
208
|
+
// iTerm2 inline images are permanent (can't be replaced or cleared),
|
|
209
|
+
// so animation is impossible — fall back to ANSI.
|
|
210
|
+
const useHd = renderMode.protocol === 'kitty';
|
|
210
211
|
const paneWidth = useHd && size === 'full' ? 80 : size === 'full' ? 62 : size === 'tiny' ? 14 : 22;
|
|
211
212
|
|
|
212
213
|
// If we're already the companion pane (spawned by tmux split), play inline
|
|
@@ -250,35 +251,6 @@ export async function run(args) {
|
|
|
250
251
|
const modelFlag = model ? ` --model=${model}` : '';
|
|
251
252
|
const companionCmd = `STORYMODE_COMPANION=1 npx --yes storymode-cli play ${id} --size=${size}${sextantFlag}${reactiveFlag}${noAiFlag}${modelFlag}`;
|
|
252
253
|
|
|
253
|
-
// iTerm2 (not in tmux): use native split to keep HD working.
|
|
254
|
-
// iTerm2 inline images can't be cleared through tmux passthrough,
|
|
255
|
-
// so we avoid tmux entirely and use AppleScript to split the pane.
|
|
256
|
-
// Use "write text" instead of "command" — the latter uses execve directly
|
|
257
|
-
// (no shell, no PATH, no env vars). "write text" types into the new
|
|
258
|
-
// pane's shell, which inherits everything.
|
|
259
|
-
if (renderMode.protocol === 'iterm2' && !renderMode.inTmux) {
|
|
260
|
-
try {
|
|
261
|
-
execSync(`osascript -e '
|
|
262
|
-
tell application "iTerm2"
|
|
263
|
-
tell current session of current tab of current window
|
|
264
|
-
set newSession to split vertically with default profile
|
|
265
|
-
tell newSession
|
|
266
|
-
write text "${companionCmd.replace(/"/g, '\\"')}"
|
|
267
|
-
end tell
|
|
268
|
-
end tell
|
|
269
|
-
end tell
|
|
270
|
-
'`, { stdio: 'ignore' });
|
|
271
|
-
process.stderr.write(` Companion opened in iTerm2 pane (${size} HD/${renderMode.protocol}).\n`);
|
|
272
|
-
process.stderr.write(' Close the pane or press q in it to stop.\n');
|
|
273
|
-
} catch (err) {
|
|
274
|
-
console.error(` iTerm2 split failed: ${err.message}`);
|
|
275
|
-
console.error(' Falling back to tmux...');
|
|
276
|
-
// Fall through to tmux path below
|
|
277
|
-
renderMode.protocol = null;
|
|
278
|
-
}
|
|
279
|
-
if (renderMode.protocol) break;
|
|
280
|
-
}
|
|
281
|
-
|
|
282
254
|
// Open tmux side pane — install tmux if needed
|
|
283
255
|
if (!await ensureTmux()) process.exit(1);
|
|
284
256
|
const inTmux = !!process.env.TMUX;
|