diff --git a/web/app/page.tsx b/web/app/page.tsx
index 452b18f..b116039 100644
--- a/web/app/page.tsx
+++ b/web/app/page.tsx
@@ -311,11 +311,13 @@ export default function HomePage() {
const empty = turns.length === 0
function handleCommand(command: string) {
- if (command === "info") {
+ const [cmd, ...args] = command.trim().split(/\s+/)
+ if (cmd === "info") {
+ const windowArg = args[0]
setTurns((prev) => [
...prev,
- { mode: "chat", role: "user", content: "/info" },
- { mode: "command", command: "info" },
+ { mode: "chat", role: "user", content: `/${command}` },
+ { mode: "command", command: "info", window: windowArg },
])
}
}
@@ -386,6 +388,7 @@ export default function HomePage() {
key={`cmd-${i}`}
projectId={project.id}
projectName={project.name}
+ window={t.window}
onAction={handleSuggestedAction}
/>
) : null
diff --git a/web/components/chat/ChatInput.tsx b/web/components/chat/ChatInput.tsx
index ffc0d27..12b8e29 100644
--- a/web/components/chat/ChatInput.tsx
+++ b/web/components/chat/ChatInput.tsx
@@ -48,7 +48,7 @@ export function ChatInput({
const cmdName = trimmed.slice(1).split(/\s/)[0]
const match = getFilteredCommands(cmdName).find((c) => c.name === cmdName)
if (match) {
- executeCommand(match.name)
+ executeCommand(trimmed.slice(1))
return
}
}
diff --git a/web/components/chat/CommandPicker.tsx b/web/components/chat/CommandPicker.tsx
index 5ad2cb8..83513e2 100644
--- a/web/components/chat/CommandPicker.tsx
+++ b/web/components/chat/CommandPicker.tsx
@@ -11,7 +11,7 @@ export type SlashCommand = {
}
const COMMANDS: SlashCommand[] = [
- { name: "info", description: "Show project overview (services, timeline, clusters)", icon: },
+ { name: "info", description: "Show project overview, optional window like 1h, 24h", icon: },
]
interface CommandPickerProps {
diff --git a/web/components/projects/ProjectOverview.tsx b/web/components/projects/ProjectOverview.tsx
index dbd80b1..1ee1df3 100644
--- a/web/components/projects/ProjectOverview.tsx
+++ b/web/components/projects/ProjectOverview.tsx
@@ -50,6 +50,7 @@ function shortDate(iso: string): string {
interface ProjectOverviewProps {
projectId: string
projectName: string
+ window?: string
onAction: (action: SuggestedAction) => void
}
@@ -59,14 +60,14 @@ interface ProjectOverviewProps {
* services, and suggested next actions. Fetched live on mount; not persisted
* as a chat message.
*/
-export function ProjectOverview({ projectId, projectName, onAction }: ProjectOverviewProps) {
+export function ProjectOverview({ projectId, projectName, window, onAction }: ProjectOverviewProps) {
const [overview, setOverview] = useState(null)
const [failed, setFailed] = useState(false)
useEffect(() => {
let cancelled = false
setOverview(null)
- api.projects.overview(projectId)
+ api.projects.overview(projectId, window)
.then((d: Overview) => { if (!cancelled) setOverview(d) })
.catch((e: any) => {
if (!cancelled) {
@@ -75,7 +76,7 @@ export function ProjectOverview({ projectId, projectName, onAction }: ProjectOve
}
})
return () => { cancelled = true }
- }, [projectId])
+ }, [projectId, window])
if (failed) return null
if (!overview) {
diff --git a/web/lib/types.ts b/web/lib/types.ts
index 76732b1..80131b8 100644
--- a/web/lib/types.ts
+++ b/web/lib/types.ts
@@ -122,6 +122,7 @@ export type Turn =
| {
mode: "command"
command: string
+ window?: string
}
export type ConversationSummary = {