Refactor component terminology to programs in config and manifest

- Updated the terminology from "components" to "programs" across the codebase, including in config loading, saving, and manifest specifications.
- Introduced a new `stacks.py` file to handle lifecycle actions for development stacks, implementing handlers for Python and React Vite stacks.
- Adjusted tests to reflect the new program structure and ensure proper functionality.
- Revised documentation to align with the new terminology and structure, ensuring clarity on the purpose and configuration of programs, services, and jobs.
This commit is contained in:
2026-02-23 22:09:41 -08:00
parent f559fba143
commit 0d36e4f72a
48 changed files with 7512 additions and 632 deletions

View File

@@ -1,4 +1,4 @@
import { useEffect, useRef, useState } from "react"
import { useEffect, useImperativeHandle, useRef, useState, forwardRef } from "react"
import { apiClient } from "@/services/api/client"
interface LogViewerProps {
@@ -7,7 +7,14 @@ interface LogViewerProps {
follow?: boolean
}
export function LogViewer({ name, lines = 50, follow = true }: LogViewerProps) {
export interface LogViewerHandle {
clear: () => void
}
export const LogViewer = forwardRef<LogViewerHandle, LogViewerProps>(function LogViewer(
{ name, lines = 50, follow = true },
ref,
) {
const [logs, setLogs] = useState<string[]>([])
const [connected, setConnected] = useState(false)
const bottomRef = useRef<HTMLDivElement>(null)
@@ -40,6 +47,8 @@ export function LogViewer({ name, lines = 50, follow = true }: LogViewerProps) {
return () => es.close()
}, [name, lines, follow])
useImperativeHandle(ref, () => ({ clear: () => setLogs([]) }), [])
useEffect(() => {
bottomRef.current?.scrollIntoView({ behavior: "smooth" })
}, [logs])
@@ -68,4 +77,4 @@ export function LogViewer({ name, lines = 50, follow = true }: LogViewerProps) {
</pre>
</div>
)
}
})