chore: project setup and tooling cleanup (#26)

* add project setup

* add tools to eslint

* remove contributing.md

* update claude md

* chore: simplify CI to single Node.js version (22)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* use node 20

* adjust formatting

* fix linting

* format

* fix layout

* fix: align CI node version to .nvmrc (22), remove redundant gotcha

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: arkon <arkon.85@hotmail.com>
This commit is contained in:
Noah Waldner
2026-02-27 13:16:23 +01:00
committed by GitHub
co-authored by Claude Sonnet 4.6 arkon
parent 2b2829ebde
commit 480584de63
61 changed files with 4306 additions and 4013 deletions
+8 -12
View File
@@ -86,12 +86,7 @@ const POLL_INTERVAL_MS = 1000;
const MAX_MESSAGE_LENGTH = 500;
/** Patterns that indicate plan mode / approval prompt */
const PLAN_MODE_PATTERNS = [
/ExitPlanMode/i,
/AskUserQuestion/i,
/Ready for user approval/i,
/approve.*plan/i,
];
const PLAN_MODE_PATTERNS = [/ExitPlanMode/i, /AskUserQuestion/i, /Ready for user approval/i, /approve.*plan/i];
// ========== TranscriptWatcher Class ==========
@@ -410,12 +405,13 @@ export class TranscriptWatcher extends EventEmitter {
if (entry.type !== 'assistant' || !entry.message?.content) return;
const content = entry.message.content;
const textToCheck = typeof content === 'string'
? content
: content
.filter((b): b is { type: 'text'; text: string } => b.type === 'text' && !!b.text)
.map(b => b.text)
.join(' ');
const textToCheck =
typeof content === 'string'
? content
: content
.filter((b): b is { type: 'text'; text: string } => b.type === 'text' && !!b.text)
.map((b) => b.text)
.join(' ');
// Also check for tool_use with ExitPlanMode or AskUserQuestion
if (Array.isArray(content)) {