@truefoundry/trueforge-ui 0.3.0-rc.2 → 0.3.0-rc.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/CHANGELOG.md +63 -0
- package/README.md +18 -10
- package/dist/{AgentCodeSnippets-637HQUXD.js → AgentCodeSnippets-U6KQWVBJ.js} +38 -23
- package/dist/AgentCodeSnippets-U6KQWVBJ.js.map +1 -0
- package/dist/AgentMetricChart-3D6FUFO6.js +15 -0
- package/dist/{AgentOverview-3FJ5EE6N.js → AgentOverview-RLJ6HZCN.js} +7 -7
- package/dist/{AgentSessionEventTimeline-VELWUYPR.js → AgentSessionEventTimeline-CDXRRUZQ.js} +8 -8
- package/dist/{AgentSessionEventTimeline-VELWUYPR.js.map → AgentSessionEventTimeline-CDXRRUZQ.js.map} +1 -1
- package/dist/{AgentSessionEventTimelineChart-CUKETHWM.js → AgentSessionEventTimelineChart-S2WX6ZEA.js} +12 -12
- package/dist/AgentSessionEventTimelineChart-S2WX6ZEA.js.map +1 -0
- package/dist/{AgentSessions-T7MOGOTZ.js → AgentSessions-UI3L7XY2.js} +72 -24
- package/dist/AgentSessions-UI3L7XY2.js.map +1 -0
- package/dist/{ConnectorSettings-ESZ2RSRG.js → ConnectorSettings-OIGAC2HU.js} +156 -116
- package/dist/ConnectorSettings-OIGAC2HU.js.map +1 -0
- package/dist/{DockLayout-NLFNU6F2.js → DockLayout-J5BRKMJZ.js} +10 -10
- package/dist/{DrawerLayout-PR3SMKA6.js → DrawerLayout-65YHGHIF.js} +13 -11
- package/dist/DrawerLayout-65YHGHIF.js.map +1 -0
- package/dist/{ModelSettings-LYW64IRR.js → ModelSettings-VP6WCMGT.js} +10 -10
- package/dist/{ModelSettings-LYW64IRR.js.map → ModelSettings-VP6WCMGT.js.map} +1 -1
- package/dist/OpenUiFenceBlock-UTDCTNTM.js +9 -0
- package/dist/{SandboxSettings-DF64LHYI.js → SandboxSettings-GTZT7LD6.js} +9 -9
- package/dist/SchedulesPage-ARWU7BZF.js +15 -0
- package/dist/{SettingsBuilder-LSXK2VN4.js → SettingsBuilder-A4BPYIFZ.js} +8 -8
- package/dist/{ShellRouteSync-B22IAV2W.js → ShellRouteSync-SSLGM35F.js} +157 -22
- package/dist/ShellRouteSync-SSLGM35F.js.map +1 -0
- package/dist/{SidebarLayout-XW6LXB7R.js → SidebarLayout-MFDOGAVJ.js} +74 -53
- package/dist/SidebarLayout-MFDOGAVJ.js.map +1 -0
- package/dist/{SkillSettings-64VXUO6J.js → SkillSettings-WQPUQ5TE.js} +18 -13
- package/dist/SkillSettings-WQPUQ5TE.js.map +1 -0
- package/dist/{TrueForgeUIWithRouter-3TSLV22Q.js → TrueForgeUIWithRouter-5CDICMCE.js} +9 -9
- package/dist/{WidgetLayout-Q5P7PYSJ.js → WidgetLayout-HE7E4UL5.js} +10 -10
- package/dist/{chunk-SQGT43Z3.js → chunk-2BDTG544.js} +21 -4
- package/dist/chunk-2BDTG544.js.map +1 -0
- package/dist/{chunk-YQO2NMJ3.js → chunk-2OKGEU6X.js} +4425 -2982
- package/dist/chunk-2OKGEU6X.js.map +1 -0
- package/dist/{chunk-FQK2XVVE.js → chunk-6CFZHEYH.js} +225 -72
- package/dist/chunk-6CFZHEYH.js.map +1 -0
- package/dist/{chunk-QC42MLAK.js → chunk-7AAO4UDQ.js} +4 -3
- package/dist/chunk-7AAO4UDQ.js.map +1 -0
- package/dist/chunk-E4GVP6PM.js +195 -0
- package/dist/chunk-E4GVP6PM.js.map +1 -0
- package/dist/{chunk-LGRHHFHN.js → chunk-F7ZAQIRE.js} +166 -45
- package/dist/chunk-F7ZAQIRE.js.map +1 -0
- package/dist/{chunk-VJ7BZGAF.js → chunk-GTTMLDCI.js} +2 -2
- package/dist/{chunk-5I2COQNL.js → chunk-IOPHQEUY.js} +13 -11
- package/dist/chunk-IOPHQEUY.js.map +1 -0
- package/dist/{chunk-G2TUAD65.js → chunk-KCYBMKQL.js} +235 -108
- package/dist/chunk-KCYBMKQL.js.map +1 -0
- package/dist/{chunk-H6WTY5PM.js → chunk-MAA7U4RF.js} +17 -227
- package/dist/chunk-MAA7U4RF.js.map +1 -0
- package/dist/{chunk-GXYAOAK5.js → chunk-MJULWIPI.js} +224 -162
- package/dist/chunk-MJULWIPI.js.map +1 -0
- package/dist/chunk-P7J2ABEP.js +587 -0
- package/dist/chunk-P7J2ABEP.js.map +1 -0
- package/dist/{chunk-VUMGMGKZ.js → chunk-TGKQRK3S.js} +52 -8
- package/dist/chunk-TGKQRK3S.js.map +1 -0
- package/dist/{chunk-I3AL54MA.js → chunk-VXKNS7FH.js} +28 -24
- package/dist/chunk-VXKNS7FH.js.map +1 -0
- package/dist/chunk-XO3FYN2W.js +517 -0
- package/dist/chunk-XO3FYN2W.js.map +1 -0
- package/dist/{createTrueFoundryServer-CmZnBh_l.d.ts → createTrueFoundryServer-B_FYhSdn.d.ts} +8 -5
- package/dist/index.d.ts +300 -89
- package/dist/index.js +65 -488
- package/dist/index.js.map +1 -1
- package/dist/plugins/trueforge-agent-server-adapter/index.d.ts +44 -13
- package/dist/plugins/trueforge-agent-server-adapter/index.js +73 -37
- package/dist/plugins/trueforge-agent-server-adapter/index.js.map +1 -1
- package/dist/styles.css +1 -1
- package/package.json +3 -3
- package/dist/AgentCodeSnippets-637HQUXD.js.map +0 -1
- package/dist/AgentMetricChart-4FYECRIN.js +0 -15
- package/dist/AgentSessionEventTimelineChart-CUKETHWM.js.map +0 -1
- package/dist/AgentSessions-T7MOGOTZ.js.map +0 -1
- package/dist/ConnectorSettings-ESZ2RSRG.js.map +0 -1
- package/dist/DrawerLayout-PR3SMKA6.js.map +0 -1
- package/dist/OpenUiFenceBlock-JEPNPJ7U.js +0 -9
- package/dist/SchedulesPage-WQU4H25F.js +0 -15
- package/dist/ShellRouteSync-B22IAV2W.js.map +0 -1
- package/dist/SidebarLayout-XW6LXB7R.js.map +0 -1
- package/dist/SkillSettings-64VXUO6J.js.map +0 -1
- package/dist/chunk-5I2COQNL.js.map +0 -1
- package/dist/chunk-BWHOZFIV.js +0 -587
- package/dist/chunk-BWHOZFIV.js.map +0 -1
- package/dist/chunk-FQK2XVVE.js.map +0 -1
- package/dist/chunk-G2TUAD65.js.map +0 -1
- package/dist/chunk-GXYAOAK5.js.map +0 -1
- package/dist/chunk-H6WTY5PM.js.map +0 -1
- package/dist/chunk-I3AL54MA.js.map +0 -1
- package/dist/chunk-LGRHHFHN.js.map +0 -1
- package/dist/chunk-NHHSZB5N.js +0 -74
- package/dist/chunk-NHHSZB5N.js.map +0 -1
- package/dist/chunk-QC42MLAK.js.map +0 -1
- package/dist/chunk-SFZNIO6U.js +0 -18
- package/dist/chunk-SFZNIO6U.js.map +0 -1
- package/dist/chunk-SQGT43Z3.js.map +0 -1
- package/dist/chunk-VUMGMGKZ.js.map +0 -1
- package/dist/chunk-YQO2NMJ3.js.map +0 -1
- /package/dist/{AgentMetricChart-4FYECRIN.js.map → AgentMetricChart-3D6FUFO6.js.map} +0 -0
- /package/dist/{AgentOverview-3FJ5EE6N.js.map → AgentOverview-RLJ6HZCN.js.map} +0 -0
- /package/dist/{DockLayout-NLFNU6F2.js.map → DockLayout-J5BRKMJZ.js.map} +0 -0
- /package/dist/{OpenUiFenceBlock-JEPNPJ7U.js.map → OpenUiFenceBlock-UTDCTNTM.js.map} +0 -0
- /package/dist/{SandboxSettings-DF64LHYI.js.map → SandboxSettings-GTZT7LD6.js.map} +0 -0
- /package/dist/{SchedulesPage-WQU4H25F.js.map → SchedulesPage-ARWU7BZF.js.map} +0 -0
- /package/dist/{SettingsBuilder-LSXK2VN4.js.map → SettingsBuilder-A4BPYIFZ.js.map} +0 -0
- /package/dist/{TrueForgeUIWithRouter-3TSLV22Q.js.map → TrueForgeUIWithRouter-5CDICMCE.js.map} +0 -0
- /package/dist/{WidgetLayout-Q5P7PYSJ.js.map → WidgetLayout-HE7E4UL5.js.map} +0 -0
- /package/dist/{chunk-VJ7BZGAF.js.map → chunk-GTTMLDCI.js.map} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/plugins/trueforge-agent-server-adapter/client.ts","../../../src/plugins/trueforge-agent-server-adapter/agentMetricsServer.ts","../../../src/plugins/trueforge-agent-server-adapter/toUiTurnState.ts","../../../src/plugins/trueforge-agent-server-adapter/chatServer.ts","../../../src/plugins/trueforge-agent-server-adapter/agentSessionsServer.ts","../../../src/plugins/trueforge-agent-server-adapter/catalogs/connectorCatalog.ts","../../../src/plugins/trueforge-agent-server-adapter/lists.ts","../../../src/plugins/trueforge-agent-server-adapter/builderServer.ts","../../../src/plugins/trueforge-agent-server-adapter/catalogs/modelProviderCatalog.ts","../../../src/plugins/trueforge-agent-server-adapter/catalogs/sandboxProviderCatalog.ts","../../../src/plugins/trueforge-agent-server-adapter/catalogs/skillCatalog.ts","../../../src/plugins/trueforge-agent-server-adapter/schedules/scheduleServer.ts","../../../src/plugins/trueforge-agent-server-adapter/index.ts"],"sourcesContent":["/**\n * TrueForge HTTP client for the Harness adapter.\n * Auth is host-owned: pass `token` (Bearer) and/or a custom `fetch` (e.g. cookie + OIDC).\n */\nimport { TrueForge } from '@truefoundry/trueforge-sdk';\n\nexport interface CreateTrueForgeClientOptions {\n baseUrl?: string;\n /** SDK Bearer token (`Authorization: Bearer …`). */\n token?: string;\n fetch?: typeof fetch;\n}\n\nconst DEFAULT_BASE_URL = '/';\n\n/**\n * SDK passthrough `fetch` only attaches Bearer when `baseUrl` and the request URL\n * are absolute same-origin URLs. Relative defaults like `/` fail that check, so\n * absolutize against the page origin in the browser.\n */\nexport function resolveTrueForgeBaseUrl(baseUrl: string): string {\n if (/^https?:\\/\\//i.test(baseUrl)) return baseUrl;\n const origin = globalThis.location?.origin;\n if (typeof origin === 'string' && origin.length > 0 && origin !== 'null') {\n return new URL(baseUrl, origin).href;\n }\n return baseUrl;\n}\n\nexport function createTrueForgeClient(options: CreateTrueForgeClientOptions = {}): TrueForge {\n return new TrueForge({\n baseUrl: resolveTrueForgeBaseUrl(options.baseUrl ?? DEFAULT_BASE_URL),\n ...(options.token === undefined ? {} : { token: options.token }),\n ...(options.fetch === undefined ? {} : { fetch: options.fetch }),\n });\n}\n\nexport function parseIsoDate(value: string): Date {\n const date = new Date(value);\n if (Number.isNaN(date.getTime())) {\n throw new Error(`Invalid ISO timestamp: ${value}`);\n }\n return date;\n}\n","import type { TrueForge, TrueForgeApi } from '@truefoundry/trueforge-sdk';\n\nimport type { AgentMetricsServer } from '../../server/types.js';\nimport { createTrueForgeClient, parseIsoDate, type CreateTrueForgeClientOptions } from './client.js';\n\nexport type CreateHarnessAgentMetricsServerOptions = CreateTrueForgeClientOptions & {\n client?: TrueForge;\n};\n\nfunction toHarnessChartName(name: string): TrueForgeApi.SessionMetricsChartName {\n if (name === 'sessions_over_time' || name === 'sessions_cost_over_time' || name === 'turns_over_time') {\n return name;\n }\n throw new Error(`Unsupported Harness metrics chart: ${name}`);\n}\n\nexport function createHarnessAgentMetricsServer(\n options: CreateHarnessAgentMetricsServerOptions = {},\n): AgentMetricsServer {\n const client = options.client ?? createTrueForgeClient(options);\n\n return {\n async getCharts() {\n const { data } = await client.internal.metrics.listCharts();\n return data.charts;\n },\n async getMeters({ agentId, startTimestamp, endTimestamp }) {\n const { data } = await client.internal.metrics.getMeters({\n agentId,\n startTimestamp: parseIsoDate(startTimestamp),\n endTimestamp: parseIsoDate(endTimestamp),\n });\n return data.meters;\n },\n async getChartData({ agentId, startTimestamp, endTimestamp, chartName }) {\n const { data } = await client.internal.metrics.getChartData({\n agentId,\n startTimestamp: parseIsoDate(startTimestamp),\n endTimestamp: parseIsoDate(endTimestamp),\n chartName: toHarnessChartName(chartName),\n });\n return data;\n },\n };\n}\n","import type { TrueForgeApi } from '@truefoundry/trueforge-sdk';\nimport type { SessionEventItem, TurnDoneMetrics, TurnState, TurnStreamingEvent } from '../../server/types.js';\n\n/** SDK token fields are optional; the UI contract requires numbers. Keep cost for session tiles. */\nexport function toUiTurnDoneMetrics(metrics: TrueForgeApi.TurnMetrics): TurnDoneMetrics & { totalCostInUsd?: number } {\n return {\n totalInputTokens: metrics.totalInputTokens ?? 0,\n totalOutputTokens: metrics.totalOutputTokens ?? 0,\n totalTokens: metrics.totalTokens ?? 0,\n totalCacheReadTokens: metrics.totalCacheReadTokens ?? 0,\n totalCacheWriteTokens: metrics.totalCacheWriteTokens ?? 0,\n totalReasoningTokens: metrics.totalReasoningTokens ?? 0,\n ...(metrics.totalCostInUsd == null ? {} : { totalCostInUsd: metrics.totalCostInUsd }),\n };\n}\n\nexport function toUiTurnState(state: TrueForgeApi.TurnState | TrueForgeApi.TurnDoneEventState): TurnState {\n return state.status === 'running' ? { status: 'running' } : toUiTerminalTurnState(state);\n}\n\nfunction toUiTerminalTurnState(state: TrueForgeApi.TurnDoneEventState): Exclude<TurnState, { status: 'running' }> {\n switch (state.status) {\n case 'cancelled':\n return { status: 'cancelled', reason: state.reason, completedAt: state.completedAt };\n case 'error':\n return { status: 'error', message: state.message, completedAt: state.completedAt };\n case 'done':\n return {\n status: 'done',\n completedAt: state.completedAt,\n requiredActions: state.requiredActions,\n ...(state.output == null ? {} : { output: state.output }),\n ...(state.metrics == null ? {} : { metrics: toUiTurnDoneMetrics(state.metrics) }),\n };\n }\n}\n\nexport function toUiSessionEvent(event: TrueForgeApi.SessionEvent): SessionEventItem['event'] {\n if (event.type !== 'turn.done') return { ...event };\n return { ...event, state: toUiTerminalTurnState(event.state) };\n}\n\nexport function toUiStreamingEvent(event: TrueForgeApi.TurnStreamingEvent): TurnStreamingEvent {\n if (event.type !== 'turn.done') return { ...event };\n return { ...event, state: toUiTerminalTurnState(event.state) };\n}\n\nexport function toUiEventItem(item: TrueForgeApi.SessionEventItem): SessionEventItem {\n return { turnId: item.turnId, event: toUiSessionEvent(item.event) };\n}\n","/**\n * Harness `AgentChatServer` adapter for @truefoundry/trueforge-ui.\n *\n * Runtime contract: opaque mounts (`object`), flat `ListResult` (`data` +\n * `nextPageToken`), and `null` normalized to absent. Harness keys MCP mounts by\n * name and returns `null` for optional fields — the maps below bridge both.\n *\n * Skills are name refs on the wire (`Skill`).\n *\n * Session create takes `{ name }` or `{ spec }`; reads carry the\n * `reference`/`inline` discriminator, with reference rows already naming their\n * agent. The UI filters with registry `agentId`.\n */\nimport type { TrueForge, TrueForgeApi } from '@truefoundry/trueforge-sdk';\nimport { readSessionIsCreateAgent } from '../../atoms/lib/sessionCreateAgent.js';\nimport type {\n AgentChatServer,\n CreateSessionRequest,\n ListResult,\n Session,\n Turn,\n TurnInputItem,\n UserMessageContent,\n} from '../../server/types.js';\nimport { createTrueForgeClient, type CreateTrueForgeClientOptions } from './client.js';\nimport { toUiEventItem, toUiStreamingEvent, toUiTurnState } from './toUiTurnState.js';\nimport type { HarnessAgentSpec, HarnessMcpServerMount, HarnessSkillMount } from './types.js';\n\nexport type { HarnessAgentSpec, HarnessMcpServerMount, HarnessSkillMount } from './types.js';\nexport type CreateHarnessChatServerOptions = CreateTrueForgeClientOptions & {\n /** Injected client — skips creating one from options. */\n client?: TrueForge;\n};\n\n/** UI session with create-agent intent for resume chrome. */\nexport type HarnessUiSession = Session<HarnessAgentSpec> & { isCreateAgent: boolean };\n\nexport type HarnessCreateSessionRequest = CreateSessionRequest<HarnessAgentSpec> & {\n metadata?: Record<string, string>;\n};\n\nfunction toUiMcpServer(server: TrueForgeApi.McpServer): HarnessMcpServerMount {\n return server;\n}\n\nfunction toUiSkill(skill: TrueForgeApi.Skill): HarnessSkillMount {\n return { name: skill.name };\n}\n\n/** Drop UI draft `id` before admission; Harness MCP mounts are name-keyed. */\nexport function toHarnessAgentSpec(spec: HarnessAgentSpec): TrueForgeApi.AgentSpec {\n const { skills, mcpServers, ...rest } = spec;\n return {\n ...rest,\n ...(mcpServers === undefined\n ? {}\n : {\n mcpServers: mcpServers.map(server => {\n // Draft picker may round-trip mounts as `{ id, name, ... }`; strip UI-only `id`.\n if ('id' in server) {\n const { id, ...mount } = server;\n void id;\n return mount;\n }\n return server;\n }),\n }),\n ...(skills === undefined ? {} : { skills: skills.map(({ name }) => ({ name })) }),\n };\n}\n\nexport function toUiAgentSpec(spec: TrueForgeApi.AgentSpec): HarnessAgentSpec {\n const { mcpServers, skills, ...rest } = spec;\n return {\n ...rest,\n ...(mcpServers ? { mcpServers: mcpServers.map(toUiMcpServer) } : {}),\n ...(skills ? { skills: skills.map(toUiSkill) } : {}),\n };\n}\n\nfunction toUiSession(session: TrueForgeApi.Session): HarnessUiSession {\n return {\n id: session.id,\n isMutable: session.agent.type === 'inline',\n isCreateAgent: readSessionIsCreateAgent(session.metadata),\n createdAt: session.createdAt,\n updatedAt: session.updatedAt,\n ...(session.title === null ? {} : { title: session.title }),\n // `name` is a create-time snapshot, so references whose agent predates it stay\n // unlabelled; `isMutable` alone keeps them out of the composer.\n ...(session.agent.type === 'reference' && session.agent.name !== null ? { agentName: session.agent.name } : {}),\n ...(session.agent.type === 'inline' ? { agentSpec: toUiAgentSpec(session.agent.spec) } : {}),\n };\n}\n\nfunction createSessionMetadata(request: HarnessCreateSessionRequest): Record<string, string> | undefined {\n if (request.metadata === undefined) return undefined;\n return request.metadata;\n}\n\n/** Spread drops the interface identity, which is what makes the SDK's index-signature part type accept it. */\nfunction toUiContent(content: TrueForgeApi.UserMessageContent): UserMessageContent {\n return typeof content === 'string' ? content : content.map(part => ({ ...part }));\n}\n\nfunction toUiInput(input: TrueForgeApi.TurnInputItem[]): TurnInputItem[] {\n return input.map(item => (item.type === 'user.message' ? { ...item, content: toUiContent(item.content) } : item));\n}\n\nfunction toUiTurn(turn: TrueForgeApi.Turn): Turn {\n const { previousTurnId, input, state, ...rest } = turn;\n return {\n ...rest,\n state: toUiTurnState(state),\n ...(previousTurnId === null ? {} : { previousTurnId }),\n ...(input === undefined ? {} : { input: toUiInput(input) }),\n };\n}\n\nexport interface HarnessPageSource<T> {\n data: T[];\n response: { pagination: TrueForgeApi.TokenPagination };\n}\n\nexport function toListResult<TSource, TResult>(\n page: HarnessPageSource<TSource>,\n map: (item: TSource) => TResult,\n): ListResult<TResult> {\n const data = page.data.map(map);\n const token = page.response.pagination.nextPageToken;\n return {\n data,\n ...(token === undefined ? {} : { nextPageToken: token }),\n };\n}\n\nfunction sequenceNumber(id: string | undefined, fallback: number): number {\n if (id === undefined) return fallback;\n const parsed = Number(id);\n return Number.isSafeInteger(parsed) && parsed >= 0 ? parsed : fallback;\n}\n\nfunction toHarnessContent(content: UserMessageContent): TrueForgeApi.UserMessageContent {\n if (typeof content === 'string') return content;\n return content.map(part => {\n if (part.type === 'text') return part;\n const { name, data } = part;\n if (typeof name !== 'string' || typeof data !== 'string') {\n throw new Error('File attachment must carry a string `name` and a data-URI `data`');\n }\n return { type: 'file', name, data };\n });\n}\n\nfunction toHarnessInput(input: TurnInputItem[]): TrueForgeApi.TurnInputItem[] {\n return input.map(item =>\n item.type === 'user.message' ? { ...item, content: toHarnessContent(item.content) } : item,\n );\n}\n\nexport function createHarnessChatServer(\n options: CreateHarnessChatServerOptions = {},\n): AgentChatServer<HarnessAgentSpec, HarnessUiSession, HarnessCreateSessionRequest> {\n const client = options.client ?? createTrueForgeClient(options);\n return {\n // The sandbox is resolved server-side from the turn, so `sandboxId` is accepted for parity\n // with hosts that address sandboxes directly and deliberately not forwarded.\n async downloadSandboxFile({ sessionId, turnId, path }) {\n const response = await client.sessions.downloadSandboxFile(sessionId, turnId, { path });\n return response.blob();\n },\n\n async createSession(request) {\n const metadata = createSessionMetadata(request);\n if (request.agentName !== undefined && request.agentName.length > 0) {\n const created = await client.sessions.create({\n agent: { name: request.agentName },\n ...(metadata === undefined ? {} : { metadata }),\n });\n return toUiSession(created.data);\n }\n if (request.agentSpec !== undefined) {\n const created = await client.sessions.create({\n agent: { spec: toHarnessAgentSpec(request.agentSpec) },\n ...(metadata === undefined ? {} : { metadata }),\n });\n return toUiSession(created.data);\n }\n throw new Error('createSession requires agentName or agentSpec');\n },\n\n async listSessions(request = {}) {\n const page = await client.sessions.list({\n ...(request.limit === undefined ? {} : { limit: request.limit }),\n ...(request.order === undefined ? {} : { order: request.order }),\n ...(request.pageToken === undefined ? {} : { pageToken: request.pageToken }),\n ...(request.agentId === undefined || request.agentId.length === 0 ? {} : { agentId: request.agentId }),\n });\n return toListResult(page, toUiSession);\n },\n\n async getSession({ sessionId }) {\n const response = await client.sessions.get(sessionId);\n return toUiSession(response.data);\n },\n\n async deleteSession({ sessionId }) {\n await client.sessions.delete(sessionId);\n },\n\n async updateSession({ sessionId, agentSpec }) {\n // Named (reference) sessions reject agent updates server-side.\n const response = await client.sessions.update(sessionId, {\n ...(agentSpec === undefined ? {} : { agent: { spec: toHarnessAgentSpec(agentSpec) } }),\n });\n return toUiSession(response.data);\n },\n\n async *createTurn({\n sessionId,\n input,\n previousTurnId,\n }: {\n sessionId: string;\n input?: TurnInputItem[];\n previousTurnId?: string;\n }) {\n const stream = await client.sessions.createTurnStream(sessionId, {\n ...(input === undefined ? {} : { input: toHarnessInput(input) }),\n ...(previousTurnId === undefined ? {} : { previousTurnId }),\n });\n let fallbackSequence = 0;\n for await (const item of stream.withMetadata()) {\n yield {\n sequenceNumber: sequenceNumber(item.id, fallbackSequence),\n event: toUiStreamingEvent(item.data),\n };\n fallbackSequence += 1;\n }\n },\n\n /** Resume a live turn; omitted/0 `afterSequenceNumber` replays from the start. */\n async *subscribeToTurn({\n sessionId,\n turnId,\n afterSequenceNumber,\n }: {\n sessionId: string;\n turnId: string;\n afterSequenceNumber?: number;\n }) {\n const stream = await client.sessions.subscribeToTurn(sessionId, turnId, {\n ...(afterSequenceNumber === undefined ? {} : { afterSequenceNumber }),\n });\n let fallbackSequence = 0;\n for await (const item of stream.withMetadata()) {\n yield {\n sequenceNumber: sequenceNumber(item.id, fallbackSequence),\n event: toUiStreamingEvent(item.data),\n };\n fallbackSequence += 1;\n }\n },\n\n async cancelSession({ sessionId }) {\n await client.sessions.cancel(sessionId);\n },\n\n async listTurns({ sessionId, limit, pageToken }) {\n const page = await client.sessions.listTurns(sessionId, {\n ...(limit === undefined ? {} : { limit }),\n ...(pageToken === undefined ? {} : { pageToken }),\n });\n return toListResult(page, toUiTurn);\n },\n\n async getTurn({ sessionId, turnId }) {\n const response = await client.sessions.getTurn(sessionId, turnId);\n return toUiTurn(response.data);\n },\n\n async listEvents({ sessionId, pageToken, lastTurnId, limit }) {\n const page = await client.sessions.listEvents(sessionId, {\n ...(pageToken === undefined ? {} : { pageToken }),\n ...(lastTurnId === undefined ? {} : { lastTurnId }),\n ...(limit === undefined ? {} : { limit }),\n });\n return toListResult(page, toUiEventItem);\n },\n };\n}\n","import type { TrueForge, TrueForgeApi } from '@truefoundry/trueforge-sdk';\nimport { readSessionIsCreateAgent } from '../../atoms/lib/sessionCreateAgent.js';\nimport type { AgentSessionsServer, SessionListEntry } from '../../server/types.js';\nimport { toListResult, toUiAgentSpec } from './chatServer.js';\nimport { createTrueForgeClient, parseIsoDate, type CreateTrueForgeClientOptions } from './client.js';\nimport { toUiEventItem } from './toUiTurnState.js';\nimport type { HarnessAgentSpec } from './types.js';\n\nexport type CreateHarnessAgentSessionsServerOptions = CreateTrueForgeClientOptions & {\n client?: TrueForge;\n};\n\nexport type HarnessSessionListEntry = SessionListEntry<HarnessAgentSpec> & {\n isCreateAgent: boolean;\n isMutable: boolean;\n};\n\nfunction toSessionListEntry(session: TrueForgeApi.Session): HarnessSessionListEntry {\n return {\n id: session.id,\n createdAt: session.createdAt,\n updatedAt: session.updatedAt,\n lastActivityAt: session.updatedAt,\n isCreateAgent: readSessionIsCreateAgent(session.metadata),\n isMutable: session.agent.type === 'inline',\n metrics: {\n totalTurns: session.metrics.totalTurns,\n totalCostInUsd: session.metrics.totalCostInUsd ?? 0, // TODO: fix this.\n totalDurationMs: session.metrics.totalDurationMs,\n },\n ...(session.title === null ? {} : { title: session.title }),\n ...(session.agent.type === 'reference' && session.agent.name !== null ? { agentName: session.agent.name } : {}),\n ...(session.agent.type === 'inline' ? { agentSpec: toUiAgentSpec(session.agent.spec) } : {}),\n };\n}\n\nexport function createHarnessAgentSessionsServer(\n options: CreateHarnessAgentSessionsServerOptions = {},\n): AgentSessionsServer<HarnessAgentSpec> {\n const client = options.client ?? createTrueForgeClient(options);\n\n return {\n async getAgent({ agentId }) {\n const { data } = await client.agents.get(agentId);\n return {\n agentId: data.id,\n name: data.name,\n agentSpec: toUiAgentSpec(data.manifest),\n };\n },\n async getCodeSnippets({ agentId }) {\n const { data } = await client.internal.agents.getCodeSnippets(agentId);\n return data.snippets;\n },\n async listSessions(requestParams = {}) {\n const page = await client.sessions.list({\n ...(requestParams.limit === undefined ? {} : { limit: requestParams.limit }),\n ...(requestParams.order === undefined ? {} : { order: requestParams.order }),\n ...(requestParams.pageToken === undefined ? {} : { pageToken: requestParams.pageToken }),\n ...(requestParams.startTimestamp === undefined\n ? {}\n : { startTimestamp: parseIsoDate(requestParams.startTimestamp) }),\n ...(requestParams.endTimestamp === undefined ? {} : { endTimestamp: parseIsoDate(requestParams.endTimestamp) }),\n ...(requestParams.agentId === undefined || requestParams.agentId.length === 0\n ? {}\n : { agentId: requestParams.agentId }),\n });\n return toListResult(page, toSessionListEntry);\n },\n async listSessionEvents({ sessionId, pageToken, limit }) {\n const page = await client.sessions.listEvents(sessionId, {\n ...(pageToken === undefined ? {} : { pageToken }),\n ...(limit === undefined ? {} : { limit }),\n });\n return toListResult(page, toUiEventItem);\n },\n };\n}\n","/**\n * Maps trueforge-ui connector-settings calls onto Harness\n *\n * UI: `dcr` / `header` / `none`, connector `id`.\n * Harness: `dcr` / `header` / omitted auth, resource `name`.\n */\nimport type { TrueForge, TrueForgeApi } from '@truefoundry/trueforge-sdk';\nimport type {\n ConnectorAuth,\n ConnectorAuthPublic,\n ConnectorBase,\n ConnectorCatalogEntry,\n ConnectorCatalogServer,\n CreateConnectorRequest,\n ToolBase,\n UpdateConnectorRequest,\n} from '../../../server/types.js';\n\nexport type UiConnectorAuth = ConnectorAuth;\nexport type UiConnectorAuthPublic = ConnectorAuthPublic;\nexport type UiConnector = ConnectorBase;\nexport type UiConnectorCatalogEntry = ConnectorCatalogEntry;\n\nconst DEFAULT_API_KEY_HEADER = 'Authorization';\n\nexport function toUiAuthPublic(auth: TrueForgeApi.McpServerManifestAuth | undefined): UiConnectorAuthPublic {\n if (auth === undefined) {\n return { type: 'none' };\n }\n if (auth.type === 'dcr') {\n return { type: 'dcr' };\n }\n const headerName = Object.keys(auth.headers)[0];\n return {\n type: 'header',\n ...(headerName === undefined ? {} : { headerName }),\n };\n}\n\nexport function toHarnessAuth(auth: ConnectorAuth): TrueForgeApi.McpServerManifestAuth | undefined {\n if (auth.type === 'none') {\n return undefined;\n }\n if (auth.type === 'dcr') {\n return { type: 'dcr' };\n }\n const apiKey = auth.apiKey?.trim();\n if (apiKey === undefined || apiKey === '') {\n throw new Error('API key is required for header-authenticated MCP servers');\n }\n const trimmedHeader = auth.headerName?.trim();\n const headerName = trimmedHeader !== undefined && trimmedHeader !== '' ? trimmedHeader : DEFAULT_API_KEY_HEADER;\n return { type: 'header', headers: { [headerName]: apiKey } };\n}\n\nexport function toUiCatalogEntry(server: TrueForgeApi.CatalogMcpServer): UiConnectorCatalogEntry {\n return {\n id: server.name,\n name: server.name,\n url: server.url,\n description: server.description,\n ...(server.logo === undefined ? {} : { logo: server.logo }),\n auth: toUiAuthPublic(server.auth),\n };\n}\n\nexport function toUiTool(tool: Record<string, unknown>): ToolBase {\n const name = typeof tool.name === 'string' && tool.name !== '' ? tool.name : 'tool';\n const description = typeof tool.description === 'string' ? tool.description : '';\n return { id: name, name, description };\n}\n\nexport function toUiConnector(server: TrueForgeApi.ConfiguredMcpServer): UiConnector {\n const auth = toUiAuthPublic(server.manifest.auth);\n return {\n id: server.name,\n name: server.name,\n description: server.manifest.description,\n url: server.manifest.url,\n auth,\n requiresAuth: server.authStatus.status === 'auth_required',\n authenticated: server.authStatus.status !== 'auth_required',\n };\n}\n\nexport function toUiConnectorFromReadEntry(server: TrueForgeApi.AvailableMcpServer): UiConnector {\n const auth: UiConnectorAuthPublic = server.auth?.type ? { type: server.auth.type } : { type: 'none' };\n return {\n id: server.name,\n name: server.name,\n description: server.url,\n url: server.url,\n auth,\n requiresAuth: server.authStatus.status === 'auth_required',\n authenticated: server.authStatus.status !== 'auth_required',\n };\n}\n\nexport function toHarnessManifest(req: {\n name: string;\n url: string;\n auth: ConnectorAuth;\n description?: string;\n}): TrueForgeApi.McpServerManifest {\n const auth = toHarnessAuth(req.auth);\n const trimmed = req.description?.trim();\n return {\n type: 'remote',\n name: req.name,\n url: req.url,\n description: trimmed !== undefined && trimmed !== '' ? trimmed : `${req.name} MCP server`,\n ...(auth === undefined ? {} : { auth }),\n };\n}\n\n/** Settings connector port for `createTrueFoundryServer`. Delete omitted; disconnect unsupported. */\nexport function createConnectorCatalog(\n client: TrueForge,\n): ConnectorCatalogServer<\n ToolBase,\n UiConnectorAuth,\n UiConnectorAuthPublic,\n UiConnector,\n UiConnectorCatalogEntry,\n CreateConnectorRequest,\n UpdateConnectorRequest\n> {\n async function getConfigured(name: string): Promise<TrueForgeApi.ConfiguredMcpServer> {\n const listed = await client.settings.mcpServers.list();\n const existing = listed.data.find(server => server.name === name);\n if (existing === undefined) {\n throw new Error(`MCP server \"${name}\" not found`);\n }\n return existing;\n }\n\n async function resolveWriteAuth(req: { id?: string; auth: ConnectorAuth }): Promise<ConnectorAuth> {\n if (req.auth.type !== 'header') {\n return req.auth;\n }\n const apiKey = req.auth.apiKey?.trim();\n if (apiKey !== undefined && apiKey !== '') {\n return req.auth;\n }\n if (req.id === undefined) {\n throw new Error('API key is required for header-authenticated MCP servers');\n }\n const existing = await getConfigured(req.id);\n if (existing.manifest.auth?.type !== 'header') {\n throw new Error(`MCP server \"${req.id}\" has no stored header credentials to reuse`);\n }\n const preferredHeader = req.auth.headerName?.trim();\n const storedHeaderName = Object.keys(existing.manifest.auth.headers)[0];\n const headerName =\n preferredHeader !== undefined && preferredHeader !== ''\n ? preferredHeader\n : (storedHeaderName ?? DEFAULT_API_KEY_HEADER);\n const stored = existing.manifest.auth.headers[headerName] ?? Object.values(existing.manifest.auth.headers)[0];\n if (stored === undefined) {\n throw new Error(`MCP server \"${req.id}\" has no stored header credentials to reuse`);\n }\n return { type: 'header', apiKey: stored, headerName };\n }\n\n return {\n getConnectorCatalog: async () => {\n const body = await client.catalogs.mcpServers.list();\n return body.data.map(toUiCatalogEntry);\n },\n getConnector: async req => {\n const body = await client.settings.mcpServers.get(req.id);\n return toUiConnector(body.data);\n },\n listConnectors: async req => {\n const body = await client.settings.mcpServers.list();\n const connectors = body.data.map(toUiConnector);\n const query = req?.query?.trim().toLowerCase();\n if (query === undefined || query === '') {\n return connectors;\n }\n return connectors.filter(\n connector =>\n connector.name.toLowerCase().includes(query) ||\n connector.description.toLowerCase().includes(query) ||\n connector.url.toLowerCase().includes(query),\n );\n },\n getToolsByConnectorId: async ({ id }) => {\n const body = await client.mcpServers.listTools(id);\n return body.data.map(toUiTool);\n },\n createConnector: async req => {\n const auth = await resolveWriteAuth({ auth: req.auth });\n const body = await client.settings.mcpServers.create({\n manifest: toHarnessManifest({\n name: req.name,\n url: req.url,\n auth,\n description: req.description,\n }),\n });\n return toUiConnector(body.data);\n },\n updateConnector: async req => {\n const auth = await resolveWriteAuth({ id: req.id, auth: req.auth });\n const body = await client.settings.mcpServers.createOrUpdate({\n manifest: toHarnessManifest({\n name: req.id,\n url: req.url,\n auth,\n description: req.description,\n }),\n });\n return toUiConnector(body.data);\n },\n authenticateConnector: async req => {\n const result = await client.mcpServers.authorize(\n req.id,\n req.returnTo === undefined ? {} : { returnTo: req.returnTo },\n );\n return { status: result.status, authorization_endpoint: result.authorizationUrl };\n },\n disconnectConnector: async req => {\n const existing = await getConfigured(req.id);\n if (existing.manifest.auth?.type !== 'dcr') {\n throw new Error(`Disconnect is only supported for OAuth MCP servers`);\n }\n const body = await client.mcpServers.deleteAuthorization(req.id);\n return toUiConnector(body.data);\n },\n };\n}\n","/**\n * Configured-resource list helpers for composer pickers and host boot.\n * Not the settings catalog ports (`catalogs/*`).\n */\nimport type { TrueForge, TrueForgeApi } from '@truefoundry/trueforge-sdk';\n\nimport type { ListResult, PageParams } from '../../server/types.js';\nimport { drainListPages } from '../../utils/drainListPages.js';\nimport { toListResult } from './chatServer.js';\n\nexport async function listModels(client: TrueForge): Promise<TrueForgeApi.AvailableModel[]> {\n const body = await client.models.list();\n return body.data;\n}\n\nexport async function listConfiguredMcpServersPage(\n client: TrueForge,\n req: PageParams = {},\n): Promise<ListResult<TrueForgeApi.AvailableMcpServer>> {\n const page = await client.mcpServers.list({\n ...(req.limit === undefined ? {} : { limit: req.limit }),\n ...(req.pageToken === undefined ? {} : { pageToken: req.pageToken }),\n });\n return toListResult(page, server => server);\n}\n\n/** Drain every MCP page (full catalog for non-picker callers). */\nexport async function listConfiguredMcpServers(client: TrueForge): Promise<TrueForgeApi.AvailableMcpServer[]> {\n return drainListPages({\n fetchPage: pageToken => listConfiguredMcpServersPage(client, { pageToken }),\n });\n}\n\nexport async function listSkills(client: TrueForge): Promise<TrueForgeApi.AvailableSkill[]> {\n const body = await client.skills.list();\n return body.data;\n}\n\nexport async function getCapabilities(client: TrueForge): Promise<TrueForgeApi.CapabilitiesData> {\n const body = await client.server.getCapabilities();\n return body.data;\n}\n","/**\n * AgentBuilderServer callbacks for createTrueFoundryServer.\n * Composer pickers + agent library backed by the Harness agents registry.\n */\nimport type { TrueForge, TrueForgeApi } from '@truefoundry/trueforge-sdk';\nimport type {\n AgentBuilderServer,\n AgentLibraryEntry,\n ModelSelection,\n PageParams,\n SearchAgentsParams,\n} from '../../server/types.js';\nimport { toUiConnectorFromReadEntry, toUiTool } from './catalogs/connectorCatalog.js';\nimport { toHarnessAgentSpec, toUiAgentSpec } from './chatServer.js';\nimport { createTrueForgeClient, type CreateTrueForgeClientOptions } from './client.js';\nimport { listConfiguredMcpServers, listConfiguredMcpServersPage, listSkills } from './lists.js';\nimport type { HarnessAgentSpec } from './types.js';\n\nexport type CreateHarnessBuilderServerOptions = CreateTrueForgeClientOptions & {\n client?: TrueForge;\n};\n\n/** Well-known catalog entries key logos by `type` (same as configured provider resource name). */\nexport function modelProviderLogosByName(\n catalog: readonly TrueForgeApi.CatalogModelProvider[],\n): ReadonlyMap<string, string> {\n const logos = new Map<string, string>();\n for (const entry of catalog) {\n if (entry.type === 'custom' || entry.logo === undefined) {\n continue;\n }\n logos.set(entry.type, entry.logo);\n }\n return logos;\n}\n\n/** Map harness model rows onto the UI picker shape (nested provider + properties + optional logo). */\nexport function toModelSelection({\n model,\n logo,\n}: {\n model: TrueForgeApi.AvailableModel;\n logo?: string;\n}): ModelSelection {\n const { contextLength, maxOutputTokens, reasoningEfforts } = model.properties;\n return {\n id: model.modelId,\n name: model.name,\n provider: {\n name: model.provider.name,\n ...(logo === undefined ? {} : { logo }),\n },\n properties: {\n ...(contextLength === undefined ? {} : { contextLength }),\n ...(maxOutputTokens === undefined ? {} : { maxOutputTokens }),\n ...(reasoningEfforts === undefined ? {} : { reasoningEfforts: [...reasoningEfforts] }),\n },\n };\n}\n\nfunction toLibraryEntry(agent: TrueForgeApi.Agent): AgentLibraryEntry {\n return {\n name: agent.name,\n agentId: agent.id,\n agentSpec: toUiAgentSpec(agent.manifest),\n };\n}\n\nexport function createHarnessBuilderServer(\n options: CreateHarnessBuilderServerOptions = {},\n): AgentBuilderServer<HarnessAgentSpec> {\n const client = options.client ?? createTrueForgeClient(options);\n\n return {\n getCapabilities: () => client.server.getCapabilities(),\n getModels: async () => {\n // Catalog logos are optional UI enrichment — a catalog failure must not blank the picker.\n const [modelsBody, catalogEntries] = await Promise.all([\n client.models.list(),\n client.catalogs.modelProviders.list().then(\n body => body.data,\n () => [],\n ),\n ]);\n const logosByName = modelProviderLogosByName(catalogEntries);\n return modelsBody.data.map(model => {\n const logo = logosByName.get(model.provider.name);\n return toModelSelection(logo === undefined ? { model } : { model, logo });\n });\n },\n // Skills require a configured sandbox provider; keep the picker empty when skill capability is off.\n getSkills: async () => {\n const skills = await listSkills(client);\n return skills.map(skill => ({ id: skill.name, name: skill.name, description: skill.description }));\n },\n getMcp: async () => (await listConfiguredMcpServers(client)).map(toUiConnectorFromReadEntry),\n listMcp: async (req?: PageParams) => {\n const page = await listConfiguredMcpServersPage(client, req ?? {});\n return {\n data: page.data.map(toUiConnectorFromReadEntry),\n ...(page.nextPageToken === undefined ? {} : { nextPageToken: page.nextPageToken }),\n };\n },\n getMcpTools: async ({ connectorId }: { connectorId: string }) => {\n const body = await client.mcpServers.listTools(connectorId);\n return body.data.flatMap(tool =>\n typeof tool.name === 'string' && tool.name.trim() !== '' ? [toUiTool(tool)] : [],\n );\n },\n\n async searchAgents(req?: SearchAgentsParams) {\n const { data } = await client.agents.list();\n const query = req?.query?.trim().toLowerCase();\n const filtered =\n query === undefined || query === '' ? data : data.filter(agent => agent.name.toLowerCase().includes(query));\n const offset = req?.offset ?? 0;\n const limit = req?.limit ?? 50;\n return filtered.slice(offset, offset + limit).map(toLibraryEntry);\n },\n\n async saveAgent({ agentName, agentSpec, intent }) {\n const manifest = toHarnessAgentSpec(agentSpec);\n if (intent === 'update') {\n const { data } = await client.agents.list();\n const existing = data.find(agent => agent.name === agentName);\n if (!existing) {\n return {};\n }\n await client.agents.update(existing.id, { manifest });\n return { agentId: existing.id };\n }\n const created = await client.agents.create({ name: agentName, manifest });\n return { agentId: created.data.id };\n },\n\n async deleteAgent({ agentName }) {\n const { data } = await client.agents.list();\n const existing = data.find(agent => agent.name === agentName);\n if (!existing) return;\n await client.agents.delete(existing.id);\n },\n };\n}\n","/**\n * Maps trueforge-ui model-settings calls onto Harness\n *\n * UI: flat `apiKey` / model `id`. Harness: `auth.apiKey` / `modelId`.\n * Provider `id` in the UI is the Harness resource `name`.\n */\nimport type { TrueForge } from '@truefoundry/trueforge-sdk';\nimport { TrueForgeApi } from '@truefoundry/trueforge-sdk';\nimport type {\n CreateModelProviderRequest,\n ModelCatalogServer,\n ModelEntry,\n ModelProviderBase,\n ModelProviderCatalogEntry,\n UpdateModelProviderRequest,\n} from '../../../server/types.js';\n\n/** Custom-form rows omit properties; catalog rows round-trip them. */\nexport type UiModelEntry = ModelEntry & {\n properties?: TrueForgeApi.ModelProperties;\n};\n\nexport type UiModelProvider = ModelProviderBase<UiModelEntry>;\nexport type UiModelProviderCatalogEntry = ModelProviderCatalogEntry<UiModelEntry>;\n\nexport function toUiModelEntry(model: TrueForgeApi.ConfiguredModel): UiModelEntry {\n return {\n id: model.modelId,\n name: model.name,\n properties: model.properties,\n };\n}\n\nexport function toHarnessModelEntry(model: UiModelEntry): TrueForgeApi.ConfiguredModel {\n return {\n modelId: model.id,\n name: model.name,\n properties: model.properties ?? {},\n };\n}\n\nexport function toUiModelProvider(provider: TrueForgeApi.ConfiguredModelProvider): UiModelProvider {\n const { name, manifest } = provider;\n return {\n id: name,\n type: manifest.type,\n name,\n ...(manifest.baseUrl === undefined ? {} : { baseUrl: manifest.baseUrl }),\n models: manifest.models.map(toUiModelEntry),\n };\n}\n\nexport function toUiCatalogModelProviderEntry(\n provider: TrueForgeApi.CatalogModelProvider,\n): UiModelProviderCatalogEntry {\n if (provider.type === 'custom') {\n return {\n type: provider.type,\n name: provider.type,\n supportedReasoningEfforts: provider.supportedReasoningEfforts,\n models: [],\n };\n }\n return {\n type: provider.type,\n name: provider.type,\n ...(provider.logo === undefined ? {} : { logo: provider.logo }),\n models: provider.models.map(toUiModelEntry),\n };\n}\n\nconst PROVIDER_TYPES: readonly string[] = [...Object.values(TrueForgeApi.CatalogWellKnownModelProviderType), 'custom'];\n\nfunction isProviderType(type: string): type is Exclude<TrueForgeApi.ModelProviderManifest['type'], 'truefoundry'> {\n return PROVIDER_TYPES.includes(type);\n}\n\nexport function toHarnessModelProvider(req: {\n type: string;\n name: string;\n apiKey: string;\n baseUrl?: string;\n models: UiModelEntry[];\n}): TrueForgeApi.ModelProviderManifest {\n const models = req.models.map(toHarnessModelEntry);\n if (!isProviderType(req.type)) {\n throw new Error(`Unsupported model provider type: ${req.type}`);\n }\n const baseUrl = req.baseUrl?.trim() === '' ? undefined : req.baseUrl;\n // Only `custom` is named by its caller; the API names the rest after their type.\n if (req.type === 'custom') {\n if (baseUrl === undefined) {\n throw new Error(`Model providers of type \"${req.type}\" require a base URL`);\n }\n // Blank form field is \"\"; custom must omit auth on the wire (empty string is rejected).\n return {\n type: req.type,\n name: req.name,\n models,\n baseUrl,\n ...(req.apiKey === '' ? {} : { auth: { apiKey: req.apiKey } }),\n };\n }\n const auth = { apiKey: req.apiKey };\n if (baseUrl !== undefined) {\n return { type: req.type, auth, models, baseUrl };\n }\n return { type: req.type, auth, models };\n}\n\n/** Settings model-catalog port for `createTrueFoundryServer`. Delete is omitted (no BE route). */\nexport function createModelProviderCatalog(\n client: TrueForge,\n): ModelCatalogServer<\n UiModelEntry,\n UiModelProvider,\n UiModelProviderCatalogEntry,\n CreateModelProviderRequest<UiModelEntry>,\n UpdateModelProviderRequest<UiModelEntry>\n> {\n async function resolveApiKey(req: { id?: string; type?: string; apiKey: string }): Promise<string> {\n const trimmed = req.apiKey.trim();\n if (trimmed !== '') {\n return trimmed;\n }\n if (req.id === undefined) {\n // Create with a blank key: allow only for custom; \"\" is mapped to omitted auth below.\n if (req.type === 'custom') {\n return '';\n }\n throw new Error('API key is required');\n }\n // Update with empty means keep the stored key.\n const listed = await client.settings.modelProviders.list();\n const existing = listed.data.find(provider => provider.name === req.id);\n if (existing === undefined) {\n throw new Error(`Model provider \"${req.id}\" not found`);\n }\n return existing.manifest.auth?.apiKey ?? '';\n }\n\n return {\n getModelProviderCatalog: async () => {\n const body = await client.catalogs.modelProviders.list();\n return body.data.map(toUiCatalogModelProviderEntry);\n },\n listModelProviders: async () => {\n const body = await client.settings.modelProviders.list();\n return body.data.map(toUiModelProvider);\n },\n createModelProvider: async req => {\n const apiKey = await resolveApiKey({ type: req.type, apiKey: req.apiKey });\n const body = await client.settings.modelProviders.create({\n manifest: toHarnessModelProvider({\n type: req.type,\n name: req.name,\n apiKey,\n ...(req.baseUrl === undefined ? {} : { baseUrl: req.baseUrl }),\n models: req.models,\n }),\n });\n return toUiModelProvider(body.data);\n },\n updateModelProvider: async req => {\n // UI sends apiKey: \"\" when only models change; reuse the stored key.\n const apiKey = await resolveApiKey({ id: req.id, type: req.type, apiKey: req.apiKey });\n const body = await client.settings.modelProviders.createOrUpdate({\n manifest: toHarnessModelProvider({\n type: req.type,\n name: req.id,\n apiKey,\n ...(req.baseUrl === undefined ? {} : { baseUrl: req.baseUrl }),\n models: req.models,\n }),\n });\n return toUiModelProvider(body.data);\n },\n };\n}\n","/**\n * Maps trueforge-ui sandbox-settings calls onto Harness\n * `/api/v1/settings/sandbox-providers` (singleton upsert, no delete).\n *\n * UI: multi-row providers with `id` / `catalogId` / `name` / flat `apiKey`.\n * Harness: one Daytona provider per tenant; catalog YAML has no name — synthetic\n * identity uses `type` (`daytona`) as id/catalogId and display name `Daytona`.\n */\nimport type { TrueForge } from '@truefoundry/trueforge-sdk';\nimport { TrueForgeApi } from '@truefoundry/trueforge-sdk';\nimport type {\n SandboxCatalogServer,\n SandboxProviderBase,\n SandboxProviderCatalogEntry,\n SandboxProviderConfig,\n SandboxProviderListEntry,\n} from '../../../server/types.js';\n\nexport type UiSandboxProvider = SandboxProviderBase;\nexport type UiSandboxProviderCatalogEntry = SandboxProviderCatalogEntry;\nexport type UiSandboxProviderListEntry = SandboxProviderListEntry;\n\nconst DAYTONA_TYPE = 'daytona';\nconst DAYTONA_DISPLAY_NAME = 'Daytona';\n\nfunction displayNameForType(type: string): string {\n if (type === DAYTONA_TYPE) {\n return DAYTONA_DISPLAY_NAME;\n }\n return type;\n}\n\nexport function configFromHarness(\n provider: TrueForgeApi.CatalogSandboxProvider | TrueForgeApi.SandboxProviderManifest,\n): SandboxProviderConfig {\n return {\n execTimeoutMs: provider.execTimeoutMs,\n autoStopIntervalInMinutes: provider.autoStopIntervalInMinutes,\n autoArchiveIntervalInMinutes: provider.autoArchiveIntervalInMinutes,\n autoDeleteIntervalInMinutes: provider.autoDeleteIntervalInMinutes,\n };\n}\n\nexport function toUiCatalogEntry(provider: TrueForgeApi.CatalogSandboxProvider): UiSandboxProviderCatalogEntry {\n return {\n id: provider.type,\n name: displayNameForType(provider.type),\n type: provider.type,\n ...configFromHarness(provider),\n };\n}\n\nexport function toUiSandboxProvider(provider: TrueForgeApi.SandboxProviderManifest): UiSandboxProvider {\n return {\n id: provider.type,\n name: displayNameForType(provider.type),\n catalogId: provider.type,\n isConnected: true,\n ...configFromHarness(provider),\n };\n}\n\nexport function toUiSandboxProviderListEntry(\n response: TrueForgeApi.GetSandboxProviderResponse['data'],\n): UiSandboxProviderListEntry {\n return {\n data: toUiSandboxProvider(response.manifest),\n snapshotSyncStatus: {\n status: response.status,\n ...(response.statusReason ? { statusReason: response.statusReason } : {}),\n },\n };\n}\n\nexport function filterUiSandboxProviders({\n providers,\n query,\n}: {\n providers: UiSandboxProviderListEntry[];\n query?: string;\n}): UiSandboxProviderListEntry[] {\n const normalizedQuery = query?.trim().toLowerCase();\n if (normalizedQuery === undefined || normalizedQuery === '') {\n return providers;\n }\n return providers.filter(\n provider =>\n provider.data.name.toLowerCase().includes(normalizedQuery) ||\n provider.data.id.toLowerCase().includes(normalizedQuery),\n );\n}\n\nexport function toHarnessManifest(\n req: {\n type: string;\n apiKey: string;\n } & SandboxProviderConfig,\n): TrueForgeApi.SandboxProviderManifest {\n if (req.type !== DAYTONA_TYPE) {\n throw new Error(`Unsupported sandbox provider type: ${req.type}`);\n }\n return {\n type: DAYTONA_TYPE,\n execTimeoutMs: req.execTimeoutMs,\n autoStopIntervalInMinutes: req.autoStopIntervalInMinutes,\n autoArchiveIntervalInMinutes: req.autoArchiveIntervalInMinutes,\n autoDeleteIntervalInMinutes: req.autoDeleteIntervalInMinutes,\n auth: { apiKey: req.apiKey },\n };\n}\n\n/** Settings sandbox-catalog port for `createTrueFoundryServer`. Delete omitted (no BE route). */\nexport function createSandboxProviderCatalog(client: TrueForge): SandboxCatalogServer {\n async function resolveApiKey(apiKey: string | undefined): Promise<string> {\n const trimmed = apiKey?.trim();\n if (trimmed !== undefined && trimmed !== '') {\n return trimmed;\n }\n const existing = await client.settings.sandboxProviders.get();\n return existing.data.manifest.auth.apiKey;\n }\n\n return {\n getSandboxProviderCatalog: async () => {\n const body = await client.catalogs.sandboxProviders.list();\n return body.data.map(toUiCatalogEntry);\n },\n listSandboxProviders: async req => {\n let providers: UiSandboxProviderListEntry[];\n try {\n const body = await client.settings.sandboxProviders.get();\n providers = [toUiSandboxProviderListEntry(body.data)];\n } catch (err) {\n if (err instanceof TrueForgeApi.NotFoundError) {\n providers = [];\n } else {\n throw err;\n }\n }\n return filterUiSandboxProviders({ providers, query: req?.query });\n },\n createSandboxProvider: async req => {\n const body = await client.settings.sandboxProviders.createOrUpdate({\n manifest: toHarnessManifest({\n type: req.type,\n apiKey: req.apiKey,\n execTimeoutMs: req.execTimeoutMs,\n autoStopIntervalInMinutes: req.autoStopIntervalInMinutes,\n autoArchiveIntervalInMinutes: req.autoArchiveIntervalInMinutes,\n autoDeleteIntervalInMinutes: req.autoDeleteIntervalInMinutes,\n }),\n });\n return toUiSandboxProvider(body.data.manifest);\n },\n updateSandboxProvider: async req => {\n const apiKey = await resolveApiKey(req.apiKey);\n const body = await client.settings.sandboxProviders.createOrUpdate({\n manifest: toHarnessManifest({\n type: DAYTONA_TYPE,\n apiKey,\n execTimeoutMs: req.execTimeoutMs,\n autoStopIntervalInMinutes: req.autoStopIntervalInMinutes,\n autoArchiveIntervalInMinutes: req.autoArchiveIntervalInMinutes,\n autoDeleteIntervalInMinutes: req.autoDeleteIntervalInMinutes,\n }),\n });\n return toUiSandboxProvider(body.data.manifest);\n },\n };\n}\n","/**\n * Maps trueforge-ui skill-settings calls onto Harness\n *\n * UI: `repoURL` / skill `id` / optional `catalogId`.\n * Harness: `url` / resource `name` (no separate id or catalogId on wire).\n * For now UI `id = name`; registry link uses `catalogId = name` when the\n * configured skill name matches a catalog preset.\n */\nimport type { TrueForge, TrueForgeApi } from '@truefoundry/trueforge-sdk';\nimport type { DefinedSkill, SkillCatalogEntry, SkillCatalogServer, SkillConfigBase } from '../../../server/types.js';\n\nexport type UiSkill = DefinedSkill;\nexport type UiSkillCatalogEntry = SkillCatalogEntry;\n\nexport function toUiCatalogEntry(skill: TrueForgeApi.CatalogSkill): UiSkillCatalogEntry {\n return {\n id: skill.name,\n name: skill.name,\n description: skill.description,\n repoURL: skill.url,\n path: skill.path ?? '',\n ref: skill.ref,\n };\n}\n\nexport function toHarnessManifest(req: SkillConfigBase): TrueForgeApi.SkillManifest {\n const path = req.path.trim();\n return {\n type: 'git',\n name: req.name,\n url: req.repoURL,\n ...(path === '' ? {} : { path }),\n ref: req.ref,\n description: req.description,\n };\n}\n\nexport function toUiSkill(skill: TrueForgeApi.ConfiguredSkill, catalogNames: ReadonlySet<string>): UiSkill {\n const base = {\n id: skill.name,\n name: skill.name,\n description: skill.manifest.description,\n };\n if (catalogNames.has(skill.name)) {\n return { ...base, catalogId: skill.name };\n }\n return base;\n}\n\n/** Settings skill-catalog port for `createTrueFoundryServer`. Delete omitted (no BE route). */\nexport function createSkillCatalog(client: TrueForge): SkillCatalogServer<UiSkill> {\n return {\n getSkillCatalog: async () => {\n const body = await client.catalogs.skills.list();\n return body.data.map(toUiCatalogEntry);\n },\n listSkills: async req => {\n const [listed, catalog] = await Promise.all([client.settings.skills.list(), client.catalogs.skills.list()]);\n const catalogNames = new Set(catalog.data.map(entry => entry.name));\n const skills = listed.data.map(skill => toUiSkill(skill, catalogNames));\n const query = req?.query?.trim().toLowerCase();\n if (query === undefined || query === '') {\n return skills;\n }\n return skills.filter(\n skill => skill.name.toLowerCase().includes(query) || skill.description.toLowerCase().includes(query),\n );\n },\n createSkill: async req => {\n const body = await client.settings.skills.create({ manifest: toHarnessManifest(req) });\n const catalogId = 'catalogId' in req ? req.catalogId : undefined;\n if (catalogId !== undefined) {\n return {\n id: body.data.name,\n name: body.data.name,\n description: body.data.manifest.description,\n catalogId,\n };\n }\n return {\n id: body.data.name,\n name: body.data.name,\n description: body.data.manifest.description,\n };\n },\n };\n}\n","/**\n * Harness ScheduleServer adapter — maps flat runtime DTOs to SDK wire (manifest + agentName).\n */\nimport type { TrueForge, TrueForgeApi } from '@truefoundry/trueforge-sdk';\nimport type {\n CreateScheduleRequest,\n CreateScheduleRunRequest,\n ListResult,\n ListSchedulesParams,\n Schedule,\n ScheduleRun,\n ScheduleServer,\n ScheduleStatus,\n UpdateScheduleRequest,\n} from '../../../server/types.js';\nimport { toListResult } from '../chatServer.js';\n\n/** Matches API PAGE_LIMIT for schedules list. */\nconst SCHEDULES_PAGE_LIMIT = 25;\n\ntype AgentIndex = {\n idToName: ReadonlyMap<string, string>;\n nameToId: ReadonlyMap<string, string>;\n};\n\nasync function loadAgentIndex(client: TrueForge): Promise<AgentIndex> {\n const { data } = await client.agents.list();\n const idToName = new Map<string, string>();\n const nameToId = new Map<string, string>();\n for (const agent of data) {\n idToName.set(agent.id, agent.name);\n nameToId.set(agent.name, agent.id);\n }\n return { idToName, nameToId };\n}\n\nfunction resolveAgentName(agentId: string, index: AgentIndex): string {\n const byId = index.idToName.get(agentId);\n if (byId != null) return byId;\n if (index.nameToId.has(agentId)) return agentId;\n throw new Error(`Unknown agent: ${agentId}`);\n}\n\nfunction collectAgentIds(req?: ListSchedulesParams): string[] {\n const ids: string[] = [];\n if (req?.agentIds != null) {\n for (const id of req.agentIds) {\n if (id !== '') ids.push(id);\n }\n }\n if (req?.agentId != null && req.agentId !== '') ids.push(req.agentId);\n return [...new Set(ids)];\n}\n\nfunction wireStatus(manifest: TrueForgeApi.ScheduleManifest): ScheduleStatus {\n return manifest.status ?? 'active';\n}\n\nfunction toUiSchedule(wire: TrueForgeApi.Schedule, index: AgentIndex): Schedule {\n const agentId = index.nameToId.get(wire.agentName) ?? wire.agentName;\n return {\n id: wire.id,\n name: wire.name,\n agentId,\n agentName: wire.agentName,\n task: wire.manifest.task,\n cron: wire.manifest.cron,\n timezone: wire.manifest.timezone ?? 'UTC',\n status: wireStatus(wire.manifest),\n lastRunAt: null,\n };\n}\n\nfunction toWireManifest(input: {\n task: string;\n cron: string;\n timezone?: string;\n status?: ScheduleStatus;\n}): TrueForgeApi.ScheduleManifest {\n return {\n task: input.task,\n cron: input.cron,\n timezone: input.timezone ?? 'UTC',\n status: input.status ?? 'active',\n };\n}\n\nfunction toIsoInstant(value: Date | string): string {\n if (value instanceof Date) return value.toISOString();\n return value;\n}\n\nfunction toUiScheduleRun(wire: TrueForgeApi.ScheduleRun): ScheduleRun {\n return {\n id: wire.id,\n scheduleId: wire.scheduleId,\n name: wire.name,\n scheduledFor: toIsoInstant(wire.scheduledFor),\n status: wire.status,\n triggeredAt: wire.triggeredAt == null ? null : toIsoInstant(wire.triggeredAt),\n triggeredBy: wire.createdBySubject.subjectDisplayName || wire.createdBySubject.subjectId,\n };\n}\n\nexport function createScheduleServer(options: { client: TrueForge }): ScheduleServer {\n const { client } = options;\n\n return {\n async listSchedules(req?: ListSchedulesParams): Promise<ListResult<Schedule>> {\n const index = await loadAgentIndex(client);\n const agentIds = collectAgentIds(req);\n const agentNames = agentIds.length === 0 ? undefined : agentIds.map(id => resolveAgentName(id, index)).join(',');\n const limit = Math.min(Math.max(req?.limit ?? SCHEDULES_PAGE_LIMIT, 1), SCHEDULES_PAGE_LIMIT);\n const page = await client.schedules.list({\n limit,\n ...(req?.pageToken === undefined || req.pageToken === '' ? {} : { pageToken: req.pageToken }),\n ...(agentNames === undefined ? {} : { agentNames }),\n });\n return toListResult(page, row => toUiSchedule(row, index));\n },\n\n async getSchedule({ id }): Promise<Schedule> {\n const index = await loadAgentIndex(client);\n const { data } = await client.schedules.get(id);\n return toUiSchedule(data, index);\n },\n\n async createSchedule(req: CreateScheduleRequest): Promise<Schedule> {\n const index = await loadAgentIndex(client);\n const agentName = resolveAgentName(req.agentId, index);\n const { data } = await client.schedules.create({\n agentName,\n name: req.name,\n manifest: toWireManifest(req),\n });\n return toUiSchedule(data, index);\n },\n\n async updateSchedule(req: UpdateScheduleRequest): Promise<Schedule> {\n const index = await loadAgentIndex(client);\n const { data } = await client.schedules.update(req.id, {\n name: req.name,\n manifest: toWireManifest(req),\n });\n return toUiSchedule(data, index);\n },\n\n async deleteSchedule({ id }): Promise<void> {\n await client.schedules.delete(id);\n },\n\n async listScheduleRuns({ scheduleId }): Promise<ScheduleRun[]> {\n const { data } = await client.schedules.listRuns(scheduleId);\n return data.map(toUiScheduleRun);\n },\n\n async createScheduleRun(req: CreateScheduleRunRequest): Promise<ScheduleRun> {\n const { data } = await client.schedules.createRun({ scheduleId: req.scheduleId });\n return toUiScheduleRun(data);\n },\n };\n}\n","/**\n * Built-in Harness → AgentUIServer factory for `<TrueForgeUI server={{ type: \"trueforge\", … }} />`.\n */\nimport { createTrueFoundryServer } from '../../server/createTrueFoundryServer.js';\nimport type { CatalogServer } from '../../server/types.js';\nimport { createHarnessAgentMetricsServer } from './agentMetricsServer.js';\nimport { createHarnessAgentSessionsServer } from './agentSessionsServer.js';\nimport { createHarnessBuilderServer } from './builderServer.js';\nimport { createConnectorCatalog } from './catalogs/connectorCatalog.js';\nimport { createModelProviderCatalog } from './catalogs/modelProviderCatalog.js';\nimport { createSandboxProviderCatalog } from './catalogs/sandboxProviderCatalog.js';\nimport { createSkillCatalog } from './catalogs/skillCatalog.js';\nimport { createHarnessChatServer } from './chatServer.js';\nimport { createTrueForgeClient, type CreateTrueForgeClientOptions } from './client.js';\nimport { createScheduleServer } from './schedules/scheduleServer.js';\nimport type { HarnessAgentSpec } from './types.js';\n\nexport { createHarnessAgentMetricsServer, type CreateHarnessAgentMetricsServerOptions } from './agentMetricsServer.js';\nexport {\n createHarnessAgentSessionsServer,\n type CreateHarnessAgentSessionsServerOptions,\n} from './agentSessionsServer.js';\nexport {\n createHarnessBuilderServer,\n modelProviderLogosByName,\n toModelSelection,\n type CreateHarnessBuilderServerOptions,\n} from './builderServer.js';\nexport {\n createConnectorCatalog,\n toHarnessAuth,\n toHarnessManifest as toHarnessConnectorManifest,\n toUiConnector,\n toUiConnectorFromReadEntry,\n} from './catalogs/connectorCatalog.js';\nexport {\n createModelProviderCatalog,\n toHarnessModelProvider,\n toUiCatalogModelProviderEntry,\n toUiModelProvider,\n} from './catalogs/modelProviderCatalog.js';\nexport {\n configFromHarness,\n createSandboxProviderCatalog,\n filterUiSandboxProviders,\n toHarnessManifest as toHarnessSandboxManifest,\n toUiSandboxProvider,\n toUiSandboxProviderListEntry,\n} from './catalogs/sandboxProviderCatalog.js';\nexport { createSkillCatalog, toHarnessManifest as toHarnessSkillManifest, toUiSkill } from './catalogs/skillCatalog.js';\nexport {\n createHarnessChatServer,\n toHarnessAgentSpec,\n toUiAgentSpec,\n type CreateHarnessChatServerOptions,\n} from './chatServer.js';\nexport { createTrueForgeClient } from './client.js';\nexport type { CreateTrueForgeClientOptions } from './client.js';\nexport {\n getCapabilities,\n listConfiguredMcpServers,\n listConfiguredMcpServersPage,\n listModels,\n listSkills,\n} from './lists.js';\nexport { createScheduleServer } from './schedules/scheduleServer.js';\nexport type { HarnessAgentSpec, HarnessMcpServerMount, HarnessSkillMount } from './types.js';\n\nexport type CreateTrueForgeAgentUIServerOptions = CreateTrueForgeClientOptions & {\n /** Override the default Harness settings catalogs. */\n catalog?: CatalogServer;\n};\n\n/**\n * Compose chat + builder + agent sessions + default settings catalogs into an `AgentUIServer`.\n */\nexport function createTrueForgeAgentUIServer(options: CreateTrueForgeAgentUIServerOptions = {}) {\n const { catalog: catalogOverride, ...clientOptions } = options;\n const client = createTrueForgeClient(clientOptions);\n const catalog =\n catalogOverride ??\n ({\n modelCatalog: createModelProviderCatalog(client),\n connectorCatalog: createConnectorCatalog(client),\n skillCatalog: createSkillCatalog(client),\n sandboxCatalog: createSandboxProviderCatalog(client),\n } satisfies CatalogServer);\n\n return createTrueFoundryServer<HarnessAgentSpec>({\n chatServer: createHarnessChatServer({ client }),\n ...createHarnessBuilderServer({ client }),\n catalog,\n sessions: createHarnessAgentSessionsServer({ ...clientOptions, client }),\n metrics: createHarnessAgentMetricsServer({ ...clientOptions, client }),\n schedules: createScheduleServer({ client }),\n });\n}\n"],"mappings":"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","names":["TrueForgeApi","toUiCatalogEntry","toHarnessManifest","toUiCatalogEntry","toHarnessManifest","toUiSkill"]}
|
|
1
|
+
{"version":3,"sources":["../../../src/plugins/trueforge-agent-server-adapter/client.ts","../../../src/plugins/trueforge-agent-server-adapter/agentMetricsServer.ts","../../../src/plugins/trueforge-agent-server-adapter/toUiTurnState.ts","../../../src/plugins/trueforge-agent-server-adapter/chatServer.ts","../../../src/plugins/trueforge-agent-server-adapter/agentSessionsServer.ts","../../../src/plugins/trueforge-agent-server-adapter/catalogs/connectorCatalog.ts","../../../src/plugins/trueforge-agent-server-adapter/lists.ts","../../../src/plugins/trueforge-agent-server-adapter/builderServer.ts","../../../src/plugins/trueforge-agent-server-adapter/catalogs/modelProviderCatalog.ts","../../../src/plugins/trueforge-agent-server-adapter/catalogs/sandboxProviderCatalog.ts","../../../src/plugins/trueforge-agent-server-adapter/catalogs/skillCatalog.ts","../../../src/plugins/trueforge-agent-server-adapter/permissionsServer.ts","../../../src/plugins/trueforge-agent-server-adapter/schedules/scheduleServer.ts","../../../src/plugins/trueforge-agent-server-adapter/index.ts"],"sourcesContent":["/**\n * TrueForge HTTP client for the Harness adapter.\n * Auth is host-owned: pass `token` (Bearer) and/or a custom `fetch` (e.g. cookie + OIDC).\n */\nimport { TrueForge } from '@truefoundry/trueforge-sdk';\n\nexport interface CreateTrueForgeClientOptions {\n baseUrl?: string;\n /** SDK Bearer token (`Authorization: Bearer …`). */\n token?: string;\n fetch?: typeof fetch;\n}\n\nconst DEFAULT_BASE_URL = '/';\n\n/**\n * SDK passthrough `fetch` only attaches Bearer when `baseUrl` and the request URL\n * are absolute same-origin URLs. Relative defaults like `/` fail that check, so\n * absolutize against the page origin in the browser.\n */\nexport function resolveTrueForgeBaseUrl(baseUrl: string): string {\n if (/^https?:\\/\\//i.test(baseUrl)) return baseUrl;\n const origin = globalThis.location?.origin;\n if (typeof origin === 'string' && origin.length > 0 && origin !== 'null') {\n return new URL(baseUrl, origin).href;\n }\n return baseUrl;\n}\n\nexport function createTrueForgeClient(options: CreateTrueForgeClientOptions = {}): TrueForge {\n return new TrueForge({\n baseUrl: resolveTrueForgeBaseUrl(options.baseUrl ?? DEFAULT_BASE_URL),\n ...(options.token === undefined ? {} : { token: options.token }),\n ...(options.fetch === undefined ? {} : { fetch: options.fetch }),\n });\n}\n\nexport function parseIsoDate(value: string): Date {\n const date = new Date(value);\n if (Number.isNaN(date.getTime())) {\n throw new Error(`Invalid ISO timestamp: ${value}`);\n }\n return date;\n}\n","import type { TrueForge, TrueForgeApi } from '@truefoundry/trueforge-sdk';\n\nimport type { AgentMetricsServer } from '../../server/types.js';\nimport { createTrueForgeClient, parseIsoDate, type CreateTrueForgeClientOptions } from './client.js';\n\nexport type CreateHarnessAgentMetricsServerOptions = CreateTrueForgeClientOptions & {\n client?: TrueForge;\n};\n\nfunction toHarnessChartName(name: string): TrueForgeApi.SessionMetricsChartName {\n if (name === 'sessions_over_time' || name === 'sessions_cost_over_time' || name === 'turns_over_time') {\n return name;\n }\n throw new Error(`Unsupported Harness metrics chart: ${name}`);\n}\n\nexport function createHarnessAgentMetricsServer(\n options: CreateHarnessAgentMetricsServerOptions = {},\n): AgentMetricsServer {\n const client = options.client ?? createTrueForgeClient(options);\n\n return {\n async getCharts() {\n const { data } = await client.internal.metrics.listCharts();\n return data.charts;\n },\n async getMeters({ agentId, startTimestamp, endTimestamp }) {\n const { data } = await client.internal.metrics.getMeters({\n agentId,\n startTimestamp: parseIsoDate(startTimestamp),\n endTimestamp: parseIsoDate(endTimestamp),\n });\n return data.meters;\n },\n async getChartData({ agentId, startTimestamp, endTimestamp, chartName }) {\n const { data } = await client.internal.metrics.getChartData({\n agentId,\n startTimestamp: parseIsoDate(startTimestamp),\n endTimestamp: parseIsoDate(endTimestamp),\n chartName: toHarnessChartName(chartName),\n });\n return data;\n },\n };\n}\n","import type { TrueForgeApi } from '@truefoundry/trueforge-sdk';\nimport type { SessionEventItem, TurnDoneMetrics, TurnState, TurnStreamingEvent } from '../../server/types.js';\n\n/** SDK token fields are optional; the UI contract requires numbers. Keep cost for session tiles. */\nexport function toUiTurnDoneMetrics(metrics: TrueForgeApi.TurnMetrics): TurnDoneMetrics & { totalCostInUsd?: number } {\n return {\n totalInputTokens: metrics.totalInputTokens ?? 0,\n totalOutputTokens: metrics.totalOutputTokens ?? 0,\n totalTokens: metrics.totalTokens ?? 0,\n totalCacheReadTokens: metrics.totalCacheReadTokens ?? 0,\n totalCacheWriteTokens: metrics.totalCacheWriteTokens ?? 0,\n totalReasoningTokens: metrics.totalReasoningTokens ?? 0,\n ...(metrics.totalCostInUsd == null ? {} : { totalCostInUsd: metrics.totalCostInUsd }),\n };\n}\n\nexport function toUiTurnState(state: TrueForgeApi.TurnState | TrueForgeApi.TurnDoneEventState): TurnState {\n return state.status === 'running' ? { status: 'running' } : toUiTerminalTurnState(state);\n}\n\nfunction toUiTerminalTurnState(state: TrueForgeApi.TurnDoneEventState): Exclude<TurnState, { status: 'running' }> {\n switch (state.status) {\n case 'cancelled':\n return { status: 'cancelled', reason: state.reason, completedAt: state.completedAt };\n case 'error':\n return { status: 'error', message: state.message, completedAt: state.completedAt };\n case 'done':\n return {\n status: 'done',\n completedAt: state.completedAt,\n requiredActions: state.requiredActions,\n ...(state.output == null ? {} : { output: state.output }),\n ...(state.metrics == null ? {} : { metrics: toUiTurnDoneMetrics(state.metrics) }),\n };\n }\n}\n\nexport function toUiSessionEvent(event: TrueForgeApi.SessionEvent): SessionEventItem['event'] {\n if (event.type !== 'turn.done') return { ...event };\n return { ...event, state: toUiTerminalTurnState(event.state) };\n}\n\nexport function toUiStreamingEvent(event: TrueForgeApi.TurnStreamingEvent): TurnStreamingEvent {\n if (event.type !== 'turn.done') return { ...event };\n return { ...event, state: toUiTerminalTurnState(event.state) };\n}\n\nexport function toUiEventItem(item: TrueForgeApi.SessionEventItem): SessionEventItem {\n return { turnId: item.turnId, event: toUiSessionEvent(item.event) };\n}\n","/**\n * Harness `AgentChatServer` adapter for @truefoundry/trueforge-ui.\n *\n * Runtime contract: opaque mounts (`object`), flat `ListResult` (`data` +\n * `nextPageToken`), and `null` normalized to absent. Harness keys MCP mounts by\n * name and returns `null` for optional fields — the maps below bridge both.\n *\n * Skills are name (+ optional preload) refs on the wire (`Skill`).\n *\n * Session create takes `{ name }` or `{ spec }`; reads carry the\n * `reference`/`inline` discriminator, with reference rows already naming their\n * agent. The UI filters with registry `agentId`.\n */\nimport type { TrueForge, TrueForgeApi } from '@truefoundry/trueforge-sdk';\nimport { readSessionIsCreateAgent } from '../../atoms/lib/sessionCreateAgent.js';\nimport type {\n AgentChatServer,\n CreateSessionRequest,\n ListResult,\n Session,\n Turn,\n TurnInputItem,\n UserMessageContent,\n} from '../../server/types.js';\nimport { createTrueForgeClient, type CreateTrueForgeClientOptions } from './client.js';\nimport { toUiEventItem, toUiStreamingEvent, toUiTurnState } from './toUiTurnState.js';\nimport type { HarnessAgentSpec, HarnessMcpServerMount, HarnessSkillMount } from './types.js';\n\nexport type { HarnessAgentSpec, HarnessMcpServerMount, HarnessSkillMount } from './types.js';\nexport type CreateHarnessChatServerOptions = CreateTrueForgeClientOptions & {\n /** Injected client — skips creating one from options. */\n client?: TrueForge;\n};\n\n/** UI session with create-agent intent for resume chrome. */\nexport type HarnessUiSession = Session<HarnessAgentSpec> & { isCreateAgent: boolean };\n\nexport type HarnessCreateSessionRequest = CreateSessionRequest<HarnessAgentSpec> & {\n metadata?: Record<string, string>;\n};\n\nfunction toUiMcpServer(server: TrueForgeApi.McpServer): HarnessMcpServerMount {\n return server;\n}\n\nfunction toUiSkill(skill: TrueForgeApi.Skill): HarnessSkillMount {\n return { name: skill.name, preload: skill.preload === true };\n}\n\nfunction toHarnessSkill(skill: HarnessSkillMount): TrueForgeApi.Skill {\n // Picker `id` is AvailableSkill.name (attach key); `name` is display — see builder getSkills.\n return { name: skill.id ?? skill.name, preload: skill.preload === true };\n}\n\n/** Drop UI draft `id` before admission; Harness MCP mounts are name-keyed. */\nexport function toHarnessAgentSpec(spec: HarnessAgentSpec): TrueForgeApi.AgentSpec {\n const { skills, mcpServers, ...rest } = spec;\n return {\n ...rest,\n ...(mcpServers === undefined\n ? {}\n : {\n mcpServers: mcpServers.map(server => {\n // Draft picker may round-trip mounts as `{ id, name, ... }`; strip UI-only `id`.\n if ('id' in server) {\n const { id, ...mount } = server;\n void id;\n return mount;\n }\n return server;\n }),\n }),\n ...(skills === undefined ? {} : { skills: skills.map(toHarnessSkill) }),\n };\n}\n\nexport function toUiAgentSpec(spec: TrueForgeApi.AgentSpec): HarnessAgentSpec {\n const { mcpServers, skills, ...rest } = spec;\n return {\n ...rest,\n ...(mcpServers ? { mcpServers: mcpServers.map(toUiMcpServer) } : {}),\n ...(skills ? { skills: skills.map(toUiSkill) } : {}),\n };\n}\n\nfunction toUiSession(session: TrueForgeApi.Session): HarnessUiSession {\n return {\n id: session.id,\n isMutable: session.agent.type === 'inline',\n isCreateAgent: readSessionIsCreateAgent(session.metadata),\n createdAt: session.createdAt,\n updatedAt: session.updatedAt,\n ...(session.title === null ? {} : { title: session.title }),\n // `name` is a create-time snapshot, so references whose agent predates it stay\n // unlabelled; `isMutable` alone keeps them out of the composer.\n ...(session.agent.type === 'reference' && session.agent.name !== null ? { agentName: session.agent.name } : {}),\n ...(session.agent.type === 'inline' ? { agentSpec: toUiAgentSpec(session.agent.spec) } : {}),\n };\n}\n\nfunction createSessionMetadata(request: HarnessCreateSessionRequest): Record<string, string> | undefined {\n if (request.metadata === undefined) return undefined;\n return request.metadata;\n}\n\n/** Spread drops the interface identity, which is what makes the SDK's index-signature part type accept it. */\nfunction toUiContent(content: TrueForgeApi.UserMessageContent): UserMessageContent {\n return typeof content === 'string' ? content : content.map(part => ({ ...part }));\n}\n\nfunction toUiInput(input: TrueForgeApi.TurnInputItem[]): TurnInputItem[] {\n return input.map(item => (item.type === 'user.message' ? { ...item, content: toUiContent(item.content) } : item));\n}\n\nfunction toUiTurn(turn: TrueForgeApi.Turn): Turn {\n const { previousTurnId, input, state, ...rest } = turn;\n return {\n ...rest,\n state: toUiTurnState(state),\n ...(previousTurnId === null ? {} : { previousTurnId }),\n ...(input === undefined ? {} : { input: toUiInput(input) }),\n };\n}\n\nexport interface HarnessPageSource<T> {\n data: T[];\n response: { pagination: TrueForgeApi.TokenPagination };\n}\n\nexport function toListResult<TSource, TResult>(\n page: HarnessPageSource<TSource>,\n map: (item: TSource) => TResult,\n): ListResult<TResult> {\n const data = page.data.map(map);\n const token = page.response.pagination.nextPageToken;\n return {\n data,\n ...(token === undefined ? {} : { nextPageToken: token }),\n };\n}\n\nfunction sequenceNumber(id: string | undefined, fallback: number): number {\n if (id === undefined) return fallback;\n const parsed = Number(id);\n return Number.isSafeInteger(parsed) && parsed >= 0 ? parsed : fallback;\n}\n\nfunction toHarnessContent(content: UserMessageContent): TrueForgeApi.UserMessageContent {\n if (typeof content === 'string') return content;\n return content.map(part => {\n if (part.type === 'text') return part;\n const { name, data } = part;\n if (typeof name !== 'string' || typeof data !== 'string') {\n throw new Error('File attachment must carry a string `name` and a data-URI `data`');\n }\n return { type: 'file', name, data };\n });\n}\n\nfunction toHarnessInput(input: TurnInputItem[]): TrueForgeApi.TurnInputItem[] {\n return input.map(item =>\n item.type === 'user.message' ? { ...item, content: toHarnessContent(item.content) } : item,\n );\n}\n\nexport function createHarnessChatServer(\n options: CreateHarnessChatServerOptions = {},\n): AgentChatServer<HarnessAgentSpec, HarnessUiSession, HarnessCreateSessionRequest> {\n const client = options.client ?? createTrueForgeClient(options);\n return {\n // The sandbox is resolved server-side from the turn, so `sandboxId` is accepted for parity\n // with hosts that address sandboxes directly and deliberately not forwarded.\n async downloadSandboxFile({ sessionId, turnId, path }) {\n const response = await client.sessions.downloadSandboxFile(sessionId, turnId, { path });\n return response.blob();\n },\n\n async createSession(request) {\n const metadata = createSessionMetadata(request);\n if (request.agentName !== undefined && request.agentName.length > 0) {\n const created = await client.sessions.create({\n agent: { name: request.agentName },\n ...(metadata === undefined ? {} : { metadata }),\n });\n return toUiSession(created.data);\n }\n if (request.agentSpec !== undefined) {\n const created = await client.sessions.create({\n agent: { spec: toHarnessAgentSpec(request.agentSpec) },\n ...(metadata === undefined ? {} : { metadata }),\n });\n return toUiSession(created.data);\n }\n throw new Error('createSession requires agentName or agentSpec');\n },\n\n async listSessions(request = {}) {\n const page = await client.sessions.list({\n ...(request.limit === undefined ? {} : { limit: request.limit }),\n ...(request.order === undefined ? {} : { order: request.order }),\n ...(request.pageToken === undefined ? {} : { pageToken: request.pageToken }),\n ...(request.agentId === undefined || request.agentId.length === 0 ? {} : { agentId: request.agentId }),\n ...(request.createdByMe === undefined ? {} : { createdByMe: request.createdByMe }),\n });\n return toListResult(page, toUiSession);\n },\n\n async getSession({ sessionId }) {\n const response = await client.sessions.get(sessionId);\n return toUiSession(response.data);\n },\n\n async deleteSession({ sessionId }) {\n await client.sessions.delete(sessionId);\n },\n\n async updateSession({ sessionId, agentSpec }) {\n // Named (reference) sessions reject agent updates server-side.\n const response = await client.sessions.update(sessionId, {\n ...(agentSpec === undefined ? {} : { agent: { spec: toHarnessAgentSpec(agentSpec) } }),\n });\n return toUiSession(response.data);\n },\n\n async *createTurn({\n sessionId,\n input,\n previousTurnId,\n }: {\n sessionId: string;\n input?: TurnInputItem[];\n previousTurnId?: string;\n }) {\n const stream = await client.sessions.createTurnStream(sessionId, {\n ...(input === undefined ? {} : { input: toHarnessInput(input) }),\n ...(previousTurnId === undefined ? {} : { previousTurnId }),\n });\n let fallbackSequence = 0;\n for await (const item of stream.withMetadata()) {\n yield {\n sequenceNumber: sequenceNumber(item.id, fallbackSequence),\n event: toUiStreamingEvent(item.data),\n };\n fallbackSequence += 1;\n }\n },\n\n /** Resume a live turn; omitted/0 `afterSequenceNumber` replays from the start. */\n async *subscribeToTurn({\n sessionId,\n turnId,\n afterSequenceNumber,\n }: {\n sessionId: string;\n turnId: string;\n afterSequenceNumber?: number;\n }) {\n const stream = await client.sessions.subscribeToTurn(sessionId, turnId, {\n ...(afterSequenceNumber === undefined ? {} : { afterSequenceNumber }),\n });\n let fallbackSequence = 0;\n for await (const item of stream.withMetadata()) {\n yield {\n sequenceNumber: sequenceNumber(item.id, fallbackSequence),\n event: toUiStreamingEvent(item.data),\n };\n fallbackSequence += 1;\n }\n },\n\n async cancelSession({ sessionId }) {\n await client.sessions.cancel(sessionId);\n },\n\n async listTurns({ sessionId, limit, pageToken }) {\n const page = await client.sessions.listTurns(sessionId, {\n ...(limit === undefined ? {} : { limit }),\n ...(pageToken === undefined ? {} : { pageToken }),\n });\n return toListResult(page, toUiTurn);\n },\n\n async getTurn({ sessionId, turnId }) {\n const response = await client.sessions.getTurn(sessionId, turnId);\n return toUiTurn(response.data);\n },\n\n async listEvents({ sessionId, pageToken, lastTurnId, limit }) {\n const page = await client.sessions.listEvents(sessionId, {\n ...(pageToken === undefined ? {} : { pageToken }),\n ...(lastTurnId === undefined ? {} : { lastTurnId }),\n ...(limit === undefined ? {} : { limit }),\n });\n return toListResult(page, toUiEventItem);\n },\n };\n}\n","import type { TrueForge, TrueForgeApi } from '@truefoundry/trueforge-sdk';\nimport { readSessionIsCreateAgent } from '../../atoms/lib/sessionCreateAgent.js';\nimport type { AgentSessionsServer, SessionListEntry } from '../../server/types.js';\nimport { toListResult, toUiAgentSpec } from './chatServer.js';\nimport {\n createTrueForgeClient,\n parseIsoDate,\n resolveTrueForgeBaseUrl,\n type CreateTrueForgeClientOptions,\n} from './client.js';\nimport { toUiEventItem } from './toUiTurnState.js';\nimport type { HarnessAgentSpec } from './types.js';\n\nexport type CreateHarnessAgentSessionsServerOptions = CreateTrueForgeClientOptions & {\n client?: TrueForge;\n};\n\nexport type HarnessSessionListEntry = SessionListEntry<HarnessAgentSpec> & {\n isCreateAgent: boolean;\n isMutable: boolean;\n sourceType?: 'schedule';\n};\n\nfunction toSessionListEntry(session: TrueForgeApi.Session): HarnessSessionListEntry {\n return {\n id: session.id,\n createdAt: session.createdAt,\n updatedAt: session.updatedAt,\n lastActivityAt: session.updatedAt,\n isCreateAgent: readSessionIsCreateAgent(session.metadata),\n isMutable: session.agent.type === 'inline',\n metrics: {\n totalTurns: session.metrics.totalTurns,\n ...(session.metrics.totalCostInUsd == null ? {} : { totalCostInUsd: session.metrics.totalCostInUsd }),\n totalDurationMs: session.metrics.totalDurationMs,\n },\n ...(session.title === null ? {} : { title: session.title }),\n ...(session.agent.type === 'reference' && session.agent.name !== null ? { agentName: session.agent.name } : {}),\n ...(session.agent.type === 'inline' ? { agentSpec: toUiAgentSpec(session.agent.spec) } : {}),\n ...(session.source?.type === 'schedule' ? { sourceType: session.source.type } : {}),\n };\n}\n\nexport function createHarnessAgentSessionsServer(\n options: CreateHarnessAgentSessionsServerOptions = {},\n): AgentSessionsServer<HarnessAgentSpec> {\n const client = options.client ?? createTrueForgeClient(options);\n\n return {\n async getAgent({ agentId }) {\n const { data } = await client.agents.get(agentId);\n return {\n agentId: data.id,\n name: data.name,\n agentSpec: toUiAgentSpec(data.manifest),\n };\n },\n async getCodeSnippets({ agentId }) {\n // Snippet SDK `baseUrl` should not end with `/` (hosts often pass a trailing path slash).\n const absoluteBaseUrl = resolveTrueForgeBaseUrl(options.baseUrl ?? '/').replace(/\\/$/, '');\n const { data } = await client.internal.agents.getCodeSnippets(\n agentId,\n /^https?:\\/\\//i.test(absoluteBaseUrl) ? { baseUrl: absoluteBaseUrl } : undefined,\n );\n return data.snippets;\n },\n async listSessions(requestParams = {}) {\n const page = await client.sessions.list({\n ...(requestParams.limit === undefined ? {} : { limit: requestParams.limit }),\n ...(requestParams.order === undefined ? {} : { order: requestParams.order }),\n ...(requestParams.pageToken === undefined ? {} : { pageToken: requestParams.pageToken }),\n ...(requestParams.startTimestamp === undefined\n ? {}\n : { startTimestamp: parseIsoDate(requestParams.startTimestamp) }),\n ...(requestParams.endTimestamp === undefined ? {} : { endTimestamp: parseIsoDate(requestParams.endTimestamp) }),\n ...(requestParams.agentId === undefined || requestParams.agentId.length === 0\n ? {}\n : { agentId: requestParams.agentId }),\n ...(requestParams.createdByMe === undefined ? {} : { createdByMe: requestParams.createdByMe }),\n });\n return toListResult(page, toSessionListEntry);\n },\n async listSessionEvents({ sessionId, pageToken, limit }) {\n const page = await client.sessions.listEvents(sessionId, {\n ...(pageToken === undefined ? {} : { pageToken }),\n ...(limit === undefined ? {} : { limit }),\n });\n return toListResult(page, toUiEventItem);\n },\n };\n}\n","/**\n * Maps trueforge-ui connector-settings calls onto Harness\n *\n * UI: `dcr` / `header` / `none`, connector `id`.\n * Harness: `dcr` / `header` / omitted auth, resource `name`.\n */\nimport type { TrueForge, TrueForgeApi } from '@truefoundry/trueforge-sdk';\nimport type {\n ConnectorAuth,\n ConnectorAuthPublic,\n ConnectorBase,\n ConnectorCatalogEntry,\n ConnectorCatalogServer,\n CreateConnectorRequest,\n ToolBase,\n UpdateConnectorRequest,\n} from '../../../server/types.js';\n\nexport type UiConnectorAuth = ConnectorAuth;\nexport type UiConnectorAuthPublic = ConnectorAuthPublic;\nexport type UiConnector = ConnectorBase;\nexport type UiConnectorCatalogEntry = ConnectorCatalogEntry;\n\nconst DEFAULT_API_KEY_HEADER = 'Authorization';\n\nexport function toUiAuthPublic(auth: TrueForgeApi.McpServerManifestAuth | undefined): UiConnectorAuthPublic {\n if (auth === undefined) {\n return { type: 'none' };\n }\n if (auth.type === 'dcr') {\n return { type: 'dcr' };\n }\n const headerName = Object.keys(auth.headers)[0];\n return {\n type: 'header',\n ...(headerName === undefined ? {} : { headerName }),\n };\n}\n\nexport function toHarnessAuth(auth: ConnectorAuth): TrueForgeApi.McpServerManifestAuth | undefined {\n if (auth.type === 'none') {\n return undefined;\n }\n if (auth.type === 'dcr') {\n return { type: 'dcr' };\n }\n const apiKey = auth.apiKey?.trim();\n if (apiKey === undefined || apiKey === '') {\n throw new Error('API key is required for header-authenticated MCP servers');\n }\n const trimmedHeader = auth.headerName?.trim();\n const headerName = trimmedHeader !== undefined && trimmedHeader !== '' ? trimmedHeader : DEFAULT_API_KEY_HEADER;\n return { type: 'header', headers: { [headerName]: apiKey } };\n}\n\nexport function toUiCatalogEntry(server: TrueForgeApi.CatalogMcpServer): UiConnectorCatalogEntry {\n return {\n id: server.name,\n name: server.name,\n url: server.url,\n description: server.description,\n ...(server.logo === undefined ? {} : { logo: server.logo }),\n auth: toUiAuthPublic(server.auth),\n };\n}\n\nexport type UiToolAnnotations = {\n readOnlyHint?: boolean;\n destructiveHint?: boolean;\n};\n\nfunction toUiToolAnnotations(value: unknown): UiToolAnnotations | undefined {\n if (typeof value !== 'object' || value === null) return undefined;\n const readOnlyHint = Reflect.get(value, 'readOnlyHint');\n const destructiveHint = Reflect.get(value, 'destructiveHint');\n const annotations: UiToolAnnotations = {\n ...(typeof readOnlyHint === 'boolean' ? { readOnlyHint } : {}),\n ...(typeof destructiveHint === 'boolean' ? { destructiveHint } : {}),\n };\n return Object.keys(annotations).length > 0 ? annotations : undefined;\n}\n\nexport function toUiTool(tool: Record<string, unknown>): ToolBase & { annotations?: UiToolAnnotations } {\n const name = typeof tool.name === 'string' && tool.name !== '' ? tool.name : 'tool';\n const description = typeof tool.description === 'string' ? tool.description : '';\n const annotations = toUiToolAnnotations(Reflect.get(tool, 'annotations'));\n return annotations === undefined ? { id: name, name, description } : { id: name, name, description, annotations };\n}\n\nexport function toUiConnector(server: TrueForgeApi.ConfiguredMcpServer): UiConnector {\n const auth = toUiAuthPublic(server.manifest.auth);\n return {\n id: server.name,\n name: server.name,\n description: server.manifest.description,\n url: server.manifest.url,\n auth,\n requiresAuth: server.authStatus.status === 'auth_required',\n authenticated: server.authStatus.status !== 'auth_required',\n };\n}\n\nexport function toUiConnectorFromReadEntry(server: TrueForgeApi.AvailableMcpServer): UiConnector {\n const auth: UiConnectorAuthPublic = server.auth?.type ? { type: server.auth.type } : { type: 'none' };\n return {\n id: server.name,\n name: server.name,\n description: server.url,\n url: server.url,\n auth,\n requiresAuth: server.authStatus.status === 'auth_required',\n authenticated: server.authStatus.status !== 'auth_required',\n };\n}\n\nexport function toHarnessManifest(req: {\n name: string;\n url: string;\n auth: ConnectorAuth;\n description?: string;\n}): TrueForgeApi.McpServerManifest {\n const auth = toHarnessAuth(req.auth);\n const trimmed = req.description?.trim();\n return {\n type: 'remote',\n name: req.name,\n url: req.url,\n description: trimmed !== undefined && trimmed !== '' ? trimmed : `${req.name} MCP server`,\n ...(auth === undefined ? {} : { auth }),\n };\n}\n\n/** Settings connector port for `createTrueFoundryServer`. Delete omitted; disconnect unsupported. */\nexport function createConnectorCatalog(\n client: TrueForge,\n): ConnectorCatalogServer<\n ToolBase,\n UiConnectorAuth,\n UiConnectorAuthPublic,\n UiConnector,\n UiConnectorCatalogEntry,\n CreateConnectorRequest,\n UpdateConnectorRequest\n> {\n async function getConfigured(name: string): Promise<TrueForgeApi.ConfiguredMcpServer> {\n const listed = await client.settings.mcpServers.list();\n const existing = listed.data.find(server => server.name === name);\n if (existing === undefined) {\n throw new Error(`MCP server \"${name}\" not found`);\n }\n return existing;\n }\n\n async function resolveWriteAuth(req: { id?: string; auth: ConnectorAuth }): Promise<ConnectorAuth> {\n if (req.auth.type !== 'header') {\n return req.auth;\n }\n const apiKey = req.auth.apiKey?.trim();\n if (apiKey !== undefined && apiKey !== '') {\n return req.auth;\n }\n if (req.id === undefined) {\n throw new Error('API key is required for header-authenticated MCP servers');\n }\n const existing = await getConfigured(req.id);\n if (existing.manifest.auth?.type !== 'header') {\n throw new Error(`MCP server \"${req.id}\" has no stored header credentials to reuse`);\n }\n const preferredHeader = req.auth.headerName?.trim();\n const storedHeaderName = Object.keys(existing.manifest.auth.headers)[0];\n const headerName =\n preferredHeader !== undefined && preferredHeader !== ''\n ? preferredHeader\n : (storedHeaderName ?? DEFAULT_API_KEY_HEADER);\n const stored = existing.manifest.auth.headers[headerName] ?? Object.values(existing.manifest.auth.headers)[0];\n if (stored === undefined) {\n throw new Error(`MCP server \"${req.id}\" has no stored header credentials to reuse`);\n }\n return { type: 'header', apiKey: stored, headerName };\n }\n\n return {\n getConnectorCatalog: async () => {\n const body = await client.catalogs.mcpServers.list();\n return body.data.map(toUiCatalogEntry);\n },\n getConnector: async req => {\n const body = await client.settings.mcpServers.get(req.id);\n return toUiConnector(body.data);\n },\n listConnectors: async req => {\n const body = await client.settings.mcpServers.list();\n const connectors = body.data.map(toUiConnector);\n const query = req?.query?.trim().toLowerCase();\n if (query === undefined || query === '') {\n return connectors;\n }\n return connectors.filter(\n connector =>\n connector.name.toLowerCase().includes(query) ||\n connector.description.toLowerCase().includes(query) ||\n connector.url.toLowerCase().includes(query),\n );\n },\n getToolsByConnectorId: async ({ id }) => {\n const body = await client.mcpServers.listTools(id);\n return body.data.map(toUiTool);\n },\n createConnector: async req => {\n const auth = await resolveWriteAuth({ auth: req.auth });\n const body = await client.settings.mcpServers.create({\n manifest: toHarnessManifest({\n name: req.name,\n url: req.url,\n auth,\n description: req.description,\n }),\n });\n return toUiConnector(body.data);\n },\n updateConnector: async req => {\n const auth = await resolveWriteAuth({ id: req.id, auth: req.auth });\n const body = await client.settings.mcpServers.createOrUpdate({\n manifest: toHarnessManifest({\n name: req.id,\n url: req.url,\n auth,\n description: req.description,\n }),\n });\n return toUiConnector(body.data);\n },\n authenticateConnector: async req => {\n const result = await client.mcpServers.authorize(\n req.id,\n req.returnTo === undefined ? {} : { returnTo: req.returnTo },\n );\n return { status: result.status, authorization_endpoint: result.authorizationUrl };\n },\n disconnectConnector: async req => {\n const existing = await getConfigured(req.id);\n if (existing.manifest.auth?.type !== 'dcr') {\n throw new Error(`Disconnect is only supported for OAuth MCP servers`);\n }\n const body = await client.mcpServers.deleteAuthorization(req.id);\n return toUiConnector(body.data);\n },\n };\n}\n","/**\n * Configured-resource list helpers for composer pickers and host boot.\n * Not the settings catalog ports (`catalogs/*`).\n */\nimport type { TrueForge, TrueForgeApi } from '@truefoundry/trueforge-sdk';\n\nexport async function listModels(client: TrueForge): Promise<TrueForgeApi.AvailableModel[]> {\n const body = await client.models.list();\n return body.data;\n}\n\nexport async function listConfiguredMcpServers(client: TrueForge): Promise<TrueForgeApi.AvailableMcpServer[]> {\n const body = await client.mcpServers.list();\n return body.data;\n}\n\nexport async function listSkills(client: TrueForge): Promise<TrueForgeApi.AvailableSkill[]> {\n const body = await client.skills.list();\n return body.data;\n}\n\nexport async function getCapabilities(client: TrueForge): Promise<TrueForgeApi.CapabilitiesData> {\n const body = await client.server.getCapabilities();\n return body.data;\n}\n","/**\n * AgentBuilderServer callbacks for createTrueFoundryServer.\n * Composer pickers + agent library backed by the Harness agents registry.\n */\nimport type { TrueForge, TrueForgeApi } from '@truefoundry/trueforge-sdk';\nimport type { AgentBuilderServer, AgentLibraryEntry, ModelSelection, SearchAgentsParams } from '../../server/types.js';\nimport { toUiConnectorFromReadEntry, toUiTool } from './catalogs/connectorCatalog.js';\nimport { toHarnessAgentSpec, toUiAgentSpec } from './chatServer.js';\nimport { createTrueForgeClient, type CreateTrueForgeClientOptions } from './client.js';\nimport { listConfiguredMcpServers, listSkills } from './lists.js';\nimport type { HarnessAgentSpec } from './types.js';\n\nexport type CreateHarnessBuilderServerOptions = CreateTrueForgeClientOptions & {\n client?: TrueForge;\n};\n\n/** Well-known catalog entries key logos by `type` (same as configured provider resource name). */\nexport function modelProviderLogosByName(\n catalog: readonly TrueForgeApi.CatalogModelProvider[],\n): ReadonlyMap<string, string> {\n const logos = new Map<string, string>();\n for (const entry of catalog) {\n if (entry.type === 'custom' || entry.logo === undefined) {\n continue;\n }\n logos.set(entry.type, entry.logo);\n }\n return logos;\n}\n\n/** Map harness model rows onto the UI picker shape (nested provider + properties + optional logo). */\nexport function toModelSelection({\n model,\n logo,\n}: {\n model: TrueForgeApi.AvailableModel;\n logo?: string;\n}): ModelSelection {\n const { contextLength, maxOutputTokens, reasoningEfforts } = model.properties;\n return {\n id: model.modelId,\n name: model.name,\n provider: {\n name: model.provider.name,\n ...(logo === undefined ? {} : { logo }),\n },\n properties: {\n ...(contextLength === undefined ? {} : { contextLength }),\n ...(maxOutputTokens === undefined ? {} : { maxOutputTokens }),\n ...(reasoningEfforts === undefined ? {} : { reasoningEfforts: [...reasoningEfforts] }),\n },\n };\n}\n\nfunction toLibraryEntry(agent: TrueForgeApi.Agent): AgentLibraryEntry {\n return {\n name: agent.name,\n agentId: agent.id,\n agentSpec: toUiAgentSpec(agent.manifest),\n createdBySubject: agent.createdBySubject,\n };\n}\n\nexport function createHarnessBuilderServer(\n options: CreateHarnessBuilderServerOptions = {},\n): AgentBuilderServer<HarnessAgentSpec> {\n const client = options.client ?? createTrueForgeClient(options);\n\n return {\n getCapabilities: () => client.server.getCapabilities(),\n getModels: async () => {\n // Catalog logos are optional UI enrichment — a catalog failure must not blank the picker.\n const [modelsBody, catalogEntries] = await Promise.all([\n client.models.list(),\n client.catalogs.modelProviders.list().then(\n body => body.data,\n () => [],\n ),\n ]);\n const logosByName = modelProviderLogosByName(catalogEntries);\n return modelsBody.data.map(model => {\n const logo = logosByName.get(model.provider.name);\n return toModelSelection(logo === undefined ? { model } : { model, logo });\n });\n },\n // Skills require a configured sandbox provider; keep the picker empty when skill capability is off.\n // Catalog AvailableSkill.name is store identity (FQN in TFY). Picker `id` copies that\n // attach key; `name` is displayName so the draft can show a label without losing the wire key.\n // Draft mounts `{ id, name }`; toHarnessSkill admits AgentSpec.skills[].name = id ?? name.\n getSkills: async () => {\n const skills = await listSkills(client);\n return skills.map(skill => {\n const { display_name, repository_name, version: versionRaw } = skill.metadata ?? {};\n const version = Number(versionRaw);\n const hasVersion = Number.isInteger(version) && version > 0;\n return {\n id: skill.name,\n name: display_name ?? skill.name,\n description: skill.description,\n ...(repository_name === undefined ? {} : { skillRepoName: repository_name }),\n ...(hasVersion\n ? {\n version,\n loadVersions: async () => (await client.skills.listVersions({ name: skill.name })).data,\n }\n : {}),\n };\n });\n },\n getMcp: async () => (await listConfiguredMcpServers(client)).map(toUiConnectorFromReadEntry),\n getMcpConnector: async ({ connectorId }: { connectorId: string }) => {\n const body = await client.mcpServers.get(connectorId);\n return toUiConnectorFromReadEntry(body.data);\n },\n getMcpTools: async ({ connectorId }: { connectorId: string }) => {\n const body = await client.mcpServers.listTools(connectorId);\n return body.data.flatMap(tool =>\n typeof tool.name === 'string' && tool.name.trim() !== '' ? [toUiTool(tool)] : [],\n );\n },\n\n async searchAgents(req?: SearchAgentsParams) {\n const { data } = await client.agents.list();\n const query = req?.query?.trim().toLowerCase();\n const filtered =\n query === undefined || query === '' ? data : data.filter(agent => agent.name.toLowerCase().includes(query));\n const offset = req?.offset ?? 0;\n const limit = req?.limit ?? 50;\n return filtered.slice(offset, offset + limit).map(toLibraryEntry);\n },\n\n async saveAgent({ agentName, agentSpec, intent }) {\n // TODO: TrueForge currently drops AgentSpec.description until its schema supports it.\n const manifest = toHarnessAgentSpec(agentSpec);\n if (intent === 'update') {\n const { data } = await client.agents.list();\n const existing = data.find(agent => agent.name === agentName);\n if (!existing) {\n return {};\n }\n await client.agents.update(existing.id, { manifest });\n return { agentId: existing.id };\n }\n const created = await client.agents.create({ name: agentName, manifest });\n return { agentId: created.data.id };\n },\n\n async deleteAgent({ agentName }) {\n const { data } = await client.agents.list();\n const existing = data.find(agent => agent.name === agentName);\n if (!existing) return;\n await client.agents.delete(existing.id);\n },\n };\n}\n","/**\n * Maps trueforge-ui model-settings calls onto Harness\n *\n * UI: flat `apiKey` / model `id`. Harness: `auth.apiKey` / `modelId`.\n * Provider `id` in the UI is the Harness resource `name`.\n */\nimport type { TrueForge } from '@truefoundry/trueforge-sdk';\nimport { TrueForgeApi } from '@truefoundry/trueforge-sdk';\nimport type {\n CreateModelProviderRequest,\n ModelCatalogServer,\n ModelEntry,\n ModelProviderBase,\n ModelProviderCatalogEntry,\n UpdateModelProviderRequest,\n} from '../../../server/types.js';\n\n/** Custom-form rows omit properties; catalog rows round-trip them. */\nexport type UiModelEntry = ModelEntry & {\n properties?: TrueForgeApi.ModelProperties;\n};\n\nexport type UiModelProvider = ModelProviderBase<UiModelEntry>;\nexport type UiModelProviderCatalogEntry = ModelProviderCatalogEntry<UiModelEntry>;\n\nexport function toUiModelEntry(model: TrueForgeApi.ConfiguredModel): UiModelEntry {\n return {\n id: model.modelId,\n name: model.name,\n properties: model.properties,\n };\n}\n\nexport function toHarnessModelEntry(model: UiModelEntry): TrueForgeApi.ConfiguredModel {\n return {\n modelId: model.id,\n name: model.name,\n properties: model.properties ?? {},\n };\n}\n\nexport function toUiModelProvider(provider: TrueForgeApi.ConfiguredModelProvider): UiModelProvider {\n const { name, manifest } = provider;\n return {\n id: name,\n type: manifest.type,\n name,\n ...(manifest.baseUrl === undefined ? {} : { baseUrl: manifest.baseUrl }),\n models: manifest.models.map(toUiModelEntry),\n };\n}\n\nexport function toUiCatalogModelProviderEntry(\n provider: TrueForgeApi.CatalogModelProvider,\n): UiModelProviderCatalogEntry {\n if (provider.type === 'custom') {\n return {\n type: provider.type,\n name: provider.type,\n supportedReasoningEfforts: provider.supportedReasoningEfforts,\n models: [],\n };\n }\n return {\n type: provider.type,\n name: provider.type,\n ...(provider.logo === undefined ? {} : { logo: provider.logo }),\n models: provider.models.map(toUiModelEntry),\n };\n}\n\nconst PROVIDER_TYPES: readonly string[] = [...Object.values(TrueForgeApi.CatalogWellKnownModelProviderType), 'custom'];\n\nfunction isProviderType(type: string): type is Exclude<TrueForgeApi.ModelProviderManifest['type'], 'truefoundry'> {\n return PROVIDER_TYPES.includes(type);\n}\n\nexport function toHarnessModelProvider(req: {\n type: string;\n name: string;\n apiKey: string;\n baseUrl?: string;\n models: UiModelEntry[];\n}): TrueForgeApi.ModelProviderManifest {\n const models = req.models.map(toHarnessModelEntry);\n if (!isProviderType(req.type)) {\n throw new Error(`Unsupported model provider type: ${req.type}`);\n }\n const baseUrl = req.baseUrl?.trim() === '' ? undefined : req.baseUrl;\n // Only `custom` is named by its caller; the API names the rest after their type.\n if (req.type === 'custom') {\n if (baseUrl === undefined) {\n throw new Error(`Model providers of type \"${req.type}\" require a base URL`);\n }\n // Blank form field is \"\"; custom must omit auth on the wire (empty string is rejected).\n return {\n type: req.type,\n name: req.name,\n models,\n baseUrl,\n ...(req.apiKey === '' ? {} : { auth: { apiKey: req.apiKey } }),\n };\n }\n const auth = { apiKey: req.apiKey };\n if (baseUrl !== undefined) {\n return { type: req.type, auth, models, baseUrl };\n }\n return { type: req.type, auth, models };\n}\n\n/** Settings model-catalog port for `createTrueFoundryServer`. Delete is omitted (no BE route). */\nexport function createModelProviderCatalog(\n client: TrueForge,\n): ModelCatalogServer<\n UiModelEntry,\n UiModelProvider,\n UiModelProviderCatalogEntry,\n CreateModelProviderRequest<UiModelEntry>,\n UpdateModelProviderRequest<UiModelEntry>\n> {\n async function resolveApiKey(req: { id?: string; type?: string; apiKey: string }): Promise<string> {\n const trimmed = req.apiKey.trim();\n if (trimmed !== '') {\n return trimmed;\n }\n if (req.id === undefined) {\n // Create with a blank key: allow only for custom; \"\" is mapped to omitted auth below.\n if (req.type === 'custom') {\n return '';\n }\n throw new Error('API key is required');\n }\n // Update with empty means keep the stored key.\n const listed = await client.settings.modelProviders.list();\n const existing = listed.data.find(provider => provider.name === req.id);\n if (existing === undefined) {\n throw new Error(`Model provider \"${req.id}\" not found`);\n }\n return existing.manifest.auth?.apiKey ?? '';\n }\n\n return {\n getModelProviderCatalog: async () => {\n const body = await client.catalogs.modelProviders.list();\n return body.data.map(toUiCatalogModelProviderEntry);\n },\n listModelProviders: async () => {\n const body = await client.settings.modelProviders.list();\n return body.data.map(toUiModelProvider);\n },\n createModelProvider: async req => {\n const apiKey = await resolveApiKey({ type: req.type, apiKey: req.apiKey });\n const body = await client.settings.modelProviders.create({\n manifest: toHarnessModelProvider({\n type: req.type,\n name: req.name,\n apiKey,\n ...(req.baseUrl === undefined ? {} : { baseUrl: req.baseUrl }),\n models: req.models,\n }),\n });\n return toUiModelProvider(body.data);\n },\n updateModelProvider: async req => {\n // UI sends apiKey: \"\" when only models change; reuse the stored key.\n const apiKey = await resolveApiKey({ id: req.id, type: req.type, apiKey: req.apiKey });\n const body = await client.settings.modelProviders.createOrUpdate({\n manifest: toHarnessModelProvider({\n type: req.type,\n name: req.id,\n apiKey,\n ...(req.baseUrl === undefined ? {} : { baseUrl: req.baseUrl }),\n models: req.models,\n }),\n });\n return toUiModelProvider(body.data);\n },\n };\n}\n","/**\n * Maps trueforge-ui sandbox-settings calls onto Harness\n * `/api/v1/settings/sandbox-providers` (singleton upsert, no delete).\n *\n * UI: multi-row providers with `id` / `catalogId` / `name` / flat `apiKey`.\n * Harness: one Daytona provider per tenant; catalog YAML has no name — synthetic\n * identity uses `type` (`daytona`) as id/catalogId and display name `Daytona`.\n */\nimport type { TrueForge } from '@truefoundry/trueforge-sdk';\nimport { TrueForgeApi } from '@truefoundry/trueforge-sdk';\nimport type {\n SandboxCatalogServer,\n SandboxProviderBase,\n SandboxProviderCatalogEntry,\n SandboxProviderConfig,\n SandboxProviderListEntry,\n} from '../../../server/types.js';\n\nexport type UiSandboxProvider = SandboxProviderBase;\nexport type UiSandboxProviderCatalogEntry = SandboxProviderCatalogEntry;\nexport type UiSandboxProviderListEntry = SandboxProviderListEntry;\n\nconst DAYTONA_TYPE = 'daytona';\nconst DAYTONA_DISPLAY_NAME = 'Daytona';\n\nfunction displayNameForType(type: string): string {\n if (type === DAYTONA_TYPE) {\n return DAYTONA_DISPLAY_NAME;\n }\n return type;\n}\n\nexport function configFromHarness(\n provider: TrueForgeApi.CatalogSandboxProvider | TrueForgeApi.SandboxProviderManifest,\n): SandboxProviderConfig {\n return {\n execTimeoutMs: provider.execTimeoutMs,\n autoStopIntervalInMinutes: provider.autoStopIntervalInMinutes,\n autoArchiveIntervalInMinutes: provider.autoArchiveIntervalInMinutes,\n autoDeleteIntervalInMinutes: provider.autoDeleteIntervalInMinutes,\n };\n}\n\nexport function toUiCatalogEntry(provider: TrueForgeApi.CatalogSandboxProvider): UiSandboxProviderCatalogEntry {\n return {\n id: provider.type,\n name: displayNameForType(provider.type),\n type: provider.type,\n ...configFromHarness(provider),\n };\n}\n\nexport function toUiSandboxProvider(provider: TrueForgeApi.SandboxProviderManifest): UiSandboxProvider {\n return {\n id: provider.type,\n name: displayNameForType(provider.type),\n catalogId: provider.type,\n isConnected: true,\n ...configFromHarness(provider),\n };\n}\n\nexport function toUiSandboxProviderListEntry(\n response: TrueForgeApi.GetSandboxProviderResponse['data'],\n): UiSandboxProviderListEntry {\n return {\n data: toUiSandboxProvider(response.manifest),\n snapshotSyncStatus: {\n status: response.status,\n ...(response.statusReason ? { statusReason: response.statusReason } : {}),\n },\n };\n}\n\nexport function filterUiSandboxProviders({\n providers,\n query,\n}: {\n providers: UiSandboxProviderListEntry[];\n query?: string;\n}): UiSandboxProviderListEntry[] {\n const normalizedQuery = query?.trim().toLowerCase();\n if (normalizedQuery === undefined || normalizedQuery === '') {\n return providers;\n }\n return providers.filter(\n provider =>\n provider.data.name.toLowerCase().includes(normalizedQuery) ||\n provider.data.id.toLowerCase().includes(normalizedQuery),\n );\n}\n\nexport function toHarnessManifest(\n req: {\n type: string;\n apiKey: string;\n } & SandboxProviderConfig,\n): TrueForgeApi.SandboxProviderManifest {\n if (req.type !== DAYTONA_TYPE) {\n throw new Error(`Unsupported sandbox provider type: ${req.type}`);\n }\n return {\n type: DAYTONA_TYPE,\n execTimeoutMs: req.execTimeoutMs,\n autoStopIntervalInMinutes: req.autoStopIntervalInMinutes,\n autoArchiveIntervalInMinutes: req.autoArchiveIntervalInMinutes,\n autoDeleteIntervalInMinutes: req.autoDeleteIntervalInMinutes,\n auth: { apiKey: req.apiKey },\n };\n}\n\n/** Settings sandbox-catalog port for `createTrueFoundryServer`. Delete omitted (no BE route). */\nexport function createSandboxProviderCatalog(client: TrueForge): SandboxCatalogServer {\n async function resolveApiKey(apiKey: string | undefined): Promise<string> {\n const trimmed = apiKey?.trim();\n if (trimmed !== undefined && trimmed !== '') {\n return trimmed;\n }\n const existing = await client.settings.sandboxProviders.get();\n return existing.data.manifest.auth.apiKey;\n }\n\n return {\n getSandboxProviderCatalog: async () => {\n const body = await client.catalogs.sandboxProviders.list();\n return body.data.map(toUiCatalogEntry);\n },\n listSandboxProviders: async req => {\n let providers: UiSandboxProviderListEntry[];\n try {\n const body = await client.settings.sandboxProviders.get();\n providers = [toUiSandboxProviderListEntry(body.data)];\n } catch (err) {\n if (err instanceof TrueForgeApi.NotFoundError) {\n providers = [];\n } else {\n throw err;\n }\n }\n return filterUiSandboxProviders({ providers, query: req?.query });\n },\n createSandboxProvider: async req => {\n const body = await client.settings.sandboxProviders.createOrUpdate({\n manifest: toHarnessManifest({\n type: req.type,\n apiKey: req.apiKey,\n execTimeoutMs: req.execTimeoutMs,\n autoStopIntervalInMinutes: req.autoStopIntervalInMinutes,\n autoArchiveIntervalInMinutes: req.autoArchiveIntervalInMinutes,\n autoDeleteIntervalInMinutes: req.autoDeleteIntervalInMinutes,\n }),\n });\n return toUiSandboxProvider(body.data.manifest);\n },\n updateSandboxProvider: async req => {\n const apiKey = await resolveApiKey(req.apiKey);\n const body = await client.settings.sandboxProviders.createOrUpdate({\n manifest: toHarnessManifest({\n type: DAYTONA_TYPE,\n apiKey,\n execTimeoutMs: req.execTimeoutMs,\n autoStopIntervalInMinutes: req.autoStopIntervalInMinutes,\n autoArchiveIntervalInMinutes: req.autoArchiveIntervalInMinutes,\n autoDeleteIntervalInMinutes: req.autoDeleteIntervalInMinutes,\n }),\n });\n return toUiSandboxProvider(body.data.manifest);\n },\n };\n}\n","/**\n * Maps trueforge-ui skill-settings calls onto Harness\n *\n * UI: `repoURL` / skill `id` / optional `catalogId`.\n * Harness: `url` / resource `name` (no separate id or catalogId on wire).\n * For now UI `id = name`; registry link uses `catalogId = name` when the\n * configured skill name matches a catalog preset.\n */\nimport type { TrueForge, TrueForgeApi } from '@truefoundry/trueforge-sdk';\nimport type { DefinedSkill, SkillCatalogEntry, SkillCatalogServer, SkillConfigBase } from '../../../server/types.js';\n\nexport type UiSkill = DefinedSkill;\nexport type UiSkillCatalogEntry = SkillCatalogEntry;\n\nexport function toUiCatalogEntry(skill: TrueForgeApi.CatalogSkill): UiSkillCatalogEntry {\n return {\n id: skill.name,\n name: skill.name,\n description: skill.description,\n repoURL: skill.url,\n path: skill.path ?? '',\n ref: skill.ref,\n };\n}\n\nexport function toHarnessManifest(req: SkillConfigBase): TrueForgeApi.settings.CreateSkillRequest['manifest'] {\n const path = req.path.trim();\n return {\n type: 'git',\n name: req.name,\n url: req.repoURL,\n ...(path === '' ? {} : { path }),\n ref: req.ref,\n description: req.description,\n };\n}\n\nexport function toUiSkill(skill: TrueForgeApi.ConfiguredSkill, catalogNames: ReadonlySet<string>): UiSkill {\n const manifest = skill.manifest;\n const displayName =\n 'displayName' in manifest && typeof manifest.displayName === 'string' ? manifest.displayName : manifest.name;\n const base = {\n id: skill.name,\n name: displayName,\n description: manifest.description,\n };\n if (catalogNames.has(skill.name)) {\n return { ...base, catalogId: skill.name };\n }\n return base;\n}\n\n/** Settings skill-catalog port for `createTrueFoundryServer`. Delete omitted (no BE route). */\nexport function createSkillCatalog(client: TrueForge): SkillCatalogServer<UiSkill> {\n return {\n getSkillCatalog: async () => {\n const body = await client.catalogs.skills.list();\n return body.data.map(toUiCatalogEntry);\n },\n listSkills: async req => {\n const [listed, catalog] = await Promise.all([client.settings.skills.list(), client.catalogs.skills.list()]);\n const catalogNames = new Set(catalog.data.map(entry => entry.name));\n const skills = listed.data.map(skill => toUiSkill(skill, catalogNames));\n const query = req?.query?.trim().toLowerCase();\n if (query === undefined || query === '') {\n return skills;\n }\n return skills.filter(\n skill => skill.name.toLowerCase().includes(query) || skill.description.toLowerCase().includes(query),\n );\n },\n createSkill: async req => {\n const body = await client.settings.skills.create({ manifest: toHarnessManifest(req) });\n const catalogId = 'catalogId' in req ? req.catalogId : undefined;\n if (catalogId !== undefined) {\n return {\n id: body.data.name,\n name: body.data.name,\n description: body.data.manifest.description,\n catalogId,\n };\n }\n return {\n id: body.data.name,\n name: body.data.name,\n description: body.data.manifest.description,\n };\n },\n };\n}\n","import type { TrueForge } from '@truefoundry/trueforge-sdk';\n\nimport type { PermissionsServer } from '../../server/types.js';\nimport { createTrueForgeClient, type CreateTrueForgeClientOptions } from './client.js';\n\nexport type CreateHarnessPermissionsServerOptions = CreateTrueForgeClientOptions & {\n client?: TrueForge;\n};\n\nexport function createHarnessPermissionsServer(options: CreateHarnessPermissionsServerOptions = {}): PermissionsServer {\n const client = options.client ?? createTrueForgeClient(options);\n return {\n listPermissions: request => client.internal.listPermissions(request),\n };\n}\n","/**\n * Harness ScheduleServer adapter — maps flat runtime DTOs to SDK wire (manifest + agentName).\n */\nimport type { TrueForge, TrueForgeApi } from '@truefoundry/trueforge-sdk';\nimport type {\n CreateScheduleRequest,\n CreateScheduleRunRequest,\n ListResult,\n ListSchedulesParams,\n Schedule,\n ScheduleRun,\n ScheduleServer,\n ScheduleStatus,\n UpdateScheduleRequest,\n} from '../../../server/types.js';\nimport { toListResult } from '../chatServer.js';\n\n/** Matches API PAGE_LIMIT for schedules list. */\nconst SCHEDULES_PAGE_LIMIT = 25;\n\ntype AgentIndex = {\n idToName: ReadonlyMap<string, string>;\n nameToId: ReadonlyMap<string, string>;\n};\n\nasync function loadAgentIndex(client: TrueForge): Promise<AgentIndex> {\n const { data } = await client.agents.list();\n const idToName = new Map<string, string>();\n const nameToId = new Map<string, string>();\n for (const agent of data) {\n idToName.set(agent.id, agent.name);\n nameToId.set(agent.name, agent.id);\n }\n return { idToName, nameToId };\n}\n\nfunction resolveAgentName(agentId: string, index: AgentIndex): string {\n const byId = index.idToName.get(agentId);\n if (byId != null) return byId;\n if (index.nameToId.has(agentId)) return agentId;\n throw new Error(`Unknown agent: ${agentId}`);\n}\n\nfunction collectAgentIds(req?: ListSchedulesParams): string[] {\n const ids: string[] = [];\n if (req?.agentIds != null) {\n for (const id of req.agentIds) {\n if (id !== '') ids.push(id);\n }\n }\n if (req?.agentId != null && req.agentId !== '') ids.push(req.agentId);\n return [...new Set(ids)];\n}\n\nfunction wireStatus(manifest: TrueForgeApi.ScheduleManifest): ScheduleStatus {\n return manifest.status ?? 'active';\n}\n\nfunction toUiSchedule(wire: TrueForgeApi.Schedule, index: AgentIndex): Schedule {\n const agentId = index.nameToId.get(wire.agentName) ?? wire.agentName;\n return {\n id: wire.id,\n name: wire.name,\n agentId,\n agentName: wire.agentName,\n task: wire.manifest.task,\n cron: wire.manifest.cron,\n timezone: wire.manifest.timezone ?? 'UTC',\n status: wireStatus(wire.manifest),\n lastRunAt: null,\n createdBySubject: wire.createdBySubject,\n };\n}\n\nfunction toWireManifest(input: {\n task: string;\n cron: string;\n timezone?: string;\n status?: ScheduleStatus;\n}): TrueForgeApi.ScheduleManifest {\n return {\n task: input.task,\n cron: input.cron,\n timezone: input.timezone ?? 'UTC',\n status: input.status ?? 'active',\n };\n}\n\nfunction toIsoInstant(value: Date | string): string {\n if (value instanceof Date) return value.toISOString();\n return value;\n}\n\nfunction toUiScheduleRun(wire: TrueForgeApi.ScheduleRun): ScheduleRun {\n return {\n id: wire.id,\n scheduleId: wire.scheduleId,\n name: wire.name,\n scheduledFor: toIsoInstant(wire.scheduledFor),\n status: wire.status,\n triggeredAt: wire.triggeredAt == null ? null : toIsoInstant(wire.triggeredAt),\n triggeredBy: wire.createdBySubject.subjectDisplayName || wire.createdBySubject.subjectId,\n };\n}\n\nexport function createScheduleServer(options: { client: TrueForge }): ScheduleServer {\n const { client } = options;\n\n return {\n async listSchedules(req?: ListSchedulesParams): Promise<ListResult<Schedule>> {\n const index = await loadAgentIndex(client);\n const agentIds = collectAgentIds(req);\n const agentNames = agentIds.length === 0 ? undefined : agentIds.map(id => resolveAgentName(id, index)).join(',');\n const limit = Math.min(Math.max(req?.limit ?? SCHEDULES_PAGE_LIMIT, 1), SCHEDULES_PAGE_LIMIT);\n const page = await client.schedules.list({\n limit,\n ...(req?.pageToken === undefined || req.pageToken === '' ? {} : { pageToken: req.pageToken }),\n ...(agentNames === undefined ? {} : { agentNames }),\n });\n return toListResult(page, row => toUiSchedule(row, index));\n },\n\n async getSchedule({ id }): Promise<Schedule> {\n const index = await loadAgentIndex(client);\n const { data } = await client.schedules.get(id);\n return toUiSchedule(data, index);\n },\n\n async createSchedule(req: CreateScheduleRequest): Promise<Schedule> {\n const index = await loadAgentIndex(client);\n const agentName = resolveAgentName(req.agentId, index);\n const { data } = await client.schedules.create({\n agentName,\n name: req.name,\n manifest: toWireManifest(req),\n });\n return toUiSchedule(data, index);\n },\n\n async updateSchedule(req: UpdateScheduleRequest): Promise<Schedule> {\n const index = await loadAgentIndex(client);\n const { data } = await client.schedules.update(req.id, {\n name: req.name,\n manifest: toWireManifest(req),\n });\n return toUiSchedule(data, index);\n },\n\n async deleteSchedule({ id }): Promise<void> {\n await client.schedules.delete(id);\n },\n\n async listScheduleRuns({ scheduleId }): Promise<ScheduleRun[]> {\n const { data } = await client.schedules.listRuns(scheduleId);\n return data.map(toUiScheduleRun);\n },\n\n async createScheduleRun(req: CreateScheduleRunRequest): Promise<ScheduleRun> {\n const { data } = await client.schedules.createRun({ scheduleId: req.scheduleId });\n return toUiScheduleRun(data);\n },\n };\n}\n","/**\n * Built-in Harness → AgentUIServer factory for `<TrueForgeUI server={{ type: \"trueforge\", … }} />`.\n */\nimport { createTrueFoundryServer } from '../../server/createTrueFoundryServer.js';\nimport type { CatalogServer, PermissionsServer } from '../../server/types.js';\nimport { createHarnessAgentMetricsServer } from './agentMetricsServer.js';\nimport { createHarnessAgentSessionsServer } from './agentSessionsServer.js';\nimport { createHarnessBuilderServer } from './builderServer.js';\nimport { createConnectorCatalog } from './catalogs/connectorCatalog.js';\nimport { createModelProviderCatalog } from './catalogs/modelProviderCatalog.js';\nimport { createSandboxProviderCatalog } from './catalogs/sandboxProviderCatalog.js';\nimport { createSkillCatalog } from './catalogs/skillCatalog.js';\nimport { createHarnessChatServer } from './chatServer.js';\nimport { createTrueForgeClient, type CreateTrueForgeClientOptions } from './client.js';\nimport { createHarnessPermissionsServer } from './permissionsServer.js';\nimport { createScheduleServer } from './schedules/scheduleServer.js';\nimport type { HarnessAgentSpec } from './types.js';\n\nexport { createHarnessAgentMetricsServer, type CreateHarnessAgentMetricsServerOptions } from './agentMetricsServer.js';\nexport {\n createHarnessAgentSessionsServer,\n type CreateHarnessAgentSessionsServerOptions,\n} from './agentSessionsServer.js';\nexport {\n createHarnessBuilderServer,\n modelProviderLogosByName,\n toModelSelection,\n type CreateHarnessBuilderServerOptions,\n} from './builderServer.js';\nexport {\n createConnectorCatalog,\n toHarnessAuth,\n toHarnessManifest as toHarnessConnectorManifest,\n toUiConnector,\n toUiConnectorFromReadEntry,\n} from './catalogs/connectorCatalog.js';\nexport {\n createModelProviderCatalog,\n toHarnessModelProvider,\n toUiCatalogModelProviderEntry,\n toUiModelProvider,\n} from './catalogs/modelProviderCatalog.js';\nexport {\n configFromHarness,\n createSandboxProviderCatalog,\n filterUiSandboxProviders,\n toHarnessManifest as toHarnessSandboxManifest,\n toUiSandboxProvider,\n toUiSandboxProviderListEntry,\n} from './catalogs/sandboxProviderCatalog.js';\nexport { createSkillCatalog, toHarnessManifest as toHarnessSkillManifest, toUiSkill } from './catalogs/skillCatalog.js';\nexport {\n createHarnessChatServer,\n toHarnessAgentSpec,\n toUiAgentSpec,\n type CreateHarnessChatServerOptions,\n} from './chatServer.js';\nexport { createTrueForgeClient } from './client.js';\nexport type { CreateTrueForgeClientOptions } from './client.js';\nexport { getCapabilities, listConfiguredMcpServers, listModels, listSkills } from './lists.js';\nexport { createHarnessPermissionsServer, type CreateHarnessPermissionsServerOptions } from './permissionsServer.js';\nexport { createScheduleServer } from './schedules/scheduleServer.js';\nexport type { HarnessAgentSpec, HarnessMcpServerMount, HarnessSkillMount } from './types.js';\n\nexport type CreateTrueForgeAgentUIServerOptions = CreateTrueForgeClientOptions & {\n /** Override the default Harness settings catalogs. */\n catalog?: CatalogServer;\n /** Optional host-provided resource permissions port. */\n permissions?: PermissionsServer;\n};\n\n/**\n * Compose chat + builder + agent sessions + default settings catalogs into an `AgentUIServer`.\n */\nexport function createTrueForgeAgentUIServer(options: CreateTrueForgeAgentUIServerOptions = {}) {\n const { catalog: catalogOverride, permissions, ...clientOptions } = options;\n const client = createTrueForgeClient(clientOptions);\n const catalog =\n catalogOverride ??\n ({\n modelCatalog: createModelProviderCatalog(client),\n connectorCatalog: createConnectorCatalog(client),\n skillCatalog: createSkillCatalog(client),\n sandboxCatalog: createSandboxProviderCatalog(client),\n } satisfies CatalogServer);\n\n return createTrueFoundryServer<HarnessAgentSpec>({\n chatServer: createHarnessChatServer({ client }),\n ...createHarnessBuilderServer({ client }),\n catalog,\n sessions: createHarnessAgentSessionsServer({ ...clientOptions, client }),\n metrics: createHarnessAgentMetricsServer({ ...clientOptions, client }),\n schedules: createScheduleServer({ client }),\n permissions: permissions ?? createHarnessPermissionsServer({ client }),\n });\n}\n"],"mappings":";;;;;;;;AAIA,SAAS,iBAAiB;AAS1B,IAAM,mBAAmB;AAOlB,SAAS,wBAAwB,SAAyB;AAC/D,MAAI,gBAAgB,KAAK,OAAO,EAAG,QAAO;AAC1C,QAAM,SAAS,WAAW,UAAU;AACpC,MAAI,OAAO,WAAW,YAAY,OAAO,SAAS,KAAK,WAAW,QAAQ;AACxE,WAAO,IAAI,IAAI,SAAS,MAAM,EAAE;AAAA,EAClC;AACA,SAAO;AACT;AAEO,SAAS,sBAAsB,UAAwC,CAAC,GAAc;AAC3F,SAAO,IAAI,UAAU;AAAA,IACnB,SAAS,wBAAwB,QAAQ,WAAW,gBAAgB;AAAA,IACpE,GAAI,QAAQ,UAAU,SAAY,CAAC,IAAI,EAAE,OAAO,QAAQ,MAAM;AAAA,IAC9D,GAAI,QAAQ,UAAU,SAAY,CAAC,IAAI,EAAE,OAAO,QAAQ,MAAM;AAAA,EAChE,CAAC;AACH;AAEO,SAAS,aAAa,OAAqB;AAChD,QAAM,OAAO,IAAI,KAAK,KAAK;AAC3B,MAAI,OAAO,MAAM,KAAK,QAAQ,CAAC,GAAG;AAChC,UAAM,IAAI,MAAM,0BAA0B,KAAK,EAAE;AAAA,EACnD;AACA,SAAO;AACT;;;AClCA,SAAS,mBAAmB,MAAoD;AAC9E,MAAI,SAAS,wBAAwB,SAAS,6BAA6B,SAAS,mBAAmB;AACrG,WAAO;AAAA,EACT;AACA,QAAM,IAAI,MAAM,sCAAsC,IAAI,EAAE;AAC9D;AAEO,SAAS,gCACd,UAAkD,CAAC,GAC/B;AACpB,QAAM,SAAS,QAAQ,UAAU,sBAAsB,OAAO;AAE9D,SAAO;AAAA,IACL,MAAM,YAAY;AAChB,YAAM,EAAE,KAAK,IAAI,MAAM,OAAO,SAAS,QAAQ,WAAW;AAC1D,aAAO,KAAK;AAAA,IACd;AAAA,IACA,MAAM,UAAU,EAAE,SAAS,gBAAgB,aAAa,GAAG;AACzD,YAAM,EAAE,KAAK,IAAI,MAAM,OAAO,SAAS,QAAQ,UAAU;AAAA,QACvD;AAAA,QACA,gBAAgB,aAAa,cAAc;AAAA,QAC3C,cAAc,aAAa,YAAY;AAAA,MACzC,CAAC;AACD,aAAO,KAAK;AAAA,IACd;AAAA,IACA,MAAM,aAAa,EAAE,SAAS,gBAAgB,cAAc,UAAU,GAAG;AACvE,YAAM,EAAE,KAAK,IAAI,MAAM,OAAO,SAAS,QAAQ,aAAa;AAAA,QAC1D;AAAA,QACA,gBAAgB,aAAa,cAAc;AAAA,QAC3C,cAAc,aAAa,YAAY;AAAA,QACvC,WAAW,mBAAmB,SAAS;AAAA,MACzC,CAAC;AACD,aAAO;AAAA,IACT;AAAA,EACF;AACF;;;ACxCO,SAAS,oBAAoB,SAAkF;AACpH,SAAO;AAAA,IACL,kBAAkB,QAAQ,oBAAoB;AAAA,IAC9C,mBAAmB,QAAQ,qBAAqB;AAAA,IAChD,aAAa,QAAQ,eAAe;AAAA,IACpC,sBAAsB,QAAQ,wBAAwB;AAAA,IACtD,uBAAuB,QAAQ,yBAAyB;AAAA,IACxD,sBAAsB,QAAQ,wBAAwB;AAAA,IACtD,GAAI,QAAQ,kBAAkB,OAAO,CAAC,IAAI,EAAE,gBAAgB,QAAQ,eAAe;AAAA,EACrF;AACF;AAEO,SAAS,cAAc,OAA4E;AACxG,SAAO,MAAM,WAAW,YAAY,EAAE,QAAQ,UAAU,IAAI,sBAAsB,KAAK;AACzF;AAEA,SAAS,sBAAsB,OAAmF;AAChH,UAAQ,MAAM,QAAQ;AAAA,IACpB,KAAK;AACH,aAAO,EAAE,QAAQ,aAAa,QAAQ,MAAM,QAAQ,aAAa,MAAM,YAAY;AAAA,IACrF,KAAK;AACH,aAAO,EAAE,QAAQ,SAAS,SAAS,MAAM,SAAS,aAAa,MAAM,YAAY;AAAA,IACnF,KAAK;AACH,aAAO;AAAA,QACL,QAAQ;AAAA,QACR,aAAa,MAAM;AAAA,QACnB,iBAAiB,MAAM;AAAA,QACvB,GAAI,MAAM,UAAU,OAAO,CAAC,IAAI,EAAE,QAAQ,MAAM,OAAO;AAAA,QACvD,GAAI,MAAM,WAAW,OAAO,CAAC,IAAI,EAAE,SAAS,oBAAoB,MAAM,OAAO,EAAE;AAAA,MACjF;AAAA,EACJ;AACF;AAEO,SAAS,iBAAiB,OAA6D;AAC5F,MAAI,MAAM,SAAS,YAAa,QAAO,EAAE,GAAG,MAAM;AAClD,SAAO,EAAE,GAAG,OAAO,OAAO,sBAAsB,MAAM,KAAK,EAAE;AAC/D;AAEO,SAAS,mBAAmB,OAA4D;AAC7F,MAAI,MAAM,SAAS,YAAa,QAAO,EAAE,GAAG,MAAM;AAClD,SAAO,EAAE,GAAG,OAAO,OAAO,sBAAsB,MAAM,KAAK,EAAE;AAC/D;AAEO,SAAS,cAAc,MAAuD;AACnF,SAAO,EAAE,QAAQ,KAAK,QAAQ,OAAO,iBAAiB,KAAK,KAAK,EAAE;AACpE;;;ACRA,SAAS,cAAc,QAAuD;AAC5E,SAAO;AACT;AAEA,SAAS,UAAU,OAA8C;AAC/D,SAAO,EAAE,MAAM,MAAM,MAAM,SAAS,MAAM,YAAY,KAAK;AAC7D;AAEA,SAAS,eAAe,OAA8C;AAEpE,SAAO,EAAE,MAAM,MAAM,MAAM,MAAM,MAAM,SAAS,MAAM,YAAY,KAAK;AACzE;AAGO,SAAS,mBAAmB,MAAgD;AACjF,QAAM,EAAE,QAAQ,YAAY,GAAG,KAAK,IAAI;AACxC,SAAO;AAAA,IACL,GAAG;AAAA,IACH,GAAI,eAAe,SACf,CAAC,IACD;AAAA,MACE,YAAY,WAAW,IAAI,YAAU;AAEnC,YAAI,QAAQ,QAAQ;AAClB,gBAAM,EAAE,IAAI,GAAG,MAAM,IAAI;AACzB,eAAK;AACL,iBAAO;AAAA,QACT;AACA,eAAO;AAAA,MACT,CAAC;AAAA,IACH;AAAA,IACJ,GAAI,WAAW,SAAY,CAAC,IAAI,EAAE,QAAQ,OAAO,IAAI,cAAc,EAAE;AAAA,EACvE;AACF;AAEO,SAAS,cAAc,MAAgD;AAC5E,QAAM,EAAE,YAAY,QAAQ,GAAG,KAAK,IAAI;AACxC,SAAO;AAAA,IACL,GAAG;AAAA,IACH,GAAI,aAAa,EAAE,YAAY,WAAW,IAAI,aAAa,EAAE,IAAI,CAAC;AAAA,IAClE,GAAI,SAAS,EAAE,QAAQ,OAAO,IAAI,SAAS,EAAE,IAAI,CAAC;AAAA,EACpD;AACF;AAEA,SAAS,YAAY,SAAiD;AACpE,SAAO;AAAA,IACL,IAAI,QAAQ;AAAA,IACZ,WAAW,QAAQ,MAAM,SAAS;AAAA,IAClC,eAAe,yBAAyB,QAAQ,QAAQ;AAAA,IACxD,WAAW,QAAQ;AAAA,IACnB,WAAW,QAAQ;AAAA,IACnB,GAAI,QAAQ,UAAU,OAAO,CAAC,IAAI,EAAE,OAAO,QAAQ,MAAM;AAAA;AAAA;AAAA,IAGzD,GAAI,QAAQ,MAAM,SAAS,eAAe,QAAQ,MAAM,SAAS,OAAO,EAAE,WAAW,QAAQ,MAAM,KAAK,IAAI,CAAC;AAAA,IAC7G,GAAI,QAAQ,MAAM,SAAS,WAAW,EAAE,WAAW,cAAc,QAAQ,MAAM,IAAI,EAAE,IAAI,CAAC;AAAA,EAC5F;AACF;AAEA,SAAS,sBAAsB,SAA0E;AACvG,MAAI,QAAQ,aAAa,OAAW,QAAO;AAC3C,SAAO,QAAQ;AACjB;AAGA,SAAS,YAAY,SAA8D;AACjF,SAAO,OAAO,YAAY,WAAW,UAAU,QAAQ,IAAI,WAAS,EAAE,GAAG,KAAK,EAAE;AAClF;AAEA,SAAS,UAAU,OAAsD;AACvE,SAAO,MAAM,IAAI,UAAS,KAAK,SAAS,iBAAiB,EAAE,GAAG,MAAM,SAAS,YAAY,KAAK,OAAO,EAAE,IAAI,IAAK;AAClH;AAEA,SAAS,SAAS,MAA+B;AAC/C,QAAM,EAAE,gBAAgB,OAAO,OAAO,GAAG,KAAK,IAAI;AAClD,SAAO;AAAA,IACL,GAAG;AAAA,IACH,OAAO,cAAc,KAAK;AAAA,IAC1B,GAAI,mBAAmB,OAAO,CAAC,IAAI,EAAE,eAAe;AAAA,IACpD,GAAI,UAAU,SAAY,CAAC,IAAI,EAAE,OAAO,UAAU,KAAK,EAAE;AAAA,EAC3D;AACF;AAOO,SAAS,aACd,MACA,KACqB;AACrB,QAAM,OAAO,KAAK,KAAK,IAAI,GAAG;AAC9B,QAAM,QAAQ,KAAK,SAAS,WAAW;AACvC,SAAO;AAAA,IACL;AAAA,IACA,GAAI,UAAU,SAAY,CAAC,IAAI,EAAE,eAAe,MAAM;AAAA,EACxD;AACF;AAEA,SAAS,eAAe,IAAwB,UAA0B;AACxE,MAAI,OAAO,OAAW,QAAO;AAC7B,QAAM,SAAS,OAAO,EAAE;AACxB,SAAO,OAAO,cAAc,MAAM,KAAK,UAAU,IAAI,SAAS;AAChE;AAEA,SAAS,iBAAiB,SAA8D;AACtF,MAAI,OAAO,YAAY,SAAU,QAAO;AACxC,SAAO,QAAQ,IAAI,UAAQ;AACzB,QAAI,KAAK,SAAS,OAAQ,QAAO;AACjC,UAAM,EAAE,MAAM,KAAK,IAAI;AACvB,QAAI,OAAO,SAAS,YAAY,OAAO,SAAS,UAAU;AACxD,YAAM,IAAI,MAAM,kEAAkE;AAAA,IACpF;AACA,WAAO,EAAE,MAAM,QAAQ,MAAM,KAAK;AAAA,EACpC,CAAC;AACH;AAEA,SAAS,eAAe,OAAsD;AAC5E,SAAO,MAAM;AAAA,IAAI,UACf,KAAK,SAAS,iBAAiB,EAAE,GAAG,MAAM,SAAS,iBAAiB,KAAK,OAAO,EAAE,IAAI;AAAA,EACxF;AACF;AAEO,SAAS,wBACd,UAA0C,CAAC,GACuC;AAClF,QAAM,SAAS,QAAQ,UAAU,sBAAsB,OAAO;AAC9D,SAAO;AAAA;AAAA;AAAA,IAGL,MAAM,oBAAoB,EAAE,WAAW,QAAQ,KAAK,GAAG;AACrD,YAAM,WAAW,MAAM,OAAO,SAAS,oBAAoB,WAAW,QAAQ,EAAE,KAAK,CAAC;AACtF,aAAO,SAAS,KAAK;AAAA,IACvB;AAAA,IAEA,MAAM,cAAc,SAAS;AAC3B,YAAM,WAAW,sBAAsB,OAAO;AAC9C,UAAI,QAAQ,cAAc,UAAa,QAAQ,UAAU,SAAS,GAAG;AACnE,cAAM,UAAU,MAAM,OAAO,SAAS,OAAO;AAAA,UAC3C,OAAO,EAAE,MAAM,QAAQ,UAAU;AAAA,UACjC,GAAI,aAAa,SAAY,CAAC,IAAI,EAAE,SAAS;AAAA,QAC/C,CAAC;AACD,eAAO,YAAY,QAAQ,IAAI;AAAA,MACjC;AACA,UAAI,QAAQ,cAAc,QAAW;AACnC,cAAM,UAAU,MAAM,OAAO,SAAS,OAAO;AAAA,UAC3C,OAAO,EAAE,MAAM,mBAAmB,QAAQ,SAAS,EAAE;AAAA,UACrD,GAAI,aAAa,SAAY,CAAC,IAAI,EAAE,SAAS;AAAA,QAC/C,CAAC;AACD,eAAO,YAAY,QAAQ,IAAI;AAAA,MACjC;AACA,YAAM,IAAI,MAAM,+CAA+C;AAAA,IACjE;AAAA,IAEA,MAAM,aAAa,UAAU,CAAC,GAAG;AAC/B,YAAM,OAAO,MAAM,OAAO,SAAS,KAAK;AAAA,QACtC,GAAI,QAAQ,UAAU,SAAY,CAAC,IAAI,EAAE,OAAO,QAAQ,MAAM;AAAA,QAC9D,GAAI,QAAQ,UAAU,SAAY,CAAC,IAAI,EAAE,OAAO,QAAQ,MAAM;AAAA,QAC9D,GAAI,QAAQ,cAAc,SAAY,CAAC,IAAI,EAAE,WAAW,QAAQ,UAAU;AAAA,QAC1E,GAAI,QAAQ,YAAY,UAAa,QAAQ,QAAQ,WAAW,IAAI,CAAC,IAAI,EAAE,SAAS,QAAQ,QAAQ;AAAA,QACpG,GAAI,QAAQ,gBAAgB,SAAY,CAAC,IAAI,EAAE,aAAa,QAAQ,YAAY;AAAA,MAClF,CAAC;AACD,aAAO,aAAa,MAAM,WAAW;AAAA,IACvC;AAAA,IAEA,MAAM,WAAW,EAAE,UAAU,GAAG;AAC9B,YAAM,WAAW,MAAM,OAAO,SAAS,IAAI,SAAS;AACpD,aAAO,YAAY,SAAS,IAAI;AAAA,IAClC;AAAA,IAEA,MAAM,cAAc,EAAE,UAAU,GAAG;AACjC,YAAM,OAAO,SAAS,OAAO,SAAS;AAAA,IACxC;AAAA,IAEA,MAAM,cAAc,EAAE,WAAW,UAAU,GAAG;AAE5C,YAAM,WAAW,MAAM,OAAO,SAAS,OAAO,WAAW;AAAA,QACvD,GAAI,cAAc,SAAY,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,mBAAmB,SAAS,EAAE,EAAE;AAAA,MACtF,CAAC;AACD,aAAO,YAAY,SAAS,IAAI;AAAA,IAClC;AAAA,IAEA,OAAO,WAAW;AAAA,MAChB;AAAA,MACA;AAAA,MACA;AAAA,IACF,GAIG;AACD,YAAM,SAAS,MAAM,OAAO,SAAS,iBAAiB,WAAW;AAAA,QAC/D,GAAI,UAAU,SAAY,CAAC,IAAI,EAAE,OAAO,eAAe,KAAK,EAAE;AAAA,QAC9D,GAAI,mBAAmB,SAAY,CAAC,IAAI,EAAE,eAAe;AAAA,MAC3D,CAAC;AACD,UAAI,mBAAmB;AACvB,uBAAiB,QAAQ,OAAO,aAAa,GAAG;AAC9C,cAAM;AAAA,UACJ,gBAAgB,eAAe,KAAK,IAAI,gBAAgB;AAAA,UACxD,OAAO,mBAAmB,KAAK,IAAI;AAAA,QACrC;AACA,4BAAoB;AAAA,MACtB;AAAA,IACF;AAAA;AAAA,IAGA,OAAO,gBAAgB;AAAA,MACrB;AAAA,MACA;AAAA,MACA;AAAA,IACF,GAIG;AACD,YAAM,SAAS,MAAM,OAAO,SAAS,gBAAgB,WAAW,QAAQ;AAAA,QACtE,GAAI,wBAAwB,SAAY,CAAC,IAAI,EAAE,oBAAoB;AAAA,MACrE,CAAC;AACD,UAAI,mBAAmB;AACvB,uBAAiB,QAAQ,OAAO,aAAa,GAAG;AAC9C,cAAM;AAAA,UACJ,gBAAgB,eAAe,KAAK,IAAI,gBAAgB;AAAA,UACxD,OAAO,mBAAmB,KAAK,IAAI;AAAA,QACrC;AACA,4BAAoB;AAAA,MACtB;AAAA,IACF;AAAA,IAEA,MAAM,cAAc,EAAE,UAAU,GAAG;AACjC,YAAM,OAAO,SAAS,OAAO,SAAS;AAAA,IACxC;AAAA,IAEA,MAAM,UAAU,EAAE,WAAW,OAAO,UAAU,GAAG;AAC/C,YAAM,OAAO,MAAM,OAAO,SAAS,UAAU,WAAW;AAAA,QACtD,GAAI,UAAU,SAAY,CAAC,IAAI,EAAE,MAAM;AAAA,QACvC,GAAI,cAAc,SAAY,CAAC,IAAI,EAAE,UAAU;AAAA,MACjD,CAAC;AACD,aAAO,aAAa,MAAM,QAAQ;AAAA,IACpC;AAAA,IAEA,MAAM,QAAQ,EAAE,WAAW,OAAO,GAAG;AACnC,YAAM,WAAW,MAAM,OAAO,SAAS,QAAQ,WAAW,MAAM;AAChE,aAAO,SAAS,SAAS,IAAI;AAAA,IAC/B;AAAA,IAEA,MAAM,WAAW,EAAE,WAAW,WAAW,YAAY,MAAM,GAAG;AAC5D,YAAM,OAAO,MAAM,OAAO,SAAS,WAAW,WAAW;AAAA,QACvD,GAAI,cAAc,SAAY,CAAC,IAAI,EAAE,UAAU;AAAA,QAC/C,GAAI,eAAe,SAAY,CAAC,IAAI,EAAE,WAAW;AAAA,QACjD,GAAI,UAAU,SAAY,CAAC,IAAI,EAAE,MAAM;AAAA,MACzC,CAAC;AACD,aAAO,aAAa,MAAM,aAAa;AAAA,IACzC;AAAA,EACF;AACF;;;ACjRA,SAAS,mBAAmB,SAAwD;AAClF,SAAO;AAAA,IACL,IAAI,QAAQ;AAAA,IACZ,WAAW,QAAQ;AAAA,IACnB,WAAW,QAAQ;AAAA,IACnB,gBAAgB,QAAQ;AAAA,IACxB,eAAe,yBAAyB,QAAQ,QAAQ;AAAA,IACxD,WAAW,QAAQ,MAAM,SAAS;AAAA,IAClC,SAAS;AAAA,MACP,YAAY,QAAQ,QAAQ;AAAA,MAC5B,GAAI,QAAQ,QAAQ,kBAAkB,OAAO,CAAC,IAAI,EAAE,gBAAgB,QAAQ,QAAQ,eAAe;AAAA,MACnG,iBAAiB,QAAQ,QAAQ;AAAA,IACnC;AAAA,IACA,GAAI,QAAQ,UAAU,OAAO,CAAC,IAAI,EAAE,OAAO,QAAQ,MAAM;AAAA,IACzD,GAAI,QAAQ,MAAM,SAAS,eAAe,QAAQ,MAAM,SAAS,OAAO,EAAE,WAAW,QAAQ,MAAM,KAAK,IAAI,CAAC;AAAA,IAC7G,GAAI,QAAQ,MAAM,SAAS,WAAW,EAAE,WAAW,cAAc,QAAQ,MAAM,IAAI,EAAE,IAAI,CAAC;AAAA,IAC1F,GAAI,QAAQ,QAAQ,SAAS,aAAa,EAAE,YAAY,QAAQ,OAAO,KAAK,IAAI,CAAC;AAAA,EACnF;AACF;AAEO,SAAS,iCACd,UAAmD,CAAC,GACb;AACvC,QAAM,SAAS,QAAQ,UAAU,sBAAsB,OAAO;AAE9D,SAAO;AAAA,IACL,MAAM,SAAS,EAAE,QAAQ,GAAG;AAC1B,YAAM,EAAE,KAAK,IAAI,MAAM,OAAO,OAAO,IAAI,OAAO;AAChD,aAAO;AAAA,QACL,SAAS,KAAK;AAAA,QACd,MAAM,KAAK;AAAA,QACX,WAAW,cAAc,KAAK,QAAQ;AAAA,MACxC;AAAA,IACF;AAAA,IACA,MAAM,gBAAgB,EAAE,QAAQ,GAAG;AAEjC,YAAM,kBAAkB,wBAAwB,QAAQ,WAAW,GAAG,EAAE,QAAQ,OAAO,EAAE;AACzF,YAAM,EAAE,KAAK,IAAI,MAAM,OAAO,SAAS,OAAO;AAAA,QAC5C;AAAA,QACA,gBAAgB,KAAK,eAAe,IAAI,EAAE,SAAS,gBAAgB,IAAI;AAAA,MACzE;AACA,aAAO,KAAK;AAAA,IACd;AAAA,IACA,MAAM,aAAa,gBAAgB,CAAC,GAAG;AACrC,YAAM,OAAO,MAAM,OAAO,SAAS,KAAK;AAAA,QACtC,GAAI,cAAc,UAAU,SAAY,CAAC,IAAI,EAAE,OAAO,cAAc,MAAM;AAAA,QAC1E,GAAI,cAAc,UAAU,SAAY,CAAC,IAAI,EAAE,OAAO,cAAc,MAAM;AAAA,QAC1E,GAAI,cAAc,cAAc,SAAY,CAAC,IAAI,EAAE,WAAW,cAAc,UAAU;AAAA,QACtF,GAAI,cAAc,mBAAmB,SACjC,CAAC,IACD,EAAE,gBAAgB,aAAa,cAAc,cAAc,EAAE;AAAA,QACjE,GAAI,cAAc,iBAAiB,SAAY,CAAC,IAAI,EAAE,cAAc,aAAa,cAAc,YAAY,EAAE;AAAA,QAC7G,GAAI,cAAc,YAAY,UAAa,cAAc,QAAQ,WAAW,IACxE,CAAC,IACD,EAAE,SAAS,cAAc,QAAQ;AAAA,QACrC,GAAI,cAAc,gBAAgB,SAAY,CAAC,IAAI,EAAE,aAAa,cAAc,YAAY;AAAA,MAC9F,CAAC;AACD,aAAO,aAAa,MAAM,kBAAkB;AAAA,IAC9C;AAAA,IACA,MAAM,kBAAkB,EAAE,WAAW,WAAW,MAAM,GAAG;AACvD,YAAM,OAAO,MAAM,OAAO,SAAS,WAAW,WAAW;AAAA,QACvD,GAAI,cAAc,SAAY,CAAC,IAAI,EAAE,UAAU;AAAA,QAC/C,GAAI,UAAU,SAAY,CAAC,IAAI,EAAE,MAAM;AAAA,MACzC,CAAC;AACD,aAAO,aAAa,MAAM,aAAa;AAAA,IACzC;AAAA,EACF;AACF;;;ACnEA,IAAM,yBAAyB;AAExB,SAAS,eAAe,MAA6E;AAC1G,MAAI,SAAS,QAAW;AACtB,WAAO,EAAE,MAAM,OAAO;AAAA,EACxB;AACA,MAAI,KAAK,SAAS,OAAO;AACvB,WAAO,EAAE,MAAM,MAAM;AAAA,EACvB;AACA,QAAM,aAAa,OAAO,KAAK,KAAK,OAAO,EAAE,CAAC;AAC9C,SAAO;AAAA,IACL,MAAM;AAAA,IACN,GAAI,eAAe,SAAY,CAAC,IAAI,EAAE,WAAW;AAAA,EACnD;AACF;AAEO,SAAS,cAAc,MAAqE;AACjG,MAAI,KAAK,SAAS,QAAQ;AACxB,WAAO;AAAA,EACT;AACA,MAAI,KAAK,SAAS,OAAO;AACvB,WAAO,EAAE,MAAM,MAAM;AAAA,EACvB;AACA,QAAM,SAAS,KAAK,QAAQ,KAAK;AACjC,MAAI,WAAW,UAAa,WAAW,IAAI;AACzC,UAAM,IAAI,MAAM,0DAA0D;AAAA,EAC5E;AACA,QAAM,gBAAgB,KAAK,YAAY,KAAK;AAC5C,QAAM,aAAa,kBAAkB,UAAa,kBAAkB,KAAK,gBAAgB;AACzF,SAAO,EAAE,MAAM,UAAU,SAAS,EAAE,CAAC,UAAU,GAAG,OAAO,EAAE;AAC7D;AAEO,SAAS,iBAAiB,QAAgE;AAC/F,SAAO;AAAA,IACL,IAAI,OAAO;AAAA,IACX,MAAM,OAAO;AAAA,IACb,KAAK,OAAO;AAAA,IACZ,aAAa,OAAO;AAAA,IACpB,GAAI,OAAO,SAAS,SAAY,CAAC,IAAI,EAAE,MAAM,OAAO,KAAK;AAAA,IACzD,MAAM,eAAe,OAAO,IAAI;AAAA,EAClC;AACF;AAOA,SAAS,oBAAoB,OAA+C;AAC1E,MAAI,OAAO,UAAU,YAAY,UAAU,KAAM,QAAO;AACxD,QAAM,eAAe,QAAQ,IAAI,OAAO,cAAc;AACtD,QAAM,kBAAkB,QAAQ,IAAI,OAAO,iBAAiB;AAC5D,QAAM,cAAiC;AAAA,IACrC,GAAI,OAAO,iBAAiB,YAAY,EAAE,aAAa,IAAI,CAAC;AAAA,IAC5D,GAAI,OAAO,oBAAoB,YAAY,EAAE,gBAAgB,IAAI,CAAC;AAAA,EACpE;AACA,SAAO,OAAO,KAAK,WAAW,EAAE,SAAS,IAAI,cAAc;AAC7D;AAEO,SAAS,SAAS,MAA+E;AACtG,QAAM,OAAO,OAAO,KAAK,SAAS,YAAY,KAAK,SAAS,KAAK,KAAK,OAAO;AAC7E,QAAM,cAAc,OAAO,KAAK,gBAAgB,WAAW,KAAK,cAAc;AAC9E,QAAM,cAAc,oBAAoB,QAAQ,IAAI,MAAM,aAAa,CAAC;AACxE,SAAO,gBAAgB,SAAY,EAAE,IAAI,MAAM,MAAM,YAAY,IAAI,EAAE,IAAI,MAAM,MAAM,aAAa,YAAY;AAClH;AAEO,SAAS,cAAc,QAAuD;AACnF,QAAM,OAAO,eAAe,OAAO,SAAS,IAAI;AAChD,SAAO;AAAA,IACL,IAAI,OAAO;AAAA,IACX,MAAM,OAAO;AAAA,IACb,aAAa,OAAO,SAAS;AAAA,IAC7B,KAAK,OAAO,SAAS;AAAA,IACrB;AAAA,IACA,cAAc,OAAO,WAAW,WAAW;AAAA,IAC3C,eAAe,OAAO,WAAW,WAAW;AAAA,EAC9C;AACF;AAEO,SAAS,2BAA2B,QAAsD;AAC/F,QAAM,OAA8B,OAAO,MAAM,OAAO,EAAE,MAAM,OAAO,KAAK,KAAK,IAAI,EAAE,MAAM,OAAO;AACpG,SAAO;AAAA,IACL,IAAI,OAAO;AAAA,IACX,MAAM,OAAO;AAAA,IACb,aAAa,OAAO;AAAA,IACpB,KAAK,OAAO;AAAA,IACZ;AAAA,IACA,cAAc,OAAO,WAAW,WAAW;AAAA,IAC3C,eAAe,OAAO,WAAW,WAAW;AAAA,EAC9C;AACF;AAEO,SAAS,kBAAkB,KAKC;AACjC,QAAM,OAAO,cAAc,IAAI,IAAI;AACnC,QAAM,UAAU,IAAI,aAAa,KAAK;AACtC,SAAO;AAAA,IACL,MAAM;AAAA,IACN,MAAM,IAAI;AAAA,IACV,KAAK,IAAI;AAAA,IACT,aAAa,YAAY,UAAa,YAAY,KAAK,UAAU,GAAG,IAAI,IAAI;AAAA,IAC5E,GAAI,SAAS,SAAY,CAAC,IAAI,EAAE,KAAK;AAAA,EACvC;AACF;AAGO,SAAS,uBACd,QASA;AACA,iBAAe,cAAc,MAAyD;AACpF,UAAM,SAAS,MAAM,OAAO,SAAS,WAAW,KAAK;AACrD,UAAM,WAAW,OAAO,KAAK,KAAK,YAAU,OAAO,SAAS,IAAI;AAChE,QAAI,aAAa,QAAW;AAC1B,YAAM,IAAI,MAAM,eAAe,IAAI,aAAa;AAAA,IAClD;AACA,WAAO;AAAA,EACT;AAEA,iBAAe,iBAAiB,KAAmE;AACjG,QAAI,IAAI,KAAK,SAAS,UAAU;AAC9B,aAAO,IAAI;AAAA,IACb;AACA,UAAM,SAAS,IAAI,KAAK,QAAQ,KAAK;AACrC,QAAI,WAAW,UAAa,WAAW,IAAI;AACzC,aAAO,IAAI;AAAA,IACb;AACA,QAAI,IAAI,OAAO,QAAW;AACxB,YAAM,IAAI,MAAM,0DAA0D;AAAA,IAC5E;AACA,UAAM,WAAW,MAAM,cAAc,IAAI,EAAE;AAC3C,QAAI,SAAS,SAAS,MAAM,SAAS,UAAU;AAC7C,YAAM,IAAI,MAAM,eAAe,IAAI,EAAE,6CAA6C;AAAA,IACpF;AACA,UAAM,kBAAkB,IAAI,KAAK,YAAY,KAAK;AAClD,UAAM,mBAAmB,OAAO,KAAK,SAAS,SAAS,KAAK,OAAO,EAAE,CAAC;AACtE,UAAM,aACJ,oBAAoB,UAAa,oBAAoB,KACjD,kBACC,oBAAoB;AAC3B,UAAM,SAAS,SAAS,SAAS,KAAK,QAAQ,UAAU,KAAK,OAAO,OAAO,SAAS,SAAS,KAAK,OAAO,EAAE,CAAC;AAC5G,QAAI,WAAW,QAAW;AACxB,YAAM,IAAI,MAAM,eAAe,IAAI,EAAE,6CAA6C;AAAA,IACpF;AACA,WAAO,EAAE,MAAM,UAAU,QAAQ,QAAQ,WAAW;AAAA,EACtD;AAEA,SAAO;AAAA,IACL,qBAAqB,YAAY;AAC/B,YAAM,OAAO,MAAM,OAAO,SAAS,WAAW,KAAK;AACnD,aAAO,KAAK,KAAK,IAAI,gBAAgB;AAAA,IACvC;AAAA,IACA,cAAc,OAAM,QAAO;AACzB,YAAM,OAAO,MAAM,OAAO,SAAS,WAAW,IAAI,IAAI,EAAE;AACxD,aAAO,cAAc,KAAK,IAAI;AAAA,IAChC;AAAA,IACA,gBAAgB,OAAM,QAAO;AAC3B,YAAM,OAAO,MAAM,OAAO,SAAS,WAAW,KAAK;AACnD,YAAM,aAAa,KAAK,KAAK,IAAI,aAAa;AAC9C,YAAM,QAAQ,KAAK,OAAO,KAAK,EAAE,YAAY;AAC7C,UAAI,UAAU,UAAa,UAAU,IAAI;AACvC,eAAO;AAAA,MACT;AACA,aAAO,WAAW;AAAA,QAChB,eACE,UAAU,KAAK,YAAY,EAAE,SAAS,KAAK,KAC3C,UAAU,YAAY,YAAY,EAAE,SAAS,KAAK,KAClD,UAAU,IAAI,YAAY,EAAE,SAAS,KAAK;AAAA,MAC9C;AAAA,IACF;AAAA,IACA,uBAAuB,OAAO,EAAE,GAAG,MAAM;AACvC,YAAM,OAAO,MAAM,OAAO,WAAW,UAAU,EAAE;AACjD,aAAO,KAAK,KAAK,IAAI,QAAQ;AAAA,IAC/B;AAAA,IACA,iBAAiB,OAAM,QAAO;AAC5B,YAAM,OAAO,MAAM,iBAAiB,EAAE,MAAM,IAAI,KAAK,CAAC;AACtD,YAAM,OAAO,MAAM,OAAO,SAAS,WAAW,OAAO;AAAA,QACnD,UAAU,kBAAkB;AAAA,UAC1B,MAAM,IAAI;AAAA,UACV,KAAK,IAAI;AAAA,UACT;AAAA,UACA,aAAa,IAAI;AAAA,QACnB,CAAC;AAAA,MACH,CAAC;AACD,aAAO,cAAc,KAAK,IAAI;AAAA,IAChC;AAAA,IACA,iBAAiB,OAAM,QAAO;AAC5B,YAAM,OAAO,MAAM,iBAAiB,EAAE,IAAI,IAAI,IAAI,MAAM,IAAI,KAAK,CAAC;AAClE,YAAM,OAAO,MAAM,OAAO,SAAS,WAAW,eAAe;AAAA,QAC3D,UAAU,kBAAkB;AAAA,UAC1B,MAAM,IAAI;AAAA,UACV,KAAK,IAAI;AAAA,UACT;AAAA,UACA,aAAa,IAAI;AAAA,QACnB,CAAC;AAAA,MACH,CAAC;AACD,aAAO,cAAc,KAAK,IAAI;AAAA,IAChC;AAAA,IACA,uBAAuB,OAAM,QAAO;AAClC,YAAM,SAAS,MAAM,OAAO,WAAW;AAAA,QACrC,IAAI;AAAA,QACJ,IAAI,aAAa,SAAY,CAAC,IAAI,EAAE,UAAU,IAAI,SAAS;AAAA,MAC7D;AACA,aAAO,EAAE,QAAQ,OAAO,QAAQ,wBAAwB,OAAO,iBAAiB;AAAA,IAClF;AAAA,IACA,qBAAqB,OAAM,QAAO;AAChC,YAAM,WAAW,MAAM,cAAc,IAAI,EAAE;AAC3C,UAAI,SAAS,SAAS,MAAM,SAAS,OAAO;AAC1C,cAAM,IAAI,MAAM,oDAAoD;AAAA,MACtE;AACA,YAAM,OAAO,MAAM,OAAO,WAAW,oBAAoB,IAAI,EAAE;AAC/D,aAAO,cAAc,KAAK,IAAI;AAAA,IAChC;AAAA,EACF;AACF;;;AClPA,eAAsB,WAAW,QAA2D;AAC1F,QAAM,OAAO,MAAM,OAAO,OAAO,KAAK;AACtC,SAAO,KAAK;AACd;AAEA,eAAsB,yBAAyB,QAA+D;AAC5G,QAAM,OAAO,MAAM,OAAO,WAAW,KAAK;AAC1C,SAAO,KAAK;AACd;AAEA,eAAsB,WAAW,QAA2D;AAC1F,QAAM,OAAO,MAAM,OAAO,OAAO,KAAK;AACtC,SAAO,KAAK;AACd;AAEA,eAAsB,gBAAgB,QAA2D;AAC/F,QAAM,OAAO,MAAM,OAAO,OAAO,gBAAgB;AACjD,SAAO,KAAK;AACd;;;ACPO,SAAS,yBACd,SAC6B;AAC7B,QAAM,QAAQ,oBAAI,IAAoB;AACtC,aAAW,SAAS,SAAS;AAC3B,QAAI,MAAM,SAAS,YAAY,MAAM,SAAS,QAAW;AACvD;AAAA,IACF;AACA,UAAM,IAAI,MAAM,MAAM,MAAM,IAAI;AAAA,EAClC;AACA,SAAO;AACT;AAGO,SAAS,iBAAiB;AAAA,EAC/B;AAAA,EACA;AACF,GAGmB;AACjB,QAAM,EAAE,eAAe,iBAAiB,iBAAiB,IAAI,MAAM;AACnE,SAAO;AAAA,IACL,IAAI,MAAM;AAAA,IACV,MAAM,MAAM;AAAA,IACZ,UAAU;AAAA,MACR,MAAM,MAAM,SAAS;AAAA,MACrB,GAAI,SAAS,SAAY,CAAC,IAAI,EAAE,KAAK;AAAA,IACvC;AAAA,IACA,YAAY;AAAA,MACV,GAAI,kBAAkB,SAAY,CAAC,IAAI,EAAE,cAAc;AAAA,MACvD,GAAI,oBAAoB,SAAY,CAAC,IAAI,EAAE,gBAAgB;AAAA,MAC3D,GAAI,qBAAqB,SAAY,CAAC,IAAI,EAAE,kBAAkB,CAAC,GAAG,gBAAgB,EAAE;AAAA,IACtF;AAAA,EACF;AACF;AAEA,SAAS,eAAe,OAA8C;AACpE,SAAO;AAAA,IACL,MAAM,MAAM;AAAA,IACZ,SAAS,MAAM;AAAA,IACf,WAAW,cAAc,MAAM,QAAQ;AAAA,IACvC,kBAAkB,MAAM;AAAA,EAC1B;AACF;AAEO,SAAS,2BACd,UAA6C,CAAC,GACR;AACtC,QAAM,SAAS,QAAQ,UAAU,sBAAsB,OAAO;AAE9D,SAAO;AAAA,IACL,iBAAiB,MAAM,OAAO,OAAO,gBAAgB;AAAA,IACrD,WAAW,YAAY;AAErB,YAAM,CAAC,YAAY,cAAc,IAAI,MAAM,QAAQ,IAAI;AAAA,QACrD,OAAO,OAAO,KAAK;AAAA,QACnB,OAAO,SAAS,eAAe,KAAK,EAAE;AAAA,UACpC,UAAQ,KAAK;AAAA,UACb,MAAM,CAAC;AAAA,QACT;AAAA,MACF,CAAC;AACD,YAAM,cAAc,yBAAyB,cAAc;AAC3D,aAAO,WAAW,KAAK,IAAI,WAAS;AAClC,cAAM,OAAO,YAAY,IAAI,MAAM,SAAS,IAAI;AAChD,eAAO,iBAAiB,SAAS,SAAY,EAAE,MAAM,IAAI,EAAE,OAAO,KAAK,CAAC;AAAA,MAC1E,CAAC;AAAA,IACH;AAAA;AAAA;AAAA;AAAA;AAAA,IAKA,WAAW,YAAY;AACrB,YAAM,SAAS,MAAM,WAAW,MAAM;AACtC,aAAO,OAAO,IAAI,WAAS;AACzB,cAAM,EAAE,cAAc,iBAAiB,SAAS,WAAW,IAAI,MAAM,YAAY,CAAC;AAClF,cAAM,UAAU,OAAO,UAAU;AACjC,cAAM,aAAa,OAAO,UAAU,OAAO,KAAK,UAAU;AAC1D,eAAO;AAAA,UACL,IAAI,MAAM;AAAA,UACV,MAAM,gBAAgB,MAAM;AAAA,UAC5B,aAAa,MAAM;AAAA,UACnB,GAAI,oBAAoB,SAAY,CAAC,IAAI,EAAE,eAAe,gBAAgB;AAAA,UAC1E,GAAI,aACA;AAAA,YACE;AAAA,YACA,cAAc,aAAa,MAAM,OAAO,OAAO,aAAa,EAAE,MAAM,MAAM,KAAK,CAAC,GAAG;AAAA,UACrF,IACA,CAAC;AAAA,QACP;AAAA,MACF,CAAC;AAAA,IACH;AAAA,IACA,QAAQ,aAAa,MAAM,yBAAyB,MAAM,GAAG,IAAI,0BAA0B;AAAA,IAC3F,iBAAiB,OAAO,EAAE,YAAY,MAA+B;AACnE,YAAM,OAAO,MAAM,OAAO,WAAW,IAAI,WAAW;AACpD,aAAO,2BAA2B,KAAK,IAAI;AAAA,IAC7C;AAAA,IACA,aAAa,OAAO,EAAE,YAAY,MAA+B;AAC/D,YAAM,OAAO,MAAM,OAAO,WAAW,UAAU,WAAW;AAC1D,aAAO,KAAK,KAAK;AAAA,QAAQ,UACvB,OAAO,KAAK,SAAS,YAAY,KAAK,KAAK,KAAK,MAAM,KAAK,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC;AAAA,MACjF;AAAA,IACF;AAAA,IAEA,MAAM,aAAa,KAA0B;AAC3C,YAAM,EAAE,KAAK,IAAI,MAAM,OAAO,OAAO,KAAK;AAC1C,YAAM,QAAQ,KAAK,OAAO,KAAK,EAAE,YAAY;AAC7C,YAAM,WACJ,UAAU,UAAa,UAAU,KAAK,OAAO,KAAK,OAAO,WAAS,MAAM,KAAK,YAAY,EAAE,SAAS,KAAK,CAAC;AAC5G,YAAM,SAAS,KAAK,UAAU;AAC9B,YAAM,QAAQ,KAAK,SAAS;AAC5B,aAAO,SAAS,MAAM,QAAQ,SAAS,KAAK,EAAE,IAAI,cAAc;AAAA,IAClE;AAAA,IAEA,MAAM,UAAU,EAAE,WAAW,WAAW,OAAO,GAAG;AAEhD,YAAM,WAAW,mBAAmB,SAAS;AAC7C,UAAI,WAAW,UAAU;AACvB,cAAM,EAAE,KAAK,IAAI,MAAM,OAAO,OAAO,KAAK;AAC1C,cAAM,WAAW,KAAK,KAAK,WAAS,MAAM,SAAS,SAAS;AAC5D,YAAI,CAAC,UAAU;AACb,iBAAO,CAAC;AAAA,QACV;AACA,cAAM,OAAO,OAAO,OAAO,SAAS,IAAI,EAAE,SAAS,CAAC;AACpD,eAAO,EAAE,SAAS,SAAS,GAAG;AAAA,MAChC;AACA,YAAM,UAAU,MAAM,OAAO,OAAO,OAAO,EAAE,MAAM,WAAW,SAAS,CAAC;AACxE,aAAO,EAAE,SAAS,QAAQ,KAAK,GAAG;AAAA,IACpC;AAAA,IAEA,MAAM,YAAY,EAAE,UAAU,GAAG;AAC/B,YAAM,EAAE,KAAK,IAAI,MAAM,OAAO,OAAO,KAAK;AAC1C,YAAM,WAAW,KAAK,KAAK,WAAS,MAAM,SAAS,SAAS;AAC5D,UAAI,CAAC,SAAU;AACf,YAAM,OAAO,OAAO,OAAO,SAAS,EAAE;AAAA,IACxC;AAAA,EACF;AACF;;;ACnJA,SAAS,oBAAoB;AAkBtB,SAAS,eAAe,OAAmD;AAChF,SAAO;AAAA,IACL,IAAI,MAAM;AAAA,IACV,MAAM,MAAM;AAAA,IACZ,YAAY,MAAM;AAAA,EACpB;AACF;AAEO,SAAS,oBAAoB,OAAmD;AACrF,SAAO;AAAA,IACL,SAAS,MAAM;AAAA,IACf,MAAM,MAAM;AAAA,IACZ,YAAY,MAAM,cAAc,CAAC;AAAA,EACnC;AACF;AAEO,SAAS,kBAAkB,UAAiE;AACjG,QAAM,EAAE,MAAM,SAAS,IAAI;AAC3B,SAAO;AAAA,IACL,IAAI;AAAA,IACJ,MAAM,SAAS;AAAA,IACf;AAAA,IACA,GAAI,SAAS,YAAY,SAAY,CAAC,IAAI,EAAE,SAAS,SAAS,QAAQ;AAAA,IACtE,QAAQ,SAAS,OAAO,IAAI,cAAc;AAAA,EAC5C;AACF;AAEO,SAAS,8BACd,UAC6B;AAC7B,MAAI,SAAS,SAAS,UAAU;AAC9B,WAAO;AAAA,MACL,MAAM,SAAS;AAAA,MACf,MAAM,SAAS;AAAA,MACf,2BAA2B,SAAS;AAAA,MACpC,QAAQ,CAAC;AAAA,IACX;AAAA,EACF;AACA,SAAO;AAAA,IACL,MAAM,SAAS;AAAA,IACf,MAAM,SAAS;AAAA,IACf,GAAI,SAAS,SAAS,SAAY,CAAC,IAAI,EAAE,MAAM,SAAS,KAAK;AAAA,IAC7D,QAAQ,SAAS,OAAO,IAAI,cAAc;AAAA,EAC5C;AACF;AAEA,IAAM,iBAAoC,CAAC,GAAG,OAAO,OAAO,aAAa,iCAAiC,GAAG,QAAQ;AAErH,SAAS,eAAe,MAA0F;AAChH,SAAO,eAAe,SAAS,IAAI;AACrC;AAEO,SAAS,uBAAuB,KAMA;AACrC,QAAM,SAAS,IAAI,OAAO,IAAI,mBAAmB;AACjD,MAAI,CAAC,eAAe,IAAI,IAAI,GAAG;AAC7B,UAAM,IAAI,MAAM,oCAAoC,IAAI,IAAI,EAAE;AAAA,EAChE;AACA,QAAM,UAAU,IAAI,SAAS,KAAK,MAAM,KAAK,SAAY,IAAI;AAE7D,MAAI,IAAI,SAAS,UAAU;AACzB,QAAI,YAAY,QAAW;AACzB,YAAM,IAAI,MAAM,4BAA4B,IAAI,IAAI,sBAAsB;AAAA,IAC5E;AAEA,WAAO;AAAA,MACL,MAAM,IAAI;AAAA,MACV,MAAM,IAAI;AAAA,MACV;AAAA,MACA;AAAA,MACA,GAAI,IAAI,WAAW,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,IAAI,OAAO,EAAE;AAAA,IAC9D;AAAA,EACF;AACA,QAAM,OAAO,EAAE,QAAQ,IAAI,OAAO;AAClC,MAAI,YAAY,QAAW;AACzB,WAAO,EAAE,MAAM,IAAI,MAAM,MAAM,QAAQ,QAAQ;AAAA,EACjD;AACA,SAAO,EAAE,MAAM,IAAI,MAAM,MAAM,OAAO;AACxC;AAGO,SAAS,2BACd,QAOA;AACA,iBAAe,cAAc,KAAsE;AACjG,UAAM,UAAU,IAAI,OAAO,KAAK;AAChC,QAAI,YAAY,IAAI;AAClB,aAAO;AAAA,IACT;AACA,QAAI,IAAI,OAAO,QAAW;AAExB,UAAI,IAAI,SAAS,UAAU;AACzB,eAAO;AAAA,MACT;AACA,YAAM,IAAI,MAAM,qBAAqB;AAAA,IACvC;AAEA,UAAM,SAAS,MAAM,OAAO,SAAS,eAAe,KAAK;AACzD,UAAM,WAAW,OAAO,KAAK,KAAK,cAAY,SAAS,SAAS,IAAI,EAAE;AACtE,QAAI,aAAa,QAAW;AAC1B,YAAM,IAAI,MAAM,mBAAmB,IAAI,EAAE,aAAa;AAAA,IACxD;AACA,WAAO,SAAS,SAAS,MAAM,UAAU;AAAA,EAC3C;AAEA,SAAO;AAAA,IACL,yBAAyB,YAAY;AACnC,YAAM,OAAO,MAAM,OAAO,SAAS,eAAe,KAAK;AACvD,aAAO,KAAK,KAAK,IAAI,6BAA6B;AAAA,IACpD;AAAA,IACA,oBAAoB,YAAY;AAC9B,YAAM,OAAO,MAAM,OAAO,SAAS,eAAe,KAAK;AACvD,aAAO,KAAK,KAAK,IAAI,iBAAiB;AAAA,IACxC;AAAA,IACA,qBAAqB,OAAM,QAAO;AAChC,YAAM,SAAS,MAAM,cAAc,EAAE,MAAM,IAAI,MAAM,QAAQ,IAAI,OAAO,CAAC;AACzE,YAAM,OAAO,MAAM,OAAO,SAAS,eAAe,OAAO;AAAA,QACvD,UAAU,uBAAuB;AAAA,UAC/B,MAAM,IAAI;AAAA,UACV,MAAM,IAAI;AAAA,UACV;AAAA,UACA,GAAI,IAAI,YAAY,SAAY,CAAC,IAAI,EAAE,SAAS,IAAI,QAAQ;AAAA,UAC5D,QAAQ,IAAI;AAAA,QACd,CAAC;AAAA,MACH,CAAC;AACD,aAAO,kBAAkB,KAAK,IAAI;AAAA,IACpC;AAAA,IACA,qBAAqB,OAAM,QAAO;AAEhC,YAAM,SAAS,MAAM,cAAc,EAAE,IAAI,IAAI,IAAI,MAAM,IAAI,MAAM,QAAQ,IAAI,OAAO,CAAC;AACrF,YAAM,OAAO,MAAM,OAAO,SAAS,eAAe,eAAe;AAAA,QAC/D,UAAU,uBAAuB;AAAA,UAC/B,MAAM,IAAI;AAAA,UACV,MAAM,IAAI;AAAA,UACV;AAAA,UACA,GAAI,IAAI,YAAY,SAAY,CAAC,IAAI,EAAE,SAAS,IAAI,QAAQ;AAAA,UAC5D,QAAQ,IAAI;AAAA,QACd,CAAC;AAAA,MACH,CAAC;AACD,aAAO,kBAAkB,KAAK,IAAI;AAAA,IACpC;AAAA,EACF;AACF;;;ACzKA,SAAS,gBAAAA,qBAAoB;AAa7B,IAAM,eAAe;AACrB,IAAM,uBAAuB;AAE7B,SAAS,mBAAmB,MAAsB;AAChD,MAAI,SAAS,cAAc;AACzB,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAEO,SAAS,kBACd,UACuB;AACvB,SAAO;AAAA,IACL,eAAe,SAAS;AAAA,IACxB,2BAA2B,SAAS;AAAA,IACpC,8BAA8B,SAAS;AAAA,IACvC,6BAA6B,SAAS;AAAA,EACxC;AACF;AAEO,SAASC,kBAAiB,UAA8E;AAC7G,SAAO;AAAA,IACL,IAAI,SAAS;AAAA,IACb,MAAM,mBAAmB,SAAS,IAAI;AAAA,IACtC,MAAM,SAAS;AAAA,IACf,GAAG,kBAAkB,QAAQ;AAAA,EAC/B;AACF;AAEO,SAAS,oBAAoB,UAAmE;AACrG,SAAO;AAAA,IACL,IAAI,SAAS;AAAA,IACb,MAAM,mBAAmB,SAAS,IAAI;AAAA,IACtC,WAAW,SAAS;AAAA,IACpB,aAAa;AAAA,IACb,GAAG,kBAAkB,QAAQ;AAAA,EAC/B;AACF;AAEO,SAAS,6BACd,UAC4B;AAC5B,SAAO;AAAA,IACL,MAAM,oBAAoB,SAAS,QAAQ;AAAA,IAC3C,oBAAoB;AAAA,MAClB,QAAQ,SAAS;AAAA,MACjB,GAAI,SAAS,eAAe,EAAE,cAAc,SAAS,aAAa,IAAI,CAAC;AAAA,IACzE;AAAA,EACF;AACF;AAEO,SAAS,yBAAyB;AAAA,EACvC;AAAA,EACA;AACF,GAGiC;AAC/B,QAAM,kBAAkB,OAAO,KAAK,EAAE,YAAY;AAClD,MAAI,oBAAoB,UAAa,oBAAoB,IAAI;AAC3D,WAAO;AAAA,EACT;AACA,SAAO,UAAU;AAAA,IACf,cACE,SAAS,KAAK,KAAK,YAAY,EAAE,SAAS,eAAe,KACzD,SAAS,KAAK,GAAG,YAAY,EAAE,SAAS,eAAe;AAAA,EAC3D;AACF;AAEO,SAASC,mBACd,KAIsC;AACtC,MAAI,IAAI,SAAS,cAAc;AAC7B,UAAM,IAAI,MAAM,sCAAsC,IAAI,IAAI,EAAE;AAAA,EAClE;AACA,SAAO;AAAA,IACL,MAAM;AAAA,IACN,eAAe,IAAI;AAAA,IACnB,2BAA2B,IAAI;AAAA,IAC/B,8BAA8B,IAAI;AAAA,IAClC,6BAA6B,IAAI;AAAA,IACjC,MAAM,EAAE,QAAQ,IAAI,OAAO;AAAA,EAC7B;AACF;AAGO,SAAS,6BAA6B,QAAyC;AACpF,iBAAe,cAAc,QAA6C;AACxE,UAAM,UAAU,QAAQ,KAAK;AAC7B,QAAI,YAAY,UAAa,YAAY,IAAI;AAC3C,aAAO;AAAA,IACT;AACA,UAAM,WAAW,MAAM,OAAO,SAAS,iBAAiB,IAAI;AAC5D,WAAO,SAAS,KAAK,SAAS,KAAK;AAAA,EACrC;AAEA,SAAO;AAAA,IACL,2BAA2B,YAAY;AACrC,YAAM,OAAO,MAAM,OAAO,SAAS,iBAAiB,KAAK;AACzD,aAAO,KAAK,KAAK,IAAID,iBAAgB;AAAA,IACvC;AAAA,IACA,sBAAsB,OAAM,QAAO;AACjC,UAAI;AACJ,UAAI;AACF,cAAM,OAAO,MAAM,OAAO,SAAS,iBAAiB,IAAI;AACxD,oBAAY,CAAC,6BAA6B,KAAK,IAAI,CAAC;AAAA,MACtD,SAAS,KAAK;AACZ,YAAI,eAAeD,cAAa,eAAe;AAC7C,sBAAY,CAAC;AAAA,QACf,OAAO;AACL,gBAAM;AAAA,QACR;AAAA,MACF;AACA,aAAO,yBAAyB,EAAE,WAAW,OAAO,KAAK,MAAM,CAAC;AAAA,IAClE;AAAA,IACA,uBAAuB,OAAM,QAAO;AAClC,YAAM,OAAO,MAAM,OAAO,SAAS,iBAAiB,eAAe;AAAA,QACjE,UAAUE,mBAAkB;AAAA,UAC1B,MAAM,IAAI;AAAA,UACV,QAAQ,IAAI;AAAA,UACZ,eAAe,IAAI;AAAA,UACnB,2BAA2B,IAAI;AAAA,UAC/B,8BAA8B,IAAI;AAAA,UAClC,6BAA6B,IAAI;AAAA,QACnC,CAAC;AAAA,MACH,CAAC;AACD,aAAO,oBAAoB,KAAK,KAAK,QAAQ;AAAA,IAC/C;AAAA,IACA,uBAAuB,OAAM,QAAO;AAClC,YAAM,SAAS,MAAM,cAAc,IAAI,MAAM;AAC7C,YAAM,OAAO,MAAM,OAAO,SAAS,iBAAiB,eAAe;AAAA,QACjE,UAAUA,mBAAkB;AAAA,UAC1B,MAAM;AAAA,UACN;AAAA,UACA,eAAe,IAAI;AAAA,UACnB,2BAA2B,IAAI;AAAA,UAC/B,8BAA8B,IAAI;AAAA,UAClC,6BAA6B,IAAI;AAAA,QACnC,CAAC;AAAA,MACH,CAAC;AACD,aAAO,oBAAoB,KAAK,KAAK,QAAQ;AAAA,IAC/C;AAAA,EACF;AACF;;;AC3JO,SAASC,kBAAiB,OAAuD;AACtF,SAAO;AAAA,IACL,IAAI,MAAM;AAAA,IACV,MAAM,MAAM;AAAA,IACZ,aAAa,MAAM;AAAA,IACnB,SAAS,MAAM;AAAA,IACf,MAAM,MAAM,QAAQ;AAAA,IACpB,KAAK,MAAM;AAAA,EACb;AACF;AAEO,SAASC,mBAAkB,KAA4E;AAC5G,QAAM,OAAO,IAAI,KAAK,KAAK;AAC3B,SAAO;AAAA,IACL,MAAM;AAAA,IACN,MAAM,IAAI;AAAA,IACV,KAAK,IAAI;AAAA,IACT,GAAI,SAAS,KAAK,CAAC,IAAI,EAAE,KAAK;AAAA,IAC9B,KAAK,IAAI;AAAA,IACT,aAAa,IAAI;AAAA,EACnB;AACF;AAEO,SAASC,WAAU,OAAqC,cAA4C;AACzG,QAAM,WAAW,MAAM;AACvB,QAAM,cACJ,iBAAiB,YAAY,OAAO,SAAS,gBAAgB,WAAW,SAAS,cAAc,SAAS;AAC1G,QAAM,OAAO;AAAA,IACX,IAAI,MAAM;AAAA,IACV,MAAM;AAAA,IACN,aAAa,SAAS;AAAA,EACxB;AACA,MAAI,aAAa,IAAI,MAAM,IAAI,GAAG;AAChC,WAAO,EAAE,GAAG,MAAM,WAAW,MAAM,KAAK;AAAA,EAC1C;AACA,SAAO;AACT;AAGO,SAAS,mBAAmB,QAAgD;AACjF,SAAO;AAAA,IACL,iBAAiB,YAAY;AAC3B,YAAM,OAAO,MAAM,OAAO,SAAS,OAAO,KAAK;AAC/C,aAAO,KAAK,KAAK,IAAIF,iBAAgB;AAAA,IACvC;AAAA,IACA,YAAY,OAAM,QAAO;AACvB,YAAM,CAAC,QAAQ,OAAO,IAAI,MAAM,QAAQ,IAAI,CAAC,OAAO,SAAS,OAAO,KAAK,GAAG,OAAO,SAAS,OAAO,KAAK,CAAC,CAAC;AAC1G,YAAM,eAAe,IAAI,IAAI,QAAQ,KAAK,IAAI,WAAS,MAAM,IAAI,CAAC;AAClE,YAAM,SAAS,OAAO,KAAK,IAAI,WAASE,WAAU,OAAO,YAAY,CAAC;AACtE,YAAM,QAAQ,KAAK,OAAO,KAAK,EAAE,YAAY;AAC7C,UAAI,UAAU,UAAa,UAAU,IAAI;AACvC,eAAO;AAAA,MACT;AACA,aAAO,OAAO;AAAA,QACZ,WAAS,MAAM,KAAK,YAAY,EAAE,SAAS,KAAK,KAAK,MAAM,YAAY,YAAY,EAAE,SAAS,KAAK;AAAA,MACrG;AAAA,IACF;AAAA,IACA,aAAa,OAAM,QAAO;AACxB,YAAM,OAAO,MAAM,OAAO,SAAS,OAAO,OAAO,EAAE,UAAUD,mBAAkB,GAAG,EAAE,CAAC;AACrF,YAAM,YAAY,eAAe,MAAM,IAAI,YAAY;AACvD,UAAI,cAAc,QAAW;AAC3B,eAAO;AAAA,UACL,IAAI,KAAK,KAAK;AAAA,UACd,MAAM,KAAK,KAAK;AAAA,UAChB,aAAa,KAAK,KAAK,SAAS;AAAA,UAChC;AAAA,QACF;AAAA,MACF;AACA,aAAO;AAAA,QACL,IAAI,KAAK,KAAK;AAAA,QACd,MAAM,KAAK,KAAK;AAAA,QAChB,aAAa,KAAK,KAAK,SAAS;AAAA,MAClC;AAAA,IACF;AAAA,EACF;AACF;;;AChFO,SAAS,+BAA+B,UAAiD,CAAC,GAAsB;AACrH,QAAM,SAAS,QAAQ,UAAU,sBAAsB,OAAO;AAC9D,SAAO;AAAA,IACL,iBAAiB,aAAW,OAAO,SAAS,gBAAgB,OAAO;AAAA,EACrE;AACF;;;ACIA,IAAM,uBAAuB;AAO7B,eAAe,eAAe,QAAwC;AACpE,QAAM,EAAE,KAAK,IAAI,MAAM,OAAO,OAAO,KAAK;AAC1C,QAAM,WAAW,oBAAI,IAAoB;AACzC,QAAM,WAAW,oBAAI,IAAoB;AACzC,aAAW,SAAS,MAAM;AACxB,aAAS,IAAI,MAAM,IAAI,MAAM,IAAI;AACjC,aAAS,IAAI,MAAM,MAAM,MAAM,EAAE;AAAA,EACnC;AACA,SAAO,EAAE,UAAU,SAAS;AAC9B;AAEA,SAAS,iBAAiB,SAAiB,OAA2B;AACpE,QAAM,OAAO,MAAM,SAAS,IAAI,OAAO;AACvC,MAAI,QAAQ,KAAM,QAAO;AACzB,MAAI,MAAM,SAAS,IAAI,OAAO,EAAG,QAAO;AACxC,QAAM,IAAI,MAAM,kBAAkB,OAAO,EAAE;AAC7C;AAEA,SAAS,gBAAgB,KAAqC;AAC5D,QAAM,MAAgB,CAAC;AACvB,MAAI,KAAK,YAAY,MAAM;AACzB,eAAW,MAAM,IAAI,UAAU;AAC7B,UAAI,OAAO,GAAI,KAAI,KAAK,EAAE;AAAA,IAC5B;AAAA,EACF;AACA,MAAI,KAAK,WAAW,QAAQ,IAAI,YAAY,GAAI,KAAI,KAAK,IAAI,OAAO;AACpE,SAAO,CAAC,GAAG,IAAI,IAAI,GAAG,CAAC;AACzB;AAEA,SAAS,WAAW,UAAyD;AAC3E,SAAO,SAAS,UAAU;AAC5B;AAEA,SAAS,aAAa,MAA6B,OAA6B;AAC9E,QAAM,UAAU,MAAM,SAAS,IAAI,KAAK,SAAS,KAAK,KAAK;AAC3D,SAAO;AAAA,IACL,IAAI,KAAK;AAAA,IACT,MAAM,KAAK;AAAA,IACX;AAAA,IACA,WAAW,KAAK;AAAA,IAChB,MAAM,KAAK,SAAS;AAAA,IACpB,MAAM,KAAK,SAAS;AAAA,IACpB,UAAU,KAAK,SAAS,YAAY;AAAA,IACpC,QAAQ,WAAW,KAAK,QAAQ;AAAA,IAChC,WAAW;AAAA,IACX,kBAAkB,KAAK;AAAA,EACzB;AACF;AAEA,SAAS,eAAe,OAKU;AAChC,SAAO;AAAA,IACL,MAAM,MAAM;AAAA,IACZ,MAAM,MAAM;AAAA,IACZ,UAAU,MAAM,YAAY;AAAA,IAC5B,QAAQ,MAAM,UAAU;AAAA,EAC1B;AACF;AAEA,SAAS,aAAa,OAA8B;AAClD,MAAI,iBAAiB,KAAM,QAAO,MAAM,YAAY;AACpD,SAAO;AACT;AAEA,SAAS,gBAAgB,MAA6C;AACpE,SAAO;AAAA,IACL,IAAI,KAAK;AAAA,IACT,YAAY,KAAK;AAAA,IACjB,MAAM,KAAK;AAAA,IACX,cAAc,aAAa,KAAK,YAAY;AAAA,IAC5C,QAAQ,KAAK;AAAA,IACb,aAAa,KAAK,eAAe,OAAO,OAAO,aAAa,KAAK,WAAW;AAAA,IAC5E,aAAa,KAAK,iBAAiB,sBAAsB,KAAK,iBAAiB;AAAA,EACjF;AACF;AAEO,SAAS,qBAAqB,SAAgD;AACnF,QAAM,EAAE,OAAO,IAAI;AAEnB,SAAO;AAAA,IACL,MAAM,cAAc,KAA0D;AAC5E,YAAM,QAAQ,MAAM,eAAe,MAAM;AACzC,YAAM,WAAW,gBAAgB,GAAG;AACpC,YAAM,aAAa,SAAS,WAAW,IAAI,SAAY,SAAS,IAAI,QAAM,iBAAiB,IAAI,KAAK,CAAC,EAAE,KAAK,GAAG;AAC/G,YAAM,QAAQ,KAAK,IAAI,KAAK,IAAI,KAAK,SAAS,sBAAsB,CAAC,GAAG,oBAAoB;AAC5F,YAAM,OAAO,MAAM,OAAO,UAAU,KAAK;AAAA,QACvC;AAAA,QACA,GAAI,KAAK,cAAc,UAAa,IAAI,cAAc,KAAK,CAAC,IAAI,EAAE,WAAW,IAAI,UAAU;AAAA,QAC3F,GAAI,eAAe,SAAY,CAAC,IAAI,EAAE,WAAW;AAAA,MACnD,CAAC;AACD,aAAO,aAAa,MAAM,SAAO,aAAa,KAAK,KAAK,CAAC;AAAA,IAC3D;AAAA,IAEA,MAAM,YAAY,EAAE,GAAG,GAAsB;AAC3C,YAAM,QAAQ,MAAM,eAAe,MAAM;AACzC,YAAM,EAAE,KAAK,IAAI,MAAM,OAAO,UAAU,IAAI,EAAE;AAC9C,aAAO,aAAa,MAAM,KAAK;AAAA,IACjC;AAAA,IAEA,MAAM,eAAe,KAA+C;AAClE,YAAM,QAAQ,MAAM,eAAe,MAAM;AACzC,YAAM,YAAY,iBAAiB,IAAI,SAAS,KAAK;AACrD,YAAM,EAAE,KAAK,IAAI,MAAM,OAAO,UAAU,OAAO;AAAA,QAC7C;AAAA,QACA,MAAM,IAAI;AAAA,QACV,UAAU,eAAe,GAAG;AAAA,MAC9B,CAAC;AACD,aAAO,aAAa,MAAM,KAAK;AAAA,IACjC;AAAA,IAEA,MAAM,eAAe,KAA+C;AAClE,YAAM,QAAQ,MAAM,eAAe,MAAM;AACzC,YAAM,EAAE,KAAK,IAAI,MAAM,OAAO,UAAU,OAAO,IAAI,IAAI;AAAA,QACrD,MAAM,IAAI;AAAA,QACV,UAAU,eAAe,GAAG;AAAA,MAC9B,CAAC;AACD,aAAO,aAAa,MAAM,KAAK;AAAA,IACjC;AAAA,IAEA,MAAM,eAAe,EAAE,GAAG,GAAkB;AAC1C,YAAM,OAAO,UAAU,OAAO,EAAE;AAAA,IAClC;AAAA,IAEA,MAAM,iBAAiB,EAAE,WAAW,GAA2B;AAC7D,YAAM,EAAE,KAAK,IAAI,MAAM,OAAO,UAAU,SAAS,UAAU;AAC3D,aAAO,KAAK,IAAI,eAAe;AAAA,IACjC;AAAA,IAEA,MAAM,kBAAkB,KAAqD;AAC3E,YAAM,EAAE,KAAK,IAAI,MAAM,OAAO,UAAU,UAAU,EAAE,YAAY,IAAI,WAAW,CAAC;AAChF,aAAO,gBAAgB,IAAI;AAAA,IAC7B;AAAA,EACF;AACF;;;ACxFO,SAAS,6BAA6B,UAA+C,CAAC,GAAG;AAC9F,QAAM,EAAE,SAAS,iBAAiB,aAAa,GAAG,cAAc,IAAI;AACpE,QAAM,SAAS,sBAAsB,aAAa;AAClD,QAAM,UACJ,mBACC;AAAA,IACC,cAAc,2BAA2B,MAAM;AAAA,IAC/C,kBAAkB,uBAAuB,MAAM;AAAA,IAC/C,cAAc,mBAAmB,MAAM;AAAA,IACvC,gBAAgB,6BAA6B,MAAM;AAAA,EACrD;AAEF,SAAO,wBAA0C;AAAA,IAC/C,YAAY,wBAAwB,EAAE,OAAO,CAAC;AAAA,IAC9C,GAAG,2BAA2B,EAAE,OAAO,CAAC;AAAA,IACxC;AAAA,IACA,UAAU,iCAAiC,EAAE,GAAG,eAAe,OAAO,CAAC;AAAA,IACvE,SAAS,gCAAgC,EAAE,GAAG,eAAe,OAAO,CAAC;AAAA,IACrE,WAAW,qBAAqB,EAAE,OAAO,CAAC;AAAA,IAC1C,aAAa,eAAe,+BAA+B,EAAE,OAAO,CAAC;AAAA,EACvE,CAAC;AACH;","names":["TrueForgeApi","toUiCatalogEntry","toHarnessManifest","toUiCatalogEntry","toHarnessManifest","toUiSkill"]}
|