iterate 0.2.6 → 0.2.7

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/bin/iterate.js CHANGED
@@ -28,6 +28,13 @@ const __filename = fileURLToPath(import.meta.url);
28
28
  const __dirname = dirname(__filename);
29
29
  const pkgRoot = dirname(__dirname);
30
30
 
31
+ // `npx iterate` and `bunx iterate` should exercise the package that the runner
32
+ // just installed. Normal installed/global executions still delegate to local
33
+ // repo source below, which keeps monorepo development fast.
34
+ const isEphemeralPackageRunner = () =>
35
+ process.env.npm_command === "exec" &&
36
+ (process.env.npm_lifecycle_event === "npx" || process.env.npm_lifecycle_event === "bunx");
37
+
31
38
  /**
32
39
  * Find a local version of the iterate CLI that differs from the currently
33
40
  * running script. Returns an importable module path, or null.
@@ -64,7 +71,7 @@ const findLocalModule = () => {
64
71
  return null;
65
72
  };
66
73
 
67
- const localModule = findLocalModule();
74
+ const localModule = isEphemeralPackageRunner() ? null : findLocalModule();
68
75
  if (localModule) {
69
76
  const { runCli } = await import(localModule);
70
77
  await runCli();
@@ -1 +1 @@
1
- {"version":3,"file":"cli-DMS4kJph.mjs","names":[],"sources":["../src/cli.ts"],"sourcesContent":["import { spawn } from \"node:child_process\";\nimport { createHash, randomBytes } from \"node:crypto\";\nimport { existsSync } from \"node:fs\";\nimport { createServer, type IncomingMessage, type ServerResponse } from \"node:http\";\nimport { dirname, join } from \"node:path\";\nimport process from \"node:process\";\n\nimport * as prompts from \"@clack/prompts\";\nimport type { RpcStub } from \"capnweb\";\nimport { createORPCClient } from \"@orpc/client\";\nimport { RPCLink } from \"@orpc/client/fetch\";\nimport { os } from \"@orpc/server\";\nimport { createCli, parseRouter, type AnyRouter, yamlTableConsoleLogger } from \"trpc-cli\";\nimport { z } from \"zod/v4\";\nimport type { StandardSchemaV1 } from \"trpc-cli/dist/standard-schema/contract.js\";\nimport type { AuthContractClient } from \"../../../apps/auth-contract/src/index.ts\";\nimport type {\n ItxAuthCredentials,\n ProjectListEntry,\n ProjectRpcTarget,\n Session,\n Stream,\n} from \"../../../apps/os/src/types.ts\";\nimport { connectItx } from \"../../../apps/os/src/itx-client.ts\";\nimport {\n CONFIG_PATH,\n Config,\n DEFAULT_CONFIG_NAME,\n readConfig,\n readConfigFile,\n removeConfigSession,\n updateConfigSession,\n writeConfigFile,\n type StoredSession,\n} from \"./config.ts\";\n\ntype ParsedRouter = ReturnType<typeof parseRouter>;\n\nconst OAUTH_REFRESH_SKEW_MS = 60_000;\nconst DEFAULT_CHAT_AGENT_PATH = \"/agents/onboarding\";\ntype OsAuthHeaders = { cookie?: string; authorization?: string };\ntype OsAuth = { credentials: ItxAuthCredentials; requestHeaders?: HeadersInit };\ntype CreateOsSession = (input: { auth: OsAuth; baseUrl: string }) => RpcStub<Session>;\n\nconst isAgent =\n process.env.AGENT === \"1\" ||\n process.env.OPENCODE === \"1\" ||\n Boolean(process.env.OPENCODE_SESSION) ||\n Boolean(process.env.CLAUDE_CODE);\n\n/** Global override set by --config flag before CLI commands run. */\nlet configFlagOverride: string | undefined;\n\n/**\n * We strip host-level flags before handing argv to `trpc-cli`,\n * That keeps router-local help/validation focused on the mounted\n * procedures instead of teaching every command about iterate-specific flags.\n *\n * Example: `iterate --config dev doctor`\n */\nconst consumeCliStringFlag = (flagName: string): string | undefined => {\n const args = process.argv.slice(2);\n const flagIndex = args.indexOf(flagName);\n if (flagIndex === -1) return undefined;\n const value = args[flagIndex + 1];\n if (!value || value.startsWith(\"-\")) {\n throw new Error(`${flagName} requires a value`);\n }\n process.argv.splice(flagIndex + 2, 2);\n return value;\n};\n\nconst firstNonFlagArgument = (args: string[]): string | undefined => {\n for (const arg of args) {\n if (arg === \"--\") return undefined;\n if (!arg.startsWith(\"-\")) return arg;\n }\n return undefined;\n};\n\nexport const defaultBareInvocationToChat = (args: string[]) =>\n args.length === 0 ? [\"chat\"] : args;\n\nconst applyDefaultBareInvocation = () => {\n const args = process.argv.slice(2);\n const nextArgs = defaultBareInvocationToChat(args);\n if (nextArgs !== args) process.argv.splice(2, args.length, ...nextArgs);\n};\n\nconst resolveStreamTuiEntrypointPath = () => {\n const moduleDir = import.meta.dirname;\n const candidates = [\n join(moduleDir, \"stream-tui/agent-chat-terminal.tsx\"),\n join(moduleDir, \"stream-tui/agent-chat-terminal.mjs\"),\n join(moduleDir, \"stream-tui/agent-chat-terminal.js\"),\n ];\n\n for (const candidate of candidates) {\n if (existsSync(candidate)) return candidate;\n }\n\n throw new Error(\"Could not find the Iterate stream TUI entrypoint.\");\n};\n\nexport const buildChatCommand = (input: {\n osBaseUrl: string;\n projectId: string;\n agentPath: string;\n entrypointPath: string;\n}) => ({\n command: \"bun\",\n args: [\n input.entrypointPath,\n \"--base-url\",\n input.osBaseUrl,\n \"--project-id\",\n input.projectId,\n \"--agent-path\",\n input.agentPath,\n ],\n});\n\nconst runInheritedProcess = async (input: {\n command: string;\n args: string[];\n env: Record<string, string | undefined>;\n}): Promise<void> => {\n const child = spawn(input.command, input.args, {\n stdio: \"inherit\",\n env: { ...process.env, ...input.env },\n });\n\n const result = await new Promise<{ code: number | null; signal: NodeJS.Signals | null }>(\n (resolve, reject) => {\n child.on(\"error\", reject);\n child.on(\"exit\", (code, signal) => resolve({ code, signal }));\n },\n );\n\n if (result.signal) {\n throw new Error(`${input.command} exited with signal ${result.signal}.`);\n }\n if (result.code !== 0) {\n throw new Error(`${input.command} exited with code ${result.code ?? \"unknown\"}.`);\n }\n};\n\nconst hasConfig = (configFile: ReturnType<typeof readConfigFile>, name: string) =>\n name === DEFAULT_CONFIG_NAME || Boolean(configFile.configs?.[name]);\n\n/**\n * Resolve which config name to use.\n * Priority: --config flag > workspace match (walk up from cwd) > default > single-config auto > built-in prd\n */\nconst resolveConfigName = (workspacePath: string): string | Error => {\n const configFile = readConfigFile();\n\n if (configFlagOverride) {\n if (!hasConfig(configFile, configFlagOverride)) {\n return new Error(\n `Config \"${configFlagOverride}\" not found. Available: ${Object.keys(configFile.configs || {}).join(\", \") || \"(none)\"}`,\n );\n }\n return configFlagOverride;\n }\n\n // Walk up directory tree for workspace match\n let dir = workspacePath;\n while (dir && dir !== \"/\") {\n const match = configFile.workspaces?.[dir];\n if (match) {\n if (!hasConfig(configFile, match)) {\n return new Error(`Workspace \"${dir}\" maps to config \"${match}\" which doesn't exist.`);\n }\n return match;\n }\n dir = dirname(dir);\n }\n\n if (configFile.default) {\n if (!hasConfig(configFile, configFile.default)) {\n return new Error(\n `Default config \"${configFile.default}\" doesn't exist. Available: ${Object.keys(configFile.configs || {}).join(\", \") || \"(none)\"}`,\n );\n }\n return configFile.default;\n }\n\n // If there's exactly one config, use it\n const configNames = Object.keys(configFile.configs || {});\n if (configNames.length === 1) return configNames[0];\n\n return DEFAULT_CONFIG_NAME;\n};\n\nfunction resolveConfig(workspacePath: string): { name: string; config: Config } | Error;\nfunction resolveConfig(\n workspacePath: string,\n options: { throw: true },\n): { name: string; config: Config };\nfunction resolveConfig(\n workspacePath: string,\n options?: { throw: true },\n): { name: string; config: Config } | Error {\n const result = ((): { name: string; config: Config } | Error => {\n const name = resolveConfigName(workspacePath);\n if (name instanceof Error) return name;\n const config = readConfig(name);\n if (config instanceof Error) return config;\n return { name, config };\n })();\n if (result instanceof Error && options?.throw) throw result;\n return result;\n}\n\nclass StoredOsSessionError extends Error {\n constructor(\n readonly reason: \"missing\" | \"expired\",\n message: string,\n ) {\n super(message);\n this.name = \"StoredOsSessionError\";\n }\n}\n\n/**\n * Get auth headers for OS API calls based on the resolved config's stored session.\n * OAuth sessions are refreshed when possible.\n */\nconst getOsAuthHeaders = async (config: Config, configName?: string): Promise<OsAuthHeaders> => {\n let session = config.session;\n if (!session) {\n throw new StoredOsSessionError(\n \"missing\",\n `Not logged in to ${config.osBaseUrl}. Run \\`iterate login\\` first.`,\n );\n }\n if (sessionNeedsRefresh(session)) {\n if (session.refreshToken && session.clientId) {\n session = await refreshOAuthSession({ config, configName, session });\n } else {\n throw new StoredOsSessionError(\n \"expired\",\n `Session expired for ${config.osBaseUrl}. Run \\`iterate login\\` again.`,\n );\n }\n }\n if (session.token) {\n return { authorization: `Bearer ${session.token}` };\n }\n if (session.cookie) {\n return { cookie: session.cookie };\n }\n throw new Error(`Stored session for ${config.osBaseUrl} has no token or cookie.`);\n};\n\nconst osAuthFromHeaders = (headers: OsAuthHeaders): OsAuth => {\n if (headers.authorization) {\n const match = /^Bearer\\s+(.+)$/i.exec(headers.authorization);\n if (!match) throw new Error(\"Stored OS authorization header is not a bearer token.\");\n return { credentials: { type: \"bearer\", token: match[1] } };\n }\n if (headers.cookie) {\n return {\n credentials: { type: \"from-server-cookie\" },\n requestHeaders: { cookie: headers.cookie },\n };\n }\n throw new Error(\"No OS auth credentials available.\");\n};\n\nconst osAuthFromEnvironment = (): OsAuth | undefined => {\n const adminSecret = process.env.APP_CONFIG_ADMIN_API_SECRET?.trim();\n if (adminSecret) return { credentials: { type: \"admin-secret\", secret: adminSecret } };\n\n const bearerToken = process.env.ITERATE_BEARER_TOKEN?.trim();\n if (bearerToken) return { credentials: { type: \"bearer\", token: bearerToken } };\n\n return undefined;\n};\n\nconst disposeRpc = (stub: { [Symbol.dispose]?: () => void } | undefined) => {\n try {\n stub?.[Symbol.dispose]?.();\n } catch {\n // Broken transports may already have disposed the remote side.\n }\n};\n\nconst errorMessage = (error: unknown) => (error instanceof Error ? error.message : String(error));\n\nconst headersRecord = (headers: HeadersInit | undefined): Record<string, string> | undefined => {\n if (headers === undefined) return undefined;\n return Object.fromEntries(new Headers(headers).entries());\n};\n\nconst withAuthenticatedOsSession = async <T>(input: {\n auth: OsAuth;\n baseUrl: string;\n createSession?: CreateOsSession;\n run: (session: RpcStub<Session>) => Promise<T>;\n}): Promise<T> => {\n const session =\n input.createSession?.({ auth: input.auth, baseUrl: input.baseUrl }) ??\n (connectItx({\n auth: input.auth.credentials,\n baseUrl: input.baseUrl,\n headers: headersRecord(input.auth.requestHeaders),\n }) as RpcStub<Session>);\n\n try {\n return await input.run(session);\n } finally {\n disposeRpc(session);\n }\n};\n\nexport const verifyOsSession = async (input: {\n authHeaders: OsAuthHeaders;\n baseUrl: string;\n createSession?: CreateOsSession;\n}) => {\n return await withAuthenticatedOsSession({\n auth: osAuthFromHeaders(input.authHeaders),\n baseUrl: input.baseUrl,\n createSession: input.createSession,\n run: async (session) => await session.__describe(),\n });\n};\n\nconst setupMissingProjectForChat = async (session: RpcStub<Session>, project: ProjectListEntry) => {\n let projectItx: RpcStub<ProjectRpcTarget> | undefined;\n let agentStream: RpcStub<Stream> | undefined;\n try {\n projectItx = (await session.projects.create({\n projectId: project.id,\n slug: project.slug,\n ...(project.organizationSlug ? { organizationSlug: project.organizationSlug } : {}),\n waitUntilCreated: false,\n })) as unknown as RpcStub<ProjectRpcTarget>;\n agentStream = projectItx.streams.get(DEFAULT_CHAT_AGENT_PATH) as RpcStub<Stream>;\n await agentStream.waitForEvent({\n afterOffset: 0,\n eventTypes: [\"events.iterate.com/agent/llm-provider-selected\"],\n timeoutMs: 15_000,\n });\n } catch (error) {\n throw new Error(\n `Project \"${project.slug}\" (${project.id}) exists in auth but is missing in OS. Failed to set it up for chat: ${errorMessage(error)}`,\n );\n } finally {\n disposeRpc(agentStream);\n disposeRpc(projectItx);\n }\n return project.id;\n};\n\nconst accessibleProjectsMessage = (projects: ProjectListEntry[]) =>\n projects.length === 0\n ? \"No accessible projects found.\"\n : `Accessible projects: ${projects\n .map((project) => `${project.slug} (${project.id}, ${project.deploymentStatus})`)\n .join(\", \")}.`;\n\nexport const resolveChatProject = async (input: {\n auth: OsAuth;\n baseUrl: string;\n configName: string;\n configPath: string;\n configuredDefaultProject?: string;\n createSession?: CreateOsSession;\n explicitProject?: string;\n}) => {\n const configured = input.explicitProject || input.configuredDefaultProject;\n\n return await withAuthenticatedOsSession({\n auth: input.auth,\n baseUrl: input.baseUrl,\n createSession: input.createSession,\n run: async (session) => {\n let projects: ProjectListEntry[];\n try {\n projects = await session.projects.list();\n } catch (error) {\n if (configured) {\n throw new Error(\n `Failed to resolve project \"${configured}\" for config \"${input.configName}\" in ${input.configPath}. The CLI could not list accessible projects, so it cannot resolve slugs or recover auth-known projects that are missing in OS: ${errorMessage(error)}`,\n );\n }\n throw new Error(\n `No project specified. Pass --project or set \"defaultProject\" on config \"${input.configName}\" in ${input.configPath}. Failed to list accessible projects: ${errorMessage(error)}`,\n );\n }\n\n if (configured) {\n const project = projects.find(\n (candidate) => candidate.id === configured || candidate.slug === configured,\n );\n if (!project) {\n if (configured.startsWith(\"prj_\")) return configured;\n throw new Error(\n `Project \"${configured}\" was not found among accessible projects for config \"${input.configName}\" in ${input.configPath}. ${accessibleProjectsMessage(projects)}`,\n );\n }\n if (project.deploymentStatus === \"missing\") {\n return await setupMissingProjectForChat(session, project);\n }\n return project.id;\n }\n\n const readyProjects = projects.filter((project) => project.deploymentStatus === \"ready\");\n const candidates = readyProjects.length > 0 ? readyProjects : projects;\n if (candidates.length === 1) {\n const project = candidates[0]!;\n if (project.deploymentStatus === \"missing\") {\n return await setupMissingProjectForChat(session, project);\n }\n return project.id;\n }\n\n throw new Error(\n `No project specified. Pass --project or set \"defaultProject\" on config \"${input.configName}\" in ${input.configPath}. ${accessibleProjectsMessage(projects)}`,\n );\n },\n });\n};\n\nconst sessionNeedsRefresh = (session: StoredSession) => {\n if (!session.expiresAt) return false;\n const expiresAt = Date.parse(session.expiresAt);\n return Number.isFinite(expiresAt) && expiresAt <= Date.now() + OAUTH_REFRESH_SKEW_MS;\n};\n\nconst getAuthWorkerHeaders = async (\n config: Config,\n): Promise<{ cookie?: string; authorization?: string }> => {\n const session = config.session;\n if (!session) {\n throw new Error(`Not logged in to ${config.authBaseUrl}. Run \\`iterate login\\` first.`);\n }\n if (session.expiresAt && new Date(session.expiresAt) < new Date()) {\n throw new Error(`Session expired for ${config.authBaseUrl}. Run \\`iterate login\\` again.`);\n }\n if (session.token) {\n return { authorization: `Bearer ${session.token}` };\n }\n if (session.cookie) {\n return { cookie: session.cookie };\n }\n throw new Error(`Stored session for ${config.authBaseUrl} has no token or cookie.`);\n};\n\nconst getAuthWorkerClient = async (config: Config): Promise<AuthContractClient> => {\n const baseURL = config.authBaseUrl;\n const headers = await getAuthWorkerHeaders(config);\n return createORPCClient(\n new RPCLink({\n url: `${baseURL}/api/orpc/`,\n fetch: async (request: URL | Request, init?: RequestInit) => {\n const reqHeaders = new Headers(\n request instanceof Request ? request.headers : init?.headers,\n );\n if (headers.cookie) reqHeaders.set(\"cookie\", headers.cookie);\n if (headers.authorization) reqHeaders.set(\"authorization\", headers.authorization);\n return fetch(request, { ...init, headers: reqHeaders });\n },\n }),\n );\n};\n\nconst OAUTH_SCOPE = \"openid profile email offline_access project\";\nconst LOOPBACK_HOST = \"localhost\";\nconst LOOPBACK_CALLBACK_PATH = \"/callback\";\nconst OAUTH_CALLBACK_TIMEOUT_MS = 5 * 60 * 1000;\n\ntype OAuthTokenResponse = {\n access_token: string;\n refresh_token?: string;\n expires_in?: number;\n expires_at?: number;\n token_type?: string;\n scope?: string;\n id_token?: string;\n};\n\nconst base64Url = (buffer: Buffer) => buffer.toString(\"base64url\");\n\nconst randomBase64Url = (byteLength = 32) => base64Url(randomBytes(byteLength));\n\nexport const oauthResourceForOsBaseUrl = (osBaseUrl: string) => {\n const url = new URL(osBaseUrl);\n const loopbackHosts = new Set([\"localhost\", \"127.0.0.1\", \"[::1]\", \"::1\"]);\n\n if (loopbackHosts.has(url.hostname)) {\n return `${url.protocol}//${url.hostname}`;\n }\n\n url.search = \"\";\n url.hash = \"\";\n url.pathname = url.pathname.replace(/\\/+$/, \"\") || \"/\";\n return url.toString().replace(/\\/$/, \"\");\n};\n\nconst openUrlInBrowser = async (url: string) => {\n try {\n const { execFile } = await import(\"node:child_process\");\n if (process.platform === \"darwin\") {\n execFile(\"open\", [url]);\n return;\n }\n if (process.platform === \"win32\") {\n execFile(\"cmd\", [\"/c\", \"start\", \"\", url]);\n return;\n }\n execFile(\"xdg-open\", [url]);\n } catch {\n // Ignore; the URL is printed for manual opening.\n }\n};\n\nconst readErrorBody = async (response: Response) => {\n const text = await response.text();\n return text.length > 300 ? `${text.slice(0, 300)}...` : text;\n};\n\nconst registerOAuthClient = async (input: { authBaseUrl: string; redirectUri: string }) => {\n const response = await fetch(`${input.authBaseUrl}/api/auth/oauth2/register`, {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\", origin: input.authBaseUrl },\n body: JSON.stringify({\n client_name: \"Iterate CLI\",\n redirect_uris: [input.redirectUri],\n token_endpoint_auth_method: \"none\",\n grant_types: [\"authorization_code\", \"refresh_token\"],\n response_types: [\"code\"],\n scope: OAUTH_SCOPE,\n type: \"native\",\n require_pkce: true,\n }),\n });\n\n if (!response.ok) {\n throw new Error(\n `OAuth client registration failed (${response.status}): ${await readErrorBody(response)}`,\n );\n }\n\n const client = (await response.json()) as { client_id?: string };\n if (!client.client_id) throw new Error(\"OAuth client registration did not return client_id.\");\n return client.client_id;\n};\n\nconst startOAuthCallbackServer = async (): Promise<{\n redirectUri: string;\n wait: () => Promise<{ code: string; state: string; redirectUri: string }>;\n close: () => Promise<void>;\n}> => {\n let settled = false;\n let resolveCallback:\n | ((value: { code: string; state: string; redirectUri: string }) => void)\n | undefined;\n let rejectCallback: ((reason: unknown) => void) | undefined;\n\n const callbackPromise = new Promise<{\n code: string;\n state: string;\n redirectUri: string;\n }>((resolve, reject) => {\n resolveCallback = resolve;\n rejectCallback = reject;\n });\n\n const server = createServer((request: IncomingMessage, response: ServerResponse) => {\n if (settled) {\n response.writeHead(409, { \"content-type\": \"text/plain; charset=utf-8\" });\n response.end(\"OAuth callback already received.\");\n return;\n }\n\n const url = new URL(request.url ?? \"/\", `http://${LOOPBACK_HOST}`);\n if (url.pathname !== LOOPBACK_CALLBACK_PATH) {\n response.writeHead(404, { \"content-type\": \"text/plain; charset=utf-8\" });\n response.end(\"Not found.\");\n return;\n }\n\n const error = url.searchParams.get(\"error\");\n if (error) {\n settled = true;\n response.writeHead(400, { \"content-type\": \"text/html; charset=utf-8\" });\n response.end(\"<h1>Iterate login failed</h1><p>You can return to the terminal.</p>\");\n rejectCallback?.(\n new Error(\n `OAuth authorization failed: ${error}${\n url.searchParams.get(\"error_description\")\n ? ` (${url.searchParams.get(\"error_description\")})`\n : \"\"\n }`,\n ),\n );\n return;\n }\n\n const code = url.searchParams.get(\"code\");\n const state = url.searchParams.get(\"state\");\n if (!code || !state) {\n settled = true;\n response.writeHead(400, { \"content-type\": \"text/html; charset=utf-8\" });\n response.end(\"<h1>Iterate login failed</h1><p>Missing code or state.</p>\");\n rejectCallback?.(new Error(\"OAuth callback was missing code or state.\"));\n return;\n }\n\n settled = true;\n response.writeHead(200, { \"content-type\": \"text/html; charset=utf-8\" });\n response.end(\"<h1>Iterate login complete</h1><p>You can close this tab.</p>\");\n const address = server.address();\n const port = typeof address === \"object\" && address ? address.port : 0;\n resolveCallback?.({\n code,\n state,\n redirectUri: `http://${LOOPBACK_HOST}:${port}${LOOPBACK_CALLBACK_PATH}`,\n });\n });\n\n await new Promise<void>((resolve, reject) => {\n server.once(\"error\", reject);\n server.listen(0, LOOPBACK_HOST, () => resolve());\n });\n\n const timeout = setTimeout(() => {\n if (!settled) {\n settled = true;\n rejectCallback?.(new Error(\"Timed out waiting for OAuth callback.\"));\n }\n }, OAUTH_CALLBACK_TIMEOUT_MS);\n timeout.unref();\n\n const address = server.address();\n const port = typeof address === \"object\" && address ? address.port : 0;\n\n return {\n redirectUri: `http://${LOOPBACK_HOST}:${port}${LOOPBACK_CALLBACK_PATH}`,\n wait: () => callbackPromise.finally(() => clearTimeout(timeout)),\n close: () => new Promise<void>((resolve) => server.close(() => resolve())),\n };\n};\n\nconst exchangeOAuthCode = async (input: {\n authBaseUrl: string;\n clientId: string;\n code: string;\n codeVerifier: string;\n redirectUri: string;\n resource: string;\n}) => {\n const body = new URLSearchParams({\n grant_type: \"authorization_code\",\n client_id: input.clientId,\n code: input.code,\n redirect_uri: input.redirectUri,\n code_verifier: input.codeVerifier,\n resource: input.resource,\n });\n\n const response = await fetch(`${input.authBaseUrl}/api/auth/oauth2/token`, {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/x-www-form-urlencoded\",\n origin: input.authBaseUrl,\n },\n body,\n });\n\n if (!response.ok) {\n throw new Error(\n `OAuth token exchange failed (${response.status}): ${await readErrorBody(response)}`,\n );\n }\n\n const token = (await response.json()) as OAuthTokenResponse;\n if (!token.access_token) throw new Error(\"OAuth token exchange did not return access_token.\");\n return token;\n};\n\nconst oauthTokenToSession = (\n token: OAuthTokenResponse,\n existing: Pick<StoredSession, \"clientId\" | \"refreshToken\"> | undefined,\n): StoredSession => {\n const expiresAtMs = token.expires_at\n ? token.expires_at * 1000\n : token.expires_in\n ? Date.now() + token.expires_in * 1000\n : undefined;\n return {\n token: token.access_token,\n refreshToken: token.refresh_token ?? existing?.refreshToken,\n clientId: existing?.clientId,\n scope: token.scope,\n tokenType: token.token_type,\n expiresAt: expiresAtMs ? new Date(expiresAtMs).toISOString() : undefined,\n };\n};\n\nexport const refreshOAuthSession = async (input: {\n config: Config;\n configName?: string;\n session: StoredSession;\n}): Promise<StoredSession> => {\n if (!input.session.refreshToken || !input.session.clientId) {\n throw new Error(`Session expired for ${input.config.osBaseUrl}. Run \\`iterate login\\` again.`);\n }\n\n const authBaseUrl = input.config.authBaseUrl;\n const body = new URLSearchParams({\n grant_type: \"refresh_token\",\n client_id: input.session.clientId,\n refresh_token: input.session.refreshToken,\n resource: oauthResourceForOsBaseUrl(input.config.osBaseUrl),\n });\n if (input.session.scope) body.set(\"scope\", input.session.scope);\n\n const response = await fetch(`${authBaseUrl}/api/auth/oauth2/token`, {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/x-www-form-urlencoded\",\n origin: authBaseUrl,\n },\n body,\n });\n\n if (!response.ok) {\n throw new Error(`OAuth refresh failed (${response.status}). Run \\`iterate login\\` again.`);\n }\n\n const token = (await response.json()) as OAuthTokenResponse;\n const refreshedSession = oauthTokenToSession(token, input.session);\n refreshedSession.clientId = input.session.clientId;\n input.config.session = refreshedSession;\n if (input.configName) updateConfigSession(input.configName, refreshedSession);\n return refreshedSession;\n};\n\nconst oauthLogin = async (config: Config): Promise<StoredSession> => {\n const authBaseUrl = config.authBaseUrl;\n const resource = oauthResourceForOsBaseUrl(config.osBaseUrl);\n const codeVerifier = randomBase64Url(48);\n const state = randomBase64Url(32);\n const callback = await startOAuthCallbackServer();\n const clientId = await registerOAuthClient({ authBaseUrl, redirectUri: callback.redirectUri });\n\n const authorizeUrl = new URL(`${authBaseUrl}/api/auth/oauth2/authorize`);\n authorizeUrl.searchParams.set(\"response_type\", \"code\");\n authorizeUrl.searchParams.set(\"client_id\", clientId);\n authorizeUrl.searchParams.set(\"redirect_uri\", callback.redirectUri);\n authorizeUrl.searchParams.set(\"scope\", OAUTH_SCOPE);\n authorizeUrl.searchParams.set(\"resource\", resource);\n authorizeUrl.searchParams.set(\"state\", state);\n authorizeUrl.searchParams.set(\n \"code_challenge\",\n base64Url(createHash(\"sha256\").update(codeVerifier).digest()),\n );\n authorizeUrl.searchParams.set(\"code_challenge_method\", \"S256\");\n\n console.error(`\\nOpening browser to authenticate with Iterate:\\n`);\n console.error(` ${authorizeUrl.href}\\n`);\n if (!isAgent && process.env.ITERATE_SKIP_BROWSER_OPEN !== \"1\") {\n await openUrlInBrowser(authorizeUrl.href);\n }\n\n let callbackResult: { code: string; state: string; redirectUri: string };\n try {\n callbackResult = await callback.wait();\n } finally {\n await callback.close().catch(() => {});\n }\n\n if (callbackResult.state !== state) {\n throw new Error(\"OAuth callback state did not match. Please try again.\");\n }\n\n const token = await exchangeOAuthCode({\n authBaseUrl,\n clientId,\n code: callbackResult.code,\n codeVerifier,\n redirectUri: callbackResult.redirectUri,\n resource,\n });\n const session = oauthTokenToSession(token, { clientId, refreshToken: undefined });\n session.clientId = clientId;\n return session;\n};\n\nconst loginToResolvedConfig = async (resolved: { name: string; config: Config }) => {\n const { config } = resolved;\n\n console.error(`Logging in to ${config.authBaseUrl}...`);\n const oauthResult = await oauthLogin(config);\n updateConfigSession(resolved.name, oauthResult);\n // Update in-memory config so subsequent verification and calls see the token.\n config.session = oauthResult;\n\n await verifyOsSession({\n authHeaders: await getOsAuthHeaders(config, resolved.name),\n baseUrl: config.osBaseUrl,\n }).catch((error: unknown) => {\n throw new Error(`Failed to verify OS session: ${errorMessage(error)}`);\n });\n\n return oauthResult;\n};\n\nconst shouldAutoLoginForChat = (error: unknown) =>\n error instanceof StoredOsSessionError &&\n (error.reason === \"missing\" || error.reason === \"expired\");\n\nexport const ensureBearerAuthHeadersForChat = async (input: {\n getAuthHeaders: () => Promise<OsAuthHeaders>;\n login: () => Promise<void>;\n osBaseUrl: string;\n}) => {\n let authHeaders = await input.getAuthHeaders();\n if (authHeaders.authorization) return authHeaders;\n\n console.error(\n `Stored session for ${input.osBaseUrl} cannot be used for chat. Starting browser login...`,\n );\n await input.login();\n authHeaders = await input.getAuthHeaders();\n if (authHeaders.authorization) return authHeaders;\n\n throw new Error(\n `Stored session for ${input.osBaseUrl} has no bearer token. Run \\`iterate login\\` again.`,\n );\n};\n\nconst loadRemoteProcedures = async (params: {\n baseUrl: string;\n}): Promise<{ procedures: ParsedRouter }> => {\n const url = `${params.baseUrl}/api/trpc-cli-procedures`;\n const response = await fetch(url);\n if (!response.ok) {\n let text = await response.text();\n if (text.includes(\"<title>\")) {\n text = \"HTML with title: \" + text.split(\"<title>\")[1].split(\"</title>\")[0];\n } else if ([\"<html>\", \"<body>\", \"<head>\", \"!DOCTYPE html\"].some((s) => text.includes(s))) {\n text = \"<html>...</html>\";\n } else {\n text = text.split(\"\\n\")[0];\n if (text.length > 50) text = text.slice(0, 50) + \"...\";\n }\n\n throw new Error(`${url} got ${response.status}: ${text}`);\n }\n\n let router: any;\n try {\n router = await response.json();\n } catch (e) {\n const message = e instanceof Error ? e.message : String(e);\n throw new Error(`${url} returned invalid router: ${message}`);\n }\n if (!Array.isArray(router?.procedures)) {\n throw new Error(`${url} returned invalid router: ${JSON.stringify(router)}`);\n }\n return router as { procedures: ParsedRouter };\n};\n\n/** Wraps an oRPC client so `wrapper[dotPath].query(input)` and `.mutate(input)` work (for trpc-cli proxify compat) */\nconst orpcToTrpcStyleClient = (orpcClient: unknown) => {\n return new Proxy(\n {},\n {\n get: (_target, prop: string) => {\n const parts = prop.split(\".\");\n let current: any = orpcClient;\n for (const part of parts) current = current[part];\n return {\n query: (input: any) => current(input),\n mutate: (input: any) => current(input),\n };\n },\n },\n );\n};\n\nconst getOsProcedures = async (params: {\n baseUrl: string;\n config: Config;\n configName?: string;\n}) => {\n const appRouter = await loadRemoteProcedures(params);\n const proxiedRouter = proxifyOrpc(appRouter.procedures, () => {\n const client = createORPCClient(\n new RPCLink({\n url: `${params.baseUrl}/api/orpc/`,\n fetch: async (request: URL | Request, init?: RequestInit) => {\n const authHeaders = await getOsAuthHeaders(params.config, params.configName);\n const headers = new Headers(request instanceof Request ? request.headers : init?.headers);\n if (authHeaders.cookie) headers.set(\"cookie\", authHeaders.cookie);\n if (authHeaders.authorization) headers.set(\"authorization\", authHeaders.authorization);\n return fetch(request, { ...init, headers });\n },\n }),\n );\n return orpcToTrpcStyleClient(client);\n });\n\n return proxiedRouter;\n};\n\nconst launcherProcedures = {\n ping: os.input(z.object({})).handler(async () => {\n const resolved = resolveConfig(process.cwd(), { throw: true });\n const { config } = resolved;\n const description = await verifyOsSession({\n authHeaders: await getOsAuthHeaders(config, resolved.name),\n baseUrl: config.osBaseUrl,\n }).catch((error: unknown) => {\n throw new Error(`Failed to verify OS session: ${errorMessage(error)}`);\n });\n return { message: \"OS session valid\", principal: description.principal };\n }),\n login: os\n .input(z.object({}))\n .meta({\n description: \"Authenticate with the OS server via browser-based OAuth\",\n })\n .handler(async () => {\n const resolved = resolveConfig(process.cwd(), { throw: true });\n const oauthResult = await loginToResolvedConfig(resolved);\n return {\n message: \"Logged in successfully\",\n expiresAt: oauthResult.expiresAt,\n scope: oauthResult.scope,\n };\n }),\n\n logout: os\n .input(z.object({}))\n .meta({ description: \"Remove stored session for the current config\" })\n .handler(async () => {\n const resolved = resolveConfig(process.cwd(), { throw: true });\n removeConfigSession(resolved.name);\n return { message: `Logged out from ${resolved.name} (${resolved.config.osBaseUrl})` };\n }),\n\n chat: os\n .input(\n z.object({\n project: z\n .string()\n .trim()\n .min(1)\n .optional()\n .describe(\n \"OS project id (prj_…) or slug. Defaults to the active config's defaultProject.\",\n ),\n agentPath: z\n .string()\n .trim()\n .min(1)\n .startsWith(\"/agents/\")\n .optional()\n .default(DEFAULT_CHAT_AGENT_PATH)\n .describe(\"Agent stream path to chat with (default: /agents/onboarding)\"),\n }),\n )\n .meta({\n description: \"Open the Iterate agent chat terminal UI\",\n })\n .handler(async ({ input }) => {\n // Resolved here, not in the input schema: the schema is built at module\n // load, before `--config` has been consumed.\n const resolved = resolveConfig(process.cwd(), { throw: true });\n const envAuth = osAuthFromEnvironment();\n let storedAuthHeaders: OsAuthHeaders | undefined;\n let didAutoLogin = false;\n const loginForChat = async () => {\n didAutoLogin = true;\n storedAuthHeaders = undefined;\n await loginToResolvedConfig(resolved);\n };\n const getStoredAuthHeaders = async () => {\n if (storedAuthHeaders) return storedAuthHeaders;\n try {\n storedAuthHeaders = await getOsAuthHeaders(resolved.config, resolved.name);\n } catch (error) {\n if (didAutoLogin || !shouldAutoLoginForChat(error)) throw error;\n console.error(\n `No active session for ${resolved.config.osBaseUrl}. Starting browser login...`,\n );\n await loginForChat();\n storedAuthHeaders = await getOsAuthHeaders(resolved.config, resolved.name);\n }\n return storedAuthHeaders;\n };\n const getStoredBearerAuthHeaders = () =>\n ensureBearerAuthHeadersForChat({\n getAuthHeaders: getStoredAuthHeaders,\n login: loginForChat,\n osBaseUrl: resolved.config.osBaseUrl,\n });\n const project = await resolveChatProject({\n auth: envAuth ?? osAuthFromHeaders(await getStoredBearerAuthHeaders()),\n baseUrl: resolved.config.osBaseUrl,\n configName: resolved.name,\n configPath: CONFIG_PATH,\n configuredDefaultProject: resolved.config.defaultProject,\n explicitProject: input.project,\n });\n const command = buildChatCommand({\n osBaseUrl: resolved.config.osBaseUrl,\n projectId: project,\n agentPath: input.agentPath,\n entrypointPath: resolveStreamTuiEntrypointPath(),\n });\n // Auth: admin/bearer secrets from the inherited environment win (doppler,\n // e2e). Otherwise refresh the stored `iterate login` session here — the\n // launcher owns the OAuth refresh machinery — and hand the TUI a plain\n // bearer token; the capnweb WebSocket authenticates once at connect.\n const env: Record<string, string | undefined> = { ITERATE_CONFIG_NAME: resolved.name };\n if (!envAuth) {\n const headers = await getStoredBearerAuthHeaders();\n const token = headers.authorization?.replace(/^Bearer /, \"\");\n if (!token) {\n throw new Error(\n `Stored session for ${resolved.config.osBaseUrl} has no bearer token. Run \\`iterate login\\` again.`,\n );\n }\n env.ITERATE_BEARER_TOKEN = token;\n }\n await runInheritedProcess({ ...command, env });\n }),\n\n orgs: {\n list: os\n .input(z.object({}))\n .meta({ description: \"List organizations from the auth worker\" })\n .handler(async () => {\n const resolved = resolveConfig(process.cwd(), { throw: true });\n const authClient = await getAuthWorkerClient(resolved.config);\n return await authClient.user.myOrganizations();\n }),\n },\n\n config: {\n get: os\n .input(z.object({}))\n .meta({ default: true, description: \"Show config, resolved target, and session status\" })\n .handler(async () => {\n const configFile = readConfigFile();\n const resolved = resolveConfig(process.cwd());\n\n const configs = configFile.configs || {};\n const sessions = Object.fromEntries(\n Object.entries(configs).map(([name, cfg]) => {\n if (!cfg.session) return [name, null];\n return [\n name,\n {\n hasToken: Boolean(cfg.session?.token),\n hasCookie: Boolean(cfg.session?.cookie),\n expiresAt: cfg.session?.expiresAt,\n expired: cfg.session?.expiresAt\n ? new Date(cfg.session.expiresAt) < new Date()\n : false,\n },\n ];\n }),\n );\n\n if (resolved instanceof Error) {\n return { configPath: CONFIG_PATH, error: resolved.message };\n }\n\n return {\n configPath: CONFIG_PATH,\n config: resolved.name,\n ...resolved.config,\n session: sessions[resolved.name],\n };\n }),\n list: os\n .input(z.object({}))\n .meta({ description: \"List all named configs\" })\n .handler(async () => {\n const configFile = readConfigFile();\n const currentName = resolveConfigName(process.cwd());\n const configs = { [DEFAULT_CONFIG_NAME]: {}, ...(configFile.configs || {}) };\n return {\n configs: Object.fromEntries(\n Object.entries(configs).map(([name, cfg]) => [\n name,\n {\n osBaseUrl: Config.parse(cfg).osBaseUrl,\n active: name === currentName ? true : undefined,\n },\n ]),\n ),\n default: configFile.default,\n };\n }),\n\n set: os\n .input(\n z.object({\n name: z.string().describe(\"Config name (e.g. dev, prd, preview)\"),\n osBaseUrl: z\n .string()\n .optional()\n .describe(\"Base URL for OS API (e.g. https://os.iterate.com)\"),\n authBaseUrl: z\n .string()\n .optional()\n .describe(\"Base URL for auth API (e.g. https://auth.iterate.com)\"),\n setDefault: z.boolean().optional().describe(\"Set as the default config\"),\n setWorkspace: z.boolean().optional().describe(\"Map current directory to this config\"),\n }),\n )\n .meta({ prompt: true, description: \"Create or update a named config\" })\n .handler(async ({ input }) => {\n const configFile = readConfigFile();\n configFile.configs ||= {};\n\n configFile.configs[input.name] ||= {} as never;\n if (input.osBaseUrl) configFile.configs[input.name].osBaseUrl = input.osBaseUrl;\n if (input.authBaseUrl) configFile.configs[input.name].authBaseUrl = input.authBaseUrl;\n\n if (input.setDefault) {\n configFile.default = input.name;\n }\n if (input.setWorkspace) {\n configFile.workspaces ||= {};\n configFile.workspaces[process.cwd()] = input.name;\n }\n\n writeConfigFile(configFile);\n return {\n configPath: CONFIG_PATH,\n config: configFile.configs[input.name],\n };\n }),\n\n use: os\n .input(\n z.object({\n name: z.string().meta({ positional: true }).describe(\"Config name to set as default\"),\n }),\n )\n .meta({ description: \"Set the default config\" })\n .handler(async ({ input }) => {\n const configFile = readConfigFile();\n if (input.name !== DEFAULT_CONFIG_NAME && !configFile.configs?.[input.name]) {\n throw new Error(\n `Config \"${input.name}\" not found. Available: ${Object.keys(configFile.configs || {}).join(\", \") || \"(none)\"}`,\n );\n }\n configFile.default = input.name;\n writeConfigFile(configFile);\n return { default: input.name };\n }),\n\n current: os\n .input(z.object({}))\n .meta({ description: \"Show which config is active and why\" })\n .handler(async () => {\n const resolved = resolveConfig(process.cwd(), { throw: true });\n return {\n name: resolved.name,\n config: resolved.config,\n resolvedAuthBaseUrl: resolved.config.authBaseUrl,\n resolvedVia: configFlagOverride ? \"--config flag\" : \"workspace mapping or default\",\n };\n }),\n },\n};\n\nexport const getCli = async () => {\n // Parse custom top-level flags early, before trpc-cli sees the args.\n configFlagOverride = consumeCliStringFlag(\"--config\");\n applyDefaultBareInvocation();\n const requestedRootCommand = firstNonFlagArgument(process.argv.slice(2));\n const shouldLoadRemoteRouters =\n !requestedRootCommand ||\n !Object.prototype.hasOwnProperty.call(launcherProcedures, requestedRootCommand);\n\n const errorProcedure = (problem: string) => (e: Error) => {\n const message = `${problem}: ${e.message}`;\n return os.meta({ description: message }).handler(() => {\n throw new Error(problem, { cause: e });\n });\n };\n\n const routers: Record<string, import(\"@orpc/server\").Router<any, any>>[] = [launcherProcedures];\n\n // Launcher commands are fully local and should not wait on remote discovery before\n // they can run or print command-specific help.\n if (shouldLoadRemoteRouters) {\n const resolved = resolveConfig(process.cwd());\n if (resolved instanceof Error) {\n const procedure = errorProcedure(`Invalid config`)(resolved);\n routers.push({ os: procedure, daemon: procedure });\n } else {\n const { config } = resolved;\n const settledResults = await Promise.allSettled([\n getOsProcedures({ baseUrl: config.osBaseUrl, config, configName: resolved.name }),\n ]);\n\n const [osProcedures] = settledResults;\n\n if (osProcedures.status === \"fulfilled\") {\n routers.push({ os: osProcedures.value });\n } else {\n const message = `Couldn't connect to os at ${config.osBaseUrl}`;\n routers.push({ os: errorProcedure(message)(osProcedures.reason) });\n }\n }\n }\n\n const router = Object.assign({}, ...routers);\n\n const cli = createCli({\n router,\n name: \"iterate\",\n version: \"0.0.1\",\n description: \"Iterate CLI\",\n });\n\n return { cli, prompts: isAgent ? undefined : prompts };\n};\n\nexport const runCli = async () => {\n const { cli, prompts: cliPrompts } = await getCli();\n await cli.run({ prompts: cliPrompts, logger: yamlTableConsoleLogger });\n};\n\n// todo: move this to trpc-cli\nexport const proxifyOrpc = <R extends AnyRouter>(\n router: R | ReturnType<typeof parseRouter>,\n getClient: (procedurePath: string) => unknown,\n) => {\n const parsed = Array.isArray(router) ? router : parseRouter({ router });\n const outputRouterRecord = {};\n for (const [procedurePath, info] of parsed) {\n const parts = procedurePath.split(\".\");\n let currentRouter: any = outputRouterRecord;\n for (const part of parts.slice(0, -1)) {\n currentRouter = currentRouter[part] ||= {};\n }\n const schemas = info.inputSchemas.success ? info.inputSchemas.value : [];\n const standardSchema: StandardSchemaV1 & { toJsonSchema: () => {} } = {\n \"~standard\": {\n vendor: \"trpc-cli\",\n version: 1,\n validate: (value: unknown) => ({ value }),\n },\n toJsonSchema: () => {\n if (schemas.length === 0) return {};\n if (schemas.length === 1) return schemas[0];\n return { allOf: schemas };\n },\n };\n currentRouter[parts[parts.length - 1]] = os\n .input(standardSchema)\n .handler(async ({ input }: any) => {\n const client: any = await getClient(procedurePath);\n return client[procedurePath].query(input);\n });\n }\n return outputRouterRecord;\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"cli-DMS4kJph.mjs","names":[],"sources":["../src/cli.ts"],"sourcesContent":["import { spawn } from \"node:child_process\";\nimport { createHash, randomBytes } from \"node:crypto\";\nimport { existsSync } from \"node:fs\";\nimport { createServer, type IncomingMessage, type ServerResponse } from \"node:http\";\nimport { dirname, join } from \"node:path\";\nimport process from \"node:process\";\n\nimport * as prompts from \"@clack/prompts\";\nimport type { RpcStub } from \"capnweb\";\nimport { createORPCClient } from \"@orpc/client\";\nimport { RPCLink } from \"@orpc/client/fetch\";\nimport { os } from \"@orpc/server\";\nimport { createCli, parseRouter, type AnyRouter, yamlTableConsoleLogger } from \"trpc-cli\";\nimport { z } from \"zod/v4\";\nimport type { StandardSchemaV1 } from \"trpc-cli/dist/standard-schema/contract.js\";\nimport type { AuthContractClient } from \"../../../apps/auth-contract/src/index.ts\";\nimport type {\n ItxAuthCredentials,\n ProjectListEntry,\n ProjectRpcTarget,\n Session,\n Stream,\n} from \"../../../apps/os/src/types.ts\";\nimport { connectItx } from \"../../../apps/os/src/itx-client.ts\";\nimport {\n CONFIG_PATH,\n Config,\n DEFAULT_CONFIG_NAME,\n readConfig,\n readConfigFile,\n removeConfigSession,\n updateConfigSession,\n writeConfigFile,\n type StoredSession,\n} from \"./config.ts\";\n\ntype ParsedRouter = ReturnType<typeof parseRouter>;\n\nconst OAUTH_REFRESH_SKEW_MS = 60_000;\nconst DEFAULT_CHAT_AGENT_PATH = \"/agents/onboarding\";\ntype OsAuthHeaders = { cookie?: string; authorization?: string };\ntype OsAuth = { credentials: ItxAuthCredentials; requestHeaders?: HeadersInit };\ntype CreateOsSession = (input: { auth: OsAuth; baseUrl: string }) => RpcStub<Session>;\n\nconst isAgent =\n process.env.AGENT === \"1\" ||\n process.env.OPENCODE === \"1\" ||\n Boolean(process.env.OPENCODE_SESSION) ||\n Boolean(process.env.CLAUDE_CODE);\n\n/** Global override set by --config flag before CLI commands run. */\nlet configFlagOverride: string | undefined;\n\n/**\n * We strip host-level flags before handing argv to `trpc-cli`,\n * That keeps router-local help/validation focused on the mounted\n * procedures instead of teaching every command about iterate-specific flags.\n *\n * Example: `iterate --config dev doctor`\n */\nconst consumeCliStringFlag = (flagName: string): string | undefined => {\n const args = process.argv.slice(2);\n const flagIndex = args.indexOf(flagName);\n if (flagIndex === -1) return undefined;\n const value = args[flagIndex + 1];\n if (!value || value.startsWith(\"-\")) {\n throw new Error(`${flagName} requires a value`);\n }\n process.argv.splice(flagIndex + 2, 2);\n return value;\n};\n\nconst firstNonFlagArgument = (args: string[]): string | undefined => {\n for (const arg of args) {\n if (arg === \"--\") return undefined;\n if (!arg.startsWith(\"-\")) return arg;\n }\n return undefined;\n};\n\nexport const defaultBareInvocationToChat = (args: string[]) =>\n args.length === 0 ? [\"chat\"] : args;\n\nconst applyDefaultBareInvocation = () => {\n const args = process.argv.slice(2);\n const nextArgs = defaultBareInvocationToChat(args);\n if (nextArgs !== args) process.argv.splice(2, args.length, ...nextArgs);\n};\n\nconst resolveStreamTuiEntrypointPath = () => {\n const moduleDir = import.meta.dirname;\n const candidates = [\n join(moduleDir, \"stream-tui/agent-chat-terminal.tsx\"),\n join(moduleDir, \"stream-tui/agent-chat-terminal.mjs\"),\n join(moduleDir, \"stream-tui/agent-chat-terminal.js\"),\n ];\n\n for (const candidate of candidates) {\n if (existsSync(candidate)) return candidate;\n }\n\n throw new Error(\"Could not find the Iterate stream TUI entrypoint.\");\n};\n\nexport const buildChatCommand = (input: {\n osBaseUrl: string;\n projectId: string;\n agentPath: string;\n entrypointPath: string;\n}) => ({\n command: \"bun\",\n args: [\n input.entrypointPath,\n \"--base-url\",\n input.osBaseUrl,\n \"--project-id\",\n input.projectId,\n \"--agent-path\",\n input.agentPath,\n ],\n});\n\nconst runInheritedProcess = async (input: {\n command: string;\n args: string[];\n env: Record<string, string | undefined>;\n}): Promise<void> => {\n const child = spawn(input.command, input.args, {\n stdio: \"inherit\",\n env: { ...process.env, ...input.env },\n });\n\n const result = await new Promise<{ code: number | null; signal: NodeJS.Signals | null }>(\n (resolve, reject) => {\n child.on(\"error\", reject);\n child.on(\"exit\", (code, signal) => resolve({ code, signal }));\n },\n );\n\n if (result.signal) {\n throw new Error(`${input.command} exited with signal ${result.signal}.`);\n }\n if (result.code !== 0) {\n throw new Error(`${input.command} exited with code ${result.code ?? \"unknown\"}.`);\n }\n};\n\nconst hasConfig = (configFile: ReturnType<typeof readConfigFile>, name: string) =>\n name === DEFAULT_CONFIG_NAME || Boolean(configFile.configs?.[name]);\n\n/**\n * Resolve which config name to use.\n * Priority: --config flag > workspace match (walk up from cwd) > default > single-config auto > built-in prd\n */\nconst resolveConfigName = (workspacePath: string): string | Error => {\n const configFile = readConfigFile();\n\n if (configFlagOverride) {\n if (!hasConfig(configFile, configFlagOverride)) {\n return new Error(\n `Config \"${configFlagOverride}\" not found. Available: ${Object.keys(configFile.configs || {}).join(\", \") || \"(none)\"}`,\n );\n }\n return configFlagOverride;\n }\n\n // Walk up directory tree for workspace match\n let dir = workspacePath;\n while (dir && dir !== \"/\") {\n const match = configFile.workspaces?.[dir];\n if (match) {\n if (!hasConfig(configFile, match)) {\n return new Error(`Workspace \"${dir}\" maps to config \"${match}\" which doesn't exist.`);\n }\n return match;\n }\n dir = dirname(dir);\n }\n\n if (configFile.default) {\n if (!hasConfig(configFile, configFile.default)) {\n return new Error(\n `Default config \"${configFile.default}\" doesn't exist. Available: ${Object.keys(configFile.configs || {}).join(\", \") || \"(none)\"}`,\n );\n }\n return configFile.default;\n }\n\n // If there's exactly one config, use it\n const configNames = Object.keys(configFile.configs || {});\n if (configNames.length === 1) return configNames[0];\n\n return DEFAULT_CONFIG_NAME;\n};\n\nfunction resolveConfig(workspacePath: string): { name: string; config: Config } | Error;\nfunction resolveConfig(\n workspacePath: string,\n options: { throw: true },\n): { name: string; config: Config };\nfunction resolveConfig(\n workspacePath: string,\n options?: { throw: true },\n): { name: string; config: Config } | Error {\n const result = ((): { name: string; config: Config } | Error => {\n const name = resolveConfigName(workspacePath);\n if (name instanceof Error) return name;\n const config = readConfig(name);\n if (config instanceof Error) return config;\n return { name, config };\n })();\n if (result instanceof Error && options?.throw) throw result;\n return result;\n}\n\nclass StoredOsSessionError extends Error {\n readonly reason: \"missing\" | \"expired\";\n\n constructor(reason: \"missing\" | \"expired\", message: string) {\n super(message);\n this.reason = reason;\n this.name = \"StoredOsSessionError\";\n }\n}\n\n/**\n * Get auth headers for OS API calls based on the resolved config's stored session.\n * OAuth sessions are refreshed when possible.\n */\nconst getOsAuthHeaders = async (config: Config, configName?: string): Promise<OsAuthHeaders> => {\n let session = config.session;\n if (!session) {\n throw new StoredOsSessionError(\n \"missing\",\n `Not logged in to ${config.osBaseUrl}. Run \\`iterate login\\` first.`,\n );\n }\n if (sessionNeedsRefresh(session)) {\n if (session.refreshToken && session.clientId) {\n session = await refreshOAuthSession({ config, configName, session });\n } else {\n throw new StoredOsSessionError(\n \"expired\",\n `Session expired for ${config.osBaseUrl}. Run \\`iterate login\\` again.`,\n );\n }\n }\n if (session.token) {\n return { authorization: `Bearer ${session.token}` };\n }\n if (session.cookie) {\n return { cookie: session.cookie };\n }\n throw new Error(`Stored session for ${config.osBaseUrl} has no token or cookie.`);\n};\n\nconst osAuthFromHeaders = (headers: OsAuthHeaders): OsAuth => {\n if (headers.authorization) {\n const match = /^Bearer\\s+(.+)$/i.exec(headers.authorization);\n if (!match) throw new Error(\"Stored OS authorization header is not a bearer token.\");\n return { credentials: { type: \"bearer\", token: match[1] } };\n }\n if (headers.cookie) {\n return {\n credentials: { type: \"from-server-cookie\" },\n requestHeaders: { cookie: headers.cookie },\n };\n }\n throw new Error(\"No OS auth credentials available.\");\n};\n\nconst osAuthFromEnvironment = (): OsAuth | undefined => {\n const adminSecret = process.env.APP_CONFIG_ADMIN_API_SECRET?.trim();\n if (adminSecret) return { credentials: { type: \"admin-secret\", secret: adminSecret } };\n\n const bearerToken = process.env.ITERATE_BEARER_TOKEN?.trim();\n if (bearerToken) return { credentials: { type: \"bearer\", token: bearerToken } };\n\n return undefined;\n};\n\nconst disposeRpc = (stub: { [Symbol.dispose]?: () => void } | undefined) => {\n try {\n stub?.[Symbol.dispose]?.();\n } catch {\n // Broken transports may already have disposed the remote side.\n }\n};\n\nconst errorMessage = (error: unknown) => (error instanceof Error ? error.message : String(error));\n\nconst headersRecord = (headers: HeadersInit | undefined): Record<string, string> | undefined => {\n if (headers === undefined) return undefined;\n return Object.fromEntries(new Headers(headers).entries());\n};\n\nconst withAuthenticatedOsSession = async <T>(input: {\n auth: OsAuth;\n baseUrl: string;\n createSession?: CreateOsSession;\n run: (session: RpcStub<Session>) => Promise<T>;\n}): Promise<T> => {\n const session =\n input.createSession?.({ auth: input.auth, baseUrl: input.baseUrl }) ??\n (connectItx({\n auth: input.auth.credentials,\n baseUrl: input.baseUrl,\n headers: headersRecord(input.auth.requestHeaders),\n }) as RpcStub<Session>);\n\n try {\n return await input.run(session);\n } finally {\n disposeRpc(session);\n }\n};\n\nexport const verifyOsSession = async (input: {\n authHeaders: OsAuthHeaders;\n baseUrl: string;\n createSession?: CreateOsSession;\n}) => {\n return await withAuthenticatedOsSession({\n auth: osAuthFromHeaders(input.authHeaders),\n baseUrl: input.baseUrl,\n createSession: input.createSession,\n run: async (session) => await session.__describe(),\n });\n};\n\nconst setupMissingProjectForChat = async (session: RpcStub<Session>, project: ProjectListEntry) => {\n let projectItx: RpcStub<ProjectRpcTarget> | undefined;\n let agentStream: RpcStub<Stream> | undefined;\n try {\n projectItx = (await session.projects.create({\n projectId: project.id,\n slug: project.slug,\n ...(project.organizationSlug ? { organizationSlug: project.organizationSlug } : {}),\n waitUntilCreated: false,\n })) as unknown as RpcStub<ProjectRpcTarget>;\n agentStream = projectItx.streams.get(DEFAULT_CHAT_AGENT_PATH) as RpcStub<Stream>;\n await agentStream.waitForEvent({\n afterOffset: 0,\n eventTypes: [\"events.iterate.com/agent/llm-provider-selected\"],\n timeoutMs: 15_000,\n });\n } catch (error) {\n throw new Error(\n `Project \"${project.slug}\" (${project.id}) exists in auth but is missing in OS. Failed to set it up for chat: ${errorMessage(error)}`,\n );\n } finally {\n disposeRpc(agentStream);\n disposeRpc(projectItx);\n }\n return project.id;\n};\n\nconst accessibleProjectsMessage = (projects: ProjectListEntry[]) =>\n projects.length === 0\n ? \"No accessible projects found.\"\n : `Accessible projects: ${projects\n .map((project) => `${project.slug} (${project.id}, ${project.deploymentStatus})`)\n .join(\", \")}.`;\n\nexport const resolveChatProject = async (input: {\n auth: OsAuth;\n baseUrl: string;\n configName: string;\n configPath: string;\n configuredDefaultProject?: string;\n createSession?: CreateOsSession;\n explicitProject?: string;\n}) => {\n const configured = input.explicitProject || input.configuredDefaultProject;\n\n return await withAuthenticatedOsSession({\n auth: input.auth,\n baseUrl: input.baseUrl,\n createSession: input.createSession,\n run: async (session) => {\n let projects: ProjectListEntry[];\n try {\n projects = await session.projects.list();\n } catch (error) {\n if (configured) {\n throw new Error(\n `Failed to resolve project \"${configured}\" for config \"${input.configName}\" in ${input.configPath}. The CLI could not list accessible projects, so it cannot resolve slugs or recover auth-known projects that are missing in OS: ${errorMessage(error)}`,\n );\n }\n throw new Error(\n `No project specified. Pass --project or set \"defaultProject\" on config \"${input.configName}\" in ${input.configPath}. Failed to list accessible projects: ${errorMessage(error)}`,\n );\n }\n\n if (configured) {\n const project = projects.find(\n (candidate) => candidate.id === configured || candidate.slug === configured,\n );\n if (!project) {\n if (configured.startsWith(\"prj_\")) return configured;\n throw new Error(\n `Project \"${configured}\" was not found among accessible projects for config \"${input.configName}\" in ${input.configPath}. ${accessibleProjectsMessage(projects)}`,\n );\n }\n if (project.deploymentStatus === \"missing\") {\n return await setupMissingProjectForChat(session, project);\n }\n return project.id;\n }\n\n const readyProjects = projects.filter((project) => project.deploymentStatus === \"ready\");\n const candidates = readyProjects.length > 0 ? readyProjects : projects;\n if (candidates.length === 1) {\n const project = candidates[0]!;\n if (project.deploymentStatus === \"missing\") {\n return await setupMissingProjectForChat(session, project);\n }\n return project.id;\n }\n\n throw new Error(\n `No project specified. Pass --project or set \"defaultProject\" on config \"${input.configName}\" in ${input.configPath}. ${accessibleProjectsMessage(projects)}`,\n );\n },\n });\n};\n\nconst sessionNeedsRefresh = (session: StoredSession) => {\n if (!session.expiresAt) return false;\n const expiresAt = Date.parse(session.expiresAt);\n return Number.isFinite(expiresAt) && expiresAt <= Date.now() + OAUTH_REFRESH_SKEW_MS;\n};\n\nconst getAuthWorkerHeaders = async (\n config: Config,\n): Promise<{ cookie?: string; authorization?: string }> => {\n const session = config.session;\n if (!session) {\n throw new Error(`Not logged in to ${config.authBaseUrl}. Run \\`iterate login\\` first.`);\n }\n if (session.expiresAt && new Date(session.expiresAt) < new Date()) {\n throw new Error(`Session expired for ${config.authBaseUrl}. Run \\`iterate login\\` again.`);\n }\n if (session.token) {\n return { authorization: `Bearer ${session.token}` };\n }\n if (session.cookie) {\n return { cookie: session.cookie };\n }\n throw new Error(`Stored session for ${config.authBaseUrl} has no token or cookie.`);\n};\n\nconst getAuthWorkerClient = async (config: Config): Promise<AuthContractClient> => {\n const baseURL = config.authBaseUrl;\n const headers = await getAuthWorkerHeaders(config);\n return createORPCClient(\n new RPCLink({\n url: `${baseURL}/api/orpc/`,\n fetch: async (request: URL | Request, init?: RequestInit) => {\n const reqHeaders = new Headers(\n request instanceof Request ? request.headers : init?.headers,\n );\n if (headers.cookie) reqHeaders.set(\"cookie\", headers.cookie);\n if (headers.authorization) reqHeaders.set(\"authorization\", headers.authorization);\n return fetch(request, { ...init, headers: reqHeaders });\n },\n }),\n );\n};\n\nconst OAUTH_SCOPE = \"openid profile email offline_access project\";\nconst LOOPBACK_HOST = \"localhost\";\nconst LOOPBACK_CALLBACK_PATH = \"/callback\";\nconst OAUTH_CALLBACK_TIMEOUT_MS = 5 * 60 * 1000;\n\ntype OAuthTokenResponse = {\n access_token: string;\n refresh_token?: string;\n expires_in?: number;\n expires_at?: number;\n token_type?: string;\n scope?: string;\n id_token?: string;\n};\n\nconst base64Url = (buffer: Buffer) => buffer.toString(\"base64url\");\n\nconst randomBase64Url = (byteLength = 32) => base64Url(randomBytes(byteLength));\n\nexport const oauthResourceForOsBaseUrl = (osBaseUrl: string) => {\n const url = new URL(osBaseUrl);\n const loopbackHosts = new Set([\"localhost\", \"127.0.0.1\", \"[::1]\", \"::1\"]);\n\n if (loopbackHosts.has(url.hostname)) {\n return `${url.protocol}//${url.hostname}`;\n }\n\n url.search = \"\";\n url.hash = \"\";\n url.pathname = url.pathname.replace(/\\/+$/, \"\") || \"/\";\n return url.toString().replace(/\\/$/, \"\");\n};\n\nconst openUrlInBrowser = async (url: string) => {\n try {\n const { execFile } = await import(\"node:child_process\");\n if (process.platform === \"darwin\") {\n execFile(\"open\", [url]);\n return;\n }\n if (process.platform === \"win32\") {\n execFile(\"cmd\", [\"/c\", \"start\", \"\", url]);\n return;\n }\n execFile(\"xdg-open\", [url]);\n } catch {\n // Ignore; the URL is printed for manual opening.\n }\n};\n\nconst readErrorBody = async (response: Response) => {\n const text = await response.text();\n return text.length > 300 ? `${text.slice(0, 300)}...` : text;\n};\n\nconst registerOAuthClient = async (input: { authBaseUrl: string; redirectUri: string }) => {\n const response = await fetch(`${input.authBaseUrl}/api/auth/oauth2/register`, {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\", origin: input.authBaseUrl },\n body: JSON.stringify({\n client_name: \"Iterate CLI\",\n redirect_uris: [input.redirectUri],\n token_endpoint_auth_method: \"none\",\n grant_types: [\"authorization_code\", \"refresh_token\"],\n response_types: [\"code\"],\n scope: OAUTH_SCOPE,\n type: \"native\",\n require_pkce: true,\n }),\n });\n\n if (!response.ok) {\n throw new Error(\n `OAuth client registration failed (${response.status}): ${await readErrorBody(response)}`,\n );\n }\n\n const client = (await response.json()) as { client_id?: string };\n if (!client.client_id) throw new Error(\"OAuth client registration did not return client_id.\");\n return client.client_id;\n};\n\nconst startOAuthCallbackServer = async (): Promise<{\n redirectUri: string;\n wait: () => Promise<{ code: string; state: string; redirectUri: string }>;\n close: () => Promise<void>;\n}> => {\n let settled = false;\n let resolveCallback:\n | ((value: { code: string; state: string; redirectUri: string }) => void)\n | undefined;\n let rejectCallback: ((reason: unknown) => void) | undefined;\n\n const callbackPromise = new Promise<{\n code: string;\n state: string;\n redirectUri: string;\n }>((resolve, reject) => {\n resolveCallback = resolve;\n rejectCallback = reject;\n });\n\n const server = createServer((request: IncomingMessage, response: ServerResponse) => {\n if (settled) {\n response.writeHead(409, { \"content-type\": \"text/plain; charset=utf-8\" });\n response.end(\"OAuth callback already received.\");\n return;\n }\n\n const url = new URL(request.url ?? \"/\", `http://${LOOPBACK_HOST}`);\n if (url.pathname !== LOOPBACK_CALLBACK_PATH) {\n response.writeHead(404, { \"content-type\": \"text/plain; charset=utf-8\" });\n response.end(\"Not found.\");\n return;\n }\n\n const error = url.searchParams.get(\"error\");\n if (error) {\n settled = true;\n response.writeHead(400, { \"content-type\": \"text/html; charset=utf-8\" });\n response.end(\"<h1>Iterate login failed</h1><p>You can return to the terminal.</p>\");\n rejectCallback?.(\n new Error(\n `OAuth authorization failed: ${error}${\n url.searchParams.get(\"error_description\")\n ? ` (${url.searchParams.get(\"error_description\")})`\n : \"\"\n }`,\n ),\n );\n return;\n }\n\n const code = url.searchParams.get(\"code\");\n const state = url.searchParams.get(\"state\");\n if (!code || !state) {\n settled = true;\n response.writeHead(400, { \"content-type\": \"text/html; charset=utf-8\" });\n response.end(\"<h1>Iterate login failed</h1><p>Missing code or state.</p>\");\n rejectCallback?.(new Error(\"OAuth callback was missing code or state.\"));\n return;\n }\n\n settled = true;\n response.writeHead(200, { \"content-type\": \"text/html; charset=utf-8\" });\n response.end(\"<h1>Iterate login complete</h1><p>You can close this tab.</p>\");\n const address = server.address();\n const port = typeof address === \"object\" && address ? address.port : 0;\n resolveCallback?.({\n code,\n state,\n redirectUri: `http://${LOOPBACK_HOST}:${port}${LOOPBACK_CALLBACK_PATH}`,\n });\n });\n\n await new Promise<void>((resolve, reject) => {\n server.once(\"error\", reject);\n server.listen(0, LOOPBACK_HOST, () => resolve());\n });\n\n const timeout = setTimeout(() => {\n if (!settled) {\n settled = true;\n rejectCallback?.(new Error(\"Timed out waiting for OAuth callback.\"));\n }\n }, OAUTH_CALLBACK_TIMEOUT_MS);\n timeout.unref();\n\n const address = server.address();\n const port = typeof address === \"object\" && address ? address.port : 0;\n\n return {\n redirectUri: `http://${LOOPBACK_HOST}:${port}${LOOPBACK_CALLBACK_PATH}`,\n wait: () => callbackPromise.finally(() => clearTimeout(timeout)),\n close: () => new Promise<void>((resolve) => server.close(() => resolve())),\n };\n};\n\nconst exchangeOAuthCode = async (input: {\n authBaseUrl: string;\n clientId: string;\n code: string;\n codeVerifier: string;\n redirectUri: string;\n resource: string;\n}) => {\n const body = new URLSearchParams({\n grant_type: \"authorization_code\",\n client_id: input.clientId,\n code: input.code,\n redirect_uri: input.redirectUri,\n code_verifier: input.codeVerifier,\n resource: input.resource,\n });\n\n const response = await fetch(`${input.authBaseUrl}/api/auth/oauth2/token`, {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/x-www-form-urlencoded\",\n origin: input.authBaseUrl,\n },\n body,\n });\n\n if (!response.ok) {\n throw new Error(\n `OAuth token exchange failed (${response.status}): ${await readErrorBody(response)}`,\n );\n }\n\n const token = (await response.json()) as OAuthTokenResponse;\n if (!token.access_token) throw new Error(\"OAuth token exchange did not return access_token.\");\n return token;\n};\n\nconst oauthTokenToSession = (\n token: OAuthTokenResponse,\n existing: Pick<StoredSession, \"clientId\" | \"refreshToken\"> | undefined,\n): StoredSession => {\n const expiresAtMs = token.expires_at\n ? token.expires_at * 1000\n : token.expires_in\n ? Date.now() + token.expires_in * 1000\n : undefined;\n return {\n token: token.access_token,\n refreshToken: token.refresh_token ?? existing?.refreshToken,\n clientId: existing?.clientId,\n scope: token.scope,\n tokenType: token.token_type,\n expiresAt: expiresAtMs ? new Date(expiresAtMs).toISOString() : undefined,\n };\n};\n\nexport const refreshOAuthSession = async (input: {\n config: Config;\n configName?: string;\n session: StoredSession;\n}): Promise<StoredSession> => {\n if (!input.session.refreshToken || !input.session.clientId) {\n throw new Error(`Session expired for ${input.config.osBaseUrl}. Run \\`iterate login\\` again.`);\n }\n\n const authBaseUrl = input.config.authBaseUrl;\n const body = new URLSearchParams({\n grant_type: \"refresh_token\",\n client_id: input.session.clientId,\n refresh_token: input.session.refreshToken,\n resource: oauthResourceForOsBaseUrl(input.config.osBaseUrl),\n });\n if (input.session.scope) body.set(\"scope\", input.session.scope);\n\n const response = await fetch(`${authBaseUrl}/api/auth/oauth2/token`, {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/x-www-form-urlencoded\",\n origin: authBaseUrl,\n },\n body,\n });\n\n if (!response.ok) {\n throw new Error(`OAuth refresh failed (${response.status}). Run \\`iterate login\\` again.`);\n }\n\n const token = (await response.json()) as OAuthTokenResponse;\n const refreshedSession = oauthTokenToSession(token, input.session);\n refreshedSession.clientId = input.session.clientId;\n input.config.session = refreshedSession;\n if (input.configName) updateConfigSession(input.configName, refreshedSession);\n return refreshedSession;\n};\n\nconst oauthLogin = async (config: Config): Promise<StoredSession> => {\n const authBaseUrl = config.authBaseUrl;\n const resource = oauthResourceForOsBaseUrl(config.osBaseUrl);\n const codeVerifier = randomBase64Url(48);\n const state = randomBase64Url(32);\n const callback = await startOAuthCallbackServer();\n const clientId = await registerOAuthClient({ authBaseUrl, redirectUri: callback.redirectUri });\n\n const authorizeUrl = new URL(`${authBaseUrl}/api/auth/oauth2/authorize`);\n authorizeUrl.searchParams.set(\"response_type\", \"code\");\n authorizeUrl.searchParams.set(\"client_id\", clientId);\n authorizeUrl.searchParams.set(\"redirect_uri\", callback.redirectUri);\n authorizeUrl.searchParams.set(\"scope\", OAUTH_SCOPE);\n authorizeUrl.searchParams.set(\"resource\", resource);\n authorizeUrl.searchParams.set(\"state\", state);\n authorizeUrl.searchParams.set(\n \"code_challenge\",\n base64Url(createHash(\"sha256\").update(codeVerifier).digest()),\n );\n authorizeUrl.searchParams.set(\"code_challenge_method\", \"S256\");\n\n console.error(`\\nOpening browser to authenticate with Iterate:\\n`);\n console.error(` ${authorizeUrl.href}\\n`);\n if (!isAgent && process.env.ITERATE_SKIP_BROWSER_OPEN !== \"1\") {\n await openUrlInBrowser(authorizeUrl.href);\n }\n\n let callbackResult: { code: string; state: string; redirectUri: string };\n try {\n callbackResult = await callback.wait();\n } finally {\n await callback.close().catch(() => {});\n }\n\n if (callbackResult.state !== state) {\n throw new Error(\"OAuth callback state did not match. Please try again.\");\n }\n\n const token = await exchangeOAuthCode({\n authBaseUrl,\n clientId,\n code: callbackResult.code,\n codeVerifier,\n redirectUri: callbackResult.redirectUri,\n resource,\n });\n const session = oauthTokenToSession(token, { clientId, refreshToken: undefined });\n session.clientId = clientId;\n return session;\n};\n\nconst loginToResolvedConfig = async (resolved: { name: string; config: Config }) => {\n const { config } = resolved;\n\n console.error(`Logging in to ${config.authBaseUrl}...`);\n const oauthResult = await oauthLogin(config);\n updateConfigSession(resolved.name, oauthResult);\n // Update in-memory config so subsequent verification and calls see the token.\n config.session = oauthResult;\n\n await verifyOsSession({\n authHeaders: await getOsAuthHeaders(config, resolved.name),\n baseUrl: config.osBaseUrl,\n }).catch((error: unknown) => {\n throw new Error(`Failed to verify OS session: ${errorMessage(error)}`);\n });\n\n return oauthResult;\n};\n\nconst shouldAutoLoginForChat = (error: unknown) =>\n error instanceof StoredOsSessionError &&\n (error.reason === \"missing\" || error.reason === \"expired\");\n\nexport const ensureBearerAuthHeadersForChat = async (input: {\n getAuthHeaders: () => Promise<OsAuthHeaders>;\n login: () => Promise<void>;\n osBaseUrl: string;\n}) => {\n let authHeaders = await input.getAuthHeaders();\n if (authHeaders.authorization) return authHeaders;\n\n console.error(\n `Stored session for ${input.osBaseUrl} cannot be used for chat. Starting browser login...`,\n );\n await input.login();\n authHeaders = await input.getAuthHeaders();\n if (authHeaders.authorization) return authHeaders;\n\n throw new Error(\n `Stored session for ${input.osBaseUrl} has no bearer token. Run \\`iterate login\\` again.`,\n );\n};\n\nconst loadRemoteProcedures = async (params: {\n baseUrl: string;\n}): Promise<{ procedures: ParsedRouter }> => {\n const url = `${params.baseUrl}/api/trpc-cli-procedures`;\n const response = await fetch(url);\n if (!response.ok) {\n let text = await response.text();\n if (text.includes(\"<title>\")) {\n text = \"HTML with title: \" + text.split(\"<title>\")[1].split(\"</title>\")[0];\n } else if ([\"<html>\", \"<body>\", \"<head>\", \"!DOCTYPE html\"].some((s) => text.includes(s))) {\n text = \"<html>...</html>\";\n } else {\n text = text.split(\"\\n\")[0];\n if (text.length > 50) text = text.slice(0, 50) + \"...\";\n }\n\n throw new Error(`${url} got ${response.status}: ${text}`);\n }\n\n let router: any;\n try {\n router = await response.json();\n } catch (e) {\n const message = e instanceof Error ? e.message : String(e);\n throw new Error(`${url} returned invalid router: ${message}`);\n }\n if (!Array.isArray(router?.procedures)) {\n throw new Error(`${url} returned invalid router: ${JSON.stringify(router)}`);\n }\n return router as { procedures: ParsedRouter };\n};\n\n/** Wraps an oRPC client so `wrapper[dotPath].query(input)` and `.mutate(input)` work (for trpc-cli proxify compat) */\nconst orpcToTrpcStyleClient = (orpcClient: unknown) => {\n return new Proxy(\n {},\n {\n get: (_target, prop: string) => {\n const parts = prop.split(\".\");\n let current: any = orpcClient;\n for (const part of parts) current = current[part];\n return {\n query: (input: any) => current(input),\n mutate: (input: any) => current(input),\n };\n },\n },\n );\n};\n\nconst getOsProcedures = async (params: {\n baseUrl: string;\n config: Config;\n configName?: string;\n}) => {\n const appRouter = await loadRemoteProcedures(params);\n const proxiedRouter = proxifyOrpc(appRouter.procedures, () => {\n const client = createORPCClient(\n new RPCLink({\n url: `${params.baseUrl}/api/orpc/`,\n fetch: async (request: URL | Request, init?: RequestInit) => {\n const authHeaders = await getOsAuthHeaders(params.config, params.configName);\n const headers = new Headers(request instanceof Request ? request.headers : init?.headers);\n if (authHeaders.cookie) headers.set(\"cookie\", authHeaders.cookie);\n if (authHeaders.authorization) headers.set(\"authorization\", authHeaders.authorization);\n return fetch(request, { ...init, headers });\n },\n }),\n );\n return orpcToTrpcStyleClient(client);\n });\n\n return proxiedRouter;\n};\n\nconst launcherProcedures = {\n ping: os.input(z.object({})).handler(async () => {\n const resolved = resolveConfig(process.cwd(), { throw: true });\n const { config } = resolved;\n const description = await verifyOsSession({\n authHeaders: await getOsAuthHeaders(config, resolved.name),\n baseUrl: config.osBaseUrl,\n }).catch((error: unknown) => {\n throw new Error(`Failed to verify OS session: ${errorMessage(error)}`);\n });\n return { message: \"OS session valid\", principal: description.principal };\n }),\n login: os\n .input(z.object({}))\n .meta({\n description: \"Authenticate with the OS server via browser-based OAuth\",\n })\n .handler(async () => {\n const resolved = resolveConfig(process.cwd(), { throw: true });\n const oauthResult = await loginToResolvedConfig(resolved);\n return {\n message: \"Logged in successfully\",\n expiresAt: oauthResult.expiresAt,\n scope: oauthResult.scope,\n };\n }),\n\n logout: os\n .input(z.object({}))\n .meta({ description: \"Remove stored session for the current config\" })\n .handler(async () => {\n const resolved = resolveConfig(process.cwd(), { throw: true });\n removeConfigSession(resolved.name);\n return { message: `Logged out from ${resolved.name} (${resolved.config.osBaseUrl})` };\n }),\n\n chat: os\n .input(\n z.object({\n project: z\n .string()\n .trim()\n .min(1)\n .optional()\n .describe(\n \"OS project id (prj_…) or slug. Defaults to the active config's defaultProject.\",\n ),\n agentPath: z\n .string()\n .trim()\n .min(1)\n .startsWith(\"/agents/\")\n .optional()\n .default(DEFAULT_CHAT_AGENT_PATH)\n .describe(\"Agent stream path to chat with (default: /agents/onboarding)\"),\n }),\n )\n .meta({\n description: \"Open the Iterate agent chat terminal UI\",\n })\n .handler(async ({ input }) => {\n // Resolved here, not in the input schema: the schema is built at module\n // load, before `--config` has been consumed.\n const resolved = resolveConfig(process.cwd(), { throw: true });\n const envAuth = osAuthFromEnvironment();\n let storedAuthHeaders: OsAuthHeaders | undefined;\n let didAutoLogin = false;\n const loginForChat = async () => {\n didAutoLogin = true;\n storedAuthHeaders = undefined;\n await loginToResolvedConfig(resolved);\n };\n const getStoredAuthHeaders = async () => {\n if (storedAuthHeaders) return storedAuthHeaders;\n try {\n storedAuthHeaders = await getOsAuthHeaders(resolved.config, resolved.name);\n } catch (error) {\n if (didAutoLogin || !shouldAutoLoginForChat(error)) throw error;\n console.error(\n `No active session for ${resolved.config.osBaseUrl}. Starting browser login...`,\n );\n await loginForChat();\n storedAuthHeaders = await getOsAuthHeaders(resolved.config, resolved.name);\n }\n return storedAuthHeaders;\n };\n const getStoredBearerAuthHeaders = () =>\n ensureBearerAuthHeadersForChat({\n getAuthHeaders: getStoredAuthHeaders,\n login: loginForChat,\n osBaseUrl: resolved.config.osBaseUrl,\n });\n const project = await resolveChatProject({\n auth: envAuth ?? osAuthFromHeaders(await getStoredBearerAuthHeaders()),\n baseUrl: resolved.config.osBaseUrl,\n configName: resolved.name,\n configPath: CONFIG_PATH,\n configuredDefaultProject: resolved.config.defaultProject,\n explicitProject: input.project,\n });\n const command = buildChatCommand({\n osBaseUrl: resolved.config.osBaseUrl,\n projectId: project,\n agentPath: input.agentPath,\n entrypointPath: resolveStreamTuiEntrypointPath(),\n });\n // Auth: admin/bearer secrets from the inherited environment win (doppler,\n // e2e). Otherwise refresh the stored `iterate login` session here — the\n // launcher owns the OAuth refresh machinery — and hand the TUI a plain\n // bearer token; the capnweb WebSocket authenticates once at connect.\n const env: Record<string, string | undefined> = { ITERATE_CONFIG_NAME: resolved.name };\n if (!envAuth) {\n const headers = await getStoredBearerAuthHeaders();\n const token = headers.authorization?.replace(/^Bearer /, \"\");\n if (!token) {\n throw new Error(\n `Stored session for ${resolved.config.osBaseUrl} has no bearer token. Run \\`iterate login\\` again.`,\n );\n }\n env.ITERATE_BEARER_TOKEN = token;\n }\n await runInheritedProcess({ ...command, env });\n }),\n\n orgs: {\n list: os\n .input(z.object({}))\n .meta({ description: \"List organizations from the auth worker\" })\n .handler(async () => {\n const resolved = resolveConfig(process.cwd(), { throw: true });\n const authClient = await getAuthWorkerClient(resolved.config);\n return await authClient.user.myOrganizations();\n }),\n },\n\n config: {\n get: os\n .input(z.object({}))\n .meta({ default: true, description: \"Show config, resolved target, and session status\" })\n .handler(async () => {\n const configFile = readConfigFile();\n const resolved = resolveConfig(process.cwd());\n\n const configs = configFile.configs || {};\n const sessions = Object.fromEntries(\n Object.entries(configs).map(([name, cfg]) => {\n if (!cfg.session) return [name, null];\n return [\n name,\n {\n hasToken: Boolean(cfg.session?.token),\n hasCookie: Boolean(cfg.session?.cookie),\n expiresAt: cfg.session?.expiresAt,\n expired: cfg.session?.expiresAt\n ? new Date(cfg.session.expiresAt) < new Date()\n : false,\n },\n ];\n }),\n );\n\n if (resolved instanceof Error) {\n return { configPath: CONFIG_PATH, error: resolved.message };\n }\n\n return {\n configPath: CONFIG_PATH,\n config: resolved.name,\n ...resolved.config,\n session: sessions[resolved.name],\n };\n }),\n list: os\n .input(z.object({}))\n .meta({ description: \"List all named configs\" })\n .handler(async () => {\n const configFile = readConfigFile();\n const currentName = resolveConfigName(process.cwd());\n const configs = { [DEFAULT_CONFIG_NAME]: {}, ...(configFile.configs || {}) };\n return {\n configs: Object.fromEntries(\n Object.entries(configs).map(([name, cfg]) => [\n name,\n {\n osBaseUrl: Config.parse(cfg).osBaseUrl,\n active: name === currentName ? true : undefined,\n },\n ]),\n ),\n default: configFile.default,\n };\n }),\n\n set: os\n .input(\n z.object({\n name: z.string().describe(\"Config name (e.g. dev, prd, preview)\"),\n osBaseUrl: z\n .string()\n .optional()\n .describe(\"Base URL for OS API (e.g. https://os.iterate.com)\"),\n authBaseUrl: z\n .string()\n .optional()\n .describe(\"Base URL for auth API (e.g. https://auth.iterate.com)\"),\n setDefault: z.boolean().optional().describe(\"Set as the default config\"),\n setWorkspace: z.boolean().optional().describe(\"Map current directory to this config\"),\n }),\n )\n .meta({ prompt: true, description: \"Create or update a named config\" })\n .handler(async ({ input }) => {\n const configFile = readConfigFile();\n configFile.configs ||= {};\n\n configFile.configs[input.name] ||= {} as never;\n if (input.osBaseUrl) configFile.configs[input.name].osBaseUrl = input.osBaseUrl;\n if (input.authBaseUrl) configFile.configs[input.name].authBaseUrl = input.authBaseUrl;\n\n if (input.setDefault) {\n configFile.default = input.name;\n }\n if (input.setWorkspace) {\n configFile.workspaces ||= {};\n configFile.workspaces[process.cwd()] = input.name;\n }\n\n writeConfigFile(configFile);\n return {\n configPath: CONFIG_PATH,\n config: configFile.configs[input.name],\n };\n }),\n\n use: os\n .input(\n z.object({\n name: z.string().meta({ positional: true }).describe(\"Config name to set as default\"),\n }),\n )\n .meta({ description: \"Set the default config\" })\n .handler(async ({ input }) => {\n const configFile = readConfigFile();\n if (input.name !== DEFAULT_CONFIG_NAME && !configFile.configs?.[input.name]) {\n throw new Error(\n `Config \"${input.name}\" not found. Available: ${Object.keys(configFile.configs || {}).join(\", \") || \"(none)\"}`,\n );\n }\n configFile.default = input.name;\n writeConfigFile(configFile);\n return { default: input.name };\n }),\n\n current: os\n .input(z.object({}))\n .meta({ description: \"Show which config is active and why\" })\n .handler(async () => {\n const resolved = resolveConfig(process.cwd(), { throw: true });\n return {\n name: resolved.name,\n config: resolved.config,\n resolvedAuthBaseUrl: resolved.config.authBaseUrl,\n resolvedVia: configFlagOverride ? \"--config flag\" : \"workspace mapping or default\",\n };\n }),\n },\n};\n\nexport const getCli = async () => {\n // Parse custom top-level flags early, before trpc-cli sees the args.\n configFlagOverride = consumeCliStringFlag(\"--config\");\n applyDefaultBareInvocation();\n const requestedRootCommand = firstNonFlagArgument(process.argv.slice(2));\n const shouldLoadRemoteRouters =\n !requestedRootCommand ||\n !Object.prototype.hasOwnProperty.call(launcherProcedures, requestedRootCommand);\n\n const errorProcedure = (problem: string) => (e: Error) => {\n const message = `${problem}: ${e.message}`;\n return os.meta({ description: message }).handler(() => {\n throw new Error(problem, { cause: e });\n });\n };\n\n const routers: Record<string, import(\"@orpc/server\").Router<any, any>>[] = [launcherProcedures];\n\n // Launcher commands are fully local and should not wait on remote discovery before\n // they can run or print command-specific help.\n if (shouldLoadRemoteRouters) {\n const resolved = resolveConfig(process.cwd());\n if (resolved instanceof Error) {\n const procedure = errorProcedure(`Invalid config`)(resolved);\n routers.push({ os: procedure, daemon: procedure });\n } else {\n const { config } = resolved;\n const settledResults = await Promise.allSettled([\n getOsProcedures({ baseUrl: config.osBaseUrl, config, configName: resolved.name }),\n ]);\n\n const [osProcedures] = settledResults;\n\n if (osProcedures.status === \"fulfilled\") {\n routers.push({ os: osProcedures.value });\n } else {\n const message = `Couldn't connect to os at ${config.osBaseUrl}`;\n routers.push({ os: errorProcedure(message)(osProcedures.reason) });\n }\n }\n }\n\n const router = Object.assign({}, ...routers);\n\n const cli = createCli({\n router,\n name: \"iterate\",\n version: \"0.0.1\",\n description: \"Iterate CLI\",\n });\n\n return { cli, prompts: isAgent ? undefined : prompts };\n};\n\nexport const runCli = async () => {\n const { cli, prompts: cliPrompts } = await getCli();\n await cli.run({ prompts: cliPrompts, logger: yamlTableConsoleLogger });\n};\n\n// todo: move this to trpc-cli\nexport const proxifyOrpc = <R extends AnyRouter>(\n router: R | ReturnType<typeof parseRouter>,\n getClient: (procedurePath: string) => unknown,\n) => {\n const parsed = Array.isArray(router) ? router : parseRouter({ router });\n const outputRouterRecord = {};\n for (const [procedurePath, info] of parsed) {\n const parts = procedurePath.split(\".\");\n let currentRouter: any = outputRouterRecord;\n for (const part of parts.slice(0, -1)) {\n currentRouter = currentRouter[part] ||= {};\n }\n const schemas = info.inputSchemas.success ? info.inputSchemas.value : [];\n const standardSchema: StandardSchemaV1 & { toJsonSchema: () => {} } = {\n \"~standard\": {\n vendor: \"trpc-cli\",\n version: 1,\n validate: (value: unknown) => ({ value }),\n },\n toJsonSchema: () => {\n if (schemas.length === 0) return {};\n if (schemas.length === 1) return schemas[0];\n return { allOf: schemas };\n },\n };\n currentRouter[parts[parts.length - 1]] = os\n .input(standardSchema)\n .handler(async ({ input }: any) => {\n const client: any = await getClient(procedurePath);\n return client[procedurePath].query(input);\n });\n }\n return outputRouterRecord;\n};\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "iterate",
3
- "version": "0.2.6",
3
+ "version": "0.2.7",
4
4
  "description": "CLI for iterate",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",