{"version":3,"file":"mcp-ui.mjs","names":["Widget0","Widget1","Widget2"],"sources":["../../src/extensions/workspaces/sessions/(frontend)/tool/load_context.mcp.tsx","../../src/extensions/workspaces/sessions/(frontend)/tool/rename_thread.mcp.tsx","../../src/extensions/workspaces/sessions/(frontend)/tool/show_session.mcp.tsx","../../generated/mcp-ui.ts"],"sourcesContent":["import { defineMcpWidget, type DoomMcpWidgetProps } from '@agimon-ai/doompi-core/web';\nimport { McpToolFrame, McpToolOutput } from '@agimon-ai/doompi-web-components';\n\nfunction LoadContextMcpWidget(props: DoomMcpWidgetProps) {\n  return (\n    <McpToolFrame {...props} title=\"Load repository context\">\n      <McpToolOutput result={props.result} />\n    </McpToolFrame>\n  );\n}\n\nexport default defineMcpWidget(LoadContextMcpWidget);\n","import { defineMcpWidget, type DoomMcpWidgetProps } from '@agimon-ai/doompi-core/web';\nimport { McpToolFields, McpToolFrame, McpToolOutput } from '@agimon-ai/doompi-web-components';\n\nfunction RenameThreadMcpWidget(props: DoomMcpWidgetProps) {\n  return (\n    <McpToolFrame {...props} title=\"Rename thread\">\n      <McpToolFields fields={[['Title', props.args.title]]} />\n      <McpToolOutput result={props.result} />\n    </McpToolFrame>\n  );\n}\n\nexport default defineMcpWidget(RenameThreadMcpWidget);\n","import { defineMcpWidget, type DoomMcpWidgetProps } from '@agimon-ai/doompi-core/web';\nimport { McpToolFields, McpToolFrame } from '@agimon-ai/doompi-web-components';\nimport { useEffect, useRef, useState } from 'react';\n\nimport type { SessionView } from '../../../../../types/sessionView';\n\nfunction sessionView(value: unknown): SessionView | undefined {\n  if (typeof value !== 'object' || value === null) return undefined;\n  const data = value as Record<string, unknown>;\n  if (\n    typeof data.sessionId !== 'string' ||\n    !data.sessionId ||\n    typeof data.repositoryName !== 'string' ||\n    typeof data.majorMode !== 'string' ||\n    !Number.isSafeInteger(data.revision) ||\n    (data.revision as number) < 0 ||\n    (data.profile !== null && typeof data.profile !== 'string')\n  )\n    return undefined;\n  if (\n    !['domains', 'layers', 'minorModes'].every(\n      (key) => Array.isArray(data[key]) && data[key].every((item: unknown) => typeof item === 'string'),\n    )\n  )\n    return undefined;\n  return data as unknown as SessionView;\n}\n\nfunction ShowSessionMcpWidget(props: DoomMcpWidgetProps) {\n  const [refreshed, setRefreshed] = useState<DoomMcpWidgetProps['result']>(null);\n  const [busy, setBusy] = useState(false);\n  const [refreshError, setRefreshError] = useState<string>();\n  const alive = useRef(true);\n  useEffect(() => {\n    alive.current = true;\n    return () => {\n      alive.current = false;\n    };\n  }, []);\n  const result = refreshed ?? props.result;\n  const view = sessionView(result?.structuredContent);\n  const original = sessionView(props.result?.structuredContent);\n  const error =\n    refreshError ??\n    (result?.isError\n      ? 'Session could not be loaded. Check the Doompi connection.'\n      : result && !view\n        ? 'The host returned an invalid session summary.'\n        : view && original && view.sessionId !== original.sessionId\n          ? 'The session changed. Reopen this widget from the conversation.'\n          : undefined);\n  const refresh = async (): Promise<void> => {\n    if (!props.refresh || busy) return;\n    setBusy(true);\n    setRefreshError(undefined);\n    try {\n      const next = await props.refresh();\n      if (alive.current) setRefreshed(next);\n    } catch {\n      if (alive.current) setRefreshError('Refresh failed. Check the Doompi connection, then try again.');\n    } finally {\n      if (alive.current) setBusy(false);\n    }\n  };\n  return (\n    <McpToolFrame\n      {...props}\n      result={result}\n      title=\"Doompi session\"\n      error={error}\n      phase={error ? 'error' : busy ? 'running' : props.phase}\n    >\n      <button\n        type=\"button\"\n        disabled={!props.refresh || !props.result || busy || props.phase === 'cancelled'}\n        onClick={() => {\n          void refresh();\n        }}\n        className=\"rounded-md border border-doom-border bg-doom-panel px-3 py-2 text-base text-doom-text focus-visible:outline disabled:opacity-50\"\n      >\n        Refresh\n      </button>\n      {view && !error ? (\n        <McpToolFields\n          fields={[\n            ['Repository', view.repositoryName],\n            ['Session', view.sessionId],\n            ['Revision', view.revision],\n            ['Profile', view.profile ?? 'Default'],\n            ['Major mode', view.majorMode],\n            ['Domains', view.domains.length ? view.domains : 'None'],\n            ['Layers', view.layers.length ? view.layers : 'None'],\n            ['Minor modes', view.minorModes.length ? view.minorModes : 'None'],\n          ]}\n        />\n      ) : null}\n    </McpToolFrame>\n  );\n}\n\nexport default defineMcpWidget(ShowSessionMcpWidget);\n","// Generated by @agimon-ai/doompi-build. Do not edit by hand.\nimport type { ComponentType } from 'react';\nimport type { DoomMcpWidgetProps } from '@agimon-ai/doompi-core/mcpWidget';\nimport Widget0 from \"../src/extensions/workspaces/sessions/(frontend)/tool/load_context.mcp\";\nimport Widget1 from \"../src/extensions/workspaces/sessions/(frontend)/tool/rename_thread.mcp\";\nimport Widget2 from \"../src/extensions/workspaces/sessions/(frontend)/tool/show_session.mcp\";\n\nexport const widgets: Readonly<Record<string, ComponentType<DoomMcpWidgetProps>>> = {\n  \"@agimon-ai/doompi-config/load_context\": Widget0,\n  \"@agimon-ai/doompi-config/rename_thread\": Widget1,\n  \"@agimon-ai/doompi-config/show_session\": Widget2,\n};\n"],"mappings":"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"}