@hatchway/cli 0.51.3 → 0.51.4
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/dist/chunks/{Banner-_pJB7dCO.js → Banner-Dslid-AI.js} +2 -3
- package/dist/chunks/{Banner-_pJB7dCO.js.map → Banner-Dslid-AI.js.map} +1 -1
- package/dist/chunks/devtools-CPruVlOo.js.map +1 -1
- package/dist/chunks/{index-CovlIWnu.js → index-y6cN9k8l.js} +2 -3
- package/dist/chunks/{index-CovlIWnu.js.map → index-y6cN9k8l.js.map} +1 -1
- package/dist/chunks/{init-Eo7XainT.js → init-Cw1DkJP-.js} +6 -5
- package/dist/chunks/{init-Eo7XainT.js.map → init-Cw1DkJP-.js.map} +1 -1
- package/dist/chunks/{init-tui-Cgxsmmn-.js → init-tui-WELhLH16.js} +7 -6
- package/dist/chunks/{init-tui-Cgxsmmn-.js.map → init-tui-WELhLH16.js.map} +1 -1
- package/dist/chunks/{main-tui-D580QurF.js → main-tui-BI9X6TRI.js} +8 -7
- package/dist/chunks/{main-tui-D580QurF.js.map → main-tui-BI9X6TRI.js.map} +1 -1
- package/dist/chunks/{manager-0U0BIO9r.js → manager-LKbmrJIf.js} +6 -97
- package/dist/chunks/manager-LKbmrJIf.js.map +1 -0
- package/dist/chunks/{run-DbXViD2C.js → run-Bvfox4jS.js} +10 -9
- package/dist/chunks/{run-DbXViD2C.js.map → run-Bvfox4jS.js.map} +1 -1
- package/dist/chunks/{start-BEIpWjyK.js → start-Drql12dh.js} +8 -7
- package/dist/chunks/{start-BEIpWjyK.js.map → start-Drql12dh.js.map} +1 -1
- package/dist/chunks/{theme-CzLXk_6s.js → theme-BmodcXss.js} +3430 -631
- package/dist/chunks/theme-BmodcXss.js.map +1 -0
- package/dist/chunks/{use-app-Dw8M2HNg.js → use-app-0PVAweWQ.js} +2 -2
- package/dist/chunks/{use-app-Dw8M2HNg.js.map → use-app-0PVAweWQ.js.map} +1 -1
- package/dist/chunks/{useBuildState-DjvkDA6v.js → useBuildState-CGyaE4Ou.js} +3 -3
- package/dist/chunks/{useBuildState-DjvkDA6v.js.map → useBuildState-CGyaE4Ou.js.map} +1 -1
- package/dist/cli/index.js +5 -5
- package/dist/index.js +1 -53
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/dist/chunks/manager-0U0BIO9r.js.map +0 -1
- package/dist/chunks/theme-CzLXk_6s.js.map +0 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// Hatchway CLI - Built with Rollup
|
|
2
|
-
import { r as reactExports, A as AppContext } from './theme-
|
|
2
|
+
import { r as reactExports, A as AppContext } from './theme-BmodcXss.js';
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
`useApp` is a React hook that exposes a method to manually exit the app (unmount).
|
|
@@ -7,4 +7,4 @@ import { r as reactExports, A as AppContext } from './theme-CzLXk_6s.js';
|
|
|
7
7
|
const useApp = () => reactExports.useContext(AppContext);
|
|
8
8
|
|
|
9
9
|
export { useApp as u };
|
|
10
|
-
//# sourceMappingURL=use-app-
|
|
10
|
+
//# sourceMappingURL=use-app-0PVAweWQ.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-app-
|
|
1
|
+
{"version":3,"file":"use-app-0PVAweWQ.js","sources":["../../../../node_modules/.pnpm/ink@6.8.0_@types+react@19.2.7_react@19.2.7/node_modules/ink/build/hooks/use-app.js"],"sourcesContent":["import { useContext } from 'react';\nimport AppContext from '../components/AppContext.js';\n/**\n`useApp` is a React hook that exposes a method to manually exit the app (unmount).\n*/\nconst useApp = () => useContext(AppContext);\nexport default useApp;\n//# sourceMappingURL=use-app.js.map"],"names":["useContext"],"mappings":";;;AAEA;AACA;AACA;AACK,MAAC,MAAM,GAAG,MAAMA,uBAAU,CAAC,UAAU;;;;","x_google_ignoreList":[0]}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
// Hatchway CLI - Built with Rollup
|
|
2
|
-
import { r as reactExports, j as jsxRuntimeExports, B as Box, c as colors, T as Text, s as symbols } from './theme-
|
|
2
|
+
import { r as reactExports, j as jsxRuntimeExports, B as Box, c as colors, T as Text, s as symbols } from './theme-BmodcXss.js';
|
|
3
3
|
import 'node:stream';
|
|
4
4
|
import 'node:process';
|
|
5
5
|
import 'chalk';
|
|
6
|
-
import 'node:events';
|
|
7
6
|
import { g as getLogBuffer } from './log-buffer-eHyX6VEc.js';
|
|
7
|
+
import 'node:events';
|
|
8
8
|
import { g as getLogger } from './runner-logger-instance-CaqCFnhr.js';
|
|
9
9
|
|
|
10
10
|
function BuildPanel({ build, width, height }) {
|
|
@@ -328,4 +328,4 @@ function useLogEntries(maxEntries = 100) {
|
|
|
328
328
|
}
|
|
329
329
|
|
|
330
330
|
export { BuildPanel as B, useLogEntries as a, useBuildState as u };
|
|
331
|
-
//# sourceMappingURL=useBuildState-
|
|
331
|
+
//# sourceMappingURL=useBuildState-CGyaE4Ou.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useBuildState-DjvkDA6v.js","sources":["../../src/cli/tui/components/BuildPanel.tsx","../../src/cli/tui/hooks/useBuildState.ts"],"sourcesContent":["/**\n * BuildPanel - Left panel showing current build info and todo list\n * Takes up 20% of width, shows:\n * - Project name\n * - Template name\n * - Agent/model\n * - Elapsed time\n * - Todo list with status indicators\n */\n\nimport React, { useState, useEffect } from 'react';\nimport { Box, Text } from 'ink';\nimport { colors, symbols } from '../theme.js';\nimport type { BuildInfo, TodoItem } from '../../../lib/logging/types.js';\n\ninterface BuildPanelProps {\n build: BuildInfo | null;\n width: number;\n height?: number;\n}\n\nexport function BuildPanel({ build, width, height }: BuildPanelProps) {\n const [elapsedTime, setElapsedTime] = useState(0);\n\n // Update elapsed time every second\n useEffect(() => {\n if (!build || build.status !== 'running') {\n setElapsedTime(0);\n return;\n }\n\n const startTime = build.startTime;\n const updateElapsed = () => {\n const now = Date.now();\n setElapsedTime(Math.floor((now - startTime) / 1000));\n };\n\n updateElapsed();\n const interval = setInterval(updateElapsed, 1000);\n return () => clearInterval(interval);\n }, [build?.id, build?.status, build?.startTime]);\n\n // Don't render if no build\n if (!build) {\n return null;\n }\n\n const truncate = (str: string, maxLen: number) => {\n if (str.length <= maxLen) return str;\n return str.substring(0, maxLen - 3) + '...';\n };\n\n const formatDuration = (seconds: number): string => {\n if (seconds < 60) return `${seconds}s`;\n const mins = Math.floor(seconds / 60);\n const secs = seconds % 60;\n return `${mins}m ${secs}s`;\n };\n\n // Determine elapsed time to show\n const displayElapsed = build.status === 'running' \n ? elapsedTime \n : build.endTime \n ? Math.floor((build.endTime - build.startTime) / 1000)\n : 0;\n\n return (\n <Box\n flexDirection=\"column\"\n width={width}\n height={height}\n borderStyle=\"single\"\n borderColor={colors.darkGray}\n paddingX={1}\n >\n {/* Header */}\n <Box marginBottom={1}>\n <Text color={colors.cyan} bold>BUILD</Text>\n </Box>\n\n {/* Project name */}\n <Box>\n <Text color={colors.white}>{truncate(build.projectSlug, width - 4)}</Text>\n </Box>\n\n {/* Template */}\n {build.template && (\n <Box>\n <Text color={colors.gray}>{truncate(build.template, width - 4)}</Text>\n </Box>\n )}\n\n {/* Agent/model */}\n <Box>\n <Text color={colors.gray}>\n {build.agent === 'claude-code' ? build.model : build.agent}\n </Text>\n </Box>\n\n {/* Elapsed time with status */}\n <Box marginTop={1}>\n {build.status === 'running' && (\n <Text color={colors.cyan}>\n {symbols.spinnerFrames[Math.floor(Date.now() / 120) % symbols.spinnerFrames.length]} {formatDuration(displayElapsed)}\n </Text>\n )}\n {build.status === 'completed' && (\n <Text color={colors.success}>\n {symbols.check} {formatDuration(displayElapsed)}\n </Text>\n )}\n {build.status === 'failed' && (\n <Text color={colors.error}>\n {symbols.cross} {formatDuration(displayElapsed)}\n </Text>\n )}\n {build.status === 'pending' && (\n <Text color={colors.gray}>Pending...</Text>\n )}\n </Box>\n\n {/* Todo list */}\n {build.todos.length > 0 && (\n <Box flexDirection=\"column\" marginTop={1}>\n <Text color={colors.dimGray} bold>TASKS</Text>\n <TodoList todos={build.todos} maxWidth={width - 6} maxVisible={10} />\n </Box>\n )}\n\n {/* Error message if failed */}\n {build.status === 'failed' && build.error && (\n <Box marginTop={1}>\n <Text color={colors.error} wrap=\"truncate\">\n {truncate(build.error, width - 4)}\n </Text>\n </Box>\n )}\n </Box>\n );\n}\n\n/**\n * TodoList - Smart display of todo items\n * - Shows up to maxVisible items (default 10)\n * - Prioritizes in_progress and pending tasks\n * - Hides completed tasks when space is needed\n * - Shows count of hidden completed tasks\n */\nfunction TodoList({ todos, maxWidth, maxVisible = 10 }: { \n todos: TodoItem[]; \n maxWidth: number;\n maxVisible?: number;\n}) {\n // Separate todos by status\n const inProgress = todos.filter(t => t.status === 'in_progress');\n const pending = todos.filter(t => t.status === 'pending');\n const completed = todos.filter(t => t.status === 'completed');\n const cancelled = todos.filter(t => t.status === 'cancelled');\n \n // Calculate how many slots we have for each category\n // Priority: in_progress > pending > completed > cancelled\n const activeCount = inProgress.length + pending.length;\n \n let visibleTodos: TodoItem[] = [];\n let hiddenCompletedCount = 0;\n \n if (todos.length <= maxVisible) {\n // All todos fit - show them in order\n visibleTodos = todos;\n } else {\n // Need to prioritize - always show in_progress and pending first\n visibleTodos = [...inProgress, ...pending];\n \n // Calculate remaining slots for completed tasks\n const remainingSlots = maxVisible - visibleTodos.length;\n \n if (remainingSlots > 0) {\n // Show as many completed as we can fit\n visibleTodos = [...visibleTodos, ...completed.slice(0, remainingSlots)];\n hiddenCompletedCount = Math.max(0, completed.length - remainingSlots);\n } else {\n hiddenCompletedCount = completed.length;\n }\n \n // Add cancelled if there's still room\n const slotsAfterCompleted = maxVisible - visibleTodos.length;\n if (slotsAfterCompleted > 0) {\n visibleTodos = [...visibleTodos, ...cancelled.slice(0, slotsAfterCompleted)];\n }\n }\n \n // Sort visible todos to maintain logical order (by original index)\n visibleTodos.sort((a, b) => {\n const aIndex = todos.findIndex(t => t.id === a.id);\n const bIndex = todos.findIndex(t => t.id === b.id);\n return aIndex - bIndex;\n });\n \n return (\n <>\n {visibleTodos.map((todo) => (\n <TodoRow key={todo.id} todo={todo} maxWidth={maxWidth} />\n ))}\n {hiddenCompletedCount > 0 && (\n <Text color={colors.dimGray}>✓ {hiddenCompletedCount} completed</Text>\n )}\n </>\n );\n}\n\n// Todo row component\nfunction TodoRow({ todo, maxWidth }: { todo: TodoItem; maxWidth: number }) {\n const statusIcon = {\n pending: <Text color={colors.dimGray}>{symbols.hollowDot}</Text>,\n in_progress: <Text color={colors.cyan}>{symbols.spinnerFrames[Math.floor(Date.now() / 120) % symbols.spinnerFrames.length]}</Text>,\n completed: <Text color={colors.success}>{symbols.check}</Text>,\n cancelled: <Text color={colors.dimGray}>⊘</Text>,\n }[todo.status];\n\n const textColor = {\n pending: colors.dimGray,\n in_progress: colors.white,\n completed: colors.gray,\n cancelled: colors.dimGray,\n }[todo.status];\n\n const truncatedContent = todo.content.length > maxWidth - 3\n ? todo.content.substring(0, maxWidth - 6) + '...'\n : todo.content;\n\n return (\n <Box>\n {statusIcon}\n <Text color={textColor}> {truncatedContent}</Text>\n </Box>\n );\n}\n","/**\n * useBuildState - Hook to track build state and todos\n * \n * Manages:\n * - Active builds list\n * - Current build selection (for multi-build navigation)\n * - Todo list updates\n * - Build lifecycle events\n * \n * Subscribes to RunnerLogger events to automatically update state.\n * \n * IMPORTANT: Uses refs for event handlers to prevent race conditions\n * where events could be missed during re-subscriptions caused by\n * callback dependency changes.\n */\n\nimport { useState, useEffect, useCallback, useRef } from 'react';\nimport type { BuildInfo, TodoItem, LogEntry } from '../../../lib/logging/types.js';\nimport { getLogBuffer } from '../../../lib/logging/log-buffer.js';\nimport { getLogger } from '../../../lib/logging/index.js';\n\nexport interface BuildState {\n builds: BuildInfo[];\n currentBuildIndex: number;\n currentBuild: BuildInfo | null;\n isConnected: boolean;\n isVerbose: boolean;\n}\n\nexport interface BuildStateActions {\n nextBuild: () => void;\n prevBuild: () => void;\n setVerbose: (verbose: boolean) => void;\n toggleVerbose: () => void;\n addBuild: (build: BuildInfo) => void;\n updateBuild: (buildId: string, updates: Partial<BuildInfo>) => void;\n updateTodos: (buildId: string, todos: TodoItem[]) => void;\n setConnected: (connected: boolean) => void;\n}\n\nexport function useBuildState(): [BuildState, BuildStateActions] {\n const [builds, setBuilds] = useState<BuildInfo[]>([]);\n const [currentBuildIndex, setCurrentBuildIndex] = useState(0);\n const [isConnected, setIsConnected] = useState(false);\n const [isVerbose, setIsVerbose] = useState(false);\n\n // Derive current build from index\n const currentBuild = builds.length > 0 ? builds[currentBuildIndex] ?? null : null;\n\n // Navigation between builds\n const nextBuild = useCallback(() => {\n setCurrentBuildIndex(prev => {\n if (builds.length === 0) return 0;\n return (prev + 1) % builds.length;\n });\n }, [builds.length]);\n\n const prevBuild = useCallback(() => {\n setCurrentBuildIndex(prev => {\n if (builds.length === 0) return 0;\n return prev === 0 ? builds.length - 1 : prev - 1;\n });\n }, [builds.length]);\n\n // Verbose toggle - updates both UI state and logger\n const toggleVerbose = useCallback(() => {\n setIsVerbose(prev => {\n const newValue = !prev;\n // Also update the logger's verbose flag\n try {\n const logger = getLogger();\n logger.setVerbose(newValue);\n } catch {\n // Logger not initialized yet\n }\n return newValue;\n });\n }, []);\n\n // Track when a new build is added to auto-select it\n const [pendingNewBuildId, setPendingNewBuildId] = useState<string | null>(null);\n\n // Add a new build\n const addBuild = useCallback((build: BuildInfo) => {\n setBuilds(prev => {\n // Check if build already exists\n const exists = prev.some(b => b.id === build.id);\n if (exists) {\n // Update existing build\n return prev.map(b => b.id === build.id ? { ...b, ...build } : b);\n }\n // Mark this as a new build to auto-select\n setPendingNewBuildId(build.id);\n // Add new build\n return [...prev, build];\n });\n }, []);\n\n // Auto-select newly added builds\n useEffect(() => {\n if (pendingNewBuildId) {\n const index = builds.findIndex(b => b.id === pendingNewBuildId);\n if (index !== -1) {\n setCurrentBuildIndex(index);\n }\n setPendingNewBuildId(null);\n }\n }, [builds, pendingNewBuildId]);\n\n // Update an existing build\n const updateBuild = useCallback((buildId: string, updates: Partial<BuildInfo>) => {\n setBuilds(prev => prev.map(build => \n build.id === buildId ? { ...build, ...updates } : build\n ));\n }, []);\n\n // Update todos for a build\n const updateTodos = useCallback((buildId: string, todos: TodoItem[]) => {\n setBuilds(prev => prev.map(build =>\n build.id === buildId ? { ...build, todos } : build\n ));\n }, []);\n\n // Connection status\n const setConnected = useCallback((connected: boolean) => {\n setIsConnected(connected);\n }, []);\n\n // Use refs to store the latest callbacks so event handlers always call current versions\n // This prevents race conditions where events could be missed during re-subscriptions\n const addBuildRef = useRef(addBuild);\n const updateBuildRef = useRef(updateBuild);\n const updateTodosRef = useRef(updateTodos);\n \n // Keep refs up to date\n useEffect(() => {\n addBuildRef.current = addBuild;\n }, [addBuild]);\n \n useEffect(() => {\n updateBuildRef.current = updateBuild;\n }, [updateBuild]);\n \n useEffect(() => {\n updateTodosRef.current = updateTodos;\n }, [updateTodos]);\n\n // Subscribe to RunnerLogger events - only runs ONCE on mount\n // Uses refs for callbacks to avoid re-subscription race conditions\n useEffect(() => {\n const logger = getLogger();\n \n // Sync initial state from logger (in case events already fired)\n setIsConnected(logger.isConnected());\n setIsVerbose(logger.isVerbose());\n \n // Load any existing builds\n const existingBuilds = logger.getAllBuilds();\n if (existingBuilds.length > 0) {\n for (const build of existingBuilds) {\n addBuildRef.current(build);\n }\n }\n \n // Handle build start events - use ref to get latest callback\n const handleBuildStart = (build: BuildInfo) => {\n addBuildRef.current(build);\n };\n \n // Handle build update events\n const handleBuildUpdate = (build: BuildInfo) => {\n updateBuildRef.current(build.id, build);\n };\n \n // Handle build complete events\n const handleBuildComplete = (build: BuildInfo) => {\n updateBuildRef.current(build.id, { ...build, status: build.status });\n };\n \n // Handle todo updates\n const handleTodoUpdate = (buildId: string, todos: TodoItem[]) => {\n updateTodosRef.current(buildId, todos);\n };\n \n // Handle connection events\n const handleConnected = () => {\n setIsConnected(true);\n };\n \n const handleDisconnected = () => {\n setIsConnected(false);\n };\n \n // Handle verbose change\n const handleVerboseChange = (verbose: boolean) => {\n setIsVerbose(verbose);\n };\n \n // Subscribe to events\n logger.on('buildStart', handleBuildStart);\n logger.on('buildUpdate', handleBuildUpdate);\n logger.on('buildComplete', handleBuildComplete);\n logger.on('todoUpdate', handleTodoUpdate);\n logger.on('connected', handleConnected);\n logger.on('disconnected', handleDisconnected);\n logger.on('verboseChange', handleVerboseChange);\n \n // Cleanup - only runs on unmount\n return () => {\n logger.off('buildStart', handleBuildStart);\n logger.off('buildUpdate', handleBuildUpdate);\n logger.off('buildComplete', handleBuildComplete);\n logger.off('todoUpdate', handleTodoUpdate);\n logger.off('connected', handleConnected);\n logger.off('disconnected', handleDisconnected);\n logger.off('verboseChange', handleVerboseChange);\n };\n }, []); // Empty deps - only subscribe once on mount\n\n const state: BuildState = {\n builds,\n currentBuildIndex,\n currentBuild,\n isConnected,\n isVerbose,\n };\n\n const actions: BuildStateActions = {\n nextBuild,\n prevBuild,\n setVerbose: setIsVerbose,\n toggleVerbose,\n addBuild,\n updateBuild,\n updateTodos,\n setConnected,\n };\n\n return [state, actions];\n}\n\n/**\n * Hook to subscribe to log entries from the buffer\n */\nexport function useLogEntries(maxEntries: number = 100): LogEntry[] {\n const [entries, setEntries] = useState<LogEntry[]>([]);\n\n useEffect(() => {\n const buffer = getLogBuffer();\n \n // Initialize with current entries\n setEntries(buffer.getRecent(maxEntries));\n\n // Subscribe to new entries\n const unsubscribe = buffer.onLog((entry) => {\n setEntries(prev => {\n const newEntries = [...prev, entry];\n // Keep only the most recent entries\n if (newEntries.length > maxEntries) {\n return newEntries.slice(-maxEntries);\n }\n return newEntries;\n });\n });\n\n return unsubscribe;\n }, [maxEntries]);\n\n return entries;\n}\n"],"names":["useState","useEffect","_jsxs","_jsx","useCallback","useRef"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useBuildState-CGyaE4Ou.js","sources":["../../src/cli/tui/components/BuildPanel.tsx","../../src/cli/tui/hooks/useBuildState.ts"],"sourcesContent":["/**\n * BuildPanel - Left panel showing current build info and todo list\n * Takes up 20% of width, shows:\n * - Project name\n * - Template name\n * - Agent/model\n * - Elapsed time\n * - Todo list with status indicators\n */\n\nimport React, { useState, useEffect } from 'react';\nimport { Box, Text } from 'ink';\nimport { colors, symbols } from '../theme.js';\nimport type { BuildInfo, TodoItem } from '../../../lib/logging/types.js';\n\ninterface BuildPanelProps {\n build: BuildInfo | null;\n width: number;\n height?: number;\n}\n\nexport function BuildPanel({ build, width, height }: BuildPanelProps) {\n const [elapsedTime, setElapsedTime] = useState(0);\n\n // Update elapsed time every second\n useEffect(() => {\n if (!build || build.status !== 'running') {\n setElapsedTime(0);\n return;\n }\n\n const startTime = build.startTime;\n const updateElapsed = () => {\n const now = Date.now();\n setElapsedTime(Math.floor((now - startTime) / 1000));\n };\n\n updateElapsed();\n const interval = setInterval(updateElapsed, 1000);\n return () => clearInterval(interval);\n }, [build?.id, build?.status, build?.startTime]);\n\n // Don't render if no build\n if (!build) {\n return null;\n }\n\n const truncate = (str: string, maxLen: number) => {\n if (str.length <= maxLen) return str;\n return str.substring(0, maxLen - 3) + '...';\n };\n\n const formatDuration = (seconds: number): string => {\n if (seconds < 60) return `${seconds}s`;\n const mins = Math.floor(seconds / 60);\n const secs = seconds % 60;\n return `${mins}m ${secs}s`;\n };\n\n // Determine elapsed time to show\n const displayElapsed = build.status === 'running' \n ? elapsedTime \n : build.endTime \n ? Math.floor((build.endTime - build.startTime) / 1000)\n : 0;\n\n return (\n <Box\n flexDirection=\"column\"\n width={width}\n height={height}\n borderStyle=\"single\"\n borderColor={colors.darkGray}\n paddingX={1}\n >\n {/* Header */}\n <Box marginBottom={1}>\n <Text color={colors.cyan} bold>BUILD</Text>\n </Box>\n\n {/* Project name */}\n <Box>\n <Text color={colors.white}>{truncate(build.projectSlug, width - 4)}</Text>\n </Box>\n\n {/* Template */}\n {build.template && (\n <Box>\n <Text color={colors.gray}>{truncate(build.template, width - 4)}</Text>\n </Box>\n )}\n\n {/* Agent/model */}\n <Box>\n <Text color={colors.gray}>\n {build.agent === 'claude-code' ? build.model : build.agent}\n </Text>\n </Box>\n\n {/* Elapsed time with status */}\n <Box marginTop={1}>\n {build.status === 'running' && (\n <Text color={colors.cyan}>\n {symbols.spinnerFrames[Math.floor(Date.now() / 120) % symbols.spinnerFrames.length]} {formatDuration(displayElapsed)}\n </Text>\n )}\n {build.status === 'completed' && (\n <Text color={colors.success}>\n {symbols.check} {formatDuration(displayElapsed)}\n </Text>\n )}\n {build.status === 'failed' && (\n <Text color={colors.error}>\n {symbols.cross} {formatDuration(displayElapsed)}\n </Text>\n )}\n {build.status === 'pending' && (\n <Text color={colors.gray}>Pending...</Text>\n )}\n </Box>\n\n {/* Todo list */}\n {build.todos.length > 0 && (\n <Box flexDirection=\"column\" marginTop={1}>\n <Text color={colors.dimGray} bold>TASKS</Text>\n <TodoList todos={build.todos} maxWidth={width - 6} maxVisible={10} />\n </Box>\n )}\n\n {/* Error message if failed */}\n {build.status === 'failed' && build.error && (\n <Box marginTop={1}>\n <Text color={colors.error} wrap=\"truncate\">\n {truncate(build.error, width - 4)}\n </Text>\n </Box>\n )}\n </Box>\n );\n}\n\n/**\n * TodoList - Smart display of todo items\n * - Shows up to maxVisible items (default 10)\n * - Prioritizes in_progress and pending tasks\n * - Hides completed tasks when space is needed\n * - Shows count of hidden completed tasks\n */\nfunction TodoList({ todos, maxWidth, maxVisible = 10 }: { \n todos: TodoItem[]; \n maxWidth: number;\n maxVisible?: number;\n}) {\n // Separate todos by status\n const inProgress = todos.filter(t => t.status === 'in_progress');\n const pending = todos.filter(t => t.status === 'pending');\n const completed = todos.filter(t => t.status === 'completed');\n const cancelled = todos.filter(t => t.status === 'cancelled');\n \n // Calculate how many slots we have for each category\n // Priority: in_progress > pending > completed > cancelled\n const activeCount = inProgress.length + pending.length;\n \n let visibleTodos: TodoItem[] = [];\n let hiddenCompletedCount = 0;\n \n if (todos.length <= maxVisible) {\n // All todos fit - show them in order\n visibleTodos = todos;\n } else {\n // Need to prioritize - always show in_progress and pending first\n visibleTodos = [...inProgress, ...pending];\n \n // Calculate remaining slots for completed tasks\n const remainingSlots = maxVisible - visibleTodos.length;\n \n if (remainingSlots > 0) {\n // Show as many completed as we can fit\n visibleTodos = [...visibleTodos, ...completed.slice(0, remainingSlots)];\n hiddenCompletedCount = Math.max(0, completed.length - remainingSlots);\n } else {\n hiddenCompletedCount = completed.length;\n }\n \n // Add cancelled if there's still room\n const slotsAfterCompleted = maxVisible - visibleTodos.length;\n if (slotsAfterCompleted > 0) {\n visibleTodos = [...visibleTodos, ...cancelled.slice(0, slotsAfterCompleted)];\n }\n }\n \n // Sort visible todos to maintain logical order (by original index)\n visibleTodos.sort((a, b) => {\n const aIndex = todos.findIndex(t => t.id === a.id);\n const bIndex = todos.findIndex(t => t.id === b.id);\n return aIndex - bIndex;\n });\n \n return (\n <>\n {visibleTodos.map((todo) => (\n <TodoRow key={todo.id} todo={todo} maxWidth={maxWidth} />\n ))}\n {hiddenCompletedCount > 0 && (\n <Text color={colors.dimGray}>✓ {hiddenCompletedCount} completed</Text>\n )}\n </>\n );\n}\n\n// Todo row component\nfunction TodoRow({ todo, maxWidth }: { todo: TodoItem; maxWidth: number }) {\n const statusIcon = {\n pending: <Text color={colors.dimGray}>{symbols.hollowDot}</Text>,\n in_progress: <Text color={colors.cyan}>{symbols.spinnerFrames[Math.floor(Date.now() / 120) % symbols.spinnerFrames.length]}</Text>,\n completed: <Text color={colors.success}>{symbols.check}</Text>,\n cancelled: <Text color={colors.dimGray}>⊘</Text>,\n }[todo.status];\n\n const textColor = {\n pending: colors.dimGray,\n in_progress: colors.white,\n completed: colors.gray,\n cancelled: colors.dimGray,\n }[todo.status];\n\n const truncatedContent = todo.content.length > maxWidth - 3\n ? todo.content.substring(0, maxWidth - 6) + '...'\n : todo.content;\n\n return (\n <Box>\n {statusIcon}\n <Text color={textColor}> {truncatedContent}</Text>\n </Box>\n );\n}\n","/**\n * useBuildState - Hook to track build state and todos\n * \n * Manages:\n * - Active builds list\n * - Current build selection (for multi-build navigation)\n * - Todo list updates\n * - Build lifecycle events\n * \n * Subscribes to RunnerLogger events to automatically update state.\n * \n * IMPORTANT: Uses refs for event handlers to prevent race conditions\n * where events could be missed during re-subscriptions caused by\n * callback dependency changes.\n */\n\nimport { useState, useEffect, useCallback, useRef } from 'react';\nimport type { BuildInfo, TodoItem, LogEntry } from '../../../lib/logging/types.js';\nimport { getLogBuffer } from '../../../lib/logging/log-buffer.js';\nimport { getLogger } from '../../../lib/logging/index.js';\n\nexport interface BuildState {\n builds: BuildInfo[];\n currentBuildIndex: number;\n currentBuild: BuildInfo | null;\n isConnected: boolean;\n isVerbose: boolean;\n}\n\nexport interface BuildStateActions {\n nextBuild: () => void;\n prevBuild: () => void;\n setVerbose: (verbose: boolean) => void;\n toggleVerbose: () => void;\n addBuild: (build: BuildInfo) => void;\n updateBuild: (buildId: string, updates: Partial<BuildInfo>) => void;\n updateTodos: (buildId: string, todos: TodoItem[]) => void;\n setConnected: (connected: boolean) => void;\n}\n\nexport function useBuildState(): [BuildState, BuildStateActions] {\n const [builds, setBuilds] = useState<BuildInfo[]>([]);\n const [currentBuildIndex, setCurrentBuildIndex] = useState(0);\n const [isConnected, setIsConnected] = useState(false);\n const [isVerbose, setIsVerbose] = useState(false);\n\n // Derive current build from index\n const currentBuild = builds.length > 0 ? builds[currentBuildIndex] ?? null : null;\n\n // Navigation between builds\n const nextBuild = useCallback(() => {\n setCurrentBuildIndex(prev => {\n if (builds.length === 0) return 0;\n return (prev + 1) % builds.length;\n });\n }, [builds.length]);\n\n const prevBuild = useCallback(() => {\n setCurrentBuildIndex(prev => {\n if (builds.length === 0) return 0;\n return prev === 0 ? builds.length - 1 : prev - 1;\n });\n }, [builds.length]);\n\n // Verbose toggle - updates both UI state and logger\n const toggleVerbose = useCallback(() => {\n setIsVerbose(prev => {\n const newValue = !prev;\n // Also update the logger's verbose flag\n try {\n const logger = getLogger();\n logger.setVerbose(newValue);\n } catch {\n // Logger not initialized yet\n }\n return newValue;\n });\n }, []);\n\n // Track when a new build is added to auto-select it\n const [pendingNewBuildId, setPendingNewBuildId] = useState<string | null>(null);\n\n // Add a new build\n const addBuild = useCallback((build: BuildInfo) => {\n setBuilds(prev => {\n // Check if build already exists\n const exists = prev.some(b => b.id === build.id);\n if (exists) {\n // Update existing build\n return prev.map(b => b.id === build.id ? { ...b, ...build } : b);\n }\n // Mark this as a new build to auto-select\n setPendingNewBuildId(build.id);\n // Add new build\n return [...prev, build];\n });\n }, []);\n\n // Auto-select newly added builds\n useEffect(() => {\n if (pendingNewBuildId) {\n const index = builds.findIndex(b => b.id === pendingNewBuildId);\n if (index !== -1) {\n setCurrentBuildIndex(index);\n }\n setPendingNewBuildId(null);\n }\n }, [builds, pendingNewBuildId]);\n\n // Update an existing build\n const updateBuild = useCallback((buildId: string, updates: Partial<BuildInfo>) => {\n setBuilds(prev => prev.map(build => \n build.id === buildId ? { ...build, ...updates } : build\n ));\n }, []);\n\n // Update todos for a build\n const updateTodos = useCallback((buildId: string, todos: TodoItem[]) => {\n setBuilds(prev => prev.map(build =>\n build.id === buildId ? { ...build, todos } : build\n ));\n }, []);\n\n // Connection status\n const setConnected = useCallback((connected: boolean) => {\n setIsConnected(connected);\n }, []);\n\n // Use refs to store the latest callbacks so event handlers always call current versions\n // This prevents race conditions where events could be missed during re-subscriptions\n const addBuildRef = useRef(addBuild);\n const updateBuildRef = useRef(updateBuild);\n const updateTodosRef = useRef(updateTodos);\n \n // Keep refs up to date\n useEffect(() => {\n addBuildRef.current = addBuild;\n }, [addBuild]);\n \n useEffect(() => {\n updateBuildRef.current = updateBuild;\n }, [updateBuild]);\n \n useEffect(() => {\n updateTodosRef.current = updateTodos;\n }, [updateTodos]);\n\n // Subscribe to RunnerLogger events - only runs ONCE on mount\n // Uses refs for callbacks to avoid re-subscription race conditions\n useEffect(() => {\n const logger = getLogger();\n \n // Sync initial state from logger (in case events already fired)\n setIsConnected(logger.isConnected());\n setIsVerbose(logger.isVerbose());\n \n // Load any existing builds\n const existingBuilds = logger.getAllBuilds();\n if (existingBuilds.length > 0) {\n for (const build of existingBuilds) {\n addBuildRef.current(build);\n }\n }\n \n // Handle build start events - use ref to get latest callback\n const handleBuildStart = (build: BuildInfo) => {\n addBuildRef.current(build);\n };\n \n // Handle build update events\n const handleBuildUpdate = (build: BuildInfo) => {\n updateBuildRef.current(build.id, build);\n };\n \n // Handle build complete events\n const handleBuildComplete = (build: BuildInfo) => {\n updateBuildRef.current(build.id, { ...build, status: build.status });\n };\n \n // Handle todo updates\n const handleTodoUpdate = (buildId: string, todos: TodoItem[]) => {\n updateTodosRef.current(buildId, todos);\n };\n \n // Handle connection events\n const handleConnected = () => {\n setIsConnected(true);\n };\n \n const handleDisconnected = () => {\n setIsConnected(false);\n };\n \n // Handle verbose change\n const handleVerboseChange = (verbose: boolean) => {\n setIsVerbose(verbose);\n };\n \n // Subscribe to events\n logger.on('buildStart', handleBuildStart);\n logger.on('buildUpdate', handleBuildUpdate);\n logger.on('buildComplete', handleBuildComplete);\n logger.on('todoUpdate', handleTodoUpdate);\n logger.on('connected', handleConnected);\n logger.on('disconnected', handleDisconnected);\n logger.on('verboseChange', handleVerboseChange);\n \n // Cleanup - only runs on unmount\n return () => {\n logger.off('buildStart', handleBuildStart);\n logger.off('buildUpdate', handleBuildUpdate);\n logger.off('buildComplete', handleBuildComplete);\n logger.off('todoUpdate', handleTodoUpdate);\n logger.off('connected', handleConnected);\n logger.off('disconnected', handleDisconnected);\n logger.off('verboseChange', handleVerboseChange);\n };\n }, []); // Empty deps - only subscribe once on mount\n\n const state: BuildState = {\n builds,\n currentBuildIndex,\n currentBuild,\n isConnected,\n isVerbose,\n };\n\n const actions: BuildStateActions = {\n nextBuild,\n prevBuild,\n setVerbose: setIsVerbose,\n toggleVerbose,\n addBuild,\n updateBuild,\n updateTodos,\n setConnected,\n };\n\n return [state, actions];\n}\n\n/**\n * Hook to subscribe to log entries from the buffer\n */\nexport function useLogEntries(maxEntries: number = 100): LogEntry[] {\n const [entries, setEntries] = useState<LogEntry[]>([]);\n\n useEffect(() => {\n const buffer = getLogBuffer();\n \n // Initialize with current entries\n setEntries(buffer.getRecent(maxEntries));\n\n // Subscribe to new entries\n const unsubscribe = buffer.onLog((entry) => {\n setEntries(prev => {\n const newEntries = [...prev, entry];\n // Keep only the most recent entries\n if (newEntries.length > maxEntries) {\n return newEntries.slice(-maxEntries);\n }\n return newEntries;\n });\n });\n\n return unsubscribe;\n }, [maxEntries]);\n\n return entries;\n}\n"],"names":["useState","useEffect","_jsxs","_jsx","useCallback","useRef"],"mappings":"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"}
|
package/dist/cli/index.js
CHANGED
|
@@ -485,12 +485,12 @@ program
|
|
|
485
485
|
// Default action when no subcommand is provided
|
|
486
486
|
if (options.runner) {
|
|
487
487
|
// Start runner only (legacy flag)
|
|
488
|
-
const { runCommand } = await import('../chunks/run-
|
|
488
|
+
const { runCommand } = await import('../chunks/run-Bvfox4jS.js');
|
|
489
489
|
await runCommand({});
|
|
490
490
|
}
|
|
491
491
|
else {
|
|
492
492
|
// Show TUI main menu
|
|
493
|
-
const { mainTUICommand } = await import('../chunks/main-tui-
|
|
493
|
+
const { mainTUICommand } = await import('../chunks/main-tui-BI9X6TRI.js');
|
|
494
494
|
await mainTUICommand();
|
|
495
495
|
}
|
|
496
496
|
}
|
|
@@ -511,7 +511,7 @@ program
|
|
|
511
511
|
.option('--non-interactive', 'Use defaults without prompts (alias for -y)')
|
|
512
512
|
.action(async (options) => {
|
|
513
513
|
try {
|
|
514
|
-
const { initCommand } = await import('../chunks/init-
|
|
514
|
+
const { initCommand } = await import('../chunks/init-Cw1DkJP-.js');
|
|
515
515
|
await initCommand(options);
|
|
516
516
|
}
|
|
517
517
|
catch (error) {
|
|
@@ -529,7 +529,7 @@ program
|
|
|
529
529
|
.option('-v, --verbose', 'Enable verbose logging (show debug info)')
|
|
530
530
|
.action(async (options) => {
|
|
531
531
|
try {
|
|
532
|
-
const { startCommand } = await import('../chunks/start-
|
|
532
|
+
const { startCommand } = await import('../chunks/start-Drql12dh.js');
|
|
533
533
|
await startCommand(options);
|
|
534
534
|
}
|
|
535
535
|
catch (error) {
|
|
@@ -562,7 +562,7 @@ program
|
|
|
562
562
|
.option('--no-tui', 'Disable TUI dashboard, use plain text logs')
|
|
563
563
|
.action(async (options) => {
|
|
564
564
|
try {
|
|
565
|
-
const { runCommand } = await import('../chunks/run-
|
|
565
|
+
const { runCommand } = await import('../chunks/run-Bvfox4jS.js');
|
|
566
566
|
await runCommand(options);
|
|
567
567
|
}
|
|
568
568
|
catch (error) {
|
package/dist/index.js
CHANGED
|
@@ -28,7 +28,7 @@ import { readFile as readFile$1, rm, writeFile, readdir } from 'node:fs/promises
|
|
|
28
28
|
import { simpleGit } from 'simple-git';
|
|
29
29
|
import * as os from 'os';
|
|
30
30
|
import { existsSync as existsSync$1, mkdirSync as mkdirSync$1 } from 'fs';
|
|
31
|
-
import { tunnelManager } from './chunks/manager-
|
|
31
|
+
import { tunnelManager } from './chunks/manager-LKbmrJIf.js';
|
|
32
32
|
import 'chalk';
|
|
33
33
|
import 'http';
|
|
34
34
|
import 'http-proxy';
|
|
@@ -7871,8 +7871,6 @@ let transformerState = {
|
|
|
7871
7871
|
messageStarted: false,
|
|
7872
7872
|
commandMetadata: new Map(),
|
|
7873
7873
|
toolNames: new Map(),
|
|
7874
|
-
taskTodos: new Map(),
|
|
7875
|
-
pendingTaskCreates: new Map(),
|
|
7876
7874
|
};
|
|
7877
7875
|
function resetTransformerState() {
|
|
7878
7876
|
transformerState = {
|
|
@@ -7880,22 +7878,11 @@ function resetTransformerState() {
|
|
|
7880
7878
|
messageStarted: false,
|
|
7881
7879
|
commandMetadata: new Map(),
|
|
7882
7880
|
toolNames: new Map(),
|
|
7883
|
-
taskTodos: new Map(),
|
|
7884
|
-
pendingTaskCreates: new Map(),
|
|
7885
7881
|
};
|
|
7886
7882
|
}
|
|
7887
7883
|
function setExpectedCwd(cwd) {
|
|
7888
7884
|
transformerState.expectedCwd = cwd;
|
|
7889
7885
|
}
|
|
7890
|
-
/** Build a synthetic TodoWrite event from the accumulated Task* state. */
|
|
7891
|
-
function buildTaskTodoEvent() {
|
|
7892
|
-
return {
|
|
7893
|
-
type: 'tool-input-available',
|
|
7894
|
-
toolCallId: `task-todo-${Date.now()}-${Math.random().toString(16).slice(2)}`,
|
|
7895
|
-
toolName: 'TodoWrite',
|
|
7896
|
-
input: { todos: Array.from(transformerState.taskTodos.values()) },
|
|
7897
|
-
};
|
|
7898
|
-
}
|
|
7899
7886
|
/**
|
|
7900
7887
|
* Path violation detection - warns about absolute paths
|
|
7901
7888
|
*/
|
|
@@ -8102,26 +8089,6 @@ function transformAgentMessageToSSE(agentMessage) {
|
|
|
8102
8089
|
toolName: block.name,
|
|
8103
8090
|
input: block.input,
|
|
8104
8091
|
});
|
|
8105
|
-
// Bridge Task* tools -> TodoWrite checklist the UI renders.
|
|
8106
|
-
if (block.name === 'TaskCreate') {
|
|
8107
|
-
const ti = block.input;
|
|
8108
|
-
const subject = ti?.subject || ti?.description || 'Task';
|
|
8109
|
-
// Resolve the task id from this call's result (see tool_result below).
|
|
8110
|
-
transformerState.pendingTaskCreates.set(block.id, subject);
|
|
8111
|
-
}
|
|
8112
|
-
else if (block.name === 'TaskUpdate') {
|
|
8113
|
-
const ti = block.input;
|
|
8114
|
-
const taskId = ti?.taskId ? String(ti.taskId) : undefined;
|
|
8115
|
-
if (taskId && transformerState.taskTodos.has(taskId)) {
|
|
8116
|
-
if (ti?.status === 'deleted') {
|
|
8117
|
-
transformerState.taskTodos.delete(taskId);
|
|
8118
|
-
}
|
|
8119
|
-
else if (ti?.status === 'pending' || ti?.status === 'in_progress' || ti?.status === 'completed') {
|
|
8120
|
-
transformerState.taskTodos.get(taskId).status = ti.status;
|
|
8121
|
-
}
|
|
8122
|
-
events.push(buildTaskTodoEvent());
|
|
8123
|
-
}
|
|
8124
|
-
}
|
|
8125
8092
|
if (block.name === 'command_execution') {
|
|
8126
8093
|
const command = typeof block.input?.command === 'string'
|
|
8127
8094
|
? block.input.command
|
|
@@ -8153,25 +8120,6 @@ function transformAgentMessageToSSE(agentMessage) {
|
|
|
8153
8120
|
else if (typeof output !== 'string') {
|
|
8154
8121
|
output = JSON.stringify(output);
|
|
8155
8122
|
}
|
|
8156
|
-
// Bridge a TaskCreate result -> add the task to the TodoWrite checklist.
|
|
8157
|
-
// The result carries { task: { id, subject } }; pair it with the subject
|
|
8158
|
-
// captured from the tool_use call so TaskUpdate (by id) can update it.
|
|
8159
|
-
if (transformerState.pendingTaskCreates.has(toolId)) {
|
|
8160
|
-
const subject = transformerState.pendingTaskCreates.get(toolId);
|
|
8161
|
-
transformerState.pendingTaskCreates.delete(toolId);
|
|
8162
|
-
let taskId;
|
|
8163
|
-
try {
|
|
8164
|
-
const parsed = typeof output === 'string' ? JSON.parse(output) : output;
|
|
8165
|
-
taskId = parsed?.task?.id ? String(parsed.task.id) : undefined;
|
|
8166
|
-
}
|
|
8167
|
-
catch {
|
|
8168
|
-
// result wasn't JSON; skip — task just won't appear in the checklist
|
|
8169
|
-
}
|
|
8170
|
-
if (taskId) {
|
|
8171
|
-
transformerState.taskTodos.set(taskId, { content: subject, status: 'pending', activeForm: subject });
|
|
8172
|
-
events.push(buildTaskTodoEvent());
|
|
8173
|
-
}
|
|
8174
|
-
}
|
|
8175
8123
|
// Process TodoWrite markers in command outputs
|
|
8176
8124
|
if (typeof output === 'string' && output.includes('TODO_WRITE')) {
|
|
8177
8125
|
const regex = /TODO_WRITE\s*:\s*(\{[\s\S]*?\})(?=$|\n)/g;
|