fix: only deactivate on a standalone "stop ponytail" / "normal mode" (#162)
The deactivation check matched the phrase anywhere in the prompt, so an ordinary request like "add a normal mode toggle" silently turned ponytail off for the rest of the session. Match the whole message instead (trimmed, case-insensitive, trailing punctuation ignored) through a shared helper used by both the Claude/Codex hook and the pi extension. Fixes #161
This commit is contained in:
@@ -33,6 +33,15 @@ function normalizePersistedMode(mode) {
|
||||
return normalizeMode(mode) || normalizeConfigMode(mode);
|
||||
}
|
||||
|
||||
// "stop ponytail" / "normal mode" turn ponytail off, but only as a standalone
|
||||
// command. Matching the phrase anywhere in the message turned it off mid-task
|
||||
// for ordinary requests like "add a normal mode toggle" — so require the whole
|
||||
// message to be the command, ignoring case and trailing punctuation.
|
||||
function isDeactivationCommand(text) {
|
||||
const t = String(text || '').trim().toLowerCase().replace(/[.!?\s]+$/, '');
|
||||
return t === 'stop ponytail' || t === 'normal mode';
|
||||
}
|
||||
|
||||
function getConfigDir() {
|
||||
if (process.env.XDG_CONFIG_HOME) {
|
||||
return path.join(process.env.XDG_CONFIG_HOME, 'ponytail');
|
||||
@@ -98,5 +107,6 @@ module.exports = {
|
||||
normalizeMode,
|
||||
normalizeConfigMode,
|
||||
normalizePersistedMode,
|
||||
isDeactivationCommand,
|
||||
writeDefaultMode,
|
||||
};
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
// ponytail — UserPromptSubmit hook to track which ponytail mode is active
|
||||
// Inspects user input for /ponytail commands and writes mode to flag file
|
||||
|
||||
const { getDefaultMode } = require('./ponytail-config');
|
||||
const { getDefaultMode, isDeactivationCommand } = require('./ponytail-config');
|
||||
const { clearMode, setMode, writeHookOutput } = require('./ponytail-runtime');
|
||||
|
||||
let input = '';
|
||||
@@ -45,7 +45,7 @@ process.stdin.on('end', () => {
|
||||
}
|
||||
|
||||
// Detect deactivation
|
||||
if (/\b(stop ponytail|normal mode)\b/i.test(prompt)) {
|
||||
if (isDeactivationCommand(prompt)) {
|
||||
clearMode();
|
||||
writeHookOutput('UserPromptSubmit', 'off', 'PONYTAIL MODE OFF');
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user