@rehpic/vcli 0.1.0-beta.9.1 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/cli/index.ts","../../../convex/_generated/api.js","../../../src/cli/auth.ts","../../../src/cli/convex.ts","../../../src/cli/output.ts","../../../src/cli/session.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport { readFile } from 'node:fs/promises';\nimport { extname } from 'node:path';\nimport { config as loadEnv } from 'dotenv';\nimport { Command } from 'commander';\nimport { makeFunctionReference } from 'convex/server';\nimport { api } from '../../convex/_generated/api';\nimport type { Id } from '../../convex/_generated/dataModel';\nimport type { Permission } from '../../convex/_shared/permissions';\nimport {\n fetchAuthSession,\n loginWithPassword,\n logout,\n prompt,\n promptSecret,\n signUpWithEmail,\n} from './auth';\nimport { createConvexClient, runAction, runMutation, runQuery } from './convex';\nimport { printOutput } from './output';\nimport {\n clearSession,\n createEmptySession,\n readSession,\n writeSession,\n type CliSession,\n} from './session';\n\nloadEnv({ path: '.env.local', override: false });\nloadEnv({ path: '.env', override: false });\n\nconst cliApi = {\n listWorkspaceReferenceData: makeFunctionReference<'action'>(\n 'cli:listWorkspaceReferenceData',\n ),\n searchIcons: makeFunctionReference<'action'>('cli:searchIcons'),\n listDocuments: makeFunctionReference<'action'>('cli:listDocuments'),\n getDocument: makeFunctionReference<'action'>('cli:getDocument'),\n createDocument: makeFunctionReference<'action'>('cli:createDocument'),\n updateDocument: makeFunctionReference<'action'>('cli:updateDocument'),\n deleteDocument: makeFunctionReference<'action'>('cli:deleteDocument'),\n moveDocumentToFolder: makeFunctionReference<'action'>(\n 'cli:moveDocumentToFolder',\n ),\n listIssues: makeFunctionReference<'action'>('cli:listIssues'),\n getIssue: makeFunctionReference<'action'>('cli:getIssue'),\n createIssue: makeFunctionReference<'action'>('cli:createIssue'),\n updateIssue: makeFunctionReference<'action'>('cli:updateIssue'),\n deleteIssue: makeFunctionReference<'action'>('cli:deleteIssue'),\n assignIssue: makeFunctionReference<'action'>('cli:assignIssue'),\n unassignIssue: makeFunctionReference<'action'>('cli:unassignIssue'),\n listProjects: makeFunctionReference<'action'>('cli:listProjects'),\n getProject: makeFunctionReference<'action'>('cli:getProject'),\n createProject: makeFunctionReference<'action'>('cli:createProject'),\n updateProject: makeFunctionReference<'action'>('cli:updateProject'),\n deleteProject: makeFunctionReference<'action'>('cli:deleteProject'),\n addProjectMember: makeFunctionReference<'action'>('cli:addProjectMember'),\n removeProjectMember: makeFunctionReference<'action'>(\n 'cli:removeProjectMember',\n ),\n changeProjectLead: makeFunctionReference<'action'>('cli:changeProjectLead'),\n listTeams: makeFunctionReference<'action'>('cli:listTeams'),\n getTeam: makeFunctionReference<'action'>('cli:getTeam'),\n createTeam: makeFunctionReference<'action'>('cli:createTeam'),\n updateTeam: makeFunctionReference<'action'>('cli:updateTeam'),\n deleteTeam: makeFunctionReference<'action'>('cli:deleteTeam'),\n addTeamMember: makeFunctionReference<'action'>('cli:addTeamMember'),\n removeTeamMember: makeFunctionReference<'action'>('cli:removeTeamMember'),\n changeTeamLead: makeFunctionReference<'action'>('cli:changeTeamLead'),\n listFolders: makeFunctionReference<'action'>('cli:listFolders'),\n createFolder: makeFunctionReference<'action'>('cli:createFolder'),\n updateFolder: makeFunctionReference<'action'>('cli:updateFolder'),\n deleteFolder: makeFunctionReference<'action'>('cli:deleteFolder'),\n};\n\nconst rolesApi = api.roles.index;\ntype OrganizationRoleId = Id<'roles'> | Id<'orgRoles'>;\n\ntype GlobalOptions = {\n appUrl?: string;\n convexUrl?: string;\n json?: boolean;\n org?: string;\n profile?: string;\n};\n\ntype Runtime = {\n appUrl: string;\n convexUrl: string;\n json: boolean;\n org?: string;\n profile: string;\n session: CliSession | null;\n};\n\nconst ISSUE_STATE_TYPES = [\n 'backlog',\n 'todo',\n 'in_progress',\n 'done',\n 'canceled',\n] as const;\n\nconst PROJECT_STATUS_TYPES = [\n 'backlog',\n 'planned',\n 'in_progress',\n 'completed',\n 'canceled',\n] as const;\n\nconst NOTIFICATION_CATEGORIES = [\n 'invites',\n 'assignments',\n 'mentions',\n 'comments',\n] as const;\n\nfunction requiredString(value: string | undefined, label: string) {\n if (!value?.trim()) {\n throw new Error(`${label} is required`);\n }\n return value.trim();\n}\n\nfunction optionalNumber(value: string | undefined, label: string) {\n if (value === undefined) {\n return undefined;\n }\n\n const parsed = Number(value);\n if (!Number.isFinite(parsed)) {\n throw new Error(`${label} must be a valid number`);\n }\n\n return parsed;\n}\n\nfunction requiredNumber(value: string | undefined, label: string) {\n const parsed = optionalNumber(value, label);\n if (parsed === undefined) {\n throw new Error(`${label} is required`);\n }\n return parsed;\n}\n\nfunction parseBoolean(value: string, label: string) {\n const normalized = value.trim().toLowerCase();\n if (normalized === 'true') return true;\n if (normalized === 'false') return false;\n throw new Error(`${label} must be \"true\" or \"false\"`);\n}\n\nfunction parseList(value: string | undefined) {\n if (!value) return [];\n return value\n .split(',')\n .map(item => item.trim())\n .filter(Boolean);\n}\n\nfunction buildPaginationOptions(limit?: string, cursor?: string) {\n return {\n cursor: cursor ?? null,\n numItems: optionalNumber(limit, 'limit') ?? 20,\n };\n}\n\nfunction normalizeMatch(value: string | undefined | null) {\n return value?.trim().toLowerCase();\n}\n\nasync function fetchConvexUrl(appUrl: string): Promise<string> {\n try {\n const url = new URL('/api/config', appUrl).toString();\n const response = await fetch(url);\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}`);\n }\n const data = (await response.json()) as { convexUrl?: string };\n if (data.convexUrl) {\n return data.convexUrl;\n }\n } catch {\n // Fall through to default\n }\n return 'http://127.0.0.1:3210';\n}\n\nasync function getRuntime(command: Command) {\n const options = command.optsWithGlobals<GlobalOptions>();\n const profile = options.profile ?? 'default';\n const session = await readSession(profile);\n const appUrlSource =\n options.appUrl ?? session?.appUrl ?? process.env.NEXT_PUBLIC_APP_URL;\n const appUrl = requiredString(appUrlSource, 'app URL');\n let convexUrl =\n options.convexUrl ??\n session?.convexUrl ??\n process.env.NEXT_PUBLIC_CONVEX_URL ??\n process.env.CONVEX_URL;\n\n if (!convexUrl) {\n convexUrl = await fetchConvexUrl(appUrl);\n }\n\n return {\n appUrl,\n convexUrl,\n json: Boolean(options.json),\n org: options.org ?? session?.activeOrgSlug,\n profile,\n session,\n } satisfies Runtime;\n}\n\nfunction requireSession(runtime: Runtime) {\n if (!runtime.session || Object.keys(runtime.session.cookies).length === 0) {\n throw new Error('Not logged in. Run `vcli auth login` first.');\n }\n return runtime.session;\n}\n\nfunction requireOrg(runtime: Runtime, explicit?: string) {\n const orgSlug = explicit ?? runtime.org;\n if (!orgSlug) {\n throw new Error(\n 'Organization slug is required. Pass `--org <slug>` or run `vcli org use <slug>`.',\n );\n }\n return orgSlug;\n}\n\nasync function getClient(command: Command) {\n const runtime = await getRuntime(command);\n const session = requireSession(runtime);\n const client = await createConvexClient(\n session,\n runtime.appUrl,\n runtime.convexUrl,\n );\n return { client, runtime, session };\n}\n\nasync function resolveMemberId(\n client: Awaited<ReturnType<typeof createConvexClient>>,\n orgSlug: string,\n ref: string,\n): Promise<Id<'users'>> {\n const members = await runQuery(\n client,\n api.organizations.queries.listMembers,\n {\n orgSlug,\n },\n );\n const needle = normalizeMatch(ref);\n const matches = members.filter(member => {\n const user = member.user;\n if (!user) return false;\n return (\n normalizeMatch(String(user._id)) === needle ||\n normalizeMatch(user.email) === needle ||\n normalizeMatch(user.name) === needle ||\n normalizeMatch(user.username) === needle\n );\n });\n\n if (matches.length === 0) {\n throw new Error(`No member matched \"${ref}\"`);\n }\n if (matches.length > 1) {\n throw new Error(`Multiple members matched \"${ref}\"`);\n }\n return matches[0]!.user!._id;\n}\n\nasync function resolveRoleId(\n client: Awaited<ReturnType<typeof createConvexClient>>,\n orgSlug: string,\n ref: string,\n): Promise<OrganizationRoleId> {\n const roles = await runQuery(client, rolesApi.list, { orgSlug });\n const needle = normalizeMatch(ref);\n const matches = roles.filter(role => {\n const candidate = role as { _id: string; name?: string; key?: string };\n return (\n normalizeMatch(String(candidate._id)) === needle ||\n normalizeMatch(candidate.name) === needle ||\n normalizeMatch(candidate.key) === needle\n );\n });\n\n if (matches.length === 0) {\n throw new Error(`No role matched \"${ref}\"`);\n }\n if (matches.length > 1) {\n throw new Error(`Multiple roles matched \"${ref}\"`);\n }\n return matches[0]!._id;\n}\n\nfunction parsePermissions(value: string): Permission[] {\n return value\n .split(',')\n .map(permission => permission.trim())\n .filter(Boolean) as Permission[];\n}\n\nfunction nullableOption(value: string | undefined, clear = false) {\n if (clear) return null;\n return value;\n}\n\nfunction mimeTypeForFile(filePath: string) {\n switch (extname(filePath).toLowerCase()) {\n case '.png':\n return 'image/png';\n case '.jpg':\n case '.jpeg':\n return 'image/jpeg';\n case '.webp':\n return 'image/webp';\n case '.gif':\n return 'image/gif';\n case '.svg':\n return 'image/svg+xml';\n default:\n return 'application/octet-stream';\n }\n}\n\nasync function uploadFile(uploadUrl: string, filePath: string) {\n const body = await readFile(filePath);\n const response = await fetch(uploadUrl, {\n method: 'POST',\n headers: {\n 'Content-Type': mimeTypeForFile(filePath),\n },\n body,\n });\n\n if (!response.ok) {\n throw new Error(`Upload failed with HTTP ${response.status}`);\n }\n\n const data = (await response.json()) as { storageId?: Id<'_storage'> };\n if (!data.storageId) {\n throw new Error('Upload response did not include a storageId');\n }\n\n return data.storageId;\n}\n\nasync function resolveTeamId(\n client: Awaited<ReturnType<typeof createConvexClient>>,\n orgSlug: string,\n teamKey?: string,\n) {\n if (!teamKey) {\n return undefined;\n }\n const team = await runAction(client, cliApi.getTeam, { orgSlug, teamKey });\n return team.id as Id<'teams'>;\n}\n\nasync function resolveProjectId(\n client: Awaited<ReturnType<typeof createConvexClient>>,\n orgSlug: string,\n projectKey?: string,\n) {\n if (!projectKey) {\n return undefined;\n }\n const project = await runAction(client, cliApi.getProject, {\n orgSlug,\n projectKey,\n });\n return project.id as Id<'projects'>;\n}\n\nasync function resolveIssueId(\n client: Awaited<ReturnType<typeof createConvexClient>>,\n orgSlug: string,\n issueKey: string,\n) {\n const issue = await runAction(client, cliApi.getIssue, { orgSlug, issueKey });\n return issue.id as Id<'issues'>;\n}\n\nasync function resolveDocumentId(\n client: Awaited<ReturnType<typeof createConvexClient>>,\n orgSlug: string,\n documentId: string,\n) {\n const document = await runAction(client, cliApi.getDocument, {\n orgSlug,\n documentId,\n });\n return document.id as Id<'documents'>;\n}\n\nasync function resolveIssueStateId(\n client: Awaited<ReturnType<typeof createConvexClient>>,\n orgSlug: string,\n ref: string,\n) {\n const states = await runQuery(\n client,\n api.organizations.queries.listIssueStates,\n {\n orgSlug,\n },\n );\n const needle = normalizeMatch(ref);\n const match = states.find(state => {\n return (\n normalizeMatch(String(state._id)) === needle ||\n normalizeMatch(state.name) === needle ||\n normalizeMatch(state.type) === needle\n );\n });\n\n if (!match) {\n throw new Error(`No issue state matched \"${ref}\"`);\n }\n\n return match._id;\n}\n\nasync function resolveIssuePriorityId(\n client: Awaited<ReturnType<typeof createConvexClient>>,\n orgSlug: string,\n ref: string,\n) {\n const priorities = await runQuery(\n client,\n api.organizations.queries.listIssuePriorities,\n { orgSlug },\n );\n const needle = normalizeMatch(ref);\n const match = priorities.find(priority => {\n return (\n normalizeMatch(String(priority._id)) === needle ||\n normalizeMatch(priority.name) === needle\n );\n });\n\n if (!match) {\n throw new Error(`No issue priority matched \"${ref}\"`);\n }\n\n return match._id;\n}\n\nasync function resolveProjectStatusId(\n client: Awaited<ReturnType<typeof createConvexClient>>,\n orgSlug: string,\n ref: string,\n) {\n const statuses = await runQuery(\n client,\n api.organizations.queries.listProjectStatuses,\n { orgSlug },\n );\n const needle = normalizeMatch(ref);\n const match = statuses.find(status => {\n return (\n normalizeMatch(String(status._id)) === needle ||\n normalizeMatch(status.name) === needle ||\n normalizeMatch(status.type) === needle\n );\n });\n\n if (!match) {\n throw new Error(`No project status matched \"${ref}\"`);\n }\n\n return match._id;\n}\n\nasync function parseEstimatedTimes(\n client: Awaited<ReturnType<typeof createConvexClient>>,\n orgSlug: string,\n value: string,\n) {\n const entries = parseList(value);\n const estimatedTimes: Record<string, number> = {};\n\n for (const entry of entries) {\n const separatorIndex = entry.indexOf('=');\n if (separatorIndex <= 0) {\n throw new Error(\n 'estimated times must use the format \"state=hours,state=hours\"',\n );\n }\n\n const stateRef = entry.slice(0, separatorIndex).trim();\n const hours = Number(entry.slice(separatorIndex + 1).trim());\n if (!Number.isFinite(hours)) {\n throw new Error(`Invalid estimate for \"${stateRef}\"`);\n }\n\n const stateId = await resolveIssueStateId(client, orgSlug, stateRef);\n estimatedTimes[String(stateId)] = hours;\n }\n\n return estimatedTimes;\n}\n\nconst program = new Command();\n\nprogram\n .name('vcli')\n .description('Vector CLI')\n .showHelpAfterError()\n .option(\n '--app-url <url>',\n 'Vector app URL. Required unless saved in the profile or NEXT_PUBLIC_APP_URL is set.',\n )\n .option('--convex-url <url>', 'Convex deployment URL')\n .option('--org <slug>', 'Organization slug override')\n .option('--profile <name>', 'CLI profile name', 'default')\n .option('--json', 'Output JSON');\n\nconst authCommand = program.command('auth').description('Authentication');\n\nauthCommand\n .command('signup')\n .option('--email <email>', 'Email address')\n .option('--username <username>', 'Username')\n .option('--password <password>', 'Password')\n .action(async (options, command) => {\n const runtime = await getRuntime(command);\n const email = requiredString(\n options.email?.trim() || (await prompt('Email: ')),\n 'email',\n ).toLowerCase();\n const username = requiredString(\n options.username?.trim() || (await prompt('Username: ')),\n 'username',\n );\n const password =\n options.password?.trim() || (await promptSecret('Password: '));\n\n let session = createEmptySession();\n session.appUrl = runtime.appUrl;\n session.convexUrl = runtime.convexUrl;\n\n session = await signUpWithEmail(\n session,\n runtime.appUrl,\n email,\n username,\n password,\n );\n const authState = await fetchAuthSession(session, runtime.appUrl);\n session = authState.session;\n\n const client = await createConvexClient(\n session,\n runtime.appUrl,\n runtime.convexUrl,\n );\n const orgs = await runQuery(client, api.users.getOrganizations, {});\n session.activeOrgSlug = orgs[0]?.slug ?? session.activeOrgSlug;\n\n await writeSession(session, runtime.profile);\n printOutput(\n {\n signedUpAs:\n authState.user?.email ??\n authState.user?.username ??\n authState.user?.name,\n activeOrgSlug: session.activeOrgSlug ?? null,\n },\n runtime.json,\n );\n });\n\nauthCommand\n .command('login [identifier]')\n .option('--password <password>', 'Password')\n .action(async (identifier, options, command) => {\n const runtime = await getRuntime(command);\n const loginId = identifier?.trim() || (await prompt('Email or username: '));\n const password =\n options.password?.trim() || (await promptSecret('Password: '));\n let session = createEmptySession();\n session.appUrl = runtime.appUrl;\n session.convexUrl = runtime.convexUrl;\n\n session = await loginWithPassword(\n session,\n runtime.appUrl,\n loginId,\n password,\n );\n const authState = await fetchAuthSession(session, runtime.appUrl);\n session = authState.session;\n\n const client = await createConvexClient(\n session,\n runtime.appUrl,\n runtime.convexUrl,\n );\n const orgs = await runQuery(client, api.users.getOrganizations, {});\n session.activeOrgSlug = orgs[0]?.slug ?? session.activeOrgSlug;\n\n await writeSession(session, runtime.profile);\n printOutput(\n {\n loggedInAs:\n authState.user?.email ??\n authState.user?.username ??\n authState.user?.name,\n activeOrgSlug: session.activeOrgSlug ?? null,\n },\n runtime.json,\n );\n });\n\nauthCommand.command('logout').action(async (_options, command) => {\n const runtime = await getRuntime(command);\n const session = requireSession(runtime);\n await logout(session, runtime.appUrl);\n await clearSession(runtime.profile);\n printOutput({ success: true }, runtime.json);\n});\n\nauthCommand.command('whoami').action(async (_options, command) => {\n const { client, runtime } = await getClient(command);\n const [user, orgs] = await Promise.all([\n runQuery(client, api.users.getCurrentUser, {}),\n runQuery(client, api.users.getOrganizations, {}),\n ]);\n printOutput(\n {\n user,\n organizations: orgs,\n activeOrgSlug: runtime.org ?? null,\n },\n runtime.json,\n );\n});\n\nconst orgCommand = program.command('org').description('Organizations');\n\norgCommand.command('list').action(async (_options, command) => {\n const { client, runtime } = await getClient(command);\n const orgs = await runQuery(client, api.users.getOrganizations, {});\n printOutput(orgs, runtime.json);\n});\n\norgCommand.command('current').action(async (_options, command) => {\n const runtime = await getRuntime(command);\n printOutput({ activeOrgSlug: runtime.org ?? null }, runtime.json);\n});\n\norgCommand.command('use <slug>').action(async (slug, _options, command) => {\n const runtime = await getRuntime(command);\n const session = requireSession(runtime);\n session.activeOrgSlug = slug;\n session.appUrl = runtime.appUrl;\n session.convexUrl = runtime.convexUrl;\n await writeSession(session, runtime.profile);\n printOutput({ activeOrgSlug: slug }, runtime.json);\n});\n\norgCommand\n .command('create')\n .requiredOption('--name <name>')\n .requiredOption('--slug <slug>')\n .action(async (options, command) => {\n const { client, runtime, session } = await getClient(command);\n const result = await runMutation(\n client,\n api.organizations.mutations.create,\n {\n data: {\n name: options.name,\n slug: options.slug,\n },\n },\n );\n if (session) {\n session.activeOrgSlug = options.slug;\n session.appUrl = runtime.appUrl;\n session.convexUrl = runtime.convexUrl;\n await writeSession(session, runtime.profile);\n }\n printOutput(result, runtime.json);\n });\n\norgCommand\n .command('update [slug]')\n .option('--name <name>')\n .option('--new-slug <slug>')\n .action(async (slug, options, command) => {\n const { client, runtime, session } = await getClient(command);\n const orgSlug = requireOrg(runtime, slug);\n const result = await runMutation(\n client,\n api.organizations.mutations.update,\n {\n orgSlug,\n data: {\n ...(options.name ? { name: options.name } : {}),\n ...(options.newSlug ? { slug: options.newSlug } : {}),\n },\n },\n );\n if (session && options.newSlug && session.activeOrgSlug === orgSlug) {\n session.activeOrgSlug = options.newSlug;\n await writeSession(session, runtime.profile);\n }\n printOutput(result, runtime.json);\n });\n\norgCommand.command('stats [slug]').action(async (slug, _options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime, slug);\n const result = await runQuery(\n client,\n api.organizations.queries.getOrganizationStats,\n { orgSlug },\n );\n printOutput(result, runtime.json);\n});\n\norgCommand\n .command('logo [slug]')\n .option('--file <path>')\n .option('--remove')\n .action(async (slug, options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime, slug);\n\n if (options.remove) {\n throw new Error(\n 'Organization logo removal is not exposed by the current backend API.',\n );\n }\n\n const filePath = requiredString(options.file, 'file');\n const uploadUrl = await runMutation(\n client,\n api.organizations.mutations.generateLogoUploadUrl,\n { orgSlug },\n );\n const storageId = await uploadFile(uploadUrl, filePath);\n const result = await runMutation(\n client,\n api.organizations.mutations.updateLogoWithStorageId,\n {\n orgSlug,\n storageId,\n },\n );\n printOutput(\n { ...(result ?? { success: true }), storageId, orgSlug },\n runtime.json,\n );\n });\n\norgCommand.command('members [slug]').action(async (slug, _options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime, slug);\n const members = await runQuery(\n client,\n api.organizations.queries.listMembersWithRoles,\n {\n orgSlug,\n },\n );\n printOutput(members, runtime.json);\n});\n\norgCommand.command('invites [slug]').action(async (slug, _options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime, slug);\n const invites = await runQuery(\n client,\n api.organizations.queries.listInvites,\n {\n orgSlug,\n },\n );\n printOutput(invites, runtime.json);\n});\n\norgCommand\n .command('invite [slug]')\n .requiredOption('--email <email>')\n .option('--role <role>', 'member or admin', 'member')\n .action(async (slug, options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime, slug);\n const result = await runMutation(\n client,\n api.organizations.mutations.invite,\n {\n orgSlug,\n email: options.email,\n role: options.role,\n },\n );\n printOutput(result, runtime.json);\n });\n\norgCommand\n .command('member-role <member>')\n .requiredOption('--role <role>', 'member or admin')\n .action(async (member, options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const userId = await resolveMemberId(client, orgSlug, member);\n const result = await runMutation(\n client,\n api.organizations.mutations.updateMemberRole,\n {\n orgSlug,\n userId,\n role: options.role,\n },\n );\n printOutput(result, runtime.json);\n });\n\norgCommand\n .command('remove-member <member>')\n .action(async (member, _options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const userId = await resolveMemberId(client, orgSlug, member);\n const result = await runMutation(\n client,\n api.organizations.mutations.removeMember,\n {\n orgSlug,\n userId,\n },\n );\n printOutput(result ?? { success: true }, runtime.json);\n });\n\norgCommand\n .command('revoke-invite <inviteId>')\n .action(async (inviteId, _options, command) => {\n const { client, runtime } = await getClient(command);\n const result = await runMutation(\n client,\n api.organizations.mutations.revokeInvite,\n {\n inviteId,\n },\n );\n printOutput(result ?? { success: true }, runtime.json);\n });\n\nconst roleCommand = program.command('role').description('Organization roles');\n\nroleCommand.command('list [slug]').action(async (slug, _options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime, slug);\n const roles = await runQuery(client, rolesApi.list, { orgSlug });\n printOutput(roles, runtime.json);\n});\n\nroleCommand.command('get <role>').action(async (role, _options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const roleId = await resolveRoleId(client, orgSlug, role);\n const [summary, permissions] = await Promise.all([\n runQuery(client, rolesApi.get, { orgSlug, roleId }),\n runQuery(client, rolesApi.getPermissions, { roleId }),\n ]);\n printOutput({ summary, permissions }, runtime.json);\n});\n\nroleCommand\n .command('create')\n .requiredOption('--name <name>')\n .requiredOption('--permissions <permissions>', 'Comma-separated permissions')\n .option('--description <description>')\n .action(async (options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const result = await runMutation(client, rolesApi.create, {\n orgSlug,\n name: options.name,\n description: options.description,\n permissions: parsePermissions(options.permissions),\n });\n printOutput({ roleId: result }, runtime.json);\n });\n\nroleCommand\n .command('update <role>')\n .requiredOption('--name <name>')\n .requiredOption('--permissions <permissions>', 'Comma-separated permissions')\n .option('--description <description>')\n .action(async (role, options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const roleId = await resolveRoleId(client, orgSlug, role);\n const result = await runMutation(client, rolesApi.update, {\n orgSlug,\n roleId,\n name: options.name,\n description: options.description,\n permissions: parsePermissions(options.permissions),\n });\n printOutput(result ?? { success: true }, runtime.json);\n });\n\nroleCommand\n .command('assign <role> <member>')\n .action(async (role, member, _options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const [roleId, userId] = await Promise.all([\n resolveRoleId(client, orgSlug, role),\n resolveMemberId(client, orgSlug, member),\n ]);\n const result = await runMutation(client, rolesApi.assign, {\n orgSlug,\n roleId,\n userId,\n });\n printOutput({ assignmentId: result }, runtime.json);\n });\n\nroleCommand\n .command('unassign <role> <member>')\n .action(async (role, member, _options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const [roleId, userId] = await Promise.all([\n resolveRoleId(client, orgSlug, role),\n resolveMemberId(client, orgSlug, member),\n ]);\n const result = await runMutation(client, rolesApi.removeAssignment, {\n orgSlug,\n roleId,\n userId,\n });\n printOutput(result ?? { success: true }, runtime.json);\n });\n\nconst inviteCommand = program.command('invite').description('Invitations');\n\ninviteCommand.command('list').action(async (_options, command) => {\n const { client, runtime } = await getClient(command);\n const invites = await runQuery(client, api.users.getPendingInvitations, {});\n printOutput(invites, runtime.json);\n});\n\ninviteCommand\n .command('accept <inviteId>')\n .action(async (inviteId, _options, command) => {\n const { client, runtime } = await getClient(command);\n const result = await runMutation(\n client,\n api.organizations.mutations.acceptInvitation,\n { inviteId },\n );\n printOutput(result ?? { success: true }, runtime.json);\n });\n\ninviteCommand\n .command('decline <inviteId>')\n .action(async (inviteId, _options, command) => {\n const { client, runtime } = await getClient(command);\n const result = await runMutation(\n client,\n api.organizations.mutations.declineInvitation,\n { inviteId },\n );\n printOutput(result ?? { success: true }, runtime.json);\n });\n\nprogram.command('refdata [slug]').action(async (slug, _options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime, slug);\n const result = await runAction(client, cliApi.listWorkspaceReferenceData, {\n orgSlug,\n });\n printOutput(result, runtime.json);\n});\n\nprogram\n .command('icons <query>')\n .option('--limit <n>')\n .action(async (query, options, command) => {\n const { client, runtime } = await getClient(command);\n const result = await runAction(client, cliApi.searchIcons, {\n query,\n limit: options.limit ? Number(options.limit) : undefined,\n });\n printOutput(result, runtime.json);\n });\n\nprogram\n .command('search <query>')\n .option('--limit <n>')\n .action(async (query, options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const result = await runQuery(client, api.search.queries.searchEntities, {\n orgSlug,\n query,\n limit: optionalNumber(options.limit, 'limit'),\n });\n printOutput(result, runtime.json);\n });\n\nconst permissionCommand = program\n .command('permission')\n .description('Permission checks');\n\npermissionCommand\n .command('check <permission>')\n .option('--team <teamKey>')\n .option('--project <projectKey>')\n .action(async (permission, options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const [teamId, projectId] = await Promise.all([\n resolveTeamId(client, orgSlug, options.team),\n resolveProjectId(client, orgSlug, options.project),\n ]);\n const result = await runQuery(client, api.permissions.utils.has, {\n orgSlug,\n permission,\n teamId,\n projectId,\n });\n printOutput(\n { permission, allowed: result, teamId, projectId },\n runtime.json,\n );\n });\n\npermissionCommand\n .command('check-many <permissions>')\n .option('--team <teamKey>')\n .option('--project <projectKey>')\n .action(async (permissions, options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const [teamId, projectId] = await Promise.all([\n resolveTeamId(client, orgSlug, options.team),\n resolveProjectId(client, orgSlug, options.project),\n ]);\n const permissionList = parsePermissions(permissions);\n const result = await runQuery(client, api.permissions.utils.hasMultiple, {\n orgSlug,\n permissions: permissionList,\n teamId,\n projectId,\n });\n printOutput(result, runtime.json);\n });\n\nconst activityCommand = program\n .command('activity')\n .description('Activity feed');\n\nactivityCommand\n .command('project <projectKey>')\n .option('--limit <n>')\n .option('--cursor <cursor>')\n .action(async (projectKey, options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const projectId = await resolveProjectId(client, orgSlug, projectKey);\n const result = await runQuery(\n client,\n api.activities.queries.listProjectActivity,\n {\n projectId: projectId!,\n paginationOpts: buildPaginationOptions(options.limit, options.cursor),\n },\n );\n printOutput(result, runtime.json);\n });\n\nactivityCommand\n .command('team <teamKey>')\n .option('--limit <n>')\n .option('--cursor <cursor>')\n .action(async (teamKey, options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const teamId = await resolveTeamId(client, orgSlug, teamKey);\n const result = await runQuery(\n client,\n api.activities.queries.listTeamActivity,\n {\n teamId: teamId!,\n paginationOpts: buildPaginationOptions(options.limit, options.cursor),\n },\n );\n printOutput(result, runtime.json);\n });\n\nactivityCommand\n .command('issue <issueKey>')\n .option('--limit <n>')\n .option('--cursor <cursor>')\n .action(async (issueKey, options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const issueId = await resolveIssueId(client, orgSlug, issueKey);\n const result = await runQuery(\n client,\n api.activities.queries.listIssueActivity,\n {\n issueId,\n paginationOpts: buildPaginationOptions(options.limit, options.cursor),\n },\n );\n printOutput(result, runtime.json);\n });\n\nactivityCommand\n .command('document <documentId>')\n .option('--limit <n>')\n .option('--cursor <cursor>')\n .action(async (documentId, options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const resolvedDocumentId = await resolveDocumentId(\n client,\n orgSlug,\n documentId,\n );\n const result = await runQuery(\n client,\n api.activities.queries.listDocumentActivity,\n {\n documentId: resolvedDocumentId,\n paginationOpts: buildPaginationOptions(options.limit, options.cursor),\n },\n );\n printOutput(result, runtime.json);\n });\n\nconst notificationCommand = program\n .command('notification')\n .description('Notifications');\n\nnotificationCommand\n .command('inbox')\n .option('--filter <filter>', 'all or unread')\n .option('--limit <n>')\n .option('--cursor <cursor>')\n .action(async (options, command) => {\n const { client, runtime } = await getClient(command);\n const result = await runQuery(client, api.notifications.queries.listInbox, {\n filter: options.filter,\n paginationOpts: buildPaginationOptions(options.limit, options.cursor),\n });\n printOutput(result, runtime.json);\n });\n\nnotificationCommand\n .command('unread-count')\n .action(async (_options, command) => {\n const { client, runtime } = await getClient(command);\n const result = await runQuery(\n client,\n api.notifications.queries.unreadCount,\n {},\n );\n printOutput({ unreadCount: result }, runtime.json);\n });\n\nnotificationCommand\n .command('mark-read <recipientId>')\n .action(async (recipientId, _options, command) => {\n const { client, runtime } = await getClient(command);\n const result = await runMutation(\n client,\n api.notifications.mutations.markRead,\n {\n recipientId,\n },\n );\n printOutput(result, runtime.json);\n });\n\nnotificationCommand\n .command('mark-all-read')\n .action(async (_options, command) => {\n const { client, runtime } = await getClient(command);\n const result = await runMutation(\n client,\n api.notifications.mutations.markAllRead,\n {},\n );\n printOutput(result, runtime.json);\n });\n\nnotificationCommand\n .command('archive <recipientId>')\n .action(async (recipientId, _options, command) => {\n const { client, runtime } = await getClient(command);\n const result = await runMutation(\n client,\n api.notifications.mutations.archive,\n {\n recipientId,\n },\n );\n printOutput(result, runtime.json);\n });\n\nnotificationCommand.command('preferences').action(async (_options, command) => {\n const { client, runtime } = await getClient(command);\n const result = await runQuery(\n client,\n api.notifications.queries.getPreferences,\n {},\n );\n printOutput(result, runtime.json);\n});\n\nnotificationCommand\n .command('set-preference <category>')\n .requiredOption('--in-app <true|false>')\n .requiredOption('--email <true|false>')\n .requiredOption('--push <true|false>')\n .action(async (category, options, command) => {\n const { client, runtime } = await getClient(command);\n if (!NOTIFICATION_CATEGORIES.includes(category)) {\n throw new Error(\n `category must be one of: ${NOTIFICATION_CATEGORIES.join(', ')}`,\n );\n }\n const result = await runMutation(\n client,\n api.notifications.mutations.updatePreferences,\n {\n category,\n inAppEnabled: parseBoolean(options.inApp, 'in-app'),\n emailEnabled: parseBoolean(options.email, 'email'),\n pushEnabled: parseBoolean(options.push, 'push'),\n },\n );\n printOutput(result, runtime.json);\n });\n\nnotificationCommand\n .command('subscriptions')\n .action(async (_options, command) => {\n const { client, runtime } = await getClient(command);\n const result = await runQuery(\n client,\n api.notifications.queries.listPushSubscriptions,\n {},\n );\n printOutput(result, runtime.json);\n });\n\nnotificationCommand\n .command('remove-subscription <subscriptionId>')\n .action(async (subscriptionId, _options, command) => {\n const { client, runtime } = await getClient(command);\n const result = await runMutation(\n client,\n api.notifications.mutations.removePushSubscription,\n { subscriptionId },\n );\n printOutput(result, runtime.json);\n });\n\nconst priorityCommand = program\n .command('priority')\n .description('Issue priorities');\n\npriorityCommand\n .command('list [slug]')\n .action(async (slug, _options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime, slug);\n const result = await runQuery(\n client,\n api.organizations.queries.listIssuePriorities,\n { orgSlug },\n );\n printOutput(result, runtime.json);\n });\n\npriorityCommand\n .command('create')\n .requiredOption('--name <name>')\n .requiredOption('--weight <n>')\n .requiredOption('--color <hex>')\n .option('--icon <icon>')\n .action(async (options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const result = await runMutation(\n client,\n api.organizations.mutations.createIssuePriority,\n {\n orgSlug,\n name: options.name,\n weight: requiredNumber(options.weight, 'weight'),\n color: options.color,\n icon: options.icon,\n },\n );\n printOutput(result, runtime.json);\n });\n\npriorityCommand\n .command('update <priority>')\n .requiredOption('--name <name>')\n .requiredOption('--color <hex>')\n .option('--weight <n>')\n .option('--icon <icon>')\n .action(async (priority, options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const priorityId = await resolveIssuePriorityId(client, orgSlug, priority);\n const result = await runMutation(\n client,\n api.organizations.mutations.updateIssuePriority,\n {\n orgSlug,\n priorityId,\n name: options.name,\n weight: optionalNumber(options.weight, 'weight'),\n color: options.color,\n icon: options.icon,\n },\n );\n printOutput(result ?? { success: true }, runtime.json);\n });\n\npriorityCommand\n .command('delete <priority>')\n .action(async (priority, _options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const priorityId = await resolveIssuePriorityId(client, orgSlug, priority);\n const result = await runMutation(\n client,\n api.organizations.mutations.deleteIssuePriority,\n {\n orgSlug,\n priorityId,\n },\n );\n printOutput(result ?? { success: true }, runtime.json);\n });\n\npriorityCommand\n .command('reset [slug]')\n .action(async (slug, _options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime, slug);\n const result = await runMutation(\n client,\n api.organizations.mutations.resetIssuePriorities,\n { orgSlug },\n );\n printOutput(result ?? { success: true }, runtime.json);\n });\n\nconst stateCommand = program.command('state').description('Issue states');\n\nstateCommand.command('list [slug]').action(async (slug, _options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime, slug);\n const result = await runQuery(\n client,\n api.organizations.queries.listIssueStates,\n {\n orgSlug,\n },\n );\n printOutput(result, runtime.json);\n});\n\nstateCommand\n .command('create')\n .requiredOption('--name <name>')\n .requiredOption('--position <n>')\n .requiredOption('--type <type>')\n .requiredOption('--color <hex>')\n .option('--icon <icon>')\n .action(async (options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n if (!ISSUE_STATE_TYPES.includes(options.type)) {\n throw new Error(`type must be one of: ${ISSUE_STATE_TYPES.join(', ')}`);\n }\n const result = await runMutation(\n client,\n api.organizations.mutations.createIssueState,\n {\n orgSlug,\n name: options.name,\n position: requiredNumber(options.position, 'position'),\n type: options.type,\n color: options.color,\n icon: options.icon,\n },\n );\n printOutput(result, runtime.json);\n });\n\nstateCommand\n .command('update <state>')\n .requiredOption('--name <name>')\n .requiredOption('--position <n>')\n .requiredOption('--type <type>')\n .requiredOption('--color <hex>')\n .option('--icon <icon>')\n .action(async (state, options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n if (!ISSUE_STATE_TYPES.includes(options.type)) {\n throw new Error(`type must be one of: ${ISSUE_STATE_TYPES.join(', ')}`);\n }\n const stateId = await resolveIssueStateId(client, orgSlug, state);\n const result = await runMutation(\n client,\n api.organizations.mutations.updateIssueState,\n {\n orgSlug,\n stateId,\n name: options.name,\n position: requiredNumber(options.position, 'position'),\n type: options.type,\n color: options.color,\n icon: options.icon,\n },\n );\n printOutput(result ?? { success: true }, runtime.json);\n });\n\nstateCommand\n .command('delete <state>')\n .action(async (state, _options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const stateId = await resolveIssueStateId(client, orgSlug, state);\n const result = await runMutation(\n client,\n api.organizations.mutations.deleteIssueState,\n {\n orgSlug,\n stateId,\n },\n );\n printOutput(result ?? { success: true }, runtime.json);\n });\n\nstateCommand.command('reset [slug]').action(async (slug, _options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime, slug);\n const result = await runMutation(\n client,\n api.organizations.mutations.resetIssueStates,\n { orgSlug },\n );\n printOutput(result ?? { success: true }, runtime.json);\n});\n\nconst statusCommand = program.command('status').description('Project statuses');\n\nstatusCommand.command('list [slug]').action(async (slug, _options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime, slug);\n const result = await runQuery(\n client,\n api.organizations.queries.listProjectStatuses,\n { orgSlug },\n );\n printOutput(result, runtime.json);\n});\n\nstatusCommand\n .command('create')\n .requiredOption('--name <name>')\n .requiredOption('--position <n>')\n .requiredOption('--type <type>')\n .requiredOption('--color <hex>')\n .option('--icon <icon>')\n .action(async (options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n if (!PROJECT_STATUS_TYPES.includes(options.type)) {\n throw new Error(\n `type must be one of: ${PROJECT_STATUS_TYPES.join(', ')}`,\n );\n }\n const result = await runMutation(\n client,\n api.organizations.mutations.createProjectStatus,\n {\n orgSlug,\n name: options.name,\n position: requiredNumber(options.position, 'position'),\n type: options.type,\n color: options.color,\n icon: options.icon,\n },\n );\n printOutput(result, runtime.json);\n });\n\nstatusCommand\n .command('update <status>')\n .requiredOption('--name <name>')\n .requiredOption('--position <n>')\n .requiredOption('--type <type>')\n .requiredOption('--color <hex>')\n .option('--icon <icon>')\n .action(async (status, options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n if (!PROJECT_STATUS_TYPES.includes(options.type)) {\n throw new Error(\n `type must be one of: ${PROJECT_STATUS_TYPES.join(', ')}`,\n );\n }\n const statusId = await resolveProjectStatusId(client, orgSlug, status);\n const result = await runMutation(\n client,\n api.organizations.mutations.updateProjectStatus,\n {\n orgSlug,\n statusId,\n name: options.name,\n position: requiredNumber(options.position, 'position'),\n type: options.type,\n color: options.color,\n icon: options.icon,\n },\n );\n printOutput(result ?? { success: true }, runtime.json);\n });\n\nstatusCommand\n .command('delete <status>')\n .action(async (status, _options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const statusId = await resolveProjectStatusId(client, orgSlug, status);\n const result = await runMutation(\n client,\n api.organizations.mutations.deleteProjectStatus,\n {\n orgSlug,\n statusId,\n },\n );\n printOutput(result ?? { success: true }, runtime.json);\n });\n\nstatusCommand\n .command('reset [slug]')\n .action(async (slug, _options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime, slug);\n const result = await runMutation(\n client,\n api.organizations.mutations.resetProjectStatuses,\n { orgSlug },\n );\n printOutput(result ?? { success: true }, runtime.json);\n });\n\nconst adminCommand = program.command('admin').description('Platform admin');\n\nadminCommand.command('branding').action(async (_options, command) => {\n const { client, runtime } = await getClient(command);\n const result = await runQuery(\n client,\n api.platformAdmin.queries.getBranding,\n {},\n );\n printOutput(result, runtime.json);\n});\n\nadminCommand\n .command('set-branding')\n .option('--name <name>')\n .option('--description <description>')\n .option('--theme-color <hex>')\n .option('--accent-color <hex>')\n .option('--logo <path>')\n .option('--remove-logo')\n .action(async (options, command) => {\n const { client, runtime } = await getClient(command);\n let logoStorageId: Id<'_storage'> | undefined;\n if (options.logo) {\n const uploadUrl = await runMutation(\n client,\n api.platformAdmin.mutations.generateBrandLogoUploadUrl,\n {},\n );\n logoStorageId = await uploadFile(uploadUrl, options.logo);\n }\n\n const result = await runMutation(\n client,\n api.platformAdmin.mutations.updateBranding,\n {\n name: options.name,\n description: options.description,\n logoStorageId,\n removeLogo: options.removeLogo ? true : undefined,\n themeColor: options.themeColor,\n accentColor: options.accentColor,\n },\n );\n printOutput(\n {\n ...(result ?? { success: true }),\n logoStorageId: logoStorageId ?? null,\n },\n runtime.json,\n );\n });\n\nadminCommand.command('signup-policy').action(async (_options, command) => {\n const { client, runtime } = await getClient(command);\n const result = await runQuery(\n client,\n api.platformAdmin.queries.getSignupPolicy,\n {},\n );\n printOutput(result, runtime.json);\n});\n\nadminCommand\n .command('set-signup-policy')\n .option('--blocked <domains>')\n .option('--allowed <domains>')\n .action(async (options, command) => {\n const { client, runtime } = await getClient(command);\n const result = await runMutation(\n client,\n api.platformAdmin.mutations.updateSignupEmailDomainPolicy,\n {\n blockedDomains: parseList(options.blocked),\n allowedDomains: parseList(options.allowed),\n },\n );\n printOutput(result ?? { success: true }, runtime.json);\n });\n\nadminCommand\n .command('sync-disposable-domains')\n .action(async (_options, command) => {\n const { client, runtime } = await getClient(command);\n const result = await runAction(\n client,\n api.platformAdmin.actions.runDisposableDomainSyncNow,\n {},\n );\n printOutput(result, runtime.json);\n });\n\nconst teamCommand = program.command('team').description('Teams');\n\nteamCommand\n .command('list [slug]')\n .option('--limit <n>')\n .action(async (slug, options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime, slug);\n const result = await runAction(client, cliApi.listTeams, {\n orgSlug,\n limit: options.limit ? Number(options.limit) : undefined,\n });\n printOutput(result, runtime.json);\n });\n\nteamCommand\n .command('get <teamKey>')\n .action(async (teamKey, _options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const result = await runAction(client, cliApi.getTeam, {\n orgSlug,\n teamKey,\n });\n printOutput(result, runtime.json);\n });\n\nteamCommand\n .command('create')\n .requiredOption('--key <key>')\n .requiredOption('--name <name>')\n .option('--description <description>')\n .option('--visibility <visibility>')\n .option('--icon <icon>')\n .option('--color <color>')\n .action(async (options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const result = await runAction(client, cliApi.createTeam, {\n orgSlug,\n key: options.key,\n name: options.name,\n description: options.description,\n visibility: options.visibility,\n icon: options.icon,\n color: options.color,\n });\n printOutput(result, runtime.json);\n });\n\nteamCommand\n .command('update <teamKey>')\n .option('--name <name>')\n .option('--description <description>')\n .option('--clear-description')\n .option('--visibility <visibility>')\n .option('--icon <icon>')\n .option('--clear-icon')\n .option('--color <color>')\n .option('--clear-color')\n .action(async (teamKey, options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const result = await runAction(client, cliApi.updateTeam, {\n orgSlug,\n teamKey,\n name: options.name,\n description: nullableOption(\n options.description,\n options.clearDescription,\n ),\n visibility: options.visibility,\n icon: nullableOption(options.icon, options.clearIcon),\n color: nullableOption(options.color, options.clearColor),\n });\n printOutput(result, runtime.json);\n });\n\nteamCommand\n .command('delete <teamKey>')\n .action(async (teamKey, _options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const result = await runAction(client, cliApi.deleteTeam, {\n orgSlug,\n teamKey,\n });\n printOutput(result, runtime.json);\n });\n\nteamCommand\n .command('members <teamKey>')\n .action(async (teamKey, _options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const team = await runAction(client, cliApi.getTeam, { orgSlug, teamKey });\n const result = await runQuery(client, api.teams.queries.listMembers, {\n teamId: team.id as any,\n });\n printOutput(result, runtime.json);\n });\n\nteamCommand\n .command('add-member <teamKey> <member>')\n .option('--role <role>', 'member or lead', 'member')\n .action(async (teamKey, member, options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const result = await runAction(client, cliApi.addTeamMember, {\n orgSlug,\n teamKey,\n memberName: member,\n role: options.role,\n });\n printOutput(result, runtime.json);\n });\n\nteamCommand\n .command('remove-member <teamKey> <member>')\n .action(async (teamKey, member, _options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const result = await runAction(client, cliApi.removeTeamMember, {\n orgSlug,\n teamKey,\n memberName: member,\n });\n printOutput(result, runtime.json);\n });\n\nteamCommand\n .command('set-lead <teamKey> <member>')\n .action(async (teamKey, member, _options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const leadName = member === 'null' ? null : member;\n const result = await runAction(client, cliApi.changeTeamLead, {\n orgSlug,\n teamKey,\n leadName,\n });\n printOutput(result, runtime.json);\n });\n\nconst projectCommand = program.command('project').description('Projects');\n\nprojectCommand\n .command('list [slug]')\n .option('--team <teamKey>')\n .option('--limit <n>')\n .action(async (slug, options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime, slug);\n const result = await runAction(client, cliApi.listProjects, {\n orgSlug,\n teamKey: options.team,\n limit: options.limit ? Number(options.limit) : undefined,\n });\n printOutput(result, runtime.json);\n });\n\nprojectCommand\n .command('get <projectKey>')\n .action(async (projectKey, _options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const result = await runAction(client, cliApi.getProject, {\n orgSlug,\n projectKey,\n });\n printOutput(result, runtime.json);\n });\n\nprojectCommand\n .command('create')\n .requiredOption('--key <key>')\n .requiredOption('--name <name>')\n .option('--description <description>')\n .option('--team <teamKey>')\n .option('--status <statusName>')\n .option('--visibility <visibility>')\n .option('--icon <icon>')\n .option('--color <color>')\n .action(async (options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const result = await runAction(client, cliApi.createProject, {\n orgSlug,\n key: options.key,\n name: options.name,\n description: options.description,\n teamKey: options.team,\n statusName: options.status,\n visibility: options.visibility,\n icon: options.icon,\n color: options.color,\n });\n printOutput(result, runtime.json);\n });\n\nprojectCommand\n .command('update <projectKey>')\n .option('--name <name>')\n .option('--description <description>')\n .option('--team <teamKey>')\n .option('--clear-team')\n .option('--status <statusName>')\n .option('--clear-status')\n .option('--visibility <visibility>')\n .option('--start-date <date>')\n .option('--clear-start-date')\n .option('--due-date <date>')\n .option('--clear-due-date')\n .option('--icon <icon>')\n .option('--clear-icon')\n .option('--color <color>')\n .option('--clear-color')\n .action(async (projectKey, options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const result = await runAction(client, cliApi.updateProject, {\n orgSlug,\n projectKey,\n name: options.name,\n description: options.description,\n teamKey: nullableOption(options.team, options.clearTeam),\n statusName: nullableOption(options.status, options.clearStatus),\n visibility: options.visibility,\n startDate: nullableOption(options.startDate, options.clearStartDate),\n dueDate: nullableOption(options.dueDate, options.clearDueDate),\n icon: nullableOption(options.icon, options.clearIcon),\n color: nullableOption(options.color, options.clearColor),\n });\n printOutput(result, runtime.json);\n });\n\nprojectCommand\n .command('delete <projectKey>')\n .action(async (projectKey, _options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const result = await runAction(client, cliApi.deleteProject, {\n orgSlug,\n projectKey,\n });\n printOutput(result, runtime.json);\n });\n\nprojectCommand\n .command('members <projectKey>')\n .action(async (projectKey, _options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const project = await runAction(client, cliApi.getProject, {\n orgSlug,\n projectKey,\n });\n const result = await runQuery(client, api.projects.queries.listMembers, {\n projectId: project.id as any,\n });\n printOutput(result, runtime.json);\n });\n\nprojectCommand\n .command('add-member <projectKey> <member>')\n .option('--role <role>', 'member or lead', 'member')\n .action(async (projectKey, member, options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const result = await runAction(client, cliApi.addProjectMember, {\n orgSlug,\n projectKey,\n memberName: member,\n role: options.role,\n });\n printOutput(result, runtime.json);\n });\n\nprojectCommand\n .command('remove-member <projectKey> <member>')\n .action(async (projectKey, member, _options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const result = await runAction(client, cliApi.removeProjectMember, {\n orgSlug,\n projectKey,\n memberName: member,\n });\n printOutput(result, runtime.json);\n });\n\nprojectCommand\n .command('set-lead <projectKey> <member>')\n .action(async (projectKey, member, _options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const leadName = member === 'null' ? null : member;\n const result = await runAction(client, cliApi.changeProjectLead, {\n orgSlug,\n projectKey,\n leadName,\n });\n printOutput(result, runtime.json);\n });\n\nconst issueCommand = program.command('issue').description('Issues');\n\nissueCommand\n .command('list [slug]')\n .option('--project <projectKey>')\n .option('--team <teamKey>')\n .option('--limit <n>')\n .action(async (slug, options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime, slug);\n const result = await runAction(client, cliApi.listIssues, {\n orgSlug,\n projectKey: options.project,\n teamKey: options.team,\n limit: options.limit ? Number(options.limit) : undefined,\n });\n printOutput(result, runtime.json);\n });\n\nissueCommand\n .command('get <issueKey>')\n .action(async (issueKey, _options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const result = await runAction(client, cliApi.getIssue, {\n orgSlug,\n issueKey,\n });\n printOutput(result, runtime.json);\n });\n\nissueCommand\n .command('create')\n .requiredOption('--title <title>')\n .option('--description <description>')\n .option('--project <projectKey>')\n .option('--team <teamKey>')\n .option('--priority <priorityName>')\n .option('--visibility <visibility>')\n .option('--assignee <member>')\n .option('--state <stateName>')\n .option('--start-date <date>')\n .option('--due-date <date>')\n .option('--parent <issueKey>')\n .action(async (options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const result = await runAction(client, cliApi.createIssue, {\n orgSlug,\n title: options.title,\n description: options.description,\n projectKey: options.project,\n teamKey: options.team,\n priorityName: options.priority,\n visibility: options.visibility,\n assigneeName: options.assignee,\n stateName: options.state,\n startDate: options.startDate,\n dueDate: options.dueDate,\n parentIssueKey: options.parent,\n });\n printOutput(result, runtime.json);\n });\n\nissueCommand\n .command('update <issueKey>')\n .option('--title <title>')\n .option('--description <description>')\n .option('--priority <priorityName>')\n .option('--clear-priority')\n .option('--team <teamKey>')\n .option('--clear-team')\n .option('--project <projectKey>')\n .option('--clear-project')\n .option('--visibility <visibility>')\n .option('--assignee <member>')\n .option('--clear-assignee')\n .option('--state <stateName>')\n .option('--start-date <date>')\n .option('--clear-start-date')\n .option('--due-date <date>')\n .option('--clear-due-date')\n .option('--parent <issueKey>')\n .option('--clear-parent')\n .action(async (issueKey, options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const result = await runAction(client, cliApi.updateIssue, {\n orgSlug,\n issueKey,\n title: options.title,\n description: options.description,\n priorityName: nullableOption(options.priority, options.clearPriority),\n teamKey: nullableOption(options.team, options.clearTeam),\n projectKey: nullableOption(options.project, options.clearProject),\n visibility: options.visibility,\n assigneeName: nullableOption(options.assignee, options.clearAssignee),\n stateName: options.state,\n startDate: nullableOption(options.startDate, options.clearStartDate),\n dueDate: nullableOption(options.dueDate, options.clearDueDate),\n parentIssueKey: nullableOption(options.parent, options.clearParent),\n });\n printOutput(result, runtime.json);\n });\n\nissueCommand\n .command('delete <issueKey>')\n .action(async (issueKey, _options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const result = await runAction(client, cliApi.deleteIssue, {\n orgSlug,\n issueKey,\n });\n printOutput(result, runtime.json);\n });\n\nissueCommand\n .command('assign <issueKey> <member>')\n .option('--state <stateName>')\n .action(async (issueKey, member, options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const result = await runAction(client, cliApi.assignIssue, {\n orgSlug,\n issueKey,\n assigneeName: member,\n stateName: options.state,\n });\n printOutput(result, runtime.json);\n });\n\nissueCommand\n .command('unassign <issueKey> <member>')\n .action(async (issueKey, member, _options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const result = await runAction(client, cliApi.unassignIssue, {\n orgSlug,\n issueKey,\n assigneeName: member,\n });\n printOutput(result, runtime.json);\n });\n\nissueCommand\n .command('assignments <issueKey>')\n .action(async (issueKey, _options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const issueId = await resolveIssueId(client, orgSlug, issueKey);\n const result = await runQuery(client, api.issues.queries.getAssignments, {\n issueId,\n });\n printOutput(result, runtime.json);\n });\n\nissueCommand\n .command('set-assignment-state <assignmentId> <state>')\n .action(async (assignmentId, state, _options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const stateId = await resolveIssueStateId(client, orgSlug, state);\n const result = await runMutation(\n client,\n api.issues.mutations.changeAssignmentState,\n {\n assignmentId,\n stateId,\n },\n );\n printOutput(result ?? { success: true }, runtime.json);\n });\n\nissueCommand\n .command('reassign-assignment <assignmentId> <member>')\n .action(async (assignmentId, member, _options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const assigneeId = await resolveMemberId(client, orgSlug, member);\n const result = await runMutation(\n client,\n api.issues.mutations.updateAssignmentAssignee,\n {\n assignmentId,\n assigneeId,\n },\n );\n printOutput(result ?? { success: true }, runtime.json);\n });\n\nissueCommand\n .command('remove-assignment <assignmentId>')\n .action(async (assignmentId, _options, command) => {\n const { client, runtime } = await getClient(command);\n const result = await runMutation(\n client,\n api.issues.mutations.deleteAssignment,\n {\n assignmentId,\n },\n );\n printOutput(result ?? { success: true }, runtime.json);\n });\n\nissueCommand\n .command('set-priority <issueKey> <priority>')\n .action(async (issueKey, priority, _options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const [issueId, priorityId] = await Promise.all([\n resolveIssueId(client, orgSlug, issueKey),\n resolveIssuePriorityId(client, orgSlug, priority),\n ]);\n const result = await runMutation(\n client,\n api.issues.mutations.changePriority,\n {\n issueId,\n priorityId,\n },\n );\n printOutput(result ?? { success: true }, runtime.json);\n });\n\nissueCommand\n .command('replace-assignees <issueKey> <members>')\n .action(async (issueKey, members, _options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const issueId = await resolveIssueId(client, orgSlug, issueKey);\n const assigneeIds = await Promise.all(\n parseList(members).map(member =>\n resolveMemberId(client, orgSlug, member),\n ),\n );\n const result = await runMutation(\n client,\n api.issues.mutations.updateAssignees,\n {\n issueId,\n assigneeIds,\n },\n );\n printOutput(result ?? { success: true }, runtime.json);\n });\n\nissueCommand\n .command('set-estimates <issueKey>')\n .requiredOption('--values <state=hours,...>')\n .action(async (issueKey, options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const issueId = await resolveIssueId(client, orgSlug, issueKey);\n const estimatedTimes = await parseEstimatedTimes(\n client,\n orgSlug,\n options.values,\n );\n const result = await runMutation(\n client,\n api.issues.mutations.updateEstimatedTimes,\n {\n issueId,\n estimatedTimes,\n },\n );\n printOutput(result ?? { success: true }, runtime.json);\n });\n\nissueCommand\n .command('comment <issueKey>')\n .requiredOption('--body <body>')\n .action(async (issueKey, options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const issue = await runAction(client, cliApi.getIssue, {\n orgSlug,\n issueKey,\n });\n const result = await runMutation(client, api.issues.mutations.addComment, {\n issueId: issue.id as any,\n body: options.body,\n });\n printOutput(result, runtime.json);\n });\n\nconst documentCommand = program.command('document').description('Documents');\n\ndocumentCommand\n .command('list [slug]')\n .option('--folder-id <id>')\n .option('--limit <n>')\n .action(async (slug, options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime, slug);\n const result = await runAction(client, cliApi.listDocuments, {\n orgSlug,\n folderId: options.folderId,\n limit: options.limit ? Number(options.limit) : undefined,\n });\n printOutput(result, runtime.json);\n });\n\ndocumentCommand\n .command('get <documentId>')\n .action(async (documentId, _options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const result = await runAction(client, cliApi.getDocument, {\n orgSlug,\n documentId,\n });\n printOutput(result, runtime.json);\n });\n\ndocumentCommand\n .command('create')\n .requiredOption('--title <title>')\n .option('--content <content>')\n .option('--team <teamKey>')\n .option('--project <projectKey>')\n .option('--folder-id <id>')\n .option('--visibility <visibility>')\n .option('--icon <icon>')\n .option('--color <color>')\n .action(async (options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const result = await runAction(client, cliApi.createDocument, {\n orgSlug,\n title: options.title,\n content: options.content,\n teamKey: options.team,\n projectKey: options.project,\n folderId: options.folderId,\n visibility: options.visibility,\n icon: options.icon,\n color: options.color,\n });\n printOutput(result, runtime.json);\n });\n\ndocumentCommand\n .command('update <documentId>')\n .option('--title <title>')\n .option('--content <content>')\n .option('--team <teamKey>')\n .option('--clear-team')\n .option('--project <projectKey>')\n .option('--clear-project')\n .option('--folder-id <id>')\n .option('--clear-folder')\n .option('--visibility <visibility>')\n .option('--icon <icon>')\n .option('--clear-icon')\n .option('--color <color>')\n .option('--clear-color')\n .action(async (documentId, options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const result = await runAction(client, cliApi.updateDocument, {\n orgSlug,\n documentId,\n title: options.title,\n content: options.content,\n teamKey: nullableOption(options.team, options.clearTeam),\n projectKey: nullableOption(options.project, options.clearProject),\n folderId: nullableOption(options.folderId, options.clearFolder),\n visibility: options.visibility,\n icon: nullableOption(options.icon, options.clearIcon),\n color: nullableOption(options.color, options.clearColor),\n });\n printOutput(result, runtime.json);\n });\n\ndocumentCommand\n .command('move <documentId>')\n .option('--folder-id <id>')\n .option('--clear-folder')\n .action(async (documentId, options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const folderId = options.clearFolder\n ? null\n : requiredString(options.folderId, 'folder-id');\n const result = await runAction(client, cliApi.moveDocumentToFolder, {\n orgSlug,\n documentId,\n folderId,\n });\n printOutput(result, runtime.json);\n });\n\ndocumentCommand\n .command('delete <documentId>')\n .action(async (documentId, _options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const result = await runAction(client, cliApi.deleteDocument, {\n orgSlug,\n documentId,\n });\n printOutput(result, runtime.json);\n });\n\nconst folderCommand = program.command('folder').description('Document folders');\n\nfolderCommand.command('list [slug]').action(async (slug, _options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime, slug);\n const result = await runAction(client, cliApi.listFolders, { orgSlug });\n printOutput(result, runtime.json);\n});\n\nfolderCommand\n .command('create')\n .requiredOption('--name <name>')\n .option('--description <description>')\n .option('--icon <icon>')\n .option('--color <color>')\n .action(async (options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const result = await runAction(client, cliApi.createFolder, {\n orgSlug,\n name: options.name,\n description: options.description,\n icon: options.icon,\n color: options.color,\n });\n printOutput(result, runtime.json);\n });\n\nfolderCommand\n .command('update <folderId>')\n .option('--name <name>')\n .option('--description <description>')\n .option('--clear-description')\n .option('--icon <icon>')\n .option('--clear-icon')\n .option('--color <color>')\n .option('--clear-color')\n .action(async (folderId, options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const result = await runAction(client, cliApi.updateFolder, {\n orgSlug,\n folderId,\n name: options.name,\n description: nullableOption(\n options.description,\n options.clearDescription,\n ),\n icon: nullableOption(options.icon, options.clearIcon),\n color: nullableOption(options.color, options.clearColor),\n });\n printOutput(result, runtime.json);\n });\n\nfolderCommand\n .command('delete <folderId>')\n .action(async (folderId, _options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const result = await runAction(client, cliApi.deleteFolder, {\n orgSlug,\n folderId,\n });\n printOutput(result, runtime.json);\n });\n\nasync function main() {\n await program.parseAsync(process.argv);\n}\n\nmain().catch(error => {\n console.error(error instanceof Error ? error.message : String(error));\n process.exitCode = 1;\n});\n","/* eslint-disable */\n/**\n * Generated `api` utility.\n *\n * THIS CODE IS AUTOMATICALLY GENERATED.\n *\n * To regenerate, run `npx convex dev`.\n * @module\n */\n\nimport { anyApi, componentsGeneric } from \"convex/server\";\n\n/**\n * A utility for referencing Convex functions in your app's API.\n *\n * Usage:\n * ```js\n * const myFunctionReference = api.myModule.myFunction;\n * ```\n */\nexport const api = anyApi;\nexport const internal = anyApi;\nexport const components = componentsGeneric();\n","import { isCancel, password as passwordPrompt, text } from '@clack/prompts';\nimport { CliSession } from './session';\n\ntype AuthUser = {\n id?: string;\n email?: string;\n name?: string;\n username?: string;\n};\n\ntype AuthSessionResponse = {\n user?: AuthUser | null;\n session?: Record<string, unknown> | null;\n};\n\nfunction buildUrl(appUrl: string, pathname: string) {\n return new URL(pathname, appUrl).toString();\n}\n\nfunction cookieHeader(cookies: Record<string, string>) {\n return Object.entries(cookies)\n .map(([name, value]) => `${name}=${value}`)\n .join('; ');\n}\n\nfunction splitSetCookieHeader(value: string) {\n return value.split(/,(?=[^;,]+=)/g);\n}\n\nfunction applySetCookieHeaders(\n session: CliSession,\n response: Response,\n): CliSession {\n const nextCookies = { ...session.cookies };\n const rawSetCookies =\n response.headers.getSetCookie?.() ??\n (response.headers.get('set-cookie')\n ? splitSetCookieHeader(response.headers.get('set-cookie')!)\n : []);\n\n for (const rawCookie of rawSetCookies) {\n const [cookiePart, ...attributeParts] = rawCookie.split(';');\n const separatorIndex = cookiePart.indexOf('=');\n if (separatorIndex <= 0) {\n continue;\n }\n\n const name = cookiePart.slice(0, separatorIndex).trim();\n const value = cookiePart.slice(separatorIndex + 1).trim();\n const attributes = attributeParts.map(part => part.trim().toLowerCase());\n const maxAge = attributes.find(part => part.startsWith('max-age='));\n const expires = attributes.find(part => part.startsWith('expires='));\n const expired =\n value.length === 0 ||\n maxAge === 'max-age=0' ||\n (expires\n ? Number.isFinite(Date.parse(expires.slice(8))) &&\n Date.parse(expires.slice(8)) <= Date.now()\n : false);\n\n if (expired) {\n delete nextCookies[name];\n } else {\n nextCookies[name] = value;\n }\n }\n\n return {\n ...session,\n cookies: nextCookies,\n };\n}\n\nasync function authRequest(\n session: CliSession,\n appUrl: string,\n pathname: string,\n init: RequestInit = {},\n) {\n const headers = new Headers(init.headers);\n const origin = new URL(appUrl).origin;\n if (Object.keys(session.cookies).length > 0) {\n headers.set('cookie', cookieHeader(session.cookies));\n }\n if (!headers.has('origin')) {\n headers.set('origin', origin);\n }\n if (!headers.has('referer')) {\n headers.set('referer', `${origin}/`);\n }\n if (init.body && !headers.has('content-type')) {\n headers.set('content-type', 'application/json');\n }\n\n const response = await fetch(buildUrl(appUrl, pathname), {\n ...init,\n headers,\n redirect: 'manual',\n });\n const nextSession = applySetCookieHeaders(session, response);\n return { response, session: nextSession };\n}\n\nasync function parseError(response: Response) {\n try {\n const data = (await response.json()) as { error?: { message?: string } };\n return data.error?.message ?? `Request failed with HTTP ${response.status}`;\n } catch {\n return `Request failed with HTTP ${response.status}`;\n }\n}\n\nexport async function loginWithPassword(\n session: CliSession,\n appUrl: string,\n identifier: string,\n password: string,\n) {\n const pathname = identifier.includes('@')\n ? '/api/auth/sign-in/email'\n : '/api/auth/sign-in/username';\n const body = identifier.includes('@')\n ? { email: identifier, password }\n : { username: identifier, password };\n const { response, session: nextSession } = await authRequest(\n session,\n appUrl,\n pathname,\n {\n method: 'POST',\n body: JSON.stringify(body),\n },\n );\n\n if (!response.ok) {\n throw new Error(await parseError(response));\n }\n\n return nextSession;\n}\n\nexport async function signUpWithEmail(\n session: CliSession,\n appUrl: string,\n email: string,\n username: string,\n password: string,\n) {\n const { response, session: nextSession } = await authRequest(\n session,\n appUrl,\n '/api/auth/sign-up/email',\n {\n method: 'POST',\n body: JSON.stringify({\n email,\n password,\n name: username,\n username,\n }),\n },\n );\n\n if (!response.ok) {\n throw new Error(await parseError(response));\n }\n\n return nextSession;\n}\n\nexport async function logout(session: CliSession, appUrl: string) {\n const { response } = await authRequest(\n session,\n appUrl,\n '/api/auth/sign-out',\n {\n method: 'POST',\n body: JSON.stringify({}),\n },\n );\n\n if (!response.ok) {\n throw new Error(await parseError(response));\n }\n}\n\nexport async function fetchAuthSession(session: CliSession, appUrl: string) {\n const { response, session: nextSession } = await authRequest(\n session,\n appUrl,\n '/api/auth/get-session',\n {\n method: 'GET',\n },\n );\n\n if (!response.ok) {\n throw new Error(await parseError(response));\n }\n\n const data = (await response.json()) as AuthSessionResponse;\n return {\n session: nextSession,\n user: data.user ?? null,\n };\n}\n\nexport async function fetchConvexToken(session: CliSession, appUrl: string) {\n const { response, session: nextSession } = await authRequest(\n session,\n appUrl,\n '/api/auth/convex/token',\n {\n method: 'GET',\n },\n );\n\n if (!response.ok) {\n throw new Error(await parseError(response));\n }\n\n const data = (await response.json()) as { token?: string };\n if (!data.token) {\n throw new Error('Missing Convex token');\n }\n\n return {\n session: nextSession,\n token: data.token,\n };\n}\n\nexport async function prompt(question: string) {\n const value = await text({\n message: question.replace(/:\\s*$/, ''),\n });\n if (isCancel(value)) {\n throw new Error('Canceled');\n }\n return String(value).trim();\n}\n\nexport async function promptSecret(question: string) {\n const value = await passwordPrompt({\n message: question.replace(/:\\s*$/, ''),\n mask: '*',\n });\n if (isCancel(value)) {\n throw new Error('Canceled');\n }\n return String(value);\n}\n","import { ConvexHttpClient } from 'convex/browser';\nimport { FunctionReference, OptionalRestArgs } from 'convex/server';\nimport { fetchConvexToken } from './auth';\nimport { CliSession } from './session';\n\nexport async function createConvexClient(\n session: CliSession,\n appUrl: string,\n convexUrl: string,\n) {\n const { token } = await fetchConvexToken(session, appUrl);\n const client = new ConvexHttpClient(convexUrl);\n client.setAuth(token);\n return client;\n}\n\nexport async function runQuery<Query extends FunctionReference<'query'>>(\n client: ConvexHttpClient,\n ref: Query,\n ...args: OptionalRestArgs<Query>\n) {\n return await client.query(ref, ...args);\n}\n\nexport async function runMutation<\n Mutation extends FunctionReference<'mutation'>,\n>(\n client: ConvexHttpClient,\n ref: Mutation,\n ...args: OptionalRestArgs<Mutation>\n) {\n return await client.mutation(ref, ...args);\n}\n\nexport async function runAction<Action extends FunctionReference<'action'>>(\n client: ConvexHttpClient,\n ref: Action,\n ...args: OptionalRestArgs<Action>\n) {\n return await client.action(ref, ...args);\n}\n","function simplify(value: unknown): unknown {\n if (value === null || value === undefined) {\n return value;\n }\n if (Array.isArray(value)) {\n if (value.length === 0) {\n return [];\n }\n if (value.every(item => typeof item !== 'object' || item === null)) {\n return value.join(', ');\n }\n return JSON.stringify(value);\n }\n if (typeof value === 'object') {\n return JSON.stringify(value);\n }\n return value;\n}\n\nexport function printOutput(data: unknown, json = false) {\n if (json) {\n console.log(JSON.stringify(data, null, 2));\n return;\n }\n\n if (Array.isArray(data)) {\n if (data.length === 0) {\n console.log('No results.');\n return;\n }\n if (data.every(item => typeof item === 'object' && item !== null)) {\n console.table(\n data.map(item =>\n Object.fromEntries(\n Object.entries(item).map(([key, value]) => [key, simplify(value)]),\n ),\n ),\n );\n return;\n }\n }\n\n if (typeof data === 'object' && data !== null) {\n console.dir(data, { depth: null, colors: true });\n return;\n }\n\n console.log(String(data));\n}\n","import { mkdir, readFile, rm, writeFile } from 'node:fs/promises';\nimport { homedir } from 'node:os';\nimport path from 'node:path';\n\nexport type CliSession = {\n version: 1;\n appUrl?: string;\n convexUrl?: string;\n activeOrgSlug?: string;\n cookies: Record<string, string>;\n};\n\nconst SESSION_ROOT = path.join(homedir(), '.vector');\n\nexport function getSessionPath(profile = 'default') {\n return path.join(SESSION_ROOT, `cli-${profile}.json`);\n}\n\nexport async function readSession(profile = 'default') {\n try {\n const raw = await readFile(getSessionPath(profile), 'utf8');\n const parsed = JSON.parse(raw) as Partial<CliSession>;\n return {\n version: 1,\n cookies: {},\n ...parsed,\n } satisfies CliSession;\n } catch {\n return null;\n }\n}\n\nexport async function writeSession(session: CliSession, profile = 'default') {\n await mkdir(SESSION_ROOT, { recursive: true });\n await writeFile(\n getSessionPath(profile),\n `${JSON.stringify(session, null, 2)}\\n`,\n 'utf8',\n );\n}\n\nexport async function clearSession(profile = 'default') {\n await rm(getSessionPath(profile), { force: true });\n}\n\nexport function createEmptySession(): CliSession {\n return {\n version: 1,\n cookies: {},\n };\n}\n"],"mappings":"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","names":["readFile","readFile"]}
1
+ {"version":3,"sources":["../../../node_modules/.pnpm/is-docker@3.0.0/node_modules/is-docker/index.js","../../../node_modules/.pnpm/is-inside-container@1.0.0/node_modules/is-inside-container/index.js","../../../node_modules/.pnpm/is-wsl@3.1.1/node_modules/is-wsl/index.js","../../../node_modules/.pnpm/powershell-utils@0.1.0/node_modules/powershell-utils/index.js","../../../node_modules/.pnpm/wsl-utils@0.3.1/node_modules/wsl-utils/utilities.js","../../../node_modules/.pnpm/wsl-utils@0.3.1/node_modules/wsl-utils/index.js","../../../node_modules/.pnpm/define-lazy-prop@3.0.0/node_modules/define-lazy-prop/index.js","../../../node_modules/.pnpm/default-browser-id@5.0.1/node_modules/default-browser-id/index.js","../../../node_modules/.pnpm/run-applescript@7.1.0/node_modules/run-applescript/index.js","../../../node_modules/.pnpm/bundle-name@4.1.0/node_modules/bundle-name/index.js","../../../node_modules/.pnpm/default-browser@5.5.0/node_modules/default-browser/windows.js","../../../node_modules/.pnpm/default-browser@5.5.0/node_modules/default-browser/index.js","../../../node_modules/.pnpm/is-in-ssh@1.0.0/node_modules/is-in-ssh/index.js","../../../node_modules/.pnpm/open@11.0.0/node_modules/open/index.js","../src/index.ts","../../../convex/_generated/api.js","../src/auth.ts","../src/convex.ts","../src/output.ts","../src/session.ts","../src/bridge-service.ts","../src/terminal-peer.ts","../src/agent-adapters.ts"],"sourcesContent":["import fs from 'node:fs';\n\nlet isDockerCached;\n\nfunction hasDockerEnv() {\n\ttry {\n\t\tfs.statSync('/.dockerenv');\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nfunction hasDockerCGroup() {\n\ttry {\n\t\treturn fs.readFileSync('/proc/self/cgroup', 'utf8').includes('docker');\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nexport default function isDocker() {\n\t// TODO: Use `??=` when targeting Node.js 16.\n\tif (isDockerCached === undefined) {\n\t\tisDockerCached = hasDockerEnv() || hasDockerCGroup();\n\t}\n\n\treturn isDockerCached;\n}\n","import fs from 'node:fs';\nimport isDocker from 'is-docker';\n\nlet cachedResult;\n\n// Podman detection\nconst hasContainerEnv = () => {\n\ttry {\n\t\tfs.statSync('/run/.containerenv');\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n};\n\nexport default function isInsideContainer() {\n\t// TODO: Use `??=` when targeting Node.js 16.\n\tif (cachedResult === undefined) {\n\t\tcachedResult = hasContainerEnv() || isDocker();\n\t}\n\n\treturn cachedResult;\n}\n","import process from 'node:process';\nimport os from 'node:os';\nimport fs from 'node:fs';\nimport isInsideContainer from 'is-inside-container';\n\nconst isWsl = () => {\n\tif (process.platform !== 'linux') {\n\t\treturn false;\n\t}\n\n\tif (os.release().toLowerCase().includes('microsoft')) {\n\t\tif (isInsideContainer()) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t}\n\n\ttry {\n\t\tif (fs.readFileSync('/proc/version', 'utf8').toLowerCase().includes('microsoft')) {\n\t\t\treturn !isInsideContainer();\n\t\t}\n\t} catch {}\n\n\t// Fallback for custom kernels: check WSL-specific paths.\n\tif (\n\t\tfs.existsSync('/proc/sys/fs/binfmt_misc/WSLInterop')\n\t\t|| fs.existsSync('/run/WSL')\n\t) {\n\t\treturn !isInsideContainer();\n\t}\n\n\treturn false;\n};\n\nexport default process.env.__IS_WSL_TEST__ ? isWsl : isWsl();\n","import process from 'node:process';\nimport {Buffer} from 'node:buffer';\nimport {promisify} from 'node:util';\nimport childProcess from 'node:child_process';\nimport fs, {constants as fsConstants} from 'node:fs/promises';\n\nconst execFile = promisify(childProcess.execFile);\n\nexport const powerShellPath = () => `${process.env.SYSTEMROOT || process.env.windir || String.raw`C:\\Windows`}\\\\System32\\\\WindowsPowerShell\\\\v1.0\\\\powershell.exe`;\n\n// Cache for PowerShell accessibility check\nlet canAccessCache;\n\nexport const canAccessPowerShell = async () => {\n\tcanAccessCache ??= (async () => {\n\t\ttry {\n\t\t\tawait fs.access(powerShellPath(), fsConstants.X_OK);\n\t\t\treturn true;\n\t\t} catch {\n\t\t\treturn false;\n\t\t}\n\t})();\n\n\treturn canAccessCache;\n};\n\nexport const executePowerShell = async (command, options = {}) => {\n\tconst {\n\t\tpowerShellPath: psPath,\n\t\t...execFileOptions\n\t} = options;\n\n\tconst encodedCommand = executePowerShell.encodeCommand(command);\n\n\treturn execFile(\n\t\tpsPath ?? powerShellPath(),\n\t\t[\n\t\t\t...executePowerShell.argumentsPrefix,\n\t\t\tencodedCommand,\n\t\t],\n\t\t{\n\t\t\tencoding: 'utf8',\n\t\t\t...execFileOptions,\n\t\t},\n\t);\n};\n\nexecutePowerShell.argumentsPrefix = [\n\t'-NoProfile',\n\t'-NonInteractive',\n\t'-ExecutionPolicy',\n\t'Bypass',\n\t'-EncodedCommand',\n];\n\nexecutePowerShell.encodeCommand = command => Buffer.from(command, 'utf16le').toString('base64');\n\nexecutePowerShell.escapeArgument = value => `'${String(value).replaceAll('\\'', '\\'\\'')}'`;\n","export function parseMountPointFromConfig(content) {\n\tfor (const line of content.split('\\n')) {\n\t\t// Skip comment lines\n\t\tif (/^\\s*#/.test(line)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Match root at start of line (after optional whitespace)\n\t\tconst match = /^\\s*root\\s*=\\s*(?<mountPoint>\"[^\"]*\"|'[^']*'|[^#]*)/.exec(line);\n\t\tif (!match) {\n\t\t\tcontinue;\n\t\t}\n\n\t\treturn match.groups.mountPoint\n\t\t\t.trim()\n\t\t\t// Strip surrounding quotes\n\t\t\t.replaceAll(/^[\"']|[\"']$/g, '');\n\t}\n}\n","import {promisify} from 'node:util';\nimport childProcess from 'node:child_process';\nimport fs, {constants as fsConstants} from 'node:fs/promises';\nimport isWsl from 'is-wsl';\nimport {powerShellPath as windowsPowerShellPath, executePowerShell} from 'powershell-utils';\nimport {parseMountPointFromConfig} from './utilities.js';\n\nconst execFile = promisify(childProcess.execFile);\n\nexport const wslDrivesMountPoint = (() => {\n\t// Default value for \"root\" param\n\t// according to https://docs.microsoft.com/en-us/windows/wsl/wsl-config\n\tconst defaultMountPoint = '/mnt/';\n\n\tlet mountPoint;\n\n\treturn async function () {\n\t\tif (mountPoint) {\n\t\t\t// Return memoized mount point value\n\t\t\treturn mountPoint;\n\t\t}\n\n\t\tconst configFilePath = '/etc/wsl.conf';\n\n\t\tlet isConfigFileExists = false;\n\t\ttry {\n\t\t\tawait fs.access(configFilePath, fsConstants.F_OK);\n\t\t\tisConfigFileExists = true;\n\t\t} catch {}\n\n\t\tif (!isConfigFileExists) {\n\t\t\treturn defaultMountPoint;\n\t\t}\n\n\t\tconst configContent = await fs.readFile(configFilePath, {encoding: 'utf8'});\n\t\tconst parsedMountPoint = parseMountPointFromConfig(configContent);\n\n\t\tif (parsedMountPoint === undefined) {\n\t\t\treturn defaultMountPoint;\n\t\t}\n\n\t\tmountPoint = parsedMountPoint;\n\t\tmountPoint = mountPoint.endsWith('/') ? mountPoint : `${mountPoint}/`;\n\n\t\treturn mountPoint;\n\t};\n})();\n\nexport const powerShellPathFromWsl = async () => {\n\tconst mountPoint = await wslDrivesMountPoint();\n\treturn `${mountPoint}c/Windows/System32/WindowsPowerShell/v1.0/powershell.exe`;\n};\n\nexport const powerShellPath = isWsl ? powerShellPathFromWsl : windowsPowerShellPath;\n\n// Cache for PowerShell accessibility check\nlet canAccessPowerShellPromise;\n\nexport const canAccessPowerShell = async () => {\n\tcanAccessPowerShellPromise ??= (async () => {\n\t\ttry {\n\t\t\tconst psPath = await powerShellPath();\n\t\t\tawait fs.access(psPath, fsConstants.X_OK);\n\t\t\treturn true;\n\t\t} catch {\n\t\t\t// PowerShell is not accessible (either doesn't exist, no execute permission, or other error)\n\t\t\treturn false;\n\t\t}\n\t})();\n\n\treturn canAccessPowerShellPromise;\n};\n\nexport const wslDefaultBrowser = async () => {\n\tconst psPath = await powerShellPath();\n\tconst command = String.raw`(Get-ItemProperty -Path \"HKCU:\\Software\\Microsoft\\Windows\\Shell\\Associations\\UrlAssociations\\http\\UserChoice\").ProgId`;\n\n\tconst {stdout} = await executePowerShell(command, {powerShellPath: psPath});\n\n\treturn stdout.trim();\n};\n\nexport const convertWslPathToWindows = async path => {\n\t// Don't convert URLs\n\tif (/^[a-z]+:\\/\\//i.test(path)) {\n\t\treturn path;\n\t}\n\n\ttry {\n\t\tconst {stdout} = await execFile('wslpath', ['-aw', path], {encoding: 'utf8'});\n\t\treturn stdout.trim();\n\t} catch {\n\t\t// If wslpath fails, return the original path\n\t\treturn path;\n\t}\n};\n\nexport {default as isWsl} from 'is-wsl';\n","export default function defineLazyProperty(object, propertyName, valueGetter) {\n\tconst define = value => Object.defineProperty(object, propertyName, {value, enumerable: true, writable: true});\n\n\tObject.defineProperty(object, propertyName, {\n\t\tconfigurable: true,\n\t\tenumerable: true,\n\t\tget() {\n\t\t\tconst result = valueGetter();\n\t\t\tdefine(result);\n\t\t\treturn result;\n\t\t},\n\t\tset(value) {\n\t\t\tdefine(value);\n\t\t}\n\t});\n\n\treturn object;\n}\n","import {promisify} from 'node:util';\nimport process from 'node:process';\nimport {execFile} from 'node:child_process';\n\nconst execFileAsync = promisify(execFile);\n\nexport default async function defaultBrowserId() {\n\tif (process.platform !== 'darwin') {\n\t\tthrow new Error('macOS only');\n\t}\n\n\tconst {stdout} = await execFileAsync('defaults', ['read', 'com.apple.LaunchServices/com.apple.launchservices.secure', 'LSHandlers']);\n\n\t// `(?!-)` is to prevent matching `LSHandlerRoleAll = \"-\";`.\n\tconst match = /LSHandlerRoleAll = \"(?!-)(?<id>[^\"]+?)\";\\s+?LSHandlerURLScheme = (?:http|https);/.exec(stdout);\n\n\tconst browserId = match?.groups.id ?? 'com.apple.Safari';\n\n\t// Correct the case for Safari's bundle identifier\n\tif (browserId === 'com.apple.safari') {\n\t\treturn 'com.apple.Safari';\n\t}\n\n\treturn browserId;\n}\n","import process from 'node:process';\nimport {promisify} from 'node:util';\nimport {execFile, execFileSync} from 'node:child_process';\n\nconst execFileAsync = promisify(execFile);\n\nexport async function runAppleScript(script, {humanReadableOutput = true, signal} = {}) {\n\tif (process.platform !== 'darwin') {\n\t\tthrow new Error('macOS only');\n\t}\n\n\tconst outputArguments = humanReadableOutput ? [] : ['-ss'];\n\n\tconst execOptions = {};\n\tif (signal) {\n\t\texecOptions.signal = signal;\n\t}\n\n\tconst {stdout} = await execFileAsync('osascript', ['-e', script, outputArguments], execOptions);\n\treturn stdout.trim();\n}\n\nexport function runAppleScriptSync(script, {humanReadableOutput = true} = {}) {\n\tif (process.platform !== 'darwin') {\n\t\tthrow new Error('macOS only');\n\t}\n\n\tconst outputArguments = humanReadableOutput ? [] : ['-ss'];\n\n\tconst stdout = execFileSync('osascript', ['-e', script, ...outputArguments], {\n\t\tencoding: 'utf8',\n\t\tstdio: ['ignore', 'pipe', 'ignore'],\n\t\ttimeout: 500,\n\t});\n\n\treturn stdout.trim();\n}\n","import {runAppleScript} from 'run-applescript';\n\nexport default async function bundleName(bundleId) {\n\treturn runAppleScript(`tell application \"Finder\" to set app_path to application file id \"${bundleId}\" as string\\ntell application \"System Events\" to get value of property list item \"CFBundleName\" of property list file (app_path & \":Contents:Info.plist\")`);\n}\n","import {promisify} from 'node:util';\nimport {execFile} from 'node:child_process';\n\nconst execFileAsync = promisify(execFile);\n\n// TODO: Fix the casing of bundle identifiers in the next major version.\n\n// Windows doesn't have browser IDs in the same way macOS/Linux does so we give fake\n// ones that look real and match the macOS/Linux versions for cross-platform apps.\nconst windowsBrowserProgIds = {\n\tMSEdgeHTM: {name: 'Edge', id: 'com.microsoft.edge'}, // The missing `L` is correct.\n\tMSEdgeBHTML: {name: 'Edge Beta', id: 'com.microsoft.edge.beta'},\n\tMSEdgeDHTML: {name: 'Edge Dev', id: 'com.microsoft.edge.dev'},\n\tAppXq0fevzme2pys62n3e0fbqa7peapykr8v: {name: 'Edge', id: 'com.microsoft.edge.old'},\n\tChromeHTML: {name: 'Chrome', id: 'com.google.chrome'},\n\tChromeBHTML: {name: 'Chrome Beta', id: 'com.google.chrome.beta'},\n\tChromeDHTML: {name: 'Chrome Dev', id: 'com.google.chrome.dev'},\n\tChromiumHTM: {name: 'Chromium', id: 'org.chromium.Chromium'},\n\tBraveHTML: {name: 'Brave', id: 'com.brave.Browser'},\n\tBraveBHTML: {name: 'Brave Beta', id: 'com.brave.Browser.beta'},\n\tBraveDHTML: {name: 'Brave Dev', id: 'com.brave.Browser.dev'},\n\tBraveSSHTM: {name: 'Brave Nightly', id: 'com.brave.Browser.nightly'},\n\tFirefoxURL: {name: 'Firefox', id: 'org.mozilla.firefox'},\n\tOperaStable: {name: 'Opera', id: 'com.operasoftware.Opera'},\n\tVivaldiHTM: {name: 'Vivaldi', id: 'com.vivaldi.Vivaldi'},\n\t'IE.HTTP': {name: 'Internet Explorer', id: 'com.microsoft.ie'},\n};\n\nexport const _windowsBrowserProgIdMap = new Map(Object.entries(windowsBrowserProgIds));\n\nexport class UnknownBrowserError extends Error {}\n\nexport default async function defaultBrowser(_execFileAsync = execFileAsync) {\n\tconst {stdout} = await _execFileAsync('reg', [\n\t\t'QUERY',\n\t\t' HKEY_CURRENT_USER\\\\Software\\\\Microsoft\\\\Windows\\\\Shell\\\\Associations\\\\UrlAssociations\\\\http\\\\UserChoice',\n\t\t'/v',\n\t\t'ProgId',\n\t]);\n\n\tconst match = /ProgId\\s*REG_SZ\\s*(?<id>\\S+)/.exec(stdout);\n\tif (!match) {\n\t\tthrow new UnknownBrowserError(`Cannot find Windows browser in stdout: ${JSON.stringify(stdout)}`);\n\t}\n\n\tconst {id} = match.groups;\n\n\t// Windows can append a hash suffix to ProgIds using a dot or hyphen\n\t// (e.g., `ChromeHTML.ABC123`, `FirefoxURL-6F193CCC56814779`).\n\t// Try exact match first, then try without the suffix.\n\tconst dotIndex = id.lastIndexOf('.');\n\tconst hyphenIndex = id.lastIndexOf('-');\n\tconst baseIdByDot = dotIndex === -1 ? undefined : id.slice(0, dotIndex);\n\tconst baseIdByHyphen = hyphenIndex === -1 ? undefined : id.slice(0, hyphenIndex);\n\n\treturn windowsBrowserProgIds[id] ?? windowsBrowserProgIds[baseIdByDot] ?? windowsBrowserProgIds[baseIdByHyphen] ?? {name: id, id};\n}\n","import {promisify} from 'node:util';\nimport process from 'node:process';\nimport {execFile} from 'node:child_process';\nimport defaultBrowserId from 'default-browser-id';\nimport bundleName from 'bundle-name';\nimport windows from './windows.js';\n\nexport {_windowsBrowserProgIdMap} from './windows.js';\n\nconst execFileAsync = promisify(execFile);\n\n// Inlined: https://github.com/sindresorhus/titleize/blob/main/index.js\nconst titleize = string => string.toLowerCase().replaceAll(/(?:^|\\s|-)\\S/g, x => x.toUpperCase());\n\nexport default async function defaultBrowser() {\n\tif (process.platform === 'darwin') {\n\t\tconst id = await defaultBrowserId();\n\t\tconst name = await bundleName(id);\n\t\treturn {name, id};\n\t}\n\n\tif (process.platform === 'linux') {\n\t\tconst {stdout} = await execFileAsync('xdg-mime', ['query', 'default', 'x-scheme-handler/http']);\n\t\tconst id = stdout.trim();\n\t\tconst name = titleize(id.replace(/.desktop$/, '').replace('-', ' '));\n\t\treturn {name, id};\n\t}\n\n\tif (process.platform === 'win32') {\n\t\treturn windows();\n\t}\n\n\tthrow new Error('Only macOS, Linux, and Windows are supported');\n}\n","import process from 'node:process';\n\nconst isInSsh = Boolean(process.env.SSH_CONNECTION\n\t|| process.env.SSH_CLIENT\n\t|| process.env.SSH_TTY);\n\nexport default isInSsh;\n","import process from 'node:process';\nimport path from 'node:path';\nimport {fileURLToPath} from 'node:url';\nimport childProcess from 'node:child_process';\nimport fs, {constants as fsConstants} from 'node:fs/promises';\nimport {\n\tisWsl,\n\tpowerShellPath,\n\tconvertWslPathToWindows,\n\tcanAccessPowerShell,\n\twslDefaultBrowser,\n} from 'wsl-utils';\nimport {executePowerShell} from 'powershell-utils';\nimport defineLazyProperty from 'define-lazy-prop';\nimport defaultBrowser, {_windowsBrowserProgIdMap} from 'default-browser';\nimport isInsideContainer from 'is-inside-container';\nimport isInSsh from 'is-in-ssh';\n\nconst fallbackAttemptSymbol = Symbol('fallbackAttempt');\n\n// Path to included `xdg-open`.\nconst __dirname = import.meta.url ? path.dirname(fileURLToPath(import.meta.url)) : '';\nconst localXdgOpenPath = path.join(__dirname, 'xdg-open');\n\nconst {platform, arch} = process;\n\nconst tryEachApp = async (apps, opener) => {\n\tif (apps.length === 0) {\n\t\t// No app was provided\n\t\treturn;\n\t}\n\n\tconst errors = [];\n\n\tfor (const app of apps) {\n\t\ttry {\n\t\t\treturn await opener(app); // eslint-disable-line no-await-in-loop\n\t\t} catch (error) {\n\t\t\terrors.push(error);\n\t\t}\n\t}\n\n\tthrow new AggregateError(errors, 'Failed to open in all supported apps');\n};\n\n// eslint-disable-next-line complexity\nconst baseOpen = async options => {\n\toptions = {\n\t\twait: false,\n\t\tbackground: false,\n\t\tnewInstance: false,\n\t\tallowNonzeroExitCode: false,\n\t\t...options,\n\t};\n\n\tconst isFallbackAttempt = options[fallbackAttemptSymbol] === true;\n\tdelete options[fallbackAttemptSymbol];\n\n\tif (Array.isArray(options.app)) {\n\t\treturn tryEachApp(options.app, singleApp => baseOpen({\n\t\t\t...options,\n\t\t\tapp: singleApp,\n\t\t\t[fallbackAttemptSymbol]: true,\n\t\t}));\n\t}\n\n\tlet {name: app, arguments: appArguments = []} = options.app ?? {};\n\tappArguments = [...appArguments];\n\n\tif (Array.isArray(app)) {\n\t\treturn tryEachApp(app, appName => baseOpen({\n\t\t\t...options,\n\t\t\tapp: {\n\t\t\t\tname: appName,\n\t\t\t\targuments: appArguments,\n\t\t\t},\n\t\t\t[fallbackAttemptSymbol]: true,\n\t\t}));\n\t}\n\n\tif (app === 'browser' || app === 'browserPrivate') {\n\t\t// IDs from default-browser for macOS and windows are the same.\n\t\t// IDs are lowercased to increase chances of a match.\n\t\tconst ids = {\n\t\t\t'com.google.chrome': 'chrome',\n\t\t\t'google-chrome.desktop': 'chrome',\n\t\t\t'com.brave.browser': 'brave',\n\t\t\t'org.mozilla.firefox': 'firefox',\n\t\t\t'firefox.desktop': 'firefox',\n\t\t\t'com.microsoft.msedge': 'edge',\n\t\t\t'com.microsoft.edge': 'edge',\n\t\t\t'com.microsoft.edgemac': 'edge',\n\t\t\t'microsoft-edge.desktop': 'edge',\n\t\t\t'com.apple.safari': 'safari',\n\t\t};\n\n\t\t// Incognito flags for each browser in `apps`.\n\t\tconst flags = {\n\t\t\tchrome: '--incognito',\n\t\t\tbrave: '--incognito',\n\t\t\tfirefox: '--private-window',\n\t\t\tedge: '--inPrivate',\n\t\t\t// Safari doesn't support private mode via command line\n\t\t};\n\n\t\tlet browser;\n\t\tif (isWsl) {\n\t\t\tconst progId = await wslDefaultBrowser();\n\t\t\tconst browserInfo = _windowsBrowserProgIdMap.get(progId);\n\t\t\tbrowser = browserInfo ?? {};\n\t\t} else {\n\t\t\tbrowser = await defaultBrowser();\n\t\t}\n\n\t\tif (browser.id in ids) {\n\t\t\tconst browserName = ids[browser.id.toLowerCase()];\n\n\t\t\tif (app === 'browserPrivate') {\n\t\t\t\t// Safari doesn't support private mode via command line\n\t\t\t\tif (browserName === 'safari') {\n\t\t\t\t\tthrow new Error('Safari doesn\\'t support opening in private mode via command line');\n\t\t\t\t}\n\n\t\t\t\tappArguments.push(flags[browserName]);\n\t\t\t}\n\n\t\t\treturn baseOpen({\n\t\t\t\t...options,\n\t\t\t\tapp: {\n\t\t\t\t\tname: apps[browserName],\n\t\t\t\t\targuments: appArguments,\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\n\t\tthrow new Error(`${browser.name} is not supported as a default browser`);\n\t}\n\n\tlet command;\n\tconst cliArguments = [];\n\tconst childProcessOptions = {};\n\n\t// Determine if we should use Windows/PowerShell behavior in WSL.\n\t// We only use Windows integration if PowerShell is actually accessible.\n\t// This allows the package to work in sandboxed WSL environments where Windows access is restricted.\n\tlet shouldUseWindowsInWsl = false;\n\tif (isWsl && !isInsideContainer() && !isInSsh && !app) {\n\t\tshouldUseWindowsInWsl = await canAccessPowerShell();\n\t}\n\n\tif (platform === 'darwin') {\n\t\tcommand = 'open';\n\n\t\tif (options.wait) {\n\t\t\tcliArguments.push('--wait-apps');\n\t\t}\n\n\t\tif (options.background) {\n\t\t\tcliArguments.push('--background');\n\t\t}\n\n\t\tif (options.newInstance) {\n\t\t\tcliArguments.push('--new');\n\t\t}\n\n\t\tif (app) {\n\t\t\tcliArguments.push('-a', app);\n\t\t}\n\t} else if (platform === 'win32' || shouldUseWindowsInWsl) {\n\t\tcommand = await powerShellPath();\n\n\t\tcliArguments.push(...executePowerShell.argumentsPrefix);\n\n\t\tif (!isWsl) {\n\t\t\tchildProcessOptions.windowsVerbatimArguments = true;\n\t\t}\n\n\t\t// Convert WSL Linux paths to Windows paths\n\t\tif (isWsl && options.target) {\n\t\t\toptions.target = await convertWslPathToWindows(options.target);\n\t\t}\n\n\t\t// Suppress PowerShell progress messages that are written to stderr\n\t\tconst encodedArguments = ['$ProgressPreference = \\'SilentlyContinue\\';', 'Start'];\n\n\t\tif (options.wait) {\n\t\t\tencodedArguments.push('-Wait');\n\t\t}\n\n\t\tif (app) {\n\t\t\tencodedArguments.push(executePowerShell.escapeArgument(app));\n\t\t\tif (options.target) {\n\t\t\t\tappArguments.push(options.target);\n\t\t\t}\n\t\t} else if (options.target) {\n\t\t\tencodedArguments.push(executePowerShell.escapeArgument(options.target));\n\t\t}\n\n\t\tif (appArguments.length > 0) {\n\t\t\tappArguments = appArguments.map(argument => executePowerShell.escapeArgument(argument));\n\t\t\tencodedArguments.push('-ArgumentList', appArguments.join(','));\n\t\t}\n\n\t\t// Using Base64-encoded command, accepted by PowerShell, to allow special characters.\n\t\toptions.target = executePowerShell.encodeCommand(encodedArguments.join(' '));\n\n\t\tif (!options.wait) {\n\t\t\t// PowerShell will keep the parent process alive unless stdio is ignored.\n\t\t\tchildProcessOptions.stdio = 'ignore';\n\t\t}\n\t} else {\n\t\tif (app) {\n\t\t\tcommand = app;\n\t\t} else {\n\t\t\t// When bundled by Webpack, there's no actual package file path and no local `xdg-open`.\n\t\t\tconst isBundled = !__dirname || __dirname === '/';\n\n\t\t\t// Check if local `xdg-open` exists and is executable.\n\t\t\tlet exeLocalXdgOpen = false;\n\t\t\ttry {\n\t\t\t\tawait fs.access(localXdgOpenPath, fsConstants.X_OK);\n\t\t\t\texeLocalXdgOpen = true;\n\t\t\t} catch {}\n\n\t\t\tconst useSystemXdgOpen = process.versions.electron\n\t\t\t\t?? (platform === 'android' || isBundled || !exeLocalXdgOpen);\n\t\t\tcommand = useSystemXdgOpen ? 'xdg-open' : localXdgOpenPath;\n\t\t}\n\n\t\tif (appArguments.length > 0) {\n\t\t\tcliArguments.push(...appArguments);\n\t\t}\n\n\t\tif (!options.wait) {\n\t\t\t// `xdg-open` will block the process unless stdio is ignored\n\t\t\t// and it's detached from the parent even if it's unref'd.\n\t\t\tchildProcessOptions.stdio = 'ignore';\n\t\t\tchildProcessOptions.detached = true;\n\t\t}\n\t}\n\n\tif (platform === 'darwin' && appArguments.length > 0) {\n\t\tcliArguments.push('--args', ...appArguments);\n\t}\n\n\t// IMPORTANT: On macOS, the target MUST come AFTER '--args'.\n\t// When using --args, ALL following arguments are passed to the app.\n\t// Example: open -a \"chrome\" --args --incognito https://site.com\n\t// This passes BOTH --incognito AND https://site.com to Chrome.\n\t// Without this order, Chrome won't open in incognito. See #332.\n\tif (options.target) {\n\t\tcliArguments.push(options.target);\n\t}\n\n\tconst subprocess = childProcess.spawn(command, cliArguments, childProcessOptions);\n\n\tif (options.wait) {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tsubprocess.once('error', reject);\n\n\t\t\tsubprocess.once('close', exitCode => {\n\t\t\t\tif (!options.allowNonzeroExitCode && exitCode !== 0) {\n\t\t\t\t\treject(new Error(`Exited with code ${exitCode}`));\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tresolve(subprocess);\n\t\t\t});\n\t\t});\n\t}\n\n\t// When we're in a fallback attempt, we need to detect launch failures before trying the next app.\n\t// Wait for the close event to check the exit code before unreffing.\n\t// The launcher (open/xdg-open/PowerShell) exits quickly (~10-30ms) even on success.\n\tif (isFallbackAttempt) {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tsubprocess.once('error', reject);\n\n\t\t\tsubprocess.once('spawn', () => {\n\t\t\t\t// Keep error handler active for post-spawn errors\n\t\t\t\tsubprocess.once('close', exitCode => {\n\t\t\t\t\tsubprocess.off('error', reject);\n\n\t\t\t\t\tif (exitCode !== 0) {\n\t\t\t\t\t\treject(new Error(`Exited with code ${exitCode}`));\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tsubprocess.unref();\n\t\t\t\t\tresolve(subprocess);\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\t}\n\n\tsubprocess.unref();\n\n\t// Handle spawn errors before the caller can attach listeners.\n\t// This prevents unhandled error events from crashing the process.\n\treturn new Promise((resolve, reject) => {\n\t\tsubprocess.once('error', reject);\n\n\t\t// Wait for the subprocess to spawn before resolving.\n\t\t// This ensures the process is established before the caller continues,\n\t\t// preventing issues when process.exit() is called immediately after.\n\t\tsubprocess.once('spawn', () => {\n\t\t\tsubprocess.off('error', reject);\n\t\t\tresolve(subprocess);\n\t\t});\n\t});\n};\n\nconst open = (target, options) => {\n\tif (typeof target !== 'string') {\n\t\tthrow new TypeError('Expected a `target`');\n\t}\n\n\treturn baseOpen({\n\t\t...options,\n\t\ttarget,\n\t});\n};\n\nexport const openApp = (name, options) => {\n\tif (typeof name !== 'string' && !Array.isArray(name)) {\n\t\tthrow new TypeError('Expected a valid `name`');\n\t}\n\n\tconst {arguments: appArguments = []} = options ?? {};\n\tif (appArguments !== undefined && appArguments !== null && !Array.isArray(appArguments)) {\n\t\tthrow new TypeError('Expected `appArguments` as Array type');\n\t}\n\n\treturn baseOpen({\n\t\t...options,\n\t\tapp: {\n\t\t\tname,\n\t\t\targuments: appArguments,\n\t\t},\n\t});\n};\n\nfunction detectArchBinary(binary) {\n\tif (typeof binary === 'string' || Array.isArray(binary)) {\n\t\treturn binary;\n\t}\n\n\tconst {[arch]: archBinary} = binary;\n\n\tif (!archBinary) {\n\t\tthrow new Error(`${arch} is not supported`);\n\t}\n\n\treturn archBinary;\n}\n\nfunction detectPlatformBinary({[platform]: platformBinary}, {wsl} = {}) {\n\tif (wsl && isWsl) {\n\t\treturn detectArchBinary(wsl);\n\t}\n\n\tif (!platformBinary) {\n\t\tthrow new Error(`${platform} is not supported`);\n\t}\n\n\treturn detectArchBinary(platformBinary);\n}\n\nexport const apps = {\n\tbrowser: 'browser',\n\tbrowserPrivate: 'browserPrivate',\n};\n\ndefineLazyProperty(apps, 'chrome', () => detectPlatformBinary({\n\tdarwin: 'google chrome',\n\twin32: 'chrome',\n\t// `chromium-browser` is the older deb package name used by Ubuntu/Debian before snap.\n\tlinux: ['google-chrome', 'google-chrome-stable', 'chromium', 'chromium-browser'],\n}, {\n\twsl: {\n\t\tia32: '/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe',\n\t\tx64: ['/mnt/c/Program Files/Google/Chrome/Application/chrome.exe', '/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe'],\n\t},\n}));\n\ndefineLazyProperty(apps, 'brave', () => detectPlatformBinary({\n\tdarwin: 'brave browser',\n\twin32: 'brave',\n\tlinux: ['brave-browser', 'brave'],\n}, {\n\twsl: {\n\t\tia32: '/mnt/c/Program Files (x86)/BraveSoftware/Brave-Browser/Application/brave.exe',\n\t\tx64: ['/mnt/c/Program Files/BraveSoftware/Brave-Browser/Application/brave.exe', '/mnt/c/Program Files (x86)/BraveSoftware/Brave-Browser/Application/brave.exe'],\n\t},\n}));\n\ndefineLazyProperty(apps, 'firefox', () => detectPlatformBinary({\n\tdarwin: 'firefox',\n\twin32: String.raw`C:\\Program Files\\Mozilla Firefox\\firefox.exe`,\n\tlinux: 'firefox',\n}, {\n\twsl: '/mnt/c/Program Files/Mozilla Firefox/firefox.exe',\n}));\n\ndefineLazyProperty(apps, 'edge', () => detectPlatformBinary({\n\tdarwin: 'microsoft edge',\n\twin32: 'msedge',\n\tlinux: ['microsoft-edge', 'microsoft-edge-dev'],\n}, {\n\twsl: '/mnt/c/Program Files (x86)/Microsoft/Edge/Application/msedge.exe',\n}));\n\ndefineLazyProperty(apps, 'safari', () => detectPlatformBinary({\n\tdarwin: 'Safari',\n}));\n\nexport default open;\n","#!/usr/bin/env node\n\nimport { readFileSync } from 'node:fs';\nimport { readFile } from 'node:fs/promises';\nimport { dirname, extname, join } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { config as loadEnv } from 'dotenv';\nimport { Command } from 'commander';\nimport { ConvexHttpClient } from 'convex/browser';\nimport { makeFunctionReference } from 'convex/server';\nimport { api } from '../../../convex/_generated/api';\nimport type { Id } from '../../../convex/_generated/dataModel';\nimport type { Permission } from '../../../convex/_shared/permissions';\nimport {\n fetchAuthSession,\n loginWithPassword,\n logout,\n pollDeviceToken,\n prompt,\n promptSecret,\n requestDeviceCode,\n signUpWithEmail,\n} from './auth';\nimport { createConvexClient, runAction, runMutation, runQuery } from './convex';\nimport { printOutput } from './output';\nimport {\n clearSession,\n createEmptySession,\n listProfiles,\n readDefaultProfile,\n readSession,\n writeDefaultProfile,\n writeSession,\n type CliSession,\n} from './session';\n\nloadEnv({ path: '.env.local', override: false });\nloadEnv({ path: '.env', override: false });\n\nconst cliApi = {\n listWorkspaceReferenceData: makeFunctionReference<'action'>(\n 'cli:listWorkspaceReferenceData',\n ),\n searchIcons: makeFunctionReference<'action'>('cli:searchIcons'),\n listDocuments: makeFunctionReference<'action'>('cli:listDocuments'),\n getDocument: makeFunctionReference<'action'>('cli:getDocument'),\n createDocument: makeFunctionReference<'action'>('cli:createDocument'),\n updateDocument: makeFunctionReference<'action'>('cli:updateDocument'),\n deleteDocument: makeFunctionReference<'action'>('cli:deleteDocument'),\n moveDocumentToFolder: makeFunctionReference<'action'>(\n 'cli:moveDocumentToFolder',\n ),\n listIssues: makeFunctionReference<'action'>('cli:listIssues'),\n getIssue: makeFunctionReference<'action'>('cli:getIssue'),\n createIssue: makeFunctionReference<'action'>('cli:createIssue'),\n updateIssue: makeFunctionReference<'action'>('cli:updateIssue'),\n deleteIssue: makeFunctionReference<'action'>('cli:deleteIssue'),\n assignIssue: makeFunctionReference<'action'>('cli:assignIssue'),\n unassignIssue: makeFunctionReference<'action'>('cli:unassignIssue'),\n listProjects: makeFunctionReference<'action'>('cli:listProjects'),\n getProject: makeFunctionReference<'action'>('cli:getProject'),\n createProject: makeFunctionReference<'action'>('cli:createProject'),\n updateProject: makeFunctionReference<'action'>('cli:updateProject'),\n deleteProject: makeFunctionReference<'action'>('cli:deleteProject'),\n addProjectMember: makeFunctionReference<'action'>('cli:addProjectMember'),\n removeProjectMember: makeFunctionReference<'action'>(\n 'cli:removeProjectMember',\n ),\n changeProjectLead: makeFunctionReference<'action'>('cli:changeProjectLead'),\n listTeams: makeFunctionReference<'action'>('cli:listTeams'),\n getTeam: makeFunctionReference<'action'>('cli:getTeam'),\n createTeam: makeFunctionReference<'action'>('cli:createTeam'),\n updateTeam: makeFunctionReference<'action'>('cli:updateTeam'),\n deleteTeam: makeFunctionReference<'action'>('cli:deleteTeam'),\n addTeamMember: makeFunctionReference<'action'>('cli:addTeamMember'),\n removeTeamMember: makeFunctionReference<'action'>('cli:removeTeamMember'),\n changeTeamLead: makeFunctionReference<'action'>('cli:changeTeamLead'),\n listFolders: makeFunctionReference<'action'>('cli:listFolders'),\n createFolder: makeFunctionReference<'action'>('cli:createFolder'),\n updateFolder: makeFunctionReference<'action'>('cli:updateFolder'),\n deleteFolder: makeFunctionReference<'action'>('cli:deleteFolder'),\n};\n\nconst rolesApi = api.roles.index;\ntype OrganizationRoleId = Id<'roles'> | Id<'orgRoles'>;\n\ntype GlobalOptions = {\n appUrl?: string;\n convexUrl?: string;\n json?: boolean;\n org?: string;\n profile?: string;\n};\n\ntype Runtime = {\n appUrl: string;\n convexUrl: string;\n json: boolean;\n org?: string;\n profile: string;\n session: CliSession | null;\n};\n\ntype ProfileSummary = {\n name: string;\n isDefault: boolean;\n hasSession: boolean;\n};\n\nconst ISSUE_STATE_TYPES = [\n 'backlog',\n 'todo',\n 'in_progress',\n 'done',\n 'canceled',\n] as const;\n\nconst PROJECT_STATUS_TYPES = [\n 'backlog',\n 'planned',\n 'in_progress',\n 'completed',\n 'canceled',\n] as const;\n\nconst NOTIFICATION_CATEGORIES = [\n 'invites',\n 'assignments',\n 'mentions',\n 'comments',\n] as const;\n\nfunction requiredString(value: string | undefined, label: string) {\n if (!value?.trim()) {\n throw new Error(`${label} is required`);\n }\n return value.trim();\n}\n\nfunction optionalNumber(value: string | undefined, label: string) {\n if (value === undefined) {\n return undefined;\n }\n\n const parsed = Number(value);\n if (!Number.isFinite(parsed)) {\n throw new Error(`${label} must be a valid number`);\n }\n\n return parsed;\n}\n\nfunction requiredNumber(value: string | undefined, label: string) {\n const parsed = optionalNumber(value, label);\n if (parsed === undefined) {\n throw new Error(`${label} is required`);\n }\n return parsed;\n}\n\nfunction parseBoolean(value: string, label: string) {\n const normalized = value.trim().toLowerCase();\n if (normalized === 'true') return true;\n if (normalized === 'false') return false;\n throw new Error(`${label} must be \"true\" or \"false\"`);\n}\n\nfunction parseList(value: string | undefined) {\n if (!value) return [];\n return value\n .split(',')\n .map(item => item.trim())\n .filter(Boolean);\n}\n\nfunction buildPaginationOptions(limit?: string, cursor?: string) {\n return {\n cursor: cursor ?? null,\n numItems: optionalNumber(limit, 'limit') ?? 20,\n };\n}\n\nfunction normalizeMatch(value: string | undefined | null) {\n return value?.trim().toLowerCase();\n}\n\ntype ListItem = Record<string, unknown>;\n\nfunction parseDate(value: string): number {\n const ms = Date.parse(value);\n if (!Number.isFinite(ms)) {\n throw new Error(`Invalid date: ${value}`);\n }\n return ms;\n}\n\nfunction applyListFilters(\n items: ListItem[],\n options: {\n createdAfter?: string;\n createdBefore?: string;\n updatedAfter?: string;\n updatedBefore?: string;\n sort?: string;\n order?: string;\n limit?: string;\n },\n): ListItem[] {\n let result = [...items];\n\n if (options.createdAfter) {\n const threshold = parseDate(options.createdAfter);\n result = result.filter(\n item => typeof item.createdAt === 'number' && item.createdAt >= threshold,\n );\n }\n if (options.createdBefore) {\n const threshold = parseDate(options.createdBefore);\n result = result.filter(\n item => typeof item.createdAt === 'number' && item.createdAt <= threshold,\n );\n }\n if (options.updatedAfter) {\n const threshold = parseDate(options.updatedAfter);\n result = result.filter(\n item =>\n typeof item.lastEditedAt === 'number' && item.lastEditedAt >= threshold,\n );\n }\n if (options.updatedBefore) {\n const threshold = parseDate(options.updatedBefore);\n result = result.filter(\n item =>\n typeof item.lastEditedAt === 'number' && item.lastEditedAt <= threshold,\n );\n }\n\n if (options.sort) {\n const field = options.sort;\n const desc = options.order?.toLowerCase() === 'desc';\n result.sort((a, b) => {\n const aVal = a[field];\n const bVal = b[field];\n if (aVal == null && bVal == null) return 0;\n if (aVal == null) return 1;\n if (bVal == null) return -1;\n if (typeof aVal === 'number' && typeof bVal === 'number')\n return desc ? bVal - aVal : aVal - bVal;\n return desc\n ? String(bVal).localeCompare(String(aVal))\n : String(aVal).localeCompare(String(bVal));\n });\n }\n\n if (options.limit) {\n const limit = Number(options.limit);\n if (Number.isFinite(limit) && limit > 0) {\n result = result.slice(0, limit);\n }\n }\n\n return result;\n}\n\nfunction addEntityUrls(\n items: ListItem[],\n appUrl: string,\n orgSlug: string,\n entityType: 'issues' | 'projects' | 'teams' | 'documents' | 'folders',\n): ListItem[] {\n return items.map(item => {\n let path: string;\n switch (entityType) {\n case 'issues':\n path = `/${orgSlug}/issues/${item.key}`;\n break;\n case 'projects':\n path = `/${orgSlug}/projects/${item.key}`;\n break;\n case 'teams':\n path = `/${orgSlug}/teams/${item.key}`;\n break;\n case 'documents':\n path = `/${orgSlug}/documents/${item.id}`;\n break;\n case 'folders':\n path = `/${orgSlug}/documents/folders/${item.id}`;\n break;\n }\n return { ...item, url: `${appUrl}${path}` };\n });\n}\n\nfunction normalizeAppUrl(raw: string): string {\n let url = raw.trim();\n if (!/^https?:\\/\\//i.test(url)) {\n const isLocal =\n /^localhost(:\\d+)?/i.test(url) || /^127\\.0\\.0\\.1(:\\d+)?/.test(url);\n url = isLocal ? `http://${url}` : `https://${url}`;\n }\n // Strip trailing slash for consistency\n return url.replace(/\\/+$/, '');\n}\n\nasync function resolveAppUrl(raw: string): Promise<string> {\n const url = normalizeAppUrl(raw);\n try {\n const response = await fetch(url, { method: 'HEAD', redirect: 'follow' });\n // Use the final URL after redirects, stripped of trailing slash and path\n const resolved = new URL(response.url).origin;\n return resolved;\n } catch {\n return url;\n }\n}\n\nasync function fetchAppConfig(\n appUrl: string,\n): Promise<{ convexUrl: string; tunnelHost?: string }> {\n try {\n const url = new URL('/api/config', appUrl).toString();\n const response = await fetch(url);\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}`);\n }\n const data = (await response.json()) as {\n convexUrl?: string;\n tunnelHost?: string;\n };\n if (data.convexUrl) {\n return {\n convexUrl: data.convexUrl,\n tunnelHost: data.tunnelHost || undefined,\n };\n }\n } catch {\n // Fall through to default\n }\n return { convexUrl: 'http://127.0.0.1:3210' };\n}\n\nasync function fetchConvexUrl(appUrl: string): Promise<string> {\n const config = await fetchAppConfig(appUrl);\n return config.convexUrl;\n}\n\nasync function getRuntime(command: Command) {\n const options = command.optsWithGlobals<GlobalOptions>();\n const profile = options.profile ?? (await readDefaultProfile());\n const session = await readSession(profile);\n const appUrlSource =\n options.appUrl ?? session?.appUrl ?? process.env.NEXT_PUBLIC_APP_URL;\n const appUrl = await resolveAppUrl(requiredString(appUrlSource, 'app URL'));\n let convexUrl = options.convexUrl ?? session?.convexUrl;\n\n if (!convexUrl) {\n // When an explicit --app-url is provided, always fetch from the app\n // to avoid using local env vars that may point at a different deployment.\n const fetchedUrl = await fetchConvexUrl(appUrl);\n convexUrl =\n fetchedUrl !== 'http://127.0.0.1:3210'\n ? fetchedUrl\n : (process.env.NEXT_PUBLIC_CONVEX_URL ??\n process.env.CONVEX_URL ??\n fetchedUrl);\n }\n\n return {\n appUrl,\n convexUrl,\n json: Boolean(options.json),\n org: options.org ?? session?.activeOrgSlug,\n profile,\n session,\n } satisfies Runtime;\n}\n\nfunction requireSession(runtime: Runtime) {\n if (\n !runtime.session ||\n (Object.keys(runtime.session.cookies).length === 0 &&\n !runtime.session.bearerToken)\n ) {\n throw new Error('Not logged in. Run `vcli auth login` first.');\n }\n return runtime.session;\n}\n\nfunction requireOrg(runtime: Runtime, explicit?: string) {\n const orgSlug = explicit ?? runtime.org;\n if (!orgSlug) {\n throw new Error(\n 'Organization slug is required. Pass `--org <slug>` or run `vcli org use <slug>`.',\n );\n }\n return orgSlug;\n}\n\nfunction hostForAppUrl(appUrl?: string) {\n if (!appUrl) {\n return undefined;\n }\n\n try {\n const url = new URL(appUrl);\n return url.port ? `${url.hostname}:${url.port}` : url.hostname;\n } catch {\n return undefined;\n }\n}\n\nfunction decodeSessionClaims(session: CliSession | null): {\n email?: string;\n userId?: string;\n} {\n const jwt = session?.cookies?.['__Secure-better-auth.convex_jwt'];\n if (!jwt) {\n return {};\n }\n\n const parts = jwt.split('.');\n if (parts.length < 2) {\n return {};\n }\n\n let payload = parts[1]!.replace(/-/g, '+').replace(/_/g, '/');\n while (payload.length % 4 !== 0) {\n payload += '=';\n }\n\n try {\n const decoded = JSON.parse(\n Buffer.from(payload, 'base64').toString('utf8'),\n ) as {\n email?: string;\n sub?: string;\n userId?: string;\n };\n return {\n email: decoded.email,\n userId: decoded.sub ?? decoded.userId,\n };\n } catch {\n return {};\n }\n}\n\nfunction buildMenuSessionInfo(session: CliSession | null) {\n const claims = decodeSessionClaims(session);\n return {\n orgSlug: session?.activeOrgSlug ?? 'oss-lab',\n appUrl: session?.appUrl,\n appDomain: hostForAppUrl(session?.appUrl),\n email: claims.email,\n userId: claims.userId,\n };\n}\n\nfunction parseAgentProvider(\n value: string,\n): 'codex' | 'claude_code' | 'vector_cli' {\n if (value === 'codex' || value === 'claude_code' || value === 'vector_cli') {\n return value;\n }\n throw new Error('provider must be one of: codex, claude_code, vector_cli');\n}\n\nfunction isBridgeDeviceAuthError(error: unknown): boolean {\n if (!error || typeof error !== 'object') {\n return false;\n }\n\n const maybeData = (error as { data?: unknown }).data;\n return (\n maybeData === 'INVALID_DEVICE_SECRET' || maybeData === 'DEVICE_NOT_FOUND'\n );\n}\n\nasync function validateStoredBridgeConfig(\n config: Awaited<ReturnType<typeof setupBridgeDevice>>,\n): Promise<boolean> {\n const client = new ConvexHttpClient(config.convexUrl);\n\n try {\n await client.mutation(api.agentBridge.bridgePublic.heartbeat, {\n deviceId: config.deviceId as Id<'agentDevices'>,\n deviceSecret: config.deviceSecret,\n });\n return true;\n } catch (error) {\n if (isBridgeDeviceAuthError(error)) {\n return false;\n }\n throw error;\n }\n}\n\nasync function getClient(command: Command) {\n const runtime = await getRuntime(command);\n const session = requireSession(runtime);\n const client = await createConvexClient(\n session,\n runtime.appUrl,\n runtime.convexUrl,\n );\n return { client, runtime, session };\n}\n\nasync function ensureBridgeConfig(\n command: Command,\n): Promise<Awaited<ReturnType<typeof setupBridgeDevice>>> {\n let config = loadBridgeConfig();\n\n try {\n const runtime = await getRuntime(command);\n const session = requireSession(runtime);\n const client = await createConvexClient(\n session,\n runtime.appUrl,\n runtime.convexUrl,\n );\n const user = await runQuery(client, api.users.currentUser);\n if (!user) {\n throw new Error('Not logged in. Run `vcli auth login` first.');\n }\n\n const backendDevice = config\n ? await runQuery(client, api.agentBridge.queries.getDevice, {\n deviceId: config.deviceId as Id<'agentDevices'>,\n })\n : null;\n\n const needsRegistration =\n !config ||\n config.userId !== user._id ||\n config.convexUrl !== runtime.convexUrl ||\n !backendDevice ||\n !(await validateStoredBridgeConfig(config));\n\n if (needsRegistration) {\n config = await setupBridgeDevice(client, runtime.convexUrl);\n }\n\n if (!config) {\n throw new Error('Bridge device is not configured.');\n }\n\n // Fetch tunnel host from app config\n const appConfig = await fetchAppConfig(runtime.appUrl);\n if (appConfig.tunnelHost) {\n config.tunnelHost = appConfig.tunnelHost;\n }\n\n saveBridgeConfig(config);\n return config;\n } catch (error) {\n if (config) {\n return config;\n }\n throw error;\n }\n}\n\nasync function resolveMemberId(\n client: Awaited<ReturnType<typeof createConvexClient>>,\n orgSlug: string,\n ref: string,\n): Promise<Id<'users'>> {\n const members = await runQuery(\n client,\n api.organizations.queries.listMembers,\n {\n orgSlug,\n },\n );\n const needle = normalizeMatch(ref);\n const matches = members.filter(member => {\n const user = member.user;\n if (!user) return false;\n return (\n normalizeMatch(String(user._id)) === needle ||\n normalizeMatch(user.email) === needle ||\n normalizeMatch(user.name) === needle ||\n normalizeMatch(user.username) === needle\n );\n });\n\n if (matches.length === 0) {\n throw new Error(`No member matched \"${ref}\"`);\n }\n if (matches.length > 1) {\n throw new Error(`Multiple members matched \"${ref}\"`);\n }\n return matches[0]!.user!._id;\n}\n\nasync function resolveRoleId(\n client: Awaited<ReturnType<typeof createConvexClient>>,\n orgSlug: string,\n ref: string,\n): Promise<OrganizationRoleId> {\n const roles = await runQuery(client, rolesApi.list, { orgSlug });\n const needle = normalizeMatch(ref);\n const matches = roles.filter(role => {\n const candidate = role as { _id: string; name?: string; key?: string };\n return (\n normalizeMatch(String(candidate._id)) === needle ||\n normalizeMatch(candidate.name) === needle ||\n normalizeMatch(candidate.key) === needle\n );\n });\n\n if (matches.length === 0) {\n throw new Error(`No role matched \"${ref}\"`);\n }\n if (matches.length > 1) {\n throw new Error(`Multiple roles matched \"${ref}\"`);\n }\n return matches[0]!._id;\n}\n\nfunction parsePermissions(value: string): Permission[] {\n return value\n .split(',')\n .map(permission => permission.trim())\n .filter(Boolean) as Permission[];\n}\n\nfunction nullableOption(value: string | undefined, clear = false) {\n if (clear) return null;\n return value;\n}\n\nfunction mimeTypeForFile(filePath: string) {\n switch (extname(filePath).toLowerCase()) {\n case '.png':\n return 'image/png';\n case '.jpg':\n case '.jpeg':\n return 'image/jpeg';\n case '.webp':\n return 'image/webp';\n case '.gif':\n return 'image/gif';\n case '.svg':\n return 'image/svg+xml';\n default:\n return 'application/octet-stream';\n }\n}\n\nasync function uploadFile(uploadUrl: string, filePath: string) {\n const body = await readFile(filePath);\n const response = await fetch(uploadUrl, {\n method: 'POST',\n headers: {\n 'Content-Type': mimeTypeForFile(filePath),\n },\n body,\n });\n\n if (!response.ok) {\n throw new Error(`Upload failed with HTTP ${response.status}`);\n }\n\n const data = (await response.json()) as { storageId?: Id<'_storage'> };\n if (!data.storageId) {\n throw new Error('Upload response did not include a storageId');\n }\n\n return data.storageId;\n}\n\nasync function resolveTeamId(\n client: Awaited<ReturnType<typeof createConvexClient>>,\n orgSlug: string,\n teamKey?: string,\n) {\n if (!teamKey) {\n return undefined;\n }\n const team = await runAction(client, cliApi.getTeam, { orgSlug, teamKey });\n return team.id as Id<'teams'>;\n}\n\nasync function resolveProjectId(\n client: Awaited<ReturnType<typeof createConvexClient>>,\n orgSlug: string,\n projectKey?: string,\n) {\n if (!projectKey) {\n return undefined;\n }\n const project = await runAction(client, cliApi.getProject, {\n orgSlug,\n projectKey,\n });\n return project.id as Id<'projects'>;\n}\n\nasync function resolveIssueId(\n client: Awaited<ReturnType<typeof createConvexClient>>,\n orgSlug: string,\n issueKey: string,\n) {\n const issue = await runAction(client, cliApi.getIssue, { orgSlug, issueKey });\n return issue.id as Id<'issues'>;\n}\n\nasync function resolveDocumentId(\n client: Awaited<ReturnType<typeof createConvexClient>>,\n orgSlug: string,\n documentId: string,\n) {\n const document = await runAction(client, cliApi.getDocument, {\n orgSlug,\n documentId,\n });\n return document.id as Id<'documents'>;\n}\n\nasync function resolveIssueStateId(\n client: Awaited<ReturnType<typeof createConvexClient>>,\n orgSlug: string,\n ref: string,\n) {\n const states = await runQuery(\n client,\n api.organizations.queries.listIssueStates,\n {\n orgSlug,\n },\n );\n const needle = normalizeMatch(ref);\n const match = states.find(state => {\n return (\n normalizeMatch(String(state._id)) === needle ||\n normalizeMatch(state.name) === needle ||\n normalizeMatch(state.type) === needle\n );\n });\n\n if (!match) {\n throw new Error(`No issue state matched \"${ref}\"`);\n }\n\n return match._id;\n}\n\nasync function resolveIssuePriorityId(\n client: Awaited<ReturnType<typeof createConvexClient>>,\n orgSlug: string,\n ref: string,\n) {\n const priorities = await runQuery(\n client,\n api.organizations.queries.listIssuePriorities,\n { orgSlug },\n );\n const needle = normalizeMatch(ref);\n const match = priorities.find(priority => {\n return (\n normalizeMatch(String(priority._id)) === needle ||\n normalizeMatch(priority.name) === needle\n );\n });\n\n if (!match) {\n throw new Error(`No issue priority matched \"${ref}\"`);\n }\n\n return match._id;\n}\n\nasync function resolveProjectStatusId(\n client: Awaited<ReturnType<typeof createConvexClient>>,\n orgSlug: string,\n ref: string,\n) {\n const statuses = await runQuery(\n client,\n api.organizations.queries.listProjectStatuses,\n { orgSlug },\n );\n const needle = normalizeMatch(ref);\n const match = statuses.find(status => {\n return (\n normalizeMatch(String(status._id)) === needle ||\n normalizeMatch(status.name) === needle ||\n normalizeMatch(status.type) === needle\n );\n });\n\n if (!match) {\n throw new Error(`No project status matched \"${ref}\"`);\n }\n\n return match._id;\n}\n\nasync function parseEstimatedTimes(\n client: Awaited<ReturnType<typeof createConvexClient>>,\n orgSlug: string,\n value: string,\n) {\n const entries = parseList(value);\n const estimatedTimes: Record<string, number> = {};\n\n for (const entry of entries) {\n const separatorIndex = entry.indexOf('=');\n if (separatorIndex <= 0) {\n throw new Error(\n 'estimated times must use the format \"state=hours,state=hours\"',\n );\n }\n\n const stateRef = entry.slice(0, separatorIndex).trim();\n const hours = Number(entry.slice(separatorIndex + 1).trim());\n if (!Number.isFinite(hours)) {\n throw new Error(`Invalid estimate for \"${stateRef}\"`);\n }\n\n const stateId = await resolveIssueStateId(client, orgSlug, stateRef);\n estimatedTimes[String(stateId)] = hours;\n }\n\n return estimatedTimes;\n}\n\nconst program = new Command();\n\nfunction readPackageVersionSync(): string {\n try {\n const dir = import.meta.dirname ?? dirname(fileURLToPath(import.meta.url));\n const raw = readFileSync(join(dir, '..', 'package.json'), 'utf8');\n return (JSON.parse(raw) as { version?: string }).version ?? 'unknown';\n } catch {\n return 'unknown';\n }\n}\n\nprogram\n .name('vcli')\n .description('Vector CLI')\n .version(readPackageVersionSync(), '-v, --version')\n .showHelpAfterError()\n .option(\n '--app-url <url>',\n 'Vector app URL. Required unless saved in the profile or NEXT_PUBLIC_APP_URL is set.',\n )\n .option('--convex-url <url>', 'Convex deployment URL')\n .option('--org <slug>', 'Organization slug override')\n .option('--profile <name>', 'CLI profile name')\n .option('--json', 'Output JSON');\n\nconst authCommand = program.command('auth').description('Authentication');\n\nauthCommand\n .command('signup')\n .option('--email <email>', 'Email address')\n .option('--username <username>', 'Username')\n .option('--password <password>', 'Password')\n .action(async (options, command) => {\n const runtime = await getRuntime(command);\n const email = requiredString(\n options.email?.trim() || (await prompt('Email: ')),\n 'email',\n ).toLowerCase();\n const username = requiredString(\n options.username?.trim() || (await prompt('Username: ')),\n 'username',\n );\n const password =\n options.password?.trim() || (await promptSecret('Password: '));\n\n let session = createEmptySession();\n session.appUrl = runtime.appUrl;\n session.convexUrl = runtime.convexUrl;\n\n session = await signUpWithEmail(\n session,\n runtime.appUrl,\n email,\n username,\n password,\n );\n const authState = await fetchAuthSession(session, runtime.appUrl);\n session = authState.session;\n\n const client = await createConvexClient(\n session,\n runtime.appUrl,\n runtime.convexUrl,\n );\n const orgs = await runQuery(client, api.users.getOrganizations, {});\n session.activeOrgSlug = orgs[0]?.slug ?? session.activeOrgSlug;\n\n await writeSession(session, runtime.profile);\n printOutput(\n {\n signedUpAs:\n authState.user?.email ??\n authState.user?.username ??\n authState.user?.name,\n activeOrgSlug: session.activeOrgSlug ?? null,\n },\n runtime.json,\n );\n });\n\nauthCommand\n .command('login [identifier]')\n .option('--password <password>', 'Password (uses device flow if omitted)')\n .action(async (identifier, options, command) => {\n const runtime = await getRuntime(command);\n let session = createEmptySession();\n session.appUrl = runtime.appUrl;\n session.convexUrl = runtime.convexUrl;\n\n const usePassword = Boolean(identifier || options.password);\n\n if (usePassword) {\n const loginId =\n identifier?.trim() || (await prompt('Email or username: '));\n const password =\n options.password?.trim() || (await promptSecret('Password: '));\n session = await loginWithPassword(\n session,\n runtime.appUrl,\n loginId,\n password,\n );\n } else {\n const deviceResp = await requestDeviceCode(runtime.appUrl, 'vcli');\n const verifyUrl = `${runtime.appUrl}/device?user_code=${deviceResp.user_code}`;\n\n console.log();\n console.log(` Open this URL in your browser to log in:`);\n console.log();\n console.log(` ${verifyUrl}`);\n console.log();\n console.log(` Or go to ${runtime.appUrl}/device and enter code:`);\n console.log();\n console.log(` ${deviceResp.user_code}`);\n console.log();\n\n const open = await import('open').then(m => m.default).catch(() => null);\n if (open) {\n await open(verifyUrl).catch(() => {});\n }\n\n console.log(' Waiting for authorization...');\n session = await pollDeviceToken(\n session,\n runtime.appUrl,\n deviceResp.device_code,\n 'vcli',\n deviceResp.interval,\n deviceResp.expires_in,\n );\n }\n\n const authState = await fetchAuthSession(session, runtime.appUrl);\n session = authState.session;\n\n const client = await createConvexClient(\n session,\n runtime.appUrl,\n runtime.convexUrl,\n );\n const orgs = await runQuery(client, api.users.getOrganizations, {});\n session.activeOrgSlug = orgs[0]?.slug ?? session.activeOrgSlug;\n\n await writeSession(session, runtime.profile);\n printOutput(\n {\n loggedInAs:\n authState.user?.email ??\n authState.user?.username ??\n authState.user?.name,\n activeOrgSlug: session.activeOrgSlug ?? null,\n },\n runtime.json,\n );\n });\n\nauthCommand.command('logout').action(async (_options, command) => {\n const runtime = await getRuntime(command);\n const session = requireSession(runtime);\n await logout(session, runtime.appUrl);\n await clearSession(runtime.profile);\n printOutput({ success: true }, runtime.json);\n});\n\nauthCommand.command('whoami').action(async (_options, command) => {\n const { client, runtime } = await getClient(command);\n const [user, orgs] = await Promise.all([\n runQuery(client, api.users.getCurrentUser, {}),\n runQuery(client, api.users.getOrganizations, {}),\n ]);\n printOutput(\n {\n user,\n organizations: orgs,\n activeOrgSlug: runtime.org ?? null,\n },\n runtime.json,\n );\n});\n\nauthCommand.command('profiles').action(async (_options, command) => {\n const options = command.optsWithGlobals() as GlobalOptions;\n const explicitProfile = options.profile?.trim();\n const defaultProfile = await readDefaultProfile();\n const profiles = await listProfiles();\n const activeProfile = explicitProfile || defaultProfile;\n printOutput(\n {\n activeProfile,\n defaultProfile,\n profiles,\n },\n Boolean(options.json),\n );\n});\n\nauthCommand\n .command('use-profile <name>')\n .action(async (name, _options, command) => {\n const options = command.optsWithGlobals() as GlobalOptions;\n const profile = name.trim();\n if (!profile) {\n throw new Error('Profile name is required.');\n }\n await writeDefaultProfile(profile);\n const session = await readSession(profile);\n printOutput(\n {\n ok: true,\n defaultProfile: profile,\n hasSession: session !== null,\n },\n Boolean(options.json),\n );\n });\n\nconst orgCommand = program.command('org').description('Organizations');\n\norgCommand.command('list').action(async (_options, command) => {\n const { client, runtime } = await getClient(command);\n const orgs = await runQuery(client, api.users.getOrganizations, {});\n printOutput(orgs, runtime.json);\n});\n\norgCommand.command('current').action(async (_options, command) => {\n const runtime = await getRuntime(command);\n printOutput({ activeOrgSlug: runtime.org ?? null }, runtime.json);\n});\n\norgCommand.command('use <slug>').action(async (slug, _options, command) => {\n const runtime = await getRuntime(command);\n const session = requireSession(runtime);\n session.activeOrgSlug = slug;\n session.appUrl = runtime.appUrl;\n session.convexUrl = runtime.convexUrl;\n await writeSession(session, runtime.profile);\n printOutput({ activeOrgSlug: slug }, runtime.json);\n});\n\norgCommand\n .command('create')\n .requiredOption('--name <name>')\n .requiredOption('--slug <slug>')\n .action(async (options, command) => {\n const { client, runtime, session } = await getClient(command);\n const result = await runMutation(\n client,\n api.organizations.mutations.create,\n {\n data: {\n name: options.name,\n slug: options.slug,\n },\n },\n );\n if (session) {\n session.activeOrgSlug = options.slug;\n session.appUrl = runtime.appUrl;\n session.convexUrl = runtime.convexUrl;\n await writeSession(session, runtime.profile);\n }\n printOutput(result, runtime.json);\n });\n\norgCommand\n .command('update [slug]')\n .option('--name <name>')\n .option('--new-slug <slug>')\n .action(async (slug, options, command) => {\n const { client, runtime, session } = await getClient(command);\n const orgSlug = requireOrg(runtime, slug);\n const result = await runMutation(\n client,\n api.organizations.mutations.update,\n {\n orgSlug,\n data: {\n ...(options.name ? { name: options.name } : {}),\n ...(options.newSlug ? { slug: options.newSlug } : {}),\n },\n },\n );\n if (session && options.newSlug && session.activeOrgSlug === orgSlug) {\n session.activeOrgSlug = options.newSlug;\n await writeSession(session, runtime.profile);\n }\n printOutput(result, runtime.json);\n });\n\norgCommand.command('stats [slug]').action(async (slug, _options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime, slug);\n const result = await runQuery(\n client,\n api.organizations.queries.getOrganizationStats,\n { orgSlug },\n );\n printOutput(result, runtime.json);\n});\n\norgCommand\n .command('logo [slug]')\n .option('--file <path>')\n .option('--remove')\n .action(async (slug, options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime, slug);\n\n if (options.remove) {\n throw new Error(\n 'Organization logo removal is not exposed by the current backend API.',\n );\n }\n\n const filePath = requiredString(options.file, 'file');\n const uploadUrl = await runMutation(\n client,\n api.organizations.mutations.generateLogoUploadUrl,\n { orgSlug },\n );\n const storageId = await uploadFile(uploadUrl, filePath);\n const result = await runMutation(\n client,\n api.organizations.mutations.updateLogoWithStorageId,\n {\n orgSlug,\n storageId,\n },\n );\n printOutput(\n { ...(result ?? { success: true }), storageId, orgSlug },\n runtime.json,\n );\n });\n\norgCommand.command('members [slug]').action(async (slug, _options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime, slug);\n const members = await runQuery(\n client,\n api.organizations.queries.listMembersWithRoles,\n {\n orgSlug,\n },\n );\n printOutput(members, runtime.json);\n});\n\norgCommand.command('invites [slug]').action(async (slug, _options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime, slug);\n const invites = await runQuery(\n client,\n api.organizations.queries.listInvites,\n {\n orgSlug,\n },\n );\n printOutput(invites, runtime.json);\n});\n\norgCommand\n .command('invite [slug]')\n .requiredOption('--email <email>')\n .option('--role <role>', 'member or admin', 'member')\n .action(async (slug, options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime, slug);\n const result = await runMutation(\n client,\n api.organizations.mutations.invite,\n {\n orgSlug,\n email: options.email,\n role: options.role,\n },\n );\n printOutput(result, runtime.json);\n });\n\norgCommand\n .command('member-role <member>')\n .requiredOption('--role <role>', 'member or admin')\n .action(async (member, options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const userId = await resolveMemberId(client, orgSlug, member);\n const result = await runMutation(\n client,\n api.organizations.mutations.updateMemberRole,\n {\n orgSlug,\n userId,\n role: options.role,\n },\n );\n printOutput(result, runtime.json);\n });\n\norgCommand\n .command('remove-member <member>')\n .action(async (member, _options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const userId = await resolveMemberId(client, orgSlug, member);\n const result = await runMutation(\n client,\n api.organizations.mutations.removeMember,\n {\n orgSlug,\n userId,\n },\n );\n printOutput(result ?? { success: true }, runtime.json);\n });\n\norgCommand\n .command('revoke-invite <inviteId>')\n .action(async (inviteId, _options, command) => {\n const { client, runtime } = await getClient(command);\n const result = await runMutation(\n client,\n api.organizations.mutations.revokeInvite,\n {\n inviteId,\n },\n );\n printOutput(result ?? { success: true }, runtime.json);\n });\n\nconst roleCommand = program.command('role').description('Organization roles');\n\nroleCommand.command('list [slug]').action(async (slug, _options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime, slug);\n const roles = await runQuery(client, rolesApi.list, { orgSlug });\n printOutput(roles, runtime.json);\n});\n\nroleCommand.command('get <role>').action(async (role, _options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const roleId = await resolveRoleId(client, orgSlug, role);\n const [summary, permissions] = await Promise.all([\n runQuery(client, rolesApi.get, { orgSlug, roleId }),\n runQuery(client, rolesApi.getPermissions, { roleId }),\n ]);\n printOutput({ summary, permissions }, runtime.json);\n});\n\nroleCommand\n .command('create')\n .requiredOption('--name <name>')\n .requiredOption('--permissions <permissions>', 'Comma-separated permissions')\n .option('--description <description>')\n .action(async (options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const result = await runMutation(client, rolesApi.create, {\n orgSlug,\n name: options.name,\n description: options.description,\n permissions: parsePermissions(options.permissions),\n });\n printOutput({ roleId: result }, runtime.json);\n });\n\nroleCommand\n .command('update <role>')\n .requiredOption('--name <name>')\n .requiredOption('--permissions <permissions>', 'Comma-separated permissions')\n .option('--description <description>')\n .action(async (role, options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const roleId = await resolveRoleId(client, orgSlug, role);\n const result = await runMutation(client, rolesApi.update, {\n orgSlug,\n roleId,\n name: options.name,\n description: options.description,\n permissions: parsePermissions(options.permissions),\n });\n printOutput(result ?? { success: true }, runtime.json);\n });\n\nroleCommand\n .command('assign <role> <member>')\n .action(async (role, member, _options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const [roleId, userId] = await Promise.all([\n resolveRoleId(client, orgSlug, role),\n resolveMemberId(client, orgSlug, member),\n ]);\n const result = await runMutation(client, rolesApi.assign, {\n orgSlug,\n roleId,\n userId,\n });\n printOutput({ assignmentId: result }, runtime.json);\n });\n\nroleCommand\n .command('unassign <role> <member>')\n .action(async (role, member, _options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const [roleId, userId] = await Promise.all([\n resolveRoleId(client, orgSlug, role),\n resolveMemberId(client, orgSlug, member),\n ]);\n const result = await runMutation(client, rolesApi.removeAssignment, {\n orgSlug,\n roleId,\n userId,\n });\n printOutput(result ?? { success: true }, runtime.json);\n });\n\nconst inviteCommand = program.command('invite').description('Invitations');\n\ninviteCommand.command('list').action(async (_options, command) => {\n const { client, runtime } = await getClient(command);\n const invites = await runQuery(client, api.users.getPendingInvitations, {});\n printOutput(invites, runtime.json);\n});\n\ninviteCommand\n .command('accept <inviteId>')\n .action(async (inviteId, _options, command) => {\n const { client, runtime } = await getClient(command);\n const result = await runMutation(\n client,\n api.organizations.mutations.acceptInvitation,\n { inviteId },\n );\n printOutput(result ?? { success: true }, runtime.json);\n });\n\ninviteCommand\n .command('decline <inviteId>')\n .action(async (inviteId, _options, command) => {\n const { client, runtime } = await getClient(command);\n const result = await runMutation(\n client,\n api.organizations.mutations.declineInvitation,\n { inviteId },\n );\n printOutput(result ?? { success: true }, runtime.json);\n });\n\nprogram.command('refdata [slug]').action(async (slug, _options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime, slug);\n const result = await runAction(client, cliApi.listWorkspaceReferenceData, {\n orgSlug,\n });\n printOutput(result, runtime.json);\n});\n\nprogram\n .command('icons <query>')\n .option('--limit <n>')\n .action(async (query, options, command) => {\n const { client, runtime } = await getClient(command);\n const result = await runAction(client, cliApi.searchIcons, {\n query,\n limit: options.limit ? Number(options.limit) : undefined,\n });\n printOutput(result, runtime.json);\n });\n\nprogram\n .command('search <query>')\n .option('--limit <n>')\n .action(async (query, options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const result = await runQuery(client, api.search.queries.searchEntities, {\n orgSlug,\n query,\n limit: optionalNumber(options.limit, 'limit'),\n });\n printOutput(result, runtime.json);\n });\n\nconst permissionCommand = program\n .command('permission')\n .description('Permission checks');\n\npermissionCommand\n .command('check <permission>')\n .option('--team <teamKey>')\n .option('--project <projectKey>')\n .action(async (permission, options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const [teamId, projectId] = await Promise.all([\n resolveTeamId(client, orgSlug, options.team),\n resolveProjectId(client, orgSlug, options.project),\n ]);\n const result = await runQuery(client, api.permissions.utils.has, {\n orgSlug,\n permission,\n teamId,\n projectId,\n });\n printOutput(\n { permission, allowed: result, teamId, projectId },\n runtime.json,\n );\n });\n\npermissionCommand\n .command('check-many <permissions>')\n .option('--team <teamKey>')\n .option('--project <projectKey>')\n .action(async (permissions, options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const [teamId, projectId] = await Promise.all([\n resolveTeamId(client, orgSlug, options.team),\n resolveProjectId(client, orgSlug, options.project),\n ]);\n const permissionList = parsePermissions(permissions);\n const result = await runQuery(client, api.permissions.utils.hasMultiple, {\n orgSlug,\n permissions: permissionList,\n teamId,\n projectId,\n });\n printOutput(result, runtime.json);\n });\n\nconst activityCommand = program\n .command('activity')\n .description('Activity feed');\n\nactivityCommand\n .command('list')\n .description(\n 'List org-wide activity with optional filters by entity type, event type, and time range',\n )\n .option(\n '--entity-type <type>',\n 'Filter by entity type: issue, project, team, document',\n )\n .option(\n '--event-type <type>',\n 'Filter by event type (e.g. issue_created, issue_priority_changed)',\n )\n .option(\n '--since <datetime>',\n 'Start of time range (ISO date or shorthand: today, yesterday, 7d, 30d)',\n )\n .option(\n '--until <datetime>',\n 'End of time range (ISO date or shorthand: today, now)',\n )\n .option('--limit <n>')\n .option('--cursor <cursor>')\n .action(async (options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n\n function parseTimeArg(\n value: string | undefined,\n bound: 'start' | 'end',\n ): number | undefined {\n if (!value) return undefined;\n const now = new Date();\n const startOfToday = new Date(\n now.getFullYear(),\n now.getMonth(),\n now.getDate(),\n );\n const endOfToday = new Date(\n now.getFullYear(),\n now.getMonth(),\n now.getDate(),\n 23,\n 59,\n 59,\n 999,\n );\n switch (value) {\n case 'now':\n return now.getTime();\n case 'today':\n return bound === 'start'\n ? startOfToday.getTime()\n : endOfToday.getTime();\n case 'yesterday':\n return bound === 'start'\n ? startOfToday.getTime() - 86400000\n : startOfToday.getTime() - 1;\n default: {\n const daysMatch = value.match(/^(\\d+)d$/);\n if (daysMatch) {\n return now.getTime() - Number(daysMatch[1]) * 86400000;\n }\n const parsed = new Date(value).getTime();\n if (Number.isNaN(parsed)) {\n throw new Error(`Invalid time value: ${value}`);\n }\n return parsed;\n }\n }\n }\n\n const result = await runQuery(\n client,\n api.activities.queries.listOrgActivity,\n {\n orgSlug,\n entityType: options.entityType ?? undefined,\n eventType: options.eventType ?? undefined,\n since: parseTimeArg(options.since, 'start'),\n until: parseTimeArg(options.until, 'end'),\n limit: optionalNumber(options.limit, 'limit') ?? undefined,\n cursor: options.cursor ?? undefined,\n },\n );\n printOutput(result, runtime.json);\n });\n\nactivityCommand\n .command('project <projectKey>')\n .option('--limit <n>')\n .option('--cursor <cursor>')\n .action(async (projectKey, options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const projectId = await resolveProjectId(client, orgSlug, projectKey);\n const result = await runQuery(\n client,\n api.activities.queries.listProjectActivity,\n {\n projectId: projectId!,\n paginationOpts: buildPaginationOptions(options.limit, options.cursor),\n },\n );\n printOutput(result, runtime.json);\n });\n\nactivityCommand\n .command('team <teamKey>')\n .option('--limit <n>')\n .option('--cursor <cursor>')\n .action(async (teamKey, options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const teamId = await resolveTeamId(client, orgSlug, teamKey);\n const result = await runQuery(\n client,\n api.activities.queries.listTeamActivity,\n {\n teamId: teamId!,\n paginationOpts: buildPaginationOptions(options.limit, options.cursor),\n },\n );\n printOutput(result, runtime.json);\n });\n\nactivityCommand\n .command('issue <issueKey>')\n .option('--limit <n>')\n .option('--cursor <cursor>')\n .action(async (issueKey, options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const issueId = await resolveIssueId(client, orgSlug, issueKey);\n const result = await runQuery(\n client,\n api.activities.queries.listIssueActivity,\n {\n issueId,\n paginationOpts: buildPaginationOptions(options.limit, options.cursor),\n },\n );\n printOutput(result, runtime.json);\n });\n\nactivityCommand\n .command('document <documentId>')\n .option('--limit <n>')\n .option('--cursor <cursor>')\n .action(async (documentId, options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const resolvedDocumentId = await resolveDocumentId(\n client,\n orgSlug,\n documentId,\n );\n const result = await runQuery(\n client,\n api.activities.queries.listDocumentActivity,\n {\n documentId: resolvedDocumentId,\n paginationOpts: buildPaginationOptions(options.limit, options.cursor),\n },\n );\n printOutput(result, runtime.json);\n });\n\nconst notificationCommand = program\n .command('notification')\n .description('Notifications');\n\nnotificationCommand\n .command('inbox')\n .option('--filter <filter>', 'all or unread')\n .option('--limit <n>')\n .option('--cursor <cursor>')\n .action(async (options, command) => {\n const { client, runtime } = await getClient(command);\n const result = await runQuery(client, api.notifications.queries.listInbox, {\n filter: options.filter,\n paginationOpts: buildPaginationOptions(options.limit, options.cursor),\n });\n printOutput(result, runtime.json);\n });\n\nnotificationCommand\n .command('unread-count')\n .action(async (_options, command) => {\n const { client, runtime } = await getClient(command);\n const result = await runQuery(\n client,\n api.notifications.queries.unreadCount,\n {},\n );\n printOutput({ unreadCount: result }, runtime.json);\n });\n\nnotificationCommand\n .command('mark-read <recipientId>')\n .action(async (recipientId, _options, command) => {\n const { client, runtime } = await getClient(command);\n const result = await runMutation(\n client,\n api.notifications.mutations.markRead,\n {\n recipientId,\n },\n );\n printOutput(result, runtime.json);\n });\n\nnotificationCommand\n .command('mark-all-read')\n .action(async (_options, command) => {\n const { client, runtime } = await getClient(command);\n const result = await runMutation(\n client,\n api.notifications.mutations.markAllRead,\n {},\n );\n printOutput(result, runtime.json);\n });\n\nnotificationCommand\n .command('archive <recipientId>')\n .action(async (recipientId, _options, command) => {\n const { client, runtime } = await getClient(command);\n const result = await runMutation(\n client,\n api.notifications.mutations.archive,\n {\n recipientId,\n },\n );\n printOutput(result, runtime.json);\n });\n\nnotificationCommand.command('preferences').action(async (_options, command) => {\n const { client, runtime } = await getClient(command);\n const result = await runQuery(\n client,\n api.notifications.queries.getPreferences,\n {},\n );\n printOutput(result, runtime.json);\n});\n\nnotificationCommand\n .command('set-preference <category>')\n .requiredOption('--in-app <true|false>')\n .requiredOption('--email <true|false>')\n .requiredOption('--push <true|false>')\n .action(async (category, options, command) => {\n const { client, runtime } = await getClient(command);\n if (!NOTIFICATION_CATEGORIES.includes(category)) {\n throw new Error(\n `category must be one of: ${NOTIFICATION_CATEGORIES.join(', ')}`,\n );\n }\n const result = await runMutation(\n client,\n api.notifications.mutations.updatePreferences,\n {\n category,\n inAppEnabled: parseBoolean(options.inApp, 'in-app'),\n emailEnabled: parseBoolean(options.email, 'email'),\n pushEnabled: parseBoolean(options.push, 'push'),\n },\n );\n printOutput(result, runtime.json);\n });\n\nnotificationCommand\n .command('subscriptions')\n .action(async (_options, command) => {\n const { client, runtime } = await getClient(command);\n const result = await runQuery(\n client,\n api.notifications.queries.listPushSubscriptions,\n {},\n );\n printOutput(result, runtime.json);\n });\n\nnotificationCommand\n .command('remove-subscription <subscriptionId>')\n .action(async (subscriptionId, _options, command) => {\n const { client, runtime } = await getClient(command);\n const result = await runMutation(\n client,\n api.notifications.mutations.removePushSubscription,\n { subscriptionId },\n );\n printOutput(result, runtime.json);\n });\n\nconst priorityCommand = program\n .command('priority')\n .description('Issue priorities');\n\npriorityCommand\n .command('list [slug]')\n .action(async (slug, _options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime, slug);\n const result = await runQuery(\n client,\n api.organizations.queries.listIssuePriorities,\n { orgSlug },\n );\n printOutput(result, runtime.json);\n });\n\npriorityCommand\n .command('create')\n .requiredOption('--name <name>')\n .requiredOption('--weight <n>')\n .requiredOption('--color <hex>')\n .option('--icon <icon>')\n .action(async (options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const result = await runMutation(\n client,\n api.organizations.mutations.createIssuePriority,\n {\n orgSlug,\n name: options.name,\n weight: requiredNumber(options.weight, 'weight'),\n color: options.color,\n icon: options.icon,\n },\n );\n printOutput(result, runtime.json);\n });\n\npriorityCommand\n .command('update <priority>')\n .requiredOption('--name <name>')\n .requiredOption('--color <hex>')\n .option('--weight <n>')\n .option('--icon <icon>')\n .action(async (priority, options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const priorityId = await resolveIssuePriorityId(client, orgSlug, priority);\n const result = await runMutation(\n client,\n api.organizations.mutations.updateIssuePriority,\n {\n orgSlug,\n priorityId,\n name: options.name,\n weight: optionalNumber(options.weight, 'weight'),\n color: options.color,\n icon: options.icon,\n },\n );\n printOutput(result ?? { success: true }, runtime.json);\n });\n\npriorityCommand\n .command('delete <priority>')\n .action(async (priority, _options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const priorityId = await resolveIssuePriorityId(client, orgSlug, priority);\n const result = await runMutation(\n client,\n api.organizations.mutations.deleteIssuePriority,\n {\n orgSlug,\n priorityId,\n },\n );\n printOutput(result ?? { success: true }, runtime.json);\n });\n\npriorityCommand\n .command('reset [slug]')\n .action(async (slug, _options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime, slug);\n const result = await runMutation(\n client,\n api.organizations.mutations.resetIssuePriorities,\n { orgSlug },\n );\n printOutput(result ?? { success: true }, runtime.json);\n });\n\nconst stateCommand = program.command('state').description('Issue states');\n\nstateCommand.command('list [slug]').action(async (slug, _options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime, slug);\n const result = await runQuery(\n client,\n api.organizations.queries.listIssueStates,\n {\n orgSlug,\n },\n );\n printOutput(result, runtime.json);\n});\n\nstateCommand\n .command('create')\n .requiredOption('--name <name>')\n .requiredOption('--position <n>')\n .requiredOption('--type <type>')\n .requiredOption('--color <hex>')\n .option('--icon <icon>')\n .action(async (options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n if (!ISSUE_STATE_TYPES.includes(options.type)) {\n throw new Error(`type must be one of: ${ISSUE_STATE_TYPES.join(', ')}`);\n }\n const result = await runMutation(\n client,\n api.organizations.mutations.createIssueState,\n {\n orgSlug,\n name: options.name,\n position: requiredNumber(options.position, 'position'),\n type: options.type,\n color: options.color,\n icon: options.icon,\n },\n );\n printOutput(result, runtime.json);\n });\n\nstateCommand\n .command('update <state>')\n .requiredOption('--name <name>')\n .requiredOption('--position <n>')\n .requiredOption('--type <type>')\n .requiredOption('--color <hex>')\n .option('--icon <icon>')\n .action(async (state, options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n if (!ISSUE_STATE_TYPES.includes(options.type)) {\n throw new Error(`type must be one of: ${ISSUE_STATE_TYPES.join(', ')}`);\n }\n const stateId = await resolveIssueStateId(client, orgSlug, state);\n const result = await runMutation(\n client,\n api.organizations.mutations.updateIssueState,\n {\n orgSlug,\n stateId,\n name: options.name,\n position: requiredNumber(options.position, 'position'),\n type: options.type,\n color: options.color,\n icon: options.icon,\n },\n );\n printOutput(result ?? { success: true }, runtime.json);\n });\n\nstateCommand\n .command('delete <state>')\n .action(async (state, _options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const stateId = await resolveIssueStateId(client, orgSlug, state);\n const result = await runMutation(\n client,\n api.organizations.mutations.deleteIssueState,\n {\n orgSlug,\n stateId,\n },\n );\n printOutput(result ?? { success: true }, runtime.json);\n });\n\nstateCommand.command('reset [slug]').action(async (slug, _options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime, slug);\n const result = await runMutation(\n client,\n api.organizations.mutations.resetIssueStates,\n { orgSlug },\n );\n printOutput(result ?? { success: true }, runtime.json);\n});\n\nconst statusCommand = program.command('status').description('Project statuses');\n\nstatusCommand.command('list [slug]').action(async (slug, _options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime, slug);\n const result = await runQuery(\n client,\n api.organizations.queries.listProjectStatuses,\n { orgSlug },\n );\n printOutput(result, runtime.json);\n});\n\nstatusCommand\n .command('create')\n .requiredOption('--name <name>')\n .requiredOption('--position <n>')\n .requiredOption('--type <type>')\n .requiredOption('--color <hex>')\n .option('--icon <icon>')\n .action(async (options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n if (!PROJECT_STATUS_TYPES.includes(options.type)) {\n throw new Error(\n `type must be one of: ${PROJECT_STATUS_TYPES.join(', ')}`,\n );\n }\n const result = await runMutation(\n client,\n api.organizations.mutations.createProjectStatus,\n {\n orgSlug,\n name: options.name,\n position: requiredNumber(options.position, 'position'),\n type: options.type,\n color: options.color,\n icon: options.icon,\n },\n );\n printOutput(result, runtime.json);\n });\n\nstatusCommand\n .command('update <status>')\n .requiredOption('--name <name>')\n .requiredOption('--position <n>')\n .requiredOption('--type <type>')\n .requiredOption('--color <hex>')\n .option('--icon <icon>')\n .action(async (status, options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n if (!PROJECT_STATUS_TYPES.includes(options.type)) {\n throw new Error(\n `type must be one of: ${PROJECT_STATUS_TYPES.join(', ')}`,\n );\n }\n const statusId = await resolveProjectStatusId(client, orgSlug, status);\n const result = await runMutation(\n client,\n api.organizations.mutations.updateProjectStatus,\n {\n orgSlug,\n statusId,\n name: options.name,\n position: requiredNumber(options.position, 'position'),\n type: options.type,\n color: options.color,\n icon: options.icon,\n },\n );\n printOutput(result ?? { success: true }, runtime.json);\n });\n\nstatusCommand\n .command('delete <status>')\n .action(async (status, _options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const statusId = await resolveProjectStatusId(client, orgSlug, status);\n const result = await runMutation(\n client,\n api.organizations.mutations.deleteProjectStatus,\n {\n orgSlug,\n statusId,\n },\n );\n printOutput(result ?? { success: true }, runtime.json);\n });\n\nstatusCommand\n .command('reset [slug]')\n .action(async (slug, _options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime, slug);\n const result = await runMutation(\n client,\n api.organizations.mutations.resetProjectStatuses,\n { orgSlug },\n );\n printOutput(result ?? { success: true }, runtime.json);\n });\n\nconst adminCommand = program.command('admin').description('Platform admin');\n\nadminCommand.command('branding').action(async (_options, command) => {\n const { client, runtime } = await getClient(command);\n const result = await runQuery(\n client,\n api.platformAdmin.queries.getBranding,\n {},\n );\n printOutput(result, runtime.json);\n});\n\nadminCommand\n .command('set-branding')\n .option('--name <name>')\n .option('--description <description>')\n .option('--theme-color <hex>')\n .option('--accent-color <hex>')\n .option('--logo <path>')\n .option('--remove-logo')\n .action(async (options, command) => {\n const { client, runtime } = await getClient(command);\n let logoStorageId: Id<'_storage'> | undefined;\n if (options.logo) {\n const uploadUrl = await runMutation(\n client,\n api.platformAdmin.mutations.generateBrandLogoUploadUrl,\n {},\n );\n logoStorageId = await uploadFile(uploadUrl, options.logo);\n }\n\n const result = await runMutation(\n client,\n api.platformAdmin.mutations.updateBranding,\n {\n name: options.name,\n description: options.description,\n logoStorageId,\n removeLogo: options.removeLogo ? true : undefined,\n themeColor: options.themeColor,\n accentColor: options.accentColor,\n },\n );\n printOutput(\n {\n ...(result ?? { success: true }),\n logoStorageId: logoStorageId ?? null,\n },\n runtime.json,\n );\n });\n\nadminCommand.command('signup-policy').action(async (_options, command) => {\n const { client, runtime } = await getClient(command);\n const result = await runQuery(\n client,\n api.platformAdmin.queries.getSignupPolicy,\n {},\n );\n printOutput(result, runtime.json);\n});\n\nadminCommand\n .command('set-signup-policy')\n .option('--blocked <domains>')\n .option('--allowed <domains>')\n .action(async (options, command) => {\n const { client, runtime } = await getClient(command);\n const result = await runMutation(\n client,\n api.platformAdmin.mutations.updateSignupEmailDomainPolicy,\n {\n blockedDomains: parseList(options.blocked),\n allowedDomains: parseList(options.allowed),\n },\n );\n printOutput(result ?? { success: true }, runtime.json);\n });\n\nadminCommand\n .command('sync-disposable-domains')\n .action(async (_options, command) => {\n const { client, runtime } = await getClient(command);\n const result = await runAction(\n client,\n api.platformAdmin.actions.runDisposableDomainSyncNow,\n {},\n );\n printOutput(result, runtime.json);\n });\n\nconst teamCommand = program.command('team').description('Teams');\n\nteamCommand\n .command('list [slug]')\n .option('--limit <n>')\n .option('--created-after <date>', 'Filter: created on or after date (ISO)')\n .option('--created-before <date>', 'Filter: created on or before date (ISO)')\n .option('--sort <field>', 'Sort by field (e.g. createdAt, name, key)')\n .option('--order <direction>', 'Sort order: asc or desc (default: asc)')\n .action(async (slug, options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime, slug);\n const raw = await runAction(client, cliApi.listTeams, {\n orgSlug,\n });\n const filtered = applyListFilters(raw, options);\n const result = addEntityUrls(filtered, runtime.appUrl, orgSlug, 'teams');\n printOutput(result, runtime.json);\n });\n\nteamCommand\n .command('get <teamKey>')\n .action(async (teamKey, _options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const result = await runAction(client, cliApi.getTeam, {\n orgSlug,\n teamKey,\n });\n printOutput(result, runtime.json);\n });\n\nteamCommand\n .command('create')\n .requiredOption('--key <key>')\n .requiredOption('--name <name>')\n .option('--description <description>')\n .option('--visibility <visibility>')\n .option('--icon <icon>')\n .option('--color <color>')\n .action(async (options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const result = await runAction(client, cliApi.createTeam, {\n orgSlug,\n key: options.key,\n name: options.name,\n description: options.description,\n visibility: options.visibility,\n icon: options.icon,\n color: options.color,\n });\n printOutput(result, runtime.json);\n });\n\nteamCommand\n .command('update <teamKey>')\n .option('--name <name>')\n .option('--description <description>')\n .option('--clear-description')\n .option('--visibility <visibility>')\n .option('--icon <icon>')\n .option('--clear-icon')\n .option('--color <color>')\n .option('--clear-color')\n .action(async (teamKey, options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const result = await runAction(client, cliApi.updateTeam, {\n orgSlug,\n teamKey,\n name: options.name,\n description: nullableOption(\n options.description,\n options.clearDescription,\n ),\n visibility: options.visibility,\n icon: nullableOption(options.icon, options.clearIcon),\n color: nullableOption(options.color, options.clearColor),\n });\n printOutput(result, runtime.json);\n });\n\nteamCommand\n .command('delete <teamKey>')\n .action(async (teamKey, _options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const result = await runAction(client, cliApi.deleteTeam, {\n orgSlug,\n teamKey,\n });\n printOutput(result, runtime.json);\n });\n\nteamCommand\n .command('members <teamKey>')\n .action(async (teamKey, _options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const team = await runAction(client, cliApi.getTeam, { orgSlug, teamKey });\n const result = await runQuery(client, api.teams.queries.listMembers, {\n teamId: team.id as any,\n });\n printOutput(result, runtime.json);\n });\n\nteamCommand\n .command('add-member <teamKey> <member>')\n .option('--role <role>', 'member or lead', 'member')\n .action(async (teamKey, member, options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const result = await runAction(client, cliApi.addTeamMember, {\n orgSlug,\n teamKey,\n memberName: member,\n role: options.role,\n });\n printOutput(result, runtime.json);\n });\n\nteamCommand\n .command('remove-member <teamKey> <member>')\n .action(async (teamKey, member, _options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const result = await runAction(client, cliApi.removeTeamMember, {\n orgSlug,\n teamKey,\n memberName: member,\n });\n printOutput(result, runtime.json);\n });\n\nteamCommand\n .command('set-lead <teamKey> <member>')\n .action(async (teamKey, member, _options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const leadName = member === 'null' ? null : member;\n const result = await runAction(client, cliApi.changeTeamLead, {\n orgSlug,\n teamKey,\n leadName,\n });\n printOutput(result, runtime.json);\n });\n\nconst projectCommand = program.command('project').description('Projects');\n\nprojectCommand\n .command('list [slug]')\n .option('--team <teamKey>')\n .option('--limit <n>')\n .option('--created-after <date>', 'Filter: created on or after date (ISO)')\n .option('--created-before <date>', 'Filter: created on or before date (ISO)')\n .option('--sort <field>', 'Sort by field (e.g. createdAt, name, key)')\n .option('--order <direction>', 'Sort order: asc or desc (default: asc)')\n .action(async (slug, options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime, slug);\n const raw = await runAction(client, cliApi.listProjects, {\n orgSlug,\n teamKey: options.team,\n });\n const filtered = applyListFilters(raw, options);\n const result = addEntityUrls(filtered, runtime.appUrl, orgSlug, 'projects');\n printOutput(result, runtime.json);\n });\n\nprojectCommand\n .command('get <projectKey>')\n .action(async (projectKey, _options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const result = await runAction(client, cliApi.getProject, {\n orgSlug,\n projectKey,\n });\n printOutput(result, runtime.json);\n });\n\nprojectCommand\n .command('create')\n .requiredOption('--key <key>')\n .requiredOption('--name <name>')\n .option('--description <description>')\n .option('--team <teamKey>')\n .option('--status <statusName>')\n .option('--visibility <visibility>')\n .option('--icon <icon>')\n .option('--color <color>')\n .action(async (options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const result = await runAction(client, cliApi.createProject, {\n orgSlug,\n key: options.key,\n name: options.name,\n description: options.description,\n teamKey: options.team,\n statusName: options.status,\n visibility: options.visibility,\n icon: options.icon,\n color: options.color,\n });\n printOutput(result, runtime.json);\n });\n\nprojectCommand\n .command('update <projectKey>')\n .option('--name <name>')\n .option('--description <description>')\n .option('--team <teamKey>')\n .option('--clear-team')\n .option('--status <statusName>')\n .option('--clear-status')\n .option('--visibility <visibility>')\n .option('--start-date <date>')\n .option('--clear-start-date')\n .option('--due-date <date>')\n .option('--clear-due-date')\n .option('--icon <icon>')\n .option('--clear-icon')\n .option('--color <color>')\n .option('--clear-color')\n .action(async (projectKey, options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const result = await runAction(client, cliApi.updateProject, {\n orgSlug,\n projectKey,\n name: options.name,\n description: options.description,\n teamKey: nullableOption(options.team, options.clearTeam),\n statusName: nullableOption(options.status, options.clearStatus),\n visibility: options.visibility,\n startDate: nullableOption(options.startDate, options.clearStartDate),\n dueDate: nullableOption(options.dueDate, options.clearDueDate),\n icon: nullableOption(options.icon, options.clearIcon),\n color: nullableOption(options.color, options.clearColor),\n });\n printOutput(result, runtime.json);\n });\n\nprojectCommand\n .command('delete <projectKey>')\n .action(async (projectKey, _options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const result = await runAction(client, cliApi.deleteProject, {\n orgSlug,\n projectKey,\n });\n printOutput(result, runtime.json);\n });\n\nprojectCommand\n .command('members <projectKey>')\n .action(async (projectKey, _options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const project = await runAction(client, cliApi.getProject, {\n orgSlug,\n projectKey,\n });\n const result = await runQuery(client, api.projects.queries.listMembers, {\n projectId: project.id as any,\n });\n printOutput(result, runtime.json);\n });\n\nprojectCommand\n .command('add-member <projectKey> <member>')\n .option('--role <role>', 'member or lead', 'member')\n .action(async (projectKey, member, options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const result = await runAction(client, cliApi.addProjectMember, {\n orgSlug,\n projectKey,\n memberName: member,\n role: options.role,\n });\n printOutput(result, runtime.json);\n });\n\nprojectCommand\n .command('remove-member <projectKey> <member>')\n .action(async (projectKey, member, _options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const result = await runAction(client, cliApi.removeProjectMember, {\n orgSlug,\n projectKey,\n memberName: member,\n });\n printOutput(result, runtime.json);\n });\n\nprojectCommand\n .command('set-lead <projectKey> <member>')\n .action(async (projectKey, member, _options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const leadName = member === 'null' ? null : member;\n const result = await runAction(client, cliApi.changeProjectLead, {\n orgSlug,\n projectKey,\n leadName,\n });\n printOutput(result, runtime.json);\n });\n\nconst issueCommand = program.command('issue').description('Issues');\n\nissueCommand\n .command('list [slug]')\n .option('--project <projectKey>')\n .option('--team <teamKey>')\n .option('--assignee <name>', 'Filter by assignee name or email')\n .option('--limit <n>')\n .option('--created-after <date>', 'Filter: created on or after date (ISO)')\n .option('--created-before <date>', 'Filter: created on or before date (ISO)')\n .option('--sort <field>', 'Sort by field (e.g. createdAt, title, key)')\n .option('--order <direction>', 'Sort order: asc or desc (default: asc)')\n .action(async (slug, options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime, slug);\n const raw = await runAction(client, cliApi.listIssues, {\n orgSlug,\n projectKey: options.project,\n teamKey: options.team,\n assigneeName: options.assignee,\n });\n const filtered = applyListFilters(raw, options);\n const result = addEntityUrls(filtered, runtime.appUrl, orgSlug, 'issues');\n printOutput(result, runtime.json);\n });\n\nissueCommand\n .command('get <issueKey>')\n .action(async (issueKey, _options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const result = await runAction(client, cliApi.getIssue, {\n orgSlug,\n issueKey,\n });\n printOutput(result, runtime.json);\n });\n\nissueCommand\n .command('create')\n .requiredOption('--title <title>')\n .option('--description <description>')\n .option('--project <projectKey>')\n .option('--team <teamKey>')\n .option('--priority <priorityName>')\n .option('--visibility <visibility>')\n .option('--assignee <member>')\n .option('--state <stateName>')\n .option('--start-date <date>')\n .option('--due-date <date>')\n .option('--parent <issueKey>')\n .action(async (options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const result = await runAction(client, cliApi.createIssue, {\n orgSlug,\n title: options.title,\n description: options.description,\n projectKey: options.project,\n teamKey: options.team,\n priorityName: options.priority,\n visibility: options.visibility,\n assigneeName: options.assignee,\n stateName: options.state,\n startDate: options.startDate,\n dueDate: options.dueDate,\n parentIssueKey: options.parent,\n });\n printOutput(result, runtime.json);\n });\n\nissueCommand\n .command('update <issueKey>')\n .option('--title <title>')\n .option('--description <description>')\n .option('--priority <priorityName>')\n .option('--clear-priority')\n .option('--team <teamKey>')\n .option('--clear-team')\n .option('--project <projectKey>')\n .option('--clear-project')\n .option('--visibility <visibility>')\n .option('--assignee <member>')\n .option('--clear-assignee')\n .option('--state <stateName>')\n .option('--start-date <date>')\n .option('--clear-start-date')\n .option('--due-date <date>')\n .option('--clear-due-date')\n .option('--parent <issueKey>')\n .option('--clear-parent')\n .action(async (issueKey, options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const result = await runAction(client, cliApi.updateIssue, {\n orgSlug,\n issueKey,\n title: options.title,\n description: options.description,\n priorityName: nullableOption(options.priority, options.clearPriority),\n teamKey: nullableOption(options.team, options.clearTeam),\n projectKey: nullableOption(options.project, options.clearProject),\n visibility: options.visibility,\n assigneeName: nullableOption(options.assignee, options.clearAssignee),\n stateName: options.state,\n startDate: nullableOption(options.startDate, options.clearStartDate),\n dueDate: nullableOption(options.dueDate, options.clearDueDate),\n parentIssueKey: nullableOption(options.parent, options.clearParent),\n });\n printOutput(result, runtime.json);\n });\n\nissueCommand\n .command('delete <issueKey>')\n .action(async (issueKey, _options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const result = await runAction(client, cliApi.deleteIssue, {\n orgSlug,\n issueKey,\n });\n printOutput(result, runtime.json);\n });\n\nissueCommand\n .command('assign <issueKey> <member>')\n .option('--state <stateName>')\n .action(async (issueKey, member, options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const result = await runAction(client, cliApi.assignIssue, {\n orgSlug,\n issueKey,\n assigneeName: member,\n stateName: options.state,\n });\n printOutput(result, runtime.json);\n });\n\nissueCommand\n .command('unassign <issueKey> <member>')\n .action(async (issueKey, member, _options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const result = await runAction(client, cliApi.unassignIssue, {\n orgSlug,\n issueKey,\n assigneeName: member,\n });\n printOutput(result, runtime.json);\n });\n\nissueCommand\n .command('assignments <issueKey>')\n .action(async (issueKey, _options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const issueId = await resolveIssueId(client, orgSlug, issueKey);\n const result = await runQuery(client, api.issues.queries.getAssignments, {\n issueId,\n });\n printOutput(result, runtime.json);\n });\n\nissueCommand\n .command('set-assignment-state <assignmentId> <state>')\n .action(async (assignmentId, state, _options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const stateId = await resolveIssueStateId(client, orgSlug, state);\n const result = await runMutation(\n client,\n api.issues.mutations.changeAssignmentState,\n {\n assignmentId,\n stateId,\n },\n );\n printOutput(result ?? { success: true }, runtime.json);\n });\n\nissueCommand\n .command('reassign-assignment <assignmentId> <member>')\n .action(async (assignmentId, member, _options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const assigneeId = await resolveMemberId(client, orgSlug, member);\n const result = await runMutation(\n client,\n api.issues.mutations.updateAssignmentAssignee,\n {\n assignmentId,\n assigneeId,\n },\n );\n printOutput(result ?? { success: true }, runtime.json);\n });\n\nissueCommand\n .command('remove-assignment <assignmentId>')\n .action(async (assignmentId, _options, command) => {\n const { client, runtime } = await getClient(command);\n const result = await runMutation(\n client,\n api.issues.mutations.deleteAssignment,\n {\n assignmentId,\n },\n );\n printOutput(result ?? { success: true }, runtime.json);\n });\n\nissueCommand\n .command('set-priority <issueKey> <priority>')\n .action(async (issueKey, priority, _options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const [issueId, priorityId] = await Promise.all([\n resolveIssueId(client, orgSlug, issueKey),\n resolveIssuePriorityId(client, orgSlug, priority),\n ]);\n const result = await runMutation(\n client,\n api.issues.mutations.changePriority,\n {\n issueId,\n priorityId,\n },\n );\n printOutput(result ?? { success: true }, runtime.json);\n });\n\nissueCommand\n .command('replace-assignees <issueKey> <members>')\n .action(async (issueKey, members, _options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const issueId = await resolveIssueId(client, orgSlug, issueKey);\n const assigneeIds = await Promise.all(\n parseList(members).map(member =>\n resolveMemberId(client, orgSlug, member),\n ),\n );\n const result = await runMutation(\n client,\n api.issues.mutations.updateAssignees,\n {\n issueId,\n assigneeIds,\n },\n );\n printOutput(result ?? { success: true }, runtime.json);\n });\n\nissueCommand\n .command('set-estimates <issueKey>')\n .requiredOption('--values <state=hours,...>')\n .action(async (issueKey, options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const issueId = await resolveIssueId(client, orgSlug, issueKey);\n const estimatedTimes = await parseEstimatedTimes(\n client,\n orgSlug,\n options.values,\n );\n const result = await runMutation(\n client,\n api.issues.mutations.updateEstimatedTimes,\n {\n issueId,\n estimatedTimes,\n },\n );\n printOutput(result ?? { success: true }, runtime.json);\n });\n\nissueCommand\n .command('comment <issueKey>')\n .requiredOption('--body <body>')\n .action(async (issueKey, options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const issue = await runAction(client, cliApi.getIssue, {\n orgSlug,\n issueKey,\n });\n const result = await runMutation(client, api.issues.mutations.addComment, {\n issueId: issue.id as any,\n body: options.body,\n });\n printOutput(result, runtime.json);\n });\n\nissueCommand\n .command('link-github <issueKey> <url>')\n .description('Link a GitHub pull request, issue, or commit URL to an issue')\n .action(async (issueKey, url, _options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n await runAction(client, api.github.actions.linkArtifactByUrl, {\n orgSlug,\n issueKey,\n url,\n });\n printOutput({ success: true, issueKey, url }, runtime.json);\n });\n\nconst documentCommand = program.command('document').description('Documents');\n\ndocumentCommand\n .command('list [slug]')\n .option('--folder-id <id>')\n .option('--limit <n>')\n .option('--created-after <date>', 'Filter: created on or after date (ISO)')\n .option('--created-before <date>', 'Filter: created on or before date (ISO)')\n .option(\n '--updated-after <date>',\n 'Filter: last edited on or after date (ISO)',\n )\n .option(\n '--updated-before <date>',\n 'Filter: last edited on or before date (ISO)',\n )\n .option(\n '--sort <field>',\n 'Sort by field (e.g. createdAt, title, lastEditedAt)',\n )\n .option('--order <direction>', 'Sort order: asc or desc (default: asc)')\n .action(async (slug, options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime, slug);\n const raw = await runAction(client, cliApi.listDocuments, {\n orgSlug,\n folderId: options.folderId,\n });\n const filtered = applyListFilters(raw, options);\n const result = addEntityUrls(\n filtered,\n runtime.appUrl,\n orgSlug,\n 'documents',\n );\n printOutput(result, runtime.json);\n });\n\ndocumentCommand\n .command('get <documentId>')\n .action(async (documentId, _options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const result = await runAction(client, cliApi.getDocument, {\n orgSlug,\n documentId,\n });\n printOutput(result, runtime.json);\n });\n\ndocumentCommand\n .command('create')\n .requiredOption('--title <title>')\n .option('--content <content>')\n .option('--team <teamKey>')\n .option('--project <projectKey>')\n .option('--folder-id <id>')\n .option('--visibility <visibility>')\n .option('--icon <icon>')\n .option('--color <color>')\n .action(async (options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const result = await runAction(client, cliApi.createDocument, {\n orgSlug,\n title: options.title,\n content: options.content,\n teamKey: options.team,\n projectKey: options.project,\n folderId: options.folderId,\n visibility: options.visibility,\n icon: options.icon,\n color: options.color,\n });\n printOutput(result, runtime.json);\n });\n\ndocumentCommand\n .command('update <documentId>')\n .option('--title <title>')\n .option('--content <content>')\n .option('--team <teamKey>')\n .option('--clear-team')\n .option('--project <projectKey>')\n .option('--clear-project')\n .option('--folder-id <id>')\n .option('--clear-folder')\n .option('--visibility <visibility>')\n .option('--icon <icon>')\n .option('--clear-icon')\n .option('--color <color>')\n .option('--clear-color')\n .action(async (documentId, options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const result = await runAction(client, cliApi.updateDocument, {\n orgSlug,\n documentId,\n title: options.title,\n content: options.content,\n teamKey: nullableOption(options.team, options.clearTeam),\n projectKey: nullableOption(options.project, options.clearProject),\n folderId: nullableOption(options.folderId, options.clearFolder),\n visibility: options.visibility,\n icon: nullableOption(options.icon, options.clearIcon),\n color: nullableOption(options.color, options.clearColor),\n });\n printOutput(result, runtime.json);\n });\n\ndocumentCommand\n .command('move <documentId>')\n .option('--folder-id <id>')\n .option('--clear-folder')\n .action(async (documentId, options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const folderId = options.clearFolder\n ? null\n : requiredString(options.folderId, 'folder-id');\n const result = await runAction(client, cliApi.moveDocumentToFolder, {\n orgSlug,\n documentId,\n folderId,\n });\n printOutput(result, runtime.json);\n });\n\ndocumentCommand\n .command('delete <documentId>')\n .action(async (documentId, _options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const result = await runAction(client, cliApi.deleteDocument, {\n orgSlug,\n documentId,\n });\n printOutput(result, runtime.json);\n });\n\nconst folderCommand = program.command('folder').description('Document folders');\n\nfolderCommand\n .command('list [slug]')\n .option('--limit <n>')\n .option('--created-after <date>', 'Filter: created on or after date (ISO)')\n .option('--created-before <date>', 'Filter: created on or before date (ISO)')\n .option('--sort <field>', 'Sort by field (e.g. createdAt, name)')\n .option('--order <direction>', 'Sort order: asc or desc (default: asc)')\n .action(async (slug, options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime, slug);\n const raw = await runAction(client, cliApi.listFolders, { orgSlug });\n const filtered = applyListFilters(raw, options);\n const result = addEntityUrls(filtered, runtime.appUrl, orgSlug, 'folders');\n printOutput(result, runtime.json);\n });\n\nfolderCommand\n .command('create')\n .requiredOption('--name <name>')\n .option('--description <description>')\n .option('--icon <icon>')\n .option('--color <color>')\n .action(async (options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const result = await runAction(client, cliApi.createFolder, {\n orgSlug,\n name: options.name,\n description: options.description,\n icon: options.icon,\n color: options.color,\n });\n printOutput(result, runtime.json);\n });\n\nfolderCommand\n .command('update <folderId>')\n .option('--name <name>')\n .option('--description <description>')\n .option('--clear-description')\n .option('--icon <icon>')\n .option('--clear-icon')\n .option('--color <color>')\n .option('--clear-color')\n .action(async (folderId, options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const result = await runAction(client, cliApi.updateFolder, {\n orgSlug,\n folderId,\n name: options.name,\n description: nullableOption(\n options.description,\n options.clearDescription,\n ),\n icon: nullableOption(options.icon, options.clearIcon),\n color: nullableOption(options.color, options.clearColor),\n });\n printOutput(result, runtime.json);\n });\n\nfolderCommand\n .command('delete <folderId>')\n .action(async (folderId, _options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const result = await runAction(client, cliApi.deleteFolder, {\n orgSlug,\n folderId,\n });\n printOutput(result, runtime.json);\n });\n\n// ═══════════════════════════════════════════════════════════════════════════════\n// Agent Bridge Service\n// ═══════════════════════════════════════════════════════════════════════════════\n\nimport {\n BridgeService,\n getBridgeStatus,\n installLaunchAgent,\n launchMenuBar,\n loadBridgeConfig,\n loadLaunchAgent,\n saveBridgeConfig,\n setupBridgeDevice,\n stopBridge,\n stopMenuBar,\n uninstallLaunchAgent,\n unloadLaunchAgent,\n} from './bridge-service';\nimport { platform as osPlatform } from 'os';\n\nconst VECTOR_HOME =\n process.env.VECTOR_HOME?.trim() || `${process.env.HOME ?? '~'}/.vector`;\n\nconst serviceCommand = program\n .command('service')\n .description('Manage the local bridge service');\n\nserviceCommand\n .command('start')\n .description('Start the bridge service via LaunchAgent (macOS) or foreground')\n .action(async (_options, command) => {\n // Check if already running\n const existing = getBridgeStatus();\n if (existing.running) {\n console.log(`Bridge is already running (PID ${existing.pid}).`);\n return;\n }\n\n const { spinner } = await import('@clack/prompts');\n const s = spinner();\n\n s.start('Ensuring device registration...');\n const config = await ensureBridgeConfig(command);\n s.stop(`Device ready: ${config.displayName}`);\n\n if (osPlatform() === 'darwin') {\n s.start('Starting bridge service...');\n const vcliPath = process.argv[1] ?? 'vcli';\n installLaunchAgent(vcliPath);\n loadLaunchAgent();\n s.stop('Bridge service started.');\n } else {\n // Linux / other: run in foreground\n console.log(\n 'Starting bridge in foreground (use systemd for background)...',\n );\n const bridge = new BridgeService(config);\n await bridge.run();\n }\n });\n\nserviceCommand\n .command('run')\n .description('Run the bridge service in the foreground (used by LaunchAgent)')\n .action(async (_options, command) => {\n const config = await ensureBridgeConfig(command);\n\n if (osPlatform() === 'darwin') {\n await launchMenuBar();\n }\n\n const bridge = new BridgeService(config);\n await bridge.run();\n });\n\nserviceCommand\n .command('stop')\n .description('Stop the bridge service')\n .action(() => {\n let unloaded = false;\n if (osPlatform() === 'darwin') {\n unloaded = unloadLaunchAgent();\n }\n if (stopBridge() || unloaded) {\n console.log('Bridge stopped.');\n } else if (osPlatform() !== 'darwin') {\n console.log('Bridge is not running.');\n } else {\n console.log('Bridge is not running.');\n }\n });\n\nserviceCommand\n .command('status')\n .description('Show bridge service status')\n .action((_options, command) => {\n const status = getBridgeStatus();\n if (!status.configured) {\n console.log('Bridge not configured. Run: vcli service start');\n return;\n }\n console.log('Vector Bridge');\n console.log(\n ` Device: ${status.config!.displayName} (${status.config!.deviceId})`,\n );\n console.log(` User: ${status.config!.userId}`);\n const statusLabel = status.running\n ? `Running (PID ${status.pid})`\n : status.starting\n ? 'Starting...'\n : 'Not running';\n console.log(` Status: ${statusLabel}`);\n console.log(` Config: ${VECTOR_HOME}/bridge.json`);\n });\n\nserviceCommand\n .command('menu-state')\n .description('Return JSON state for the macOS tray')\n .action(async (_options, command) => {\n const status = getBridgeStatus();\n const globalOptions = command.optsWithGlobals() as GlobalOptions;\n const profile = globalOptions.profile ?? (await readDefaultProfile());\n const session = await readSession(profile);\n const profiles: ProfileSummary[] = await listProfiles();\n const defaultProfile = await readDefaultProfile();\n let workspaces: unknown[] = [];\n let workSessions: unknown[] = [];\n let detectedSessions: unknown[] = [];\n\n try {\n const runtime = await getRuntime(command);\n if (runtime.session && status.config?.deviceId) {\n const client = await createConvexClient(\n runtime.session,\n runtime.appUrl,\n runtime.convexUrl,\n );\n workspaces = await runQuery(\n client,\n api.agentBridge.queries.listDeviceWorkspaces,\n {\n deviceId: status.config.deviceId as Id<'agentDevices'>,\n },\n );\n workSessions = await runQuery(\n client,\n api.agentBridge.queries.listDeviceWorkSessions,\n {\n deviceId: status.config.deviceId as Id<'agentDevices'>,\n },\n );\n const devices = await runQuery(\n client,\n api.agentBridge.queries.listProcessesForAttach,\n {},\n );\n const currentDevice = devices.find(\n (entry: { device: { _id: string } }) =>\n entry.device._id === status.config?.deviceId,\n );\n detectedSessions = currentDevice?.processes ?? [];\n }\n } catch {\n workspaces = [];\n workSessions = [];\n detectedSessions = [];\n }\n\n printOutput(\n {\n configured: status.configured,\n running: status.running,\n starting: status.starting,\n pid: status.pid,\n config: status.config,\n sessionInfo: buildMenuSessionInfo(session),\n activeProfile: profile,\n defaultProfile,\n profiles,\n workspaces,\n workSessions,\n detectedSessions,\n },\n Boolean(globalOptions.json),\n );\n });\n\nserviceCommand\n .command('set-default-workspace')\n .description('Set the default workspace for this device')\n .requiredOption('--workspace-id <id>')\n .action(async (options, command) => {\n const { client, runtime } = await getClient(command);\n const workspaceId = await runMutation(\n client,\n api.agentBridge.mutations.setDefaultWorkspace,\n {\n workspaceId: options.workspaceId as Id<'deviceWorkspaces'>,\n },\n );\n printOutput({ ok: true, workspaceId }, runtime.json);\n });\n\nserviceCommand\n .command('search-issues <query>')\n .description('Search issues for tray attach actions')\n .option('--limit <n>')\n .action(async (query, options, command) => {\n const { client, runtime } = await getClient(command);\n const orgSlug = requireOrg(runtime);\n const result = await runQuery(client, api.search.queries.searchEntities, {\n orgSlug,\n query,\n limit: optionalNumber(options.limit, 'limit') ?? 8,\n });\n printOutput(result.issues ?? [], runtime.json);\n });\n\nserviceCommand\n .command('attach-process')\n .description('Attach a detected local process to an issue')\n .requiredOption('--issue-id <id>')\n .requiredOption('--device-id <id>')\n .requiredOption('--process-id <id>')\n .requiredOption('--provider <provider>')\n .option('--title <title>')\n .action(async (options, command) => {\n const { client, runtime } = await getClient(command);\n const liveActivityId = await runMutation(\n client,\n api.agentBridge.mutations.attachLiveActivity,\n {\n issueId: options.issueId as Id<'issues'>,\n deviceId: options.deviceId as Id<'agentDevices'>,\n processId: options.processId as Id<'agentProcesses'>,\n provider: parseAgentProvider(options.provider),\n title: options.title?.trim() || undefined,\n },\n );\n printOutput({ ok: true, liveActivityId }, runtime.json);\n });\n\nserviceCommand\n .command('install')\n .description('Install the bridge as a system service (macOS LaunchAgent)')\n .action(async (_options, command) => {\n if (osPlatform() !== 'darwin') {\n console.error('Service install is currently macOS only (LaunchAgent).');\n console.error('On Linux, use systemd --user manually for now.');\n return;\n }\n\n const { spinner } = await import('@clack/prompts');\n const s = spinner();\n\n s.start('Ensuring device registration...');\n const config = await ensureBridgeConfig(command);\n s.stop(`Device ready: ${config.displayName}`);\n\n s.start('Installing LaunchAgent...');\n const vcliPath = process.argv[1] ?? 'vcli';\n installLaunchAgent(vcliPath);\n s.stop('LaunchAgent installed');\n\n s.start('Starting bridge service...');\n loadLaunchAgent();\n s.stop('Bridge service started');\n\n console.log('');\n console.log(\n 'Bridge installed and running. Will start automatically on login.',\n );\n });\n\nserviceCommand\n .command('uninstall')\n .description('Stop the bridge and uninstall the system service')\n .action(() => {\n stopBridge({ includeMenuBar: true });\n uninstallLaunchAgent();\n stopMenuBar();\n console.log('Bridge stopped and service uninstalled.');\n });\n\nserviceCommand\n .command('logs')\n .description('Show bridge service logs')\n .action(async () => {\n const fs = await import('fs');\n const p = await import('path');\n const logPath = p.join(VECTOR_HOME, 'bridge.log');\n if (fs.existsSync(logPath)) {\n const content = fs.readFileSync(logPath, 'utf-8');\n const lines = content.split('\\n');\n console.log(lines.slice(-50).join('\\n'));\n } else {\n console.log(`No log file found at ${logPath}`);\n }\n });\n\nserviceCommand\n .command('enable')\n .description('Enable bridge to start at login (macOS LaunchAgent)')\n .action(async () => {\n if (osPlatform() !== 'darwin') {\n console.error('Login item is macOS only.');\n return;\n }\n const vcliPath = process.argv[1] ?? 'vcli';\n installLaunchAgent(vcliPath);\n loadLaunchAgent();\n console.log('Bridge will start automatically on login.');\n });\n\nserviceCommand\n .command('disable')\n .description('Disable bridge from starting at login')\n .action(() => {\n uninstallLaunchAgent();\n stopMenuBar();\n console.log('Bridge will no longer start at login.');\n });\n\n// `vcli bridge` — top-level shortcut commands\nconst bridgeCommand = program\n .command('bridge')\n .description('Start/stop the local agent bridge');\n\nbridgeCommand\n .command('start')\n .description('Register device, install service, and start the bridge')\n .action(async (_options, command) => {\n const existingConfig = loadBridgeConfig();\n const config = await ensureBridgeConfig(command);\n if (\n !existingConfig ||\n existingConfig.deviceId !== config.deviceId ||\n existingConfig.userId !== config.userId\n ) {\n console.log(\n `Device registered: ${config.displayName} (${config.deviceId})`,\n );\n }\n\n if (osPlatform() === 'darwin') {\n const vcliPath = process.argv[1] ?? 'vcli';\n installLaunchAgent(vcliPath);\n loadLaunchAgent();\n console.log('\\nBridge installed and started as LaunchAgent.');\n console.log('It will restart automatically on login.');\n console.log('Run `vcli service status` to check.');\n } else {\n console.log('Starting bridge in foreground...');\n const bridge = new BridgeService(config);\n await bridge.run();\n }\n });\n\nbridgeCommand\n .command('stop')\n .description('Stop the bridge service')\n .action(() => {\n let unloaded = false;\n if (osPlatform() === 'darwin') {\n uninstallLaunchAgent();\n unloaded = true;\n }\n if (stopBridge() || unloaded) {\n console.log('Bridge stopped.');\n } else {\n console.log('Bridge is not running.');\n }\n });\n\nbridgeCommand\n .command('status')\n .description('Show bridge status')\n .action(() => {\n const s = getBridgeStatus();\n if (!s.configured) {\n console.log('Bridge not configured. Run: vcli bridge start');\n return;\n }\n console.log('Vector Bridge');\n console.log(` Device: ${s.config!.displayName} (${s.config!.deviceId})`);\n console.log(\n ` Status: ${s.running ? `Running (PID ${s.pid})` : 'Not running'}`,\n );\n });\n\n// ═══════════════════════════════════════════════════════════════════════════════\n// CLI Update\n// ═══════════════════════════════════════════════════════════════════════════════\n\nfunction detectInstallMethod(version: string): {\n method: 'volta' | 'npm' | 'pnpm' | 'yarn' | 'unknown';\n command: string[];\n} {\n const execPath = process.argv[1] ?? '';\n const pkg = `@rehpic/vcli@${version}`;\n\n if (execPath.includes('.volta')) {\n return {\n method: 'volta',\n command: ['volta', 'install', pkg],\n };\n }\n\n if (execPath.includes('pnpm')) {\n return {\n method: 'pnpm',\n command: ['pnpm', 'add', '-g', pkg],\n };\n }\n\n if (execPath.includes('yarn')) {\n return {\n method: 'yarn',\n command: ['yarn', 'global', 'add', pkg],\n };\n }\n\n return {\n method: 'npm',\n command: ['npm', 'install', '-g', pkg],\n };\n}\n\nasync function checkForUpdate(): Promise<{\n current: string;\n latest: string;\n hasUpdate: boolean;\n} | null> {\n try {\n const { execSync: exec } = await import('child_process');\n // Get all dist-tags and pick the newest version\n const tagsRaw = exec('npm view @rehpic/vcli dist-tags --json', {\n encoding: 'utf-8',\n timeout: 10000,\n }).trim();\n const tags = JSON.parse(tagsRaw) as Record<string, string>;\n // Prefer 'latest' if it's a real release, otherwise use 'beta'\n const latest = tags.latest?.includes('beta')\n ? (tags.beta ?? tags.latest)\n : (tags.latest ?? tags.beta ?? '');\n const current = readPackageVersionSync();\n return {\n current,\n latest,\n hasUpdate: Boolean(latest) && latest !== current,\n };\n } catch {\n return null;\n }\n}\n\nprogram\n .command('update')\n .description('Update the CLI to the latest version')\n .action(async () => {\n const { spinner, log } = await import('@clack/prompts');\n const s = spinner();\n\n // 1. Check for updates\n s.start('Checking for updates...');\n const updateInfo = await checkForUpdate();\n if (!updateInfo) {\n s.stop('Could not check for updates.');\n return;\n }\n if (!updateInfo.hasUpdate) {\n s.stop(`Already on the latest version (${updateInfo.current}).`);\n return;\n }\n s.stop(`Update available: ${updateInfo.current} → ${updateInfo.latest}`);\n\n const install = detectInstallMethod(updateInfo.latest);\n log.info(`Install method: ${install.method}`);\n\n // 2. Stop the bridge service\n s.start('Stopping bridge service...');\n const wasRunning = getBridgeStatus().running;\n if (wasRunning) {\n stopBridge({ includeMenuBar: true });\n if (osPlatform() === 'darwin') {\n unloadLaunchAgent();\n }\n stopMenuBar();\n }\n s.stop(wasRunning ? 'Bridge stopped.' : 'Bridge was not running.');\n\n // 3. Run the update\n s.start(`Updating via ${install.method}...`);\n try {\n const { execFileSync: exec } = await import('child_process');\n exec(install.command[0], install.command.slice(1), {\n stdio: 'inherit',\n timeout: 120000,\n });\n s.stop('CLI updated successfully.');\n } catch (err) {\n s.stop('Update failed.');\n log.error(`Run manually: ${install.command.join(' ')}`);\n return;\n }\n\n // 4. Restart the bridge + menu bar using the NEW binary\n if (wasRunning) {\n s.start('Restarting bridge service...');\n try {\n const { execFileSync: exec } = await import('child_process');\n exec('vcli', ['service', 'start'], {\n stdio: 'inherit',\n timeout: 30000,\n });\n s.stop('Bridge restarted.');\n } catch {\n s.stop('Could not auto-restart. Run: vcli service start');\n }\n }\n\n log.success(`Updated to v${updateInfo.latest}`);\n });\n\nasync function main() {\n await program.parseAsync(process.argv);\n}\n\nmain().catch(error => {\n console.error(error instanceof Error ? error.message : String(error));\n process.exitCode = 1;\n});\n","/* eslint-disable */\n/**\n * Generated `api` utility.\n *\n * THIS CODE IS AUTOMATICALLY GENERATED.\n *\n * To regenerate, run `npx convex dev`.\n * @module\n */\n\nimport { anyApi, componentsGeneric } from \"convex/server\";\n\n/**\n * A utility for referencing Convex functions in your app's API.\n *\n * Usage:\n * ```js\n * const myFunctionReference = api.myModule.myFunction;\n * ```\n */\nexport const api = anyApi;\nexport const internal = anyApi;\nexport const components = componentsGeneric();\n","import { isCancel, password as passwordPrompt, text } from '@clack/prompts';\nimport { CliSession } from './session';\n\ntype AuthUser = {\n id?: string;\n email?: string;\n name?: string;\n username?: string;\n};\n\ntype AuthSessionResponse = {\n user?: AuthUser | null;\n session?: Record<string, unknown> | null;\n};\n\nfunction buildUrl(appUrl: string, pathname: string) {\n return new URL(pathname, appUrl).toString();\n}\n\nfunction cookieHeader(cookies: Record<string, string>) {\n return Object.entries(cookies)\n .map(([name, value]) => `${name}=${value}`)\n .join('; ');\n}\n\nfunction splitSetCookieHeader(value: string) {\n return value.split(/,(?=[^;,]+=)/g);\n}\n\nfunction applySetCookieHeaders(\n session: CliSession,\n response: Response,\n): CliSession {\n const nextCookies = { ...session.cookies };\n const rawSetCookies =\n response.headers.getSetCookie?.() ??\n (response.headers.get('set-cookie')\n ? splitSetCookieHeader(response.headers.get('set-cookie')!)\n : []);\n\n for (const rawCookie of rawSetCookies) {\n const [cookiePart, ...attributeParts] = rawCookie.split(';');\n const separatorIndex = cookiePart.indexOf('=');\n if (separatorIndex <= 0) {\n continue;\n }\n\n const name = cookiePart.slice(0, separatorIndex).trim();\n const value = cookiePart.slice(separatorIndex + 1).trim();\n const attributes = attributeParts.map(part => part.trim().toLowerCase());\n const maxAge = attributes.find(part => part.startsWith('max-age='));\n const expires = attributes.find(part => part.startsWith('expires='));\n const expired =\n value.length === 0 ||\n maxAge === 'max-age=0' ||\n (expires\n ? Number.isFinite(Date.parse(expires.slice(8))) &&\n Date.parse(expires.slice(8)) <= Date.now()\n : false);\n\n if (expired) {\n delete nextCookies[name];\n } else {\n nextCookies[name] = value;\n }\n }\n\n return {\n ...session,\n cookies: nextCookies,\n };\n}\n\nasync function authRequest(\n session: CliSession,\n appUrl: string,\n pathname: string,\n init: RequestInit = {},\n) {\n const headers = new Headers(init.headers);\n const origin = new URL(appUrl).origin;\n if (session.bearerToken && !headers.has('authorization')) {\n headers.set('authorization', `Bearer ${session.bearerToken}`);\n }\n if (Object.keys(session.cookies).length > 0) {\n headers.set('cookie', cookieHeader(session.cookies));\n }\n if (!headers.has('origin')) {\n headers.set('origin', origin);\n }\n if (!headers.has('referer')) {\n headers.set('referer', `${origin}/`);\n }\n if (init.body && !headers.has('content-type')) {\n headers.set('content-type', 'application/json');\n }\n\n const response = await fetch(buildUrl(appUrl, pathname), {\n ...init,\n headers,\n redirect: 'manual',\n });\n const nextSession = applySetCookieHeaders(session, response);\n return { response, session: nextSession };\n}\n\nasync function parseError(response: Response) {\n try {\n const data = (await response.json()) as { error?: { message?: string } };\n return data.error?.message ?? `Request failed with HTTP ${response.status}`;\n } catch {\n return `Request failed with HTTP ${response.status}`;\n }\n}\n\nexport async function loginWithPassword(\n session: CliSession,\n appUrl: string,\n identifier: string,\n password: string,\n) {\n const pathname = identifier.includes('@')\n ? '/api/auth/sign-in/email'\n : '/api/auth/sign-in/username';\n const body = identifier.includes('@')\n ? { email: identifier, password }\n : { username: identifier, password };\n const { response, session: nextSession } = await authRequest(\n session,\n appUrl,\n pathname,\n {\n method: 'POST',\n body: JSON.stringify(body),\n },\n );\n\n if (!response.ok) {\n throw new Error(await parseError(response));\n }\n\n return nextSession;\n}\n\nexport async function signUpWithEmail(\n session: CliSession,\n appUrl: string,\n email: string,\n username: string,\n password: string,\n) {\n const { response, session: nextSession } = await authRequest(\n session,\n appUrl,\n '/api/auth/sign-up/email',\n {\n method: 'POST',\n body: JSON.stringify({\n email,\n password,\n name: username,\n username,\n }),\n },\n );\n\n if (!response.ok) {\n throw new Error(await parseError(response));\n }\n\n return nextSession;\n}\n\nexport async function logout(session: CliSession, appUrl: string) {\n const { response } = await authRequest(\n session,\n appUrl,\n '/api/auth/sign-out',\n {\n method: 'POST',\n body: JSON.stringify({}),\n },\n );\n\n if (!response.ok) {\n throw new Error(await parseError(response));\n }\n}\n\nexport async function fetchAuthSession(session: CliSession, appUrl: string) {\n const { response, session: nextSession } = await authRequest(\n session,\n appUrl,\n '/api/auth/get-session',\n {\n method: 'GET',\n },\n );\n\n if (!response.ok) {\n throw new Error(await parseError(response));\n }\n\n const data = (await response.json()) as AuthSessionResponse | null;\n return {\n session: nextSession,\n user: data?.user ?? null,\n };\n}\n\nexport async function fetchConvexToken(session: CliSession, appUrl: string) {\n const { response, session: nextSession } = await authRequest(\n session,\n appUrl,\n '/api/auth/convex/token',\n {\n method: 'GET',\n },\n );\n\n if (!response.ok) {\n throw new Error(await parseError(response));\n }\n\n const data = (await response.json()) as { token?: string };\n if (!data.token) {\n throw new Error('Missing Convex token');\n }\n\n return {\n session: nextSession,\n token: data.token,\n };\n}\n\ntype DeviceCodeResponse = {\n device_code: string;\n user_code: string;\n verification_uri: string;\n verification_uri_complete: string;\n expires_in: number;\n interval: number;\n};\n\ntype DeviceTokenResponse = {\n access_token?: string;\n token_type?: string;\n error?: string;\n};\n\nexport async function requestDeviceCode(\n appUrl: string,\n clientId: string,\n): Promise<DeviceCodeResponse> {\n const response = await fetch(buildUrl(appUrl, '/api/auth/device/code'), {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify({ client_id: clientId }),\n });\n\n if (!response.ok) {\n throw new Error(`Failed to request device code: HTTP ${response.status}`);\n }\n\n return (await response.json()) as DeviceCodeResponse;\n}\n\nexport async function pollDeviceToken(\n session: CliSession,\n appUrl: string,\n deviceCode: string,\n clientId: string,\n interval: number,\n expiresIn: number,\n): Promise<CliSession> {\n const deadline = Date.now() + expiresIn * 1000;\n let pollInterval = interval * 1000;\n\n while (Date.now() < deadline) {\n await new Promise(resolve => setTimeout(resolve, pollInterval));\n\n const { response, session: nextSession } = await authRequest(\n session,\n appUrl,\n '/api/auth/device/token',\n {\n method: 'POST',\n body: JSON.stringify({\n grant_type: 'urn:ietf:params:oauth:grant-type:device_code',\n device_code: deviceCode,\n client_id: clientId,\n }),\n },\n );\n\n session = nextSession;\n\n if (response.ok) {\n const data = (await response.json()) as DeviceTokenResponse;\n if (data.access_token) {\n session.bearerToken = data.access_token;\n return session;\n }\n }\n\n let errorData: DeviceTokenResponse;\n try {\n errorData = (await response.json()) as DeviceTokenResponse;\n } catch {\n errorData = { error: `HTTP ${response.status}` };\n }\n\n switch (errorData.error) {\n case 'authorization_pending':\n break;\n case 'slow_down':\n pollInterval += 5000;\n break;\n case 'access_denied':\n throw new Error('Authorization denied by user.');\n case 'expired_token':\n throw new Error('Device code expired. Please try again.');\n default:\n throw new Error(`Device auth error: ${errorData.error}`);\n }\n }\n\n throw new Error('Device code expired. Please try again.');\n}\n\nexport async function prompt(question: string) {\n const value = await text({\n message: question.replace(/:\\s*$/, ''),\n });\n if (isCancel(value)) {\n throw new Error('Canceled');\n }\n return String(value).trim();\n}\n\nexport async function promptSecret(question: string) {\n const value = await passwordPrompt({\n message: question.replace(/:\\s*$/, ''),\n mask: '*',\n });\n if (isCancel(value)) {\n throw new Error('Canceled');\n }\n return String(value);\n}\n","import { ConvexHttpClient } from 'convex/browser';\nimport { FunctionReference, OptionalRestArgs } from 'convex/server';\nimport { fetchConvexToken } from './auth';\nimport { CliSession } from './session';\n\nexport async function createConvexClient(\n session: CliSession,\n appUrl: string,\n convexUrl: string,\n) {\n const { token } = await fetchConvexToken(session, appUrl);\n const client = new ConvexHttpClient(convexUrl);\n client.setAuth(token);\n return client;\n}\n\nexport async function runQuery<Query extends FunctionReference<'query'>>(\n client: ConvexHttpClient,\n ref: Query,\n ...args: OptionalRestArgs<Query>\n) {\n return await client.query(ref, ...args);\n}\n\nexport async function runMutation<\n Mutation extends FunctionReference<'mutation'>,\n>(\n client: ConvexHttpClient,\n ref: Mutation,\n ...args: OptionalRestArgs<Mutation>\n) {\n return await client.mutation(ref, ...args);\n}\n\nexport async function runAction<Action extends FunctionReference<'action'>>(\n client: ConvexHttpClient,\n ref: Action,\n ...args: OptionalRestArgs<Action>\n) {\n return await client.action(ref, ...args);\n}\n","function simplify(value: unknown): unknown {\n if (value === null || value === undefined) {\n return value;\n }\n if (Array.isArray(value)) {\n if (value.length === 0) {\n return [];\n }\n if (value.every(item => typeof item !== 'object' || item === null)) {\n return value.join(', ');\n }\n return JSON.stringify(value);\n }\n if (typeof value === 'object') {\n return JSON.stringify(value);\n }\n return value;\n}\n\nexport function printOutput(data: unknown, json = false) {\n if (json) {\n console.log(JSON.stringify(data, null, 2));\n return;\n }\n\n if (Array.isArray(data)) {\n if (data.length === 0) {\n console.log('No results.');\n return;\n }\n if (data.every(item => typeof item === 'object' && item !== null)) {\n console.table(\n data.map(item =>\n Object.fromEntries(\n Object.entries(item).map(([key, value]) => [key, simplify(value)]),\n ),\n ),\n );\n return;\n }\n }\n\n if (typeof data === 'object' && data !== null) {\n console.dir(data, { depth: null, colors: true });\n return;\n }\n\n console.log(String(data));\n}\n","import { mkdir, readFile, readdir, rm, writeFile } from 'node:fs/promises';\nimport { homedir } from 'node:os';\nimport path from 'node:path';\n\nexport type CliSession = {\n version: 1;\n appUrl?: string;\n convexUrl?: string;\n activeOrgSlug?: string;\n cookies: Record<string, string>;\n bearerToken?: string;\n};\n\ntype CliProfileConfig = {\n version: 1;\n defaultProfile: string;\n};\n\nfunction getSessionRoot() {\n return process.env.VECTOR_HOME?.trim() || path.join(homedir(), '.vector');\n}\n\nfunction getProfileConfigPath() {\n return path.join(getSessionRoot(), 'cli-config.json');\n}\n\nexport function getSessionPath(profile = 'default') {\n return path.join(getSessionRoot(), `cli-${profile}.json`);\n}\n\nexport async function readDefaultProfile() {\n try {\n const raw = await readFile(getProfileConfigPath(), 'utf8');\n const parsed = JSON.parse(raw) as Partial<CliProfileConfig>;\n const profile = parsed.defaultProfile?.trim();\n return profile || 'default';\n } catch {\n return 'default';\n }\n}\n\nexport async function writeDefaultProfile(profile: string) {\n const normalized = profile.trim() || 'default';\n await mkdir(getSessionRoot(), { recursive: true });\n const config: CliProfileConfig = {\n version: 1,\n defaultProfile: normalized,\n };\n await writeFile(\n getProfileConfigPath(),\n `${JSON.stringify(config, null, 2)}\\n`,\n 'utf8',\n );\n}\n\nexport async function listProfiles() {\n const root = getSessionRoot();\n const defaultProfile = await readDefaultProfile();\n\n try {\n const entries = await readdir(root, { withFileTypes: true });\n const names = entries\n .filter(entry => entry.isFile())\n .map(entry => entry.name)\n .filter(name => /^cli-.+\\.json$/.test(name))\n .map(name => name.replace(/^cli-/, '').replace(/\\.json$/, ''));\n const uniqueNames = Array.from(new Set([...names, defaultProfile])).sort(\n (left, right) => left.localeCompare(right),\n );\n\n return Promise.all(\n uniqueNames.map(async name => ({\n name,\n isDefault: name === defaultProfile,\n hasSession: (await readSession(name)) !== null,\n })),\n );\n } catch {\n return [\n {\n name: defaultProfile,\n isDefault: true,\n hasSession: (await readSession(defaultProfile)) !== null,\n },\n ];\n }\n}\n\nexport async function readSession(profile = 'default') {\n try {\n const raw = await readFile(getSessionPath(profile), 'utf8');\n const parsed = JSON.parse(raw) as Partial<CliSession>;\n return {\n version: 1,\n cookies: {},\n ...parsed,\n } satisfies CliSession;\n } catch {\n return null;\n }\n}\n\nexport async function writeSession(session: CliSession, profile = 'default') {\n await mkdir(getSessionRoot(), { recursive: true });\n await writeFile(\n getSessionPath(profile),\n `${JSON.stringify(session, null, 2)}\\n`,\n 'utf8',\n );\n}\n\nexport async function clearSession(profile = 'default') {\n await rm(getSessionPath(profile), { force: true });\n}\n\nexport function createEmptySession(): CliSession {\n return {\n version: 1,\n cookies: {},\n };\n}\n","/**\n * Vector Bridge Service — runs as a foreground process or installed as a system service.\n *\n * Called by:\n * vcli service start — runs the bridge loop in the foreground\n * vcli start — installs + starts via LaunchAgent (macOS) or systemd (Linux)\n */\n\nimport { ConvexHttpClient } from 'convex/browser';\nimport { api } from '../../../convex/_generated/api';\nimport type { Id } from '../../../convex/_generated/dataModel';\nimport { execFileSync, execSync } from 'child_process';\nimport { TerminalPeerManager } from './terminal-peer';\nimport {\n existsSync,\n mkdirSync,\n readFileSync,\n writeFileSync,\n unlinkSync,\n} from 'fs';\nimport { homedir, hostname, platform } from 'os';\nimport { join } from 'path';\nimport { randomUUID } from 'crypto';\nimport type {\n AgentProvider,\n LiveActivityStatus,\n} from '../../../convex/_shared/agentBridge';\nimport {\n discoverAttachableSessions,\n resumeProviderSession,\n type BridgeProvider,\n type SessionProcessRecord,\n} from './agent-adapters';\n\n// ── Config ──────────────────────────────────────────────────────────────────\n\nconst CONFIG_DIR =\n process.env.VECTOR_HOME?.trim() || join(homedir(), '.vector');\nconst BRIDGE_CONFIG_FILE = join(CONFIG_DIR, 'bridge.json');\nconst DEVICE_KEY_FILE = join(CONFIG_DIR, 'device-key');\nconst PID_FILE = join(CONFIG_DIR, 'bridge.pid');\nconst LIVE_ACTIVITIES_CACHE = join(CONFIG_DIR, 'live-activities.json');\nconst LAUNCHAGENT_DIR = join(homedir(), 'Library', 'LaunchAgents');\nconst LAUNCHAGENT_PLIST = join(LAUNCHAGENT_DIR, 'com.vector.bridge.plist');\nconst LAUNCHAGENT_LABEL = 'com.vector.bridge';\nconst LEGACY_MENUBAR_LAUNCHAGENT_LABEL = 'com.vector.menubar';\nconst LEGACY_MENUBAR_LAUNCHAGENT_PLIST = join(\n LAUNCHAGENT_DIR,\n `${LEGACY_MENUBAR_LAUNCHAGENT_LABEL}.plist`,\n);\n\nconst HEARTBEAT_INTERVAL_MS = 30_000;\nconst COMMAND_POLL_INTERVAL_MS = 5_000;\nconst LIVE_ACTIVITY_SYNC_INTERVAL_MS = 5_000;\nconst PROCESS_DISCOVERY_INTERVAL_MS = 60_000;\n\nexport interface BridgeConfig {\n deviceId: string;\n deviceKey: string;\n deviceSecret: string;\n userId: string;\n displayName: string;\n convexUrl: string;\n registeredAt: string;\n tunnelHost?: string;\n}\n\n// ── Config persistence ──────────────────────────────────────────────────────\n\nexport function loadBridgeConfig(): BridgeConfig | null {\n if (!existsSync(BRIDGE_CONFIG_FILE)) return null;\n try {\n return JSON.parse(readFileSync(BRIDGE_CONFIG_FILE, 'utf-8'));\n } catch {\n return null;\n }\n}\n\nexport function saveBridgeConfig(config: BridgeConfig): void {\n if (!existsSync(CONFIG_DIR)) mkdirSync(CONFIG_DIR, { recursive: true });\n writeFileSync(BRIDGE_CONFIG_FILE, JSON.stringify(config, null, 2));\n persistDeviceKey(config.deviceKey);\n}\n\nfunction writeLiveActivitiesCache(activities: unknown[]): void {\n if (!existsSync(CONFIG_DIR)) mkdirSync(CONFIG_DIR, { recursive: true });\n writeFileSync(LIVE_ACTIVITIES_CACHE, JSON.stringify(activities, null, 2));\n}\n\ninterface PendingBridgeCommand {\n _id: Id<'agentCommands'>;\n kind: string;\n payload?: unknown;\n liveActivityId?: Id<'issueLiveActivities'>;\n processId?: Id<'agentProcesses'>;\n liveActivity?: {\n _id: Id<'issueLiveActivities'>;\n issueId: Id<'issues'>;\n issueKey?: string;\n issueTitle?: string;\n provider: AgentProvider;\n title?: string;\n status: string;\n workSessionId?: Id<'workSessions'>;\n } | null;\n workSession?: {\n _id: Id<'workSessions'>;\n tmuxSessionName?: string;\n tmuxWindowName?: string;\n tmuxPaneId?: string;\n workspacePath?: string;\n cwd?: string;\n repoRoot?: string;\n branch?: string;\n terminalSnapshot?: string;\n agentProvider?: AgentProvider;\n agentSessionKey?: string;\n } | null;\n process?: {\n _id: Id<'agentProcesses'>;\n provider: AgentProvider;\n providerLabel?: string;\n sessionKey?: string;\n cwd?: string;\n repoRoot?: string;\n branch?: string;\n title?: string;\n model?: string;\n tmuxSessionName?: string;\n tmuxWindowName?: string;\n tmuxPaneId?: string;\n mode: string;\n status: string;\n supportsInboundMessages: boolean;\n } | null;\n}\n\n// ── Bridge Service Class ────────────────────────────────────────────────────\n\nexport class BridgeService {\n private client: ConvexHttpClient;\n private config: BridgeConfig;\n private timers: ReturnType<typeof setInterval>[] = [];\n private terminalPeer: TerminalPeerManager | null = null;\n\n constructor(config: BridgeConfig) {\n this.config = config;\n this.client = new ConvexHttpClient(config.convexUrl);\n }\n\n async heartbeat(): Promise<void> {\n await this.client.mutation(api.agentBridge.bridgePublic.heartbeat, {\n deviceId: this.config.deviceId as Id<'agentDevices'>,\n deviceSecret: this.config.deviceSecret,\n });\n }\n\n async pollCommands(): Promise<void> {\n const commands = await this.client.query(\n api.agentBridge.bridgePublic.getPendingCommands,\n {\n deviceId: this.config.deviceId as Id<'agentDevices'>,\n deviceSecret: this.config.deviceSecret,\n },\n );\n\n if (commands.length > 0) {\n console.log(`[${ts()}] ${commands.length} pending command(s)`);\n }\n\n for (const cmd of commands) {\n await this.handleCommand(cmd);\n }\n }\n\n private async handleCommand(cmd: PendingBridgeCommand): Promise<void> {\n const claimed = await this.client.mutation(\n api.agentBridge.bridgePublic.claimCommand,\n {\n deviceId: this.config.deviceId as Id<'agentDevices'>,\n deviceSecret: this.config.deviceSecret,\n commandId: cmd._id,\n },\n );\n if (!claimed) {\n return;\n }\n\n console.log(` ${cmd.kind}: ${cmd._id}`);\n\n try {\n switch (cmd.kind) {\n case 'message':\n await this.handleMessageCommand(cmd);\n await this.completeCommand(cmd._id, 'delivered');\n return;\n case 'launch':\n await this.handleLaunchCommand(cmd);\n await this.completeCommand(cmd._id, 'delivered');\n return;\n case 'resize':\n await this.handleResizeCommand(cmd);\n await this.completeCommand(cmd._id, 'delivered');\n return;\n default:\n throw new Error(`Unsupported bridge command: ${cmd.kind}`);\n }\n } catch (error) {\n const message =\n error instanceof Error ? error.message : 'Unknown bridge error';\n console.error(` ! ${message}`);\n await this.postCommandError(cmd, message);\n await this.completeCommand(cmd._id, 'failed');\n }\n }\n\n async reportProcesses(): Promise<void> {\n const processes = discoverAttachableSessions();\n const activeSessionKeys = processes\n .map(proc => proc.sessionKey)\n .filter((value): value is string => Boolean(value));\n const activeLocalProcessIds = processes\n .map(proc => proc.localProcessId)\n .filter((value): value is string => Boolean(value));\n\n for (const proc of processes) {\n try {\n await this.reportProcess(proc);\n } catch {\n /* skip individual failures */\n }\n }\n\n try {\n await this.client.mutation(\n api.agentBridge.bridgePublic.reconcileObservedProcesses,\n {\n deviceId: this.config.deviceId as Id<'agentDevices'>,\n deviceSecret: this.config.deviceSecret,\n activeSessionKeys,\n activeLocalProcessIds,\n },\n );\n } catch {\n /* best effort */\n }\n\n if (processes.length > 0) {\n console.log(\n `[${ts()}] Discovered ${processes.length} attachable session(s)`,\n );\n }\n }\n\n async refreshLiveActivities(): Promise<void> {\n try {\n const activities = await this.client.query(\n api.agentBridge.bridgePublic.getDeviceLiveActivities,\n {\n deviceId: this.config.deviceId as Id<'agentDevices'>,\n deviceSecret: this.config.deviceSecret,\n },\n );\n writeLiveActivitiesCache(activities);\n\n // Watch active sessions for interactive terminal viewers\n if (this.terminalPeer) {\n for (const activity of activities) {\n if (activity.workSessionId && activity.tmuxSessionName) {\n this.terminalPeer.watchSession(\n activity.workSessionId,\n activity.tmuxSessionName,\n activity.tmuxPaneId,\n );\n }\n }\n }\n } catch {\n /* non-critical */\n }\n }\n\n private async syncWorkSessionTerminals(\n activities: Array<{\n _id: Id<'issueLiveActivities'>;\n title?: string;\n workSessionId?: Id<'workSessions'>;\n workspacePath?: string;\n tmuxPaneId?: string;\n cwd?: string;\n repoRoot?: string;\n branch?: string;\n agentProvider?: AgentProvider;\n agentProcessId?: Id<'agentProcesses'>;\n agentSessionKey?: string;\n }>,\n ): Promise<void> {\n for (const activity of activities) {\n if (!activity.workSessionId || !activity.tmuxPaneId) {\n continue;\n }\n\n try {\n await this.refreshWorkSessionTerminal(activity.workSessionId, {\n tmuxPaneId: activity.tmuxPaneId,\n cwd: activity.cwd,\n repoRoot: activity.repoRoot,\n branch: activity.branch,\n agentProvider: activity.agentProvider,\n agentSessionKey: activity.agentSessionKey,\n });\n await this.verifyManagedWorkSession(activity);\n } catch {\n /* best effort */\n }\n }\n }\n\n private async verifyManagedWorkSession(activity: {\n _id: Id<'issueLiveActivities'>;\n title?: string;\n workSessionId?: Id<'workSessions'>;\n workspacePath?: string;\n tmuxPaneId?: string;\n cwd?: string;\n repoRoot?: string;\n branch?: string;\n agentProvider?: AgentProvider;\n agentProcessId?: Id<'agentProcesses'>;\n agentSessionKey?: string;\n }): Promise<void> {\n if (\n !activity.workSessionId ||\n !activity.tmuxPaneId ||\n !activity.agentProvider ||\n !isBridgeProvider(activity.agentProvider) ||\n activity.agentProcessId\n ) {\n return;\n }\n\n const workspacePath =\n activity.workspacePath ?? activity.cwd ?? activity.repoRoot;\n if (!workspacePath) {\n return;\n }\n\n const attachedSession = await this.attachObservedAgentSession(\n activity.agentProvider,\n workspacePath,\n );\n if (!attachedSession) {\n return;\n }\n\n await this.refreshWorkSessionTerminal(activity.workSessionId, {\n tmuxPaneId: activity.tmuxPaneId,\n cwd: attachedSession.process.cwd ?? activity.cwd ?? workspacePath,\n repoRoot:\n attachedSession.process.repoRoot ?? activity.repoRoot ?? workspacePath,\n branch: attachedSession.process.branch ?? activity.branch,\n agentProvider: attachedSession.process.provider,\n agentSessionKey: attachedSession.process.sessionKey,\n });\n await this.postAgentMessage(\n activity._id,\n 'status',\n `Verified ${providerLabel(attachedSession.process.provider)} in ${activity.tmuxPaneId}`,\n );\n await this.updateLiveActivity(activity._id, {\n status: 'active',\n latestSummary: `Verified ${providerLabel(attachedSession.process.provider)} in ${activity.tmuxPaneId}`,\n processId: attachedSession.processId,\n title: activity.title,\n });\n }\n\n private async refreshWorkSessionTerminal(\n workSessionId: Id<'workSessions'> | undefined,\n metadata: {\n tmuxSessionName?: string;\n tmuxWindowName?: string;\n tmuxPaneId?: string;\n cwd?: string;\n repoRoot?: string;\n branch?: string;\n agentProvider?: AgentProvider;\n agentSessionKey?: string;\n },\n ): Promise<void> {\n if (!workSessionId || !metadata.tmuxPaneId) {\n return;\n }\n\n const terminalSnapshot = captureTmuxPane(metadata.tmuxPaneId);\n await this.client.mutation(\n api.agentBridge.bridgePublic.updateWorkSessionTerminal,\n {\n deviceId: this.config.deviceId as Id<'agentDevices'>,\n deviceSecret: this.config.deviceSecret,\n workSessionId,\n terminalSnapshot,\n tmuxSessionName: metadata.tmuxSessionName,\n tmuxWindowName: metadata.tmuxWindowName,\n tmuxPaneId: metadata.tmuxPaneId,\n cwd: metadata.cwd,\n repoRoot: metadata.repoRoot,\n branch: metadata.branch,\n agentProvider: metadata.agentProvider,\n agentSessionKey: metadata.agentSessionKey,\n },\n );\n }\n\n async run(): Promise<void> {\n console.log('Vector Bridge Service');\n console.log(\n ` Device: ${this.config.displayName} (${this.config.deviceId})`,\n );\n console.log(` Convex: ${this.config.convexUrl}`);\n console.log(` PID: ${process.pid}`);\n console.log('');\n\n // Write PID\n if (!existsSync(CONFIG_DIR)) mkdirSync(CONFIG_DIR, { recursive: true });\n writeFileSync(PID_FILE, String(process.pid));\n\n // Start WebRTC terminal peer manager\n try {\n this.terminalPeer = new TerminalPeerManager({\n deviceId: this.config.deviceId,\n deviceSecret: this.config.deviceSecret,\n convexUrl: this.config.convexUrl,\n tunnelHost: this.config.tunnelHost,\n });\n console.log(\n ` Terminal: ready${this.config.tunnelHost ? ` (tunnel: ${this.config.tunnelHost})` : ''}`,\n );\n } catch (e) {\n console.error(\n ` WebRTC: failed (${e instanceof Error ? e.message : 'unknown'})`,\n );\n }\n console.log('');\n\n // Initial sync\n await this.heartbeat();\n await this.reportProcesses();\n await this.refreshLiveActivities();\n console.log(`[${ts()}] Service running. Ctrl+C to stop.\\n`);\n\n // Loops\n this.timers.push(\n setInterval(() => {\n this.heartbeat().catch(e =>\n console.error(`[${ts()}] Heartbeat error:`, e.message),\n );\n }, HEARTBEAT_INTERVAL_MS),\n );\n\n this.timers.push(\n setInterval(() => {\n this.pollCommands().catch(e =>\n console.error(`[${ts()}] Command poll error:`, e.message),\n );\n }, COMMAND_POLL_INTERVAL_MS),\n );\n\n this.timers.push(\n setInterval(() => {\n this.refreshLiveActivities().catch(e =>\n console.error(`[${ts()}] Live activity sync error:`, e.message),\n );\n }, LIVE_ACTIVITY_SYNC_INTERVAL_MS),\n );\n\n this.timers.push(\n setInterval(() => {\n this.reportProcesses().catch(e =>\n console.error(`[${ts()}] Discovery error:`, e.message),\n );\n }, PROCESS_DISCOVERY_INTERVAL_MS),\n );\n\n // Graceful shutdown\n const shutdown = () => {\n console.log(`\\n[${ts()}] Shutting down...`);\n for (const t of this.timers) clearInterval(t);\n this.terminalPeer?.stop();\n try {\n unlinkSync(PID_FILE);\n } catch {\n /* ok */\n }\n try {\n writeLiveActivitiesCache([]);\n } catch {\n /* ok */\n }\n process.exit(0);\n };\n process.on('SIGINT', shutdown);\n process.on('SIGTERM', shutdown);\n\n // Keep alive\n await new Promise(() => {});\n }\n\n private async handleMessageCommand(cmd: PendingBridgeCommand): Promise<void> {\n if (!cmd.liveActivityId) {\n throw new Error('Message command is missing liveActivityId');\n }\n\n const payload = cmd.payload as { body?: string } | undefined;\n const body = payload?.body?.trim();\n if (!body) {\n throw new Error('Message command is missing a body');\n }\n\n const process = cmd.process;\n console.log(` > \"${truncateForLog(body)}\"`);\n\n if (cmd.workSession?.tmuxPaneId) {\n sendTextToTmuxPane(cmd.workSession.tmuxPaneId, body);\n const attachedSession =\n cmd.workSession.agentProvider &&\n isBridgeProvider(cmd.workSession.agentProvider)\n ? await this.attachObservedAgentSession(\n cmd.workSession.agentProvider,\n cmd.workSession.workspacePath ??\n cmd.workSession.cwd ??\n process?.cwd,\n )\n : null;\n await this.postAgentMessage(\n cmd.liveActivityId,\n 'status',\n 'Sent input to work session terminal',\n );\n await this.refreshWorkSessionTerminal(cmd.workSession._id, {\n tmuxSessionName: cmd.workSession.tmuxSessionName,\n tmuxWindowName: cmd.workSession.tmuxWindowName,\n tmuxPaneId: cmd.workSession.tmuxPaneId,\n cwd: cmd.workSession.cwd,\n repoRoot: cmd.workSession.repoRoot,\n branch: cmd.workSession.branch,\n agentProvider:\n attachedSession?.process.provider ?? cmd.workSession.agentProvider,\n agentSessionKey:\n attachedSession?.process.sessionKey ??\n cmd.workSession.agentSessionKey,\n });\n await this.updateLiveActivity(cmd.liveActivityId, {\n status: 'waiting_for_input',\n latestSummary: `Input sent to ${cmd.workSession.tmuxPaneId}`,\n title: cmd.liveActivity?.title,\n processId: attachedSession?.processId ?? process?._id,\n });\n return;\n }\n\n if (\n !process ||\n !process.supportsInboundMessages ||\n !process.sessionKey ||\n !process.cwd ||\n !isBridgeProvider(process.provider)\n ) {\n throw new Error('No resumable local session is attached to this issue');\n }\n\n await this.reportProcess({\n provider: process.provider,\n providerLabel: process.providerLabel ?? providerLabel(process.provider),\n sessionKey: process.sessionKey,\n cwd: process.cwd,\n repoRoot: process.repoRoot,\n branch: process.branch,\n title: process.title,\n model: process.model,\n mode: 'managed',\n status: 'waiting',\n supportsInboundMessages: true,\n });\n\n await this.updateLiveActivity(cmd.liveActivityId, {\n status: 'active',\n processId: process._id,\n title: cmd.liveActivity?.title ?? process.title,\n });\n\n const result = await resumeProviderSession(\n process.provider,\n process.sessionKey,\n process.cwd,\n body,\n );\n const processId = await this.reportProcess(result);\n\n if (result.responseText) {\n await this.postAgentMessage(\n cmd.liveActivityId,\n 'assistant',\n result.responseText,\n );\n console.log(` < \"${truncateForLog(result.responseText)}\"`);\n }\n\n await this.updateLiveActivity(cmd.liveActivityId, {\n processId,\n status: 'waiting_for_input',\n latestSummary: summarizeMessage(result.responseText),\n title: cmd.liveActivity?.title ?? process.title,\n });\n }\n\n private async handleResizeCommand(cmd: PendingBridgeCommand): Promise<void> {\n const payload = cmd.payload as { cols?: number; rows?: number } | undefined;\n const cols = payload?.cols;\n const rows = payload?.rows;\n const paneId = cmd.workSession?.tmuxPaneId;\n\n if (!paneId || !cols || !rows) {\n throw new Error('Resize command missing paneId, cols, or rows');\n }\n\n console.log(` Resize ${paneId} → ${cols}x${rows}`);\n resizeTmuxPane(paneId, cols, rows);\n\n // Capture fresh snapshot after resize\n if (cmd.workSession) {\n await this.refreshWorkSessionTerminal(cmd.workSession._id, {\n tmuxSessionName: cmd.workSession.tmuxSessionName,\n tmuxWindowName: cmd.workSession.tmuxWindowName,\n tmuxPaneId: paneId,\n cwd: cmd.workSession.cwd,\n repoRoot: cmd.workSession.repoRoot,\n branch: cmd.workSession.branch,\n agentProvider: cmd.workSession.agentProvider,\n agentSessionKey: cmd.workSession.agentSessionKey,\n });\n }\n }\n\n private async handleLaunchCommand(cmd: PendingBridgeCommand): Promise<void> {\n if (!cmd.liveActivityId) {\n throw new Error('Launch command is missing liveActivityId');\n }\n\n const payload = cmd.payload as\n | {\n issueKey?: string;\n issueTitle?: string;\n issueDescription?: string;\n provider?: AgentProvider;\n workspacePath?: string;\n workspaceLabel?: string;\n delegatedRunId?: Id<'delegatedRuns'>;\n liveActivityId?: Id<'issueLiveActivities'>;\n }\n | undefined;\n\n const workspacePath = payload?.workspacePath?.trim();\n if (!workspacePath) {\n throw new Error('Launch command is missing workspacePath');\n }\n const requestedProvider = payload?.provider;\n const provider =\n requestedProvider && isBridgeProvider(requestedProvider)\n ? requestedProvider\n : undefined;\n const issueKey = payload?.issueKey ?? cmd.liveActivity?.issueKey ?? 'ISSUE';\n const issueTitle =\n payload?.issueTitle ?? cmd.liveActivity?.issueTitle ?? 'Untitled issue';\n const issueDescription = payload?.issueDescription;\n const prompt = buildLaunchPrompt(\n issueKey,\n issueTitle,\n workspacePath,\n issueDescription,\n );\n const launchLabel = provider ? providerLabel(provider) : 'shell session';\n const workSessionTitle = `${issueKey}: ${issueTitle}`;\n\n await this.updateLiveActivity(cmd.liveActivityId, {\n status: 'active',\n latestSummary: `Launching ${launchLabel} in ${workspacePath}`,\n delegatedRunId: payload?.delegatedRunId,\n launchStatus: 'launching',\n title: workSessionTitle,\n });\n\n // All session types (shell, codex, claude) are the same:\n // create a tmux session, type the command in, done.\n const tmuxSession = createTmuxWorkSession({\n workspacePath,\n issueKey,\n issueTitle,\n provider,\n prompt,\n });\n\n await this.refreshWorkSessionTerminal(cmd.workSession?._id, {\n tmuxSessionName: tmuxSession.sessionName,\n tmuxWindowName: tmuxSession.windowName,\n tmuxPaneId: tmuxSession.paneId,\n cwd: workspacePath,\n repoRoot: workspacePath,\n branch: currentGitBranch(workspacePath),\n agentProvider: provider,\n });\n\n await this.updateLiveActivity(cmd.liveActivityId, {\n status: 'active',\n latestSummary: `Running ${launchLabel} in ${tmuxSession.sessionName}`,\n delegatedRunId: payload?.delegatedRunId,\n launchStatus: 'running',\n title: workSessionTitle,\n });\n }\n\n private async attachObservedAgentSession(\n provider: BridgeProvider,\n workspacePath?: string,\n sessionsBeforeLaunch: SessionProcessRecord[] = [],\n paneProcessId?: string,\n ): Promise<{\n process: SessionProcessRecord;\n processId: Id<'agentProcesses'>;\n } | null> {\n if (!workspacePath) {\n return null;\n }\n\n const existingKeys = new Set(\n sessionsBeforeLaunch.map(sessionIdentityKey).filter(Boolean),\n );\n\n for (let attempt = 0; attempt < 10; attempt += 1) {\n const observedSessions = listObservedSessionsForWorkspace(\n provider,\n workspacePath,\n );\n const candidate =\n (paneProcessId\n ? findObservedSessionInProcessTree(observedSessions, paneProcessId)\n : undefined) ??\n observedSessions.find(\n session => !existingKeys.has(sessionIdentityKey(session)),\n ) ??\n (attempt === 9 ? observedSessions[0] : undefined);\n\n if (candidate) {\n const processId = await this.reportProcess(candidate);\n return {\n process: candidate,\n processId,\n };\n }\n\n await sleep(750);\n }\n\n return null;\n }\n\n private async reportProcess(\n process: SessionProcessRecord,\n ): Promise<Id<'agentProcesses'>> {\n const {\n provider,\n providerLabel,\n localProcessId,\n sessionKey,\n cwd,\n repoRoot,\n branch,\n title,\n model,\n tmuxSessionName,\n tmuxWindowName,\n tmuxPaneId,\n mode,\n status,\n supportsInboundMessages,\n } = process;\n\n return await this.client.mutation(\n api.agentBridge.bridgePublic.reportProcess,\n {\n deviceId: this.config.deviceId as Id<'agentDevices'>,\n deviceSecret: this.config.deviceSecret,\n provider,\n providerLabel,\n localProcessId,\n sessionKey,\n cwd,\n repoRoot,\n branch,\n title,\n model,\n tmuxSessionName,\n tmuxWindowName,\n tmuxPaneId,\n mode,\n status,\n supportsInboundMessages,\n },\n );\n }\n\n private async updateLiveActivity(\n liveActivityId: Id<'issueLiveActivities'>,\n args: {\n status: LiveActivityStatus;\n latestSummary?: string;\n title?: string;\n processId?: Id<'agentProcesses'>;\n delegatedRunId?: Id<'delegatedRuns'>;\n launchStatus?:\n | 'pending'\n | 'launching'\n | 'running'\n | 'completed'\n | 'failed'\n | 'canceled';\n },\n ): Promise<void> {\n await this.client.mutation(\n api.agentBridge.bridgePublic.updateLiveActivityState,\n {\n deviceId: this.config.deviceId as Id<'agentDevices'>,\n deviceSecret: this.config.deviceSecret,\n liveActivityId,\n ...args,\n },\n );\n }\n\n private async postAgentMessage(\n liveActivityId: Id<'issueLiveActivities'>,\n role: 'status' | 'assistant',\n body: string,\n ): Promise<void> {\n await this.client.mutation(api.agentBridge.bridgePublic.postAgentMessage, {\n deviceId: this.config.deviceId as Id<'agentDevices'>,\n deviceSecret: this.config.deviceSecret,\n liveActivityId,\n role,\n body,\n });\n }\n\n private async completeCommand(\n commandId: Id<'agentCommands'>,\n status: 'delivered' | 'failed',\n ): Promise<void> {\n await this.client.mutation(api.agentBridge.bridgePublic.completeCommand, {\n deviceId: this.config.deviceId as Id<'agentDevices'>,\n deviceSecret: this.config.deviceSecret,\n commandId,\n status,\n });\n }\n\n private async postCommandError(\n cmd: PendingBridgeCommand,\n errorMessage: string,\n ): Promise<void> {\n if (cmd.kind === 'launch' && cmd.liveActivityId) {\n const payload = cmd.payload as\n | { delegatedRunId?: Id<'delegatedRuns'> }\n | undefined;\n await this.updateLiveActivity(cmd.liveActivityId, {\n status: 'failed',\n latestSummary: errorMessage,\n delegatedRunId: payload?.delegatedRunId,\n launchStatus: 'failed',\n });\n await this.postAgentMessage(cmd.liveActivityId, 'status', errorMessage);\n return;\n }\n\n if (cmd.kind === 'message' && cmd.liveActivityId) {\n await this.postAgentMessage(cmd.liveActivityId, 'status', errorMessage);\n await this.updateLiveActivity(cmd.liveActivityId, {\n status: 'waiting_for_input',\n latestSummary: errorMessage,\n });\n }\n }\n}\n\nfunction createTmuxWorkSession(args: {\n workspacePath: string;\n issueKey: string;\n issueTitle: string;\n provider?: BridgeProvider;\n prompt: string;\n}): {\n sessionName: string;\n windowName: string;\n paneId: string;\n paneProcessId: string;\n} {\n const slug = sanitizeTmuxName(args.issueKey.toLowerCase());\n const sessionName = `vector-${slug}-${randomUUID().slice(0, 8)}`;\n const windowName = sanitizeTmuxName(\n args.provider === 'codex'\n ? 'codex'\n : args.provider === 'claude_code'\n ? 'claude'\n : 'shell',\n );\n\n execFileSync('tmux', [\n 'new-session',\n '-d',\n '-s',\n sessionName,\n '-n',\n windowName,\n '-c',\n args.workspacePath,\n ]);\n\n const paneId = execFileSync(\n 'tmux',\n [\n 'display-message',\n '-p',\n '-t',\n `${sessionName}:${windowName}.0`,\n '#{pane_id}',\n ],\n { encoding: 'utf-8' },\n ).trim();\n const paneProcessId = execFileSync(\n 'tmux',\n ['display-message', '-p', '-t', paneId, '#{pane_pid}'],\n { encoding: 'utf-8' },\n ).trim();\n\n if (args.provider) {\n execFileSync('tmux', [\n 'send-keys',\n '-t',\n paneId,\n buildManagedLaunchCommand(args.provider, args.prompt),\n 'Enter',\n ]);\n } else {\n execFileSync('tmux', [\n 'send-keys',\n '-t',\n paneId,\n `printf '%s\\\\n\\\\n' ${shellQuote(args.prompt)}`,\n 'Enter',\n ]);\n }\n\n return {\n sessionName,\n windowName,\n paneId,\n paneProcessId,\n };\n}\n\nfunction sendTextToTmuxPane(paneId: string, text: string): void {\n execFileSync('tmux', ['set-buffer', '--', text]);\n execFileSync('tmux', ['paste-buffer', '-t', paneId]);\n execFileSync('tmux', ['send-keys', '-t', paneId, 'Enter']);\n execFileSync('tmux', ['delete-buffer']);\n}\n\nfunction captureTmuxPane(paneId: string): string {\n return execFileSync(\n 'tmux',\n ['capture-pane', '-p', '-e', '-t', paneId, '-S', '-120'],\n { encoding: 'utf-8' },\n ).trimEnd();\n}\n\nfunction resizeTmuxPane(paneId: string, cols: number, rows: number): void {\n try {\n execFileSync('tmux', [\n 'resize-pane',\n '-t',\n paneId,\n '-x',\n String(cols),\n '-y',\n String(rows),\n ]);\n } catch (e) {\n console.error(`Failed to resize pane ${paneId}:`, e);\n }\n}\n\nfunction currentGitBranch(cwd: string): string | undefined {\n try {\n return execSync('git rev-parse --abbrev-ref HEAD', {\n encoding: 'utf-8',\n cwd,\n timeout: 3000,\n }).trim();\n } catch {\n return undefined;\n }\n}\n\nfunction buildManagedLaunchCommand(\n provider: BridgeProvider,\n prompt: string,\n): string {\n if (provider === 'codex') {\n return `codex --no-alt-screen -a never ${shellQuote(prompt)}`;\n }\n\n return `claude --permission-mode bypassPermissions --dangerously-skip-permissions ${shellQuote(prompt)}`;\n}\n\nfunction sanitizeTmuxName(value: string): string {\n return value.replace(/[^a-z0-9_-]+/gi, '-').replace(/^-+|-+$/g, '') || 'work';\n}\n\nfunction shellQuote(value: string): string {\n return `'${value.replace(/'/g, `'\\\"'\\\"'`)}'`;\n}\n\n// ── Device Setup ────────────────────────────────────────────────────────────\n\nexport async function setupBridgeDevice(\n client: ConvexHttpClient,\n convexUrl: string,\n): Promise<BridgeConfig> {\n const deviceKey = getStableDeviceKey();\n const displayName = `${process.env.USER ?? 'user'}'s ${platform() === 'darwin' ? 'Mac' : 'machine'}`;\n\n const result = await client.mutation(\n api.agentBridge.mutations.registerBridgeDevice,\n {\n deviceKey,\n displayName,\n hostname: hostname(),\n platform: platform(),\n serviceType: 'foreground',\n cliVersion: '0.1.0',\n capabilities: ['codex', 'claude_code'],\n },\n );\n\n const config: BridgeConfig = {\n deviceId: result.deviceId,\n deviceKey,\n deviceSecret: result.deviceSecret,\n userId: result.userId,\n displayName,\n convexUrl,\n registeredAt: new Date().toISOString(),\n };\n\n saveBridgeConfig(config);\n return config;\n}\n\nfunction getStableDeviceKey(): string {\n const existingConfig = loadBridgeConfig();\n const existingKey = existingConfig?.deviceKey?.trim();\n if (existingKey) {\n persistDeviceKey(existingKey);\n return existingKey;\n }\n\n if (existsSync(DEVICE_KEY_FILE)) {\n const savedKey = readFileSync(DEVICE_KEY_FILE, 'utf-8').trim();\n if (savedKey) {\n return savedKey;\n }\n }\n\n const generatedKey = `${hostname()}-${randomUUID().slice(0, 8)}`;\n persistDeviceKey(generatedKey);\n return generatedKey;\n}\n\nfunction persistDeviceKey(deviceKey: string): void {\n if (!existsSync(CONFIG_DIR)) mkdirSync(CONFIG_DIR, { recursive: true });\n writeFileSync(DEVICE_KEY_FILE, `${deviceKey}\\n`);\n}\n\nfunction buildLaunchPrompt(\n issueKey: string,\n issueTitle: string,\n workspacePath: string,\n issueDescription?: string,\n): string {\n const lines = [`You are working on issue ${issueKey}: ${issueTitle}`];\n\n if (issueDescription?.trim()) {\n lines.push('', 'Issue description:', issueDescription.trim());\n }\n\n lines.push(\n '',\n `The repository is at ${workspacePath}.`,\n 'Do exactly and only what the issue describes — nothing more, nothing less.',\n 'If anything is unclear or ambiguous, ask clarifying questions before making changes.',\n 'Do not refactor, clean up, or \"improve\" code that is not part of the issue scope.',\n );\n\n return lines.join('\\n');\n}\n\nfunction summarizeMessage(message: string | undefined): string | undefined {\n if (!message) {\n return undefined;\n }\n\n return message.length > 120\n ? `${message.slice(0, 117).trimEnd()}...`\n : message;\n}\n\nfunction truncateForLog(message: string): string {\n return message.length > 80 ? `${message.slice(0, 77).trimEnd()}...` : message;\n}\n\nfunction listObservedSessionsForWorkspace(\n provider: BridgeProvider,\n workspacePath: string,\n): SessionProcessRecord[] {\n return discoverAttachableSessions()\n .filter(\n session =>\n session.provider === provider &&\n matchesWorkspacePath(session, workspacePath),\n )\n .sort(compareLocalSessionRecency);\n}\n\nfunction findObservedSessionInProcessTree(\n sessions: SessionProcessRecord[],\n paneProcessId: string,\n): SessionProcessRecord | undefined {\n const descendantIds = listDescendantProcessIds(paneProcessId);\n if (descendantIds.size === 0) {\n return undefined;\n }\n\n return sessions.find(session =>\n session.localProcessId ? descendantIds.has(session.localProcessId) : false,\n );\n}\n\nfunction listDescendantProcessIds(rootPid: string): Set<string> {\n const descendants = new Set<string>([rootPid]);\n\n try {\n const output = execSync('ps -axo pid=,ppid=', {\n encoding: 'utf-8',\n timeout: 3000,\n });\n\n const parentToChildren = new Map<string, string[]>();\n for (const line of output\n .split('\\n')\n .map(value => value.trim())\n .filter(Boolean)) {\n const [pid, ppid] = line.split(/\\s+/, 2);\n if (!pid || !ppid) {\n continue;\n }\n\n const children = parentToChildren.get(ppid) ?? [];\n children.push(pid);\n parentToChildren.set(ppid, children);\n }\n\n const queue = [rootPid];\n while (queue.length > 0) {\n const currentPid = queue.shift();\n if (!currentPid) {\n continue;\n }\n\n for (const childPid of parentToChildren.get(currentPid) ?? []) {\n if (descendants.has(childPid)) {\n continue;\n }\n descendants.add(childPid);\n queue.push(childPid);\n }\n }\n } catch {\n return descendants;\n }\n\n return descendants;\n}\n\nfunction matchesWorkspacePath(\n session: SessionProcessRecord,\n workspacePath: string,\n): boolean {\n const normalizedWorkspace = normalizePath(workspacePath);\n const candidatePaths = [session.cwd, session.repoRoot]\n .filter((value): value is string => Boolean(value))\n .map(normalizePath);\n\n return candidatePaths.some(path => path === normalizedWorkspace);\n}\n\nfunction normalizePath(value: string): string {\n return value.replace(/\\/+$/, '');\n}\n\nfunction sessionIdentityKey(session: SessionProcessRecord): string {\n return [\n session.provider,\n session.sessionKey,\n session.localProcessId,\n session.cwd,\n ]\n .filter(Boolean)\n .join('::');\n}\n\nfunction compareLocalSessionRecency(\n a: SessionProcessRecord,\n b: SessionProcessRecord,\n): number {\n return Number(b.localProcessId ?? 0) - Number(a.localProcessId ?? 0);\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise(resolve => setTimeout(resolve, ms));\n}\n\nfunction isBridgeProvider(provider: AgentProvider): provider is BridgeProvider {\n return provider === 'codex' || provider === 'claude_code';\n}\n\nfunction providerLabel(provider: AgentProvider): string {\n if (provider === 'codex') {\n return 'Codex';\n }\n if (provider === 'claude_code') {\n return 'Claude';\n }\n return 'Vector CLI';\n}\n\n// ── LaunchAgent (macOS) ─────────────────────────────────────────────────────\n\nexport function installLaunchAgent(vcliPath: string): void {\n if (platform() !== 'darwin') {\n console.error('LaunchAgent is macOS only. Use systemd on Linux.');\n return;\n }\n\n const programArguments = getLaunchAgentProgramArguments(vcliPath);\n const environmentVariables = [\n ' <key>PATH</key>',\n ' <string>/usr/local/bin:/opt/homebrew/bin:/usr/bin:/bin:/usr/sbin:/sbin</string>',\n ...(process.env.VECTOR_HOME?.trim()\n ? [\n ' <key>VECTOR_HOME</key>',\n ` <string>${process.env.VECTOR_HOME.trim()}</string>`,\n ]\n : []),\n ].join('\\n');\n\n const plist = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n <key>Label</key>\n <string>${LAUNCHAGENT_LABEL}</string>\n <key>ProgramArguments</key>\n ${programArguments}\n <key>RunAtLoad</key>\n <true/>\n <key>KeepAlive</key>\n <true/>\n <key>StandardOutPath</key>\n <string>${CONFIG_DIR}/bridge.log</string>\n <key>StandardErrorPath</key>\n <string>${CONFIG_DIR}/bridge.err.log</string>\n <key>EnvironmentVariables</key>\n <dict>\n${environmentVariables}\n </dict>\n</dict>\n</plist>`;\n\n if (!existsSync(LAUNCHAGENT_DIR)) {\n mkdirSync(LAUNCHAGENT_DIR, { recursive: true });\n }\n removeLegacyMenuBarLaunchAgent();\n writeFileSync(LAUNCHAGENT_PLIST, plist);\n console.log(`Installed LaunchAgent: ${LAUNCHAGENT_PLIST}`);\n}\n\nfunction getLaunchAgentProgramArguments(vcliPath: string): string {\n const args = resolveCliInvocation(vcliPath);\n return [\n '<array>',\n ...args.map(arg => ` <string>${arg}</string>`),\n ' <string>service</string>',\n ' <string>run</string>',\n ' </array>',\n ].join('\\n');\n}\n\nfunction resolveCliInvocation(vcliPath: string): string[] {\n if (vcliPath.endsWith('.js')) {\n return [process.execPath, vcliPath];\n }\n\n if (vcliPath.endsWith('.ts')) {\n const tsxPath = join(\n import.meta.dirname ?? process.cwd(),\n '..',\n '..',\n '..',\n 'node_modules',\n '.bin',\n 'tsx',\n );\n\n if (existsSync(tsxPath)) {\n return [tsxPath, vcliPath];\n }\n }\n\n return [vcliPath];\n}\n\nexport function loadLaunchAgent(): void {\n if (runLaunchctl(['bootstrap', launchctlGuiDomain(), LAUNCHAGENT_PLIST])) {\n runLaunchctl([\n 'kickstart',\n '-k',\n `${launchctlGuiDomain()}/${LAUNCHAGENT_LABEL}`,\n ]);\n console.log(\n 'LaunchAgent loaded. Bridge will start automatically on login.',\n );\n return;\n }\n\n if (\n runLaunchctl([\n 'kickstart',\n '-k',\n `${launchctlGuiDomain()}/${LAUNCHAGENT_LABEL}`,\n ]) ||\n runLaunchctl(['load', LAUNCHAGENT_PLIST])\n ) {\n console.log(\n 'LaunchAgent loaded. Bridge will start automatically on login.',\n );\n return;\n }\n\n console.error('Failed to load LaunchAgent');\n}\n\nexport function unloadLaunchAgent(): boolean {\n if (\n runLaunchctl(['bootout', `${launchctlGuiDomain()}/${LAUNCHAGENT_LABEL}`]) ||\n runLaunchctl(['bootout', launchctlGuiDomain(), LAUNCHAGENT_PLIST]) ||\n runLaunchctl(['unload', LAUNCHAGENT_PLIST])\n ) {\n console.log('LaunchAgent unloaded.');\n return true;\n }\n\n console.error('Failed to unload LaunchAgent (may not be loaded)');\n return false;\n}\n\nexport function uninstallLaunchAgent(): void {\n unloadLaunchAgent();\n removeLegacyMenuBarLaunchAgent();\n try {\n unlinkSync(LAUNCHAGENT_PLIST);\n console.log('LaunchAgent removed.');\n } catch {\n /* already gone */\n }\n}\n\n// ── Menu Bar ────────────────────────────────────────────────────────────────\n\nconst MENUBAR_PID_FILE = join(CONFIG_DIR, 'menubar.pid');\n\nfunction removeLegacyMenuBarLaunchAgent(): void {\n if (\n platform() !== 'darwin' ||\n !existsSync(LEGACY_MENUBAR_LAUNCHAGENT_PLIST)\n ) {\n return;\n }\n\n try {\n execSync(`launchctl unload ${LEGACY_MENUBAR_LAUNCHAGENT_PLIST}`, {\n stdio: 'pipe',\n });\n } catch {\n /* may already be unloaded */\n }\n\n try {\n unlinkSync(LEGACY_MENUBAR_LAUNCHAGENT_PLIST);\n } catch {\n /* already gone */\n }\n}\n\nfunction launchctlGuiDomain(): string {\n const uid =\n typeof process.getuid === 'function'\n ? process.getuid()\n : typeof process.geteuid === 'function'\n ? process.geteuid()\n : 0;\n return `gui/${uid}`;\n}\n\nfunction runLaunchctl(args: string[]): boolean {\n try {\n execFileSync('launchctl', args, {\n stdio: 'ignore',\n });\n return true;\n } catch {\n return false;\n }\n}\n\nfunction findCliEntrypoint(): string | null {\n const candidates = [\n join(import.meta.dirname ?? '', 'index.js'),\n join(import.meta.dirname ?? '', 'index.ts'),\n join(import.meta.dirname ?? '', '..', 'dist', 'index.js'),\n ];\n for (const p of candidates) {\n if (existsSync(p)) return p;\n }\n return null;\n}\n\nfunction getCurrentCliInvocation(): string[] | null {\n const entrypoint = findCliEntrypoint();\n if (!entrypoint) {\n return null;\n }\n return resolveCliInvocation(entrypoint);\n}\n\nfunction findMenuBarExecutable(): string | null {\n const candidates = [\n join(\n import.meta.dirname ?? '',\n '..',\n 'native',\n 'VectorMenuBar.app',\n 'Contents',\n 'MacOS',\n 'VectorMenuBar',\n ),\n join(\n import.meta.dirname ?? '',\n 'native',\n 'VectorMenuBar.app',\n 'Contents',\n 'MacOS',\n 'VectorMenuBar',\n ),\n ];\n\n for (const p of candidates) {\n if (existsSync(p)) {\n return p;\n }\n }\n\n return null;\n}\n\nfunction isKnownMenuBarProcess(pid: number): boolean {\n try {\n const command = execSync(`ps -p ${pid} -o args=`, {\n encoding: 'utf-8',\n timeout: 3000,\n });\n return (\n command.includes('menubar.js') ||\n command.includes('menubar.ts') ||\n command.includes('VectorMenuBar')\n );\n } catch {\n return false;\n }\n}\n\n/** Kill any existing menu bar process. */\nfunction killExistingMenuBar(): void {\n if (existsSync(MENUBAR_PID_FILE)) {\n try {\n const pid = Number(readFileSync(MENUBAR_PID_FILE, 'utf-8').trim());\n if (Number.isFinite(pid) && pid > 0 && isKnownMenuBarProcess(pid)) {\n process.kill(pid, 'SIGTERM');\n }\n } catch {\n // Already dead\n }\n try {\n unlinkSync(MENUBAR_PID_FILE);\n } catch {\n /* ignore */\n }\n }\n}\n\nfunction getRunningMenuBarPid(): number | null {\n if (!existsSync(MENUBAR_PID_FILE)) {\n return null;\n }\n\n try {\n const pid = Number(readFileSync(MENUBAR_PID_FILE, 'utf-8').trim());\n if (Number.isFinite(pid) && pid > 0 && isKnownMenuBarProcess(pid)) {\n process.kill(pid, 0);\n return pid;\n }\n } catch {\n /* stale pid */\n }\n\n try {\n unlinkSync(MENUBAR_PID_FILE);\n } catch {\n /* ignore */\n }\n\n return null;\n}\n\nexport async function launchMenuBar(): Promise<void> {\n if (platform() !== 'darwin') return;\n\n removeLegacyMenuBarLaunchAgent();\n\n const executable = findMenuBarExecutable();\n const cliInvocation = getCurrentCliInvocation();\n if (!executable || !cliInvocation) return;\n\n // Always kill and relaunch so the binary matches the installed CLI version\n killExistingMenuBar();\n\n try {\n const { spawn: spawnChild } = await import('child_process');\n const child = spawnChild(executable, [], {\n detached: true,\n stdio: 'ignore',\n env: {\n ...process.env,\n VECTOR_CLI_COMMAND: cliInvocation[0],\n VECTOR_CLI_ARGS_JSON: JSON.stringify(cliInvocation.slice(1)),\n },\n });\n child.unref();\n\n // Save the PID so we can kill it later\n if (child.pid) {\n writeFileSync(MENUBAR_PID_FILE, String(child.pid));\n }\n } catch {\n // Non-critical — menu bar is optional\n }\n}\n\nexport function stopMenuBar(): void {\n killExistingMenuBar();\n}\n\n// ── Status ──────────────────────────────────────────────────────────────────\n\nexport function getBridgeStatus(): {\n configured: boolean;\n running: boolean;\n starting: boolean;\n pid?: number;\n config?: BridgeConfig;\n} {\n const config = loadBridgeConfig();\n if (!config) return { configured: false, running: false, starting: false };\n\n let running = false;\n let starting = false;\n let pid: number | undefined;\n if (existsSync(PID_FILE)) {\n const pidStr = readFileSync(PID_FILE, 'utf-8').trim();\n pid = Number(pidStr);\n try {\n process.kill(pid, 0);\n running = true;\n } catch {\n running = false;\n }\n }\n\n // Check if LaunchAgent is loaded but PID file not yet written (starting up)\n if (!running && platform() === 'darwin') {\n starting =\n runLaunchctl(['print', `${launchctlGuiDomain()}/${LAUNCHAGENT_LABEL}`]) ||\n runLaunchctl(['list', LAUNCHAGENT_LABEL]);\n }\n\n return { configured: true, running, starting, pid, config };\n}\n\nexport function stopBridge(options?: { includeMenuBar?: boolean }): boolean {\n if (options?.includeMenuBar) {\n killExistingMenuBar();\n }\n try {\n writeLiveActivitiesCache([]);\n } catch {\n /* ok */\n }\n if (!existsSync(PID_FILE)) return false;\n const pid = Number(readFileSync(PID_FILE, 'utf-8').trim());\n try {\n process.kill(pid, 'SIGTERM');\n return true;\n } catch {\n return false;\n }\n}\n\nfunction ts(): string {\n return new Date().toLocaleTimeString();\n}\n","/**\n * Interactive terminal relay for the bridge.\n *\n * For each active work session with a viewer:\n * 1. Creates a linked tmux viewer session (status bar off, targeting the specific pane)\n * 2. Spawns a PTY attached to the viewer session (node-pty)\n * 3. Starts a local WebSocket server (ws) that pipes PTY I/O\n * 4. Opens a public tunnel (localtunnel) so any device can connect\n * 5. Writes both the tunnel URL and local port to Convex\n * (frontend tries localhost first for low latency, falls back to tunnel)\n *\n * Pure JS — no binary distribution needed.\n */\n\nimport { createServer, type Server } from 'node:http';\nimport { WebSocketServer, WebSocket } from 'ws';\nimport { ConvexClient } from 'convex/browser';\nimport { api } from '../../../convex/_generated/api';\nimport type { Id } from '../../../convex/_generated/dataModel';\nimport * as pty from 'node-pty';\nimport { existsSync } from 'fs';\nimport { randomUUID } from 'crypto';\nimport { execFileSync } from 'child_process';\nimport localtunnel from 'localtunnel';\n\nfunction findTmuxPath(): string {\n for (const p of [\n '/opt/homebrew/bin/tmux',\n '/usr/local/bin/tmux',\n '/usr/bin/tmux',\n ]) {\n if (existsSync(p)) return p;\n }\n return 'tmux';\n}\n\nconst TMUX = findTmuxPath();\n\ninterface TerminalPeerConfig {\n deviceId: string;\n deviceSecret: string;\n convexUrl: string;\n tunnelHost?: string;\n}\n\ninterface ActiveTerminal {\n ptyProcess: pty.IPty;\n httpServer: Server;\n wss: WebSocketServer;\n tunnel: { close: () => void };\n viewerSessionName: string | null;\n token: string;\n workSessionId: string;\n tmuxSessionName: string;\n port: number;\n}\n\nfunction ts() {\n return new Date().toISOString().slice(11, 19);\n}\n\nfunction findPort(): Promise<number> {\n return new Promise((resolve, reject) => {\n const srv = createServer();\n srv.listen(0, '127.0.0.1', () => {\n const addr = srv.address();\n const port = typeof addr === 'object' && addr ? addr.port : 9100;\n srv.close(() => resolve(port));\n });\n srv.on('error', reject);\n });\n}\n\n/**\n * Create a linked tmux session for the web viewer.\n * - Linked to the original session (shares windows)\n * - Status bar hidden\n * - Targets the specific pane if provided\n */\nfunction createViewerSession(targetSession: string, paneId?: string): string {\n const viewerName = `viewer-${randomUUID().slice(0, 8)}`;\n\n try {\n // Create linked session (shares windows with target)\n execFileSync(TMUX, [\n 'new-session',\n '-d',\n '-s',\n viewerName,\n '-t',\n targetSession,\n ]);\n\n // Hide status bar for the viewer session\n execFileSync(TMUX, ['set-option', '-t', viewerName, 'status', 'off']);\n\n // Select the specific pane if we have one\n if (paneId) {\n try {\n execFileSync(TMUX, ['select-pane', '-t', paneId]);\n } catch {\n // pane might not exist, ignore\n }\n }\n\n return viewerName;\n } catch (err) {\n console.error(`[${ts()}] Failed to create viewer session:`, err);\n // Fall back to attaching directly to the original session\n return targetSession;\n }\n}\n\nfunction killViewerSession(sessionName: string): void {\n try {\n execFileSync(TMUX, ['kill-session', '-t', sessionName]);\n } catch {\n // ignore — might already be gone\n }\n}\n\nexport class TerminalPeerManager {\n private config: TerminalPeerConfig;\n private client: ConvexClient;\n private terminals = new Map<string, ActiveTerminal>();\n private failedSessions = new Set<string>();\n private pendingStops = new Map<string, ReturnType<typeof setTimeout>>();\n private unsubscribers = new Map<string, () => void>();\n\n constructor(config: TerminalPeerConfig) {\n this.config = config;\n this.client = new ConvexClient(config.convexUrl);\n }\n\n watchSession(\n workSessionId: Id<'workSessions'>,\n tmuxSessionName: string,\n tmuxPaneId?: string,\n ): void {\n if (this.unsubscribers.has(workSessionId)) return;\n\n const unsub = this.client.onUpdate(\n api.agentBridge.bridgePublic.getWorkSessionTerminalState,\n {\n deviceId: this.config.deviceId as Id<'agentDevices'>,\n deviceSecret: this.config.deviceSecret,\n workSessionId,\n },\n state => {\n if (!state) return;\n\n const terminal = this.terminals.get(workSessionId);\n\n if (\n state.terminalViewerActive &&\n !terminal &&\n !this.failedSessions.has(workSessionId)\n ) {\n const pendingStop = this.pendingStops.get(workSessionId);\n if (pendingStop) {\n clearTimeout(pendingStop);\n this.pendingStops.delete(workSessionId);\n }\n\n console.log(`[${ts()}] Viewer active for ${tmuxSessionName}`);\n void this.startTerminal(\n workSessionId,\n tmuxSessionName,\n tmuxPaneId,\n state.terminalCols,\n state.terminalRows,\n );\n } else if (!state.terminalViewerActive && terminal) {\n if (!this.pendingStops.has(workSessionId)) {\n this.pendingStops.set(\n workSessionId,\n setTimeout(() => {\n this.pendingStops.delete(workSessionId);\n console.log(`[${ts()}] Viewer inactive for ${tmuxSessionName}`);\n this.stopTerminal(workSessionId);\n this.failedSessions.delete(workSessionId);\n }, 2000),\n );\n }\n }\n },\n );\n this.unsubscribers.set(workSessionId, unsub);\n }\n\n unwatchSession(workSessionId: string): void {\n const unsub = this.unsubscribers.get(workSessionId);\n if (unsub) {\n unsub();\n this.unsubscribers.delete(workSessionId);\n }\n this.stopTerminal(workSessionId);\n }\n\n private async startTerminal(\n workSessionId: string,\n tmuxSessionName: string,\n tmuxPaneId: string | undefined,\n cols: number,\n rows: number,\n ): Promise<void> {\n if (this.terminals.has(workSessionId)) return;\n\n try {\n // 1. Find a free port\n const port = await findPort();\n\n // 2. Create a linked viewer session (no status bar, targets pane)\n const viewerSession = createViewerSession(tmuxSessionName, tmuxPaneId);\n const isLinked = viewerSession !== tmuxSessionName;\n console.log(\n `[${ts()}] Viewer session: ${viewerSession}${isLinked ? ' (linked)' : ''}`,\n );\n\n // 3. Spawn PTY attached to the viewer session\n console.log(\n `[${ts()}] Spawning PTY: ${TMUX} attach-session -t ${viewerSession}`,\n );\n const ptyProcess = pty.spawn(\n TMUX,\n ['attach-session', '-t', viewerSession],\n {\n name: 'xterm-256color',\n cols: Math.max(cols, 10),\n rows: Math.max(rows, 4),\n cwd: process.env.HOME ?? '/',\n env: { ...process.env, TERM: 'xterm-256color' },\n },\n );\n console.log(`[${ts()}] PTY started`);\n\n // 4. Generate auth token\n const token = randomUUID();\n\n // 5. Start WebSocket server\n const httpServer = createServer();\n const wss = new WebSocketServer({ server: httpServer });\n\n wss.on('connection', (ws, req) => {\n const url = new URL(req.url ?? '/', `http://localhost`);\n const clientToken = url.searchParams.get('token');\n if (clientToken !== token) {\n console.log(`[${ts()}] Rejected unauthorized connection`);\n ws.close(4401, 'Unauthorized');\n return;\n }\n\n console.log(`[${ts()}] Client connected (${tmuxSessionName})`);\n\n // Force tmux to redraw the pane so the client gets a clean initial render\n // (otherwise buffered output from before the WS connected causes garbled display)\n try {\n execFileSync(TMUX, ['refresh-client', '-t', viewerSession]);\n } catch {\n // best effort\n }\n\n const dataHandler = ptyProcess.onData(data => {\n if (ws.readyState === WebSocket.OPEN) {\n ws.send(data);\n }\n });\n\n ws.on('message', msg => {\n const str = msg.toString();\n\n if (str.startsWith('\\x00{')) {\n try {\n const parsed = JSON.parse(str.slice(1));\n if (parsed.type === 'resize' && parsed.cols && parsed.rows) {\n ptyProcess.resize(\n Math.max(parsed.cols, 10),\n Math.max(parsed.rows, 4),\n );\n // Force tmux to redraw at the new size\n try {\n execFileSync(TMUX, ['refresh-client', '-t', viewerSession]);\n } catch {\n // best effort\n }\n return;\n }\n } catch {\n // not a control message\n }\n }\n\n ptyProcess.write(str);\n });\n\n ws.on('close', () => {\n console.log(`[${ts()}] Client disconnected (${tmuxSessionName})`);\n dataHandler.dispose();\n });\n });\n\n await new Promise<void>(resolve => {\n httpServer.listen(port, '0.0.0.0', resolve);\n });\n console.log(`[${ts()}] WS server on port ${port}`);\n\n // 6. Open tunnel\n const tunnelOpts: { port: number; host?: string } = { port };\n if (this.config.tunnelHost) {\n tunnelOpts.host = this.config.tunnelHost;\n }\n console.log(\n `[${ts()}] Opening tunnel...${this.config.tunnelHost ? ` (host: ${this.config.tunnelHost})` : ''}`,\n );\n const tunnel = await localtunnel(tunnelOpts);\n const tunnelUrl = tunnel.url;\n console.log(`[${ts()}] Tunnel: ${tunnelUrl}`);\n\n const wsUrl = tunnelUrl.replace(/^https?:\\/\\//, 'wss://');\n\n const terminal: ActiveTerminal = {\n ptyProcess,\n httpServer,\n wss,\n tunnel,\n viewerSessionName: isLinked ? viewerSession : null,\n token,\n workSessionId,\n tmuxSessionName,\n port,\n };\n this.terminals.set(workSessionId, terminal);\n\n // 7. Write tunnel URL, local port, and token to Convex\n await this.client.mutation(\n api.agentBridge.bridgePublic.updateWorkSessionTerminalUrl,\n {\n deviceId: this.config.deviceId as Id<'agentDevices'>,\n deviceSecret: this.config.deviceSecret,\n workSessionId: workSessionId as Id<'workSessions'>,\n terminalUrl: wsUrl,\n terminalToken: token,\n terminalLocalPort: port,\n },\n );\n\n ptyProcess.onExit(() => {\n console.log(`[${ts()}] PTY exited for ${tmuxSessionName}`);\n this.stopTerminal(workSessionId);\n });\n } catch (err) {\n console.error(`[${ts()}] Failed to start terminal:`, err);\n this.failedSessions.add(workSessionId);\n }\n }\n\n private stopTerminal(workSessionId: string): void {\n const terminal = this.terminals.get(workSessionId);\n if (!terminal) return;\n\n try {\n terminal.ptyProcess.kill();\n } catch {\n /* */\n }\n try {\n terminal.tunnel.close();\n } catch {\n /* */\n }\n try {\n terminal.wss.close();\n } catch {\n /* */\n }\n try {\n terminal.httpServer.close();\n } catch {\n /* */\n }\n // Clean up the linked viewer session\n if (terminal.viewerSessionName) {\n killViewerSession(terminal.viewerSessionName);\n }\n this.terminals.delete(workSessionId);\n console.log(`[${ts()}] Terminal stopped for ${terminal.tmuxSessionName}`);\n }\n\n stop(): void {\n for (const unsub of this.unsubscribers.values()) {\n try {\n unsub();\n } catch {\n /* */\n }\n }\n this.unsubscribers.clear();\n\n for (const id of this.terminals.keys()) {\n this.stopTerminal(id);\n }\n\n void this.client.close();\n }\n}\n","import { execSync, spawn } from 'child_process';\nimport { existsSync, readFileSync, readdirSync } from 'fs';\nimport { homedir, userInfo } from 'os';\nimport { basename, join } from 'path';\nimport type { AgentProvider } from '../../../convex/_shared/agentBridge';\n\nexport type BridgeProvider = 'codex' | 'claude_code';\n\nexport interface SessionProcessRecord {\n provider: AgentProvider;\n providerLabel: string;\n localProcessId?: string;\n sessionKey: string;\n cwd?: string;\n repoRoot?: string;\n branch?: string;\n title?: string;\n model?: string;\n tmuxSessionName?: string;\n tmuxWindowName?: string;\n tmuxPaneId?: string;\n mode: 'observed' | 'managed';\n status: 'observed' | 'waiting';\n supportsInboundMessages: true;\n}\n\nexport interface SessionRunResult extends SessionProcessRecord {\n responseText?: string;\n launchCommand: string;\n}\n\nconst LSOF_PATHS = ['/usr/sbin/lsof', '/usr/bin/lsof'];\nconst VECTOR_BRIDGE_CLIENT_VERSION = '0.1.0';\n\nexport function discoverAttachableSessions(): SessionProcessRecord[] {\n return dedupeSessions([\n ...discoverTmuxSessions(),\n ...discoverCodexSessions(),\n ...discoverClaudeSessions(),\n ]);\n}\n\nexport async function launchProviderSession(\n provider: BridgeProvider,\n cwd: string,\n prompt: string,\n): Promise<SessionRunResult> {\n if (provider === 'codex') {\n return runCodexAppServerTurn({\n cwd,\n prompt,\n launchCommand: 'codex app-server',\n });\n }\n\n return runClaudeSdkTurn({\n cwd,\n prompt,\n launchCommand: '@anthropic-ai/claude-agent-sdk query()',\n });\n}\n\nexport async function resumeProviderSession(\n provider: BridgeProvider,\n sessionKey: string,\n cwd: string,\n prompt: string,\n): Promise<SessionRunResult> {\n if (provider === 'codex') {\n return runCodexAppServerTurn({\n cwd,\n prompt,\n sessionKey,\n launchCommand: 'codex app-server (thread/resume)',\n });\n }\n\n return runClaudeSdkTurn({\n cwd,\n prompt,\n sessionKey,\n launchCommand: '@anthropic-ai/claude-agent-sdk query(resume)',\n });\n}\n\nasync function runCodexAppServerTurn(args: {\n cwd: string;\n prompt: string;\n sessionKey?: string;\n launchCommand: string;\n}): Promise<SessionRunResult> {\n const child = spawn('codex', ['app-server'], {\n cwd: args.cwd,\n env: { ...process.env },\n stdio: ['pipe', 'pipe', 'pipe'],\n });\n\n let stderr = '';\n let stdoutBuffer = '';\n let sessionKey = args.sessionKey;\n let finalAssistantText = '';\n let completed = false;\n let nextRequestId = 1;\n const pending = new Map<\n number,\n {\n resolve: (value: unknown) => void;\n reject: (error: Error) => void;\n }\n >();\n let completeTurn: (() => void) | undefined;\n let failTurn: ((error: Error) => void) | undefined;\n const turnCompleted = new Promise<void>((resolve, reject) => {\n completeTurn = () => {\n completed = true;\n resolve();\n };\n failTurn = error => {\n completed = true;\n reject(error);\n };\n });\n\n child.stdout.on('data', chunk => {\n stdoutBuffer += chunk.toString();\n\n while (true) {\n const newlineIndex = stdoutBuffer.indexOf('\\n');\n if (newlineIndex < 0) {\n break;\n }\n\n const line = stdoutBuffer.slice(0, newlineIndex).trim();\n stdoutBuffer = stdoutBuffer.slice(newlineIndex + 1);\n if (!line) {\n continue;\n }\n\n const payload = tryParseJson(line);\n if (!payload || typeof payload !== 'object') {\n continue;\n }\n\n const responseId = (payload as { id?: unknown }).id;\n if (typeof responseId === 'number' && pending.has(responseId)) {\n const entry = pending.get(responseId)!;\n pending.delete(responseId);\n const errorRecord = asObject((payload as { error?: unknown }).error);\n if (errorRecord) {\n entry.reject(\n new Error(\n `codex app-server error: ${asString(errorRecord.message) ?? 'Unknown JSON-RPC error'}`,\n ),\n );\n continue;\n }\n\n entry.resolve((payload as { result?: unknown }).result);\n continue;\n }\n\n const method = asString((payload as { method?: unknown }).method);\n const params = asObject((payload as { params?: unknown }).params);\n if (!method || !params) {\n continue;\n }\n\n if (method === 'thread/started') {\n sessionKey =\n asString(asObject(params.thread)?.id) ??\n asString(asObject(params.thread)?.threadId) ??\n sessionKey;\n continue;\n }\n\n if (method === 'item/agentMessage/delta') {\n finalAssistantText += asString(params.delta) ?? '';\n continue;\n }\n\n if (method === 'item/completed') {\n const item = asObject(params.item);\n if (asString(item?.type) === 'agentMessage') {\n finalAssistantText = asString(item?.text) ?? finalAssistantText;\n }\n continue;\n }\n\n if (method === 'turn/completed') {\n const turn = asObject(params.turn);\n const status = asString(turn?.status);\n if (status === 'failed') {\n const turnError = asObject(turn?.error);\n failTurn?.(\n new Error(\n asString(turnError?.message) ??\n 'Codex turn failed without an error message',\n ),\n );\n } else if (status === 'interrupted') {\n failTurn?.(new Error('Codex turn was interrupted'));\n } else {\n completeTurn?.();\n }\n }\n }\n });\n\n child.stderr.on('data', chunk => {\n stderr += chunk.toString();\n });\n\n const request = (method: string, params?: unknown): Promise<unknown> =>\n new Promise((resolve, reject) => {\n const id = nextRequestId++;\n pending.set(id, { resolve, reject });\n child.stdin.write(`${JSON.stringify({ method, id, params })}\\n`);\n });\n\n const notify = (method: string, params?: unknown): void => {\n child.stdin.write(`${JSON.stringify({ method, params })}\\n`);\n };\n\n const waitForExit = new Promise<never>((_, reject) => {\n child.on('error', error => reject(error));\n child.on('close', code => {\n if (!completed) {\n const detail =\n stderr.trim() || `codex app-server exited with code ${code}`;\n reject(new Error(detail));\n }\n });\n });\n\n try {\n await Promise.race([\n request('initialize', {\n clientInfo: {\n name: 'vector_bridge',\n title: 'Vector Bridge',\n version: VECTOR_BRIDGE_CLIENT_VERSION,\n },\n }),\n waitForExit,\n ]);\n notify('initialized', {});\n\n const threadResult = (await Promise.race([\n args.sessionKey\n ? request('thread/resume', {\n threadId: args.sessionKey,\n cwd: args.cwd,\n approvalPolicy: 'never',\n personality: 'pragmatic',\n })\n : request('thread/start', {\n cwd: args.cwd,\n approvalPolicy: 'never',\n personality: 'pragmatic',\n serviceName: 'vector_bridge',\n }),\n waitForExit,\n ])) as { thread?: unknown };\n\n sessionKey =\n asString(asObject(threadResult.thread)?.id) ??\n asString(asObject(threadResult.thread)?.threadId) ??\n sessionKey;\n\n if (!sessionKey) {\n throw new Error('Codex app-server did not return a thread id');\n }\n\n await Promise.race([\n request('turn/start', {\n threadId: sessionKey,\n input: [{ type: 'text', text: args.prompt }],\n cwd: args.cwd,\n approvalPolicy: 'never',\n personality: 'pragmatic',\n }),\n waitForExit,\n ]);\n\n await Promise.race([turnCompleted, waitForExit]);\n\n const gitInfo = getGitInfo(args.cwd);\n\n return {\n provider: 'codex',\n providerLabel: 'Codex',\n sessionKey,\n cwd: args.cwd,\n ...gitInfo,\n title: summarizeTitle(undefined, args.cwd),\n mode: 'managed',\n status: 'waiting',\n supportsInboundMessages: true,\n responseText: finalAssistantText.trim() || undefined,\n launchCommand: args.launchCommand,\n };\n } finally {\n for (const entry of pending.values()) {\n entry.reject(\n new Error('codex app-server closed before request resolved'),\n );\n }\n pending.clear();\n child.kill();\n }\n}\n\nasync function runClaudeSdkTurn(args: {\n cwd: string;\n prompt: string;\n sessionKey?: string;\n launchCommand: string;\n}): Promise<SessionRunResult> {\n const { query } = await import('@anthropic-ai/claude-agent-sdk');\n\n const stream = query({\n prompt: args.prompt,\n options: {\n cwd: args.cwd,\n resume: args.sessionKey,\n persistSession: true,\n permissionMode: 'bypassPermissions',\n allowDangerouslySkipPermissions: true,\n env: {\n ...process.env,\n CLAUDE_AGENT_SDK_CLIENT_APP: `vector-bridge/${VECTOR_BRIDGE_CLIENT_VERSION}`,\n },\n },\n });\n\n let sessionKey = args.sessionKey;\n let responseText = '';\n let model: string | undefined;\n\n try {\n for await (const message of stream) {\n if (!message || typeof message !== 'object') {\n continue;\n }\n\n sessionKey =\n asString((message as { session_id?: unknown }).session_id) ??\n sessionKey;\n\n if ((message as { type?: unknown }).type === 'assistant') {\n const assistantText = extractClaudeMessageTexts(\n (message as { message?: unknown }).message,\n )\n .join('\\n\\n')\n .trim();\n if (assistantText) {\n responseText = assistantText;\n }\n continue;\n }\n\n if ((message as { type?: unknown }).type !== 'result') {\n continue;\n }\n\n if ((message as { subtype?: unknown }).subtype === 'success') {\n const resultText = asString((message as { result?: unknown }).result);\n if (resultText) {\n responseText = resultText;\n }\n model = firstObjectKey(\n (message as { modelUsage?: unknown }).modelUsage,\n );\n continue;\n }\n\n const errors = (message as { errors?: unknown }).errors;\n const detail =\n Array.isArray(errors) && errors.length > 0\n ? errors.join('\\n')\n : 'Claude execution failed';\n throw new Error(detail);\n }\n } finally {\n stream.close();\n }\n\n if (!sessionKey) {\n throw new Error('Claude Agent SDK did not return a session id');\n }\n\n const gitInfo = getGitInfo(args.cwd);\n\n return {\n provider: 'claude_code',\n providerLabel: 'Claude',\n sessionKey,\n cwd: args.cwd,\n ...gitInfo,\n title: summarizeTitle(undefined, args.cwd),\n model,\n mode: 'managed',\n status: 'waiting',\n supportsInboundMessages: true,\n responseText: responseText.trim() || undefined,\n launchCommand: args.launchCommand,\n };\n}\n\nfunction discoverCodexSessions(): SessionProcessRecord[] {\n const historyBySession = buildCodexHistoryIndex();\n\n return listLiveProcessIds('codex')\n .flatMap(pid => {\n const transcriptPath = getCodexTranscriptPath(pid);\n if (!transcriptPath) {\n return [];\n }\n\n const processCwd = getProcessCwd(pid);\n const parsed = parseObservedCodexSession(\n pid,\n transcriptPath,\n processCwd,\n historyBySession,\n );\n return parsed ? [parsed] : [];\n })\n .sort(compareObservedSessions);\n}\n\nfunction discoverClaudeSessions(): SessionProcessRecord[] {\n const historyBySession = buildClaudeHistoryIndex();\n\n return listLiveProcessIds('claude')\n .flatMap(pid => {\n const sessionMeta = readClaudePidSession(pid);\n if (!sessionMeta?.sessionId) {\n return [];\n }\n\n const transcriptPath = findClaudeTranscriptPath(sessionMeta.sessionId);\n const parsed = parseObservedClaudeSession(\n pid,\n sessionMeta,\n transcriptPath,\n historyBySession,\n );\n return parsed ? [parsed] : [];\n })\n .sort(compareObservedSessions);\n}\n\nfunction discoverTmuxSessions(): SessionProcessRecord[] {\n try {\n const output = execSync(\n \"tmux list-panes -a -F '#{pane_id}\\t#{pane_pid}\\t#{session_name}\\t#{window_name}\\t#{pane_current_path}\\t#{pane_current_command}\\t#{pane_title}'\",\n {\n encoding: 'utf-8',\n timeout: 3000,\n },\n );\n\n return output\n .split('\\n')\n .map(line => line.trim())\n .filter(Boolean)\n .flatMap(line => {\n const [\n paneId,\n panePid,\n sessionName,\n windowName,\n cwd,\n currentCommand,\n paneTitle,\n ] = line.split('\\t');\n\n if (!paneId || !panePid || !sessionName || !windowName || !cwd) {\n return [];\n }\n\n const normalizedCommand = (currentCommand ?? '').trim().toLowerCase();\n if (normalizedCommand === 'codex' || normalizedCommand === 'claude') {\n return [];\n }\n\n const gitInfo = getGitInfo(cwd);\n const title = summarizeTitle(\n buildTmuxPaneTitle({\n paneTitle,\n sessionName,\n windowName,\n cwd,\n currentCommand,\n }),\n cwd,\n );\n\n return [\n {\n provider: 'vector_cli' as const,\n providerLabel: 'Tmux',\n localProcessId: panePid,\n sessionKey: `tmux:${paneId}`,\n cwd,\n ...gitInfo,\n title,\n tmuxSessionName: sessionName,\n tmuxWindowName: windowName,\n tmuxPaneId: paneId,\n mode: 'observed' as const,\n status: 'observed' as const,\n supportsInboundMessages: true as const,\n },\n ];\n })\n .sort(compareObservedSessions);\n } catch {\n return [];\n }\n}\n\nfunction getCodexSessionsDir(): string {\n return join(getRealHomeDir(), '.codex', 'sessions');\n}\n\nfunction getCodexHistoryFile(): string {\n return join(getRealHomeDir(), '.codex', 'history.jsonl');\n}\n\nfunction getClaudeProjectsDir(): string {\n return join(getRealHomeDir(), '.claude', 'projects');\n}\n\nfunction getClaudeSessionStateDir(): string {\n return join(getRealHomeDir(), '.claude', 'sessions');\n}\n\nfunction getClaudeHistoryFile(): string {\n return join(getRealHomeDir(), '.claude', 'history.jsonl');\n}\n\nfunction getRealHomeDir(): string {\n try {\n const realHome = userInfo().homedir?.trim();\n if (realHome) {\n return realHome;\n }\n } catch {\n /* fall back */\n }\n\n return homedir();\n}\n\nfunction resolveExecutable(\n fallbackCommand: string,\n absoluteCandidates: string[],\n): string | undefined {\n for (const candidate of absoluteCandidates) {\n if (existsSync(candidate)) {\n return candidate;\n }\n }\n\n try {\n const output = execSync(`command -v ${fallbackCommand}`, {\n encoding: 'utf-8',\n timeout: 1000,\n }).trim();\n return output || undefined;\n } catch {\n return undefined;\n }\n}\n\nfunction listLiveProcessIds(commandName: string): string[] {\n try {\n const output = execSync('ps -axo pid=,comm=', {\n encoding: 'utf-8',\n timeout: 3000,\n });\n\n return output\n .split('\\n')\n .map(line => line.trim())\n .filter(Boolean)\n .map(line => line.split(/\\s+/, 2))\n .filter(([, command]) => command === commandName)\n .map(([pid]) => pid)\n .filter(Boolean);\n } catch {\n return [];\n }\n}\n\nfunction getProcessCwd(pid: string): string | undefined {\n const lsofCommand = resolveExecutable('lsof', LSOF_PATHS);\n if (!lsofCommand) {\n return undefined;\n }\n\n try {\n const output = execSync(`${lsofCommand} -a -p ${pid} -Fn -d cwd`, {\n encoding: 'utf-8',\n timeout: 3000,\n });\n\n return output\n .split('\\n')\n .map(line => line.trim())\n .find(line => line.startsWith('n'))\n ?.slice(1);\n } catch {\n return undefined;\n }\n}\n\nfunction getCodexTranscriptPath(pid: string): string | undefined {\n const lsofCommand = resolveExecutable('lsof', LSOF_PATHS);\n if (!lsofCommand) {\n return undefined;\n }\n\n try {\n const output = execSync(`${lsofCommand} -p ${pid} -Fn`, {\n encoding: 'utf-8',\n timeout: 3000,\n });\n\n return output\n .split('\\n')\n .map(line => line.trim())\n .find(\n line =>\n line.startsWith('n') &&\n line.includes('/.codex/sessions/') &&\n line.endsWith('.jsonl'),\n )\n ?.slice(1);\n } catch {\n return undefined;\n }\n}\n\nfunction readClaudePidSession(\n pid: string,\n): { sessionId: string; cwd?: string; startedAt?: number } | null {\n const path = join(getClaudeSessionStateDir(), `${pid}.json`);\n if (!existsSync(path)) {\n return null;\n }\n\n try {\n const payload = JSON.parse(readFileSync(path, 'utf-8'));\n const sessionId = asString(payload.sessionId);\n if (!sessionId) {\n return null;\n }\n\n return {\n sessionId,\n cwd: asString(payload.cwd),\n startedAt:\n typeof payload.startedAt === 'number' ? payload.startedAt : undefined,\n };\n } catch {\n return null;\n }\n}\n\nfunction findClaudeTranscriptPath(sessionId: string): string | undefined {\n return findJsonlFileByStem(getClaudeProjectsDir(), sessionId);\n}\n\nfunction findJsonlFileByStem(root: string, stem: string): string | undefined {\n if (!existsSync(root)) {\n return undefined;\n }\n\n for (const entry of readdirSync(root, { withFileTypes: true })) {\n const path = join(root, entry.name);\n if (entry.isDirectory()) {\n const nested = findJsonlFileByStem(path, stem);\n if (nested) {\n return nested;\n }\n continue;\n }\n\n if (entry.isFile() && entry.name === `${stem}.jsonl`) {\n return path;\n }\n }\n\n return undefined;\n}\n\nfunction readJsonLines(path: string): unknown[] {\n try {\n return readFileSync(path, 'utf-8')\n .split('\\n')\n .map(line => line.trim())\n .filter(Boolean)\n .map(tryParseJson)\n .filter(Boolean);\n } catch {\n return [];\n }\n}\n\nfunction tryParseJson(value: string): unknown | null {\n try {\n return JSON.parse(value);\n } catch {\n return null;\n }\n}\n\nfunction dedupeSessions(\n sessions: SessionProcessRecord[],\n): SessionProcessRecord[] {\n const seen = new Set<string>();\n return sessions.filter(session => {\n const key = `${session.provider}:${session.localProcessId ?? session.sessionKey}`;\n if (seen.has(key)) {\n return false;\n }\n seen.add(key);\n return true;\n });\n}\n\nfunction compareObservedSessions(\n a: SessionProcessRecord,\n b: SessionProcessRecord,\n): number {\n return Number(b.localProcessId ?? 0) - Number(a.localProcessId ?? 0);\n}\n\nfunction parseObservedCodexSession(\n pid: string,\n transcriptPath: string,\n processCwd?: string,\n historyBySession?: Map<string, string[]>,\n): SessionProcessRecord | null {\n const entries = readJsonLines(transcriptPath);\n let sessionKey: string | undefined;\n let cwd = processCwd;\n const userMessages: string[] = [];\n const assistantMessages: string[] = [];\n\n for (const rawEntry of entries) {\n const entry = asObject(rawEntry);\n if (!entry) {\n continue;\n }\n\n if (entry.type === 'session_meta') {\n const payload = asObject(entry.payload);\n sessionKey = asString(payload?.id) ?? sessionKey;\n cwd = asString(payload?.cwd) ?? cwd;\n }\n\n if (entry.type === 'event_msg') {\n const payload = asObject(entry.payload);\n if (payload?.type === 'user_message') {\n pushIfPresent(userMessages, payload.message);\n }\n }\n\n if (\n entry.type === 'response_item' &&\n asObject(entry.payload)?.type === 'message' &&\n asObject(entry.payload)?.role === 'user'\n ) {\n userMessages.push(\n ...extractTextSegments(asObject(entry.payload)?.content),\n );\n }\n\n if (entry.type === 'event_msg') {\n const payload = asObject(entry.payload);\n if (payload?.type === 'agent_message') {\n pushIfPresent(assistantMessages, payload.message);\n }\n }\n\n if (\n entry.type === 'response_item' &&\n asObject(entry.payload)?.type === 'message' &&\n asObject(entry.payload)?.role === 'assistant'\n ) {\n assistantMessages.push(\n ...extractTextSegments(asObject(entry.payload)?.content),\n );\n }\n }\n\n if (!sessionKey) {\n return null;\n }\n\n const gitInfo = cwd ? getGitInfo(cwd) : {};\n const historyTitle = sessionKey\n ? selectSessionTitle(historyBySession?.get(sessionKey) ?? [])\n : undefined;\n\n return {\n provider: 'codex',\n providerLabel: 'Codex',\n localProcessId: pid,\n sessionKey,\n cwd,\n ...gitInfo,\n title: summarizeTitle(\n historyTitle ??\n selectSessionTitle(userMessages) ??\n selectSessionTitle(assistantMessages),\n cwd,\n ),\n mode: 'observed',\n status: 'observed',\n supportsInboundMessages: true,\n };\n}\n\nfunction parseObservedClaudeSession(\n pid: string,\n sessionMeta: { sessionId: string; cwd?: string; startedAt?: number },\n transcriptPath?: string,\n historyBySession?: Map<string, string[]>,\n): SessionProcessRecord | null {\n const entries = transcriptPath ? readJsonLines(transcriptPath) : [];\n let cwd = sessionMeta.cwd;\n let branch: string | undefined;\n let model: string | undefined;\n const userMessages: string[] = [];\n const assistantMessages: string[] = [];\n\n for (const rawEntry of entries) {\n const entry = asObject(rawEntry);\n if (!entry) {\n continue;\n }\n\n cwd = asString(entry.cwd) ?? cwd;\n branch = asString(entry.gitBranch) ?? branch;\n\n if (entry.type === 'user') {\n userMessages.push(...extractClaudeMessageTexts(entry.message));\n }\n\n if (entry.type === 'assistant') {\n const message = asObject(entry.message);\n model = asString(message?.model) ?? model;\n assistantMessages.push(...extractClaudeMessageTexts(entry.message));\n }\n }\n\n const gitInfo = cwd ? getGitInfo(cwd) : {};\n const historyTitle = selectSessionTitle(\n historyBySession?.get(sessionMeta.sessionId) ?? [],\n );\n\n return {\n provider: 'claude_code',\n providerLabel: 'Claude',\n localProcessId: pid,\n sessionKey: sessionMeta.sessionId,\n cwd,\n repoRoot: gitInfo.repoRoot,\n branch: branch ?? gitInfo.branch,\n title: summarizeTitle(\n historyTitle ??\n selectSessionTitle(userMessages) ??\n selectSessionTitle(assistantMessages),\n cwd,\n ),\n model,\n mode: 'observed',\n status: 'observed',\n supportsInboundMessages: true,\n };\n}\n\nfunction extractCodexResponseText(content: unknown): string | undefined {\n const texts = extractTextSegments(content);\n return texts.length > 0 ? texts.join('\\n\\n') : undefined;\n}\n\nfunction extractClaudeUserText(message: unknown): string | undefined {\n const texts = extractClaudeMessageTexts(message);\n if (texts.length > 0) {\n return texts.join('\\n\\n');\n }\n return undefined;\n}\n\nfunction extractClaudeAssistantText(message: unknown): string | undefined {\n const texts = extractClaudeMessageTexts(message);\n return texts.length > 0 ? texts.join('\\n\\n') : undefined;\n}\n\nfunction summarizeTitle(message: string | undefined, cwd?: string): string {\n if (message) {\n return truncate(message.replace(/\\s+/g, ' ').trim(), 96);\n }\n\n if (cwd) {\n return basename(cwd);\n }\n\n return 'Local session';\n}\n\nfunction buildTmuxPaneTitle(args: {\n paneTitle?: string;\n sessionName: string;\n windowName: string;\n cwd: string;\n currentCommand?: string;\n}): string {\n const paneTitle = cleanSessionTitleCandidate(args.paneTitle ?? '');\n if (paneTitle) {\n return paneTitle;\n }\n\n const command = asString(args.currentCommand);\n if (command && !['zsh', 'bash', 'fish', 'sh', 'nu'].includes(command)) {\n return `${command} in ${basename(args.cwd)}`;\n }\n\n return `${basename(args.cwd)} (${args.sessionName}:${args.windowName})`;\n}\n\nfunction truncate(value: string, maxLength: number): string {\n return value.length > maxLength\n ? `${value.slice(0, maxLength - 3).trimEnd()}...`\n : value;\n}\n\nfunction firstObjectKey(value: unknown): string | undefined {\n if (!value || typeof value !== 'object') {\n return undefined;\n }\n\n const [firstKey] = Object.keys(value);\n return firstKey ? normalizeModelKey(firstKey) : undefined;\n}\n\nfunction normalizeModelKey(value: string): string | undefined {\n const normalized = stripAnsi(value)\n .replace(/\\[\\d+(?:;\\d+)*m$/g, '')\n .trim();\n return normalized || undefined;\n}\n\nfunction asObject(value: unknown): Record<string, unknown> | undefined {\n return value && typeof value === 'object'\n ? (value as Record<string, unknown>)\n : undefined;\n}\n\nfunction asString(value: unknown): string | undefined {\n return typeof value === 'string' && value.trim() ? value : undefined;\n}\n\nfunction pushIfPresent(target: string[], value: unknown): void {\n const text = asString(value);\n if (text) {\n target.push(text);\n }\n}\n\nfunction extractClaudeMessageTexts(message: unknown): string[] {\n if (!message || typeof message !== 'object') {\n return [];\n }\n\n return extractTextSegments((message as { content?: unknown }).content);\n}\n\nfunction extractTextSegments(value: unknown): string[] {\n if (typeof value === 'string') {\n return [value];\n }\n\n if (!Array.isArray(value)) {\n return [];\n }\n\n return value.flatMap(extractTextSegmentFromBlock).filter(Boolean);\n}\n\nfunction extractTextSegmentFromBlock(block: unknown): string[] {\n if (!block || typeof block !== 'object') {\n return [];\n }\n\n const typedBlock = block as {\n type?: unknown;\n text?: unknown;\n content?: unknown;\n };\n\n const blockType = asString(typedBlock.type);\n if (blockType && isIgnoredContentBlockType(blockType)) {\n return [];\n }\n\n const directText = asString(typedBlock.text);\n if (directText) {\n return [directText];\n }\n\n if (typeof typedBlock.content === 'string') {\n return [typedBlock.content];\n }\n\n return [];\n}\n\nfunction isIgnoredContentBlockType(blockType: string): boolean {\n return [\n 'tool_result',\n 'tool_use',\n 'image',\n 'thinking',\n 'reasoning',\n 'contextCompaction',\n ].includes(blockType);\n}\n\nfunction buildCodexHistoryIndex(): Map<string, string[]> {\n const historyBySession = new Map<string, string[]>();\n\n for (const rawEntry of readJsonLines(getCodexHistoryFile())) {\n const entry = asObject(rawEntry);\n if (!entry) {\n continue;\n }\n\n const sessionId = asString(entry.session_id);\n const text = asString(entry.text);\n if (!sessionId || !text) {\n continue;\n }\n\n appendHistoryEntry(historyBySession, sessionId, text);\n }\n\n return historyBySession;\n}\n\nfunction buildClaudeHistoryIndex(): Map<string, string[]> {\n const historyBySession = new Map<string, string[]>();\n\n for (const rawEntry of readJsonLines(getClaudeHistoryFile())) {\n const entry = asObject(rawEntry);\n if (!entry) {\n continue;\n }\n\n const sessionId = asString(entry.sessionId);\n if (!sessionId) {\n continue;\n }\n\n const texts = extractClaudeHistoryTexts(entry);\n for (const text of texts) {\n appendHistoryEntry(historyBySession, sessionId, text);\n }\n }\n\n return historyBySession;\n}\n\nfunction appendHistoryEntry(\n historyBySession: Map<string, string[]>,\n sessionId: string,\n text: string,\n): void {\n const existing = historyBySession.get(sessionId);\n if (existing) {\n existing.push(text);\n return;\n }\n\n historyBySession.set(sessionId, [text]);\n}\n\nfunction extractClaudeHistoryTexts(entry: unknown): string[] {\n if (!entry || typeof entry !== 'object') {\n return [];\n }\n\n const record = entry as {\n display?: unknown;\n pastedContents?: unknown;\n };\n\n const pastedTexts = extractClaudePastedTexts(record.pastedContents);\n if (pastedTexts.length > 0) {\n return pastedTexts;\n }\n\n const display = asString(record.display);\n return display ? [display] : [];\n}\n\nfunction extractClaudePastedTexts(value: unknown): string[] {\n if (!value || typeof value !== 'object') {\n return [];\n }\n\n return Object.values(value as Record<string, unknown>)\n .flatMap(item => {\n if (!item || typeof item !== 'object') {\n return [];\n }\n\n const record = item as {\n type?: unknown;\n content?: unknown;\n };\n\n return record.type === 'text' && typeof record.content === 'string'\n ? [record.content]\n : [];\n })\n .filter(Boolean);\n}\n\nfunction selectSessionTitle(messages: string[]): string | undefined {\n for (const message of messages) {\n const cleaned = cleanSessionTitleCandidate(message);\n if (cleaned) {\n return cleaned;\n }\n }\n\n return undefined;\n}\n\nfunction cleanSessionTitleCandidate(message: string): string | undefined {\n const normalized = stripAnsi(message).replace(/\\s+/g, ' ').trim();\n if (!normalized) {\n return undefined;\n }\n\n if (normalized.length < 4) {\n return undefined;\n }\n\n if (\n normalized.startsWith('/') ||\n looksLikeGeneratedTagEnvelope(normalized) ||\n looksLikeGeneratedImageSummary(normalized) ||\n looksLikeStandaloneImagePath(normalized) ||\n looksLikeInstructionScaffold(normalized)\n ) {\n return undefined;\n }\n\n return normalized;\n}\n\nfunction looksLikeGeneratedTagEnvelope(value: string): boolean {\n return /^<[\\w:-]+>[\\s\\S]*<\\/[\\w:-]+>$/.test(value);\n}\n\nfunction looksLikeGeneratedImageSummary(value: string): boolean {\n return (\n /^\\[image:/i.test(value) ||\n (/displayed at/i.test(value) && /coordinates/i.test(value))\n );\n}\n\nfunction looksLikeStandaloneImagePath(value: string): boolean {\n return (\n /^\\/\\S+\\.(png|jpe?g|gif|webp|heic|bmp)$/i.test(value) ||\n /^file:\\S+\\.(png|jpe?g|gif|webp|heic|bmp)$/i.test(value)\n );\n}\n\nfunction looksLikeInstructionScaffold(value: string): boolean {\n if (value.length < 700) {\n return false;\n }\n\n const headingCount = value.match(/^#{1,3}\\s/gm)?.length ?? 0;\n const tagCount = value.match(/<\\/?[\\w:-]+>/g)?.length ?? 0;\n const bulletCount = value.match(/^\\s*[-*]\\s/gm)?.length ?? 0;\n\n return headingCount + tagCount + bulletCount >= 6;\n}\n\nfunction stripAnsi(value: string): string {\n return value.replace(/\\u001B\\[[0-9;]*m/g, '');\n}\n\nfunction getGitInfo(cwd: string): { repoRoot?: string; branch?: string } {\n try {\n const repoRoot = execSync('git rev-parse --show-toplevel', {\n encoding: 'utf-8',\n cwd,\n timeout: 3000,\n }).trim();\n const branch = execSync('git rev-parse --abbrev-ref HEAD', {\n encoding: 'utf-8',\n cwd,\n timeout: 3000,\n }).trim();\n\n return {\n repoRoot: repoRoot || undefined,\n branch: branch || undefined,\n };\n } catch {\n return {};\n }\n}\n"],"mappings":"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","names":["fs","process","fs","process","Buffer","fs","promisify","childProcess","fs","fsConstants","execFile","powerShellPath","path","promisify","process","execFile","process","promisify","execFile","execFileSync","execFileAsync","promisify","execFile","execFileAsync","promisify","process","execFile","defaultBrowser","execFileAsync","process","process","path","childProcess","fs","fsConstants","platform","apps","defaultBrowser","powerShellPath","readFileSync","readFile","join","fileURLToPath","ConvexHttpClient","ConvexHttpClient","execFileSync","execSync","existsSync","readFileSync","homedir","join","randomUUID","spawn","existsSync","homedir","prompt","spawn","homedir","existsSync","path","text","join","homedir","existsSync","readFileSync","ConvexHttpClient","ts","process","prompt","providerLabel","randomUUID","execFileSync","text","execSync","path","existsSync","readFileSync","ts","path","ConvexHttpClient","readFile","fileURLToPath","readFileSync","join","open","fs"]}