@flashbacktech/tsclient 0.4.46 → 0.4.47

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/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/http/HttpError.ts","../src/http/BaseClient.ts","../src/modules/auth/AuthClient.ts","../src/common/envelope.ts","../src/modules/mfa/MfaClient.ts","../src/modules/user/UserClient.ts","../src/modules/organization/OrganizationClient.ts","../src/adapters/projectAdapter.ts","../src/modules/projects/ProjectsClient.ts","../src/adapters/sandboxAdapter.ts","../src/modules/sandboxes/SandboxesClient.ts","../src/modules/credentials/types.ts","../src/modules/credentials/GatewayTokensClient.ts","../src/modules/credentials/CredentialsClient.ts","../src/modules/chat/ChatStream.ts","../src/modules/chat/ChatClient.ts","../src/modules/agentEngine/TemplatesClient.ts","../src/modules/agentEngine/ScheduledTasksClient.ts","../src/modules/resources/ResourcesClient.ts","../src/modules/systemEvents/types.ts","../src/modules/systemEvents/SystemEventsClient.ts","../src/modules/billing/SubscriptionsClient.ts","../src/modules/billing/CreditsClient.ts","../src/modules/usage/UsageClient.ts","../src/modules/budgets/BudgetsClient.ts","../src/client.ts","../src/common/types.ts","../src/modules/mfa/types.ts","../src/modules/credentials/providers.ts","../src/modules/budgets/types.ts"],"names":["normalize","BASE_PATH","ProviderType","AccessType","OrgRoles","MFAType"],"mappings":"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","file":"index.js","sourcesContent":["export class HttpError extends Error {\n readonly status: number;\n readonly statusText: string;\n readonly errorCode: string | null;\n readonly body: unknown;\n\n constructor(status: number, statusText: string, body: unknown) {\n const errorCode = extractErrorCode(body);\n const message = extractMessage(body) ?? `${status} ${statusText}`;\n super(message);\n this.name = 'HttpError';\n this.status = status;\n this.statusText = statusText;\n this.errorCode = errorCode;\n this.body = body;\n }\n}\n\nfunction extractErrorCode(body: unknown): string | null {\n if (body && typeof body === 'object') {\n const code = (body as Record<string, unknown>).error_code ?? (body as Record<string, unknown>).errorCode;\n if (typeof code === 'string') return code;\n }\n return null;\n}\n\nfunction extractMessage(body: unknown): string | null {\n if (body && typeof body === 'object') {\n const msg = (body as Record<string, unknown>).message ?? (body as Record<string, unknown>).error;\n if (typeof msg === 'string') return msg;\n }\n return null;\n}\n\nexport class NotImplementedError extends Error {\n constructor(method: string) {\n super(`${method} is not implemented in the cloud-agent backend yet.`);\n this.name = 'NotImplementedError';\n }\n}\n","import { HttpError } from './HttpError.js';\nimport type { TokenProvider, UnauthorizedHandler } from './tokenProvider.js';\n\n/**\n * Returns the org id the platform admin is currently impersonating, or\n * undefined when not impersonating. Resolved per-request so a UI toggle\n * takes effect on the next call without rebuilding the client. Honored\n * by the server only for users in the configured ADMIN_ORGANIZATION;\n * non-admins receive a 403.\n */\nexport type ImpersonationProvider = () => string | undefined | Promise<string | undefined>;\n\nexport interface BaseClientOptions {\n baseUrl: string;\n getToken?: TokenProvider;\n onUnauthorized?: UnauthorizedHandler;\n fetch?: typeof fetch;\n debug?: boolean;\n defaultHeaders?: Record<string, string>;\n getImpersonateOrgId?: ImpersonationProvider;\n}\n\nexport type QueryValue = string | number | boolean | string[] | null | undefined;\nexport type Query = Record<string, QueryValue>;\n\nexport interface RequestOptions {\n /**\n * Query string params. Plain object; we serialize string/number/boolean,\n * repeat arrays, and drop undefined/null values.\n */\n query?: object;\n body?: unknown;\n headers?: Record<string, string>;\n /** Skip the bearer token (used for public endpoints like /user/login). */\n skipAuth?: boolean;\n}\n\nexport class BaseClient {\n readonly baseUrl: string;\n private readonly getToken?: TokenProvider;\n private readonly onUnauthorized?: UnauthorizedHandler;\n private readonly fetchImpl: typeof fetch;\n private readonly debug: boolean;\n private readonly defaultHeaders: Record<string, string>;\n private readonly getImpersonateOrgId?: ImpersonationProvider;\n\n constructor(options: BaseClientOptions) {\n if (!options.baseUrl) throw new Error('CloudAgentClient: baseUrl is required');\n this.baseUrl = options.baseUrl.replace(/\\/$/, '');\n this.getToken = options.getToken;\n this.onUnauthorized = options.onUnauthorized;\n this.fetchImpl = options.fetch ?? globalThis.fetch.bind(globalThis);\n this.debug = options.debug ?? false;\n this.defaultHeaders = options.defaultHeaders ?? {};\n this.getImpersonateOrgId = options.getImpersonateOrgId;\n }\n\n get<T>(path: string, options?: RequestOptions): Promise<T> {\n return this.request<T>('GET', path, options);\n }\n post<T>(path: string, options?: RequestOptions): Promise<T> {\n return this.request<T>('POST', path, options);\n }\n put<T>(path: string, options?: RequestOptions): Promise<T> {\n return this.request<T>('PUT', path, options);\n }\n patch<T>(path: string, options?: RequestOptions): Promise<T> {\n return this.request<T>('PATCH', path, options);\n }\n delete<T>(path: string, options?: RequestOptions): Promise<T> {\n return this.request<T>('DELETE', path, options);\n }\n\n async request<T>(method: string, path: string, options: RequestOptions = {}): Promise<T> {\n const url = this.buildUrl(path, options.query);\n const headers: Record<string, string> = { ...this.defaultHeaders, ...(options.headers ?? {}) };\n\n if (!options.skipAuth && this.getToken) {\n const token = await this.getToken();\n if (token) headers['Authorization'] = `Bearer ${token}`;\n }\n\n // Impersonation header is opt-in via the constructor callback. The\n // explicit per-request `headers` win — call sites that already supply\n // an X-Impersonate-Org-Id (tests, edge cases) keep precedence.\n if (\n !options.skipAuth &&\n this.getImpersonateOrgId &&\n !('X-Impersonate-Org-Id' in headers) &&\n !('x-impersonate-org-id' in headers)\n ) {\n const target = await this.getImpersonateOrgId();\n if (target) headers['X-Impersonate-Org-Id'] = target;\n }\n\n let body: BodyInit | undefined;\n if (options.body !== undefined && options.body !== null) {\n if (options.body instanceof FormData) {\n body = options.body;\n } else {\n if (!('Content-Type' in headers) && !('content-type' in headers)) {\n headers['Content-Type'] = 'application/json';\n }\n body = JSON.stringify(options.body);\n }\n }\n\n if (this.debug) {\n // eslint-disable-next-line no-console\n console.debug('[flashbacktech/tsclient] →', method, url, options.body ?? '');\n }\n\n const res = await this.fetchImpl(url, { method, headers, body });\n\n let parsed: unknown = null;\n const text = await res.text();\n if (text.length > 0) {\n try {\n parsed = JSON.parse(text);\n } catch {\n parsed = text;\n }\n }\n\n if (this.debug) {\n // eslint-disable-next-line no-console\n console.debug('[flashbacktech/tsclient] ←', res.status, url, parsed);\n }\n\n if (!res.ok) {\n if (res.status === 401 && this.onUnauthorized) {\n try {\n await this.onUnauthorized();\n } catch {\n // swallow handler failures — the original 401 is still surfaced\n }\n }\n throw new HttpError(res.status, res.statusText, parsed);\n }\n\n return parsed as T;\n }\n\n private buildUrl(path: string, query?: object): string {\n const base = path.startsWith('http') ? path : `${this.baseUrl}${path.startsWith('/') ? path : `/${path}`}`;\n if (!query) return base;\n const params = new URLSearchParams();\n for (const [key, value] of Object.entries(query as Record<string, unknown>)) {\n if (value === undefined || value === null) continue;\n if (Array.isArray(value)) {\n for (const v of value) params.append(key, String(v));\n } else {\n params.set(key, String(value));\n }\n }\n const qs = params.toString();\n return qs ? `${base}?${qs}` : base;\n }\n}\n","import type { BaseClient } from '../../http/BaseClient.js';\nimport type {\n ActivateRequest,\n ExchangeCodeRequest,\n LoginRequest,\n PublicConfig,\n RefreshRequest,\n RegisterRequest,\n ResetPasswordRequest,\n SessionResponse,\n SimpleResponse,\n} from './types.js';\n\nexport class AuthClient {\n constructor(private readonly http: BaseClient) {}\n\n login(body: LoginRequest): Promise<SessionResponse> {\n return this.http.post<SessionResponse>('/user/login', { body, skipAuth: true });\n }\n\n register(body: RegisterRequest): Promise<SessionResponse> {\n return this.http.post<SessionResponse>('/user/register', { body, skipAuth: true });\n }\n\n /**\n * Unauthenticated boot config. The SPA reads `openRegistration` to decide\n * whether to render the self-service signup form (false => invite-only /\n * preview mode). Safe to call before any session exists.\n */\n publicConfig(): Promise<PublicConfig> {\n return this.http.get<PublicConfig>('/public-config', { skipAuth: true });\n }\n\n logout(refreshToken?: string): Promise<SimpleResponse> {\n return this.http.post<SimpleResponse>('/user/logout', {\n body: { refreshToken },\n });\n }\n\n refresh(body: RefreshRequest): Promise<SessionResponse> {\n return this.http.post<SessionResponse>('/user/refresh', { body, skipAuth: true });\n }\n\n activate(body: ActivateRequest): Promise<SessionResponse> {\n return this.http.post<SessionResponse>('/user/activate', { body, skipAuth: true });\n }\n\n requestVerification(email: string): Promise<SimpleResponse> {\n return this.http.post<SimpleResponse>('/user/request-verification', {\n body: { email },\n skipAuth: true,\n });\n }\n\n requestPasswordReset(email: string): Promise<SimpleResponse> {\n return this.http.post<SimpleResponse>('/user/request-reset-password', {\n body: { email },\n skipAuth: true,\n });\n }\n\n resetPassword(body: ResetPasswordRequest): Promise<SimpleResponse> {\n return this.http.post<SimpleResponse>('/user/reset-password', { body, skipAuth: true });\n }\n\n exchangeGoogle(body: ExchangeCodeRequest): Promise<SessionResponse> {\n return this.http.post<SessionResponse>('/auth/google/exchange', { body, skipAuth: true });\n }\n}\n","/**\n * Most cloud-agent endpoints return `{ success: true, data: T }` or\n * `{ success: true, <key>: T }`. A few (system events, exchange) return\n * bare shapes. These helpers keep envelope handling out of the per-domain\n * clients.\n */\n\nexport interface SuccessEnvelope<T> {\n success: boolean;\n data?: T;\n message?: string;\n error_code?: string;\n}\n\nexport function unwrapData<T>(payload: { success?: boolean; data?: T } | undefined | null): T {\n if (!payload || payload.data === undefined) {\n throw new Error('Response envelope missing `data` field.');\n }\n return payload.data;\n}\n\nexport function unwrapKey<T>(payload: Record<string, unknown> | undefined | null, key: string): T {\n if (!payload || payload[key] === undefined) {\n throw new Error(`Response envelope missing \\`${key}\\` field.`);\n }\n return payload[key] as T;\n}\n","import type { BaseClient } from '../../http/BaseClient.js';\nimport { unwrapData } from '../../common/envelope.js';\nimport type {\n MagicLinkActivateRequest,\n MagicLinkSendResponse,\n MFASetupResponse,\n MFASimpleResponse,\n MFAStatus,\n MFAType,\n MFAVerifyLoginRequest,\n MFAVerifyLoginResponse,\n MFAVerifySetupRequest,\n} from './types.js';\n\nexport class MfaClient {\n constructor(private readonly http: BaseClient) {}\n\n async getStatus(): Promise<MFAStatus> {\n const res = await this.http.get<{ success: boolean; data: MFAStatus }>('/mfa/status');\n return unwrapData(res);\n }\n\n async getMethods(): Promise<MFAType[]> {\n const res = await this.http.get<{ success: boolean; data: { methods: MFAType[] } }>('/mfa/methods');\n return res.data?.methods ?? [];\n }\n\n setup(body: { mfaType: MFAType; email?: string }): Promise<MFASetupResponse> {\n return this.http.post<MFASetupResponse>('/mfa/setup', { body });\n }\n\n verifySetup(body: MFAVerifySetupRequest): Promise<MFASimpleResponse> {\n return this.http.post<MFASimpleResponse>('/mfa/verify-setup', { body });\n }\n\n enable(mfaType: MFAType): Promise<MFASimpleResponse> {\n return this.http.post<MFASimpleResponse>('/mfa/enable', { body: { mfaType } });\n }\n\n disable(mfaType: MFAType): Promise<MFASimpleResponse> {\n return this.http.post<MFASimpleResponse>('/mfa/disable', { body: { mfaType } });\n }\n\n setPrimary(mfaType: MFAType): Promise<MFASimpleResponse> {\n return this.http.post<MFASimpleResponse>('/mfa/primary', { body: { mfaType } });\n }\n\n sendMagicLink(): Promise<MagicLinkSendResponse> {\n return this.http.post<MagicLinkSendResponse>('/mfa/magic-link/send', {});\n }\n\n activateMagicLink(body: MagicLinkActivateRequest): Promise<MFAVerifyLoginResponse> {\n return this.http.post<MFAVerifyLoginResponse>('/mfa/magic-link/activate', { body, skipAuth: true });\n }\n\n verifyLogin(body: MFAVerifyLoginRequest): Promise<MFAVerifyLoginResponse> {\n return this.http.post<MFAVerifyLoginResponse>('/mfa/verify-login', { body });\n }\n}\n","import type { BaseClient } from '../../http/BaseClient.js';\nimport { unwrapData } from '../../common/envelope.js';\nimport type { UpdateUserRequest, UpdateUserResponse, UserProfile } from './types.js';\n\nexport class UserClient {\n constructor(private readonly http: BaseClient) {}\n\n async getProfile(): Promise<UserProfile> {\n const res = await this.http.get<{ success: boolean; data: UserProfile }>('/me');\n return unwrapData(res);\n }\n\n update(body: UpdateUserRequest): Promise<UpdateUserResponse> {\n return this.http.put<UpdateUserResponse>('/user', { body });\n }\n}\n","import type { BaseClient } from '../../http/BaseClient.js';\nimport { unwrapData } from '../../common/envelope.js';\nimport type {\n AcceptInviteRequest,\n AddUserToOrgRequest,\n AddUserToOrgResult,\n AdjustOrgCreditsRequest,\n AdjustOrgCreditsResult,\n CreateOrganizationUserRequest,\n InviteOrgRequest,\n InviteOrgResult,\n OrgCreditBalance,\n Organization,\n OrganizationUser,\n SimpleOrgResponse,\n UpdateOrganizationRequest,\n UpdateOrgUserRequest,\n} from './types.js';\n\nexport class OrganizationClient {\n constructor(private readonly http: BaseClient) {}\n\n async get(orgId: string): Promise<Organization> {\n const res = await this.http.get<{ success: boolean; data: Organization }>(`/organization/${orgId}`);\n return unwrapData(res);\n }\n\n async update(orgId: string, body: UpdateOrganizationRequest): Promise<Organization> {\n const res = await this.http.put<{ success: boolean; data: Organization }>(`/organization/${orgId}`, { body });\n return unwrapData(res);\n }\n\n async listUsers(): Promise<OrganizationUser[]> {\n const res = await this.http.get<{ success: boolean; data: OrganizationUser[] }>('/organization/users');\n return res.data ?? [];\n }\n\n updateUser(userId: string, body: UpdateOrgUserRequest): Promise<SimpleOrgResponse> {\n return this.http.put<SimpleOrgResponse>(`/organization/users/${userId}`, { body });\n }\n\n /** Backend currently returns 501. Surfaced for forward-compat. */\n createUser(body: CreateOrganizationUserRequest): Promise<SimpleOrgResponse> {\n return this.http.post<SimpleOrgResponse>('/organization/users', { body });\n }\n\n /** Backend currently returns 501. Surfaced for forward-compat. */\n deleteUser(userId: string): Promise<SimpleOrgResponse> {\n return this.http.delete<SimpleOrgResponse>(`/organization/users/${userId}`);\n }\n\n /** Accept an org invite: verifies the one-time token and sets the user's password. */\n acceptInvite(body: AcceptInviteRequest): Promise<SimpleOrgResponse> {\n return this.http.post<SimpleOrgResponse>('/organization/invite/accept', { body });\n }\n\n /**\n * Platform-admin only: list every org for the impersonation picker.\n * The server returns 403 when the caller's home org is not the\n * configured ADMIN_ORGANIZATION; render the picker only when the\n * authenticated user has `isPlatformAdmin === true`.\n */\n async listAll(): Promise<Array<{ id: string; name: string; allowDebug: boolean }>> {\n const res = await this.http.get<{\n success: boolean;\n data: Array<{ id: string; name: string; allowDebug: boolean }>;\n }>('/orgs/list-all');\n return res.data ?? [];\n }\n\n /**\n * Platform-admin only: provision a new organization + founding owner and\n * email the owner an invite link. The invite-only counterpart to public\n * self-service registration (used while the backend has OPEN_REGISTRATION\n * disabled). Returns 403 unless the caller's home org is the configured\n * ADMIN_ORGANIZATION; 409 when the owner email already exists.\n */\n async inviteOrg(body: InviteOrgRequest): Promise<InviteOrgResult> {\n const res = await this.http.post<{ success: boolean; data: InviteOrgResult }>(\n '/organization/invite-org',\n { body },\n );\n return unwrapData(res);\n }\n\n /**\n * Platform-admin only: enable or disable the debug surface for an org.\n * Returns the updated org entry with the new allowDebug value.\n */\n async setAllowDebug(orgId: string, allow: boolean): Promise<{ id: string; name: string; allowDebug: boolean }> {\n const res = await this.http.patch<{\n success: boolean;\n data: { id: string; name: string; allowDebug: boolean };\n }>(`/orgs/${orgId}/allow-debug`, { body: { allow } });\n return res.data!;\n }\n\n /**\n * Platform-admin only: add a new member to an existing org.\n * Creates the user without a password and sends an invite email via the\n * same TokenOrgInvite flow as the regular member invite.\n * Returns 403 unless platform admin; 409 when the email already exists.\n */\n async addUserToOrg(orgId: string, body: AddUserToOrgRequest): Promise<AddUserToOrgResult> {\n const res = await this.http.post<{ success: boolean; data: AddUserToOrgResult }>(\n `/orgs/${orgId}/users`,\n { body },\n );\n return unwrapData(res);\n }\n\n /**\n * Platform-admin only: fetch an org's two-bucket credit balance.\n * Returns 403 unless platform admin; 404 when the org doesn't exist.\n */\n async getOrgCreditBalance(orgId: string): Promise<OrgCreditBalance> {\n const res = await this.http.get<{ success: boolean; data: OrgCreditBalance }>(\n `/orgs/${orgId}/credits`,\n );\n return unwrapData(res);\n }\n\n /**\n * Platform-admin only: grant or revoke credits on an org.\n * amountMicros is signed: positive = grant, negative = revoke.\n * Records a CreditKindAdminAdjust ledger entry and returns the updated balance.\n */\n async adjustOrgCredits(orgId: string, body: AdjustOrgCreditsRequest): Promise<AdjustOrgCreditsResult> {\n const res = await this.http.post<{ success: boolean; data: AdjustOrgCreditsResult }>(\n `/orgs/${orgId}/credits/adjust`,\n { body },\n );\n return unwrapData(res);\n }\n}\n","import type { Project } from '../modules/projects/types.js';\n\ninterface WireProject {\n id: string;\n name: string;\n orgId: string;\n default?: boolean;\n users?: unknown[];\n}\n\nexport const projectAdapter = {\n fromListResponse(payload: unknown): Project[] {\n const list = (payload as { workspaces?: WireProject[]; projects?: WireProject[] } | null)?.workspaces\n ?? (payload as { projects?: WireProject[] } | null)?.projects\n ?? [];\n return list.map(normalize);\n },\n\n fromGetResponse(payload: unknown): Project {\n const wire = (payload as { workspace?: WireProject; project?: WireProject; data?: WireProject } | null);\n const value = wire?.workspace ?? wire?.project ?? wire?.data;\n if (!value) throw new Error('Project response missing body.');\n return normalize(value);\n },\n\n normalize,\n};\n\nfunction normalize(wire: WireProject): Project {\n return {\n id: wire.id,\n name: wire.name,\n orgId: wire.orgId,\n default: wire.default ?? false,\n users: (wire.users ?? []) as Project['users'],\n };\n}\n\n// TODO(backend-cleanup): cloud-agent-backend internal/http/routes/project/project.go\n// still returns `workspaces` / `workspace` keys. When those are renamed to\n// `projects` / `project`, this adapter can fall through to a plain unwrap.\n","import type { BaseClient } from '../../http/BaseClient.js';\nimport { projectAdapter } from '../../adapters/projectAdapter.js';\nimport type {\n AddMemberRequest,\n CreateProjectRequest,\n Project,\n UpdateMemberRoleRequest,\n UpdateProjectRequest,\n} from './types.js';\n\ninterface SimpleResponse {\n success: boolean;\n message?: string;\n}\n\nexport class ProjectsClient {\n constructor(private readonly http: BaseClient) {}\n\n async list(): Promise<Project[]> {\n const res = await this.http.get<unknown>('/project');\n return projectAdapter.fromListResponse(res);\n }\n\n async get(projectId: string): Promise<Project> {\n const res = await this.http.get<unknown>(`/project/${projectId}`);\n return projectAdapter.fromGetResponse(res);\n }\n\n async create(body: CreateProjectRequest): Promise<Project> {\n const res = await this.http.post<unknown>('/project', { body });\n return projectAdapter.fromGetResponse(res);\n }\n\n async update(projectId: string, body: UpdateProjectRequest): Promise<Project> {\n const res = await this.http.put<unknown>(`/project/${projectId}`, { body });\n return projectAdapter.fromGetResponse(res);\n }\n\n delete(projectId: string): Promise<SimpleResponse> {\n return this.http.delete<SimpleResponse>(`/project/${projectId}`);\n }\n\n addMember(projectId: string, body: AddMemberRequest): Promise<SimpleResponse> {\n return this.http.post<SimpleResponse>(`/project/${projectId}/users`, { body });\n }\n\n updateMemberRole(projectId: string, userId: string, body: UpdateMemberRoleRequest): Promise<SimpleResponse> {\n return this.http.put<SimpleResponse>(`/project/${projectId}/users/${userId}`, { body });\n }\n\n removeMember(projectId: string, userId: string): Promise<SimpleResponse> {\n return this.http.delete<SimpleResponse>(`/project/${projectId}/users/${userId}`);\n }\n}\n","import type { Sandbox } from '../modules/sandboxes/types.js';\n\ninterface WireSandbox {\n id: string;\n name: string;\n storageType: string;\n mode: string;\n orgId: string;\n userId: string;\n createdAt: string;\n disabled?: boolean;\n // Legacy wire alternates: backend may send projectId or workspaceId.\n projectId?: string | null;\n workspaceId?: string | null;\n}\n\nexport const sandboxAdapter = {\n fromListResponse(payload: unknown): Sandbox[] {\n const list = (payload as { repos?: WireSandbox[]; sandboxes?: WireSandbox[] } | null)?.repos\n ?? (payload as { sandboxes?: WireSandbox[] } | null)?.sandboxes\n ?? [];\n return list.map(normalize);\n },\n\n fromGetResponse(payload: unknown): Sandbox {\n const wire = payload as { repo?: WireSandbox; sandbox?: WireSandbox; data?: WireSandbox } | null;\n const value = wire?.repo ?? wire?.sandbox ?? wire?.data;\n if (!value) throw new Error('Sandbox response missing body.');\n return normalize(value);\n },\n\n normalize,\n};\n\nfunction normalize(wire: WireSandbox): Sandbox {\n return {\n id: wire.id,\n name: wire.name,\n storageType: wire.storageType,\n mode: wire.mode,\n orgId: wire.orgId,\n userId: wire.userId,\n projectId: wire.projectId ?? wire.workspaceId ?? null,\n createdAt: wire.createdAt,\n disabled: wire.disabled ?? false,\n };\n}\n\n// TODO(backend-cleanup): cloud-agent-backend internal/http/routes/sandbox/sandbox.go\n// still returns `repos` / `repo` response keys, and Sandbox JSON may carry\n// `workspaceId` instead of `projectId` (internal/domain/types.go). When both\n// are renamed, this adapter collapses to a plain unwrap.\n","import type { BaseClient } from '../../http/BaseClient.js';\nimport { sandboxAdapter } from '../../adapters/sandboxAdapter.js';\nimport type {\n CreateSandboxRequest,\n ListSandboxesQuery,\n Sandbox,\n UpdateSandboxRequest,\n} from './types.js';\n\ninterface SimpleResponse {\n success: boolean;\n message?: string;\n}\n\nexport class SandboxesClient {\n constructor(private readonly http: BaseClient) {}\n\n async list(query: ListSandboxesQuery = {}): Promise<Sandbox[]> {\n const res = await this.http.get<unknown>('/sandbox', {\n query: { projectId: query.projectId },\n });\n return sandboxAdapter.fromListResponse(res);\n }\n\n async get(sandboxId: string): Promise<Sandbox> {\n const res = await this.http.get<unknown>(`/sandbox/${sandboxId}`);\n return sandboxAdapter.fromGetResponse(res);\n }\n\n async create(body: CreateSandboxRequest): Promise<Sandbox> {\n const res = await this.http.post<unknown>('/sandbox', {\n body: {\n name: body.name,\n projectId: body.projectId,\n storageType: body.storageType ?? 'S3',\n mode: body.mode ?? 'NORMAL',\n },\n });\n return sandboxAdapter.fromGetResponse(res);\n }\n\n async update(sandboxId: string, body: UpdateSandboxRequest): Promise<Sandbox> {\n const res = await this.http.put<unknown>(`/sandbox/${sandboxId}`, { body });\n return sandboxAdapter.fromGetResponse(res);\n }\n\n delete(sandboxId: string): Promise<SimpleResponse> {\n return this.http.delete<SimpleResponse>(`/sandbox/${sandboxId}`);\n }\n}\n","// Credential types for @flashbacktech/tsclient.\n//\n// Schema mirrors cloud-agent-backend's Credential row (renamed from APIKey\n// in migration 0010). Every provider — cloud (AWS/GCP/AZURE), infra\n// (SSH), VCS (GitHub/GitLab/Azure DevOps), AI/LLM (OpenAI/Anthropic) —\n// uses the same `(provider, label, secret, metadata)` shape.\n// Provider-specific fields live in `metadata`; the catalog at\n// ./providers.ts is the source of truth for what each provider's fields\n// look like.\n//\n// Sandbox-scoped FOA bearer tokens (formerly RepoAiApiKey) are now\n// modelled separately as GatewayToken — see below.\n\n// ProviderID is open: the catalog defines a default set, but we allow\n// any string so customer-extended catalogs are still typed.\nexport type ProviderID = 'AWS' | 'BEDROCK' | 'GCP' | 'AZURE' | 'SSH' | 'GITHUB' | 'GITLAB' | 'AZURE_DEVOPS' | 'OPENAI' | 'ANTHROPIC' | 'GEMINI' | string;\n\n// ── Universal credential ─────────────────────────────────────────────\n\n// Credential is the read-projection of one row in the Credential table.\n// Never includes the secret. `displayHint` is the catalog-computed\n// snippet for listings (e.g. \"AKIATEST… / us-east-1\",\n// \"ubuntu@vps.example.com:22\").\nexport interface Credential {\n id: string;\n provider: ProviderID;\n label: string;\n metadata: Record<string, unknown>;\n displayHint?: string;\n createdAt: string;\n}\n\n// CreateCredentialRequest is the universal create body. Provider-specific\n// fields go inside `metadata`; the catalog validates the shape both\n// client-side (./providers.ts:validate) and server-side.\nexport interface CreateCredentialRequest {\n provider: ProviderID;\n label: string;\n secret: string;\n metadata?: Record<string, unknown>;\n projectId: string;\n}\n\n// UpdateCredentialRequest is partial. Provider is immutable on update; to\n// change provider, delete and re-create. `metadata` is replace-wholesale\n// when present.\nexport interface UpdateCredentialRequest {\n label?: string;\n secret?: string;\n metadata?: Record<string, unknown>;\n}\n\n// ListCredentialsQuery narrows /credentials by project and optionally by\n// provider id or capability bit (storage|ai|compute|vcs|notify).\nexport interface ListCredentialsQuery {\n projectId: string;\n provider?: ProviderID;\n capability?: 'storage' | 'ai' | 'compute' | 'vcs' | 'notify';\n}\n\n// SandboxCredential is one row in the SandboxCredential join table —\n// links a sandbox to a project-level credential. The PK is\n// (sandboxId, credentialId), so association identity is the pair itself\n// (no synthetic association id).\nexport interface SandboxCredential {\n sandboxId: string;\n credentialId: string;\n provider: ProviderID;\n label: string;\n displayHint?: string;\n createdAt: string;\n}\n\n// ── Sandbox gateway tokens ───────────────────────────────────────────\n\n// GatewayToken is a sandbox-scoped, OpenAI-compatible bearer used by the\n// agent engine to authenticate to FlashOnAI. The plaintext secret is\n// returned exactly once — at creation — and never re-fetchable.\nexport interface GatewayToken {\n id: string;\n sandboxId: string;\n label: string;\n createdAt: string;\n}\n\nexport interface CreateGatewayTokenRequest {\n label: string;\n}\n\n// CreateGatewayTokenResponse is the create-time-only shape — `secret`\n// holds the plaintext bearer the caller must surface (\"copy now\")\n// before navigating away.\nexport interface CreateGatewayTokenResponse {\n token: GatewayToken;\n secret: string;\n}\n\n// ── Common envelope ──────────────────────────────────────────────────\n\nexport interface SimpleKeysResponse {\n success: boolean;\n message?: string;\n data?: unknown;\n}\n\n// ── Wire shapes (legacy field-name aliases collapse here) ────────────\n\nexport interface WireSandboxCredential {\n // Backend wire emits sandboxId; older clients may still see repoId.\n // Normaliser collapses both into SandboxCredential.sandboxId.\n sandboxId?: string;\n repoId?: string;\n credentialId: string;\n provider: string;\n label: string;\n displayHint?: string | null;\n createdAt: string;\n}\n\nexport interface WireGatewayToken {\n id: string;\n // Backend wire emits sandboxId via \"repoId\" today (StorageRepo/Sandbox\n // alias); accept both.\n sandboxId?: string;\n repoId?: string;\n label: string;\n createdAt: string;\n}\n\nexport function normalizeSandboxCredential(wire: WireSandboxCredential): SandboxCredential {\n return {\n sandboxId: wire.sandboxId ?? wire.repoId ?? '',\n credentialId: wire.credentialId,\n provider: wire.provider,\n label: wire.label,\n displayHint: wire.displayHint ?? undefined,\n createdAt: wire.createdAt,\n };\n}\n\nexport function normalizeGatewayToken(wire: WireGatewayToken): GatewayToken {\n return {\n id: wire.id,\n sandboxId: wire.sandboxId ?? wire.repoId ?? '',\n label: wire.label,\n createdAt: wire.createdAt,\n };\n}\n","// GatewayTokensClient covers sandbox-scoped FOA bearer tokens (the\n// post-redesign replacement for the legacy RepoAiApiKey rows). Each\n// sandbox can have multiple tokens for rotation / dev-prod separation.\n//\n// The plaintext bearer is returned EXACTLY ONCE — at create time. The\n// frontend must surface it (\"copy now\") before navigating away; once\n// the response is dropped, only the encrypted envelope persists and the\n// plaintext is unrecoverable.\nimport type { BaseClient } from '../../http/BaseClient.js';\nimport {\n CreateGatewayTokenRequest,\n CreateGatewayTokenResponse,\n GatewayToken,\n SimpleKeysResponse,\n WireGatewayToken,\n normalizeGatewayToken,\n} from './types.js';\n\nexport class GatewayTokensClient {\n constructor(private readonly http: BaseClient) {}\n\n async list(sandboxId: string): Promise<GatewayToken[]> {\n const res = await this.http.get<{ success: boolean; tokens?: WireGatewayToken[]; data?: WireGatewayToken[] }>(\n `/sandbox/${sandboxId}/gateway-token`,\n );\n const list = res.tokens ?? res.data ?? [];\n return list.map(normalizeGatewayToken);\n }\n\n /**\n * create returns both the persisted token row and the plaintext bearer\n * (`secret`). The bearer is shown only here; surface it to the user\n * immediately. If they navigate away without copying, they have to\n * delete the token and create a new one.\n */\n async create(sandboxId: string, body: CreateGatewayTokenRequest): Promise<CreateGatewayTokenResponse> {\n const res = await this.http.post<{\n success: boolean;\n token?: WireGatewayToken;\n secret?: string;\n }>(`/sandbox/${sandboxId}/gateway-token`, { body });\n if (!res.token || !res.secret) {\n throw new Error('createGatewayToken response missing token or secret.');\n }\n return {\n token: normalizeGatewayToken(res.token),\n secret: res.secret,\n };\n }\n\n delete(sandboxId: string, tokenId: string): Promise<SimpleKeysResponse> {\n return this.http.delete<SimpleKeysResponse>(`/sandbox/${sandboxId}/gateway-token/${tokenId}`);\n }\n}\n","// Universal credentials client. Post-credential-redesign (cloud-agent-\n// backend migration 0010) one schema covers every provider: cloud, SSH,\n// GitHub, GitLab, Azure DevOps, OpenAI, Anthropic. Provider-specific\n// fields live inside `metadata`; the catalog at ./providers.ts is the\n// authoritative shape per provider.\n//\n// Surface:\n// apiClient.credentials.list() — every credential in the project\n// apiClient.credentials.create() — one create endpoint, any provider\n// apiClient.credentials.update() — partial update\n// apiClient.credentials.delete() — remove\n// apiClient.credentials.providers() — fetch the catalog\n// apiClient.credentials.sandbox.* — sandbox associations (any provider)\n// apiClient.credentials.gatewayTokens.* — sandbox FOA bearer tokens\nimport type { BaseClient } from '../../http/BaseClient.js';\nimport { GatewayTokensClient } from './GatewayTokensClient.js';\nimport {\n Credential,\n CreateCredentialRequest,\n ListCredentialsQuery,\n ProviderID,\n SandboxCredential,\n SimpleKeysResponse,\n UpdateCredentialRequest,\n WireSandboxCredential,\n normalizeSandboxCredential,\n} from './types.js';\nimport type { ProviderSpec } from './providers.js';\n\n// ── Sandbox associations ───────────────────────────────────────────────\n\nclass SandboxCredentialScope {\n constructor(private readonly http: BaseClient) {}\n\n async list(sandboxId: string): Promise<SandboxCredential[]> {\n const res = await this.http.get<{ success: boolean; items?: WireSandboxCredential[]; data?: WireSandboxCredential[] }>(\n `/sandbox/${sandboxId}/credential`,\n );\n const list = res.items ?? res.data ?? [];\n return list.map(normalizeSandboxCredential);\n }\n\n attach(sandboxId: string, credentialId: string): Promise<SimpleKeysResponse> {\n return this.http.post<SimpleKeysResponse>(`/sandbox/${sandboxId}/credential`, {\n body: { credentialId },\n });\n }\n\n detach(sandboxId: string, credentialId: string): Promise<SimpleKeysResponse> {\n return this.http.delete<SimpleKeysResponse>(`/sandbox/${sandboxId}/credential/${credentialId}`);\n }\n}\n\n// ── Top-level credentials client ──────────────────────────────────────\n\nexport class CredentialsClient {\n readonly sandbox: SandboxCredentialScope;\n readonly gatewayTokens: GatewayTokensClient;\n\n constructor(private readonly http: BaseClient) {\n this.sandbox = new SandboxCredentialScope(http);\n this.gatewayTokens = new GatewayTokensClient(http);\n }\n\n async list(query: ListCredentialsQuery): Promise<Credential[]> {\n const res = await this.http.get<{ success: boolean; credentials?: Credential[]; data?: Credential[] }>(\n '/credentials',\n {\n query: {\n projectId: query.projectId,\n provider: query.provider,\n capability: query.capability,\n },\n },\n );\n return res.credentials ?? res.data ?? [];\n }\n\n async create(body: CreateCredentialRequest): Promise<Credential> {\n const res = await this.http.post<{ success: boolean; data?: Credential; credential?: Credential }>(\n '/credentials',\n { body },\n );\n const value = res.data ?? res.credential;\n if (!value) throw new Error('createCredential response missing body.');\n return value;\n }\n\n async update(credentialId: string, body: UpdateCredentialRequest): Promise<Credential> {\n const res = await this.http.put<{ success: boolean; credential?: Credential; data?: Credential }>(\n `/credentials/${credentialId}`,\n { body },\n );\n const value = res.credential ?? res.data;\n if (!value) throw new Error('updateCredential response missing body.');\n return value;\n }\n\n delete(credentialId: string): Promise<SimpleKeysResponse> {\n return this.http.delete<SimpleKeysResponse>(`/credentials/${credentialId}`);\n }\n\n /**\n * providers fetches the server-side catalog. The tsclient ships its\n * own catalog mirror in ./providers.ts that the frontend can use\n * synchronously; this endpoint is the runtime source of truth and\n * picks up customer extensions added server-side without a tsclient\n * republish.\n */\n async providers(): Promise<ProviderSpec[]> {\n const res = await this.http.get<{ success: boolean; providers?: ProviderSpec[]; data?: ProviderSpec[] }>('/providers');\n return res.providers ?? res.data ?? [];\n }\n}\n\nexport type { ProviderID };\n","import type { TokenProvider } from '../../http/tokenProvider.js';\nimport type { ChatEvent, ChatScope } from './types.js';\n\nexport interface OpenChatStreamOptions {\n scope: ChatScope;\n conversationId: string;\n onEvent: (event: ChatEvent) => void;\n onError?: (err: Event) => void;\n lastEventId?: string;\n /** Heartbeat in ms before the polyfill considers the connection stale. Default: 60000. */\n heartbeatTimeout?: number;\n}\n\nexport interface ChatStreamHandle {\n close(): void;\n}\n\nexport interface ChatStreamDeps {\n baseUrl: string;\n getToken?: TokenProvider;\n}\n\nconst STREAM_PATH = '/api/agentengine/v1/agent/chat/sessions';\n\n/**\n * Opens an SSE connection to the chat stream. Requires the consumer to have\n * `event-source-polyfill` installed (peer dep). Browsers' native EventSource\n * does not support custom headers, which we need for auth + scope.\n */\nexport async function openChatStream(\n deps: ChatStreamDeps,\n options: OpenChatStreamOptions,\n): Promise<ChatStreamHandle> {\n // Lazy import so consumers in non-browser contexts (or those who don't use\n // the chat stream at all) aren't forced to install the polyfill.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const mod: any = await import('event-source-polyfill');\n const Polyfill = mod.EventSourcePolyfill ?? mod.default?.EventSourcePolyfill ?? mod.default;\n if (!Polyfill) {\n throw new Error('event-source-polyfill is required for client.chat.openStream(). Install it as a peer dep.');\n }\n\n const url = `${deps.baseUrl.replace(/\\/$/, '')}${STREAM_PATH}/${options.conversationId}/stream`;\n\n const headers: Record<string, string> = {\n 'X-Org-Id': options.scope.orgId,\n 'X-User-Id': options.scope.userId,\n 'X-Sandbox-Id': options.scope.sandboxId ?? options.scope.repoId ?? '',\n 'X-Repo-Id': options.scope.sandboxId ?? options.scope.repoId ?? '',\n };\n if (options.scope.projectId ?? options.scope.workspaceId) {\n headers['X-Project-Id'] = options.scope.projectId ?? options.scope.workspaceId ?? '';\n headers['X-Workspace-Id'] = options.scope.projectId ?? options.scope.workspaceId ?? '';\n }\n if (deps.getToken) {\n const token = await deps.getToken();\n if (token) headers['Authorization'] = `Bearer ${token}`;\n }\n if (options.lastEventId) headers['Last-Event-ID'] = options.lastEventId;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const es = new (Polyfill as any)(url, {\n headers,\n heartbeatTimeout: options.heartbeatTimeout ?? 60_000,\n });\n\n // The backend sends named SSE events (event: phase, event: question, …).\n // onmessage only fires for the default unnamed type; addEventListener is required for named events.\n const KNOWN_EVENTS = [\n 'phase', 'question', 'plan_draft',\n 'step_started', 'step_completed', 'step_failed', 'step_progress',\n 'narration', 'assistant_message', 'done',\n 'session_title',\n 'tool_call_started', 'tool_call_finished',\n 'llm_call_finished',\n 'tool_call_confirmation_required',\n ];\n\n const handleRaw = (raw: MessageEvent) => {\n try {\n const parsed = JSON.parse(raw.data) as ChatEvent;\n options.onEvent(parsed);\n } catch {\n // Ignore malformed events\n }\n };\n\n for (const name of KNOWN_EVENTS) {\n es.addEventListener(name, handleRaw);\n }\n\n if (options.onError) {\n es.onerror = (event: Event) => options.onError?.(event);\n }\n\n return { close: () => es.close() };\n}\n","import type { BaseClient } from '../../http/BaseClient.js';\nimport type { TokenProvider } from '../../http/tokenProvider.js';\nimport { openChatStream, type ChatStreamHandle, type OpenChatStreamOptions } from './ChatStream.js';\nimport type {\n AnswerChatQuestionRequest,\n AnswerChatQuestionResponse,\n CancelChatTurnResponse,\n ChatFeedbackEnvelope,\n ChatScheduleEnvelope,\n ChatScope,\n ConfirmChatToolCallRequest,\n ConfirmChatToolCallResponse,\n CreateChatScheduleRequest,\n CreateChatSessionRequest,\n CreateChatSessionResponse,\n DebugPayload,\n GetChatSessionResponse,\n ListChatFeedbackResponse,\n ListChatSchedulesResponse,\n ListChatScheduleRunsResponse,\n ListChatSessionsQuery,\n ListChatSessionsResponse,\n PostChatMessageRequest,\n PostChatMessageResponse,\n SubmitChatFeedbackRequest,\n UpdateChatScheduleRequest,\n} from './types.js';\n\nconst BASE_PATH = '/api/agentengine/v1/agent/chat/sessions';\n\nfunction scopeHeaders(scope: ChatScope): Record<string, string> {\n const sandboxId = scope.sandboxId ?? scope.repoId ?? '';\n const projectId = scope.projectId ?? scope.workspaceId;\n const headers: Record<string, string> = {\n 'X-Org-Id': scope.orgId,\n 'X-User-Id': scope.userId,\n 'X-Sandbox-Id': sandboxId,\n 'X-Repo-Id': sandboxId,\n };\n if (projectId) {\n headers['X-Project-Id'] = projectId;\n headers['X-Workspace-Id'] = projectId;\n }\n return headers;\n}\n\nclass ChatSessionsScope {\n constructor(private readonly http: BaseClient) {}\n\n create(scope: ChatScope, body: CreateChatSessionRequest): Promise<CreateChatSessionResponse> {\n return this.http.post<CreateChatSessionResponse>(BASE_PATH, {\n body,\n headers: scopeHeaders(scope),\n });\n }\n\n list(scope: ChatScope, query: ListChatSessionsQuery = {}): Promise<ListChatSessionsResponse> {\n return this.http.get<ListChatSessionsResponse>(BASE_PATH, {\n query,\n headers: scopeHeaders(scope),\n });\n }\n\n get(scope: ChatScope, conversationId: string): Promise<GetChatSessionResponse> {\n return this.http.get<GetChatSessionResponse>(`${BASE_PATH}/${conversationId}`, {\n headers: scopeHeaders(scope),\n });\n }\n\n delete(scope: ChatScope, conversationId: string): Promise<void> {\n return this.http.delete<void>(`${BASE_PATH}/${conversationId}`, {\n headers: scopeHeaders(scope),\n });\n }\n}\n\nclass ChatMessagesScope {\n constructor(private readonly http: BaseClient) {}\n\n post(scope: ChatScope, conversationId: string, body: PostChatMessageRequest): Promise<PostChatMessageResponse> {\n return this.http.post<PostChatMessageResponse>(`${BASE_PATH}/${conversationId}/messages`, {\n body,\n headers: scopeHeaders(scope),\n });\n }\n\n /**\n * Interrupts an in-flight chat-loop turn. The engine cancels the turn's\n * Go context and asks the sandbox service to kill any in-flight docker\n * exec inside the per-session container (the container itself survives\n * so the next turn keeps its filesystem state). Returns 404 when no\n * turn matches `turnId` — covers the race where the user clicks Stop\n * just after the turn already finished.\n *\n * The engine still emits a terminal `done` SSE event with\n * status=\"context_cancelled\" after this returns; the frontend should\n * render its \"Cancelled\" marker on that event rather than on this\n * response, so a reload mid-cancel still ends in the same UI state.\n */\n cancel(scope: ChatScope, conversationId: string, turnId: string): Promise<CancelChatTurnResponse> {\n return this.http.post<CancelChatTurnResponse>(\n `${BASE_PATH}/${conversationId}/messages/${turnId}/cancel`,\n { headers: scopeHeaders(scope) },\n );\n }\n\n /**\n * Deliver the user's allow/deny decision on an M3 confirmation modal\n * (fired when the policy hook emits a\n * `tool_call_confirmation_required` SSE event). The chat-loop has\n * suspended waiting on this call; on allow it dispatches the tool, on\n * deny it synthesises a \"DENIED:\" tool result so the model can react.\n * Returns 404 when no pending confirmation exists for the given\n * (turn, tool_call) — usually means the 4-minute confirmer timeout\n * already elapsed.\n */\n confirmToolCall(\n scope: ChatScope,\n conversationId: string,\n turnId: string,\n toolCallId: string,\n body: ConfirmChatToolCallRequest,\n ): Promise<ConfirmChatToolCallResponse> {\n return this.http.post<ConfirmChatToolCallResponse>(\n `${BASE_PATH}/${conversationId}/messages/${turnId}/confirm/${toolCallId}`,\n { body, headers: scopeHeaders(scope) },\n );\n }\n}\n\nclass ChatQuestionsScope {\n constructor(private readonly http: BaseClient) {}\n\n answer(\n scope: ChatScope,\n conversationId: string,\n turnId: string,\n body: AnswerChatQuestionRequest,\n ): Promise<AnswerChatQuestionResponse> {\n return this.http.post<AnswerChatQuestionResponse>(\n `${BASE_PATH}/${conversationId}/messages/${turnId}/answers`,\n { body, headers: scopeHeaders(scope) },\n );\n }\n}\n\n/**\n * Debug scope — fetches the consolidated payload (session, messages) used by\n * the dashboard Debug tab. Keyed by conversation ID.\n */\nclass ChatDebugScope {\n constructor(private readonly http: BaseClient) {}\n\n getByConversation(scope: ChatScope, conversationId: string): Promise<DebugPayload> {\n return this.http.get<DebugPayload>(`${BASE_PATH}/${conversationId}/debug`, {\n headers: scopeHeaders(scope),\n });\n }\n}\n\n/**\n * Schedules scope — manages the M3 Stage 4 cron-driven prompt\n * schedules. Repo-scoped: list / create / get / update / delete are\n * keyed by (repo, schedule_id). The dispatcher fires due schedules\n * server-side on its tick; the SDK only handles the CRUD surface.\n *\n * Endpoint shape:\n * GET /v1/agent/repos/:repo_id/schedules\n * POST /v1/agent/repos/:repo_id/schedules\n * GET /v1/agent/repos/:repo_id/schedules/:id\n * PUT /v1/agent/repos/:repo_id/schedules/:id\n * DELETE /v1/agent/repos/:repo_id/schedules/:id\n */\nclass ChatSchedulesScope {\n constructor(private readonly http: BaseClient) {}\n\n private repoPath(scope: ChatScope): string {\n const repoID = scope.sandboxId ?? scope.repoId ?? '';\n return `/api/agentengine/v1/agent/repos/${repoID}/schedules`;\n }\n\n list(scope: ChatScope): Promise<ListChatSchedulesResponse> {\n return this.http.get<ListChatSchedulesResponse>(this.repoPath(scope), {\n headers: scopeHeaders(scope),\n });\n }\n\n create(scope: ChatScope, body: CreateChatScheduleRequest): Promise<ChatScheduleEnvelope> {\n return this.http.post<ChatScheduleEnvelope>(this.repoPath(scope), {\n body,\n headers: scopeHeaders(scope),\n });\n }\n\n get(scope: ChatScope, scheduleId: string): Promise<ChatScheduleEnvelope> {\n return this.http.get<ChatScheduleEnvelope>(`${this.repoPath(scope)}/${scheduleId}`, {\n headers: scopeHeaders(scope),\n });\n }\n\n update(\n scope: ChatScope,\n scheduleId: string,\n body: UpdateChatScheduleRequest,\n ): Promise<ChatScheduleEnvelope> {\n return this.http.put<ChatScheduleEnvelope>(`${this.repoPath(scope)}/${scheduleId}`, {\n body,\n headers: scopeHeaders(scope),\n });\n }\n\n delete(scope: ChatScope, scheduleId: string): Promise<{ status: 'deleted' }> {\n return this.http.delete<{ status: 'deleted' }>(`${this.repoPath(scope)}/${scheduleId}`, {\n headers: scopeHeaders(scope),\n });\n }\n\n /**\n * List recent chat sessions spawned by a schedule's cron tick — used\n * by the SchedulesTab \"Runs\" panel to surface real audit trail\n * instead of dumping the user into the global chat list.\n *\n * Each entry is a full ChatSession row; `.id` is the conversation id\n * the dashboard navigates to (`/chat/:conversationId`). All rows are\n * unattended (the scheduler is the only writer of `schedule_id`),\n * which makes the chat session viewer render the \"Scheduled run\"\n * ribbon and hide the composer.\n *\n * Server returns the 50 most-recent rows; no cursor pagination in\n * v1 (deferred until the long-tail audit case proves real).\n */\n listRuns(scope: ChatScope, scheduleId: string): Promise<ListChatScheduleRunsResponse> {\n return this.http.get<ListChatScheduleRunsResponse>(\n `${this.repoPath(scope)}/${scheduleId}/runs`,\n { headers: scopeHeaders(scope) },\n );\n }\n}\n\n/**\n * Feedback scope — a user's \"Satisfied? Yes/No\" rating + optional comment on a\n * chat session, and the list of feedback recorded for it (so the UI can\n * pre-fill and so an org admin can review past ratings). Conversation-scoped;\n * pass `turn_id` in the body to scope feedback to a single turn.\n *\n * Endpoint shape:\n * POST /v1/agent/chat/sessions/:id/feedback\n * GET /v1/agent/chat/sessions/:id/feedback\n */\nclass ChatFeedbackScope {\n constructor(private readonly http: BaseClient) {}\n\n submit(\n scope: ChatScope,\n conversationId: string,\n body: SubmitChatFeedbackRequest,\n ): Promise<ChatFeedbackEnvelope> {\n return this.http.post<ChatFeedbackEnvelope>(`${BASE_PATH}/${conversationId}/feedback`, {\n body,\n headers: scopeHeaders(scope),\n });\n }\n\n list(scope: ChatScope, conversationId: string): Promise<ListChatFeedbackResponse> {\n return this.http.get<ListChatFeedbackResponse>(`${BASE_PATH}/${conversationId}/feedback`, {\n headers: scopeHeaders(scope),\n });\n }\n}\n\nexport class ChatClient {\n readonly sessions: ChatSessionsScope;\n readonly messages: ChatMessagesScope;\n readonly questions: ChatQuestionsScope;\n readonly debug: ChatDebugScope;\n readonly schedules: ChatSchedulesScope;\n readonly feedback: ChatFeedbackScope;\n\n constructor(\n private readonly http: BaseClient,\n private readonly streamDeps: { baseUrl: string; getToken?: TokenProvider },\n ) {\n this.sessions = new ChatSessionsScope(http);\n this.messages = new ChatMessagesScope(http);\n this.questions = new ChatQuestionsScope(http);\n this.debug = new ChatDebugScope(http);\n this.schedules = new ChatSchedulesScope(http);\n this.feedback = new ChatFeedbackScope(http);\n }\n\n openStream(options: OpenChatStreamOptions): Promise<ChatStreamHandle> {\n return openChatStream(this.streamDeps, options);\n }\n}\n","import type { BaseClient } from '../../http/BaseClient.js';\nimport type {\n CreateAgentTemplateRequest,\n ListAgentTemplatesQuery,\n ListAgentTemplatesResponse,\n SimpleAgentResponse,\n Template,\n} from './types.js';\n\nconst BASE_PATH = '/api/agentengine/v1/agent/templates';\n\nexport class TemplatesClient {\n constructor(private readonly http: BaseClient) {}\n\n list(query: ListAgentTemplatesQuery = {}): Promise<ListAgentTemplatesResponse> {\n return this.http.get<ListAgentTemplatesResponse>(BASE_PATH, { query });\n }\n\n create(body: CreateAgentTemplateRequest): Promise<Template> {\n return this.http.post<Template>(BASE_PATH, { body });\n }\n\n delete(templateId: string): Promise<SimpleAgentResponse> {\n return this.http.delete<SimpleAgentResponse>(`${BASE_PATH}/${templateId}`);\n }\n}\n","import type { BaseClient } from '../../http/BaseClient.js';\nimport type {\n CreateScheduledTaskRequest,\n ListScheduledTasksQuery,\n ListScheduledTasksResponse,\n ScheduledTask,\n SimpleAgentResponse,\n} from './types.js';\n\nconst BASE_PATH = '/api/agentengine/v1/agent/scheduled-tasks';\n\nexport class ScheduledTasksClient {\n constructor(private readonly http: BaseClient) {}\n\n list(query: ListScheduledTasksQuery): Promise<ListScheduledTasksResponse> {\n return this.http.get<ListScheduledTasksResponse>(BASE_PATH, { query });\n }\n\n create(body: CreateScheduledTaskRequest): Promise<ScheduledTask> {\n return this.http.post<ScheduledTask>(BASE_PATH, { body });\n }\n\n delete(taskId: string, orgId: string): Promise<SimpleAgentResponse> {\n return this.http.delete<SimpleAgentResponse>(`${BASE_PATH}/${taskId}`, {\n query: { org_id: orgId },\n });\n }\n}\n","import type { BaseClient } from '../../http/BaseClient.js';\nimport type {\n AcquireScanLeaseRequest,\n AcquireScanLeaseResponse,\n ListScanHistoryQuery,\n ListScanHistoryResponse,\n PeekScanLeaseResponse,\n ResourceTreeQuery,\n ResourceTreeResponse,\n SubgraphRequest,\n SubgraphResponse,\n} from './types.js';\n\nexport class ResourcesClient {\n constructor(private readonly http: BaseClient) {}\n\n getTree(repoId: string, query?: ResourceTreeQuery): Promise<ResourceTreeResponse> {\n const params = new URLSearchParams();\n const search = query?.search?.trim();\n if (search) params.set('search', search);\n if (query?.showDefault === true) params.set('showDefault', 'true');\n const qs = params.size > 0 ? `?${params.toString()}` : '';\n return this.http.get<ResourceTreeResponse>(`/repos/${repoId}/resources/tree${qs}`);\n }\n\n /**\n * BFS-walks the dependency graph starting from `seedResourceIds` (or\n * `seedNameTokens`) and returns the matching nodes + edges. Use this\n * to render an inbound/outbound dependency view for a selected\n * resource. The server caps the result at maxNodes (default 80,\n * hard cap 200) and sets `truncated` when the cap was hit.\n */\n getSubgraph(repoId: string, request: SubgraphRequest): Promise<SubgraphResponse> {\n return this.http.post<SubgraphResponse>(`/repos/${repoId}/resources/subgraph`, { body: request });\n }\n\n /**\n * Returns recent scan history for a repo, optionally filtered by\n * credential. Backed by CloudScanHistory rows written when the\n * agent's discovery orchestrator releases a lease (or when the\n * backend's cleanup job sweeps an expired one). Use this to render\n * \"last refreshed N min ago\" badges and per-scope add/remove counts\n * next to the resource tree.\n */\n listScans(repoId: string, query?: ListScanHistoryQuery): Promise<ListScanHistoryResponse> {\n const params = new URLSearchParams();\n if (query?.credentialId) params.set('credentialId', query.credentialId);\n if (query?.limit != null) params.set('limit', String(query.limit));\n const qs = params.size > 0 ? `?${params.toString()}` : '';\n return this.http.get<ListScanHistoryResponse>(`/repos/${repoId}/scans${qs}`);\n }\n\n /**\n * Peeks the active scan lease (if any) for the given credential. Used\n * by the dashboard to display a \"scan in progress\" badge without\n * attempting to acquire the lease. Returns `lease: null` when no\n * scan is running. Expired leases are returned with their stale\n * timestamps — callers should compare `expiresAt` to `Date.now()`\n * before treating them as active.\n */\n peekScanLease(repoId: string, credentialId: string): Promise<PeekScanLeaseResponse> {\n const params = new URLSearchParams();\n params.set('credentialId', credentialId);\n return this.http.get<PeekScanLeaseResponse>(`/repos/${repoId}/scans/lease?${params.toString()}`);\n }\n\n /**\n * Attempts to claim a scan lease. Returns the acquired lease on\n * success. The server responds 409 with a `ScanInProgressError`-\n * shaped body when another scan is already in flight — callers\n * should catch the HttpError, parse the body, and surface a polite\n * \"another scan is running\" notice rather than retry automatically.\n *\n * NOTE: routine use is the agent's job. The dashboard typically only\n * calls peekScanLease + listScans; this method is exposed for power-\n * user tooling and automated test harnesses.\n */\n acquireScanLease(repoId: string, request: AcquireScanLeaseRequest): Promise<AcquireScanLeaseResponse> {\n return this.http.post<AcquireScanLeaseResponse>(`/repos/${repoId}/scans/lease`, { body: request });\n }\n}\n","export interface SystemEvent {\n id: number;\n timestamp: string;\n contextId: string;\n context: string;\n event: string;\n orgId: string;\n userId: string;\n userName: string;\n userEmail: string;\n projectId: string | null;\n jsonData: string | null;\n showUnread: boolean;\n}\n\nexport interface WireSystemEvent extends Omit<SystemEvent, 'projectId'> {\n workspaceId?: string | null;\n projectId?: string | null;\n}\n\nexport interface SystemEventQuery {\n from_timestamp?: number;\n to_timestamp?: number;\n contextId?: string;\n context?: string;\n event?: string;\n userId?: string;\n projectId?: string;\n /** @deprecated use `projectId` */\n workspaceId?: string;\n showUnread?: boolean;\n skip?: number;\n take?: number;\n}\n\nexport interface SystemEventQueryResponse {\n events: SystemEvent[];\n total: number;\n skip: number;\n take: number;\n}\n\nexport interface SystemEventReadResponse {\n success: true;\n}\n\nexport function normalizeSystemEvent(wire: WireSystemEvent): SystemEvent {\n return {\n id: wire.id,\n timestamp: wire.timestamp,\n contextId: wire.contextId,\n context: wire.context,\n event: wire.event,\n orgId: wire.orgId,\n userId: wire.userId,\n userName: wire.userName,\n userEmail: wire.userEmail,\n projectId: wire.projectId ?? wire.workspaceId ?? null,\n jsonData: wire.jsonData ?? null,\n showUnread: wire.showUnread,\n };\n}\n\n// TODO(backend-cleanup): cloud-agent-backend/internal/domain/types.go SystemEvent\n// still emits `workspaceId`. When that becomes `projectId`, this normalizer\n// collapses to identity.\n","import type { BaseClient } from '../../http/BaseClient.js';\nimport {\n normalizeSystemEvent,\n SystemEventQuery,\n SystemEventQueryResponse,\n SystemEventReadResponse,\n WireSystemEvent,\n} from './types.js';\n\ninterface WireQueryResponse {\n events: WireSystemEvent[];\n total: number;\n skip: number;\n take: number;\n}\n\nexport class SystemEventsClient {\n constructor(private readonly http: BaseClient) {}\n\n async query(body: SystemEventQuery): Promise<SystemEventQueryResponse> {\n const wire = await this.http.post<WireQueryResponse>('/systemevent', { body });\n return {\n events: (wire.events ?? []).map(normalizeSystemEvent),\n total: wire.total ?? 0,\n skip: wire.skip ?? 0,\n take: wire.take ?? 0,\n };\n }\n\n markRead(eventIdOrIds: number | number[]): Promise<SystemEventReadResponse> {\n const body = Array.isArray(eventIdOrIds) ? { ids: eventIdOrIds } : { id: eventIdOrIds };\n return this.http.post<SystemEventReadResponse>('/systemevent/read', { body });\n }\n\n markUnread(eventIdOrIds: number | number[]): Promise<SystemEventReadResponse> {\n const body = Array.isArray(eventIdOrIds) ? { ids: eventIdOrIds } : { id: eventIdOrIds };\n return this.http.delete<SystemEventReadResponse>('/systemevent/read', { body });\n }\n}\n","import type { BaseClient } from '../../http/BaseClient.js';\nimport { unwrapData } from '../../common/envelope.js';\nimport type {\n BuySubscriptionRequest,\n BuySubscriptionResponse,\n CancelSubscriptionResponse,\n ListPaymentsResponse,\n OrgSubscription,\n Payment,\n Subscription,\n} from './types.js';\n\nexport class SubscriptionsClient {\n constructor(private readonly http: BaseClient) {}\n\n async listCatalog(): Promise<Subscription[]> {\n const res = await this.http.get<{ success: boolean; data: Subscription[] }>('/subscriptions', { skipAuth: true });\n return res.data ?? [];\n }\n\n async getMine(): Promise<OrgSubscription | null> {\n const res = await this.http.get<{ success: boolean; data: OrgSubscription | null }>('/subscriptions/my');\n return res.data ?? null;\n }\n\n buy(body: BuySubscriptionRequest): Promise<BuySubscriptionResponse> {\n return this.http.post<BuySubscriptionResponse>('/subscriptions/buy', { body });\n }\n\n cancel(): Promise<CancelSubscriptionResponse> {\n return this.http.post<CancelSubscriptionResponse>('/subscriptions/cancel', {});\n }\n\n async listPayments(): Promise<Payment[]> {\n const res = await this.http.get<ListPaymentsResponse>('/subscriptions/payments');\n return res.data ?? [];\n }\n\n /** Stripe-hosted billing portal URL. */\n async portal(): Promise<{ url: string }> {\n const res = await this.http.post<{ success: boolean; data: { url: string } }>('/subscriptions/portal', {});\n return unwrapData(res);\n }\n}\n","import type { BaseClient } from '../../http/BaseClient.js';\nimport { unwrapData } from '../../common/envelope.js';\nimport type {\n BuyCustomCreditRequest,\n BuyCustomCreditResponse,\n CreditBalance,\n CustomCreditPurchaseConfig,\n ListCreditsTransactionsQuery,\n ListCreditsTransactionsResponse,\n MonthlyCreditStats,\n} from './types.js';\n\nexport class CreditsClient {\n constructor(private readonly http: BaseClient) {}\n\n async getBalance(): Promise<CreditBalance> {\n const res = await this.http.get<{ success: boolean; data: CreditBalance }>('/credits/balance');\n return unwrapData(res);\n }\n\n listTransactions(query: ListCreditsTransactionsQuery = {}): Promise<ListCreditsTransactionsResponse> {\n return this.http.get<ListCreditsTransactionsResponse>('/credits/transactions', { query });\n }\n\n /** Backend currently returns 501. Surfaced for forward-compat. */\n async getMonthlyStats(): Promise<MonthlyCreditStats[]> {\n const res = await this.http.get<{ success: boolean; data: MonthlyCreditStats[] }>('/credits/stats/monthly');\n return res.data ?? [];\n }\n\n /**\n * \"Other amount\" PAYG config — bounds + presets for the\n * arbitrary-dollar tile. Public endpoint; returns a disabled\n * shape (`enabled: false`) when the feature is off so the\n * frontend can hide the tile without throwing.\n */\n async getCustomConfig(): Promise<CustomCreditPurchaseConfig> {\n const res = await this.http.get<{ success: boolean; data: CustomCreditPurchaseConfig }>('/credits/packs/custom-config');\n return unwrapData(res);\n }\n\n /**\n * Buy an arbitrary-dollar PAYG amount. The Stripe Checkout\n * session is built with `price_data` inline (no pre-created\n * Price), so the catalog has nothing to provision for this — it\n * is purely a per-purchase flow.\n */\n buyCustom(body: BuyCustomCreditRequest): Promise<BuyCustomCreditResponse> {\n return this.http.post<BuyCustomCreditResponse>('/credits/packs/buy-custom', { body });\n }\n}\n","import type { BaseClient } from '../../http/BaseClient.js';\nimport type {\n GetUsageSummaryQuery,\n GetUsageSummaryResponse,\n UsageByModelQuery,\n UsageByModelResponse,\n UsageReportQuery,\n UsageReportResponse,\n UsageSummaryQuery,\n UsageSummaryResponse,\n} from './types.js';\n\nconst LEGACY_AGENT_PATH = '/api/agentengine/v1/usage'; // legacy proxy path\nconst SCOPED_BASE = '/usage'; // new backend-scoped surface (RBAC + scope routing)\n\nexport class UsageClient {\n constructor(private readonly http: BaseClient) {}\n\n // ── legacy ─────────────────────────────────────────────────────────────────\n // Existing Settings → Usage page calls this. Kept for back-compat until the\n // new dashboard fully replaces the JSON dump.\n getSummary(query: GetUsageSummaryQuery): Promise<GetUsageSummaryResponse> {\n return this.http.get<GetUsageSummaryResponse>(`${LEGACY_AGENT_PATH}/summary`, { query });\n }\n\n // ── new scoped surface ─────────────────────────────────────────────────────\n // Hits the backend-side RBAC wrapper; the backend re-injects the scope id\n // into the agent query so we don't have to.\n org(query: UsageSummaryQuery = {}): Promise<UsageSummaryResponse> {\n return this.http.get(`${SCOPED_BASE}/org`, { query: query as Record<string, string> });\n }\n project(projectId: string, query: UsageSummaryQuery = {}): Promise<UsageSummaryResponse> {\n return this.http.get(`${SCOPED_BASE}/project/${encodeURIComponent(projectId)}`, { query: query as Record<string, string> });\n }\n sandbox(sandboxId: string, query: UsageSummaryQuery = {}): Promise<UsageSummaryResponse> {\n return this.http.get(`${SCOPED_BASE}/sandbox/${encodeURIComponent(sandboxId)}`, { query: query as Record<string, string> });\n }\n chat(chatId: string, query: UsageSummaryQuery = {}): Promise<UsageSummaryResponse> {\n return this.http.get(`${SCOPED_BASE}/chat/${encodeURIComponent(chatId)}`, { query: query as Record<string, string> });\n }\n\n // Each report variant exists so the dashboard chart can request hourly /\n // daily buckets without leaking scope routing into the caller.\n orgReport(query: UsageReportQuery = {}): Promise<UsageReportResponse> {\n return this.http.get(`${SCOPED_BASE}/org`, { query: { ...(query as Record<string, string>), kind: 'report' } });\n }\n projectReport(projectId: string, query: UsageReportQuery = {}): Promise<UsageReportResponse> {\n return this.http.get(`${SCOPED_BASE}/project/${encodeURIComponent(projectId)}`, { query: { ...(query as Record<string, string>), kind: 'report' } });\n }\n sandboxReport(sandboxId: string, query: UsageReportQuery = {}): Promise<UsageReportResponse> {\n return this.http.get(`${SCOPED_BASE}/sandbox/${encodeURIComponent(sandboxId)}`, { query: { ...(query as Record<string, string>), kind: 'report' } });\n }\n chatReport(chatId: string, query: UsageReportQuery = {}): Promise<UsageReportResponse> {\n return this.http.get(`${SCOPED_BASE}/chat/${encodeURIComponent(chatId)}`, { query: { ...(query as Record<string, string>), kind: 'report' } });\n }\n\n // Per-model breakdown — drives the table under the bar chart.\n orgByModel(query: UsageByModelQuery = {}): Promise<UsageByModelResponse> {\n return this.http.get(`${SCOPED_BASE}/org`, { query: { ...(query as Record<string, string>), kind: 'by_model' } });\n }\n projectByModel(projectId: string, query: UsageByModelQuery = {}): Promise<UsageByModelResponse> {\n return this.http.get(`${SCOPED_BASE}/project/${encodeURIComponent(projectId)}`, { query: { ...(query as Record<string, string>), kind: 'by_model' } });\n }\n sandboxByModel(sandboxId: string, query: UsageByModelQuery = {}): Promise<UsageByModelResponse> {\n return this.http.get(`${SCOPED_BASE}/sandbox/${encodeURIComponent(sandboxId)}`, { query: { ...(query as Record<string, string>), kind: 'by_model' } });\n }\n chatByModel(chatId: string, query: UsageByModelQuery = {}): Promise<UsageByModelResponse> {\n return this.http.get(`${SCOPED_BASE}/chat/${encodeURIComponent(chatId)}`, { query: { ...(query as Record<string, string>), kind: 'by_model' } });\n }\n}\n","import type { BaseClient } from '../../http/BaseClient.js';\nimport type {\n ChatBudget,\n EffectiveChatBudget,\n OrgBudget,\n ScopedBudget,\n UpdateChatBudgetRequest,\n UpdateCostLimitRequest,\n UpdateOrgBudgetRequest,\n UpdateScopedBudgetRequest,\n} from './types.js';\n\n// Backend routes hang off the root authed group — see internal/http/routes/budgets\n// in cloud-agent-backend. The backend resolves project_id → sandbox_id mapping\n// and handles RBAC; the frontend just hands it the scope ids.\nconst BASE = '/budgets';\n\nexport class BudgetsClient {\n constructor(private readonly http: BaseClient) {}\n\n // ── org ──\n getOrg(): Promise<{ budget: OrgBudget }> {\n return this.http.get(`${BASE}/org`);\n }\n updateOrg(body: UpdateOrgBudgetRequest): Promise<{ budget: OrgBudget; message: string }> {\n return this.http.put(`${BASE}/org`, { body });\n }\n\n // ── project (workspace) ──\n getProject(projectId: string): Promise<{ budget: ScopedBudget }> {\n return this.http.get(`${BASE}/project/${encodeURIComponent(projectId)}`);\n }\n updateProject(projectId: string, body: UpdateScopedBudgetRequest): Promise<{ budget: ScopedBudget; message: string }> {\n return this.http.put(`${BASE}/project/${encodeURIComponent(projectId)}`, { body });\n }\n\n // ── sandbox (repo) ──\n getSandbox(sandboxId: string): Promise<{ budget: ScopedBudget }> {\n return this.http.get(`${BASE}/sandbox/${encodeURIComponent(sandboxId)}`);\n }\n updateSandbox(sandboxId: string, body: UpdateScopedBudgetRequest): Promise<{ budget: ScopedBudget; message: string }> {\n return this.http.put(`${BASE}/sandbox/${encodeURIComponent(sandboxId)}`, { body });\n }\n\n // ── chat session ──\n getChat(chatId: string): Promise<{ budget: ChatBudget }> {\n return this.http.get(`${BASE}/chat/${encodeURIComponent(chatId)}`);\n }\n updateChat(chatId: string, body: UpdateChatBudgetRequest): Promise<{ message: string }> {\n return this.http.put(`${BASE}/chat/${encodeURIComponent(chatId)}`, { body });\n }\n // Resolves chat → sandbox → project → org and returns the first non-zero\n // per-chat USD cap plus the level it came from. Powers the chat header\n // budget badge — UI labels inherited values.\n getEffectiveChat(chatId: string): Promise<EffectiveChatBudget> {\n return this.http.get(`${BASE}/chat/${encodeURIComponent(chatId)}/effective`);\n }\n\n // ── per-template / per-scheduled USD caps ──\n updateTemplateCostLimit(templateId: string, body: UpdateCostLimitRequest) {\n return this.http.put(`${BASE}/template/${encodeURIComponent(templateId)}/cost_limit`, { body });\n }\n updateScheduleCostLimit(scheduleId: string, body: UpdateCostLimitRequest) {\n return this.http.put(`${BASE}/schedule/${encodeURIComponent(scheduleId)}/cost_limit`, { body });\n }\n}\n","import { BaseClient, type BaseClientOptions } from './http/BaseClient.js';\nimport { AuthClient } from './modules/auth/AuthClient.js';\nimport { MfaClient } from './modules/mfa/MfaClient.js';\nimport { UserClient } from './modules/user/UserClient.js';\nimport { OrganizationClient } from './modules/organization/OrganizationClient.js';\nimport { ProjectsClient } from './modules/projects/ProjectsClient.js';\nimport { SandboxesClient } from './modules/sandboxes/SandboxesClient.js';\nimport { CredentialsClient } from './modules/credentials/CredentialsClient.js';\nimport { ChatClient } from './modules/chat/ChatClient.js';\nimport { TemplatesClient } from './modules/agentEngine/TemplatesClient.js';\nimport { ScheduledTasksClient } from './modules/agentEngine/ScheduledTasksClient.js';\nimport { ResourcesClient } from './modules/resources/ResourcesClient.js';\nimport { SystemEventsClient } from './modules/systemEvents/SystemEventsClient.js';\nimport { SubscriptionsClient } from './modules/billing/SubscriptionsClient.js';\nimport { CreditsClient } from './modules/billing/CreditsClient.js';\nimport { UsageClient } from './modules/usage/UsageClient.js';\nimport { BudgetsClient } from './modules/budgets/BudgetsClient.js';\n\nexport type CloudAgentClientOptions = BaseClientOptions;\n\nclass AgentEngineFacade {\n constructor(\n public readonly templates: TemplatesClient,\n public readonly scheduledTasks: ScheduledTasksClient,\n ) {}\n}\n\nclass BillingFacade {\n constructor(\n public readonly subscriptions: SubscriptionsClient,\n public readonly credits: CreditsClient,\n ) {}\n}\n\nexport class CloudAgentClient {\n readonly http: BaseClient;\n readonly auth: AuthClient;\n readonly mfa: MfaClient;\n readonly user: UserClient;\n readonly organization: OrganizationClient;\n readonly projects: ProjectsClient;\n readonly sandboxes: SandboxesClient;\n readonly credentials: CredentialsClient;\n readonly chat: ChatClient;\n readonly agentEngine: AgentEngineFacade;\n readonly resources: ResourcesClient;\n readonly systemEvents: SystemEventsClient;\n readonly billing: BillingFacade;\n readonly usage: UsageClient;\n readonly budgets: BudgetsClient;\n\n constructor(options: CloudAgentClientOptions) {\n this.http = new BaseClient(options);\n this.auth = new AuthClient(this.http);\n this.mfa = new MfaClient(this.http);\n this.user = new UserClient(this.http);\n this.organization = new OrganizationClient(this.http);\n this.projects = new ProjectsClient(this.http);\n this.sandboxes = new SandboxesClient(this.http);\n this.credentials = new CredentialsClient(this.http);\n this.chat = new ChatClient(this.http, { baseUrl: this.http.baseUrl, getToken: options.getToken });\n this.agentEngine = new AgentEngineFacade(\n new TemplatesClient(this.http),\n new ScheduledTasksClient(this.http),\n );\n this.resources = new ResourcesClient(this.http);\n this.systemEvents = new SystemEventsClient(this.http);\n this.billing = new BillingFacade(new SubscriptionsClient(this.http), new CreditsClient(this.http));\n this.usage = new UsageClient(this.http);\n this.budgets = new BudgetsClient(this.http);\n }\n}\n","export enum ProviderType {\n LOCAL = 'LOCAL',\n GOOGLE = 'GOOGLE',\n MICROSOFT = 'MICROSOFT',\n GITHUB = 'GITHUB',\n WEB3_STELLAR = 'WEB3_STELLAR',\n}\n\nexport enum AccessType {\n READ = 'READ',\n WRITE = 'WRITE',\n ADMIN = 'ADMIN',\n}\n\nexport enum OrgRoles {\n USER = 0x00,\n BILLING = 0x01,\n WORKSPACES = 0x02,\n ADMINISTRATORS = 0xfe,\n OWNER = 0xff,\n}\n\nexport interface UserSummary {\n id: string;\n name: string;\n lastName: string;\n email: string;\n orgRole?: number | null;\n}\n","export enum MFAType {\n GOOGLE_AUTH = 'GOOGLE_AUTH',\n MAGIC_LINK = 'MAGIC_LINK',\n PASSKEY = 'PASSKEY',\n}\n\nexport interface MFAStatus {\n isEnabled: boolean;\n isRequired: boolean;\n isEnforced: boolean;\n enabledMethods: MFAType[];\n primaryMethod?: MFAType | null;\n sessionVerified: boolean;\n}\n\nexport interface MFASetupResponse {\n success: boolean;\n data?: {\n mfaType: MFAType;\n secret?: string;\n qrCode?: string;\n backupCodes?: string[];\n };\n message?: string;\n}\n\nexport interface MFAVerifySetupRequest {\n mfaType: MFAType;\n code?: string;\n credential?: Record<string, unknown>;\n}\n\nexport interface MFAVerifyLoginRequest {\n mfaType: MFAType;\n code?: string;\n credential?: Record<string, unknown>;\n}\n\nexport interface MFASimpleResponse {\n success: boolean;\n message?: string;\n data?: unknown;\n}\n\nexport interface MFAVerifyLoginResponse {\n success: boolean;\n accessToken?: string;\n refreshToken?: string;\n tokenId?: string;\n expiresAt?: number;\n user?: unknown;\n message?: string;\n error_code?: string;\n}\n\nexport interface MagicLinkSendResponse {\n success: boolean;\n message?: string;\n}\n\nexport interface MagicLinkActivateRequest {\n token: string;\n}\n","// Provider catalog — TypeScript mirror of cloud-agent-backend's\n// internal/providers package. Drives the dynamic key form (one component\n// renders any provider) and pre-validates payloads client-side before\n// submitting. The server-side catalog is the safety net; this mirror\n// lets the UI fail fast and produce friendlier inline errors.\n//\n// Keep this file in sync with cloud-agent-backend/internal/providers/specs.go\n// when adding/changing providers. The shapes are intentionally identical.\n\n// ── Field-descriptor types ─────────────────────────────────────────────\n\nexport type FieldType = 'text' | 'password' | 'number' | 'textarea' | 'pem' | 'json' | 'stringList';\n\nexport interface FieldSpec {\n /** JSON-pointer-ish: \"secret\" | \"metadata.<key>\". */\n path: string;\n label: string;\n type: FieldType;\n required: boolean;\n /** True for fields that hold credential material — UI hides the value. */\n secret?: boolean;\n default?: unknown;\n placeholder?: string;\n help?: string;\n}\n\n// Capability bitmask values mirrored from cloud-agent-backend's\n// internal/providers package and the \"Provider\" master table seeded by\n// migration 0005. Frontends drive tab/section filtering by AND-ing\n// against these bits — adding a new capability is a backend migration,\n// not a frontend deploy.\n//\n// CAP_STORAGE — cloud ops / resource discovery (S3/GCS/Blob, EC2, …)\n// CAP_AI — LLM / embedding inference\n// CAP_COMPUTE — SSH and similar infra-runtime credentials\n// CAP_VCS — source-code platforms (GitHub, future GitLab)\n// CAP_NOTIFY — outbound notification transports (Slack, Teams, PagerDuty, SMTP)\n// CAP_GENERAL — catch-all for the legacy \"OTHER\" row\nexport const CAP_STORAGE = 0x1;\nexport const CAP_AI = 0x2;\nexport const CAP_COMPUTE = 0x4;\nexport const CAP_VCS = 0x8;\nexport const CAP_NOTIFY = 0x10;\nexport const CAP_GENERAL = 0xff;\n\nexport interface ProviderSpec {\n id: string;\n displayName: string;\n /**\n * Bitmask of CAP_* values describing what kinds of operations this\n * credential can drive. Sourced from the Provider master table; mirror\n * declared inline below so the frontend can render its tabs / filters\n * without a runtime round-trip.\n */\n capabilities: number;\n fields: FieldSpec[];\n}\n\n// ── Catalog ─────────────────────────────────────────────────────────────\n\nexport const PROVIDER_CATALOG: Record<string, ProviderSpec> = {\n AWS: {\n id: 'AWS',\n displayName: 'Amazon Web Services',\n capabilities: CAP_STORAGE,\n fields: [\n { path: 'metadata.accessKeyId', label: 'Access Key ID', type: 'text', required: true,\n placeholder: 'AKIAxxxxxxxxxxxxxxxx',\n help: 'The AKIA-prefixed identifier from IAM. Stored in plain text — only the secret access key is encrypted.' },\n { path: 'secret', label: 'Secret Access Key', type: 'password', required: true, secret: true,\n help: 'The 40-character secret. Encrypted at rest.' },\n { path: 'metadata.region', label: 'Region', type: 'text', required: false,\n placeholder: 'us-east-1',\n help: 'Default region for boto3 clients. Optional — leave blank to use the SDK default.' },\n { path: 'metadata.endpoint', label: 'Endpoint (optional)', type: 'text', required: false,\n placeholder: 'https://s3.amazonaws.com',\n help: 'Override for non-AWS S3-compatible endpoints (MinIO, Wasabi, etc.). Most users leave blank.' },\n ],\n },\n BEDROCK: {\n id: 'BEDROCK',\n displayName: 'AWS Bedrock',\n capabilities: CAP_AI,\n fields: [\n { path: 'metadata.accessKeyId', label: 'Access Key ID', type: 'text', required: true,\n placeholder: 'AKIAxxxxxxxxxxxxxxxx',\n help: 'IAM access key allowed to invoke Bedrock. Stored in plain text — only the secret access key is encrypted.' },\n { path: 'secret', label: 'Secret Access Key', type: 'password', required: true, secret: true,\n help: 'The IAM secret. Encrypted at rest.' },\n { path: 'metadata.region', label: 'Region', type: 'text', required: false,\n placeholder: 'us-east-1',\n help: 'Default region for Bedrock Runtime. Optional — leave blank to use the SDK default.' },\n { path: 'metadata.endpoint', label: 'Endpoint (optional)', type: 'text', required: false,\n placeholder: 'https://bedrock-runtime.us-east-1.amazonaws.com',\n help: 'Override for VPC endpoints or testing. Most users leave blank.' },\n ],\n },\n GCP: {\n id: 'GCP',\n displayName: 'Google Cloud',\n capabilities: CAP_STORAGE,\n fields: [\n { path: 'secret', label: 'Service Account JSON', type: 'json', required: true, secret: true,\n placeholder: '{\"type\":\"service_account\",\"project_id\":\"…\",\"client_email\":\"…\",\"private_key\":\"…\"}',\n help: 'Paste the service-account JSON, or drop the file you downloaded from the IAM console. The full document is encrypted; project_id and client_email are extracted automatically for display.' },\n ],\n },\n AZURE: {\n id: 'AZURE',\n displayName: 'Microsoft Azure',\n capabilities: CAP_STORAGE,\n fields: [\n { path: 'metadata.clientId', label: 'Client ID (Application ID)', type: 'text', required: true,\n placeholder: '00000000-0000-0000-0000-000000000000' },\n { path: 'secret', label: 'Client Secret', type: 'password', required: true, secret: true,\n help: 'The secret value generated when you registered the app. Encrypted at rest.' },\n { path: 'metadata.tenantId', label: 'Tenant ID', type: 'text', required: true,\n placeholder: '00000000-0000-0000-0000-000000000000' },\n { path: 'metadata.subscriptionId', label: 'Subscription ID', type: 'text', required: false,\n placeholder: '00000000-0000-0000-0000-000000000000' },\n ],\n },\n SSH: {\n id: 'SSH',\n displayName: 'SSH',\n capabilities: CAP_COMPUTE,\n fields: [\n { path: 'metadata.user', label: 'User', type: 'text', required: true,\n placeholder: 'ubuntu',\n help: 'Linux user the agent will SSH as.' },\n { path: 'metadata.host', label: 'Host', type: 'text', required: true,\n placeholder: 'vps.example.com or * for wildcard',\n help: \"Hostname or IP. Use '*' for a key that's valid across multiple hosts; the agent will require the prompt to name the target host.\" },\n { path: 'metadata.port', label: 'Port', type: 'number', required: false, default: 22,\n placeholder: '22' },\n { path: 'secret', label: 'PEM Private Key', type: 'pem', required: true, secret: true,\n placeholder: '-----BEGIN OPENSSH PRIVATE KEY-----\\n…\\n-----END OPENSSH PRIVATE KEY-----',\n help: 'Paste the PEM, or drop the private key file (e.g. id_ed25519). Passphrase-encrypted keys are rejected — the agent runs unattended.' },\n ],\n },\n GITHUB: {\n id: 'GITHUB',\n displayName: 'GitHub',\n capabilities: CAP_VCS,\n fields: [\n { path: 'secret', label: 'Personal Access Token (PAT)', type: 'password', required: true, secret: true,\n placeholder: 'ghp_xxxxxxxxxxxxxxxxxxxxxxxx',\n help: 'A classic or fine-grained PAT. Encrypted at rest. The first 7 characters are kept in metadata for display.' },\n { path: 'metadata.org', label: 'Org (optional)', type: 'text', required: false,\n placeholder: 'my-github-org',\n help: 'Restrict this credential to a single org if you scoped the PAT that way. Optional — leave blank for personal-account access.' },\n { path: 'metadata.repoSlugs', label: 'Allowed Repos (optional)', type: 'stringList', required: false,\n placeholder: 'owner/repo',\n help: \"Repos the agent is allowed to operate on with this credential, as 'owner/name'. Drives the awareness block injected into the planner. Leave empty to grant the full PAT scope (the agent will still only act on repos the user names in prompts).\" },\n { path: 'metadata.protectedBranches', label: 'Protected Branches (optional)', type: 'stringList', required: false,\n placeholder: 'main',\n help: \"Branches that require explicit user approval for write operations (push, merge, delete). 'main' / 'master' / 'release/*' are good defaults.\" },\n ],\n },\n GITLAB: {\n id: 'GITLAB',\n displayName: 'GitLab',\n capabilities: CAP_VCS,\n fields: [\n { path: 'secret', label: 'Access Token', type: 'password', required: true, secret: true,\n placeholder: 'glpat-xxxxxxxxxxxxxxxxxxxx',\n help: 'A personal, project, or group access token. Encrypted at rest. The first 9 characters are kept in metadata for display.' },\n { path: 'metadata.endpoint', label: 'Endpoint (optional)', type: 'text', required: false,\n placeholder: 'https://gitlab.example.com/api/v4',\n help: 'Override for self-hosted GitLab. Leave blank to use https://gitlab.com/api/v4.' },\n { path: 'metadata.group', label: 'Top-level Group (optional)', type: 'text', required: false,\n placeholder: 'my-gitlab-group',\n help: 'Restrict this credential to a single top-level group if you scoped the token that way. Optional — leave blank for personal-account or wider scope.' },\n { path: 'metadata.repoSlugs', label: 'Allowed Projects (optional)', type: 'stringList', required: false,\n placeholder: 'group/subgroup/project',\n help: 'Project paths the agent is allowed to operate on with this credential. GitLab project paths can be arbitrarily deep (group/subgroup/.../project). Leave empty to grant the full token scope.' },\n { path: 'metadata.protectedBranches', label: 'Protected Branches (optional)', type: 'stringList', required: false,\n placeholder: 'main',\n help: \"Branches that require explicit user approval for write operations. 'main' / 'master' / 'release/*' are good defaults.\" },\n ],\n },\n AZURE_DEVOPS: {\n id: 'AZURE_DEVOPS',\n displayName: 'Azure DevOps',\n capabilities: CAP_VCS,\n fields: [\n { path: 'secret', label: 'Personal Access Token (PAT)', type: 'password', required: true, secret: true,\n placeholder: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',\n help: 'An ADO PAT with the scopes you want the agent to use (Code, Build, Release, Work Items …). Encrypted at rest. The first 7 characters are kept in metadata for display.' },\n { path: 'metadata.organization', label: 'Organization', type: 'text', required: true,\n placeholder: 'my-ado-org',\n help: 'The ADO organization name (the segment after dev.azure.com/, or the prefix in your-org.visualstudio.com).' },\n { path: 'metadata.project', label: 'Project (optional)', type: 'text', required: false,\n placeholder: 'Engineering',\n help: 'Restrict this credential to a single ADO project. Optional — leave blank if the PAT spans multiple projects in the org.' },\n { path: 'metadata.endpoint', label: 'Endpoint (optional)', type: 'text', required: false,\n placeholder: 'https://dev.azure.com',\n help: 'Override for ADO Server (on-prem) deployments. Leave blank to use https://dev.azure.com.' },\n { path: 'metadata.repoSlugs', label: 'Allowed Repos (optional)', type: 'stringList', required: false,\n placeholder: 'project/repo',\n help: \"Repos the agent is allowed to operate on. Use 'project/repo' when 'Project' is blank, or just 'repo' when scoped to one project. Leave empty to grant the full PAT scope.\" },\n { path: 'metadata.protectedBranches', label: 'Protected Branches (optional)', type: 'stringList', required: false,\n placeholder: 'main',\n help: 'Branches that require explicit user approval for write operations and pipeline triggers.' },\n ],\n },\n OPENAI: {\n id: 'OPENAI',\n displayName: 'OpenAI',\n capabilities: CAP_AI,\n fields: [\n { path: 'secret', label: 'API Key', type: 'password', required: true, secret: true,\n placeholder: 'sk-…',\n help: 'Your OpenAI API key. Encrypted at rest. The first ~7 characters are kept in metadata for display.' },\n { path: 'metadata.endpoint', label: 'Endpoint (optional)', type: 'text', required: false,\n placeholder: 'https://api.openai.com/v1',\n help: 'Override for OpenAI-compatible endpoints (Azure OpenAI, self-hosted gateways). Most users leave blank.' },\n ],\n },\n ANTHROPIC: {\n id: 'ANTHROPIC',\n displayName: 'Anthropic',\n capabilities: CAP_AI,\n fields: [\n { path: 'secret', label: 'API Key', type: 'password', required: true, secret: true,\n placeholder: 'sk-ant-…',\n help: 'Your Anthropic API key. Encrypted at rest. The first ~10 characters are kept in metadata for display.' },\n { path: 'metadata.endpoint', label: 'Endpoint (optional)', type: 'text', required: false,\n placeholder: 'https://api.anthropic.com',\n help: 'Override for Anthropic-compatible endpoints. Most users leave blank.' },\n ],\n },\n GEMINI: {\n id: 'GEMINI',\n displayName: 'Google Gemini',\n capabilities: CAP_AI,\n fields: [\n { path: 'secret', label: 'API Key', type: 'password', required: true, secret: true,\n placeholder: 'AIza…',\n help: 'Your Gemini API key from Google AI Studio. Encrypted at rest. The first ~7 characters are kept in metadata for display.' },\n { path: 'metadata.endpoint', label: 'Endpoint (optional)', type: 'text', required: false,\n placeholder: 'https://generativelanguage.googleapis.com',\n help: 'Override for proxies or regional endpoints. Most users leave blank to use the default Gemini API base URL.' },\n ],\n },\n SLACK: {\n id: 'SLACK',\n displayName: 'Slack',\n capabilities: CAP_NOTIFY,\n fields: [\n { path: 'secret', label: 'Incoming Webhook URL', type: 'password', required: true, secret: true,\n placeholder: 'https://hooks.slack.com/services/T000/B000/xxxxxxxx',\n help: 'A Slack Incoming Webhook URL. The target channel is fixed by the webhook. Encrypted at rest; never injected into the sandbox.' },\n { path: 'metadata.channelHint', label: 'Channel Hint (optional)', type: 'text', required: false,\n placeholder: '#oncall',\n help: 'Display-only label for the channel this webhook posts to. Does not change routing — the webhook URL controls the destination.' },\n ],\n },\n TEAMS: {\n id: 'TEAMS',\n displayName: 'Microsoft Teams',\n capabilities: CAP_NOTIFY,\n fields: [\n { path: 'secret', label: 'Incoming Webhook URL', type: 'password', required: true, secret: true,\n placeholder: 'https://outlook.office.com/webhook/...',\n help: 'A Teams Incoming Webhook (connector) URL. The target channel is fixed by the webhook. Encrypted at rest; never injected into the sandbox.' },\n ],\n },\n PAGERDUTY: {\n id: 'PAGERDUTY',\n displayName: 'PagerDuty',\n capabilities: CAP_NOTIFY,\n fields: [\n { path: 'secret', label: 'Integration / Routing Key', type: 'password', required: true, secret: true,\n placeholder: 'R0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX',\n help: 'An Events API v2 integration (routing) key from a PagerDuty service. Encrypted at rest; never injected into the sandbox.' },\n ],\n },\n SMTP: {\n id: 'SMTP',\n displayName: 'Email (SMTP)',\n capabilities: CAP_NOTIFY,\n fields: [\n { path: 'metadata.host', label: 'SMTP Host', type: 'text', required: true,\n placeholder: 'smtp.example.com',\n help: 'Hostname of the SMTP relay.' },\n { path: 'metadata.port', label: 'Port', type: 'number', required: false, default: 587,\n placeholder: '587',\n help: 'SMTP port. Defaults to 587 (STARTTLS). TLS is always required.' },\n { path: 'metadata.fromAddress', label: 'From Address', type: 'text', required: true,\n placeholder: 'alerts@example.com',\n help: 'Envelope-from / From header for messages the agent sends. Also used as the SMTP AUTH username.' },\n { path: 'metadata.toAddresses', label: 'To Addresses', type: 'stringList', required: true,\n placeholder: 'oncall@example.com',\n help: 'One or more recipient addresses. Every notify message is sent to all of them.' },\n { path: 'secret', label: 'Password', type: 'password', required: true, secret: true,\n help: 'SMTP AUTH password for the From address. Encrypted at rest; never injected into the sandbox.' },\n ],\n },\n};\n\n// Stable display order for dropdowns. Matches the Go catalog's List().\nconst PROVIDER_ORDER = ['AWS', 'BEDROCK', 'GCP', 'AZURE', 'SSH', 'GITHUB', 'GITLAB', 'AZURE_DEVOPS', 'OPENAI', 'ANTHROPIC', 'GEMINI', 'SLACK', 'TEAMS', 'PAGERDUTY', 'SMTP'];\n\nexport function listProviders(): ProviderSpec[] {\n return PROVIDER_ORDER.flatMap((id) => (PROVIDER_CATALOG[id] ? [PROVIDER_CATALOG[id]] : []));\n}\n\nexport function getProvider(id: string): ProviderSpec | undefined {\n return PROVIDER_CATALOG[id];\n}\n\n// ── Path helpers ───────────────────────────────────────────────────────\n\nconst SECRET_PATH = 'secret';\nconst METADATA_PREFIX = 'metadata.';\n\nexport function isSecretPath(path: string): boolean {\n return path === SECRET_PATH;\n}\n\nexport function isMetadataPath(path: string): path is `metadata.${string}` {\n return path.startsWith(METADATA_PREFIX);\n}\n\nexport function metadataKey(path: string): string | undefined {\n return isMetadataPath(path) ? path.slice(METADATA_PREFIX.length) : undefined;\n}\n\n/** getValueAt reads the FieldSpec.path from a separate (secret, metadata) tuple. */\nexport function getValueAt(secret: string, metadata: Record<string, unknown>, path: string): unknown {\n if (path === SECRET_PATH) return secret;\n const k = metadataKey(path);\n return k ? metadata[k] : undefined;\n}\n\n/** setValueAt writes to (secret, metadata). Returns the updated tuple. */\nexport function setValueAt(\n secret: string,\n metadata: Record<string, unknown>,\n path: string,\n value: unknown,\n): { secret: string; metadata: Record<string, unknown> } {\n if (path === SECRET_PATH) return { secret: typeof value === 'string' ? value : '', metadata };\n const k = metadataKey(path);\n if (!k) return { secret, metadata };\n const nextMeta = { ...metadata };\n if (value === undefined || value === null || value === '') delete nextMeta[k];\n else nextMeta[k] = value;\n return { secret, metadata: nextMeta };\n}\n\n// ── Validation ─────────────────────────────────────────────────────────\n\n/**\n * validate runs the structural checks for a credential payload. Returns\n * an error string on failure, or null on success. Mirrors the Go-side\n * Validate() in internal/providers/validators.go.\n */\nexport function validate(\n providerId: string,\n label: string,\n secret: string,\n metadata: Record<string, unknown>,\n): string | null {\n const spec = getProvider(providerId);\n if (!spec) {\n return `Unknown provider \"${providerId}\". Known providers: ${Object.keys(PROVIDER_CATALOG).join(', ')}`;\n }\n if (!label || label.trim() === '') {\n return 'Label is required';\n }\n\n // Required-field + type checks.\n for (const f of spec.fields) {\n const present = isFieldPresent(secret, metadata, f.path);\n if (f.required && !present) {\n return `${spec.id}.${f.label} is required`;\n }\n if (!present) continue;\n const value = getValueAt(secret, metadata, f.path);\n const typeErr = typeCheck(f, value);\n if (typeErr) return typeErr;\n }\n\n // Reject any caller-supplied metadata keys not declared in the spec\n // and any reserved underscore-prefixed keys (catalog-managed).\n const allowed = allowedMetadataKeys(spec);\n for (const k of Object.keys(metadata)) {\n if (k.startsWith('_')) {\n return `Metadata key \"${k}\" is reserved (the leading underscore is catalog-managed); remove it from the payload`;\n }\n if (!allowed.has(k)) {\n return `Metadata key \"${k}\" is not part of the ${spec.id} spec. Allowed keys: ${[...allowed].join(', ')}`;\n }\n }\n return null;\n}\n\nfunction isFieldPresent(secret: string, metadata: Record<string, unknown>, path: string): boolean {\n const v = getValueAt(secret, metadata, path);\n if (v === undefined || v === null) return false;\n if (typeof v === 'string') return v.trim() !== '';\n // Mirror the Go getAtPath: empty arrays count as absent so required-field\n // checks fire and stringList fields can be cleared by submitting [].\n if (Array.isArray(v)) return v.length > 0;\n return true;\n}\n\nfunction typeCheck(f: FieldSpec, value: unknown): string | null {\n switch (f.type) {\n case 'text':\n case 'password':\n case 'textarea':\n return typeof value === 'string' ? null : `${f.label} must be a string`;\n case 'number':\n if (typeof value === 'number' && Number.isInteger(value) && value >= 0) return null;\n if (typeof value === 'string' && /^\\d+$/.test(value)) return null;\n return `${f.label} must be a non-negative integer`;\n case 'json':\n if (typeof value !== 'string') return `${f.label} must be a JSON string`;\n try {\n JSON.parse(value);\n return null;\n } catch {\n return `${f.label} is not valid JSON`;\n }\n case 'pem':\n if (typeof value !== 'string') return `${f.label} must be a PEM string`;\n return validatePEM(value, f.label);\n case 'stringList': {\n if (!Array.isArray(value)) return `${f.label} must be a list of strings`;\n for (let i = 0; i < value.length; i++) {\n const item = value[i];\n if (typeof item !== 'string') return `${f.label}[${i}] must be a string`;\n if (item.trim() === '') return `${f.label}[${i}] is empty`;\n }\n return null;\n }\n default:\n return `${f.label} has unsupported field type ${f.type}`;\n }\n}\n\nconst PEM_BEGIN_RE = /-----BEGIN [^-]+-----/;\nconst PEM_END_RE = /-----END [^-]+-----/;\nconst PEM_PROC_TYPE_ENCRYPTED = /^Proc-Type:\\s*\\d+,\\s*ENCRYPTED/m;\nconst PEM_DEK_INFO = /^DEK-Info:/m;\n\nfunction validatePEM(s: string, label: string): string | null {\n const t = s.trim();\n if (!t) return `${label}: empty PEM`;\n if (!PEM_BEGIN_RE.test(t) || !PEM_END_RE.test(t)) {\n return `${label}: no valid PEM block found (expected '-----BEGIN ... PRIVATE KEY-----')`;\n }\n if (PEM_PROC_TYPE_ENCRYPTED.test(t) || PEM_DEK_INFO.test(t)) {\n return `${label}: passphrase-encrypted PEM is not supported (the agent runs unattended)`;\n }\n return null;\n}\n\nfunction allowedMetadataKeys(spec: ProviderSpec): Set<string> {\n const out = new Set<string>();\n for (const f of spec.fields) {\n const k = metadataKey(f.path);\n if (k) out.add(k);\n }\n // Mirror the Go-side allow-list of SecretParser-derived metadata keys\n // so a round-trip read→edit→write doesn't trip the unknown-key check.\n switch (spec.id) {\n case 'GCP':\n out.add('clientEmail');\n out.add('projectId');\n break;\n case 'GITHUB':\n case 'AZURE_DEVOPS':\n case 'OPENAI':\n case 'ANTHROPIC':\n case 'GEMINI':\n out.add('tokenPrefix');\n break;\n case 'GITLAB':\n out.add('tokenPrefix');\n out.add('host'); // derived from endpoint by the parser\n break;\n }\n return out;\n}\n\n// ── Display hints ──────────────────────────────────────────────────────\n//\n// Used for client-side previews when forms are filled in but not yet\n// submitted. The persisted value comes from the server (cached in\n// metadata._displayHint) — this function is a fallback / preview helper.\n\nexport function computeDisplayHint(providerId: string, metadata: Record<string, unknown>): string {\n const cached = metadata['_displayHint'];\n if (typeof cached === 'string' && cached) return cached;\n\n switch (providerId) {\n case 'AWS':\n case 'BEDROCK': {\n const key = str(metadata['accessKeyId']);\n const region = str(metadata['region']);\n return shortPrefix(key, 8) + (region ? ` / ${region}` : '');\n }\n case 'GCP': {\n const email = str(metadata['clientEmail']);\n const proj = str(metadata['projectId']);\n if (!email && !proj) return '';\n if (!email) return proj;\n if (!proj) return email;\n return `${email} / ${proj}`;\n }\n case 'AZURE': {\n const client = str(metadata['clientId']);\n const sub = str(metadata['subscriptionId']);\n const head = shortPrefix(client, 8);\n return head + (sub ? ` / sub:${shortPrefix(sub, 8)}` : '');\n }\n case 'SSH': {\n const user = str(metadata['user']);\n const host = str(metadata['host']);\n const port = metadata['port'];\n let portStr = '';\n if (typeof port === 'number' && port > 0 && port !== 22) portStr = `:${port}`;\n else if (typeof port === 'string' && /^\\d+$/.test(port) && port !== '22') portStr = `:${port}`;\n if (!user && !host) return '';\n return `${user}@${host}${portStr}`.replace(/^@/, '');\n }\n case 'GITHUB': {\n const prefix = str(metadata['tokenPrefix']);\n const org = str(metadata['org']);\n const head = prefix ? `${prefix}…` : '';\n return [head, org].filter(Boolean).join(' / ');\n }\n case 'GITLAB': {\n const prefix = str(metadata['tokenPrefix']);\n const group = str(metadata['group']);\n let host = str(metadata['host']);\n if (!host) {\n const endpoint = str(metadata['endpoint']);\n host = endpoint ? hostFromURL(endpoint) : 'gitlab.com';\n }\n let out = prefix ? `${prefix}…` : '';\n if (group) out = out ? `${out} / ${group}` : group;\n if (host && host !== 'gitlab.com') out = out ? `${out} @ ${host}` : host;\n return out;\n }\n case 'AZURE_DEVOPS': {\n const prefix = str(metadata['tokenPrefix']);\n const org = str(metadata['organization']);\n const project = str(metadata['project']);\n let out = prefix ? `${prefix}…` : '';\n if (org) {\n const orgSeg = project ? `${org}/${project}` : org;\n out = out ? `${out} / ${orgSeg}` : orgSeg;\n }\n return out;\n }\n case 'OPENAI':\n case 'ANTHROPIC':\n case 'GEMINI': {\n const prefix = str(metadata['tokenPrefix']);\n return prefix ? `${prefix}…` : '';\n }\n case 'SLACK':\n return str(metadata['channelHint']);\n case 'SMTP': {\n const from = str(metadata['fromAddress']);\n const host = str(metadata['host']);\n return from + (host ? ` @ ${host}` : '');\n }\n default:\n return '';\n }\n}\n\nfunction str(v: unknown): string {\n return typeof v === 'string' ? v : '';\n}\n\nfunction shortPrefix(s: string, n: number): string {\n if (!s) return '';\n if (s.length <= n) return s;\n return s.slice(0, n) + '…';\n}\n\nfunction hostFromURL(raw: string): string {\n let s = raw.trim();\n const schemeIdx = s.indexOf('://');\n if (schemeIdx >= 0) s = s.slice(schemeIdx + 3);\n const cut = s.search(/[/?#]/);\n if (cut >= 0) s = s.slice(0, cut);\n return s;\n}\n","// Hierarchical USD budgets. All wire values are USD micros (1 USD = 1_000_000);\n// 0 means \"no cap / inherit from parent\" — never \"free\".\n\nexport type BudgetScope = 'org' | 'workspace' | 'repo' | 'chat';\n\nexport interface OrgBudget {\n id: string;\n org_id: string;\n daily_limit: number; // legacy token caps — being phased out (kept = 0)\n monthly_limit: number;\n tokens_today: number;\n tokens_month: number;\n daily_cost_limit_usd_micros: number;\n monthly_cost_limit_usd_micros: number;\n cost_today_usd_micros: number;\n cost_month_usd_micros: number;\n chat_session_cost_limit_usd_micros: number;\n reset_day_at: string;\n reset_month_at: string;\n updated_at: string;\n /** M3 Stage 3: action categories allowed at this scope. `read` is\n * implicit and never appears here. Lower scopes (workspace, repo,\n * schedule) intersect with this set. */\n granted_categories: string[];\n /** M3 Stage 4: inheritable schedule auto-disable threshold. Null\n * means \"inherit from parent\"; engine default is 5 when every\n * level in the chain is null. */\n max_consecutive_failures?: number;\n}\n\nexport interface ScopedBudget {\n id: string;\n org_id: string;\n workspace_id?: string;\n repo_id?: string;\n daily_cost_limit_usd_micros: number;\n monthly_cost_limit_usd_micros: number;\n chat_session_cost_limit_usd_micros: number;\n cost_today_usd_micros: number;\n cost_month_usd_micros: number;\n reset_day_at: string;\n reset_month_at: string;\n updated_at: string;\n /** M3 Stage 3: see OrgBudget.granted_categories. Subset of parent. */\n granted_categories: string[];\n /** M3 Stage 4: see OrgBudget.max_consecutive_failures. */\n max_consecutive_failures?: number;\n}\n\nexport interface ChatBudget {\n id: string;\n org_id: string;\n workspace_id: string;\n repo_id: string;\n chat_session_id: string;\n cost_limit_usd_micros: number;\n cost_total_usd_micros: number;\n created_by_user_id: string;\n updated_at: string;\n}\n\nexport interface EffectiveChatBudget {\n limit_usd_micros: number;\n source: BudgetScope;\n spent_usd_micros: number;\n}\n\nexport interface UpdateOrgBudgetRequest {\n daily_cost_limit_usd_micros?: number;\n monthly_cost_limit_usd_micros?: number;\n chat_session_cost_limit_usd_micros?: number;\n /** M3 Stage 3: replace the action-category grant set. Omit to leave\n * unchanged; empty array relaxes to read-only. */\n granted_categories?: string[];\n /** M3 Stage 4: per-scope schedule auto-disable cap. Omit to leave\n * unchanged. */\n max_consecutive_failures?: number;\n}\n\nexport interface UpdateScopedBudgetRequest {\n daily_cost_limit_usd_micros?: number;\n monthly_cost_limit_usd_micros?: number;\n chat_session_cost_limit_usd_micros?: number;\n /** M3 Stage 3: replace the action-category grant set. Server rejects\n * (422 grants_outside_parent) when the requested set isn't a subset\n * of the parent scope's effective grant. */\n granted_categories?: string[];\n /** M3 Stage 4: per-scope schedule auto-disable cap. */\n max_consecutive_failures?: number;\n}\n\nexport interface UpdateChatBudgetRequest {\n cost_limit_usd_micros: number;\n}\n\nexport interface UpdateCostLimitRequest {\n cost_limit_usd_micros: number;\n}\n\nexport const usdMicros = {\n toDollars: (micros: number): number => micros / 1_000_000,\n fromDollars: (dollars: number): number => Math.round(dollars * 1_000_000),\n};\n"]}
1
+ {"version":3,"sources":["../src/http/HttpError.ts","../src/http/BaseClient.ts","../src/modules/auth/AuthClient.ts","../src/common/envelope.ts","../src/modules/mfa/MfaClient.ts","../src/modules/user/UserClient.ts","../src/modules/organization/OrganizationClient.ts","../src/adapters/projectAdapter.ts","../src/modules/projects/ProjectsClient.ts","../src/adapters/sandboxAdapter.ts","../src/modules/sandboxes/SandboxesClient.ts","../src/modules/credentials/types.ts","../src/modules/credentials/GatewayTokensClient.ts","../src/modules/credentials/CredentialsClient.ts","../src/modules/chat/ChatStream.ts","../src/modules/chat/ChatClient.ts","../src/modules/agentEngine/TemplatesClient.ts","../src/modules/agentEngine/ScheduledTasksClient.ts","../src/modules/resources/ResourcesClient.ts","../src/modules/systemEvents/types.ts","../src/modules/systemEvents/SystemEventsClient.ts","../src/modules/billing/SubscriptionsClient.ts","../src/modules/billing/CreditsClient.ts","../src/modules/usage/UsageClient.ts","../src/modules/budgets/BudgetsClient.ts","../src/client.ts","../src/common/types.ts","../src/modules/mfa/types.ts","../src/modules/credentials/providers.ts","../src/modules/budgets/types.ts"],"names":["normalize","BASE_PATH","ProviderType","AccessType","OrgRoles","MFAType"],"mappings":"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","file":"index.js","sourcesContent":["export class HttpError extends Error {\n readonly status: number;\n readonly statusText: string;\n readonly errorCode: string | null;\n readonly body: unknown;\n\n constructor(status: number, statusText: string, body: unknown) {\n const errorCode = extractErrorCode(body);\n const message = extractMessage(body) ?? `${status} ${statusText}`;\n super(message);\n this.name = 'HttpError';\n this.status = status;\n this.statusText = statusText;\n this.errorCode = errorCode;\n this.body = body;\n }\n}\n\nfunction extractErrorCode(body: unknown): string | null {\n if (body && typeof body === 'object') {\n const code = (body as Record<string, unknown>).error_code ?? (body as Record<string, unknown>).errorCode;\n if (typeof code === 'string') return code;\n }\n return null;\n}\n\nfunction extractMessage(body: unknown): string | null {\n if (body && typeof body === 'object') {\n const msg = (body as Record<string, unknown>).message ?? (body as Record<string, unknown>).error;\n if (typeof msg === 'string') return msg;\n }\n return null;\n}\n\nexport class NotImplementedError extends Error {\n constructor(method: string) {\n super(`${method} is not implemented in the cloud-agent backend yet.`);\n this.name = 'NotImplementedError';\n }\n}\n","import { HttpError } from './HttpError.js';\nimport type { TokenProvider, UnauthorizedHandler } from './tokenProvider.js';\n\n/**\n * Returns the org id the platform admin is currently impersonating, or\n * undefined when not impersonating. Resolved per-request so a UI toggle\n * takes effect on the next call without rebuilding the client. Honored\n * by the server only for users in the configured ADMIN_ORGANIZATION;\n * non-admins receive a 403.\n */\nexport type ImpersonationProvider = () => string | undefined | Promise<string | undefined>;\n\nexport interface BaseClientOptions {\n baseUrl: string;\n getToken?: TokenProvider;\n onUnauthorized?: UnauthorizedHandler;\n fetch?: typeof fetch;\n debug?: boolean;\n defaultHeaders?: Record<string, string>;\n getImpersonateOrgId?: ImpersonationProvider;\n}\n\nexport type QueryValue = string | number | boolean | string[] | null | undefined;\nexport type Query = Record<string, QueryValue>;\n\nexport interface RequestOptions {\n /**\n * Query string params. Plain object; we serialize string/number/boolean,\n * repeat arrays, and drop undefined/null values.\n */\n query?: object;\n body?: unknown;\n headers?: Record<string, string>;\n /** Skip the bearer token (used for public endpoints like /user/login). */\n skipAuth?: boolean;\n}\n\nexport class BaseClient {\n readonly baseUrl: string;\n private readonly getToken?: TokenProvider;\n private readonly onUnauthorized?: UnauthorizedHandler;\n private readonly fetchImpl: typeof fetch;\n private readonly debug: boolean;\n private readonly defaultHeaders: Record<string, string>;\n private readonly getImpersonateOrgId?: ImpersonationProvider;\n\n constructor(options: BaseClientOptions) {\n if (!options.baseUrl) throw new Error('CloudAgentClient: baseUrl is required');\n this.baseUrl = options.baseUrl.replace(/\\/$/, '');\n this.getToken = options.getToken;\n this.onUnauthorized = options.onUnauthorized;\n this.fetchImpl = options.fetch ?? globalThis.fetch.bind(globalThis);\n this.debug = options.debug ?? false;\n this.defaultHeaders = options.defaultHeaders ?? {};\n this.getImpersonateOrgId = options.getImpersonateOrgId;\n }\n\n get<T>(path: string, options?: RequestOptions): Promise<T> {\n return this.request<T>('GET', path, options);\n }\n post<T>(path: string, options?: RequestOptions): Promise<T> {\n return this.request<T>('POST', path, options);\n }\n put<T>(path: string, options?: RequestOptions): Promise<T> {\n return this.request<T>('PUT', path, options);\n }\n patch<T>(path: string, options?: RequestOptions): Promise<T> {\n return this.request<T>('PATCH', path, options);\n }\n delete<T>(path: string, options?: RequestOptions): Promise<T> {\n return this.request<T>('DELETE', path, options);\n }\n\n async request<T>(method: string, path: string, options: RequestOptions = {}): Promise<T> {\n const url = this.buildUrl(path, options.query);\n const headers: Record<string, string> = { ...this.defaultHeaders, ...(options.headers ?? {}) };\n\n if (!options.skipAuth && this.getToken) {\n const token = await this.getToken();\n if (token) headers['Authorization'] = `Bearer ${token}`;\n }\n\n // Impersonation header is opt-in via the constructor callback. The\n // explicit per-request `headers` win — call sites that already supply\n // an X-Impersonate-Org-Id (tests, edge cases) keep precedence.\n if (\n !options.skipAuth &&\n this.getImpersonateOrgId &&\n !('X-Impersonate-Org-Id' in headers) &&\n !('x-impersonate-org-id' in headers)\n ) {\n const target = await this.getImpersonateOrgId();\n if (target) headers['X-Impersonate-Org-Id'] = target;\n }\n\n let body: BodyInit | undefined;\n if (options.body !== undefined && options.body !== null) {\n if (options.body instanceof FormData) {\n body = options.body;\n } else {\n if (!('Content-Type' in headers) && !('content-type' in headers)) {\n headers['Content-Type'] = 'application/json';\n }\n body = JSON.stringify(options.body);\n }\n }\n\n if (this.debug) {\n // eslint-disable-next-line no-console\n console.debug('[flashbacktech/tsclient] →', method, url, options.body ?? '');\n }\n\n const res = await this.fetchImpl(url, { method, headers, body });\n\n let parsed: unknown = null;\n const text = await res.text();\n if (text.length > 0) {\n try {\n parsed = JSON.parse(text);\n } catch {\n parsed = text;\n }\n }\n\n if (this.debug) {\n // eslint-disable-next-line no-console\n console.debug('[flashbacktech/tsclient] ←', res.status, url, parsed);\n }\n\n if (!res.ok) {\n if (res.status === 401 && this.onUnauthorized) {\n try {\n await this.onUnauthorized();\n } catch {\n // swallow handler failures — the original 401 is still surfaced\n }\n }\n throw new HttpError(res.status, res.statusText, parsed);\n }\n\n return parsed as T;\n }\n\n private buildUrl(path: string, query?: object): string {\n const base = path.startsWith('http') ? path : `${this.baseUrl}${path.startsWith('/') ? path : `/${path}`}`;\n if (!query) return base;\n const params = new URLSearchParams();\n for (const [key, value] of Object.entries(query as Record<string, unknown>)) {\n if (value === undefined || value === null) continue;\n if (Array.isArray(value)) {\n for (const v of value) params.append(key, String(v));\n } else {\n params.set(key, String(value));\n }\n }\n const qs = params.toString();\n return qs ? `${base}?${qs}` : base;\n }\n}\n","import type { BaseClient } from '../../http/BaseClient.js';\nimport type {\n ActivateRequest,\n ExchangeCodeRequest,\n LoginRequest,\n PublicConfig,\n RefreshRequest,\n RegisterRequest,\n ResetPasswordRequest,\n SessionResponse,\n SimpleResponse,\n} from './types.js';\n\nexport class AuthClient {\n constructor(private readonly http: BaseClient) {}\n\n login(body: LoginRequest): Promise<SessionResponse> {\n return this.http.post<SessionResponse>('/user/login', { body, skipAuth: true });\n }\n\n register(body: RegisterRequest): Promise<SessionResponse> {\n return this.http.post<SessionResponse>('/user/register', { body, skipAuth: true });\n }\n\n /**\n * Unauthenticated boot config. The SPA reads `openRegistration` to decide\n * whether to render the self-service signup form (false => invite-only /\n * preview mode). Safe to call before any session exists.\n */\n publicConfig(): Promise<PublicConfig> {\n return this.http.get<PublicConfig>('/public-config', { skipAuth: true });\n }\n\n logout(refreshToken?: string): Promise<SimpleResponse> {\n return this.http.post<SimpleResponse>('/user/logout', {\n body: { refreshToken },\n });\n }\n\n refresh(body: RefreshRequest): Promise<SessionResponse> {\n return this.http.post<SessionResponse>('/user/refresh', { body, skipAuth: true });\n }\n\n activate(body: ActivateRequest): Promise<SessionResponse> {\n return this.http.post<SessionResponse>('/user/activate', { body, skipAuth: true });\n }\n\n requestVerification(email: string): Promise<SimpleResponse> {\n return this.http.post<SimpleResponse>('/user/request-verification', {\n body: { email },\n skipAuth: true,\n });\n }\n\n requestPasswordReset(email: string): Promise<SimpleResponse> {\n return this.http.post<SimpleResponse>('/user/request-reset-password', {\n body: { email },\n skipAuth: true,\n });\n }\n\n resetPassword(body: ResetPasswordRequest): Promise<SimpleResponse> {\n return this.http.post<SimpleResponse>('/user/reset-password', { body, skipAuth: true });\n }\n\n exchangeGoogle(body: ExchangeCodeRequest): Promise<SessionResponse> {\n return this.http.post<SessionResponse>('/auth/google/exchange', { body, skipAuth: true });\n }\n}\n","/**\n * Most cloud-agent endpoints return `{ success: true, data: T }` or\n * `{ success: true, <key>: T }`. A few (system events, exchange) return\n * bare shapes. These helpers keep envelope handling out of the per-domain\n * clients.\n */\n\nexport interface SuccessEnvelope<T> {\n success: boolean;\n data?: T;\n message?: string;\n error_code?: string;\n}\n\nexport function unwrapData<T>(payload: { success?: boolean; data?: T } | undefined | null): T {\n if (!payload || payload.data === undefined) {\n throw new Error('Response envelope missing `data` field.');\n }\n return payload.data;\n}\n\nexport function unwrapKey<T>(payload: Record<string, unknown> | undefined | null, key: string): T {\n if (!payload || payload[key] === undefined) {\n throw new Error(`Response envelope missing \\`${key}\\` field.`);\n }\n return payload[key] as T;\n}\n","import type { BaseClient } from '../../http/BaseClient.js';\nimport { unwrapData } from '../../common/envelope.js';\nimport type {\n MagicLinkActivateRequest,\n MagicLinkSendResponse,\n MFASetupResponse,\n MFASimpleResponse,\n MFAStatus,\n MFAType,\n MFAVerifyLoginRequest,\n MFAVerifyLoginResponse,\n MFAVerifySetupRequest,\n} from './types.js';\n\nexport class MfaClient {\n constructor(private readonly http: BaseClient) {}\n\n async getStatus(): Promise<MFAStatus> {\n const res = await this.http.get<{ success: boolean; data: MFAStatus }>('/mfa/status');\n return unwrapData(res);\n }\n\n async getMethods(): Promise<MFAType[]> {\n const res = await this.http.get<{ success: boolean; data: { methods: MFAType[] } }>('/mfa/methods');\n return res.data?.methods ?? [];\n }\n\n setup(body: { mfaType: MFAType; email?: string }): Promise<MFASetupResponse> {\n return this.http.post<MFASetupResponse>('/mfa/setup', { body });\n }\n\n verifySetup(body: MFAVerifySetupRequest): Promise<MFASimpleResponse> {\n return this.http.post<MFASimpleResponse>('/mfa/verify-setup', { body });\n }\n\n enable(mfaType: MFAType): Promise<MFASimpleResponse> {\n return this.http.post<MFASimpleResponse>('/mfa/enable', { body: { mfaType } });\n }\n\n disable(mfaType: MFAType): Promise<MFASimpleResponse> {\n return this.http.post<MFASimpleResponse>('/mfa/disable', { body: { mfaType } });\n }\n\n setPrimary(mfaType: MFAType): Promise<MFASimpleResponse> {\n return this.http.post<MFASimpleResponse>('/mfa/primary', { body: { mfaType } });\n }\n\n sendMagicLink(): Promise<MagicLinkSendResponse> {\n return this.http.post<MagicLinkSendResponse>('/mfa/magic-link/send', {});\n }\n\n activateMagicLink(body: MagicLinkActivateRequest): Promise<MFAVerifyLoginResponse> {\n return this.http.post<MFAVerifyLoginResponse>('/mfa/magic-link/activate', { body, skipAuth: true });\n }\n\n verifyLogin(body: MFAVerifyLoginRequest): Promise<MFAVerifyLoginResponse> {\n return this.http.post<MFAVerifyLoginResponse>('/mfa/verify-login', { body });\n }\n}\n","import type { BaseClient } from '../../http/BaseClient.js';\nimport { unwrapData } from '../../common/envelope.js';\nimport type { UpdateUserRequest, UpdateUserResponse, UserProfile } from './types.js';\n\nexport class UserClient {\n constructor(private readonly http: BaseClient) {}\n\n async getProfile(): Promise<UserProfile> {\n const res = await this.http.get<{ success: boolean; data: UserProfile }>('/me');\n return unwrapData(res);\n }\n\n update(body: UpdateUserRequest): Promise<UpdateUserResponse> {\n return this.http.put<UpdateUserResponse>('/user', { body });\n }\n}\n","import type { BaseClient } from '../../http/BaseClient.js';\nimport { unwrapData } from '../../common/envelope.js';\nimport type {\n AcceptInviteRequest,\n AddUserToOrgRequest,\n AddUserToOrgResult,\n AdjustOrgCreditsRequest,\n AdjustOrgCreditsResult,\n CreateOrganizationUserRequest,\n InviteOrgRequest,\n InviteOrgResult,\n OrgCreditBalance,\n Organization,\n OrganizationUser,\n SimpleOrgResponse,\n UpdateOrganizationRequest,\n UpdateOrgUserRequest,\n} from './types.js';\n\nexport class OrganizationClient {\n constructor(private readonly http: BaseClient) {}\n\n async get(orgId: string): Promise<Organization> {\n const res = await this.http.get<{ success: boolean; data: Organization }>(`/organization/${orgId}`);\n return unwrapData(res);\n }\n\n async update(orgId: string, body: UpdateOrganizationRequest): Promise<Organization> {\n const res = await this.http.put<{ success: boolean; data: Organization }>(`/organization/${orgId}`, { body });\n return unwrapData(res);\n }\n\n async listUsers(): Promise<OrganizationUser[]> {\n const res = await this.http.get<{ success: boolean; data: OrganizationUser[] }>('/organization/users');\n return res.data ?? [];\n }\n\n updateUser(userId: string, body: UpdateOrgUserRequest): Promise<SimpleOrgResponse> {\n return this.http.put<SimpleOrgResponse>(`/organization/users/${userId}`, { body });\n }\n\n /** Backend currently returns 501. Surfaced for forward-compat. */\n createUser(body: CreateOrganizationUserRequest): Promise<SimpleOrgResponse> {\n return this.http.post<SimpleOrgResponse>('/organization/users', { body });\n }\n\n /** Backend currently returns 501. Surfaced for forward-compat. */\n deleteUser(userId: string): Promise<SimpleOrgResponse> {\n return this.http.delete<SimpleOrgResponse>(`/organization/users/${userId}`);\n }\n\n /** Accept an org invite: verifies the one-time token and sets the user's password. */\n acceptInvite(body: AcceptInviteRequest): Promise<SimpleOrgResponse> {\n return this.http.post<SimpleOrgResponse>('/organization/invite/accept', { body });\n }\n\n /**\n * Platform-admin only: list every org for the impersonation picker.\n * The server returns 403 when the caller's home org is not the\n * configured ADMIN_ORGANIZATION; render the picker only when the\n * authenticated user has `isPlatformAdmin === true`.\n */\n async listAll(): Promise<Array<{ id: string; name: string; allowDebug: boolean }>> {\n const res = await this.http.get<{\n success: boolean;\n data: Array<{ id: string; name: string; allowDebug: boolean }>;\n }>('/orgs/list-all');\n return res.data ?? [];\n }\n\n /**\n * Platform-admin only: provision a new organization + founding owner and\n * email the owner an invite link. The invite-only counterpart to public\n * self-service registration (used while the backend has OPEN_REGISTRATION\n * disabled). Returns 403 unless the caller's home org is the configured\n * ADMIN_ORGANIZATION; 409 when the owner email already exists.\n */\n async inviteOrg(body: InviteOrgRequest): Promise<InviteOrgResult> {\n const res = await this.http.post<{ success: boolean; data: InviteOrgResult }>(\n '/organization/invite-org',\n { body },\n );\n return unwrapData(res);\n }\n\n /**\n * Platform-admin only: enable or disable the debug surface for an org.\n * Returns the updated org entry with the new allowDebug value.\n */\n async setAllowDebug(orgId: string, allow: boolean): Promise<{ id: string; name: string; allowDebug: boolean }> {\n const res = await this.http.patch<{\n success: boolean;\n data: { id: string; name: string; allowDebug: boolean };\n }>(`/orgs/${orgId}/allow-debug`, { body: { allow } });\n return res.data!;\n }\n\n /**\n * Platform-admin only: add a new member to an existing org.\n * Creates the user without a password and sends an invite email via the\n * same TokenOrgInvite flow as the regular member invite.\n * Returns 403 unless platform admin; 409 when the email already exists.\n */\n async addUserToOrg(orgId: string, body: AddUserToOrgRequest): Promise<AddUserToOrgResult> {\n const res = await this.http.post<{ success: boolean; data: AddUserToOrgResult }>(\n `/orgs/${orgId}/users`,\n { body },\n );\n return unwrapData(res);\n }\n\n /**\n * Platform-admin only: fetch an org's two-bucket credit balance.\n * Returns 403 unless platform admin; 404 when the org doesn't exist.\n */\n async getOrgCreditBalance(orgId: string): Promise<OrgCreditBalance> {\n const res = await this.http.get<{ success: boolean; data: OrgCreditBalance }>(\n `/orgs/${orgId}/credits`,\n );\n return unwrapData(res);\n }\n\n /**\n * Platform-admin only: grant or revoke credits on an org.\n * amountMicros is signed: positive = grant, negative = revoke.\n * Records a CreditKindAdminAdjust ledger entry and returns the updated balance.\n */\n async adjustOrgCredits(orgId: string, body: AdjustOrgCreditsRequest): Promise<AdjustOrgCreditsResult> {\n const res = await this.http.post<{ success: boolean; data: AdjustOrgCreditsResult }>(\n `/orgs/${orgId}/credits/adjust`,\n { body },\n );\n return unwrapData(res);\n }\n}\n","import type { Project } from '../modules/projects/types.js';\n\ninterface WireProject {\n id: string;\n name: string;\n orgId: string;\n default?: boolean;\n users?: unknown[];\n}\n\nexport const projectAdapter = {\n fromListResponse(payload: unknown): Project[] {\n const list = (payload as { workspaces?: WireProject[]; projects?: WireProject[] } | null)?.workspaces\n ?? (payload as { projects?: WireProject[] } | null)?.projects\n ?? [];\n return list.map(normalize);\n },\n\n fromGetResponse(payload: unknown): Project {\n const wire = (payload as { workspace?: WireProject; project?: WireProject; data?: WireProject } | null);\n const value = wire?.workspace ?? wire?.project ?? wire?.data;\n if (!value) throw new Error('Project response missing body.');\n return normalize(value);\n },\n\n normalize,\n};\n\nfunction normalize(wire: WireProject): Project {\n return {\n id: wire.id,\n name: wire.name,\n orgId: wire.orgId,\n default: wire.default ?? false,\n users: (wire.users ?? []) as Project['users'],\n };\n}\n\n// TODO(backend-cleanup): cloud-agent-backend internal/http/routes/project/project.go\n// still returns `workspaces` / `workspace` keys. When those are renamed to\n// `projects` / `project`, this adapter can fall through to a plain unwrap.\n","import type { BaseClient } from '../../http/BaseClient.js';\nimport { projectAdapter } from '../../adapters/projectAdapter.js';\nimport type {\n AddMemberRequest,\n CreateProjectRequest,\n Project,\n UpdateMemberRoleRequest,\n UpdateProjectRequest,\n} from './types.js';\n\ninterface SimpleResponse {\n success: boolean;\n message?: string;\n}\n\nexport class ProjectsClient {\n constructor(private readonly http: BaseClient) {}\n\n async list(): Promise<Project[]> {\n const res = await this.http.get<unknown>('/project');\n return projectAdapter.fromListResponse(res);\n }\n\n async get(projectId: string): Promise<Project> {\n const res = await this.http.get<unknown>(`/project/${projectId}`);\n return projectAdapter.fromGetResponse(res);\n }\n\n async create(body: CreateProjectRequest): Promise<Project> {\n const res = await this.http.post<unknown>('/project', { body });\n return projectAdapter.fromGetResponse(res);\n }\n\n async update(projectId: string, body: UpdateProjectRequest): Promise<Project> {\n const res = await this.http.put<unknown>(`/project/${projectId}`, { body });\n return projectAdapter.fromGetResponse(res);\n }\n\n delete(projectId: string): Promise<SimpleResponse> {\n return this.http.delete<SimpleResponse>(`/project/${projectId}`);\n }\n\n addMember(projectId: string, body: AddMemberRequest): Promise<SimpleResponse> {\n return this.http.post<SimpleResponse>(`/project/${projectId}/users`, { body });\n }\n\n updateMemberRole(projectId: string, userId: string, body: UpdateMemberRoleRequest): Promise<SimpleResponse> {\n return this.http.put<SimpleResponse>(`/project/${projectId}/users/${userId}`, { body });\n }\n\n removeMember(projectId: string, userId: string): Promise<SimpleResponse> {\n return this.http.delete<SimpleResponse>(`/project/${projectId}/users/${userId}`);\n }\n}\n","import type { Sandbox } from '../modules/sandboxes/types.js';\n\ninterface WireSandbox {\n id: string;\n name: string;\n storageType: string;\n mode: string;\n orgId: string;\n userId: string;\n createdAt: string;\n disabled?: boolean;\n // Legacy wire alternates: backend may send projectId or workspaceId.\n projectId?: string | null;\n workspaceId?: string | null;\n}\n\nexport const sandboxAdapter = {\n fromListResponse(payload: unknown): Sandbox[] {\n const list = (payload as { repos?: WireSandbox[]; sandboxes?: WireSandbox[] } | null)?.repos\n ?? (payload as { sandboxes?: WireSandbox[] } | null)?.sandboxes\n ?? [];\n return list.map(normalize);\n },\n\n fromGetResponse(payload: unknown): Sandbox {\n const wire = payload as { repo?: WireSandbox; sandbox?: WireSandbox; data?: WireSandbox } | null;\n const value = wire?.repo ?? wire?.sandbox ?? wire?.data;\n if (!value) throw new Error('Sandbox response missing body.');\n return normalize(value);\n },\n\n normalize,\n};\n\nfunction normalize(wire: WireSandbox): Sandbox {\n return {\n id: wire.id,\n name: wire.name,\n storageType: wire.storageType,\n mode: wire.mode,\n orgId: wire.orgId,\n userId: wire.userId,\n projectId: wire.projectId ?? wire.workspaceId ?? null,\n createdAt: wire.createdAt,\n disabled: wire.disabled ?? false,\n };\n}\n\n// TODO(backend-cleanup): cloud-agent-backend internal/http/routes/sandbox/sandbox.go\n// still returns `repos` / `repo` response keys, and Sandbox JSON may carry\n// `workspaceId` instead of `projectId` (internal/domain/types.go). When both\n// are renamed, this adapter collapses to a plain unwrap.\n","import type { BaseClient } from '../../http/BaseClient.js';\nimport { sandboxAdapter } from '../../adapters/sandboxAdapter.js';\nimport type {\n CreateSandboxRequest,\n ListSandboxesQuery,\n Sandbox,\n UpdateSandboxRequest,\n} from './types.js';\n\ninterface SimpleResponse {\n success: boolean;\n message?: string;\n}\n\nexport class SandboxesClient {\n constructor(private readonly http: BaseClient) {}\n\n async list(query: ListSandboxesQuery = {}): Promise<Sandbox[]> {\n const res = await this.http.get<unknown>('/sandbox', {\n query: { projectId: query.projectId },\n });\n return sandboxAdapter.fromListResponse(res);\n }\n\n async get(sandboxId: string): Promise<Sandbox> {\n const res = await this.http.get<unknown>(`/sandbox/${sandboxId}`);\n return sandboxAdapter.fromGetResponse(res);\n }\n\n async create(body: CreateSandboxRequest): Promise<Sandbox> {\n const res = await this.http.post<unknown>('/sandbox', {\n body: {\n name: body.name,\n projectId: body.projectId,\n storageType: body.storageType ?? 'S3',\n mode: body.mode ?? 'NORMAL',\n },\n });\n return sandboxAdapter.fromGetResponse(res);\n }\n\n async update(sandboxId: string, body: UpdateSandboxRequest): Promise<Sandbox> {\n const res = await this.http.put<unknown>(`/sandbox/${sandboxId}`, { body });\n return sandboxAdapter.fromGetResponse(res);\n }\n\n delete(sandboxId: string): Promise<SimpleResponse> {\n return this.http.delete<SimpleResponse>(`/sandbox/${sandboxId}`);\n }\n}\n","// Credential types for @flashbacktech/tsclient.\n//\n// Schema mirrors cloud-agent-backend's Credential row (renamed from APIKey\n// in migration 0010). Every provider — cloud (AWS/GCP/AZURE), infra\n// (SSH), VCS (GitHub/GitLab/Azure DevOps), AI/LLM (OpenAI/Anthropic) —\n// uses the same `(provider, label, secret, metadata)` shape.\n// Provider-specific fields live in `metadata`; the catalog at\n// ./providers.ts is the source of truth for what each provider's fields\n// look like.\n//\n// Sandbox-scoped FOA bearer tokens (formerly RepoAiApiKey) are now\n// modelled separately as GatewayToken — see below.\n\n// ProviderID is open: the catalog defines a default set, but we allow\n// any string so customer-extended catalogs are still typed.\nexport type ProviderID = 'AWS' | 'BEDROCK' | 'GCP' | 'AZURE' | 'SSH' | 'GITHUB' | 'GITLAB' | 'AZURE_DEVOPS' | 'OPENAI' | 'ANTHROPIC' | 'GEMINI' | string;\n\n// ── Universal credential ─────────────────────────────────────────────\n\n// Credential is the read-projection of one row in the Credential table.\n// Never includes the secret. `displayHint` is the catalog-computed\n// snippet for listings (e.g. \"AKIATEST… / us-east-1\",\n// \"ubuntu@vps.example.com:22\").\nexport interface Credential {\n id: string;\n provider: ProviderID;\n label: string;\n metadata: Record<string, unknown>;\n displayHint?: string;\n createdAt: string;\n}\n\n// CreateCredentialRequest is the universal create body. Provider-specific\n// fields go inside `metadata`; the catalog validates the shape both\n// client-side (./providers.ts:validate) and server-side.\nexport interface CreateCredentialRequest {\n provider: ProviderID;\n label: string;\n secret: string;\n metadata?: Record<string, unknown>;\n projectId: string;\n}\n\n// UpdateCredentialRequest is partial. Provider is immutable on update; to\n// change provider, delete and re-create. `metadata` is replace-wholesale\n// when present.\nexport interface UpdateCredentialRequest {\n label?: string;\n secret?: string;\n metadata?: Record<string, unknown>;\n}\n\n// ListCredentialsQuery narrows /credentials by project and optionally by\n// provider id or capability bit (storage|ai|compute|vcs|notify).\nexport interface ListCredentialsQuery {\n projectId: string;\n provider?: ProviderID;\n capability?: 'storage' | 'ai' | 'compute' | 'vcs' | 'notify';\n}\n\n// SandboxCredential is one row in the SandboxCredential join table —\n// links a sandbox to a project-level credential. The PK is\n// (sandboxId, credentialId), so association identity is the pair itself\n// (no synthetic association id).\nexport interface SandboxCredential {\n sandboxId: string;\n credentialId: string;\n provider: ProviderID;\n label: string;\n displayHint?: string;\n createdAt: string;\n}\n\n// ── Sandbox gateway tokens ───────────────────────────────────────────\n\n// GatewayToken is a sandbox-scoped, OpenAI-compatible bearer used by the\n// agent engine to authenticate to FlashOnAI. The plaintext secret is\n// returned exactly once — at creation — and never re-fetchable.\nexport interface GatewayToken {\n id: string;\n sandboxId: string;\n label: string;\n createdAt: string;\n}\n\nexport interface CreateGatewayTokenRequest {\n label: string;\n}\n\n// CreateGatewayTokenResponse is the create-time-only shape — `secret`\n// holds the plaintext bearer the caller must surface (\"copy now\")\n// before navigating away.\nexport interface CreateGatewayTokenResponse {\n token: GatewayToken;\n secret: string;\n}\n\n// ── Common envelope ──────────────────────────────────────────────────\n\nexport interface SimpleKeysResponse {\n success: boolean;\n message?: string;\n data?: unknown;\n}\n\n// ── Wire shapes (legacy field-name aliases collapse here) ────────────\n\nexport interface WireSandboxCredential {\n // Backend wire emits sandboxId; older clients may still see repoId.\n // Normaliser collapses both into SandboxCredential.sandboxId.\n sandboxId?: string;\n repoId?: string;\n credentialId: string;\n provider: string;\n label: string;\n displayHint?: string | null;\n createdAt: string;\n}\n\nexport interface WireGatewayToken {\n id: string;\n // Backend wire emits sandboxId via \"repoId\" today (StorageRepo/Sandbox\n // alias); accept both.\n sandboxId?: string;\n repoId?: string;\n label: string;\n createdAt: string;\n}\n\nexport function normalizeSandboxCredential(wire: WireSandboxCredential): SandboxCredential {\n return {\n sandboxId: wire.sandboxId ?? wire.repoId ?? '',\n credentialId: wire.credentialId,\n provider: wire.provider,\n label: wire.label,\n displayHint: wire.displayHint ?? undefined,\n createdAt: wire.createdAt,\n };\n}\n\nexport function normalizeGatewayToken(wire: WireGatewayToken): GatewayToken {\n return {\n id: wire.id,\n sandboxId: wire.sandboxId ?? wire.repoId ?? '',\n label: wire.label,\n createdAt: wire.createdAt,\n };\n}\n","// GatewayTokensClient covers sandbox-scoped FOA bearer tokens (the\n// post-redesign replacement for the legacy RepoAiApiKey rows). Each\n// sandbox can have multiple tokens for rotation / dev-prod separation.\n//\n// The plaintext bearer is returned EXACTLY ONCE — at create time. The\n// frontend must surface it (\"copy now\") before navigating away; once\n// the response is dropped, only the encrypted envelope persists and the\n// plaintext is unrecoverable.\nimport type { BaseClient } from '../../http/BaseClient.js';\nimport {\n CreateGatewayTokenRequest,\n CreateGatewayTokenResponse,\n GatewayToken,\n SimpleKeysResponse,\n WireGatewayToken,\n normalizeGatewayToken,\n} from './types.js';\n\nexport class GatewayTokensClient {\n constructor(private readonly http: BaseClient) {}\n\n async list(sandboxId: string): Promise<GatewayToken[]> {\n const res = await this.http.get<{ success: boolean; tokens?: WireGatewayToken[]; data?: WireGatewayToken[] }>(\n `/sandbox/${sandboxId}/gateway-token`,\n );\n const list = res.tokens ?? res.data ?? [];\n return list.map(normalizeGatewayToken);\n }\n\n /**\n * create returns both the persisted token row and the plaintext bearer\n * (`secret`). The bearer is shown only here; surface it to the user\n * immediately. If they navigate away without copying, they have to\n * delete the token and create a new one.\n */\n async create(sandboxId: string, body: CreateGatewayTokenRequest): Promise<CreateGatewayTokenResponse> {\n const res = await this.http.post<{\n success: boolean;\n token?: WireGatewayToken;\n secret?: string;\n }>(`/sandbox/${sandboxId}/gateway-token`, { body });\n if (!res.token || !res.secret) {\n throw new Error('createGatewayToken response missing token or secret.');\n }\n return {\n token: normalizeGatewayToken(res.token),\n secret: res.secret,\n };\n }\n\n delete(sandboxId: string, tokenId: string): Promise<SimpleKeysResponse> {\n return this.http.delete<SimpleKeysResponse>(`/sandbox/${sandboxId}/gateway-token/${tokenId}`);\n }\n}\n","// Universal credentials client. Post-credential-redesign (cloud-agent-\n// backend migration 0010) one schema covers every provider: cloud, SSH,\n// GitHub, GitLab, Azure DevOps, OpenAI, Anthropic. Provider-specific\n// fields live inside `metadata`; the catalog at ./providers.ts is the\n// authoritative shape per provider.\n//\n// Surface:\n// apiClient.credentials.list() — every credential in the project\n// apiClient.credentials.create() — one create endpoint, any provider\n// apiClient.credentials.update() — partial update\n// apiClient.credentials.delete() — remove\n// apiClient.credentials.providers() — fetch the catalog\n// apiClient.credentials.sandbox.* — sandbox associations (any provider)\n// apiClient.credentials.gatewayTokens.* — sandbox FOA bearer tokens\nimport type { BaseClient } from '../../http/BaseClient.js';\nimport { GatewayTokensClient } from './GatewayTokensClient.js';\nimport {\n Credential,\n CreateCredentialRequest,\n ListCredentialsQuery,\n ProviderID,\n SandboxCredential,\n SimpleKeysResponse,\n UpdateCredentialRequest,\n WireSandboxCredential,\n normalizeSandboxCredential,\n} from './types.js';\nimport type { ProviderSpec } from './providers.js';\n\n// ── Sandbox associations ───────────────────────────────────────────────\n\nclass SandboxCredentialScope {\n constructor(private readonly http: BaseClient) {}\n\n async list(sandboxId: string): Promise<SandboxCredential[]> {\n const res = await this.http.get<{ success: boolean; items?: WireSandboxCredential[]; data?: WireSandboxCredential[] }>(\n `/sandbox/${sandboxId}/credential`,\n );\n const list = res.items ?? res.data ?? [];\n return list.map(normalizeSandboxCredential);\n }\n\n attach(sandboxId: string, credentialId: string): Promise<SimpleKeysResponse> {\n return this.http.post<SimpleKeysResponse>(`/sandbox/${sandboxId}/credential`, {\n body: { credentialId },\n });\n }\n\n detach(sandboxId: string, credentialId: string): Promise<SimpleKeysResponse> {\n return this.http.delete<SimpleKeysResponse>(`/sandbox/${sandboxId}/credential/${credentialId}`);\n }\n}\n\n// ── Top-level credentials client ──────────────────────────────────────\n\nexport class CredentialsClient {\n readonly sandbox: SandboxCredentialScope;\n readonly gatewayTokens: GatewayTokensClient;\n\n constructor(private readonly http: BaseClient) {\n this.sandbox = new SandboxCredentialScope(http);\n this.gatewayTokens = new GatewayTokensClient(http);\n }\n\n async list(query: ListCredentialsQuery): Promise<Credential[]> {\n const res = await this.http.get<{ success: boolean; credentials?: Credential[]; data?: Credential[] }>(\n '/credentials',\n {\n query: {\n projectId: query.projectId,\n provider: query.provider,\n capability: query.capability,\n },\n },\n );\n return res.credentials ?? res.data ?? [];\n }\n\n async create(body: CreateCredentialRequest): Promise<Credential> {\n const res = await this.http.post<{ success: boolean; data?: Credential; credential?: Credential }>(\n '/credentials',\n { body },\n );\n const value = res.data ?? res.credential;\n if (!value) throw new Error('createCredential response missing body.');\n return value;\n }\n\n async update(credentialId: string, body: UpdateCredentialRequest): Promise<Credential> {\n const res = await this.http.put<{ success: boolean; credential?: Credential; data?: Credential }>(\n `/credentials/${credentialId}`,\n { body },\n );\n const value = res.credential ?? res.data;\n if (!value) throw new Error('updateCredential response missing body.');\n return value;\n }\n\n delete(credentialId: string): Promise<SimpleKeysResponse> {\n return this.http.delete<SimpleKeysResponse>(`/credentials/${credentialId}`);\n }\n\n /**\n * providers fetches the server-side catalog. The tsclient ships its\n * own catalog mirror in ./providers.ts that the frontend can use\n * synchronously; this endpoint is the runtime source of truth and\n * picks up customer extensions added server-side without a tsclient\n * republish.\n */\n async providers(): Promise<ProviderSpec[]> {\n const res = await this.http.get<{ success: boolean; providers?: ProviderSpec[]; data?: ProviderSpec[] }>('/providers');\n return res.providers ?? res.data ?? [];\n }\n}\n\nexport type { ProviderID };\n","import type { TokenProvider } from '../../http/tokenProvider.js';\nimport type { ChatEvent, ChatScope } from './types.js';\n\nexport interface OpenChatStreamOptions {\n scope: ChatScope;\n conversationId: string;\n onEvent: (event: ChatEvent) => void;\n onError?: (err: Event) => void;\n lastEventId?: string;\n /** Heartbeat in ms before the polyfill considers the connection stale. Default: 60000. */\n heartbeatTimeout?: number;\n}\n\nexport interface ChatStreamHandle {\n close(): void;\n}\n\nexport interface ChatStreamDeps {\n baseUrl: string;\n getToken?: TokenProvider;\n}\n\nconst STREAM_PATH = '/api/agentengine/v1/agent/chat/sessions';\n\n/**\n * Opens an SSE connection to the chat stream. Requires the consumer to have\n * `event-source-polyfill` installed (peer dep). Browsers' native EventSource\n * does not support custom headers, which we need for auth + scope.\n */\nexport async function openChatStream(\n deps: ChatStreamDeps,\n options: OpenChatStreamOptions,\n): Promise<ChatStreamHandle> {\n // Lazy import so consumers in non-browser contexts (or those who don't use\n // the chat stream at all) aren't forced to install the polyfill.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const mod: any = await import('event-source-polyfill');\n const Polyfill = mod.EventSourcePolyfill ?? mod.default?.EventSourcePolyfill ?? mod.default;\n if (!Polyfill) {\n throw new Error('event-source-polyfill is required for client.chat.openStream(). Install it as a peer dep.');\n }\n\n const url = `${deps.baseUrl.replace(/\\/$/, '')}${STREAM_PATH}/${options.conversationId}/stream`;\n\n const headers: Record<string, string> = {\n 'X-Org-Id': options.scope.orgId,\n 'X-User-Id': options.scope.userId,\n 'X-Sandbox-Id': options.scope.sandboxId ?? options.scope.repoId ?? '',\n 'X-Repo-Id': options.scope.sandboxId ?? options.scope.repoId ?? '',\n };\n if (options.scope.projectId ?? options.scope.workspaceId) {\n headers['X-Project-Id'] = options.scope.projectId ?? options.scope.workspaceId ?? '';\n headers['X-Workspace-Id'] = options.scope.projectId ?? options.scope.workspaceId ?? '';\n }\n if (deps.getToken) {\n const token = await deps.getToken();\n if (token) headers['Authorization'] = `Bearer ${token}`;\n }\n if (options.lastEventId) headers['Last-Event-ID'] = options.lastEventId;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const es = new (Polyfill as any)(url, {\n headers,\n heartbeatTimeout: options.heartbeatTimeout ?? 60_000,\n });\n\n // The backend sends named SSE events (event: phase, event: question, …).\n // onmessage only fires for the default unnamed type; addEventListener is required for named events.\n const KNOWN_EVENTS = [\n 'phase', 'question', 'plan_draft',\n 'step_started', 'step_completed', 'step_failed', 'step_progress',\n 'narration', 'assistant_message', 'done',\n 'session_title',\n 'tool_call_started', 'tool_call_finished',\n 'llm_call_finished',\n 'tool_call_confirmation_required',\n ];\n\n const handleRaw = (raw: MessageEvent) => {\n try {\n const parsed = JSON.parse(raw.data) as ChatEvent;\n options.onEvent(parsed);\n } catch {\n // Ignore malformed events\n }\n };\n\n for (const name of KNOWN_EVENTS) {\n es.addEventListener(name, handleRaw);\n }\n\n if (options.onError) {\n es.onerror = (event: Event) => options.onError?.(event);\n }\n\n return { close: () => es.close() };\n}\n","import type { BaseClient } from '../../http/BaseClient.js';\nimport type { TokenProvider } from '../../http/tokenProvider.js';\nimport { openChatStream, type ChatStreamHandle, type OpenChatStreamOptions } from './ChatStream.js';\nimport type {\n AnswerChatQuestionRequest,\n AnswerChatQuestionResponse,\n CancelChatTurnResponse,\n ChatFeedbackEnvelope,\n ChatScheduleEnvelope,\n ChatScope,\n ConfirmChatToolCallRequest,\n ConfirmChatToolCallResponse,\n CreateChatScheduleRequest,\n CreateChatSessionRequest,\n CreateChatSessionResponse,\n DebugPayload,\n GetChatSessionResponse,\n ListChatFeedbackResponse,\n ListChatSchedulesResponse,\n ListChatScheduleRunsResponse,\n ListChatSessionsQuery,\n ListChatSessionsResponse,\n PostChatMessageRequest,\n PostChatMessageResponse,\n SubmitChatFeedbackRequest,\n UpdateChatScheduleRequest,\n} from './types.js';\n\nconst BASE_PATH = '/api/agentengine/v1/agent/chat/sessions';\n\nfunction scopeHeaders(scope: ChatScope): Record<string, string> {\n const sandboxId = scope.sandboxId ?? scope.repoId ?? '';\n const projectId = scope.projectId ?? scope.workspaceId;\n const headers: Record<string, string> = {\n 'X-Org-Id': scope.orgId,\n 'X-User-Id': scope.userId,\n 'X-Sandbox-Id': sandboxId,\n 'X-Repo-Id': sandboxId,\n };\n if (projectId) {\n headers['X-Project-Id'] = projectId;\n headers['X-Workspace-Id'] = projectId;\n }\n return headers;\n}\n\nclass ChatSessionsScope {\n constructor(private readonly http: BaseClient) {}\n\n create(scope: ChatScope, body: CreateChatSessionRequest): Promise<CreateChatSessionResponse> {\n return this.http.post<CreateChatSessionResponse>(BASE_PATH, {\n body,\n headers: scopeHeaders(scope),\n });\n }\n\n list(scope: ChatScope, query: ListChatSessionsQuery = {}): Promise<ListChatSessionsResponse> {\n return this.http.get<ListChatSessionsResponse>(BASE_PATH, {\n query,\n headers: scopeHeaders(scope),\n });\n }\n\n get(scope: ChatScope, conversationId: string): Promise<GetChatSessionResponse> {\n return this.http.get<GetChatSessionResponse>(`${BASE_PATH}/${conversationId}`, {\n headers: scopeHeaders(scope),\n });\n }\n\n delete(scope: ChatScope, conversationId: string): Promise<void> {\n return this.http.delete<void>(`${BASE_PATH}/${conversationId}`, {\n headers: scopeHeaders(scope),\n });\n }\n}\n\nclass ChatMessagesScope {\n constructor(private readonly http: BaseClient) {}\n\n post(scope: ChatScope, conversationId: string, body: PostChatMessageRequest): Promise<PostChatMessageResponse> {\n return this.http.post<PostChatMessageResponse>(`${BASE_PATH}/${conversationId}/messages`, {\n body,\n headers: scopeHeaders(scope),\n });\n }\n\n /**\n * Interrupts an in-flight chat-loop turn. The engine cancels the turn's\n * Go context and asks the sandbox service to kill any in-flight docker\n * exec inside the per-session container (the container itself survives\n * so the next turn keeps its filesystem state). Returns 404 when no\n * turn matches `turnId` — covers the race where the user clicks Stop\n * just after the turn already finished.\n *\n * The engine still emits a terminal `done` SSE event with\n * status=\"context_cancelled\" after this returns; the frontend should\n * render its \"Cancelled\" marker on that event rather than on this\n * response, so a reload mid-cancel still ends in the same UI state.\n */\n cancel(scope: ChatScope, conversationId: string, turnId: string): Promise<CancelChatTurnResponse> {\n return this.http.post<CancelChatTurnResponse>(\n `${BASE_PATH}/${conversationId}/messages/${turnId}/cancel`,\n { headers: scopeHeaders(scope) },\n );\n }\n\n /**\n * Deliver the user's allow/deny decision on an M3 confirmation modal\n * (fired when the policy hook emits a\n * `tool_call_confirmation_required` SSE event). The chat-loop has\n * suspended waiting on this call; on allow it dispatches the tool, on\n * deny it synthesises a \"DENIED:\" tool result so the model can react.\n * Returns 404 when no pending confirmation exists for the given\n * (turn, tool_call) — usually means the 4-minute confirmer timeout\n * already elapsed.\n */\n confirmToolCall(\n scope: ChatScope,\n conversationId: string,\n turnId: string,\n toolCallId: string,\n body: ConfirmChatToolCallRequest,\n ): Promise<ConfirmChatToolCallResponse> {\n return this.http.post<ConfirmChatToolCallResponse>(\n `${BASE_PATH}/${conversationId}/messages/${turnId}/confirm/${toolCallId}`,\n { body, headers: scopeHeaders(scope) },\n );\n }\n}\n\nclass ChatQuestionsScope {\n constructor(private readonly http: BaseClient) {}\n\n answer(\n scope: ChatScope,\n conversationId: string,\n turnId: string,\n body: AnswerChatQuestionRequest,\n ): Promise<AnswerChatQuestionResponse> {\n return this.http.post<AnswerChatQuestionResponse>(\n `${BASE_PATH}/${conversationId}/messages/${turnId}/answers`,\n { body, headers: scopeHeaders(scope) },\n );\n }\n}\n\n/**\n * Debug scope — fetches the consolidated payload (session, messages) used by\n * the dashboard Debug tab. Keyed by conversation ID.\n */\nclass ChatDebugScope {\n constructor(private readonly http: BaseClient) {}\n\n getByConversation(scope: ChatScope, conversationId: string): Promise<DebugPayload> {\n return this.http.get<DebugPayload>(`${BASE_PATH}/${conversationId}/debug`, {\n headers: scopeHeaders(scope),\n });\n }\n}\n\n/**\n * Schedules scope — manages the M3 Stage 4 cron-driven prompt\n * schedules. Repo-scoped: list / create / get / update / delete are\n * keyed by (repo, schedule_id). The dispatcher fires due schedules\n * server-side on its tick; the SDK only handles the CRUD surface.\n *\n * Endpoint shape:\n * GET /v1/agent/repos/:repo_id/schedules\n * POST /v1/agent/repos/:repo_id/schedules\n * GET /v1/agent/repos/:repo_id/schedules/:id\n * PUT /v1/agent/repos/:repo_id/schedules/:id\n * DELETE /v1/agent/repos/:repo_id/schedules/:id\n */\nclass ChatSchedulesScope {\n constructor(private readonly http: BaseClient) {}\n\n private repoPath(scope: ChatScope): string {\n const repoID = scope.sandboxId ?? scope.repoId ?? '';\n return `/api/agentengine/v1/agent/repos/${repoID}/schedules`;\n }\n\n list(scope: ChatScope): Promise<ListChatSchedulesResponse> {\n return this.http.get<ListChatSchedulesResponse>(this.repoPath(scope), {\n headers: scopeHeaders(scope),\n });\n }\n\n create(scope: ChatScope, body: CreateChatScheduleRequest): Promise<ChatScheduleEnvelope> {\n return this.http.post<ChatScheduleEnvelope>(this.repoPath(scope), {\n body,\n headers: scopeHeaders(scope),\n });\n }\n\n get(scope: ChatScope, scheduleId: string): Promise<ChatScheduleEnvelope> {\n return this.http.get<ChatScheduleEnvelope>(`${this.repoPath(scope)}/${scheduleId}`, {\n headers: scopeHeaders(scope),\n });\n }\n\n update(\n scope: ChatScope,\n scheduleId: string,\n body: UpdateChatScheduleRequest,\n ): Promise<ChatScheduleEnvelope> {\n return this.http.put<ChatScheduleEnvelope>(`${this.repoPath(scope)}/${scheduleId}`, {\n body,\n headers: scopeHeaders(scope),\n });\n }\n\n delete(scope: ChatScope, scheduleId: string): Promise<{ status: 'deleted' }> {\n return this.http.delete<{ status: 'deleted' }>(`${this.repoPath(scope)}/${scheduleId}`, {\n headers: scopeHeaders(scope),\n });\n }\n\n /**\n * List recent chat sessions spawned by a schedule's cron tick — used\n * by the SchedulesTab \"Runs\" panel to surface real audit trail\n * instead of dumping the user into the global chat list.\n *\n * Each entry is a full ChatSession row; `.id` is the conversation id\n * the dashboard navigates to (`/chat/:conversationId`). All rows are\n * unattended (the scheduler is the only writer of `schedule_id`),\n * which makes the chat session viewer render the \"Scheduled run\"\n * ribbon and hide the composer.\n *\n * Server returns the 50 most-recent rows; no cursor pagination in\n * v1 (deferred until the long-tail audit case proves real).\n */\n listRuns(scope: ChatScope, scheduleId: string): Promise<ListChatScheduleRunsResponse> {\n return this.http.get<ListChatScheduleRunsResponse>(\n `${this.repoPath(scope)}/${scheduleId}/runs`,\n { headers: scopeHeaders(scope) },\n );\n }\n}\n\n/**\n * Feedback scope — a user's \"Satisfied? Yes/No\" rating + optional comment on a\n * chat session, and the list of feedback recorded for it (so the UI can\n * pre-fill and so an org admin can review past ratings). Conversation-scoped;\n * pass `turn_id` in the body to scope feedback to a single turn.\n *\n * Endpoint shape:\n * POST /v1/agent/chat/sessions/:id/feedback\n * GET /v1/agent/chat/sessions/:id/feedback\n */\nclass ChatFeedbackScope {\n constructor(private readonly http: BaseClient) {}\n\n submit(\n scope: ChatScope,\n conversationId: string,\n body: SubmitChatFeedbackRequest,\n ): Promise<ChatFeedbackEnvelope> {\n return this.http.post<ChatFeedbackEnvelope>(`${BASE_PATH}/${conversationId}/feedback`, {\n body,\n headers: scopeHeaders(scope),\n });\n }\n\n list(scope: ChatScope, conversationId: string): Promise<ListChatFeedbackResponse> {\n return this.http.get<ListChatFeedbackResponse>(`${BASE_PATH}/${conversationId}/feedback`, {\n headers: scopeHeaders(scope),\n });\n }\n}\n\nexport class ChatClient {\n readonly sessions: ChatSessionsScope;\n readonly messages: ChatMessagesScope;\n readonly questions: ChatQuestionsScope;\n readonly debug: ChatDebugScope;\n readonly schedules: ChatSchedulesScope;\n readonly feedback: ChatFeedbackScope;\n\n constructor(\n private readonly http: BaseClient,\n private readonly streamDeps: { baseUrl: string; getToken?: TokenProvider },\n ) {\n this.sessions = new ChatSessionsScope(http);\n this.messages = new ChatMessagesScope(http);\n this.questions = new ChatQuestionsScope(http);\n this.debug = new ChatDebugScope(http);\n this.schedules = new ChatSchedulesScope(http);\n this.feedback = new ChatFeedbackScope(http);\n }\n\n openStream(options: OpenChatStreamOptions): Promise<ChatStreamHandle> {\n return openChatStream(this.streamDeps, options);\n }\n}\n","import type { BaseClient } from '../../http/BaseClient.js';\nimport type {\n CreateAgentTemplateRequest,\n ListAgentTemplatesQuery,\n ListAgentTemplatesResponse,\n SimpleAgentResponse,\n Template,\n} from './types.js';\n\nconst BASE_PATH = '/api/agentengine/v1/agent/templates';\n\nexport class TemplatesClient {\n constructor(private readonly http: BaseClient) {}\n\n list(query: ListAgentTemplatesQuery = {}): Promise<ListAgentTemplatesResponse> {\n return this.http.get<ListAgentTemplatesResponse>(BASE_PATH, { query });\n }\n\n create(body: CreateAgentTemplateRequest): Promise<Template> {\n return this.http.post<Template>(BASE_PATH, { body });\n }\n\n delete(templateId: string): Promise<SimpleAgentResponse> {\n return this.http.delete<SimpleAgentResponse>(`${BASE_PATH}/${templateId}`);\n }\n}\n","import type { BaseClient } from '../../http/BaseClient.js';\nimport type {\n CreateScheduledTaskRequest,\n ListScheduledTasksQuery,\n ListScheduledTasksResponse,\n ScheduledTask,\n SimpleAgentResponse,\n} from './types.js';\n\nconst BASE_PATH = '/api/agentengine/v1/agent/scheduled-tasks';\n\nexport class ScheduledTasksClient {\n constructor(private readonly http: BaseClient) {}\n\n list(query: ListScheduledTasksQuery): Promise<ListScheduledTasksResponse> {\n return this.http.get<ListScheduledTasksResponse>(BASE_PATH, { query });\n }\n\n create(body: CreateScheduledTaskRequest): Promise<ScheduledTask> {\n return this.http.post<ScheduledTask>(BASE_PATH, { body });\n }\n\n delete(taskId: string, orgId: string): Promise<SimpleAgentResponse> {\n return this.http.delete<SimpleAgentResponse>(`${BASE_PATH}/${taskId}`, {\n query: { org_id: orgId },\n });\n }\n}\n","import type { BaseClient } from '../../http/BaseClient.js';\nimport type {\n AcquireScanLeaseRequest,\n AcquireScanLeaseResponse,\n ListScanHistoryQuery,\n ListScanHistoryResponse,\n PeekScanLeaseResponse,\n ResourceTreeQuery,\n ResourceTreeResponse,\n SubgraphRequest,\n SubgraphResponse,\n} from './types.js';\n\nexport class ResourcesClient {\n constructor(private readonly http: BaseClient) {}\n\n getTree(repoId: string, query?: ResourceTreeQuery): Promise<ResourceTreeResponse> {\n const params = new URLSearchParams();\n const search = query?.search?.trim();\n if (search) params.set('search', search);\n if (query?.showDefault === true) params.set('showDefault', 'true');\n const qs = params.size > 0 ? `?${params.toString()}` : '';\n return this.http.get<ResourceTreeResponse>(`/repos/${repoId}/resources/tree${qs}`);\n }\n\n /**\n * BFS-walks the dependency graph starting from `seedResourceIds` (or\n * `seedNameTokens`) and returns the matching nodes + edges. Use this\n * to render an inbound/outbound dependency view for a selected\n * resource. The server caps the result at maxNodes (default 80,\n * hard cap 200) and sets `truncated` when the cap was hit.\n */\n getSubgraph(repoId: string, request: SubgraphRequest): Promise<SubgraphResponse> {\n return this.http.post<SubgraphResponse>(`/repos/${repoId}/resources/subgraph`, { body: request });\n }\n\n /**\n * Returns recent scan history for a repo, optionally filtered by\n * credential. Backed by CloudScanHistory rows written when the\n * agent's discovery orchestrator releases a lease (or when the\n * backend's cleanup job sweeps an expired one). Use this to render\n * \"last refreshed N min ago\" badges and per-scope add/remove counts\n * next to the resource tree.\n */\n listScans(repoId: string, query?: ListScanHistoryQuery): Promise<ListScanHistoryResponse> {\n const params = new URLSearchParams();\n if (query?.credentialId) params.set('credentialId', query.credentialId);\n if (query?.limit != null) params.set('limit', String(query.limit));\n const qs = params.size > 0 ? `?${params.toString()}` : '';\n return this.http.get<ListScanHistoryResponse>(`/repos/${repoId}/scans${qs}`);\n }\n\n /**\n * Peeks the active scan lease (if any) for the given credential. Used\n * by the dashboard to display a \"scan in progress\" badge without\n * attempting to acquire the lease. Returns `lease: null` when no\n * scan is running. Expired leases are returned with their stale\n * timestamps — callers should compare `expiresAt` to `Date.now()`\n * before treating them as active.\n */\n peekScanLease(repoId: string, credentialId: string): Promise<PeekScanLeaseResponse> {\n const params = new URLSearchParams();\n params.set('credentialId', credentialId);\n return this.http.get<PeekScanLeaseResponse>(`/repos/${repoId}/scans/lease?${params.toString()}`);\n }\n\n /**\n * Attempts to claim a scan lease. Returns the acquired lease on\n * success. The server responds 409 with a `ScanInProgressError`-\n * shaped body when another scan is already in flight — callers\n * should catch the HttpError, parse the body, and surface a polite\n * \"another scan is running\" notice rather than retry automatically.\n *\n * NOTE: routine use is the agent's job. The dashboard typically only\n * calls peekScanLease + listScans; this method is exposed for power-\n * user tooling and automated test harnesses.\n */\n acquireScanLease(repoId: string, request: AcquireScanLeaseRequest): Promise<AcquireScanLeaseResponse> {\n return this.http.post<AcquireScanLeaseResponse>(`/repos/${repoId}/scans/lease`, { body: request });\n }\n}\n","export interface SystemEvent {\n id: number;\n timestamp: string;\n contextId: string;\n context: string;\n event: string;\n orgId: string;\n userId: string;\n userName: string;\n userEmail: string;\n projectId: string | null;\n jsonData: string | null;\n showUnread: boolean;\n}\n\nexport interface WireSystemEvent extends Omit<SystemEvent, 'projectId'> {\n workspaceId?: string | null;\n projectId?: string | null;\n}\n\nexport interface SystemEventQuery {\n from_timestamp?: number;\n to_timestamp?: number;\n contextId?: string;\n context?: string;\n event?: string;\n userId?: string;\n projectId?: string;\n /** @deprecated use `projectId` */\n workspaceId?: string;\n showUnread?: boolean;\n skip?: number;\n take?: number;\n}\n\nexport interface SystemEventQueryResponse {\n events: SystemEvent[];\n total: number;\n skip: number;\n take: number;\n}\n\nexport interface SystemEventReadResponse {\n success: true;\n}\n\nexport function normalizeSystemEvent(wire: WireSystemEvent): SystemEvent {\n return {\n id: wire.id,\n timestamp: wire.timestamp,\n contextId: wire.contextId,\n context: wire.context,\n event: wire.event,\n orgId: wire.orgId,\n userId: wire.userId,\n userName: wire.userName,\n userEmail: wire.userEmail,\n projectId: wire.projectId ?? wire.workspaceId ?? null,\n jsonData: wire.jsonData ?? null,\n showUnread: wire.showUnread,\n };\n}\n\n// TODO(backend-cleanup): cloud-agent-backend/internal/domain/types.go SystemEvent\n// still emits `workspaceId`. When that becomes `projectId`, this normalizer\n// collapses to identity.\n","import type { BaseClient } from '../../http/BaseClient.js';\nimport {\n normalizeSystemEvent,\n SystemEventQuery,\n SystemEventQueryResponse,\n SystemEventReadResponse,\n WireSystemEvent,\n} from './types.js';\n\ninterface WireQueryResponse {\n events: WireSystemEvent[];\n total: number;\n skip: number;\n take: number;\n}\n\nexport class SystemEventsClient {\n constructor(private readonly http: BaseClient) {}\n\n async query(body: SystemEventQuery): Promise<SystemEventQueryResponse> {\n const wire = await this.http.post<WireQueryResponse>('/systemevent', { body });\n return {\n events: (wire.events ?? []).map(normalizeSystemEvent),\n total: wire.total ?? 0,\n skip: wire.skip ?? 0,\n take: wire.take ?? 0,\n };\n }\n\n markRead(eventIdOrIds: number | number[]): Promise<SystemEventReadResponse> {\n const body = Array.isArray(eventIdOrIds) ? { ids: eventIdOrIds } : { id: eventIdOrIds };\n return this.http.post<SystemEventReadResponse>('/systemevent/read', { body });\n }\n\n markUnread(eventIdOrIds: number | number[]): Promise<SystemEventReadResponse> {\n const body = Array.isArray(eventIdOrIds) ? { ids: eventIdOrIds } : { id: eventIdOrIds };\n return this.http.delete<SystemEventReadResponse>('/systemevent/read', { body });\n }\n}\n","import type { BaseClient } from '../../http/BaseClient.js';\nimport { unwrapData } from '../../common/envelope.js';\nimport type {\n BuySubscriptionRequest,\n BuySubscriptionResponse,\n CancelSubscriptionResponse,\n ListPaymentsResponse,\n OrgSubscription,\n Payment,\n Subscription,\n} from './types.js';\n\nexport class SubscriptionsClient {\n constructor(private readonly http: BaseClient) {}\n\n async listCatalog(): Promise<Subscription[]> {\n const res = await this.http.get<{ success: boolean; data: Subscription[] }>('/subscriptions', { skipAuth: true });\n return res.data ?? [];\n }\n\n async getMine(): Promise<OrgSubscription | null> {\n const res = await this.http.get<{ success: boolean; data: OrgSubscription | null }>('/subscriptions/my');\n return res.data ?? null;\n }\n\n buy(body: BuySubscriptionRequest): Promise<BuySubscriptionResponse> {\n return this.http.post<BuySubscriptionResponse>('/subscriptions/buy', { body });\n }\n\n cancel(): Promise<CancelSubscriptionResponse> {\n return this.http.post<CancelSubscriptionResponse>('/subscriptions/cancel', {});\n }\n\n async listPayments(): Promise<Payment[]> {\n const res = await this.http.get<ListPaymentsResponse>('/subscriptions/payments');\n return res.data ?? [];\n }\n\n /** Stripe-hosted billing portal URL. */\n async portal(): Promise<{ url: string }> {\n const res = await this.http.post<{ success: boolean; data: { url: string } }>('/subscriptions/portal', {});\n return unwrapData(res);\n }\n}\n","import type { BaseClient } from '../../http/BaseClient.js';\nimport { unwrapData } from '../../common/envelope.js';\nimport type {\n BuyCreditPackRequest,\n BuyCreditPackResponse,\n BuyCustomCreditRequest,\n BuyCustomCreditResponse,\n CreditBalance,\n CreditPack,\n CustomCreditPurchaseConfig,\n ListCreditsTransactionsQuery,\n ListCreditsTransactionsResponse,\n MonthlyCreditStats,\n} from './types.js';\n\nexport class CreditsClient {\n constructor(private readonly http: BaseClient) {}\n\n async getBalance(): Promise<CreditBalance> {\n const res = await this.http.get<{ success: boolean; data: CreditBalance }>('/credits/balance');\n return unwrapData(res);\n }\n\n listTransactions(query: ListCreditsTransactionsQuery = {}): Promise<ListCreditsTransactionsResponse> {\n return this.http.get<ListCreditsTransactionsResponse>('/credits/transactions', { query });\n }\n\n /** Per-month credit activity (consumption / purchases / grants). */\n async getMonthlyStats(): Promise<MonthlyCreditStats[]> {\n const res = await this.http.get<{ success: boolean; data: MonthlyCreditStats[] }>('/credits/stats/monthly');\n return res.data ?? [];\n }\n\n /** Fixed credit-pack catalog. Public endpoint. */\n async listPacks(): Promise<CreditPack[]> {\n const res = await this.http.get<{ success: boolean; data: CreditPack[] }>('/credits/packs', { skipAuth: true });\n return res.data ?? [];\n }\n\n /**\n * Buy a fixed credit pack. Requires an active paid subscription\n * (the backend 403s free-tier orgs with SUBSCRIPTION_REQUIRED) and\n * caps purchases per pack per billing cycle. Returns a Stripe\n * Checkout URL to redirect to.\n */\n buyPack(body: BuyCreditPackRequest): Promise<BuyCreditPackResponse> {\n return this.http.post<BuyCreditPackResponse>('/credits/packs/buy', { body });\n }\n\n /**\n * \"Other amount\" PAYG config — bounds + presets for the\n * arbitrary-dollar tile. Public endpoint; returns a disabled\n * shape (`enabled: false`) when the feature is off so the\n * frontend can hide the tile without throwing.\n */\n async getCustomConfig(): Promise<CustomCreditPurchaseConfig> {\n const res = await this.http.get<{ success: boolean; data: CustomCreditPurchaseConfig }>('/credits/packs/custom-config');\n return unwrapData(res);\n }\n\n /**\n * Buy an arbitrary-dollar PAYG amount. The Stripe Checkout\n * session is built with `price_data` inline (no pre-created\n * Price), so the catalog has nothing to provision for this — it\n * is purely a per-purchase flow.\n */\n buyCustom(body: BuyCustomCreditRequest): Promise<BuyCustomCreditResponse> {\n return this.http.post<BuyCustomCreditResponse>('/credits/packs/buy-custom', { body });\n }\n}\n","import type { BaseClient } from '../../http/BaseClient.js';\nimport type {\n GetUsageSummaryQuery,\n GetUsageSummaryResponse,\n UsageByModelQuery,\n UsageByModelResponse,\n UsageReportQuery,\n UsageReportResponse,\n UsageSummaryQuery,\n UsageSummaryResponse,\n} from './types.js';\n\nconst LEGACY_AGENT_PATH = '/api/agentengine/v1/usage'; // legacy proxy path\nconst SCOPED_BASE = '/usage'; // new backend-scoped surface (RBAC + scope routing)\n\nexport class UsageClient {\n constructor(private readonly http: BaseClient) {}\n\n // ── legacy ─────────────────────────────────────────────────────────────────\n // Existing Settings → Usage page calls this. Kept for back-compat until the\n // new dashboard fully replaces the JSON dump.\n getSummary(query: GetUsageSummaryQuery): Promise<GetUsageSummaryResponse> {\n return this.http.get<GetUsageSummaryResponse>(`${LEGACY_AGENT_PATH}/summary`, { query });\n }\n\n // ── new scoped surface ─────────────────────────────────────────────────────\n // Hits the backend-side RBAC wrapper; the backend re-injects the scope id\n // into the agent query so we don't have to.\n org(query: UsageSummaryQuery = {}): Promise<UsageSummaryResponse> {\n return this.http.get(`${SCOPED_BASE}/org`, { query: query as Record<string, string> });\n }\n project(projectId: string, query: UsageSummaryQuery = {}): Promise<UsageSummaryResponse> {\n return this.http.get(`${SCOPED_BASE}/project/${encodeURIComponent(projectId)}`, { query: query as Record<string, string> });\n }\n sandbox(sandboxId: string, query: UsageSummaryQuery = {}): Promise<UsageSummaryResponse> {\n return this.http.get(`${SCOPED_BASE}/sandbox/${encodeURIComponent(sandboxId)}`, { query: query as Record<string, string> });\n }\n chat(chatId: string, query: UsageSummaryQuery = {}): Promise<UsageSummaryResponse> {\n return this.http.get(`${SCOPED_BASE}/chat/${encodeURIComponent(chatId)}`, { query: query as Record<string, string> });\n }\n\n // Each report variant exists so the dashboard chart can request hourly /\n // daily buckets without leaking scope routing into the caller.\n orgReport(query: UsageReportQuery = {}): Promise<UsageReportResponse> {\n return this.http.get(`${SCOPED_BASE}/org`, { query: { ...(query as Record<string, string>), kind: 'report' } });\n }\n projectReport(projectId: string, query: UsageReportQuery = {}): Promise<UsageReportResponse> {\n return this.http.get(`${SCOPED_BASE}/project/${encodeURIComponent(projectId)}`, { query: { ...(query as Record<string, string>), kind: 'report' } });\n }\n sandboxReport(sandboxId: string, query: UsageReportQuery = {}): Promise<UsageReportResponse> {\n return this.http.get(`${SCOPED_BASE}/sandbox/${encodeURIComponent(sandboxId)}`, { query: { ...(query as Record<string, string>), kind: 'report' } });\n }\n chatReport(chatId: string, query: UsageReportQuery = {}): Promise<UsageReportResponse> {\n return this.http.get(`${SCOPED_BASE}/chat/${encodeURIComponent(chatId)}`, { query: { ...(query as Record<string, string>), kind: 'report' } });\n }\n\n // Per-model breakdown — drives the table under the bar chart.\n orgByModel(query: UsageByModelQuery = {}): Promise<UsageByModelResponse> {\n return this.http.get(`${SCOPED_BASE}/org`, { query: { ...(query as Record<string, string>), kind: 'by_model' } });\n }\n projectByModel(projectId: string, query: UsageByModelQuery = {}): Promise<UsageByModelResponse> {\n return this.http.get(`${SCOPED_BASE}/project/${encodeURIComponent(projectId)}`, { query: { ...(query as Record<string, string>), kind: 'by_model' } });\n }\n sandboxByModel(sandboxId: string, query: UsageByModelQuery = {}): Promise<UsageByModelResponse> {\n return this.http.get(`${SCOPED_BASE}/sandbox/${encodeURIComponent(sandboxId)}`, { query: { ...(query as Record<string, string>), kind: 'by_model' } });\n }\n chatByModel(chatId: string, query: UsageByModelQuery = {}): Promise<UsageByModelResponse> {\n return this.http.get(`${SCOPED_BASE}/chat/${encodeURIComponent(chatId)}`, { query: { ...(query as Record<string, string>), kind: 'by_model' } });\n }\n}\n","import type { BaseClient } from '../../http/BaseClient.js';\nimport type {\n ChatBudget,\n EffectiveChatBudget,\n OrgBudget,\n ScopedBudget,\n UpdateChatBudgetRequest,\n UpdateCostLimitRequest,\n UpdateOrgBudgetRequest,\n UpdateScopedBudgetRequest,\n} from './types.js';\n\n// Backend routes hang off the root authed group — see internal/http/routes/budgets\n// in cloud-agent-backend. The backend resolves project_id → sandbox_id mapping\n// and handles RBAC; the frontend just hands it the scope ids.\nconst BASE = '/budgets';\n\nexport class BudgetsClient {\n constructor(private readonly http: BaseClient) {}\n\n // ── org ──\n getOrg(): Promise<{ budget: OrgBudget }> {\n return this.http.get(`${BASE}/org`);\n }\n updateOrg(body: UpdateOrgBudgetRequest): Promise<{ budget: OrgBudget; message: string }> {\n return this.http.put(`${BASE}/org`, { body });\n }\n\n // ── project (workspace) ──\n getProject(projectId: string): Promise<{ budget: ScopedBudget }> {\n return this.http.get(`${BASE}/project/${encodeURIComponent(projectId)}`);\n }\n updateProject(projectId: string, body: UpdateScopedBudgetRequest): Promise<{ budget: ScopedBudget; message: string }> {\n return this.http.put(`${BASE}/project/${encodeURIComponent(projectId)}`, { body });\n }\n\n // ── sandbox (repo) ──\n getSandbox(sandboxId: string): Promise<{ budget: ScopedBudget }> {\n return this.http.get(`${BASE}/sandbox/${encodeURIComponent(sandboxId)}`);\n }\n updateSandbox(sandboxId: string, body: UpdateScopedBudgetRequest): Promise<{ budget: ScopedBudget; message: string }> {\n return this.http.put(`${BASE}/sandbox/${encodeURIComponent(sandboxId)}`, { body });\n }\n\n // ── chat session ──\n getChat(chatId: string): Promise<{ budget: ChatBudget }> {\n return this.http.get(`${BASE}/chat/${encodeURIComponent(chatId)}`);\n }\n updateChat(chatId: string, body: UpdateChatBudgetRequest): Promise<{ message: string }> {\n return this.http.put(`${BASE}/chat/${encodeURIComponent(chatId)}`, { body });\n }\n // Resolves chat → sandbox → project → org and returns the first non-zero\n // per-chat USD cap plus the level it came from. Powers the chat header\n // budget badge — UI labels inherited values.\n getEffectiveChat(chatId: string): Promise<EffectiveChatBudget> {\n return this.http.get(`${BASE}/chat/${encodeURIComponent(chatId)}/effective`);\n }\n\n // ── per-template / per-scheduled USD caps ──\n updateTemplateCostLimit(templateId: string, body: UpdateCostLimitRequest) {\n return this.http.put(`${BASE}/template/${encodeURIComponent(templateId)}/cost_limit`, { body });\n }\n updateScheduleCostLimit(scheduleId: string, body: UpdateCostLimitRequest) {\n return this.http.put(`${BASE}/schedule/${encodeURIComponent(scheduleId)}/cost_limit`, { body });\n }\n}\n","import { BaseClient, type BaseClientOptions } from './http/BaseClient.js';\nimport { AuthClient } from './modules/auth/AuthClient.js';\nimport { MfaClient } from './modules/mfa/MfaClient.js';\nimport { UserClient } from './modules/user/UserClient.js';\nimport { OrganizationClient } from './modules/organization/OrganizationClient.js';\nimport { ProjectsClient } from './modules/projects/ProjectsClient.js';\nimport { SandboxesClient } from './modules/sandboxes/SandboxesClient.js';\nimport { CredentialsClient } from './modules/credentials/CredentialsClient.js';\nimport { ChatClient } from './modules/chat/ChatClient.js';\nimport { TemplatesClient } from './modules/agentEngine/TemplatesClient.js';\nimport { ScheduledTasksClient } from './modules/agentEngine/ScheduledTasksClient.js';\nimport { ResourcesClient } from './modules/resources/ResourcesClient.js';\nimport { SystemEventsClient } from './modules/systemEvents/SystemEventsClient.js';\nimport { SubscriptionsClient } from './modules/billing/SubscriptionsClient.js';\nimport { CreditsClient } from './modules/billing/CreditsClient.js';\nimport { UsageClient } from './modules/usage/UsageClient.js';\nimport { BudgetsClient } from './modules/budgets/BudgetsClient.js';\n\nexport type CloudAgentClientOptions = BaseClientOptions;\n\nclass AgentEngineFacade {\n constructor(\n public readonly templates: TemplatesClient,\n public readonly scheduledTasks: ScheduledTasksClient,\n ) {}\n}\n\nclass BillingFacade {\n constructor(\n public readonly subscriptions: SubscriptionsClient,\n public readonly credits: CreditsClient,\n ) {}\n}\n\nexport class CloudAgentClient {\n readonly http: BaseClient;\n readonly auth: AuthClient;\n readonly mfa: MfaClient;\n readonly user: UserClient;\n readonly organization: OrganizationClient;\n readonly projects: ProjectsClient;\n readonly sandboxes: SandboxesClient;\n readonly credentials: CredentialsClient;\n readonly chat: ChatClient;\n readonly agentEngine: AgentEngineFacade;\n readonly resources: ResourcesClient;\n readonly systemEvents: SystemEventsClient;\n readonly billing: BillingFacade;\n readonly usage: UsageClient;\n readonly budgets: BudgetsClient;\n\n constructor(options: CloudAgentClientOptions) {\n this.http = new BaseClient(options);\n this.auth = new AuthClient(this.http);\n this.mfa = new MfaClient(this.http);\n this.user = new UserClient(this.http);\n this.organization = new OrganizationClient(this.http);\n this.projects = new ProjectsClient(this.http);\n this.sandboxes = new SandboxesClient(this.http);\n this.credentials = new CredentialsClient(this.http);\n this.chat = new ChatClient(this.http, { baseUrl: this.http.baseUrl, getToken: options.getToken });\n this.agentEngine = new AgentEngineFacade(\n new TemplatesClient(this.http),\n new ScheduledTasksClient(this.http),\n );\n this.resources = new ResourcesClient(this.http);\n this.systemEvents = new SystemEventsClient(this.http);\n this.billing = new BillingFacade(new SubscriptionsClient(this.http), new CreditsClient(this.http));\n this.usage = new UsageClient(this.http);\n this.budgets = new BudgetsClient(this.http);\n }\n}\n","export enum ProviderType {\n LOCAL = 'LOCAL',\n GOOGLE = 'GOOGLE',\n MICROSOFT = 'MICROSOFT',\n GITHUB = 'GITHUB',\n WEB3_STELLAR = 'WEB3_STELLAR',\n}\n\nexport enum AccessType {\n READ = 'READ',\n WRITE = 'WRITE',\n ADMIN = 'ADMIN',\n}\n\nexport enum OrgRoles {\n USER = 0x00,\n BILLING = 0x01,\n WORKSPACES = 0x02,\n ADMINISTRATORS = 0xfe,\n OWNER = 0xff,\n}\n\nexport interface UserSummary {\n id: string;\n name: string;\n lastName: string;\n email: string;\n orgRole?: number | null;\n}\n","export enum MFAType {\n GOOGLE_AUTH = 'GOOGLE_AUTH',\n MAGIC_LINK = 'MAGIC_LINK',\n PASSKEY = 'PASSKEY',\n}\n\nexport interface MFAStatus {\n isEnabled: boolean;\n isRequired: boolean;\n isEnforced: boolean;\n enabledMethods: MFAType[];\n primaryMethod?: MFAType | null;\n sessionVerified: boolean;\n}\n\nexport interface MFASetupResponse {\n success: boolean;\n data?: {\n mfaType: MFAType;\n secret?: string;\n qrCode?: string;\n backupCodes?: string[];\n };\n message?: string;\n}\n\nexport interface MFAVerifySetupRequest {\n mfaType: MFAType;\n code?: string;\n credential?: Record<string, unknown>;\n}\n\nexport interface MFAVerifyLoginRequest {\n mfaType: MFAType;\n code?: string;\n credential?: Record<string, unknown>;\n}\n\nexport interface MFASimpleResponse {\n success: boolean;\n message?: string;\n data?: unknown;\n}\n\nexport interface MFAVerifyLoginResponse {\n success: boolean;\n accessToken?: string;\n refreshToken?: string;\n tokenId?: string;\n expiresAt?: number;\n user?: unknown;\n message?: string;\n error_code?: string;\n}\n\nexport interface MagicLinkSendResponse {\n success: boolean;\n message?: string;\n}\n\nexport interface MagicLinkActivateRequest {\n token: string;\n}\n","// Provider catalog — TypeScript mirror of cloud-agent-backend's\n// internal/providers package. Drives the dynamic key form (one component\n// renders any provider) and pre-validates payloads client-side before\n// submitting. The server-side catalog is the safety net; this mirror\n// lets the UI fail fast and produce friendlier inline errors.\n//\n// Keep this file in sync with cloud-agent-backend/internal/providers/specs.go\n// when adding/changing providers. The shapes are intentionally identical.\n\n// ── Field-descriptor types ─────────────────────────────────────────────\n\nexport type FieldType = 'text' | 'password' | 'number' | 'textarea' | 'pem' | 'json' | 'stringList';\n\nexport interface FieldSpec {\n /** JSON-pointer-ish: \"secret\" | \"metadata.<key>\". */\n path: string;\n label: string;\n type: FieldType;\n required: boolean;\n /** True for fields that hold credential material — UI hides the value. */\n secret?: boolean;\n default?: unknown;\n placeholder?: string;\n help?: string;\n}\n\n// Capability bitmask values mirrored from cloud-agent-backend's\n// internal/providers package and the \"Provider\" master table seeded by\n// migration 0005. Frontends drive tab/section filtering by AND-ing\n// against these bits — adding a new capability is a backend migration,\n// not a frontend deploy.\n//\n// CAP_STORAGE — cloud ops / resource discovery (S3/GCS/Blob, EC2, …)\n// CAP_AI — LLM / embedding inference\n// CAP_COMPUTE — SSH and similar infra-runtime credentials\n// CAP_VCS — source-code platforms (GitHub, future GitLab)\n// CAP_NOTIFY — outbound notification transports (Slack, Teams, PagerDuty, SMTP)\n// CAP_GENERAL — catch-all for the legacy \"OTHER\" row\nexport const CAP_STORAGE = 0x1;\nexport const CAP_AI = 0x2;\nexport const CAP_COMPUTE = 0x4;\nexport const CAP_VCS = 0x8;\nexport const CAP_NOTIFY = 0x10;\nexport const CAP_GENERAL = 0xff;\n\nexport interface ProviderSpec {\n id: string;\n displayName: string;\n /**\n * Bitmask of CAP_* values describing what kinds of operations this\n * credential can drive. Sourced from the Provider master table; mirror\n * declared inline below so the frontend can render its tabs / filters\n * without a runtime round-trip.\n */\n capabilities: number;\n fields: FieldSpec[];\n}\n\n// ── Catalog ─────────────────────────────────────────────────────────────\n\nexport const PROVIDER_CATALOG: Record<string, ProviderSpec> = {\n AWS: {\n id: 'AWS',\n displayName: 'Amazon Web Services',\n capabilities: CAP_STORAGE,\n fields: [\n { path: 'metadata.accessKeyId', label: 'Access Key ID', type: 'text', required: true,\n placeholder: 'AKIAxxxxxxxxxxxxxxxx',\n help: 'The AKIA-prefixed identifier from IAM. Stored in plain text — only the secret access key is encrypted.' },\n { path: 'secret', label: 'Secret Access Key', type: 'password', required: true, secret: true,\n help: 'The 40-character secret. Encrypted at rest.' },\n { path: 'metadata.region', label: 'Region', type: 'text', required: false,\n placeholder: 'us-east-1',\n help: 'Default region for boto3 clients. Optional — leave blank to use the SDK default.' },\n { path: 'metadata.endpoint', label: 'Endpoint (optional)', type: 'text', required: false,\n placeholder: 'https://s3.amazonaws.com',\n help: 'Override for non-AWS S3-compatible endpoints (MinIO, Wasabi, etc.). Most users leave blank.' },\n ],\n },\n BEDROCK: {\n id: 'BEDROCK',\n displayName: 'AWS Bedrock',\n capabilities: CAP_AI,\n fields: [\n { path: 'metadata.accessKeyId', label: 'Access Key ID', type: 'text', required: true,\n placeholder: 'AKIAxxxxxxxxxxxxxxxx',\n help: 'IAM access key allowed to invoke Bedrock. Stored in plain text — only the secret access key is encrypted.' },\n { path: 'secret', label: 'Secret Access Key', type: 'password', required: true, secret: true,\n help: 'The IAM secret. Encrypted at rest.' },\n { path: 'metadata.region', label: 'Region', type: 'text', required: false,\n placeholder: 'us-east-1',\n help: 'Default region for Bedrock Runtime. Optional — leave blank to use the SDK default.' },\n { path: 'metadata.endpoint', label: 'Endpoint (optional)', type: 'text', required: false,\n placeholder: 'https://bedrock-runtime.us-east-1.amazonaws.com',\n help: 'Override for VPC endpoints or testing. Most users leave blank.' },\n ],\n },\n GCP: {\n id: 'GCP',\n displayName: 'Google Cloud',\n capabilities: CAP_STORAGE,\n fields: [\n { path: 'secret', label: 'Service Account JSON', type: 'json', required: true, secret: true,\n placeholder: '{\"type\":\"service_account\",\"project_id\":\"…\",\"client_email\":\"…\",\"private_key\":\"…\"}',\n help: 'Paste the service-account JSON, or drop the file you downloaded from the IAM console. The full document is encrypted; project_id and client_email are extracted automatically for display.' },\n ],\n },\n AZURE: {\n id: 'AZURE',\n displayName: 'Microsoft Azure',\n capabilities: CAP_STORAGE,\n fields: [\n { path: 'metadata.clientId', label: 'Client ID (Application ID)', type: 'text', required: true,\n placeholder: '00000000-0000-0000-0000-000000000000' },\n { path: 'secret', label: 'Client Secret', type: 'password', required: true, secret: true,\n help: 'The secret value generated when you registered the app. Encrypted at rest.' },\n { path: 'metadata.tenantId', label: 'Tenant ID', type: 'text', required: true,\n placeholder: '00000000-0000-0000-0000-000000000000' },\n { path: 'metadata.subscriptionId', label: 'Subscription ID', type: 'text', required: false,\n placeholder: '00000000-0000-0000-0000-000000000000' },\n ],\n },\n SSH: {\n id: 'SSH',\n displayName: 'SSH',\n capabilities: CAP_COMPUTE,\n fields: [\n { path: 'metadata.user', label: 'User', type: 'text', required: true,\n placeholder: 'ubuntu',\n help: 'Linux user the agent will SSH as.' },\n { path: 'metadata.host', label: 'Host', type: 'text', required: true,\n placeholder: 'vps.example.com or * for wildcard',\n help: \"Hostname or IP. Use '*' for a key that's valid across multiple hosts; the agent will require the prompt to name the target host.\" },\n { path: 'metadata.port', label: 'Port', type: 'number', required: false, default: 22,\n placeholder: '22' },\n { path: 'secret', label: 'PEM Private Key', type: 'pem', required: true, secret: true,\n placeholder: '-----BEGIN OPENSSH PRIVATE KEY-----\\n…\\n-----END OPENSSH PRIVATE KEY-----',\n help: 'Paste the PEM, or drop the private key file (e.g. id_ed25519). Passphrase-encrypted keys are rejected — the agent runs unattended.' },\n ],\n },\n GITHUB: {\n id: 'GITHUB',\n displayName: 'GitHub',\n capabilities: CAP_VCS,\n fields: [\n { path: 'secret', label: 'Personal Access Token (PAT)', type: 'password', required: true, secret: true,\n placeholder: 'ghp_xxxxxxxxxxxxxxxxxxxxxxxx',\n help: 'A classic or fine-grained PAT. Encrypted at rest. The first 7 characters are kept in metadata for display.' },\n { path: 'metadata.org', label: 'Org (optional)', type: 'text', required: false,\n placeholder: 'my-github-org',\n help: 'Restrict this credential to a single org if you scoped the PAT that way. Optional — leave blank for personal-account access.' },\n { path: 'metadata.repoSlugs', label: 'Allowed Repos (optional)', type: 'stringList', required: false,\n placeholder: 'owner/repo',\n help: \"Repos the agent is allowed to operate on with this credential, as 'owner/name'. Drives the awareness block injected into the planner. Leave empty to grant the full PAT scope (the agent will still only act on repos the user names in prompts).\" },\n { path: 'metadata.protectedBranches', label: 'Protected Branches (optional)', type: 'stringList', required: false,\n placeholder: 'main',\n help: \"Branches that require explicit user approval for write operations (push, merge, delete). 'main' / 'master' / 'release/*' are good defaults.\" },\n ],\n },\n GITLAB: {\n id: 'GITLAB',\n displayName: 'GitLab',\n capabilities: CAP_VCS,\n fields: [\n { path: 'secret', label: 'Access Token', type: 'password', required: true, secret: true,\n placeholder: 'glpat-xxxxxxxxxxxxxxxxxxxx',\n help: 'A personal, project, or group access token. Encrypted at rest. The first 9 characters are kept in metadata for display.' },\n { path: 'metadata.endpoint', label: 'Endpoint (optional)', type: 'text', required: false,\n placeholder: 'https://gitlab.example.com/api/v4',\n help: 'Override for self-hosted GitLab. Leave blank to use https://gitlab.com/api/v4.' },\n { path: 'metadata.group', label: 'Top-level Group (optional)', type: 'text', required: false,\n placeholder: 'my-gitlab-group',\n help: 'Restrict this credential to a single top-level group if you scoped the token that way. Optional — leave blank for personal-account or wider scope.' },\n { path: 'metadata.repoSlugs', label: 'Allowed Projects (optional)', type: 'stringList', required: false,\n placeholder: 'group/subgroup/project',\n help: 'Project paths the agent is allowed to operate on with this credential. GitLab project paths can be arbitrarily deep (group/subgroup/.../project). Leave empty to grant the full token scope.' },\n { path: 'metadata.protectedBranches', label: 'Protected Branches (optional)', type: 'stringList', required: false,\n placeholder: 'main',\n help: \"Branches that require explicit user approval for write operations. 'main' / 'master' / 'release/*' are good defaults.\" },\n ],\n },\n AZURE_DEVOPS: {\n id: 'AZURE_DEVOPS',\n displayName: 'Azure DevOps',\n capabilities: CAP_VCS,\n fields: [\n { path: 'secret', label: 'Personal Access Token (PAT)', type: 'password', required: true, secret: true,\n placeholder: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',\n help: 'An ADO PAT with the scopes you want the agent to use (Code, Build, Release, Work Items …). Encrypted at rest. The first 7 characters are kept in metadata for display.' },\n { path: 'metadata.organization', label: 'Organization', type: 'text', required: true,\n placeholder: 'my-ado-org',\n help: 'The ADO organization name (the segment after dev.azure.com/, or the prefix in your-org.visualstudio.com).' },\n { path: 'metadata.project', label: 'Project (optional)', type: 'text', required: false,\n placeholder: 'Engineering',\n help: 'Restrict this credential to a single ADO project. Optional — leave blank if the PAT spans multiple projects in the org.' },\n { path: 'metadata.endpoint', label: 'Endpoint (optional)', type: 'text', required: false,\n placeholder: 'https://dev.azure.com',\n help: 'Override for ADO Server (on-prem) deployments. Leave blank to use https://dev.azure.com.' },\n { path: 'metadata.repoSlugs', label: 'Allowed Repos (optional)', type: 'stringList', required: false,\n placeholder: 'project/repo',\n help: \"Repos the agent is allowed to operate on. Use 'project/repo' when 'Project' is blank, or just 'repo' when scoped to one project. Leave empty to grant the full PAT scope.\" },\n { path: 'metadata.protectedBranches', label: 'Protected Branches (optional)', type: 'stringList', required: false,\n placeholder: 'main',\n help: 'Branches that require explicit user approval for write operations and pipeline triggers.' },\n ],\n },\n OPENAI: {\n id: 'OPENAI',\n displayName: 'OpenAI',\n capabilities: CAP_AI,\n fields: [\n { path: 'secret', label: 'API Key', type: 'password', required: true, secret: true,\n placeholder: 'sk-…',\n help: 'Your OpenAI API key. Encrypted at rest. The first ~7 characters are kept in metadata for display.' },\n { path: 'metadata.endpoint', label: 'Endpoint (optional)', type: 'text', required: false,\n placeholder: 'https://api.openai.com/v1',\n help: 'Override for OpenAI-compatible endpoints (Azure OpenAI, self-hosted gateways). Most users leave blank.' },\n ],\n },\n ANTHROPIC: {\n id: 'ANTHROPIC',\n displayName: 'Anthropic',\n capabilities: CAP_AI,\n fields: [\n { path: 'secret', label: 'API Key', type: 'password', required: true, secret: true,\n placeholder: 'sk-ant-…',\n help: 'Your Anthropic API key. Encrypted at rest. The first ~10 characters are kept in metadata for display.' },\n { path: 'metadata.endpoint', label: 'Endpoint (optional)', type: 'text', required: false,\n placeholder: 'https://api.anthropic.com',\n help: 'Override for Anthropic-compatible endpoints. Most users leave blank.' },\n ],\n },\n GEMINI: {\n id: 'GEMINI',\n displayName: 'Google Gemini',\n capabilities: CAP_AI,\n fields: [\n { path: 'secret', label: 'API Key', type: 'password', required: true, secret: true,\n placeholder: 'AIza…',\n help: 'Your Gemini API key from Google AI Studio. Encrypted at rest. The first ~7 characters are kept in metadata for display.' },\n { path: 'metadata.endpoint', label: 'Endpoint (optional)', type: 'text', required: false,\n placeholder: 'https://generativelanguage.googleapis.com',\n help: 'Override for proxies or regional endpoints. Most users leave blank to use the default Gemini API base URL.' },\n ],\n },\n SLACK: {\n id: 'SLACK',\n displayName: 'Slack',\n capabilities: CAP_NOTIFY,\n fields: [\n { path: 'secret', label: 'Incoming Webhook URL', type: 'password', required: true, secret: true,\n placeholder: 'https://hooks.slack.com/services/T000/B000/xxxxxxxx',\n help: 'A Slack Incoming Webhook URL. The target channel is fixed by the webhook. Encrypted at rest; never injected into the sandbox.' },\n { path: 'metadata.channelHint', label: 'Channel Hint (optional)', type: 'text', required: false,\n placeholder: '#oncall',\n help: 'Display-only label for the channel this webhook posts to. Does not change routing — the webhook URL controls the destination.' },\n ],\n },\n TEAMS: {\n id: 'TEAMS',\n displayName: 'Microsoft Teams',\n capabilities: CAP_NOTIFY,\n fields: [\n { path: 'secret', label: 'Incoming Webhook URL', type: 'password', required: true, secret: true,\n placeholder: 'https://outlook.office.com/webhook/...',\n help: 'A Teams Incoming Webhook (connector) URL. The target channel is fixed by the webhook. Encrypted at rest; never injected into the sandbox.' },\n ],\n },\n PAGERDUTY: {\n id: 'PAGERDUTY',\n displayName: 'PagerDuty',\n capabilities: CAP_NOTIFY,\n fields: [\n { path: 'secret', label: 'Integration / Routing Key', type: 'password', required: true, secret: true,\n placeholder: 'R0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX',\n help: 'An Events API v2 integration (routing) key from a PagerDuty service. Encrypted at rest; never injected into the sandbox.' },\n ],\n },\n SMTP: {\n id: 'SMTP',\n displayName: 'Email (SMTP)',\n capabilities: CAP_NOTIFY,\n fields: [\n { path: 'metadata.host', label: 'SMTP Host', type: 'text', required: true,\n placeholder: 'smtp.example.com',\n help: 'Hostname of the SMTP relay.' },\n { path: 'metadata.port', label: 'Port', type: 'number', required: false, default: 587,\n placeholder: '587',\n help: 'SMTP port. Defaults to 587 (STARTTLS). TLS is always required.' },\n { path: 'metadata.fromAddress', label: 'From Address', type: 'text', required: true,\n placeholder: 'alerts@example.com',\n help: 'Envelope-from / From header for messages the agent sends. Also used as the SMTP AUTH username.' },\n { path: 'metadata.toAddresses', label: 'To Addresses', type: 'stringList', required: true,\n placeholder: 'oncall@example.com',\n help: 'One or more recipient addresses. Every notify message is sent to all of them.' },\n { path: 'secret', label: 'Password', type: 'password', required: true, secret: true,\n help: 'SMTP AUTH password for the From address. Encrypted at rest; never injected into the sandbox.' },\n ],\n },\n};\n\n// Stable display order for dropdowns. Matches the Go catalog's List().\nconst PROVIDER_ORDER = ['AWS', 'BEDROCK', 'GCP', 'AZURE', 'SSH', 'GITHUB', 'GITLAB', 'AZURE_DEVOPS', 'OPENAI', 'ANTHROPIC', 'GEMINI', 'SLACK', 'TEAMS', 'PAGERDUTY', 'SMTP'];\n\nexport function listProviders(): ProviderSpec[] {\n return PROVIDER_ORDER.flatMap((id) => (PROVIDER_CATALOG[id] ? [PROVIDER_CATALOG[id]] : []));\n}\n\nexport function getProvider(id: string): ProviderSpec | undefined {\n return PROVIDER_CATALOG[id];\n}\n\n// ── Path helpers ───────────────────────────────────────────────────────\n\nconst SECRET_PATH = 'secret';\nconst METADATA_PREFIX = 'metadata.';\n\nexport function isSecretPath(path: string): boolean {\n return path === SECRET_PATH;\n}\n\nexport function isMetadataPath(path: string): path is `metadata.${string}` {\n return path.startsWith(METADATA_PREFIX);\n}\n\nexport function metadataKey(path: string): string | undefined {\n return isMetadataPath(path) ? path.slice(METADATA_PREFIX.length) : undefined;\n}\n\n/** getValueAt reads the FieldSpec.path from a separate (secret, metadata) tuple. */\nexport function getValueAt(secret: string, metadata: Record<string, unknown>, path: string): unknown {\n if (path === SECRET_PATH) return secret;\n const k = metadataKey(path);\n return k ? metadata[k] : undefined;\n}\n\n/** setValueAt writes to (secret, metadata). Returns the updated tuple. */\nexport function setValueAt(\n secret: string,\n metadata: Record<string, unknown>,\n path: string,\n value: unknown,\n): { secret: string; metadata: Record<string, unknown> } {\n if (path === SECRET_PATH) return { secret: typeof value === 'string' ? value : '', metadata };\n const k = metadataKey(path);\n if (!k) return { secret, metadata };\n const nextMeta = { ...metadata };\n if (value === undefined || value === null || value === '') delete nextMeta[k];\n else nextMeta[k] = value;\n return { secret, metadata: nextMeta };\n}\n\n// ── Validation ─────────────────────────────────────────────────────────\n\n/**\n * validate runs the structural checks for a credential payload. Returns\n * an error string on failure, or null on success. Mirrors the Go-side\n * Validate() in internal/providers/validators.go.\n */\nexport function validate(\n providerId: string,\n label: string,\n secret: string,\n metadata: Record<string, unknown>,\n): string | null {\n const spec = getProvider(providerId);\n if (!spec) {\n return `Unknown provider \"${providerId}\". Known providers: ${Object.keys(PROVIDER_CATALOG).join(', ')}`;\n }\n if (!label || label.trim() === '') {\n return 'Label is required';\n }\n\n // Required-field + type checks.\n for (const f of spec.fields) {\n const present = isFieldPresent(secret, metadata, f.path);\n if (f.required && !present) {\n return `${spec.id}.${f.label} is required`;\n }\n if (!present) continue;\n const value = getValueAt(secret, metadata, f.path);\n const typeErr = typeCheck(f, value);\n if (typeErr) return typeErr;\n }\n\n // Reject any caller-supplied metadata keys not declared in the spec\n // and any reserved underscore-prefixed keys (catalog-managed).\n const allowed = allowedMetadataKeys(spec);\n for (const k of Object.keys(metadata)) {\n if (k.startsWith('_')) {\n return `Metadata key \"${k}\" is reserved (the leading underscore is catalog-managed); remove it from the payload`;\n }\n if (!allowed.has(k)) {\n return `Metadata key \"${k}\" is not part of the ${spec.id} spec. Allowed keys: ${[...allowed].join(', ')}`;\n }\n }\n return null;\n}\n\nfunction isFieldPresent(secret: string, metadata: Record<string, unknown>, path: string): boolean {\n const v = getValueAt(secret, metadata, path);\n if (v === undefined || v === null) return false;\n if (typeof v === 'string') return v.trim() !== '';\n // Mirror the Go getAtPath: empty arrays count as absent so required-field\n // checks fire and stringList fields can be cleared by submitting [].\n if (Array.isArray(v)) return v.length > 0;\n return true;\n}\n\nfunction typeCheck(f: FieldSpec, value: unknown): string | null {\n switch (f.type) {\n case 'text':\n case 'password':\n case 'textarea':\n return typeof value === 'string' ? null : `${f.label} must be a string`;\n case 'number':\n if (typeof value === 'number' && Number.isInteger(value) && value >= 0) return null;\n if (typeof value === 'string' && /^\\d+$/.test(value)) return null;\n return `${f.label} must be a non-negative integer`;\n case 'json':\n if (typeof value !== 'string') return `${f.label} must be a JSON string`;\n try {\n JSON.parse(value);\n return null;\n } catch {\n return `${f.label} is not valid JSON`;\n }\n case 'pem':\n if (typeof value !== 'string') return `${f.label} must be a PEM string`;\n return validatePEM(value, f.label);\n case 'stringList': {\n if (!Array.isArray(value)) return `${f.label} must be a list of strings`;\n for (let i = 0; i < value.length; i++) {\n const item = value[i];\n if (typeof item !== 'string') return `${f.label}[${i}] must be a string`;\n if (item.trim() === '') return `${f.label}[${i}] is empty`;\n }\n return null;\n }\n default:\n return `${f.label} has unsupported field type ${f.type}`;\n }\n}\n\nconst PEM_BEGIN_RE = /-----BEGIN [^-]+-----/;\nconst PEM_END_RE = /-----END [^-]+-----/;\nconst PEM_PROC_TYPE_ENCRYPTED = /^Proc-Type:\\s*\\d+,\\s*ENCRYPTED/m;\nconst PEM_DEK_INFO = /^DEK-Info:/m;\n\nfunction validatePEM(s: string, label: string): string | null {\n const t = s.trim();\n if (!t) return `${label}: empty PEM`;\n if (!PEM_BEGIN_RE.test(t) || !PEM_END_RE.test(t)) {\n return `${label}: no valid PEM block found (expected '-----BEGIN ... PRIVATE KEY-----')`;\n }\n if (PEM_PROC_TYPE_ENCRYPTED.test(t) || PEM_DEK_INFO.test(t)) {\n return `${label}: passphrase-encrypted PEM is not supported (the agent runs unattended)`;\n }\n return null;\n}\n\nfunction allowedMetadataKeys(spec: ProviderSpec): Set<string> {\n const out = new Set<string>();\n for (const f of spec.fields) {\n const k = metadataKey(f.path);\n if (k) out.add(k);\n }\n // Mirror the Go-side allow-list of SecretParser-derived metadata keys\n // so a round-trip read→edit→write doesn't trip the unknown-key check.\n switch (spec.id) {\n case 'GCP':\n out.add('clientEmail');\n out.add('projectId');\n break;\n case 'GITHUB':\n case 'AZURE_DEVOPS':\n case 'OPENAI':\n case 'ANTHROPIC':\n case 'GEMINI':\n out.add('tokenPrefix');\n break;\n case 'GITLAB':\n out.add('tokenPrefix');\n out.add('host'); // derived from endpoint by the parser\n break;\n }\n return out;\n}\n\n// ── Display hints ──────────────────────────────────────────────────────\n//\n// Used for client-side previews when forms are filled in but not yet\n// submitted. The persisted value comes from the server (cached in\n// metadata._displayHint) — this function is a fallback / preview helper.\n\nexport function computeDisplayHint(providerId: string, metadata: Record<string, unknown>): string {\n const cached = metadata['_displayHint'];\n if (typeof cached === 'string' && cached) return cached;\n\n switch (providerId) {\n case 'AWS':\n case 'BEDROCK': {\n const key = str(metadata['accessKeyId']);\n const region = str(metadata['region']);\n return shortPrefix(key, 8) + (region ? ` / ${region}` : '');\n }\n case 'GCP': {\n const email = str(metadata['clientEmail']);\n const proj = str(metadata['projectId']);\n if (!email && !proj) return '';\n if (!email) return proj;\n if (!proj) return email;\n return `${email} / ${proj}`;\n }\n case 'AZURE': {\n const client = str(metadata['clientId']);\n const sub = str(metadata['subscriptionId']);\n const head = shortPrefix(client, 8);\n return head + (sub ? ` / sub:${shortPrefix(sub, 8)}` : '');\n }\n case 'SSH': {\n const user = str(metadata['user']);\n const host = str(metadata['host']);\n const port = metadata['port'];\n let portStr = '';\n if (typeof port === 'number' && port > 0 && port !== 22) portStr = `:${port}`;\n else if (typeof port === 'string' && /^\\d+$/.test(port) && port !== '22') portStr = `:${port}`;\n if (!user && !host) return '';\n return `${user}@${host}${portStr}`.replace(/^@/, '');\n }\n case 'GITHUB': {\n const prefix = str(metadata['tokenPrefix']);\n const org = str(metadata['org']);\n const head = prefix ? `${prefix}…` : '';\n return [head, org].filter(Boolean).join(' / ');\n }\n case 'GITLAB': {\n const prefix = str(metadata['tokenPrefix']);\n const group = str(metadata['group']);\n let host = str(metadata['host']);\n if (!host) {\n const endpoint = str(metadata['endpoint']);\n host = endpoint ? hostFromURL(endpoint) : 'gitlab.com';\n }\n let out = prefix ? `${prefix}…` : '';\n if (group) out = out ? `${out} / ${group}` : group;\n if (host && host !== 'gitlab.com') out = out ? `${out} @ ${host}` : host;\n return out;\n }\n case 'AZURE_DEVOPS': {\n const prefix = str(metadata['tokenPrefix']);\n const org = str(metadata['organization']);\n const project = str(metadata['project']);\n let out = prefix ? `${prefix}…` : '';\n if (org) {\n const orgSeg = project ? `${org}/${project}` : org;\n out = out ? `${out} / ${orgSeg}` : orgSeg;\n }\n return out;\n }\n case 'OPENAI':\n case 'ANTHROPIC':\n case 'GEMINI': {\n const prefix = str(metadata['tokenPrefix']);\n return prefix ? `${prefix}…` : '';\n }\n case 'SLACK':\n return str(metadata['channelHint']);\n case 'SMTP': {\n const from = str(metadata['fromAddress']);\n const host = str(metadata['host']);\n return from + (host ? ` @ ${host}` : '');\n }\n default:\n return '';\n }\n}\n\nfunction str(v: unknown): string {\n return typeof v === 'string' ? v : '';\n}\n\nfunction shortPrefix(s: string, n: number): string {\n if (!s) return '';\n if (s.length <= n) return s;\n return s.slice(0, n) + '…';\n}\n\nfunction hostFromURL(raw: string): string {\n let s = raw.trim();\n const schemeIdx = s.indexOf('://');\n if (schemeIdx >= 0) s = s.slice(schemeIdx + 3);\n const cut = s.search(/[/?#]/);\n if (cut >= 0) s = s.slice(0, cut);\n return s;\n}\n","// Hierarchical USD budgets. All wire values are USD micros (1 USD = 1_000_000);\n// 0 means \"no cap / inherit from parent\" — never \"free\".\n\nexport type BudgetScope = 'org' | 'workspace' | 'repo' | 'chat';\n\nexport interface OrgBudget {\n id: string;\n org_id: string;\n daily_limit: number; // legacy token caps — being phased out (kept = 0)\n monthly_limit: number;\n tokens_today: number;\n tokens_month: number;\n daily_cost_limit_usd_micros: number;\n monthly_cost_limit_usd_micros: number;\n cost_today_usd_micros: number;\n cost_month_usd_micros: number;\n chat_session_cost_limit_usd_micros: number;\n reset_day_at: string;\n reset_month_at: string;\n updated_at: string;\n /** M3 Stage 3: action categories allowed at this scope. `read` is\n * implicit and never appears here. Lower scopes (workspace, repo,\n * schedule) intersect with this set. */\n granted_categories: string[];\n /** M3 Stage 4: inheritable schedule auto-disable threshold. Null\n * means \"inherit from parent\"; engine default is 5 when every\n * level in the chain is null. */\n max_consecutive_failures?: number;\n}\n\nexport interface ScopedBudget {\n id: string;\n org_id: string;\n workspace_id?: string;\n repo_id?: string;\n daily_cost_limit_usd_micros: number;\n monthly_cost_limit_usd_micros: number;\n chat_session_cost_limit_usd_micros: number;\n cost_today_usd_micros: number;\n cost_month_usd_micros: number;\n reset_day_at: string;\n reset_month_at: string;\n updated_at: string;\n /** M3 Stage 3: see OrgBudget.granted_categories. Subset of parent. */\n granted_categories: string[];\n /** M3 Stage 4: see OrgBudget.max_consecutive_failures. */\n max_consecutive_failures?: number;\n}\n\nexport interface ChatBudget {\n id: string;\n org_id: string;\n workspace_id: string;\n repo_id: string;\n chat_session_id: string;\n cost_limit_usd_micros: number;\n cost_total_usd_micros: number;\n created_by_user_id: string;\n updated_at: string;\n}\n\nexport interface EffectiveChatBudget {\n limit_usd_micros: number;\n source: BudgetScope;\n spent_usd_micros: number;\n}\n\nexport interface UpdateOrgBudgetRequest {\n daily_cost_limit_usd_micros?: number;\n monthly_cost_limit_usd_micros?: number;\n chat_session_cost_limit_usd_micros?: number;\n /** M3 Stage 3: replace the action-category grant set. Omit to leave\n * unchanged; empty array relaxes to read-only. */\n granted_categories?: string[];\n /** M3 Stage 4: per-scope schedule auto-disable cap. Omit to leave\n * unchanged. */\n max_consecutive_failures?: number;\n}\n\nexport interface UpdateScopedBudgetRequest {\n daily_cost_limit_usd_micros?: number;\n monthly_cost_limit_usd_micros?: number;\n chat_session_cost_limit_usd_micros?: number;\n /** M3 Stage 3: replace the action-category grant set. Server rejects\n * (422 grants_outside_parent) when the requested set isn't a subset\n * of the parent scope's effective grant. */\n granted_categories?: string[];\n /** M3 Stage 4: per-scope schedule auto-disable cap. */\n max_consecutive_failures?: number;\n}\n\nexport interface UpdateChatBudgetRequest {\n cost_limit_usd_micros: number;\n}\n\nexport interface UpdateCostLimitRequest {\n cost_limit_usd_micros: number;\n}\n\nexport const usdMicros = {\n toDollars: (micros: number): number => micros / 1_000_000,\n fromDollars: (dollars: number): number => Math.round(dollars * 1_000_000),\n};\n"]}