speexor 0.2.0 → 0.2.1
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/BENCHMARKS.md +21 -0
- package/CHANGELOG.md +24 -0
- package/CONTRIBUTING.md +5 -10
- package/FAQ.md +28 -1
- package/GLOSSARY.md +1 -0
- package/PUBLISH.md +7 -2
- package/README.md +2 -2
- package/ROADMAP.md +29 -62
- package/SECURITY.md +2 -1
- package/SUMMARY.md +1 -1
- package/dist/{agent-D4BRWEOZ.js → agent-C64T66XT.js} +4 -4
- package/dist/{agent-D4BRWEOZ.js.map → agent-C64T66XT.js.map} +1 -1
- package/dist/{chunk-7VZHDGRQ.js → chunk-5OD5UWB5.js} +322 -121
- package/dist/chunk-5OD5UWB5.js.map +1 -0
- package/dist/chunk-GOGI3JQD.js +1637 -0
- package/dist/chunk-GOGI3JQD.js.map +1 -0
- package/dist/{chunk-2DX54KIM.js → chunk-VEZQT5SX.js} +80 -8
- package/dist/chunk-VEZQT5SX.js.map +1 -0
- package/dist/cli/index.js +2058 -18
- package/dist/cli/index.js.map +1 -1
- package/dist/core/index.d.ts +682 -3
- package/dist/core/index.js +1 -1
- package/dist/index.d.ts +102 -14
- package/dist/index.js +55 -29
- package/dist/index.js.map +1 -1
- package/dist/plugins/index.d.ts +1 -1
- package/dist/plugins/index.js +1 -1
- package/dist/types-BOMap-tI.d.ts +389 -0
- package/docs/PRD03.md +119 -0
- package/docs/PRD06.md +125 -0
- package/package.json +3 -3
- package/dist/chunk-2DX54KIM.js.map +0 -1
- package/dist/chunk-7VZHDGRQ.js.map +0 -1
- package/dist/chunk-AOFWQZWY.js +0 -345
- package/dist/chunk-AOFWQZWY.js.map +0 -1
- package/dist/types-0q_okI2g.d.ts +0 -205
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/plugins/agent/retry.ts","../src/plugins/agent/opencode.ts","../src/plugins/agent/claude-code.ts","../src/plugins/agent/aider.ts","../src/plugins/agent/codex.ts","../src/plugins/runtime/tmux.ts","../src/plugins/runtime/process.ts","../src/plugins/workspace/git-worktree.ts","../src/plugins/tracker/github.ts","../src/plugins/scm/github.ts","../src/plugins/notifier/desktop.ts","../src/plugins/terminal/terminal-plugin.ts","../src/plugins/index.ts"],"names":["debug","Debug","randomUUID","join","existsSync","mkdirSync","execSync","spawn"],"mappings":"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","file":"chunk-5OD5UWB5.js","sourcesContent":["import Debug from 'debug'\n\nconst debug = Debug('speexor:agent:retry')\n\nexport interface RetryOptions {\n maxRetries: number\n baseDelayMs: number\n maxDelayMs: number\n}\n\nexport const DEFAULT_RETRY: RetryOptions = {\n maxRetries: 4,\n baseDelayMs: 1000,\n maxDelayMs: 8000,\n}\n\nexport async function withRetry<T>(\n fn: () => Promise<T>,\n label: string,\n options: RetryOptions = DEFAULT_RETRY,\n): Promise<{ ok: true; value: T } | { ok: false; error: Error }> {\n let lastError: Error | undefined\n\n for (let attempt = 0; attempt <= options.maxRetries; attempt++) {\n try {\n const value = await fn()\n if (attempt > 0) {\n debug(`${label}: succeeded on attempt ${attempt + 1}/${options.maxRetries + 1}`)\n }\n return { ok: true, value }\n } catch (err) {\n lastError = err instanceof Error ? err : new Error(String(err))\n\n if (attempt < options.maxRetries) {\n const delay = Math.min(options.baseDelayMs * Math.pow(2, attempt), options.maxDelayMs)\n debug(`${label}: attempt ${attempt + 1}/${options.maxRetries + 1} failed — retrying in ${delay}ms: ${lastError.message}`)\n await new Promise((resolve) => setTimeout(resolve, delay))\n }\n }\n }\n\n debug(`${label}: all ${options.maxRetries + 1} attempts failed: ${lastError!.message}`)\n return { ok: false, error: lastError! }\n}\n","import type { AgentPlugin, AgentTask, AgentSession, AgentStatus, PluginContext, RuntimeSession } from '../../core/types.js'\nimport { withRetry } from './retry.js'\nimport Debug from 'debug'\n\nconst debug = Debug('speexor:agent:opencode')\n\nexport class OpenCodeAgent implements AgentPlugin {\n name = 'opencode-agent'\n version = '0.1.0'\n type = 'agent' as const\n\n private sessions = new Map<string, { task: AgentTask; runtime: RuntimeSession }>()\n private context!: PluginContext\n\n async initialize(context: PluginContext): Promise<void> {\n this.context = context\n debug('OpenCode agent initialized')\n }\n\n async destroy(): Promise<void> {\n this.sessions.clear()\n debug('OpenCode agent destroyed')\n }\n\n async spawn(task: AgentTask, runtime: RuntimeSession): Promise<AgentSession> {\n const result = await withRetry(async () => {\n const session: AgentSession = {\n id: `oc-${task.id}-${Date.now()}`,\n taskId: task.id,\n provider: 'opencode',\n status: 'running',\n startedAt: new Date(),\n runtimeSessionId: runtime.id,\n }\n this.sessions.set(session.id, { task, runtime })\n await this.context.eventBus.emit('agent:spawned', { sessionId: session.id, task: task.id })\n return session\n }, 'opencode:spawn')\n\n if (!result.ok) {\n throw result.error\n }\n\n debug(`OpenCode agent spawned: ${result.value.id}`)\n return result.value\n }\n\n async sendInput(sessionId: string, input: string): Promise<void> {\n const session = this.sessions.get(sessionId)\n if (!session) throw new Error(`Session ${sessionId} not found`)\n debug(`Input sent to session ${sessionId}: ${input.substring(0, 100)}...`)\n }\n\n async getStatus(sessionId: string): Promise<AgentStatus> {\n const session = this.sessions.get(sessionId)\n if (!session) return 'error'\n return 'running'\n }\n\n async kill(sessionId: string): Promise<void> {\n this.sessions.delete(sessionId)\n debug(`OpenCode agent killed: ${sessionId}`)\n }\n}\n","import type { AgentPlugin, AgentTask, AgentSession, AgentStatus, PluginContext, RuntimeSession } from '../../core/types.js'\nimport { withRetry } from './retry.js'\nimport Debug from 'debug'\n\nconst debug = Debug('speexor:agent:claude-code')\n\nexport class ClaudeCodeAgent implements AgentPlugin {\n name = 'claude-code-agent'\n version = '0.1.0'\n type = 'agent' as const\n\n private sessions = new Map<string, { task: AgentTask; runtime: RuntimeSession }>()\n private context!: PluginContext\n\n async initialize(context: PluginContext): Promise<void> {\n this.context = context\n debug('Claude Code agent initialized')\n }\n\n async destroy(): Promise<void> {\n this.sessions.clear()\n }\n\n async spawn(task: AgentTask, runtime: RuntimeSession): Promise<AgentSession> {\n const result = await withRetry(async () => {\n const session: AgentSession = {\n id: `cc-${task.id}-${Date.now()}`,\n taskId: task.id,\n provider: 'claude-code',\n status: 'running',\n startedAt: new Date(),\n runtimeSessionId: runtime.id,\n }\n this.sessions.set(session.id, { task, runtime })\n await this.context.eventBus.emit('agent:spawned', { sessionId: session.id, task: task.id })\n return session\n }, 'claude-code:spawn')\n\n if (!result.ok) {\n throw result.error\n }\n\n debug(`Claude Code agent spawned: ${result.value.id}`)\n return result.value\n }\n\n async sendInput(sessionId: string, input: string): Promise<void> {\n const session = this.sessions.get(sessionId)\n if (!session) throw new Error(`Session ${sessionId} not found`)\n debug(`sendInput to ${sessionId}: ${input.slice(0, 100)}`)\n }\n\n async getStatus(sessionId: string): Promise<AgentStatus> {\n return this.sessions.has(sessionId) ? 'running' : 'error'\n }\n\n async kill(sessionId: string): Promise<void> {\n this.sessions.delete(sessionId)\n }\n}\n","import type { AgentPlugin, AgentTask, AgentSession, AgentStatus, PluginContext, RuntimeSession } from '../../core/types.js'\nimport { withRetry } from './retry.js'\nimport Debug from 'debug'\n\nconst debug = Debug('speexor:agent:aider')\n\nexport class AiderAgent implements AgentPlugin {\n name = 'aider-agent'\n version = '0.1.0'\n type = 'agent' as const\n\n private sessions = new Map<string, { task: AgentTask; runtime: RuntimeSession }>()\n\n async initialize(_context: PluginContext): Promise<void> {\n debug('Aider agent initialized')\n }\n\n async destroy(): Promise<void> {\n this.sessions.clear()\n }\n\n async spawn(task: AgentTask, runtime: RuntimeSession): Promise<AgentSession> {\n const result = await withRetry(async () => {\n const session: AgentSession = {\n id: `ai-${task.id}-${Date.now()}`,\n taskId: task.id,\n provider: 'aider',\n status: 'running',\n startedAt: new Date(),\n runtimeSessionId: runtime.id,\n }\n this.sessions.set(session.id, { task, runtime })\n return session\n }, 'aider:spawn')\n\n if (!result.ok) {\n throw result.error\n }\n\n debug(`Aider agent spawned: ${result.value.id}`)\n return result.value\n }\n\n async sendInput(sessionId: string, input: string): Promise<void> {\n debug(`sendInput to ${sessionId}: ${input.slice(0, 50)}`)\n }\n async getStatus(sessionId: string): Promise<AgentStatus> {\n return this.sessions.has(sessionId) ? 'running' : 'error'\n }\n async kill(sessionId: string): Promise<void> {\n this.sessions.delete(sessionId)\n }\n}\n","import type { AgentPlugin, AgentTask, AgentSession, AgentStatus, PluginContext, RuntimeSession } from '../../core/types.js'\nimport { withRetry } from './retry.js'\nimport Debug from 'debug'\n\nconst debug = Debug('speexor:agent:codex')\n\nexport class CodexAgent implements AgentPlugin {\n name = 'codex-agent'\n version = '0.1.0'\n type = 'agent' as const\n\n private sessions = new Map<string, { task: AgentTask; runtime: RuntimeSession }>()\n\n async initialize(_context: PluginContext): Promise<void> {\n debug('Codex agent initialized')\n }\n\n async destroy(): Promise<void> {\n this.sessions.clear()\n }\n\n async spawn(task: AgentTask, runtime: RuntimeSession): Promise<AgentSession> {\n const result = await withRetry(async () => {\n const session: AgentSession = {\n id: `cx-${task.id}-${Date.now()}`,\n taskId: task.id,\n provider: 'codex',\n status: 'running',\n startedAt: new Date(),\n runtimeSessionId: runtime.id,\n }\n this.sessions.set(session.id, { task, runtime })\n return session\n }, 'codex:spawn')\n\n if (!result.ok) {\n throw result.error\n }\n\n debug(`Codex agent spawned: ${result.value.id}`)\n return result.value\n }\n\n async sendInput(sessionId: string, input: string): Promise<void> {\n debug(`sendInput to ${sessionId}: ${input.slice(0, 100)}`)\n }\n async getStatus(sessionId: string): Promise<AgentStatus> {\n return this.sessions.has(sessionId) ? 'running' : 'error'\n }\n async kill(sessionId: string): Promise<void> {\n this.sessions.delete(sessionId)\n }\n}\n","import type { RuntimePlugin, RuntimeSession, PluginContext } from '../../core/types.js'\nimport { execSync } from 'node:child_process'\nimport { randomUUID } from 'node:crypto'\nimport Debug from 'debug'\n\nconst debug = Debug('speexor:runtime:tmux')\n\ninterface TmuxSessionEntry {\n session: RuntimeSession\n lastOutput: string\n destroyed: boolean\n}\n\nexport class TmuxRuntime implements RuntimePlugin {\n name = 'tmux-runtime'\n version = '0.1.0'\n type = 'runtime' as const\n\n private sessions = new Map<string, TmuxSessionEntry>()\n\n async initialize(_context: PluginContext): Promise<void> {\n // Verify tmux is available\n try {\n execSync('tmux -V', { stdio: 'ignore' })\n debug('tmux available')\n } catch {\n console.warn('tmux not found — will fall back to process runtime')\n throw new Error('tmux not available on this system')\n }\n }\n\n async destroy(): Promise<void> {\n for (const [id] of this.sessions) {\n await this.destroySession(id).catch(() => {})\n }\n }\n\n async createSession(worktreePath: string): Promise<RuntimeSession> {\n const id = `tmux-${randomUUID().slice(0, 8)}`\n const sessionName = `speexor-${id}`\n\n try {\n execSync(`tmux new-session -d -s ${sessionName} -c ${worktreePath}`, { stdio: 'pipe' })\n } catch (error) {\n throw new Error(`Failed to create tmux session: ${error}`)\n }\n\n const session: RuntimeSession = {\n id,\n type: 'tmux',\n worktreePath,\n createdAt: new Date(),\n }\n\n const entry: TmuxSessionEntry = { session, lastOutput: '', destroyed: false }\n this.sessions.set(id, entry)\n debug(`tmux session created: ${id} at ${worktreePath}`)\n\n return session\n }\n\n async destroySession(sessionId: string): Promise<void> {\n const entry = this.sessions.get(sessionId)\n if (!entry) return\n entry.destroyed = true\n\n try {\n execSync(`tmux kill-session -t speexor-${sessionId}`, { stdio: 'ignore' })\n } catch {}\n\n this.sessions.delete(sessionId)\n debug(`tmux session destroyed: ${sessionId}`)\n }\n\n async sendInput(sessionId: string, input: string): Promise<void> {\n const escaped = input.replace(/'/g, \"'\\\\''\")\n execSync(`tmux send-keys -t speexor-${sessionId} '${escaped}' Enter`, { stdio: 'ignore' })\n }\n\n async getOutput(sessionId: string): Promise<string> {\n try {\n return execSync(`tmux capture-pane -t speexor-${sessionId} -p`, { encoding: 'utf-8' })\n } catch {\n return ''\n }\n }\n\n async *getLiveStream(sessionId: string): AsyncIterable<string> {\n const entry = this.sessions.get(sessionId)\n if (!entry || entry.destroyed) {\n throw new Error(`Session ${sessionId} not found or destroyed`)\n }\n\n // Tmux doesn't support native streaming, so we use polling\n // Capture pane output at regular intervals and yield new content\n const POLL_INTERVAL_MS = 500\n let lastOutput = entry.lastOutput\n\n try {\n while (!entry.destroyed) {\n try {\n const currentOutput = execSync(`tmux capture-pane -t speexor-${sessionId} -p -S -`, {\n encoding: 'utf-8',\n stdio: 'pipe',\n })\n\n if (currentOutput && currentOutput !== lastOutput) {\n const newContent = lastOutput ? currentOutput.slice(lastOutput.length) : currentOutput\n lastOutput = currentOutput\n entry.lastOutput = currentOutput\n if (newContent) {\n yield newContent\n }\n }\n } catch {\n // Session ended\n break\n }\n\n await new Promise((resolve) => setTimeout(resolve, POLL_INTERVAL_MS))\n }\n } finally {\n // Clean exit\n }\n }\n\n async getStatus(sessionId: string): Promise<'running' | 'stopped' | 'error'> {\n try {\n execSync(`tmux has-session -t speexor-${sessionId}`, { stdio: 'ignore' })\n return 'running'\n } catch {\n return 'stopped'\n }\n }\n}\n","import type { RuntimePlugin, RuntimeSession, PluginContext } from '../../core/types.js'\nimport { spawn, type ChildProcess } from 'node:child_process'\nimport { randomUUID } from 'node:crypto'\nimport { createWriteStream, existsSync, mkdirSync } from 'node:fs'\nimport { join } from 'node:path'\nimport { EventEmitter } from 'node:events'\nimport Debug from 'debug'\n\nconst debug = Debug('speexor:runtime:process')\n\ninterface SessionEntry {\n session: RuntimeSession\n process: ChildProcess\n emitter: EventEmitter\n logStream: ReturnType<typeof createWriteStream>\n destroyed: boolean\n}\n\nexport class ProcessRuntime implements RuntimePlugin {\n name = 'process-runtime'\n version = '0.1.0'\n type = 'runtime' as const\n\n private sessions = new Map<string, SessionEntry>()\n\n async initialize(_context: PluginContext): Promise<void> {\n debug('Process runtime initialized')\n }\n\n async destroy(): Promise<void> {\n for (const [id] of this.sessions) {\n await this.destroySession(id).catch(() => {})\n }\n }\n\n async createSession(worktreePath: string): Promise<RuntimeSession> {\n const id = `proc-${randomUUID().slice(0, 8)}`\n\n // Ensure log directory exists\n const logsDir = join(process.cwd(), '.speexor', 'logs')\n if (!existsSync(logsDir)) {\n mkdirSync(logsDir, { recursive: true })\n }\n\n const logStream = createWriteStream(join(logsDir, `${id}.log`), { flags: 'a' })\n const emitter = new EventEmitter()\n\n const child = spawn(process.env.SHELL || process.env.COMSPEC || 'bash', [], {\n cwd: worktreePath,\n stdio: ['pipe', 'pipe', 'pipe'],\n env: { ...process.env, TERM: 'xterm-256color' },\n })\n\n child.stdout?.on('data', (data: Buffer) => {\n const text = data.toString()\n logStream.write(`[stdout] ${text}`)\n emitter.emit('data', text)\n })\n\n child.stderr?.on('data', (data: Buffer) => {\n const text = data.toString()\n logStream.write(`[stderr] ${text}`)\n emitter.emit('data', text)\n })\n\n child.on('exit', (code) => {\n logStream.write(`[exit] Process exited with code ${code}\\n`)\n logStream.end()\n emitter.emit('exit', code)\n emitter.removeAllListeners()\n })\n\n const session: RuntimeSession = {\n id,\n type: 'process',\n worktreePath,\n pid: child.pid,\n createdAt: new Date(),\n }\n\n const entry: SessionEntry = { session, process: child, emitter, logStream, destroyed: false }\n this.sessions.set(id, entry)\n debug(`Process session created: ${id} (PID: ${child.pid})`)\n\n return session\n }\n\n async destroySession(sessionId: string): Promise<void> {\n const entry = this.sessions.get(sessionId)\n if (!entry) return\n entry.destroyed = true\n entry.emitter.removeAllListeners()\n\n entry.process.kill('SIGTERM')\n // Force kill after 5s\n setTimeout(() => {\n try {\n entry.process.kill('SIGKILL')\n } catch {}\n }, 5000)\n\n this.sessions.delete(sessionId)\n debug(`Process session destroyed: ${sessionId}`)\n }\n\n async sendInput(sessionId: string, input: string): Promise<void> {\n const entry = this.sessions.get(sessionId)\n if (!entry) throw new Error(`Session ${sessionId} not found`)\n entry.process.stdin?.write(`${input}\\n`)\n }\n\n async getOutput(sessionId: string): Promise<string> {\n const entry = this.sessions.get(sessionId)\n if (!entry) return ''\n return `Session ${sessionId} (PID: ${entry.process.pid})`\n }\n\n async *getLiveStream(sessionId: string): AsyncIterable<string> {\n const entry = this.sessions.get(sessionId)\n if (!entry || entry.destroyed) {\n throw new Error(`Session ${sessionId} not found or destroyed`)\n }\n\n const { emitter } = entry\n let buffer: string[] = []\n let resolve: ((value: IteratorResult<string>) => void) | null = null\n let done = false\n\n const onData = (data: string) => {\n if (resolve) {\n const r = resolve\n resolve = null\n r({ value: data, done: false })\n } else {\n buffer.push(data)\n }\n }\n\n const onExit = () => {\n done = true\n if (resolve) {\n const r = resolve\n resolve = null\n r({ value: '', done: true })\n }\n }\n\n emitter.on('data', onData)\n emitter.on('exit', onExit)\n\n try {\n while (!done) {\n if (buffer.length > 0) {\n yield buffer.shift()!\n } else {\n const result = await new Promise<IteratorResult<string>>((res) => {\n resolve = res\n })\n if (result.done) break\n yield result.value\n }\n }\n } finally {\n emitter.off('data', onData)\n emitter.off('exit', onExit)\n }\n }\n\n async getStatus(sessionId: string): Promise<'running' | 'stopped' | 'error'> {\n const entry = this.sessions.get(sessionId)\n if (!entry) return 'stopped'\n\n const exited = entry.process.exitCode !== null\n return exited ? 'stopped' : 'running'\n }\n}\n","import type { WorkspacePlugin, WorkspaceSession, AgentTask, PluginContext } from '../../core/types.js'\nimport { execSync } from 'node:child_process'\nimport { existsSync, mkdirSync } from 'node:fs'\nimport { join } from 'node:path'\nimport { randomUUID } from 'node:crypto'\nimport Debug from 'debug'\n\nconst debug = Debug('speexor:workspace:git-worktree')\n\nexport class GitWorktreeWorkspace implements WorkspacePlugin {\n name = 'git-worktree-workspace'\n version = '0.1.0'\n type = 'workspace' as const\n\n private sessions = new Map<string, WorkspaceSession>()\n private worktreesDir = '.speexor/worktrees'\n\n async initialize(_context: PluginContext): Promise<void> {\n const dir = join(process.cwd(), this.worktreesDir)\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true })\n }\n\n // Verify we're in a git repo\n try {\n execSync('git rev-parse --git-dir', { stdio: 'ignore' })\n } catch {\n throw new Error('Not a git repository. Run `speexor start <repo>` first.')\n }\n\n debug('Git worktree workspace initialized')\n }\n\n async destroy(): Promise<void> {\n const stale = await this.cleanupStale()\n if (stale.length > 0) {\n debug(`Cleaned up ${stale.length} stale worktree(s)`)\n }\n }\n\n async createWorktree(task: AgentTask): Promise<WorkspaceSession> {\n const branch = `speexor/${task.id}`\n const worktreePath = join(process.cwd(), this.worktreesDir, task.id)\n\n // Ensure branch exists\n try {\n execSync(`git show-ref --verify --quiet refs/heads/${branch}`, { stdio: 'ignore' })\n } catch {\n // Create branch from current HEAD\n execSync(`git branch ${branch}`, { stdio: 'pipe' })\n }\n\n // Add worktree\n try {\n execSync(`git worktree add ${worktreePath} ${branch}`, { stdio: 'pipe' })\n } catch (error) {\n throw new Error(`Failed to create worktree at ${worktreePath}: ${error}`)\n }\n\n const session: WorkspaceSession = {\n id: `wt-${task.id}-${randomUUID().slice(0, 8)}`,\n taskId: task.id,\n repository: task.repository,\n branch,\n path: worktreePath,\n createdAt: new Date(),\n }\n\n this.sessions.set(session.id, session)\n debug(`Worktree created: ${branch} at ${worktreePath}`)\n\n return session\n }\n\n async removeWorktree(sessionId: string): Promise<void> {\n const session = this.sessions.get(sessionId)\n if (!session) return\n\n try {\n execSync(`git worktree remove ${session.path}`, { stdio: 'pipe' })\n } catch {\n // Force remove if clean fails\n try {\n execSync(`git worktree remove --force ${session.path}`, { stdio: 'pipe' })\n } catch {}\n }\n\n this.sessions.delete(sessionId)\n debug(`Worktree removed: ${sessionId}`)\n }\n\n getWorktreePath(sessionId: string): string {\n const session = this.sessions.get(sessionId)\n if (!session) throw new Error(`Session ${sessionId} not found`)\n return session.path\n }\n\n async listActive(): Promise<WorkspaceSession[]> {\n return Array.from(this.sessions.values())\n }\n\n async cleanupStale(): Promise<string[]> {\n const cleaned: string[] = []\n\n try {\n const output = execSync('git worktree list --porcelain', { encoding: 'utf-8' })\n const lines = output.split('\\n')\n\n for (const line of lines) {\n if (line.startsWith('worktree ')) {\n const path = line.slice(9).trim()\n if (path.includes(this.worktreesDir)) {\n // Check if session still active\n const isActive = Array.from(this.sessions.values()).some((s) => s.path === path)\n if (!isActive && existsSync(path)) {\n try {\n execSync(`git worktree remove --force \"${path}\"`, { stdio: 'pipe' })\n cleaned.push(path)\n } catch {}\n }\n }\n }\n }\n } catch {}\n\n return cleaned\n }\n}\n","import type { TrackerPlugin, TrackerIssue, TrackerFilter, TrackerEvent, PluginContext } from '../../core/types.js'\nimport { execSync } from 'node:child_process'\nimport Debug from 'debug'\n\nconst debug = Debug('speexor:tracker:github')\n\nexport class GitHubTracker implements TrackerPlugin {\n name = 'github-tracker'\n version = '0.1.0'\n type = 'tracker' as const\n\n private handlers: Array<(event: TrackerEvent) => void> = []\n\n async initialize(_context: PluginContext): Promise<void> {\n // Verify gh CLI\n try {\n execSync('gh --version', { stdio: 'ignore' })\n debug('GitHub CLI available')\n } catch {\n throw new Error('GitHub CLI (gh) not found. Install from https://cli.github.com/')\n }\n }\n\n async destroy(): Promise<void> {\n this.handlers = []\n }\n\n async fetchIssues(filter?: TrackerFilter): Promise<TrackerIssue[]> {\n const state = filter?.state ?? 'open'\n const labels = filter?.labels?.length ? `--label \"${filter.labels.join(',')}\"` : ''\n const limit = filter?.limit ?? 30\n\n try {\n const output = execSync(\n `gh issue list --state ${state} ${labels} --limit ${limit} --json number,title,body,state,labels,url,createdAt,updatedAt`,\n { encoding: 'utf-8' },\n )\n\n const issues: TrackerIssue[] = JSON.parse(output).map((i: Record<string, unknown>) => ({\n id: String((i as { number: number }).number),\n title: i.title as string,\n description: (i.body as string) ?? '',\n state: i.state as 'open' | 'closed',\n labels: (i.labels as Array<{ name: string }>)?.map((l: { name: string }) => l.name) ?? [],\n url: i.url as string,\n createdAt: new Date(i.createdAt as string),\n updatedAt: new Date(i.updatedAt as string),\n }))\n\n return issues\n } catch (error) {\n debug('Failed to fetch issues:', error)\n return []\n }\n }\n\n async getIssue(id: string): Promise<TrackerIssue | null> {\n try {\n const output = execSync(`gh issue view ${id} --json number,title,body,state,labels,url,createdAt,updatedAt`, { encoding: 'utf-8' })\n\n const i = JSON.parse(output)\n return {\n id: String(i.number),\n title: i.title,\n description: i.body ?? '',\n state: i.state,\n labels: i.labels?.map((l: { name: string }) => l.name) ?? [],\n url: i.url,\n createdAt: new Date(i.createdAt),\n updatedAt: new Date(i.updatedAt),\n }\n } catch {\n return null\n }\n }\n\n onEvent(handler: (event: TrackerEvent) => void): void {\n this.handlers.push(handler)\n }\n}\n","import type { SCMPlugin, PRInfo, PRStatus, PRComment, CIRun, TrackerEvent, PluginContext } from '../../core/types.js'\nimport { execSync } from 'node:child_process'\nimport Debug from 'debug'\n\nconst debug = Debug('speexor:scm:github')\n\nexport class GitHubSCM implements SCMPlugin {\n name = 'github-scm'\n version = '0.1.0'\n type = 'scm' as const\n\n private handlers: Array<(event: TrackerEvent) => void> = []\n\n async initialize(_context: PluginContext): Promise<void> {\n try {\n execSync('gh --version', { stdio: 'ignore' })\n debug('GitHub CLI available')\n } catch {\n throw new Error('GitHub CLI (gh) not found')\n }\n }\n\n async destroy(): Promise<void> {\n this.handlers = []\n }\n\n async createBranch(baseBranch: string, newBranch: string): Promise<void> {\n execSync(`git fetch origin ${baseBranch}`, { stdio: 'pipe' })\n execSync(`git checkout -b ${newBranch} origin/${baseBranch}`, { stdio: 'pipe' })\n }\n\n async commitAndPush(branch: string, message: string): Promise<string> {\n execSync('git add -A', { stdio: 'pipe' })\n execSync(`git commit -m \"${message.replace(/\"/g, '\\\\\"')}\"`, { stdio: 'pipe' })\n execSync(`git push origin ${branch}`, { stdio: 'pipe' })\n\n const sha = execSync('git rev-parse HEAD', { encoding: 'utf-8' }).trim()\n return sha\n }\n\n async createPullRequest(title: string, description: string, head: string, base: string): Promise<PRInfo> {\n const escapedBody = description.replace(/\"/g, '\\\\\"').replace(/\\n/g, '\\\\n')\n const output = execSync(\n `gh pr create --title \"${title}\" --body \"${escapedBody}\" --head ${head} --base ${base} --json number,title,url,state,headRefName,baseRefName,createdAt`,\n { encoding: 'utf-8' },\n )\n\n const pr = JSON.parse(output)\n return {\n id: String(pr.number),\n url: pr.url,\n title: pr.title,\n state: pr.state,\n headBranch: pr.headRefName,\n baseBranch: pr.baseRefName,\n createdAt: new Date(pr.createdAt),\n }\n }\n\n async getPRStatus(prId: string): Promise<PRStatus> {\n const output = execSync(\n `gh pr view ${prId} --json number,state,mergeable,reviews,statusCheckRollup --jq '{state,mergeable,reviews,checks: .statusCheckRollup}'`,\n { encoding: 'utf-8' },\n )\n\n const data = JSON.parse(output)\n\n return {\n id: prId,\n state: data.state,\n mergeable: data.mergeable === 'MERGEABLE',\n ciStatus: this.determineCIStatus(data.checks),\n reviewStatus: this.determineReviewStatus(data.reviews),\n }\n }\n\n async getPRComments(prId: string): Promise<PRComment[]> {\n const output = execSync(\n `gh pr view ${prId} --json comments --jq '.comments[] | {id: .id, author: .author.name, body: .body, createdAt: .createdAt}'`,\n { encoding: 'utf-8' },\n )\n\n // gh returns multiple JSON objects, need to parse as array\n const lines = output.trim().split('\\n')\n return lines\n .filter((l) => l.trim())\n .map((line) => {\n try {\n return JSON.parse(line) as PRComment\n } catch {\n return null\n }\n })\n .filter((c): c is PRComment => c !== null)\n }\n\n async getCIRuns(prId: string): Promise<CIRun[]> {\n const output = execSync(\n `gh pr view ${prId} --json statusCheckRollup --jq '.statusCheckRollup[] | {id: .databaseId, name: .name, status: .status, conclusion: .conclusion, url: .detailsUrl}'`,\n { encoding: 'utf-8' },\n )\n\n const lines = output.trim().split('\\n')\n return lines\n .filter((l) => l.trim())\n .map((line) => {\n try {\n return JSON.parse(line) as CIRun\n } catch {\n return null\n }\n })\n .filter((c): c is CIRun => c !== null)\n }\n\n async mergePR(prId: string, method: 'merge' | 'squash' | 'rebase' = 'squash'): Promise<void> {\n execSync(`gh pr merge ${prId} --${method}`, { stdio: 'pipe' })\n }\n\n onEvent(handler: (event: TrackerEvent) => void): void {\n this.handlers.push(handler)\n }\n\n private determineCIStatus(checks: Array<{ status: string; conclusion: string | null }>): 'pending' | 'passing' | 'failing' | 'unknown' {\n if (!checks || checks.length === 0) return 'unknown'\n\n const allPassed = checks.every((c) => c.conclusion === 'success')\n const anyFailed = checks.some((c) => c.conclusion === 'failure' || c.conclusion === 'cancelled')\n const anyPending = checks.some((c) => c.status === 'in_progress' || c.status === 'queued')\n\n if (anyFailed) return 'failing'\n if (anyPending) return 'pending'\n if (allPassed) return 'passing'\n return 'unknown'\n }\n\n private determineReviewStatus(reviews: Array<{ state: string }>): 'approved' | 'changes-requested' | 'pending' | 'none' {\n if (!reviews || reviews.length === 0) return 'none'\n\n const latestState = reviews[reviews.length - 1]?.state\n if (latestState === 'APPROVED') return 'approved'\n if (latestState === 'CHANGES_REQUESTED') return 'changes-requested'\n if (latestState === 'PENDING') return 'pending'\n return 'none'\n }\n}\n","import type { NotifierPlugin, PluginContext } from '../../core/types.js'\nimport { execSync } from 'node:child_process'\nimport Debug from 'debug'\n\nconst debug = Debug('speexor:notifier:desktop')\n\nexport class DesktopNotifier implements NotifierPlugin {\n name = 'desktop-notifier'\n version = '0.1.0'\n type = 'notifier' as const\n\n async initialize(_context: PluginContext): Promise<void> {\n debug('Desktop notifier initialized')\n }\n\n async destroy(): Promise<void> {}\n\n async notify(level: 'info' | 'warn' | 'error' | 'success', title: string, message: string): Promise<void> {\n const platform = process.platform\n\n try {\n if (platform === 'darwin') {\n const icon = level === 'error' ? '⚠️' : level === 'success' ? '✅' : level === 'warn' ? '⚠️' : 'ℹ️'\n execSync(\n `osascript -e 'display notification \"${message.replace(/\"/g, '\\\\\"')}\" with title \"${icon} ${title.replace(/\"/g, '\\\\\"')}\"'`,\n { stdio: 'ignore' },\n )\n } else if (platform === 'win32') {\n // Windows -- use PowerShell\n execSync(`powershell -c \"New-BurntToastNotification -Text '${title}', '${message}'\"`, { stdio: 'ignore' })\n } else if (platform === 'linux') {\n execSync(`notify-send \"${title}\" \"${message}\"`, { stdio: 'ignore' })\n }\n\n debug(`Desktop notification: ${title} - ${message}`)\n } catch (error) {\n // Fail silently -- desktop notifications are non-critical\n debug(`Failed to send notification: ${error}`)\n }\n }\n}\n","import type { PluginContext } from '../../core/types.js'\nimport type { TerminalPlugin } from './types.js'\nimport { spawn, type ChildProcess } from 'node:child_process'\nimport Debug from 'debug'\n\nconst debug = Debug('speexor:terminal')\n\ninterface TerminalSession {\n sessionId: string\n process: ChildProcess\n handlers: Set<(data: string) => void>\n buffer: string\n}\n\nexport class TerminalPluginImpl implements TerminalPlugin {\n name = 'terminal'\n version = '0.1.0'\n type = 'terminal' as const\n\n private sessions = new Map<string, TerminalSession>()\n private context!: PluginContext\n\n async initialize(context: PluginContext): Promise<void> {\n this.context = context\n debug('Terminal plugin initialized')\n }\n\n async destroy(): Promise<void> {\n for (const [sessionId] of this.sessions) {\n await this.detach(sessionId).catch(() => {})\n }\n this.sessions.clear()\n debug('Terminal plugin destroyed')\n }\n\n async attach(sessionId: string): Promise<void> {\n if (this.sessions.has(sessionId)) return\n\n const child = spawn(process.env.SHELL || process.env.COMSPEC || 'cmd.exe', [], {\n stdio: ['pipe', 'pipe', 'pipe'],\n env: { ...process.env, TERM: 'xterm-256color' },\n })\n\n const session: TerminalSession = {\n sessionId,\n process: child,\n handlers: new Set(),\n buffer: '',\n }\n\n child.stdout?.on('data', (data: Buffer) => {\n const text = data.toString()\n session.buffer += text\n for (const handler of session.handlers) {\n handler(text)\n }\n })\n\n child.stderr?.on('data', (data: Buffer) => {\n const text = data.toString()\n session.buffer += text\n for (const handler of session.handlers) {\n handler(text)\n }\n })\n\n child.on('exit', (code) => {\n debug(`Terminal session ${sessionId} exited with code ${code}`)\n this.sessions.delete(sessionId)\n this.context.eventBus.emit('terminal:detached', {\n sessionId,\n exitCode: code,\n })\n })\n\n this.sessions.set(sessionId, session)\n this.context.eventBus.emit('terminal:attached', { sessionId })\n debug(`Terminal session attached: ${sessionId}`)\n }\n\n async detach(sessionId: string): Promise<void> {\n const session = this.sessions.get(sessionId)\n if (!session) return\n\n session.process.kill('SIGTERM')\n setTimeout(() => {\n try {\n session.process.kill('SIGKILL')\n } catch {}\n }, 5000)\n\n session.handlers.clear()\n this.sessions.delete(sessionId)\n this.context.eventBus.emit('terminal:detached', { sessionId })\n debug(`Terminal session detached: ${sessionId}`)\n }\n\n async write(sessionId: string, data: string): Promise<void> {\n const session = this.sessions.get(sessionId)\n if (!session) throw new Error(`Terminal session ${sessionId} not found`)\n session.process.stdin?.write(data)\n }\n\n onData(sessionId: string, handler: (data: string) => void): void {\n const session = this.sessions.get(sessionId)\n if (!session) throw new Error(`Terminal session ${sessionId} not found`)\n session.handlers.add(handler)\n }\n}\n","import type { PluginModule } from \"../core/types.js\";\nimport { OpenCodeAgent } from \"./agent/opencode.js\";\nimport { ClaudeCodeAgent } from \"./agent/claude-code.js\";\nimport { AiderAgent } from \"./agent/aider.js\";\nimport { CodexAgent } from \"./agent/codex.js\";\nimport { TmuxRuntime } from \"./runtime/tmux.js\";\nimport { ProcessRuntime } from \"./runtime/process.js\";\nimport { GitWorktreeWorkspace } from \"./workspace/git-worktree.js\";\nimport { GitHubTracker } from \"./tracker/github.js\";\nimport { GitHubSCM } from \"./scm/github.js\";\nimport { DesktopNotifier } from \"./notifier/desktop.js\";\nimport { TerminalPluginImpl } from \"./terminal/index.js\";\n\nexport function loadAllPlugins(): PluginModule[] {\n\tconst plugins: PluginModule[] = [\n\t\t// Agent adapters\n\t\tnew OpenCodeAgent(),\n\t\tnew ClaudeCodeAgent(),\n\t\tnew AiderAgent(),\n\t\tnew CodexAgent(),\n\n\t\t// Runtime\n\t\tnew TmuxRuntime(),\n\t\tnew ProcessRuntime(),\n\n\t\t// Workspace\n\t\tnew GitWorktreeWorkspace(),\n\n\t\t// Tracker\n\t\tnew GitHubTracker(),\n\n\t\t// SCM\n\t\tnew GitHubSCM(),\n\n\t\t// Notifier\n\t\tnew DesktopNotifier(),\n\n\t\t// Terminal\n\t\tnew TerminalPluginImpl(),\n\t];\n\n\treturn plugins;\n}\n\nexport function loadPluginByType(type: string): PluginModule | undefined {\n\treturn loadAllPlugins().find((p) => p.type === type);\n}\n"]}
|