@kb-labs/agent-cli 0.5.0
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/README.md +56 -0
- package/dist/cli/commands/diff.d.ts +17 -0
- package/dist/cli/commands/diff.js +182 -0
- package/dist/cli/commands/diff.js.map +1 -0
- package/dist/cli/commands/history.d.ts +16 -0
- package/dist/cli/commands/history.js +216 -0
- package/dist/cli/commands/history.js.map +1 -0
- package/dist/cli/commands/quality-report.d.ts +21 -0
- package/dist/cli/commands/quality-report.js +457 -0
- package/dist/cli/commands/quality-report.js.map +1 -0
- package/dist/cli/commands/rollback.d.ts +27 -0
- package/dist/cli/commands/rollback.js +109 -0
- package/dist/cli/commands/rollback.js.map +1 -0
- package/dist/cli/commands/run.d.ts +42 -0
- package/dist/cli/commands/run.js +923 -0
- package/dist/cli/commands/run.js.map +1 -0
- package/dist/cli/commands/trace-context.d.ts +22 -0
- package/dist/cli/commands/trace-context.js +131 -0
- package/dist/cli/commands/trace-context.js.map +1 -0
- package/dist/cli/commands/trace-diagnose.d.ts +20 -0
- package/dist/cli/commands/trace-diagnose.js +434 -0
- package/dist/cli/commands/trace-diagnose.js.map +1 -0
- package/dist/cli/commands/trace-event-normalizer.d.ts +13 -0
- package/dist/cli/commands/trace-event-normalizer.js +39 -0
- package/dist/cli/commands/trace-event-normalizer.js.map +1 -0
- package/dist/cli/commands/trace-filter.d.ts +19 -0
- package/dist/cli/commands/trace-filter.js +153 -0
- package/dist/cli/commands/trace-filter.js.map +1 -0
- package/dist/cli/commands/trace-iteration.d.ts +18 -0
- package/dist/cli/commands/trace-iteration.js +192 -0
- package/dist/cli/commands/trace-iteration.js.map +1 -0
- package/dist/cli/commands/trace-stats.d.ts +17 -0
- package/dist/cli/commands/trace-stats.js +247 -0
- package/dist/cli/commands/trace-stats.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +473 -0
- package/dist/index.js.map +1 -0
- package/dist/manifest.d.ts +184 -0
- package/dist/manifest.js +473 -0
- package/dist/manifest.js.map +1 -0
- package/dist/rest/handlers/approve-handler.d.ts +15 -0
- package/dist/rest/handlers/approve-handler.js +60 -0
- package/dist/rest/handlers/approve-handler.js.map +1 -0
- package/dist/rest/handlers/approve-session-plan-handler.d.ts +10 -0
- package/dist/rest/handlers/approve-session-plan-handler.js +52 -0
- package/dist/rest/handlers/approve-session-plan-handler.js.map +1 -0
- package/dist/rest/handlers/correct-handler.d.ts +7 -0
- package/dist/rest/handlers/correct-handler.js +326 -0
- package/dist/rest/handlers/correct-handler.js.map +1 -0
- package/dist/rest/handlers/create-session-handler.d.ts +7 -0
- package/dist/rest/handlers/create-session-handler.js +25 -0
- package/dist/rest/handlers/create-session-handler.js.map +1 -0
- package/dist/rest/handlers/execute-session-plan-handler.d.ts +10 -0
- package/dist/rest/handlers/execute-session-plan-handler.js +635 -0
- package/dist/rest/handlers/execute-session-plan-handler.js.map +1 -0
- package/dist/rest/handlers/generate-spec-handler.d.ts +10 -0
- package/dist/rest/handlers/generate-spec-handler.js +389 -0
- package/dist/rest/handlers/generate-spec-handler.js.map +1 -0
- package/dist/rest/handlers/get-file-diff-handler.d.ts +24 -0
- package/dist/rest/handlers/get-file-diff-handler.js +44 -0
- package/dist/rest/handlers/get-file-diff-handler.js.map +1 -0
- package/dist/rest/handlers/get-session-handler.d.ts +10 -0
- package/dist/rest/handlers/get-session-handler.js +23 -0
- package/dist/rest/handlers/get-session-handler.js.map +1 -0
- package/dist/rest/handlers/get-session-plan-handler.d.ts +10 -0
- package/dist/rest/handlers/get-session-plan-handler.js +53 -0
- package/dist/rest/handlers/get-session-plan-handler.js.map +1 -0
- package/dist/rest/handlers/get-session-turns-handler.d.ts +16 -0
- package/dist/rest/handlers/get-session-turns-handler.js +35 -0
- package/dist/rest/handlers/get-session-turns-handler.js.map +1 -0
- package/dist/rest/handlers/get-spec-handler.d.ts +10 -0
- package/dist/rest/handlers/get-spec-handler.js +39 -0
- package/dist/rest/handlers/get-spec-handler.js.map +1 -0
- package/dist/rest/handlers/list-file-changes-handler.d.ts +13 -0
- package/dist/rest/handlers/list-file-changes-handler.js +34 -0
- package/dist/rest/handlers/list-file-changes-handler.js.map +1 -0
- package/dist/rest/handlers/list-sessions-handler.d.ts +7 -0
- package/dist/rest/handlers/list-sessions-handler.js +23 -0
- package/dist/rest/handlers/list-sessions-handler.js.map +1 -0
- package/dist/rest/handlers/rollback-handler.d.ts +22 -0
- package/dist/rest/handlers/rollback-handler.js +91 -0
- package/dist/rest/handlers/rollback-handler.js.map +1 -0
- package/dist/rest/handlers/run-handler.d.ts +7 -0
- package/dist/rest/handlers/run-handler.js +516 -0
- package/dist/rest/handlers/run-handler.js.map +1 -0
- package/dist/rest/handlers/sessions-handler.d.ts +18 -0
- package/dist/rest/handlers/sessions-handler.js +56 -0
- package/dist/rest/handlers/sessions-handler.js.map +1 -0
- package/dist/rest/handlers/status-handler.d.ts +7 -0
- package/dist/rest/handlers/status-handler.js +313 -0
- package/dist/rest/handlers/status-handler.js.map +1 -0
- package/dist/rest/handlers/stop-handler.d.ts +7 -0
- package/dist/rest/handlers/stop-handler.js +317 -0
- package/dist/rest/handlers/stop-handler.js.map +1 -0
- package/dist/widgets/220.js +446 -0
- package/dist/widgets/220.js.map +1 -0
- package/dist/widgets/331.js +2 -0
- package/dist/widgets/331.js.map +1 -0
- package/dist/widgets/403.js +2 -0
- package/dist/widgets/403.js.map +1 -0
- package/dist/widgets/406.js +35 -0
- package/dist/widgets/406.js.map +1 -0
- package/dist/widgets/455.js +2 -0
- package/dist/widgets/455.js.map +1 -0
- package/dist/widgets/482.js +2 -0
- package/dist/widgets/482.js.map +1 -0
- package/dist/widgets/485.js +2 -0
- package/dist/widgets/485.js.map +1 -0
- package/dist/widgets/527.js +2 -0
- package/dist/widgets/527.js.map +1 -0
- package/dist/widgets/628.js +2 -0
- package/dist/widgets/628.js.map +1 -0
- package/dist/widgets/694.js +2 -0
- package/dist/widgets/694.js.map +1 -0
- package/dist/widgets/712.js +2 -0
- package/dist/widgets/712.js.map +1 -0
- package/dist/widgets/866.js +2 -0
- package/dist/widgets/866.js.map +1 -0
- package/dist/widgets/915.js +39 -0
- package/dist/widgets/915.js.map +1 -0
- package/dist/widgets/957.js +10 -0
- package/dist/widgets/957.js.map +1 -0
- package/dist/widgets/983.js +2 -0
- package/dist/widgets/983.js.map +1 -0
- package/dist/widgets/@mf-types.d.ts +3 -0
- package/dist/widgets/@mf-types.zip +0 -0
- package/dist/widgets/__federation_expose_AgentsPage.js +2 -0
- package/dist/widgets/__federation_expose_AgentsPage.js.map +1 -0
- package/dist/widgets/mf-manifest.json +260 -0
- package/dist/widgets/mf-stats.json +305 -0
- package/dist/widgets/remoteEntry.js +7 -0
- package/dist/widgets/remoteEntry.js.map +1 -0
- package/dist/ws/session-stream-handler.d.ts +8 -0
- package/dist/ws/session-stream-handler.js +409 -0
- package/dist/ws/session-stream-handler.js.map +1 -0
- package/package.json +83 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"__federation_expose_AgentsPage.js","sources":["webpack://@kb-labs/agent-cli/../../../../node_modules/.pnpm/react@18.3.1/node_modules/react/cjs/react-jsx-runtime.production.min.js","webpack://@kb-labs/agent-cli/../../../../node_modules/.pnpm/react@18.3.1/node_modules/react/jsx-runtime.js","webpack://@kb-labs/agent-cli/./src/studio/components/SessionSelector.tsx","webpack://@kb-labs/agent-cli/./src/studio/components/ConversationView.tsx","webpack://@kb-labs/agent-cli/./src/studio/pages/AgentsPage.tsx","webpack://@kb-labs/agent-cli/./src/studio/hooks/use-agent-websocket.ts"],"sourcesContent":["/**\n * @license React\n * react-jsx-runtime.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var f=require(\"react\"),k=Symbol.for(\"react.element\"),l=Symbol.for(\"react.fragment\"),m=Object.prototype.hasOwnProperty,n=f.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,p={key:!0,ref:!0,__self:!0,__source:!0};\nfunction q(c,a,g){var b,d={},e=null,h=null;void 0!==g&&(e=\"\"+g);void 0!==a.key&&(e=\"\"+a.key);void 0!==a.ref&&(h=a.ref);for(b in a)m.call(a,b)&&!p.hasOwnProperty(b)&&(d[b]=a[b]);if(c&&c.defaultProps)for(b in a=c.defaultProps,a)void 0===d[b]&&(d[b]=a[b]);return{$$typeof:k,type:c,key:e,ref:h,props:d,_owner:n.current}}exports.Fragment=l;exports.jsx=q;exports.jsxs=q;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.min.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","/**\n * Session selector component for Agent widget\n */\n\nimport React from 'react';\nimport { useData, UISelect, UIButton, UISpace, UITypographyText, UISpin, UITooltip, UIIcon, useUITheme } from '@kb-labs/sdk/studio';\nimport type { AgentSessionInfo } from '@kb-labs/agent-contracts';\n\ninterface SessionSelectorProps {\n currentSessionId: string | null;\n onSessionChange: (sessionId: string, session: AgentSessionInfo) => void;\n onNewChat: () => void;\n}\n\nfunction formatRelativeTime(dateStr: string): string {\n const date = new Date(dateStr);\n const now = new Date();\n const diffMs = now.getTime() - date.getTime();\n const diffMins = Math.floor(diffMs / 60000);\n const diffHours = Math.floor(diffMs / 3600000);\n const diffDays = Math.floor(diffMs / 86400000);\n\n if (diffMins < 1) { return 'just now'; }\n if (diffMins < 60) { return `${diffMins}m ago`; }\n if (diffHours < 24) { return `${diffHours}h ago`; }\n if (diffDays < 7) { return `${diffDays}d ago`; }\n return date.toLocaleDateString();\n}\n\nexport function SessionSelector({\n currentSessionId,\n onSessionChange,\n onNewChat,\n}: SessionSelectorProps) {\n const { token } = useUITheme();\n const { data: sessionsData, isLoading } = useData<{ sessions: AgentSessionInfo[]; total: number }>(\n '/v1/plugins/agents/sessions?limit=20',\n );\n\n const sessions = sessionsData?.sessions ?? [];\n\n const handleSessionSelect = (sessionId: string) => {\n const session = sessions.find((s) => s.id === sessionId);\n if (session) {\n onSessionChange(sessionId, session);\n }\n };\n\n return (\n <UISpace size=\"small\" style={{ width: '100%' }}>\n <UIIcon name=\"HistoryOutlined\" style={{ color: token.colorTextTertiary }} />\n\n <UISelect\n style={{ flex: 1, minWidth: 200 }}\n placeholder=\"New chat\"\n value={currentSessionId ?? undefined}\n onChange={(v) => handleSessionSelect(v as string)}\n loading={isLoading}\n allowClear\n onClear={onNewChat}\n notFoundContent={\n isLoading ? (\n <UISpin size=\"small\" />\n ) : (\n <UITypographyText type=\"secondary\">No sessions yet</UITypographyText>\n )\n }\n optionLabelProp=\"label\"\n options={sessions.map((session) => ({\n value: session.id,\n label: session.name || session.task || 'Untitled',\n lastActivityAt: session.lastActivityAt,\n }))}\n optionRender={(option) => (\n <UISpace style={{ width: '100%', justifyContent: 'space-between' }}>\n <UITypographyText ellipsis style={{ maxWidth: 180 }}>\n {option.label}\n </UITypographyText>\n <UITypographyText type=\"secondary\" style={{ fontSize: 11 }}>\n {formatRelativeTime(option.data.lastActivityAt)}\n </UITypographyText>\n </UISpace>\n )}\n />\n\n <UITooltip title=\"New Chat\">\n <UIButton\n variant=\"primary\"\n icon={<UIIcon name=\"PlusOutlined\" />}\n onClick={onNewChat}\n />\n </UITooltip>\n </UISpace>\n );\n}\n","/**\n * Turn-based conversation UI — Claude Code style\n * Adapted from studio/modules/agents for plugin widget use.\n * UIKit-only: no CSS file, all styles via antd token.\n */\n\nimport React from 'react';\nimport { theme } from 'antd';\nimport type { Turn, TurnStep, FileChangeSummary } from '@kb-labs/agent-contracts';\nimport {\n useMutateData,\n useData,\n UISpin,\n UIMarkdownViewer,\n UIModalConfirm,\n UITag,\n UITypographyText,\n UIFlex,\n} from '@kb-labs/sdk/studio';\n\nconst { useToken } = theme;\n\ninterface ConversationViewProps {\n turns: Turn[];\n isLoading?: boolean;\n sessionId?: string | null;\n}\n\nexport function ConversationView({ turns, isLoading, sessionId }: ConversationViewProps) {\n const { token } = useToken();\n\n if (isLoading) {\n return (\n <UIFlex justify=\"center\" align=\"center\" style={{ minHeight: 240, gap: 8 }}>\n <UISpin size=\"small\" />\n <UITypographyText type=\"secondary\" style={{ fontSize: 13 }}>Loading history...</UITypographyText>\n </UIFlex>\n );\n }\n\n if (turns.length === 0) {\n return (\n <UIFlex justify=\"center\" align=\"center\" style={{ minHeight: 240 }}>\n <UITypographyText type=\"secondary\" style={{ fontSize: 14 }}>Ask anything to get started</UITypographyText>\n </UIFlex>\n );\n }\n\n return (\n <div style={{ display: 'flex', flexDirection: 'column', padding: '16px 16px 40px', gap: 24 }}>\n {turns.map((turn) => (\n <TurnView key={turn.id} turn={turn} sessionId={sessionId} token={token} />\n ))}\n </div>\n );\n}\n\n// ---------- TurnView ----------\n\nfunction TurnView({ turn, sessionId, token }: { turn: Turn; sessionId?: string | null; token: ReturnType<typeof useToken>['token'] }) {\n if (turn.type === 'user') {\n const text = turn.steps.find((s) => s.type === 'text');\n return (\n <div style={{ display: 'flex', justifyContent: 'flex-end' }}>\n <span style={{\n maxWidth: '68%',\n background: token.colorFillTertiary,\n borderRadius: `${token.borderRadiusLG}px ${token.borderRadiusLG}px 3px ${token.borderRadiusLG}px`,\n padding: '10px 16px',\n fontSize: 14,\n lineHeight: 1.55,\n color: token.colorText,\n whiteSpace: 'pre-wrap',\n wordBreak: 'break-word',\n }}>\n {text?.type === 'text' ? text.content : ''}\n </span>\n </div>\n );\n }\n\n const isStreaming = turn.status === 'streaming';\n const textSteps = turn.steps.filter((s) => s.type === 'text');\n const visibleTextSteps = textSteps.filter(\n (s) => !isInternalProgressText(s.content ?? '') && s.content?.trim(),\n );\n const hasInternalProgressText = textSteps.some((s) => isInternalProgressText(s.content ?? ''));\n\n const reportStep = turn.steps.find(\n (s) => s.type === 'tool_use' && (s as import('@kb-labs/agent-contracts').ToolUseStep).toolName === 'report'\n ) as import('@kb-labs/agent-contracts').ToolUseStep | undefined;\n const reportAnswer = (reportStep?.input as Record<string, unknown> | null)?.answer as string | undefined;\n\n const visibleSteps = turn.steps.filter(\n (s) => s.type !== 'text' && !(s.type === 'tool_use' && (s as import('@kb-labs/agent-contracts').ToolUseStep).toolName === 'report')\n );\n const hasToolSteps = visibleSteps.length > 0 || isStreaming || hasInternalProgressText;\n\n const answerContent = reportAnswer || null;\n const fileChanges = turn.metadata?.fileChanges;\n const runId = turn.metadata?.runId;\n const showFileChanges = !isStreaming && fileChanges && fileChanges.length > 0 && !!sessionId && !!runId;\n\n const timelineStyle: React.CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n borderLeft: `2px solid ${token.colorBorderSecondary}`,\n paddingLeft: 12,\n gap: 6,\n marginLeft: 6,\n };\n\n return (\n <div style={{ display: 'flex', flexDirection: 'column', gap: 8 }}>\n {hasToolSteps && (\n <div style={timelineStyle}>\n {visibleSteps.map((step, i) => (\n <StepRow\n key={step.id}\n step={step}\n isLast={false}\n isStreaming={isStreaming && i === visibleSteps.length - 1 && !answerContent && visibleTextSteps.length === 0}\n token={token}\n />\n ))}\n {isStreaming && (turn.steps.length === 0 || hasInternalProgressText) && (\n <ThinkingRow token={token} />\n )}\n </div>\n )}\n {answerContent && (\n <div style={timelineStyle}>\n <div style={{ display: 'flex', alignItems: 'flex-start', gap: 8 }}>\n <StepDot color={token.colorPrimary} pulse={false} />\n <UIMarkdownViewer content={answerContent} style={{ flex: 1 }} />\n </div>\n </div>\n )}\n {!answerContent && visibleTextSteps.map((step) => (\n step.type === 'text' && step.content?.trim() ? (\n <div key={step.id} style={timelineStyle}>\n <div style={{ display: 'flex', alignItems: 'flex-start', gap: 8 }}>\n <StepDot color={token.colorPrimary} pulse={false} />\n <UIMarkdownViewer content={step.content} style={{ flex: 1 }} />\n </div>\n </div>\n ) : null\n ))}\n {showFileChanges && (\n <div style={timelineStyle}>\n <FileChangesBlock\n sessionId={sessionId!}\n runId={runId!}\n fileChanges={fileChanges!}\n token={token}\n />\n </div>\n )}\n </div>\n );\n}\n\n// ---------- StepDot ----------\n\nfunction StepDot({ color, pulse }: { color: string; pulse?: boolean }) {\n return (\n <span style={{\n flexShrink: 0,\n width: 10,\n height: 10,\n marginTop: 5,\n borderRadius: '50%',\n background: color,\n opacity: pulse ? 0.7 : 1,\n animation: pulse ? 'none' : undefined,\n }} />\n );\n}\n\n// ---------- ThinkingRow ----------\n\nfunction ThinkingRow({ token }: { token: ReturnType<typeof useToken>['token'] }) {\n return (\n <div style={{ display: 'flex', alignItems: 'center', gap: 8 }}>\n <StepDot color={token.colorTextTertiary} pulse={true} />\n <UITypographyText type=\"secondary\" style={{ fontSize: 13 }}>Agent is analyzing and executing steps...</UITypographyText>\n </div>\n );\n}\n\n// ---------- StepRow ----------\n\nfunction StepRow({ step, isStreaming, token }: { step: TurnStep; isLast: boolean; isStreaming: boolean; token: ReturnType<typeof useToken>['token'] }) {\n switch (step.type) {\n case 'thinking': {\n const content = step.content?.trim() ?? '';\n if (isNoisyThinking(content)) { return null; }\n return (\n <div style={{ display: 'flex', alignItems: 'flex-start', gap: 8 }}>\n <StepDot color={token.colorWarning} pulse={isStreaming} />\n <div style={{ flex: 1 }}>\n <UIMarkdownViewer content={content} style={{ fontSize: 13, opacity: 0.8 }} />\n </div>\n </div>\n );\n }\n\n case 'tool_use':\n return <ToolRow step={step} isStreaming={isStreaming} token={token} />;\n\n case 'tool_result':\n return (\n <div style={{ display: 'flex', alignItems: 'flex-start', gap: 8 }}>\n <StepDot color={step.success ? token.colorSuccess : token.colorError} />\n <div style={{ flex: 1 }}>\n <span style={{ fontSize: 13, color: token.colorTextSecondary }}>\n <span style={{ fontWeight: 500, color: token.colorText }}>{formatToolName(step.toolName)}</span>\n {step.durationMs !== undefined && (\n <span style={{ marginLeft: 6, fontSize: 11, color: token.colorTextTertiary }}>{step.durationMs}ms</span>\n )}\n </span>\n {!step.success && step.error && (\n <p style={{ margin: '4px 0 0', fontSize: 12, color: token.colorError }}>{step.error}</p>\n )}\n </div>\n </div>\n );\n\n case 'subagent':\n return (\n <div style={{ display: 'flex', alignItems: 'flex-start', gap: 8 }}>\n <StepDot color={token.colorPrimary} />\n <span style={{ fontSize: 13, color: token.colorTextSecondary }}>\n <span style={{ fontWeight: 500, color: token.colorText }}>Agent: {step.agentName}</span>\n <span style={{ marginLeft: 6 }}> — {step.task?.slice(0, 60)}{(step.task?.length ?? 0) > 60 ? '...' : ''}</span>\n </span>\n </div>\n );\n\n case 'error':\n return (\n <div style={{ display: 'flex', alignItems: 'flex-start', gap: 8 }}>\n <StepDot color={token.colorError} />\n <div style={{ flex: 1 }}>\n <span style={{ fontSize: 13, fontWeight: 500, color: token.colorError }}>{step.code}</span>\n <p style={{ margin: '4px 0 0', fontSize: 12, color: token.colorError }}>{step.message}</p>\n </div>\n </div>\n );\n\n default:\n return null;\n }\n}\n\n// ---------- ToolRow ----------\n\nfunction ToolRow({\n step,\n isStreaming,\n token,\n}: {\n step: import('@kb-labs/agent-contracts').ToolUseStep;\n isStreaming: boolean;\n token: ReturnType<typeof useToken>['token'];\n}) {\n const [open, setOpen] = React.useState(false);\n\n const isPending = step.status === 'pending';\n const isDone = step.status === 'done';\n const isError = step.status === 'error';\n const isFailed = isDone && step.success === false;\n\n const meta = getToolMeta(step);\n const hasDiff = isDone && !!step.metadata?.diff;\n const hasOutput = isDone && step.output != null;\n const input = step.input as Record<string, unknown> | null | undefined;\n const isWriteTool = /write|patch|edit/i.test(step.toolName);\n const hasWriteInput = isWriteTool && isDone && !!(input?.content ?? input?.new_content);\n const canExpand = hasOutput || hasDiff || hasWriteInput || isError;\n\n const dotColor = isPending\n ? (isStreaming ? token.colorTextTertiary : token.colorPrimary)\n : (isDone && !isFailed ? token.colorSuccess : token.colorError);\n\n const m = step.metadata;\n const todoList = (isDone && m?.uiHint === 'todo' && m.structured != null)\n ? (m.structured as Record<string, unknown>).todoList as TodoListData | undefined\n : undefined;\n\n return (\n <div style={{ display: 'flex', alignItems: 'flex-start', gap: 8 }}>\n <StepDot color={dotColor} pulse={isPending && isStreaming} />\n <div style={{ flex: 1, minWidth: 0 }}>\n {/* Header button */}\n <button\n onClick={() => canExpand && setOpen((v) => !v)}\n disabled={!canExpand}\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: 6,\n background: 'none',\n border: 'none',\n padding: 0,\n cursor: canExpand ? 'pointer' : 'default',\n fontSize: 13,\n color: token.colorText,\n flexWrap: 'wrap',\n }}\n >\n <span style={{ fontWeight: 500 }}>{formatToolName(step.toolName)}</span>\n {meta.badge && (\n <span style={{ fontSize: 11, color: token.colorTextSecondary, background: token.colorFillSecondary, borderRadius: token.borderRadiusSM, padding: '0 5px' }}>\n {meta.badge}\n </span>\n )}\n {isDone && m?.resultCount !== undefined && (\n <span style={{ fontSize: 11, color: token.colorTextSecondary, background: token.colorFillSecondary, borderRadius: token.borderRadiusSM, padding: '0 5px' }}>\n {m.resultCount} results\n </span>\n )}\n {isDone && m?.confidence !== undefined && (\n <span style={{ fontSize: 11, color: token.colorTextSecondary, background: token.colorFillSecondary, borderRadius: token.borderRadiusSM, padding: '0 5px' }}>\n {Math.round(m.confidence * 100)}%\n </span>\n )}\n {isDone && m?.exitCode !== undefined && m.exitCode !== 0 && (\n <span style={{ fontSize: 11, color: token.colorError, background: token.colorErrorBg, borderRadius: token.borderRadiusSM, padding: '0 5px' }}>\n exit {m.exitCode}\n </span>\n )}\n {isDone && (m?.linesAdded !== undefined || m?.linesRemoved !== undefined) && (\n <span style={{ fontSize: 11, color: token.colorSuccess, background: token.colorSuccessBg, borderRadius: token.borderRadiusSM, padding: '0 5px' }}>\n {m?.linesAdded != null && m.linesAdded > 0 ? `+${m.linesAdded}` : ''}\n {m?.linesRemoved != null && m.linesRemoved > 0 ? ` -${m.linesRemoved}` : ''}\n </span>\n )}\n {!isPending && step.durationMs !== undefined && (\n <span style={{ fontSize: 11, color: token.colorTextTertiary }}>{step.durationMs}ms</span>\n )}\n {canExpand && (\n <span style={{ fontSize: 11, color: token.colorTextTertiary }}>{open ? 'collapse' : 'expand'}</span>\n )}\n </button>\n\n {/* Summary / file path */}\n {meta.summary && (\n <p style={{ margin: '2px 0 0', fontSize: 12, color: token.colorTextSecondary }}>\n {meta.filePath\n ? <CopyPath path={meta.filePath} label={meta.summary} token={token} />\n : meta.summary}\n </p>\n )}\n\n {/* Todo list */}\n {todoList != null && <TodoView todoList={todoList} token={token} />}\n\n {/* Errors */}\n {isError && step.error && (\n <p style={{ margin: '4px 0 0', fontSize: 12, color: token.colorError }}>{step.error}</p>\n )}\n {isFailed && !open && step.output != null && (\n <p style={{ margin: '4px 0 0', fontSize: 12, color: token.colorError }}>{String(step.output)}</p>\n )}\n\n {/* Expanded details */}\n {open && (\n <div style={{ marginTop: 6 }}>\n <ToolDetails step={step} hasDiff={hasDiff} hasOutput={hasOutput} token={token} />\n </div>\n )}\n </div>\n </div>\n );\n}\n\n// ---------- ToolDetails ----------\n\nfunction ToolDetails({\n step,\n hasDiff,\n hasOutput,\n token,\n}: {\n step: import('@kb-labs/agent-contracts').ToolUseStep;\n hasDiff: boolean;\n hasOutput: boolean;\n token: ReturnType<typeof useToken>['token'];\n}) {\n const input = step.input as Record<string, unknown> | null | undefined;\n const toolLower = step.toolName.toLowerCase();\n\n const isWrite = toolLower.includes('write') || toolLower.includes('patch') || toolLower.includes('edit');\n const isRead = toolLower.includes('read');\n const isShell = toolLower.includes('bash') || toolLower.includes('exec') || toolLower.includes('shell') || toolLower.includes('run');\n const isSearch = toolLower.includes('grep') || toolLower.includes('search') || toolLower.includes('glob') || toolLower.includes('list') || toolLower.includes('rag');\n\n const codePreStyle: React.CSSProperties = {\n margin: 0,\n padding: '8px 10px',\n fontSize: 12,\n lineHeight: 1.5,\n borderRadius: token.borderRadius,\n overflow: 'auto',\n maxHeight: 300,\n whiteSpace: 'pre-wrap',\n wordBreak: 'break-all',\n };\n\n if (isWrite) {\n if (hasDiff) { return <DiffView diff={step.metadata!.diff!} token={token} />; }\n const content = (input?.content ?? input?.new_content ?? input?.text) as string | undefined;\n if (content) {\n const filePath = (input?.path ?? input?.filePath ?? input?.file_path ?? input?.file) as string | undefined;\n const ext = filePath ? filePath.split('.').pop() : undefined;\n return (\n <div>\n {filePath && (\n <div style={{ fontSize: 11, color: token.colorTextTertiary, padding: '3px 8px', background: token.colorFillSecondary, borderRadius: `${token.borderRadius}px ${token.borderRadius}px 0 0` }}>\n {filePath}\n </div>\n )}\n <pre style={{ ...codePreStyle, background: token.colorFillSecondary, borderRadius: filePath ? `0 0 ${token.borderRadius}px ${token.borderRadius}px` : token.borderRadius }}\n className={ext ? `lang-${ext}` : undefined}\n >{String(content)}</pre>\n </div>\n );\n }\n return null;\n }\n\n if (isRead && hasOutput) {\n return <pre style={{ ...codePreStyle, background: token.colorFillSecondary }}>{formatOutput(step.output)}</pre>;\n }\n if (isShell && hasOutput) {\n return <pre style={{ ...codePreStyle, background: token.colorBgSpotlight, color: token.colorTextLightSolid }}>{formatOutput(step.output)}</pre>;\n }\n if (isSearch && hasOutput) {\n return <pre style={{ ...codePreStyle, background: token.colorFillSecondary }}>{formatOutput(step.output)}</pre>;\n }\n\n if (hasDiff) { return <DiffView diff={step.metadata!.diff!} token={token} />; }\n if (hasOutput) {\n const isFailed = step.status === 'done' && step.success === false;\n const outputStr = formatOutput(step.output);\n if (isFailed) {\n return (\n <pre style={{ ...codePreStyle, background: token.colorErrorBg, color: token.colorError }}>\n {outputStr}\n </pre>\n );\n }\n return <UIMarkdownViewer content={outputStr} style={{ fontSize: 12 }} />;\n }\n return null;\n}\n\n// ---------- DiffView ----------\n\nfunction DiffView({ diff, token }: { diff: string; token: ReturnType<typeof useToken>['token'] }) {\n const lines = diff.split('\\n');\n return (\n <pre style={{\n margin: 0,\n padding: '8px 10px',\n fontSize: 12,\n lineHeight: 1.5,\n borderRadius: token.borderRadius,\n overflow: 'auto',\n maxHeight: 300,\n background: token.colorFillSecondary,\n whiteSpace: 'pre',\n }}>\n {lines.map((line, i) => {\n const color =\n line.startsWith('+') && !line.startsWith('+++') ? token.colorSuccess :\n line.startsWith('-') && !line.startsWith('---') ? token.colorError :\n line.startsWith('@@') ? token.colorInfo :\n undefined;\n return (\n <span key={i} style={color ? { color } : undefined}>{line}{'\\n'}</span>\n );\n })}\n </pre>\n );\n}\n\n// ---------- CopyPath ----------\n\nfunction CopyPath({ path, label, token }: { path: string; label: string; token: ReturnType<typeof useToken>['token'] }) {\n const [copied, setCopied] = React.useState(false);\n const handleClick = (e: React.MouseEvent) => {\n e.stopPropagation();\n void navigator.clipboard.writeText(path).then(() => {\n setCopied(true);\n setTimeout(() => setCopied(false), 1500);\n });\n };\n return (\n <span\n onClick={handleClick}\n title={path}\n style={{ cursor: 'pointer', color: copied ? token.colorSuccess : token.colorTextSecondary, fontFamily: 'monospace', fontSize: 12 }}\n >\n {label}{copied ? ' ✓' : ''}\n </span>\n );\n}\n\n// ---------- FileChangesBlock ----------\n\ninterface FileChangesBlockProps {\n sessionId: string;\n runId: string;\n fileChanges: FileChangeSummary[];\n token: ReturnType<typeof useToken>['token'];\n}\n\nfunction FileChangesBlock({ sessionId, runId, fileChanges, token }: FileChangesBlockProps) {\n const [dismissed, setDismissed] = React.useState<Set<string>>(new Set());\n const rollback = useMutateData<{ runId?: string; changeIds?: string[] }, { rolledBack: number; skipped: number; conflicts: unknown[] }>(\n `/v1/plugins/agents/sessions/${sessionId}/rollback`,\n 'POST'\n );\n const approve = useMutateData<{ runId?: string; changeIds?: string[] }, { approved: number }>(\n `/v1/plugins/agents/sessions/${sessionId}/approve`,\n 'POST'\n );\n\n const visible = fileChanges.filter((c) => !dismissed.has(c.changeId) && !c.approved);\n if (visible.length === 0) { return null; }\n\n const allApproved = visible.every((c) => c.approved);\n\n const handleRollback = () => {\n UIModalConfirm({\n title: 'Rollback changes?',\n content: `This will revert ${visible.length} ${pluralFiles(visible.length)} to the state before the agent run.`,\n okText: 'Rollback',\n okButtonProps: { danger: true },\n cancelText: 'Cancel',\n onOk: async () => {\n try {\n const result = await rollback.mutateAsync({ runId });\n if (result.conflicts?.length) {\n console.warn(`Rolled back: ${result.rolledBack}, skipped due to conflicts: ${result.skipped}`);\n }\n setDismissed(new Set(visible.map((c) => c.changeId)));\n } catch {\n console.error('Failed to rollback changes');\n }\n },\n });\n };\n\n const handleApprove = async () => {\n try {\n await approve.mutateAsync({ runId });\n setDismissed(new Set(visible.map((c) => c.changeId)));\n } catch {\n console.error('Failed to approve changes');\n }\n };\n\n return (\n <div style={{ display: 'flex', alignItems: 'flex-start', gap: 8 }}>\n <StepDot color={token.colorSuccess} />\n <div style={{ flex: 1, minWidth: 0 }}>\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between', marginBottom: 4 }}>\n <UITypographyText style={{ fontSize: 13, fontWeight: 500 }}>\n {visible.length} {pluralFiles(visible.length)} changed\n </UITypographyText>\n {!allApproved && (\n <UIFlex gap={4}>\n <button\n onClick={handleApprove}\n disabled={approve.isLoading || rollback.isLoading}\n title=\"Approve all changes\"\n style={{\n background: token.colorSuccessBg,\n border: `1px solid ${token.colorSuccessBorder}`,\n color: token.colorSuccess,\n borderRadius: token.borderRadius,\n padding: '2px 8px',\n fontSize: 12,\n cursor: 'pointer',\n }}\n >✓</button>\n <button\n onClick={handleRollback}\n disabled={rollback.isLoading || approve.isLoading}\n title=\"Rollback all changes\"\n style={{\n background: token.colorErrorBg,\n border: `1px solid ${token.colorErrorBorder}`,\n color: token.colorError,\n borderRadius: token.borderRadius,\n padding: '2px 8px',\n fontSize: 12,\n cursor: 'pointer',\n }}\n >✕</button>\n </UIFlex>\n )}\n </div>\n <ul style={{ listStyle: 'none', margin: 0, padding: 0, display: 'flex', flexDirection: 'column', gap: 2 }}>\n {visible.map((change) => (\n <FileChangeRow\n key={change.changeId}\n change={change}\n sessionId={sessionId}\n onDismiss={() => setDismissed((prev) => new Set([...prev, change.changeId]))}\n token={token}\n />\n ))}\n </ul>\n </div>\n </div>\n );\n}\n\n// ---------- FileChangeRow ----------\n\ninterface FileChangeRowProps {\n change: FileChangeSummary;\n sessionId: string;\n onDismiss: () => void;\n token: ReturnType<typeof useToken>['token'];\n}\n\nfunction FileChangeRow({ change, sessionId, onDismiss, token }: FileChangeRowProps) {\n const [open, setOpen] = React.useState(false);\n const rollback = useMutateData<{ changeIds: string[] }, { rolledBack: number; skipped: number; conflicts: unknown[] }>(\n `/v1/plugins/agents/sessions/${sessionId}/rollback`,\n 'POST'\n );\n const approve = useMutateData<{ changeIds: string[] }, { approved: number }>(\n `/v1/plugins/agents/sessions/${sessionId}/approve`,\n 'POST'\n );\n\n const diffUrl = open ? `/v1/plugins/agents/sessions/${sessionId}/changes/${encodeURIComponent(change.changeId)}/diff` : '';\n const { data: diffData, isLoading: diffLoading, isError: diffError } = useData<{ diff: string }>(diffUrl, { enabled: open });\n\n const handleRollback = (e: React.MouseEvent) => {\n e.stopPropagation();\n UIModalConfirm({\n title: 'Rollback file?',\n content: change.filePath,\n okText: 'Rollback',\n okButtonProps: { danger: true },\n cancelText: 'Cancel',\n onOk: async () => {\n try {\n await rollback.mutateAsync({ changeIds: [change.changeId] });\n onDismiss();\n } catch {\n console.error('Failed to rollback file');\n }\n },\n });\n };\n\n const handleApprove = (e: React.MouseEvent) => {\n e.stopPropagation();\n approve.mutateAsync({ changeIds: [change.changeId] }).then(onDismiss).catch(() => {\n console.error('Failed to approve file');\n });\n };\n\n const opTag = change.isNew\n ? <UITag color=\"success\">new</UITag>\n : change.operation === 'delete'\n ? <UITag color=\"error\">del</UITag>\n : <UITag color=\"blue\">mod</UITag>;\n\n return (\n <li>\n <div\n onClick={() => setOpen((v) => !v)}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 6,\n fontSize: 12,\n cursor: 'pointer',\n padding: '2px 4px',\n borderRadius: token.borderRadiusSM,\n background: open ? token.colorFillSecondary : 'transparent',\n }}\n >\n {opTag}\n <span style={{ flex: 1, fontFamily: 'monospace', color: token.colorTextSecondary, overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}>\n {change.filePath.split('/').pop() ?? change.filePath}\n </span>\n <span style={{ color: token.colorTextTertiary, fontFamily: 'monospace', fontSize: 11 }}>\n {change.filePath.includes('/') ? change.filePath.slice(0, change.filePath.lastIndexOf('/')) : ''}\n </span>\n {!change.approved && (\n <div style={{ display: 'flex', gap: 4 }} onClick={(e: React.MouseEvent) => e.stopPropagation()}>\n <button\n onClick={handleApprove}\n disabled={approve.isLoading}\n title=\"Approve\"\n style={{ background: 'none', border: 'none', cursor: 'pointer', color: token.colorSuccess, fontSize: 13, padding: '0 2px' }}\n >✓</button>\n <button\n onClick={handleRollback}\n disabled={rollback.isLoading}\n title=\"Rollback\"\n style={{ background: 'none', border: 'none', cursor: 'pointer', color: token.colorError, fontSize: 13, padding: '0 2px' }}\n >✕</button>\n </div>\n )}\n </div>\n {open && (\n <div style={{ marginTop: 4, marginLeft: 4 }}>\n {diffLoading && <UISpin size=\"small\" />}\n {diffData?.diff && <DiffView diff={diffData.diff} token={token} />}\n {diffError && <span style={{ color: token.colorError, fontSize: 12 }}>Failed to load diff</span>}\n </div>\n )}\n </li>\n );\n}\n\n// ---------- TodoView ----------\n\ninterface TodoItemData {\n id: string;\n description: string;\n status: 'pending' | 'in-progress' | 'completed' | 'blocked';\n priority: 'low' | 'medium' | 'high';\n}\n\ninterface TodoListData {\n sessionId: string;\n items: TodoItemData[];\n}\n\nconst TODO_STATUS_ICON: Record<string, string> = {\n 'completed': '✓',\n 'in-progress': '●',\n 'blocked': '✕',\n 'pending': '○',\n};\n\nfunction TodoView({ todoList, token }: { todoList?: TodoListData; token: ReturnType<typeof useToken>['token'] }) {\n if (!todoList?.items?.length) { return null; }\n const completed = todoList.items.filter((i) => i.status === 'completed').length;\n return (\n <div style={{\n marginTop: 6,\n background: token.colorFillTertiary,\n borderRadius: token.borderRadius,\n padding: '8px 10px',\n }}>\n <div style={{ fontSize: 11, color: token.colorTextTertiary, marginBottom: 6, fontWeight: 500 }}>\n {completed}/{todoList.items.length}\n </div>\n <ul style={{ listStyle: 'none', margin: 0, padding: 0, display: 'flex', flexDirection: 'column', gap: 2 }}>\n {todoList.items.map((item) => (\n <li key={item.id} style={{ display: 'flex', alignItems: 'center', gap: 8, fontSize: 13, lineHeight: 1.5, padding: '2px 0' }}>\n <span style={{ fontSize: 12, flexShrink: 0, width: 14, textAlign: 'center', lineHeight: 1 }}>\n {TODO_STATUS_ICON[item.status] ?? '○'}\n </span>\n {item.status === 'completed' ? (\n <UITypographyText type=\"success\" style={{ flex: 1, minWidth: 0, textDecoration: 'line-through' }}>{item.description}</UITypographyText>\n ) : item.status === 'pending' || item.status === 'blocked' ? (\n <UITypographyText type=\"secondary\" style={{ flex: 1, minWidth: 0 }}>{item.description}</UITypographyText>\n ) : (\n <UITypographyText style={{ flex: 1, minWidth: 0 }}>{item.description}</UITypographyText>\n )}\n {item.priority !== 'medium' && (\n <UITypographyText type=\"secondary\" style={{ fontSize: 11, flexShrink: 0 }}>{item.priority}</UITypographyText>\n )}\n </li>\n ))}\n </ul>\n </div>\n );\n}\n\n// ---------- Helpers ----------\n\ninterface ToolMeta {\n summary?: string;\n filePath?: string;\n badge?: string;\n}\n\nfunction getToolMeta(step: import('@kb-labs/agent-contracts').ToolUseStep): ToolMeta {\n const input = step.input as Record<string, unknown> | null | undefined;\n if (!input) { return {}; }\n\n const toolLower = step.toolName.toLowerCase();\n const isRead = toolLower.includes('read');\n const isWrite = toolLower.includes('write') || toolLower.includes('patch') || toolLower.includes('edit');\n\n const path = (input.path ?? input.filePath ?? input.file_path ?? input.file) as string | undefined;\n if (path) {\n const fileName = String(path).split('/').pop() ?? String(path);\n let badge: string | undefined;\n if (isRead) {\n const offset = input.offset ?? input.startLine ?? input.start_line;\n const limit = input.limit ?? input.endLine ?? input.end_line;\n if (offset !== undefined && limit !== undefined) { badge = `${offset}-${Number(offset) + Number(limit)}`; }\n else if (limit !== undefined) { badge = `${limit} lines`; }\n }\n return { summary: fileName, filePath: String(path), badge };\n }\n\n const query = (input.query ?? input.text ?? input.pattern ?? input.search) as string | undefined;\n if (query) { return { summary: String(query).slice(0, 100) }; }\n\n const command = (input.command ?? input.cmd) as string | undefined;\n if (command) { return { summary: String(command).slice(0, 100) }; }\n\n if (isWrite) { return {}; }\n\n const content = (input.content ?? input.message) as string | undefined;\n if (content) { return { summary: String(content).slice(0, 100) }; }\n\n return {};\n}\n\nfunction formatToolName(name: string): string {\n const normalized = name.trim().toLowerCase().replace(/[_-]/g, ' ');\n if (normalized.includes('fs read') || normalized.includes('read file')) { return 'Read'; }\n if (normalized.includes('fs write') || normalized.includes('write file')) { return 'Write'; }\n if (normalized.includes('fs patch') || normalized.includes('patch file')) { return 'Edit'; }\n if (normalized.includes('fs edit') || normalized.includes('edit file')) { return 'Edit'; }\n if (normalized.includes('fs delete') || normalized.includes('delete file') || normalized.includes('remove file')) { return 'Delete'; }\n if (normalized.includes('fs list') || normalized.includes('list files') || normalized.includes('glob')) { return 'Glob'; }\n if (normalized.includes('grep') || normalized.includes('search content')) { return 'Grep'; }\n if (normalized.includes('bash') || normalized.includes('exec') || normalized.includes('shell') || normalized.includes('run command')) { return 'Bash'; }\n if (normalized.includes('rag') || normalized.includes('mind')) { return 'Mind'; }\n if (normalized.includes('todo')) { return 'TodoWrite'; }\n\n const colonIdx = name.indexOf(':');\n const base = colonIdx >= 0 ? name.slice(colonIdx + 1) : name;\n return base\n .replace(/[_-]/g, ' ')\n .replace(/([a-z])([A-Z])/g, '$1 $2')\n .replace(/\\b\\w/g, (c) => c.toUpperCase());\n}\n\nfunction isNoisyThinking(content: string): boolean {\n const t = content.trim().toLowerCase();\n if (t === '[executing tools...]' || t === '[thinking...]' || t === '[planning...]' || t === '[analyzing...]') { return true; }\n if (t === 'analyzing context and choosing the next step.') { return true; }\n if (t.startsWith('checking facts with tool:') || t.startsWith('running step with tool:') || t.startsWith('running the next step')) { return true; }\n if (t === 'done.' || t === 'ok.' || t === 'done' || t === 'ok') { return true; }\n return false;\n}\n\nfunction isInternalProgressText(content: string): boolean {\n return isNoisyThinking(content);\n}\n\nfunction pluralFiles(n: number): string {\n return n === 1 ? 'file' : 'files';\n}\n\nfunction formatOutput(output: unknown): string {\n if (typeof output === 'string') { return output.slice(0, 2000); }\n try { return JSON.stringify(output, null, 2).slice(0, 2000); }\n catch { return String(output).slice(0, 2000); }\n}\n","/**\n * Agent chat page — Module Federation widget\n * Turn-based agent UI with snapshot-based architecture\n */\n\nimport React, { useState, useCallback, useEffect } from 'react';\nimport { useSearchParams } from 'react-router-dom';\nimport { useData, useMutateData, UIInputTextArea, UIButton, UISpace, UIMessage, UICard, UISelect, UISwitch, UITypographyText, UIIcon, useUITheme } from '@kb-labs/sdk/studio';\nimport { useAgentWebSocket, buildAgentWsUrl } from '../hooks/use-agent-websocket';\nimport { SessionSelector } from '../components/SessionSelector';\nimport { ConversationView } from '../components/ConversationView';\nimport type { AgentSessionInfo, Turn, AgentResponseMode } from '@kb-labs/agent-contracts';\n\n\ntype RunStatus = 'idle' | 'running' | 'completed' | 'failed' | 'stopped';\n\ninterface RunRequest {\n task: string;\n agentId: string;\n sessionId?: string;\n tier: 'small' | 'medium' | 'large';\n enableEscalation: boolean;\n responseMode: AgentResponseMode;\n}\n\ninterface RunResponse {\n runId: string;\n sessionId: string;\n}\n\ninterface StopRequest {\n reason?: string;\n}\n\nfunction compareTurns(a: Turn, b: Turn): number {\n if (a.sequence !== b.sequence) { return a.sequence - b.sequence; }\n if (a.type !== b.type) {\n if (a.type === 'user') { return -1; }\n if (b.type === 'user') { return 1; }\n }\n return a.startedAt.localeCompare(b.startedAt);\n}\n\nfunction AgentsPage() {\n const { token } = useUITheme();\n const scrollContainerRef = React.useRef<HTMLDivElement>(null);\n\n const [searchParams, setSearchParams] = useSearchParams();\n const [currentSessionId, setCurrentSessionId] = useState<string | null>(\n () => searchParams.get('session')\n );\n const [loadedSessionId, setLoadedSessionId] = useState<string | null>(\n () => searchParams.get('session')\n );\n\n const [task, setTask] = useState('');\n const [currentRunId, setCurrentRunId] = useState<string | null>(null);\n const [runStatus, setRunStatus] = useState<RunStatus>('idle');\n const [optimisticUserTurns, setOptimisticUserTurns] = useState<Turn[]>([]);\n const [responseMode, setResponseMode] = useState<AgentResponseMode>('auto');\n const [tier, setTier] = useState<'small' | 'medium' | 'large'>('medium');\n const [enableEscalation, setEnableEscalation] = useState(true);\n const [agentMode, setAgentMode] = useState<'execute' | 'plan'>('execute');\n const [inputFocused, setInputFocused] = useState(false);\n\n const agentId = 'mind-assistant';\n\n const wsUrl = currentSessionId ? buildAgentWsUrl(currentSessionId) : null;\n\n const startRunMutation = useMutateData<RunRequest, RunResponse>('/v1/plugins/agents/run', 'POST');\n const stopMutation = useMutateData<StopRequest, unknown>(\n currentRunId ? `/v1/plugins/agents/run/${currentRunId}/stop` : '/v1/plugins/agents/run/noop/stop',\n 'POST'\n );\n\n const sessionTurnsUrl = currentSessionId ? `/v1/plugins/agents/sessions/${currentSessionId}/turns` : '';\n const { data: sessionTurnsData, isFetching: turnsFetching, refetch: refetchTurns } = useData<{ turns: Turn[]; total: number }>(\n sessionTurnsUrl,\n { enabled: !!currentSessionId },\n );\n\n useEffect(() => {\n if (currentSessionId && sessionTurnsData && !turnsFetching) {\n setLoadedSessionId(currentSessionId);\n }\n }, [currentSessionId, sessionTurnsData, turnsFetching]);\n\n const ws = useAgentWebSocket({\n url: wsUrl,\n onComplete: (success, summary) => {\n setRunStatus(success ? 'completed' : 'failed');\n void refetchTurns();\n console.log('[AgentsPage] Run completed:', summary);\n },\n onTurnsChanged: () => {\n setOptimisticUserTurns([]);\n },\n onError: (error) => {\n console.error('[AgentsPage] WebSocket error:', error);\n UIMessage.error(`Connection error: ${error.message}`);\n },\n });\n\n const handleSessionChange = useCallback((sessionId: string, _session: AgentSessionInfo) => {\n setCurrentSessionId(sessionId);\n setLoadedSessionId(null);\n setSearchParams({ session: sessionId }, { replace: true });\n setCurrentRunId(null);\n setRunStatus('idle');\n setOptimisticUserTurns([]);\n ws.clearTurns();\n }, [ws, setSearchParams]);\n\n const handleNewChat = useCallback(() => {\n setCurrentSessionId(null);\n setLoadedSessionId(null);\n setSearchParams({}, { replace: true });\n setCurrentRunId(null);\n setRunStatus('idle');\n setOptimisticUserTurns([]);\n ws.clearTurns();\n }, [ws, setSearchParams]);\n\n const handleStart = useCallback(async () => {\n if (!task.trim()) { return; }\n\n const userMessage = task.trim();\n setTask('');\n setRunStatus('running');\n\n const optimisticTurn: Turn = {\n id: `optimistic-user-${Date.now()}`,\n type: 'user',\n sequence: 9999,\n startedAt: new Date().toISOString(),\n completedAt: new Date().toISOString(),\n status: 'completed',\n steps: [{ type: 'text', id: 'opt-1', timestamp: new Date().toISOString(), content: userMessage, role: 'user' }],\n metadata: { agentId: 'user' },\n };\n setOptimisticUserTurns((prev) => [...prev, optimisticTurn]);\n\n try {\n const response = await startRunMutation.mutateAsync({\n task: userMessage,\n agentId,\n sessionId: currentSessionId ?? undefined,\n tier,\n enableEscalation,\n responseMode,\n });\n\n if (!currentSessionId) {\n setCurrentSessionId(response.sessionId);\n setLoadedSessionId(response.sessionId);\n setSearchParams({ session: response.sessionId }, { replace: true });\n }\n\n setCurrentRunId(response.runId);\n } catch (error) {\n setOptimisticUserTurns((prev) => prev.filter((t) => t.id !== optimisticTurn.id));\n setRunStatus('failed');\n UIMessage.error(`Failed to start: ${error instanceof Error ? error.message : String(error)}`);\n }\n }, [\n task,\n agentId,\n currentSessionId,\n tier,\n enableEscalation,\n responseMode,\n setSearchParams,\n startRunMutation,\n ]);\n\n const handleStop = useCallback(async () => {\n if (!currentRunId) { return; }\n\n try {\n await stopMutation.mutateAsync({ reason: 'Stopped by user' });\n setRunStatus('stopped');\n UIMessage.info('Stopped');\n } catch (error) {\n UIMessage.error(`Failed to stop: ${error instanceof Error ? error.message : String(error)}`);\n }\n }, [currentRunId, stopMutation]);\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Enter' && !e.shiftKey && runStatus !== 'running' && !startRunMutation.isLoading) {\n e.preventDefault();\n void handleStart();\n }\n };\n\n const isRunning = runStatus === 'running' || startRunMutation.isLoading;\n const isSwitchingSession = currentSessionId !== null && currentSessionId !== loadedSessionId;\n\n const turns = (() => {\n if (isSwitchingSession) { return []; }\n\n const restTurns = sessionTurnsData?.turns ?? [];\n const wsTurns = ws.turns;\n\n const merged = new Map<string, Turn>();\n if (wsTurns.length === 0) {\n for (const t of restTurns) { merged.set(t.id, t); }\n } else {\n for (const t of restTurns) { merged.set(t.id, t); }\n for (const t of wsTurns) { merged.set(t.id, t); }\n }\n\n const serverUserTexts = new Set(\n [...merged.values()]\n .filter((t) => t.type === 'user')\n .flatMap((t) => t.steps.filter((s) => s.type === 'text').map((s) => s.content?.trim()))\n .filter(Boolean)\n );\n for (const t of optimisticUserTurns) {\n const text = t.steps.find((s) => s.type === 'text')?.content?.trim();\n if (text && !serverUserTexts.has(text)) { merged.set(t.id, t); }\n }\n\n return [...merged.values()].sort(compareTurns);\n })();\n\n const turnsWithThinkingLoader: Turn[] = (() => {\n if (!isRunning) { return turns; }\n\n const hasActiveAssistant = turns.some((t) => t.type === 'assistant' && t.status === 'streaming');\n if (hasActiveAssistant) { return turns; }\n\n const lastUserTurn = [...turns].reverse().find((t) => t.type === 'user');\n if (!lastUserTurn) { return turns; }\n\n const hasCompletedAssistantAfterUser = turns.some(\n (t) => t.type === 'assistant' && t.status === 'completed' && t.sequence > lastUserTurn.sequence\n );\n if (hasCompletedAssistantAfterUser) { return turns; }\n\n const loaderTurn: Turn = {\n id: `thinking-loader-${lastUserTurn.id}`,\n type: 'assistant',\n sequence: lastUserTurn.sequence + 0.1,\n startedAt: new Date().toISOString(),\n completedAt: null,\n status: 'streaming',\n steps: [],\n metadata: { agentId: 'assistant-loader' },\n };\n\n return [...turns, loaderTurn].sort(compareTurns);\n })();\n\n const isLoading = isSwitchingSession || (turnsFetching && turns.length === 0 && !!currentSessionId);\n\n return (\n <div style={{ padding: 16, height: '100%' }}>\n <UICard\n title={\n <UISpace>\n <UIIcon name=\"RobotOutlined\" />\n <span>Agent</span>\n </UISpace>\n }\n extra={\n <SessionSelector\n currentSessionId={currentSessionId}\n onSessionChange={handleSessionChange}\n onNewChat={handleNewChat}\n />\n }\n style={{\n height: '100%',\n display: 'flex',\n flexDirection: 'column',\n }}\n styles={{\n body: {\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n padding: 0,\n overflow: 'hidden',\n },\n }}\n >\n <div\n ref={scrollContainerRef}\n style={{ flex: 1, overflow: 'auto' }}\n >\n <ConversationView\n turns={turnsWithThinkingLoader}\n isLoading={isLoading}\n sessionId={currentSessionId}\n />\n </div>\n\n <div\n style={{\n borderTop: `1px solid ${token.colorBorderSecondary}`,\n padding: '12px 16px',\n background: token.colorBgContainer,\n display: 'flex',\n justifyContent: 'center',\n }}\n >\n <div\n onFocus={() => setInputFocused(true)}\n onBlur={() => setInputFocused(false)}\n style={{\n width: '65%',\n maxWidth: 780,\n border: `1px solid ${\n inputFocused\n ? (agentMode === 'execute' ? token.colorError : token.colorPrimary)\n : (agentMode === 'plan' ? token.colorPrimary : token.colorBorder)\n }`,\n borderRadius: token.borderRadiusLG,\n background: token.colorBgContainer,\n boxShadow: inputFocused\n ? `0 0 0 2px ${agentMode === 'execute' ? token.colorErrorBg : token.colorPrimaryBg}`\n : 'none',\n transition: 'border-color 0.2s, box-shadow 0.2s',\n overflow: 'hidden',\n }}\n >\n <UIInputTextArea\n value={task}\n onChange={(e) => setTask(e.target.value)}\n onKeyDown={handleKeyDown}\n placeholder=\"Message...\"\n autoSize={{ minRows: 2, maxRows: 8 }}\n disabled={isRunning}\n variant=\"borderless\"\n style={{ resize: 'none', padding: '10px 12px 4px', border: 'none', boxShadow: 'none', outline: 'none' }}\n />\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between', padding: '6px 8px 8px' }}>\n <UISpace size={6}>\n <UISelect\n value={agentMode}\n onChange={(v) => setAgentMode(v as 'execute' | 'plan')}\n disabled={isRunning}\n size=\"small\"\n variant=\"borderless\"\n style={{ width: 110 }}\n options={[\n { value: 'execute', label: 'Execute' },\n { value: 'plan', label: 'Plan' },\n ]}\n />\n <UISelect\n value={responseMode}\n onChange={(v) => setResponseMode(v as AgentResponseMode)}\n disabled={isRunning}\n size=\"small\"\n variant=\"borderless\"\n style={{ width: 80 }}\n options={[\n { value: 'auto', label: 'Auto' },\n { value: 'brief', label: 'Brief' },\n { value: 'deep', label: 'Deep' },\n ]}\n />\n <UISelect\n value={tier}\n onChange={(v) => setTier(v as 'small' | 'medium' | 'large')}\n disabled={isRunning}\n size=\"small\"\n variant=\"borderless\"\n style={{ width: 100 }}\n options={[\n { value: 'small', label: 'Small' },\n { value: 'medium', label: 'Medium' },\n { value: 'large', label: 'Large' },\n ]}\n />\n <UISpace size={4} align=\"center\">\n <UISwitch\n checked={enableEscalation}\n onChange={setEnableEscalation}\n disabled={isRunning || tier === 'large'}\n size=\"small\"\n />\n <UITypographyText type=\"secondary\" style={{ fontSize: 12 }}>\n Auto escalate\n </UITypographyText>\n </UISpace>\n </UISpace>\n <div>\n {isRunning ? (\n <UIButton\n danger\n size=\"small\"\n icon={stopMutation.isLoading ? <UIIcon name=\"LoadingOutlined\" /> : <UIIcon name=\"StopOutlined\" />}\n onClick={handleStop}\n disabled={stopMutation.isLoading}\n >\n Stop\n </UIButton>\n ) : (\n <UIButton\n variant=\"primary\"\n size=\"small\"\n icon={startRunMutation.isLoading ? <UIIcon name=\"LoadingOutlined\" /> : <UIIcon name=\"SendOutlined\" />}\n onClick={handleStart}\n disabled={!task.trim() || startRunMutation.isLoading}\n >\n Send\n </UIButton>\n )}\n </div>\n </div>\n </div>\n </div>\n </UICard>\n </div>\n );\n}\nexport default AgentsPage;\n","/**\n * React hook for WebSocket connection to agent turn snapshots.\n * Self-contained copy for plugin widget use — no studio-data-client dependency.\n */\n\nimport { useState, useEffect, useCallback, useRef } from 'react';\nimport type { ServerMessage, Turn } from '@kb-labs/agent-contracts';\n\nexport interface UseAgentWebSocketOptions {\n url: string | null;\n autoReconnect?: boolean;\n reconnectDelay?: number;\n maxReconnectAttempts?: number;\n onComplete?: (success: boolean, summary: string) => void;\n onTurnsChanged?: () => void;\n onError?: (error: { code: string; message: string }) => void;\n}\n\nexport type ConnectionStatus = 'disconnected' | 'connecting' | 'connected' | 'reconnecting' | 'error';\n\nexport interface UseAgentWebSocketReturn {\n status: ConnectionStatus;\n isConnected: boolean;\n turns: Turn[];\n error: { code: string; message: string } | null;\n send: (message: unknown) => void;\n clearTurns: () => void;\n}\n\nexport function useAgentWebSocket(options: UseAgentWebSocketOptions): UseAgentWebSocketReturn {\n const {\n url,\n autoReconnect = true,\n reconnectDelay = 1000,\n maxReconnectAttempts = 5,\n onComplete,\n onTurnsChanged,\n onError,\n } = options;\n\n const [status, setStatus] = useState<ConnectionStatus>('disconnected');\n const [turns, setTurns] = useState<Turn[]>([]);\n const [error, setError] = useState<{ code: string; message: string } | null>(null);\n\n const wsRef = useRef<WebSocket | null>(null);\n const reconnectAttemptsRef = useRef(0);\n const reconnectTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const shouldReconnectRef = useRef(false);\n const isCompletedRef = useRef(false);\n\n const onCompleteRef = useRef(onComplete);\n const onErrorRef = useRef(onError);\n const onTurnsChangedRef = useRef(onTurnsChanged);\n useEffect(() => { onCompleteRef.current = onComplete; }, [onComplete]);\n useEffect(() => { onErrorRef.current = onError; }, [onError]);\n useEffect(() => { onTurnsChangedRef.current = onTurnsChanged; }, [onTurnsChanged]);\n\n const closeSocket = useCallback(() => {\n if (reconnectTimeoutRef.current !== null) {\n clearTimeout(reconnectTimeoutRef.current);\n reconnectTimeoutRef.current = null;\n }\n if (wsRef.current) {\n wsRef.current.onclose = null;\n wsRef.current.onerror = null;\n wsRef.current.onmessage = null;\n wsRef.current.close();\n wsRef.current = null;\n }\n }, []);\n\n const openSocket = useCallback((wsUrl: string) => {\n closeSocket();\n setStatus('connecting');\n reconnectAttemptsRef.current = 0;\n\n const ws = new WebSocket(wsUrl);\n wsRef.current = ws;\n\n ws.onopen = () => {\n // status set by connection:ready message\n };\n\n ws.onmessage = (event) => {\n try {\n const data = JSON.parse(event.data as string) as ServerMessage;\n\n switch (data.type) {\n case 'conversation:snapshot': {\n const { completedTurns, activeTurns } = data.payload;\n const incoming = [...completedTurns, ...activeTurns].sort((a, b) => a.sequence - b.sequence);\n isCompletedRef.current = false;\n setTurns((prev) => {\n if (prev.length === 0) { return incoming; }\n const merged = new Map<string, Turn>();\n for (const t of incoming) { merged.set(t.id, t); }\n for (const t of prev) {\n const snap = merged.get(t.id);\n if (snap && t.status === 'streaming' && snap.status === 'streaming' && t.steps.length > snap.steps.length) {\n merged.set(t.id, t);\n }\n }\n return [...merged.values()].sort((a, b) => a.sequence - b.sequence);\n });\n onTurnsChangedRef.current?.();\n break;\n }\n\n case 'turn:snapshot': {\n const { turn } = data.payload;\n isCompletedRef.current = false;\n setTurns((prev) => {\n const updated = [...prev];\n const idx = updated.findIndex((t) => t.id === turn.id);\n if (idx >= 0) {\n const existing = updated[idx]!;\n if (existing.status === 'streaming' && turn.status === 'streaming' && turn.steps.length < existing.steps.length) {\n return prev;\n }\n updated[idx] = turn;\n } else {\n const insertAt = updated.findIndex((t) => t.sequence > turn.sequence);\n if (insertAt >= 0) { updated.splice(insertAt, 0, turn); }\n else { updated.push(turn); }\n }\n return updated;\n });\n onTurnsChangedRef.current?.();\n break;\n }\n\n case 'connection:ready': {\n reconnectAttemptsRef.current = 0;\n setStatus('connected');\n break;\n }\n\n case 'run:completed': {\n const { success, summary } = data.payload;\n isCompletedRef.current = true;\n onCompleteRef.current?.(success, summary);\n break;\n }\n\n case 'error': {\n const { code, message } = data.payload;\n setError({ code, message });\n onErrorRef.current?.({ code, message });\n break;\n }\n }\n } catch (err) {\n console.error('[useAgentWebSocket] Failed to parse message:', err);\n }\n };\n\n ws.onerror = () => {\n setStatus('error');\n };\n\n ws.onclose = (event) => {\n if (\n shouldReconnectRef.current &&\n !isCompletedRef.current &&\n autoReconnect &&\n reconnectAttemptsRef.current < maxReconnectAttempts\n ) {\n reconnectAttemptsRef.current++;\n setStatus('reconnecting');\n reconnectTimeoutRef.current = setTimeout(() => {\n if (shouldReconnectRef.current) {\n openSocket(wsUrl);\n }\n }, reconnectDelay * reconnectAttemptsRef.current);\n } else {\n setStatus('disconnected');\n }\n };\n }, [autoReconnect, closeSocket, maxReconnectAttempts, reconnectDelay]);\n\n const send = useCallback((msg: unknown) => {\n if (wsRef.current?.readyState === WebSocket.OPEN) {\n wsRef.current.send(JSON.stringify(msg));\n }\n }, []);\n\n const clearTurns = useCallback(() => {\n setTurns([]);\n setError(null);\n isCompletedRef.current = false;\n }, []);\n\n useEffect(() => {\n shouldReconnectRef.current = false;\n closeSocket();\n setTurns([]);\n setError(null);\n isCompletedRef.current = false;\n\n if (url) {\n shouldReconnectRef.current = true;\n openSocket(url);\n } else {\n setStatus('disconnected');\n }\n\n return () => {\n shouldReconnectRef.current = false;\n closeSocket();\n };\n }, [url]);\n\n return {\n status,\n isConnected: status === 'connected',\n turns,\n error,\n send,\n clearTurns,\n };\n}\n\n/**\n * Build WebSocket URL for an agent session from current window location.\n * Assumes REST API is at /api/v1 on same host.\n */\nexport function buildAgentWsUrl(sessionId: string): string {\n const protocol = window.location.protocol === 'https:' ? 'wss:' : 'ws:';\n const host = window.location.host;\n return `${protocol}//${host}/api/v1/ws/plugins/agents/session/${sessionId}`;\n}\n"],"names":["Symbol","l","Object","SessionSelector","param","currentSessionId","onSessionChange","onNewChat","token","useUITheme","_useData","sessionsData","isLoading","sessions","handleSessionSelect","sessionId","session","s","UISpace","UIIcon","UISelect","undefined","onChange","v","UISpin","UITypographyText","optionRender","option","date","diffMs","diffMins","diffHours","diffDays","Date","Math","now","UITooltip","UIButton","useToken","theme","ConversationView","turns","UIFlex","turn","TurnView","_reportStep_input","_turn_metadata","_turn_metadata1","text","isStreaming","textSteps","visibleTextSteps","_s_content","_s_content1","isNoisyThinking","hasInternalProgressText","reportStep","reportAnswer","visibleSteps","hasToolSteps","answerContent","fileChanges","runId","showFileChanges","timelineStyle","step","i","StepRow","ThinkingRow","StepDot","UIMarkdownViewer","_step_content","FileChangesBlock","color","pulse","_step_task","_step_task1","content","ToolRow","formatToolName","_step_metadata","_React_useState","open","setOpen","isPending","isDone","isError","isFailed","meta","getToolMeta","input","toolLower","isRead","isWrite","path","_ref","fileName","_String_split_pop","String","_ref2","_input_command","_input_content","badge","_ref4","_ref5","offset","limit","Number","query","command","hasDiff","hasOutput","hasWriteInput","isWriteTool","canExpand","dotColor","m","todoList","onClick","CopyPath","TodoView","ToolDetails","isShell","isSearch","codePreStyle","DiffView","filePath","ext","formatOutput","outputStr","diff","lines","line","label","copied","setCopied","e","navigator","setTimeout","Set","dismissed","setDismissed","rollback","useMutateData","approve","visible","c","allApproved","pluralFiles","console","UIModalConfirm","onOk","_result_conflicts","result","change","FileChangeRow","onDismiss","prev","_change_filePath_split_pop","diffUrl","encodeURIComponent","diffData","diffLoading","diffError","opTag","UITag","TODO_STATUS_ICON","_todoList_items","completed","item","_TODO_STATUS_ICON_item_status","name","normalized","colonIdx","base","t","n","output","JSON","compareTurns","a","b","protocol","host","options","url","autoReconnect","reconnectDelay","maxReconnectAttempts","onComplete","onTurnsChanged","onError","_useState","status","setStatus","_useState1","setTurns","_useState2","error","setError","wsRef","reconnectAttemptsRef","reconnectTimeoutRef","shouldReconnectRef","isCompletedRef","onCompleteRef","onErrorRef","onTurnsChangedRef","closeSocket","openSocket","send","clearTurns","scrollContainerRef","React","_useSearchParams","searchParams","setSearchParams","setCurrentSessionId","loadedSessionId","setLoadedSessionId","task","setTask","_useState3","currentRunId","setCurrentRunId","_useState4","runStatus","setRunStatus","_useState5","optimisticUserTurns","setOptimisticUserTurns","_useState6","responseMode","setResponseMode","_useState7","tier","setTier","_useState8","enableEscalation","setEnableEscalation","_useState9","agentMode","setAgentMode","_useState10","inputFocused","setInputFocused","agentId","wsUrl","window","startRunMutation","stopMutation","sessionTurnsUrl","sessionTurnsData","turnsFetching","refetchTurns","useEffect","ws","success","summary","UIMessage","useRef","useCallback","clearTimeout","WebSocket","event","data","_data_payload","completedTurns","activeTurns","incoming","merged","Map","_iteratorError","_iteratorError1","t1","snap","updated","idx","existing","insertAt","_data_payload1","_data_payload2","code","message","err","msg","_wsRef_current","handleSessionChange","_session","handleNewChat","handleStart","userMessage","optimisticTurn","response","_instanceof","Error","handleStop","isRunning","isSwitchingSession","restTurns","wsTurns","_iteratorError2","t2","serverUserTexts","Boolean","_iteratorError3","_t_steps_find_content","t3","turnsWithThinkingLoader","lastUserTurn","loaderTurn","UICard","onFocus","onBlur","UIInputTextArea","UISwitch"],"mappings":"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"}
|
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "agentPlugin",
|
|
3
|
+
"name": "agentPlugin",
|
|
4
|
+
"metaData": {
|
|
5
|
+
"name": "agentPlugin",
|
|
6
|
+
"type": "app",
|
|
7
|
+
"buildInfo": {
|
|
8
|
+
"buildVersion": "0.1.0",
|
|
9
|
+
"buildName": "@kb-labs/agent-cli"
|
|
10
|
+
},
|
|
11
|
+
"remoteEntry": {
|
|
12
|
+
"name": "remoteEntry.js",
|
|
13
|
+
"path": "",
|
|
14
|
+
"type": "global"
|
|
15
|
+
},
|
|
16
|
+
"types": {
|
|
17
|
+
"path": "",
|
|
18
|
+
"name": "",
|
|
19
|
+
"zip": "@mf-types.zip",
|
|
20
|
+
"api": "@mf-types.d.ts"
|
|
21
|
+
},
|
|
22
|
+
"globalName": "agentPlugin",
|
|
23
|
+
"pluginVersion": "0.8.12",
|
|
24
|
+
"prefetchInterface": false,
|
|
25
|
+
"publicPath": "auto"
|
|
26
|
+
},
|
|
27
|
+
"shared": [
|
|
28
|
+
{
|
|
29
|
+
"id": "agentPlugin:@kb-labs/studio-event-bus",
|
|
30
|
+
"name": "@kb-labs/studio-event-bus",
|
|
31
|
+
"version": "0.1.0",
|
|
32
|
+
"singleton": true,
|
|
33
|
+
"requiredVersion": "^0.1.0",
|
|
34
|
+
"assets": {
|
|
35
|
+
"js": {
|
|
36
|
+
"async": [
|
|
37
|
+
"694.js"
|
|
38
|
+
],
|
|
39
|
+
"sync": [
|
|
40
|
+
"331.js",
|
|
41
|
+
"712.js"
|
|
42
|
+
]
|
|
43
|
+
},
|
|
44
|
+
"css": {
|
|
45
|
+
"async": [],
|
|
46
|
+
"sync": []
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
"id": "agentPlugin:@kb-labs/studio-hooks",
|
|
52
|
+
"name": "@kb-labs/studio-hooks",
|
|
53
|
+
"version": "0.1.0",
|
|
54
|
+
"singleton": true,
|
|
55
|
+
"requiredVersion": "^0.1.0",
|
|
56
|
+
"assets": {
|
|
57
|
+
"js": {
|
|
58
|
+
"async": [
|
|
59
|
+
"694.js",
|
|
60
|
+
"406.js",
|
|
61
|
+
"455.js",
|
|
62
|
+
"983.js",
|
|
63
|
+
"220.js",
|
|
64
|
+
"331.js",
|
|
65
|
+
"527.js",
|
|
66
|
+
"957.js"
|
|
67
|
+
],
|
|
68
|
+
"sync": [
|
|
69
|
+
"403.js"
|
|
70
|
+
]
|
|
71
|
+
},
|
|
72
|
+
"css": {
|
|
73
|
+
"async": [],
|
|
74
|
+
"sync": []
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
"id": "agentPlugin:@kb-labs/studio-ui-core",
|
|
80
|
+
"name": "@kb-labs/studio-ui-core",
|
|
81
|
+
"version": "0.1.0",
|
|
82
|
+
"singleton": true,
|
|
83
|
+
"requiredVersion": "^0.1.0",
|
|
84
|
+
"assets": {
|
|
85
|
+
"js": {
|
|
86
|
+
"async": [],
|
|
87
|
+
"sync": [
|
|
88
|
+
"957.js"
|
|
89
|
+
]
|
|
90
|
+
},
|
|
91
|
+
"css": {
|
|
92
|
+
"async": [],
|
|
93
|
+
"sync": []
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
"id": "agentPlugin:@kb-labs/studio-ui-kit",
|
|
99
|
+
"name": "@kb-labs/studio-ui-kit",
|
|
100
|
+
"version": "0.1.0",
|
|
101
|
+
"singleton": true,
|
|
102
|
+
"requiredVersion": "^0.1.0",
|
|
103
|
+
"assets": {
|
|
104
|
+
"js": {
|
|
105
|
+
"async": [
|
|
106
|
+
"694.js",
|
|
107
|
+
"406.js",
|
|
108
|
+
"455.js",
|
|
109
|
+
"220.js",
|
|
110
|
+
"957.js"
|
|
111
|
+
],
|
|
112
|
+
"sync": [
|
|
113
|
+
"482.js"
|
|
114
|
+
]
|
|
115
|
+
},
|
|
116
|
+
"css": {
|
|
117
|
+
"async": [],
|
|
118
|
+
"sync": []
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
"id": "agentPlugin:@tanstack/react-query",
|
|
124
|
+
"name": "@tanstack/react-query",
|
|
125
|
+
"version": "5.90.11",
|
|
126
|
+
"singleton": true,
|
|
127
|
+
"requiredVersion": "^5.0.0",
|
|
128
|
+
"assets": {
|
|
129
|
+
"js": {
|
|
130
|
+
"async": [
|
|
131
|
+
"694.js"
|
|
132
|
+
],
|
|
133
|
+
"sync": [
|
|
134
|
+
"527.js"
|
|
135
|
+
]
|
|
136
|
+
},
|
|
137
|
+
"css": {
|
|
138
|
+
"async": [],
|
|
139
|
+
"sync": []
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
},
|
|
143
|
+
{
|
|
144
|
+
"id": "agentPlugin:antd",
|
|
145
|
+
"name": "antd",
|
|
146
|
+
"version": "5.29.1",
|
|
147
|
+
"singleton": true,
|
|
148
|
+
"requiredVersion": "^5.21.0",
|
|
149
|
+
"assets": {
|
|
150
|
+
"js": {
|
|
151
|
+
"async": [
|
|
152
|
+
"694.js",
|
|
153
|
+
"455.js"
|
|
154
|
+
],
|
|
155
|
+
"sync": [
|
|
156
|
+
"220.js"
|
|
157
|
+
]
|
|
158
|
+
},
|
|
159
|
+
"css": {
|
|
160
|
+
"async": [],
|
|
161
|
+
"sync": []
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
},
|
|
165
|
+
{
|
|
166
|
+
"id": "agentPlugin:react-dom",
|
|
167
|
+
"name": "react-dom",
|
|
168
|
+
"version": "18.3.1",
|
|
169
|
+
"singleton": true,
|
|
170
|
+
"requiredVersion": "^18.3.0",
|
|
171
|
+
"assets": {
|
|
172
|
+
"js": {
|
|
173
|
+
"async": [
|
|
174
|
+
"694.js"
|
|
175
|
+
],
|
|
176
|
+
"sync": [
|
|
177
|
+
"455.js"
|
|
178
|
+
]
|
|
179
|
+
},
|
|
180
|
+
"css": {
|
|
181
|
+
"async": [],
|
|
182
|
+
"sync": []
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
},
|
|
186
|
+
{
|
|
187
|
+
"id": "agentPlugin:react-router-dom",
|
|
188
|
+
"name": "react-router-dom",
|
|
189
|
+
"version": "7.9.6",
|
|
190
|
+
"singleton": true,
|
|
191
|
+
"requiredVersion": "^7.0.0",
|
|
192
|
+
"assets": {
|
|
193
|
+
"js": {
|
|
194
|
+
"async": [
|
|
195
|
+
"694.js",
|
|
196
|
+
"455.js"
|
|
197
|
+
],
|
|
198
|
+
"sync": [
|
|
199
|
+
"406.js"
|
|
200
|
+
]
|
|
201
|
+
},
|
|
202
|
+
"css": {
|
|
203
|
+
"async": [],
|
|
204
|
+
"sync": []
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
},
|
|
208
|
+
{
|
|
209
|
+
"id": "agentPlugin:react",
|
|
210
|
+
"name": "react",
|
|
211
|
+
"version": "18.3.1",
|
|
212
|
+
"singleton": true,
|
|
213
|
+
"requiredVersion": "^18.3.0",
|
|
214
|
+
"assets": {
|
|
215
|
+
"js": {
|
|
216
|
+
"async": [],
|
|
217
|
+
"sync": [
|
|
218
|
+
"694.js"
|
|
219
|
+
]
|
|
220
|
+
},
|
|
221
|
+
"css": {
|
|
222
|
+
"async": [],
|
|
223
|
+
"sync": []
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
],
|
|
228
|
+
"remotes": [],
|
|
229
|
+
"exposes": [
|
|
230
|
+
{
|
|
231
|
+
"id": "agentPlugin:AgentsPage",
|
|
232
|
+
"name": "AgentsPage",
|
|
233
|
+
"assets": {
|
|
234
|
+
"js": {
|
|
235
|
+
"sync": [
|
|
236
|
+
"__federation_expose_AgentsPage.js"
|
|
237
|
+
],
|
|
238
|
+
"async": [
|
|
239
|
+
"694.js",
|
|
240
|
+
"406.js",
|
|
241
|
+
"455.js",
|
|
242
|
+
"983.js",
|
|
243
|
+
"915.js",
|
|
244
|
+
"482.js",
|
|
245
|
+
"957.js",
|
|
246
|
+
"403.js",
|
|
247
|
+
"331.js",
|
|
248
|
+
"527.js",
|
|
249
|
+
"220.js"
|
|
250
|
+
]
|
|
251
|
+
},
|
|
252
|
+
"css": {
|
|
253
|
+
"sync": [],
|
|
254
|
+
"async": []
|
|
255
|
+
}
|
|
256
|
+
},
|
|
257
|
+
"path": "./AgentsPage"
|
|
258
|
+
}
|
|
259
|
+
]
|
|
260
|
+
}
|