iterate 0.2.7 → 0.3.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.
Files changed (218) hide show
  1. package/README.md +86 -76
  2. package/THIRD_PARTY_NOTICES.md +55 -0
  3. package/bin/iterate.js +11 -3
  4. package/dist/api-url-B6404M82.mjs +17 -0
  5. package/dist/api-url-B6404M82.mjs.map +1 -0
  6. package/dist/app-ref-BipL0feU.mjs +35 -0
  7. package/dist/app-ref-BipL0feU.mjs.map +1 -0
  8. package/dist/app-ref-C1CrgXqX.mjs +7 -0
  9. package/dist/app-ref-C1CrgXqX.mjs.map +1 -0
  10. package/dist/app-ref-DYai_om1.mjs +7 -0
  11. package/dist/app-ref-DYai_om1.mjs.map +1 -0
  12. package/dist/cli-D0c-pDL_.mjs +1010 -0
  13. package/dist/cli-D0c-pDL_.mjs.map +1 -0
  14. package/dist/client.d.ts +3 -0
  15. package/dist/client.mjs +4 -0
  16. package/dist/cloudflare-BTm90gQ4.mjs +951 -0
  17. package/dist/cloudflare-BTm90gQ4.mjs.map +1 -0
  18. package/dist/contract-s4FW4eES.mjs +309 -0
  19. package/dist/contract-s4FW4eES.mjs.map +1 -0
  20. package/dist/document-review/index.d.ts +5 -0
  21. package/dist/document-review/types.d.ts +107 -0
  22. package/dist/document-review.mjs +7015 -0
  23. package/dist/document-review.mjs.map +1 -0
  24. package/dist/durable-object-processor-durability-CNsTjAJS.mjs +205 -0
  25. package/dist/durable-object-processor-durability-CNsTjAJS.mjs.map +1 -0
  26. package/dist/idempotency-DleloJNt.mjs +28 -0
  27. package/dist/idempotency-DleloJNt.mjs.map +1 -0
  28. package/dist/index.mjs +1 -1
  29. package/dist/itx/api-url.d.ts +6 -0
  30. package/dist/itx/itx-node-client.d.ts +65 -0
  31. package/dist/itx/itx-session.d.ts +215 -0
  32. package/dist/itx/owned-rpc-session.d.ts +14 -0
  33. package/dist/itx/query-client.d.ts +10 -0
  34. package/dist/itx-api.generated.d.ts +6195 -0
  35. package/dist/itx-session-sjud8GiT.mjs +534 -0
  36. package/dist/itx-session-sjud8GiT.mjs.map +1 -0
  37. package/dist/live-state-BJNqOwFw.mjs +299 -0
  38. package/dist/live-state-BJNqOwFw.mjs.map +1 -0
  39. package/dist/next/api.d.ts +479 -0
  40. package/dist/next/api.mjs +0 -0
  41. package/dist/next/app-server.d.ts +44 -0
  42. package/dist/next/app-server.mjs +479 -0
  43. package/dist/next/app-server.mjs.map +1 -0
  44. package/dist/next/app-session.d.ts +49 -0
  45. package/dist/next/app-session.mjs +238 -0
  46. package/dist/next/app-session.mjs.map +1 -0
  47. package/dist/next/app.d.ts +29 -0
  48. package/dist/next/app.mjs +141 -0
  49. package/dist/next/app.mjs.map +1 -0
  50. package/dist/next/client/live-state.d.ts +63 -0
  51. package/dist/next/client/oauth.d.ts +12 -0
  52. package/dist/next/client/react.d.ts +109 -0
  53. package/dist/next/client/socket.d.ts +6 -0
  54. package/dist/next/client.mjs +156 -0
  55. package/dist/next/client.mjs.map +1 -0
  56. package/dist/next/expression.d.ts +146 -0
  57. package/dist/next/expression.mjs +399 -0
  58. package/dist/next/expression.mjs.map +1 -0
  59. package/dist/next/lib.d.ts +56 -0
  60. package/dist/next/lib.mjs +199 -0
  61. package/dist/next/lib.mjs.map +1 -0
  62. package/dist/next/oauth-scopes.d.ts +32 -0
  63. package/dist/next/oauth-scopes.mjs +40 -0
  64. package/dist/next/oauth-scopes.mjs.map +1 -0
  65. package/dist/next/oauth.mjs +29 -0
  66. package/dist/next/oauth.mjs.map +1 -0
  67. package/dist/next/principal.d.ts +64 -0
  68. package/dist/next/principal.mjs +98 -0
  69. package/dist/next/principal.mjs.map +1 -0
  70. package/dist/next/project-ingress.d.ts +37 -0
  71. package/dist/next/project-ingress.mjs +75 -0
  72. package/dist/next/project-ingress.mjs.map +1 -0
  73. package/dist/next/react.mjs +285 -0
  74. package/dist/next/react.mjs.map +1 -0
  75. package/dist/next/sdk/auth.d.ts +5 -0
  76. package/dist/next/sdk/index.d.ts +112 -0
  77. package/dist/next/sdk.mjs +139 -0
  78. package/dist/next/sdk.mjs.map +1 -0
  79. package/dist/next/stream/processor.d.ts +378 -0
  80. package/dist/next/stream/processor.mjs +582 -0
  81. package/dist/next/stream/processor.mjs.map +1 -0
  82. package/dist/next/stream/run.d.ts +58 -0
  83. package/dist/next/stream/run.mjs +40 -0
  84. package/dist/next/stream/run.mjs.map +1 -0
  85. package/dist/next-node.d.ts +15 -0
  86. package/dist/next-node.mjs +51 -0
  87. package/dist/next-node.mjs.map +1 -0
  88. package/dist/node.d.ts +3 -0
  89. package/dist/node.mjs +185 -0
  90. package/dist/node.mjs.map +1 -0
  91. package/dist/processor-host-capabilities-BMFH3KTM.mjs +56 -0
  92. package/dist/processor-host-capabilities-BMFH3KTM.mjs.map +1 -0
  93. package/dist/processors/cloudflare.d.ts +3 -0
  94. package/dist/processors/durable-object-processor-durability.d.ts +79 -0
  95. package/dist/processors/event-consumption-metrics.d.ts +82 -0
  96. package/dist/processors/idempotency.d.ts +13 -0
  97. package/dist/processors/index.d.ts +12 -0
  98. package/dist/processors/processor-contracts.d.ts +342 -0
  99. package/dist/processors/processor-facet.d.ts +186 -0
  100. package/dist/processors/processor-host-capabilities.d.ts +60 -0
  101. package/dist/processors/prompt-sections.d.ts +17 -0
  102. package/dist/processors/rpc-types.d.ts +515 -0
  103. package/dist/processors/schemas.d.ts +102 -0
  104. package/dist/processors/stream-handle.d.ts +45 -0
  105. package/dist/processors/stream-processor-keepalive.d.ts +95 -0
  106. package/dist/processors/stream-processor-registry.d.ts +233 -0
  107. package/dist/processors/stream-processor-runner.d.ts +289 -0
  108. package/dist/processors/stream-processor.d.ts +339 -0
  109. package/dist/processors/stream-runtime-metrics.d.ts +107 -0
  110. package/dist/processors/testing.d.ts +302 -0
  111. package/dist/processors-BoNyeBfQ.mjs +10 -0
  112. package/dist/processors-BoNyeBfQ.mjs.map +1 -0
  113. package/dist/processors-cloudflare.mjs +3 -0
  114. package/dist/processors-testing.mjs +435 -0
  115. package/dist/processors-testing.mjs.map +1 -0
  116. package/dist/processors.mjs +52 -0
  117. package/dist/processors.mjs.map +1 -0
  118. package/dist/protocol-DnK_f2m6.mjs +251 -0
  119. package/dist/protocol-DnK_f2m6.mjs.map +1 -0
  120. package/dist/sdk/capnweb/index.d.ts +2 -0
  121. package/dist/sdk/capnweb/live-state/compact.d.ts +5 -0
  122. package/dist/sdk/capnweb/live-state/diff.d.ts +41 -0
  123. package/dist/sdk/capnweb/live-state/engine.d.ts +44 -0
  124. package/dist/sdk/capnweb/live-state/index.d.ts +41 -0
  125. package/dist/sdk/capnweb/live-state/protocol.d.ts +87 -0
  126. package/dist/sdk/capnweb/live-state/retain.d.ts +23 -0
  127. package/dist/sdk/capnweb/live-state/store.d.ts +20 -0
  128. package/dist/sdk/capnweb/live-state/types.d.ts +11 -0
  129. package/dist/sdk/capnweb/react.d.ts +45 -0
  130. package/dist/sdk/capnweb/react.mjs +316 -0
  131. package/dist/sdk/capnweb/react.mjs.map +1 -0
  132. package/dist/sdk/capnweb.mjs +4 -0
  133. package/dist/sdk/itx/react.d.ts +191 -0
  134. package/dist/sdk/itx/react.mjs +383 -0
  135. package/dist/sdk/itx/react.mjs.map +1 -0
  136. package/dist/sdk-DMB-IM11.mjs +933 -0
  137. package/dist/sdk-DMB-IM11.mjs.map +1 -0
  138. package/dist/sdk.d.ts +339 -0
  139. package/dist/sdk.mjs +2 -0
  140. package/dist/serve-itx.d.ts +46 -0
  141. package/dist/starter-apps/flake-dashboard/app-ref.d.ts +31 -0
  142. package/dist/starter-apps/flake-dashboard/configured-worker.mjs +1055 -0
  143. package/dist/starter-apps/flake-dashboard/configured-worker.mjs.map +1 -0
  144. package/dist/starter-apps/flake-dashboard/contract.d.ts +4839 -0
  145. package/dist/starter-apps/flake-dashboard/contract.mjs +2 -0
  146. package/dist/starter-apps/flake-dashboard/index.d.ts +17 -0
  147. package/dist/starter-apps/flake-dashboard/index.mjs +56 -0
  148. package/dist/starter-apps/flake-dashboard/index.mjs.map +1 -0
  149. package/dist/starter-apps/flake-dashboard/worker.d.ts +4607 -0
  150. package/dist/starter-apps/github-ai-linter/ai-linter.d.ts +8914 -0
  151. package/dist/starter-apps/github-ai-linter/configured-worker.mjs +17987 -0
  152. package/dist/starter-apps/github-ai-linter/configured-worker.mjs.map +1 -0
  153. package/dist/starter-apps/github-ai-linter/contract.d.ts +9193 -0
  154. package/dist/starter-apps/github-ai-linter/index.d.ts +10 -0
  155. package/dist/starter-apps/github-ai-linter/index.mjs +36 -0
  156. package/dist/starter-apps/github-ai-linter/index.mjs.map +1 -0
  157. package/dist/starter-apps/github-ai-linter/prompt.d.ts +13 -0
  158. package/dist/starter-apps/github-ai-linter/review-bot.d.ts +808 -0
  159. package/dist/starter-apps/github-ai-linter/rules.d.ts +34 -0
  160. package/dist/starter-apps/github-ai-linter/worker-ref.d.ts +19 -0
  161. package/dist/starter-apps/github-ai-linter/worker.d.ts +19 -0
  162. package/dist/starter-apps/github-ai-linter/worker.mjs +947 -0
  163. package/dist/starter-apps/github-ai-linter/worker.mjs.map +1 -0
  164. package/dist/starter-apps/guestbook/app-ref.d.ts +27 -0
  165. package/dist/starter-apps/guestbook/client.d.ts +7 -0
  166. package/dist/starter-apps/guestbook/client.mjs +59 -0
  167. package/dist/starter-apps/guestbook/configured-worker.mjs +205 -0
  168. package/dist/starter-apps/guestbook/configured-worker.mjs.map +1 -0
  169. package/dist/starter-apps/guestbook/index.d.ts +9 -0
  170. package/dist/starter-apps/guestbook/index.mjs +31 -0
  171. package/dist/starter-apps/guestbook/index.mjs.map +1 -0
  172. package/dist/starter-apps/guestbook/processor.d.ts +2267 -0
  173. package/dist/starter-apps/guestbook/worker.d.ts +26 -0
  174. package/dist/starter-apps/guestbook/worker.mjs +191 -0
  175. package/dist/starter-apps/guestbook/worker.mjs.map +1 -0
  176. package/dist/starter-apps/media/configured-worker.mjs +577 -0
  177. package/dist/starter-apps/media/configured-worker.mjs.map +1 -0
  178. package/dist/starter-apps/media/index.mjs +36 -0
  179. package/dist/starter-apps/media/index.mjs.map +1 -0
  180. package/dist/starter-apps/media/ref.mjs +20 -0
  181. package/dist/starter-apps/media/ref.mjs.map +1 -0
  182. package/dist/starter-apps/media/worker.mjs +579 -0
  183. package/dist/starter-apps/media/worker.mjs.map +1 -0
  184. package/dist/starter-apps/notes/configured-worker.mjs +6134 -0
  185. package/dist/starter-apps/notes/configured-worker.mjs.map +1 -0
  186. package/dist/starter-apps/notes/index.mjs +23 -0
  187. package/dist/starter-apps/notes/index.mjs.map +1 -0
  188. package/dist/starter-apps/notes/ref.mjs +21 -0
  189. package/dist/starter-apps/notes/ref.mjs.map +1 -0
  190. package/dist/starter-apps/notes/worker.mjs +427 -0
  191. package/dist/starter-apps/notes/worker.mjs.map +1 -0
  192. package/dist/starter-apps/todo/client.mjs +59 -0
  193. package/dist/starter-apps/todo/configured-worker.mjs +2864 -0
  194. package/dist/starter-apps/todo/configured-worker.mjs.map +1 -0
  195. package/dist/starter-apps/todo/index.d.ts +8 -0
  196. package/dist/starter-apps/todo/index.mjs +29 -0
  197. package/dist/starter-apps/todo/index.mjs.map +1 -0
  198. package/dist/stream-processor-keepalive-DAQTP6m3.mjs +2082 -0
  199. package/dist/stream-processor-keepalive-DAQTP6m3.mjs.map +1 -0
  200. package/dist/usingCtx-inzbY1Qz.mjs +57 -0
  201. package/dist/usingCtx-mZx5nsAW.mjs +11800 -0
  202. package/dist/usingCtx-mZx5nsAW.mjs.map +1 -0
  203. package/dist/worker-ref-DZxPDmb_.mjs +390 -0
  204. package/dist/worker-ref-DZxPDmb_.mjs.map +1 -0
  205. package/menubar/Iterate.entitlements +12 -0
  206. package/menubar/Iterate.swift +914 -0
  207. package/menubar/IterateIcon.swift +145 -0
  208. package/menubar/README.md +28 -0
  209. package/menubar/build-menubar-app.sh +59 -0
  210. package/package.json +235 -18
  211. package/dist/cli-DMS4kJph.mjs +0 -868
  212. package/dist/cli-DMS4kJph.mjs.map +0 -1
  213. package/dist/config-DtnR7Lv7.mjs +0 -170
  214. package/dist/config-DtnR7Lv7.mjs.map +0 -1
  215. package/dist/index.d.mts.map +0 -1
  216. package/dist/stream-tui/agent-chat-terminal.d.mts +0 -1
  217. package/dist/stream-tui/agent-chat-terminal.mjs +0 -933
  218. package/dist/stream-tui/agent-chat-terminal.mjs.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-D0c-pDL_.mjs","names":["#emit","#call","#nextCall","process"],"sources":["../src/next-node.ts","../src/run-command.ts","../src/menubar-app.ts","../src/use-my-computer.ts","../src/config.ts","../src/cli.ts"],"sourcesContent":["import { newWebSocketRpcSession, type RpcStub } from \"capnweb\";\nimport WebSocket from \"ws\";\nimport type { IterateApi, SessionCredentials } from \"./next/api.ts\";\n\n/** One OS Next connection. Dispose the owner to close every child capability and its socket.\n * Operations are never retried: replaying a script could duplicate its effects. */\nexport type OsNextConnection = Disposable & {\n session: Awaited<ReturnType<RpcStub<IterateApi>[\"authenticate\"]>>;\n closed: Promise<{ code: number; reason: string }>;\n};\n\n// Explicit return type keeps declaration emit from expanding capnweb's recursive mapped types.\nexport async function connectOsNext(input: {\n baseUrl: string;\n auth: SessionCredentials;\n}): Promise<OsNextConnection> {\n const url = new URL(\"/api\", input.baseUrl);\n if (url.protocol !== \"https:\" && url.protocol !== \"http:\") {\n throw new Error(\"OS Next URL must use http or https.\");\n }\n url.protocol = url.protocol === \"https:\" ? \"wss:\" : \"ws:\";\n const socket = new WebSocket(url.href, { handshakeTimeout: 15_000 });\n // ws implements the DOM event/send/close interface consumed by capnweb.\n const root = newWebSocketRpcSession<IterateApi>(socket as unknown as globalThis.WebSocket);\n const closed = new Promise<{ code: number; reason: string }>((resolve) => {\n socket.once(\"close\", (code, reason) => resolve({ code, reason: reason.toString() }));\n });\n // The transport surfaces failures through RPC and `closed`; ws also emits an EventEmitter error.\n socket.on(\"error\", () => {});\n let timeout: ReturnType<typeof setTimeout> | undefined;\n try {\n const session = await Promise.race([\n root.authenticate(input.auth),\n new Promise<never>((_, reject) => {\n timeout = setTimeout(() => reject(new Error(\"OS Next authentication timed out\")), 20_000);\n }),\n ]);\n return {\n session,\n closed,\n [Symbol.dispose]() {\n try {\n session[Symbol.dispose]();\n } finally {\n try {\n root[Symbol.dispose]();\n } finally {\n socket.close();\n }\n }\n },\n };\n } catch (error) {\n try {\n root[Symbol.dispose]();\n } finally {\n socket.terminate();\n }\n throw error;\n } finally {\n clearTimeout(timeout);\n }\n}\n","import { spawn } from \"node:child_process\";\n\n/** Spawn a command, optionally feed it stdin, and collect its result. */\nexport function run(command: string, args: string[], stdin?: string) {\n return new Promise<{ stdout: string; stderr: string; exitCode: number }>((resolve, reject) => {\n const child = spawn(command, args);\n let stdout = \"\";\n let stderr = \"\";\n child.stdout.on(\"data\", (d) => (stdout += d));\n child.stderr.on(\"data\", (d) => (stderr += d));\n child.on(\"error\", reject);\n // A signal-killed child reports a null code; surface that as a failure, not 0.\n child.on(\"close\", (code) => resolve({ stdout, stderr, exitCode: code ?? 1 }));\n if (stdin !== undefined) child.stdin.end(stdin);\n });\n}\n","// ─────────────────────────────────────────────────────────────────────────────\n// `iterate menubar` — build (on first use) and launch the menu-bar\n// app.\n//\n// The published package ships only the Swift SOURCE (packages/iterate/menubar);\n// this compiles it with swiftc on the user's Mac, cached by source hash next to\n// the config, and launches the .app — the same compile-on-first-use pattern as\n// the enclave signer. It also writes ~/.config/iterate/menubar.json so the app\n// knows which CLI to spawn (this exact one) for which project.\n// ─────────────────────────────────────────────────────────────────────────────\n\nimport { createHash } from \"node:crypto\";\nimport { existsSync } from \"node:fs\";\nimport { mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport { homedir } from \"node:os\";\nimport { join } from \"node:path\";\n\nimport { run } from \"./run-command.ts\";\n\nconst CONFIG_DIR = join(\n process.env.XDG_CONFIG_HOME ? process.env.XDG_CONFIG_HOME : join(homedir(), \".config\"),\n \"iterate\",\n);\nconst BUILD_DIR = join(CONFIG_DIR, \"menubar-build\");\nconst APP_PATH = join(BUILD_DIR, \"Iterate.app\");\nconst SOURCES = [\n \"Iterate.swift\",\n \"IterateIcon.swift\",\n \"build-menubar-app.sh\",\n \"Iterate.entitlements\",\n];\n\n/** Compile-if-needed and launch the menu-bar app for one project/config. */\nexport async function launchMenubarApp(input: {\n configName: string;\n project: string;\n log?: (message: string) => void;\n}): Promise<void> {\n if (process.platform !== \"darwin\") {\n throw new Error(\"The menu-bar app is macOS-only.\");\n }\n const log = input.log || (() => {});\n const menubarDir = join(import.meta.dirname, \"..\", \"menubar\");\n const binPath = join(import.meta.dirname, \"..\", \"bin\", \"iterate.js\");\n\n // Cache by source hash: rebuild only when the Swift (or build script) changed.\n const contents = await Promise.all(\n SOURCES.map((name) => readFile(join(menubarDir, name), \"utf8\")),\n );\n const hash = createHash(\"sha256\").update(contents.join(\"\\0\")).digest(\"hex\").slice(0, 12);\n const marker = join(BUILD_DIR, `.built-${hash}`);\n if (!existsSync(marker) || !existsSync(APP_PATH)) {\n log(\"Building the menu-bar app (swiftc)…\");\n await mkdir(BUILD_DIR, { recursive: true });\n const build = await run(\"bash\", [join(menubarDir, \"build-menubar-app.sh\"), BUILD_DIR]);\n if (build.exitCode !== 0) {\n throw new Error(\n `Menu-bar build failed — install the Xcode command-line tools (xcode-select --install)?\\n${\n build.stderr.trim() || build.stdout.trim()\n }`,\n );\n }\n await writeFile(marker, hash);\n }\n\n // Point the app at THIS CLI (whatever launched us) for this project/config.\n // Auth is the app's own concern — its Sign in button runs `iterate login`.\n await writeFile(\n join(CONFIG_DIR, \"menubar.json\"),\n `${JSON.stringify(\n {\n command: process.execPath,\n args: [binPath],\n config: input.configName,\n project: input.project,\n xdgConfigHome: process.env.XDG_CONFIG_HOME,\n },\n null,\n 2,\n )}\\n`,\n );\n\n const open = await run(\"open\", [\"-a\", APP_PATH, join(CONFIG_DIR, \"menubar.json\")]);\n if (open.exitCode !== 0) throw new Error(`Could not launch the app: ${open.stderr.trim()}`);\n log(`Launched Iterate for project \"${input.project}\" (config ${input.configName}).`);\n log(\n \"It lives in your menu bar — click the 𝑖 to sign in and \" +\n \"share your computer with the project's agents.\",\n );\n}\n","import { hostname } from \"node:os\";\nimport * as prompts from \"@clack/prompts\";\nimport { RpcTarget } from \"capnweb\";\nimport { run } from \"./run-command.ts\";\nimport type { connectOsNext } from \"./next-node.ts\";\n\ntype ComputerEvent =\n | { type: \"status\"; loggedIn: true; name: string }\n | { type: \"call\"; id: number; method: string; summary: string }\n | { type: \"call-done\"; id: number; ok: boolean };\n\n/** Methods run locally with the authority of the person sharing this Mac. */\nexport class MyComputer extends RpcTarget {\n #emit: (event: ComputerEvent) => void;\n #nextCall = 0;\n\n constructor(emit: (event: ComputerEvent) => void = () => {}) {\n super();\n this.#emit = emit;\n }\n\n async #call<T>(method: string, summary: string, operation: () => Promise<T>): Promise<T> {\n const id = ++this.#nextCall;\n this.#emit({ type: \"call\", id, method, summary: summary.slice(0, 160) });\n let ok = false;\n try {\n const result = await operation();\n ok = true;\n return result;\n } finally {\n this.#emit({ type: \"call-done\", id, ok });\n }\n }\n\n /** Pop a native dialog on screen and return which button the human clicked. */\n async ask({ question, buttons = [\"No\", \"Yes\"] }: { question: string; buttons?: string[] }) {\n return this.#call(\"ask\", question, async () => {\n // AppleScript's `display dialog` supports one to three buttons.\n if (buttons.length < 1 || buttons.length > 3) {\n throw new Error(\"ask() needs 1–3 buttons (AppleScript dialogs cap at three).\");\n }\n const buttonList = buttons.map((b) => `\"${escapeForAppleScript(b)}\"`).join(\", \");\n const { stdout } = await osascript(\n `display dialog \"${escapeForAppleScript(question)}\" ` +\n // Default to the FIRST button (the caller's safe/decline option, \"No\" by\n // default): this can run arbitrary local Swift, so an accidental Return\n // must not confirm.\n `buttons {${buttonList}} default button \"${escapeForAppleScript(buttons[0]!)}\" ` +\n `with title \"iterate · myComputer\"`,\n );\n // osascript prints e.g. `button returned:Yes` — hand back just the choice.\n return { answer: stdout.trim().replace(/^button returned:/, \"\") };\n });\n }\n\n /** Show a desktop notification. */\n async notify({ message, title = \"iterate\" }: { message: string; title?: string }) {\n return this.#call(\"notify\", message, async () => {\n await osascript(\n `display notification \"${escapeForAppleScript(message)}\" with title \"${escapeForAppleScript(title)}\"`,\n );\n return { ok: true as const };\n });\n }\n\n /** Run arbitrary Swift and return its output — full power, when an agent needs it. */\n async runSwift({ code }: { code: string }) {\n // `swift -` reads a whole program from stdin and runs it.\n return await this.#call(\"runSwift\", \"Swift script\", () => run(\"swift\", [\"-\"], code));\n }\n\n __describe() {\n return {\n instructions:\n \"A live Mac shared by its owner. Ask before destructive actions. Methods: ask({ question, buttons? }), notify({ message, title? }), runSwift({ code }). Swift has full local access.\",\n types:\n \"ask(input: { question: string; buttons?: string[] }): Promise<{ answer: string }>; notify(input: { message: string; title?: string }): Promise<{ ok: true }>; runSwift(input: { code: string }): Promise<{ stdout: string; stderr: string; exitCode: number }>;\",\n };\n }\n}\n\nasync function askComputerName(): Promise<string> {\n const proposed = proposeComputerName();\n // Non-interactive (piped output, an agent): just take the proposal.\n if (!process.stdin.isTTY) return proposed;\n\n const answer = await prompts.text({\n message: \"What should agents call this computer? (camelCase — it becomes the itx.<name> path)\",\n placeholder: proposed,\n defaultValue: proposed,\n validate: (value) =>\n /^[a-zA-Z][a-zA-Z0-9]*$/.test((value ?? \"\").trim())\n ? undefined\n : \"Use a camelCase name: letters and digits, starting with a letter (e.g. jonasComputer).\",\n });\n if (prompts.isCancel(answer)) {\n prompts.cancel(\"Cancelled.\");\n process.exit(0);\n }\n return answer.trim();\n}\n\n/** \"Jonas’s-MacBook-Pro.local\" → \"jonasComputer\". A friendly default, always editable. */\nfunction proposeComputerName(): string {\n const firstWord = hostname()\n .replace(/\\.local$/i, \"\")\n .split(/[^a-zA-Z0-9]+/)\n .filter(Boolean)[0];\n const cleaned = firstWord?.toLowerCase().replace(/[^a-z0-9]/g, \"\");\n return cleaned ? `${cleaned}Computer` : \"myComputer\";\n}\n\n/** Provision belongs to this connection; signals release it before closing the transport.\n * A disconnect ends sharing visibly. The caller explicitly starts each new share. */\nexport async function shareMyComputer(input: {\n connection: Awaited<ReturnType<typeof connectOsNext>>;\n project: string;\n name?: string;\n json?: boolean;\n}) {\n const name = input.name || (await askComputerName());\n using project = await input.connection.session.projects.get(input.project);\n const emit = (event: ComputerEvent) => {\n if (input.json) process.stdout.write(`${JSON.stringify(event)}\\n`);\n };\n using _provision = await project.provide(`itx.${name}`, new MyComputer(emit));\n emit({ type: \"status\", loggedIn: true, name });\n console.error(`itx.${name} is live for project ${input.project}. Press Ctrl-C to stop sharing.`);\n console.error(`Tell your agent to call itx.${name}.__describe() to learn how to use this Mac.`);\n let stop: () => void = () => {};\n const stopped = new Promise<\"stopped\">((resolve) => {\n stop = () => resolve(\"stopped\");\n });\n process.once(\"SIGINT\", stop);\n process.once(\"SIGTERM\", stop);\n if (input.json) {\n process.stdin.once(\"end\", stop);\n process.stdin.resume();\n if (process.stdin.readableEnded) stop();\n }\n try {\n const outcome = await Promise.race([stopped, input.connection.closed]);\n if (outcome !== \"stopped\") {\n throw new Error(\n `Computer sharing disconnected (${outcome.code}: ${outcome.reason || \"connection closed\"}). Run iterate use-my-computer again to reconnect.`,\n );\n }\n } finally {\n process.removeListener(\"SIGINT\", stop);\n process.removeListener(\"SIGTERM\", stop);\n if (input.json) {\n process.stdin.removeListener(\"end\", stop);\n process.stdin.pause();\n }\n }\n}\n\n/** Run an AppleScript snippet, throwing if osascript reports failure (e.g. the human cancels). */\nasync function osascript(script: string) {\n const result = await run(\"osascript\", [\"-e\", script]);\n if (result.exitCode !== 0) {\n throw new Error(\n `osascript failed (exit ${result.exitCode}): ${result.stderr.trim() || \"no output\"}`,\n );\n }\n return result;\n}\n\n/** Escape a string for embedding in an AppleScript double-quoted literal. */\nconst escapeForAppleScript = (text: string) =>\n text.replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, '\\\\\"').replace(/\\r/g, \"\\\\r\").replace(/\\n/g, \"\\\\n\");\n","import { existsSync, mkdirSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { dirname, join } from \"node:path\";\nimport { z } from \"zod/v4\";\n\nconst XDG_CONFIG_PARENT = join(\n process.env.XDG_CONFIG_HOME ? process.env.XDG_CONFIG_HOME : join(homedir(), \".config\"),\n \"iterate\",\n);\n\nexport const CONFIG_PATH = join(XDG_CONFIG_PARENT, \"config.json\");\nexport const DEFAULT_CONFIG_NAME = \"prd\";\n\n/** Stored session (lives inside a config entry) */\nexport const StoredSession = z.object({\n token: z.string().optional(),\n refreshToken: z.string().optional(),\n clientId: z.string().optional(),\n scope: z.string().optional(),\n tokenType: z.string().optional(),\n expiresAt: z.string().optional(),\n});\n\nexport type StoredSession = z.infer<typeof StoredSession>;\n\n/** A named config — describes which server to talk to and how to authenticate. */\nexport const Config = z.object({\n defaultProject: z.string().optional(),\n osBaseUrl: z.string().optional().default(\"https://os.iterate2.com\"),\n session: StoredSession.optional(),\n});\n\nexport type Config = z.infer<typeof Config>;\n\n/** The config file on disk (~/.config/iterate/config.json) */\nconst ConfigFile = z.object({\n configs: z.record(z.string(), Config).optional(),\n default: z.string().optional(),\n /** Maps absolute directory path to a config name */\n workspaces: z.record(z.string(), z.string()).optional(),\n});\n\ntype ConfigFile = z.infer<typeof ConfigFile>;\n\nconst normalizeConfig = (config: Config): Config => ({\n ...config,\n // Strip trailing slashes to avoid double-slash URLs downstream.\n osBaseUrl: config.osBaseUrl.replace(/\\/+$/, \"\"),\n});\n\nexport const readConfigFile = (): ConfigFile => {\n if (!existsSync(CONFIG_PATH)) return {};\n const rawText = readFileSync(CONFIG_PATH, \"utf8\");\n try {\n return ConfigFile.parse(JSON.parse(rawText));\n } catch (error) {\n const detail = error instanceof Error ? error.message : String(error);\n throw new Error(`Invalid JSON in ${CONFIG_PATH}: ${detail}`);\n }\n};\n\nexport const writeConfigFile = (configFile: ConfigFile): void => {\n const parsed = ConfigFile.safeParse(configFile);\n if (!parsed.success) {\n throw new Error(`Invalid config file: ${z.prettifyError(parsed.error)}`);\n }\n mkdirSync(dirname(CONFIG_PATH), { recursive: true });\n writeFileSync(CONFIG_PATH, `${JSON.stringify(parsed.data, null, 2)}\\n`, { mode: 0o600 });\n};\n\n/**\n * Read and validate a single named config, applying schema defaults and\n * normalizing URLs. Missing or invalid configs are returned as an Error value\n * by default, or thrown when called with `{ throw: true }`.\n */\nexport function readConfig(name: string): Config | Error;\nexport function readConfig(name: string, options: { throw: true }): Config;\nexport function readConfig(name: string, options?: { throw: true }): Config | Error {\n const result = ((): Config | Error => {\n const raw = readConfigFile().configs?.[name] ?? (name === DEFAULT_CONFIG_NAME ? {} : undefined);\n if (!raw) return new Error(`Config \"${name}\" not found in ${CONFIG_PATH}`);\n const parsed = Config.safeParse(raw);\n if (!parsed.success) {\n return new Error(\n `Invalid config \"${name}\" in ${CONFIG_PATH}:\\n${z.prettifyError(parsed.error)}`,\n );\n }\n return normalizeConfig(parsed.data);\n })();\n if (result instanceof Error && options?.throw) throw result;\n return result;\n}\n\n/**\n * Merge session fields into the named config's stored session. Extra\n * runtime-only keys on `session` are stripped by the schema on write.\n */\nexport const updateConfigSession = (configName: string, session: StoredSession): void => {\n const configFile = readConfigFile();\n configFile.configs ||= {};\n const entry = (configFile.configs[configName] ||= normalizeConfig(Config.parse({})));\n entry.session = { ...entry.session, ...session };\n writeConfigFile(configFile);\n};\n\nexport const removeConfigSession = (configName: string): void => {\n const configFile = readConfigFile();\n const entry = configFile.configs?.[configName];\n if (!entry?.session) return;\n delete entry.session;\n writeConfigFile(configFile);\n};\n","import { createHash, randomBytes } from \"node:crypto\";\nimport { readFile } from \"node:fs/promises\";\nimport { createServer, type IncomingMessage, type ServerResponse } from \"node:http\";\nimport { dirname } from \"node:path\";\nimport process from \"node:process\";\nimport repl from \"node:repl\";\nimport { RpcTarget } from \"capnweb\";\nimport * as prompts from \"@clack/prompts\";\nimport { os } from \"@orpc/server\";\nimport { createCli, yamlTableConsoleLogger } from \"trpc-cli\";\nimport { z } from \"zod/v4\";\nimport { connectOsNext } from \"./next-node.ts\";\nimport type { SessionCredentials } from \"./next/api.ts\";\nimport { launchMenubarApp } from \"./menubar-app.ts\";\nimport { shareMyComputer } from \"./use-my-computer.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\nconst OAUTH_REFRESH_SKEW_MS = 60_000;\nconst isAgent =\n process.env.AGENT === \"1\" ||\n process.env.OPENCODE === \"1\" ||\n Boolean(process.env.OPENCODE_SESSION) ||\n Boolean(process.env.CLAUDE_CODE);\nlet configFlagOverride: string | undefined;\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(\"-\")) throw new Error(`${flagName} requires a value`);\n process.argv.splice(flagIndex + 2, 2);\n return value;\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\n/**\n * Resolve the config's OAuth credentials before connecting.\n * OAuth sessions are refreshed when possible.\n */\nconst storedCredentials = async (\n config: Config,\n configName?: string,\n): Promise<SessionCredentials> => {\n let session = config.session;\n if (!session) {\n throw new Error(`Not logged in to ${config.osBaseUrl}. Run \\`iterate login\\` first.`);\n }\n if (sessionNeedsRefresh(session)) {\n if (session.refreshToken && session.clientId) {\n session = await refreshOAuthSession({ config, configName, session });\n } else {\n throw new Error(`Session expired for ${config.osBaseUrl}. Run \\`iterate login\\` again.`);\n }\n }\n if (session.token) {\n return { type: \"bearer\", token: session.token };\n }\n throw new Error(`No bearer token for ${config.osBaseUrl}. Run \\`iterate login\\` again.`);\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 credentialsForConfig = async (config: Config, name: string): Promise<SessionCredentials> => {\n const secret = process.env.APP_CONFIG_ADMIN_API_SECRET?.trim();\n if (secret) return { type: \"admin-secret\", secret };\n const token = process.env.ITERATE_BEARER_TOKEN?.trim();\n if (token) return { type: \"bearer\", token };\n return await storedCredentials(config, name);\n};\nconst connectConfigured = async () => {\n const resolved = resolveConfig(process.cwd(), { throw: true });\n const connection = await connectOsNext({\n baseUrl: resolved.config.osBaseUrl,\n auth: await credentialsForConfig(resolved.config, resolved.name),\n });\n return { resolved, connection };\n};\nconst selectProject = async (\n connection: Awaited<ReturnType<typeof connectOsNext>>,\n configured?: string,\n) => {\n if (configured) return configured;\n const projects = await connection.session.projects.list();\n if (projects.length === 1) return projects[0].id;\n throw new Error(\n `Pass --project or set defaultProject in ${CONFIG_PATH}. Accessible projects: ${projects.map((p) => `${p.slug} (${p.id})`).join(\", \") || \"none\"}.`,\n );\n};\nconst OAUTH_SCOPE = \"iterate\";\nconst LOOPBACK_HOST = \"localhost\";\nconst LOOPBACK_CALLBACK_PATH = \"/callback\";\nconst OAUTH_CALLBACK_TIMEOUT_MS = 5 * 60 * 1000;\n\nconst OAuthTokenResponse = z.object({\n access_token: z.string().min(1),\n refresh_token: z.string().optional(),\n expires_in: z.number().positive().optional(),\n expires_at: z.number().positive().optional(),\n token_type: z.string().optional(),\n scope: z.string().optional(),\n});\ntype OAuthTokenResponse = z.infer<typeof OAuthTokenResponse>;\n\nconst base64Url = (buffer: Buffer) => buffer.toString(\"base64url\");\n\nconst randomBase64Url = (byteLength = 32) => base64Url(randomBytes(byteLength));\n\nexport const oauthResourceForOsBaseUrl = (osBaseUrl: string) => {\n return new URL(\"/api\", osBaseUrl).href;\n};\n\nconst openUrlInBrowser = async (url: string) => {\n const { execFile } = await import(\"node:child_process\");\n const { command, args } =\n process.platform === \"darwin\"\n ? { command: \"open\", args: [url] }\n : process.platform === \"win32\"\n ? { command: \"cmd\", args: [\"/c\", \"start\", \"\", url] }\n : { command: \"xdg-open\", args: [url] };\n execFile(command, args, (error) => {\n if (error)\n console.error(`Could not open a browser: ${error.message}. Open the URL above manually.`);\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}/oauth2/register`, {\n method: \"POST\",\n signal: AbortSignal.timeout(30_000),\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 = z.object({ client_id: z.string().min(1) }).parse(await response.json());\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 void callbackPromise.catch(() => {});\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: () => {\n clearTimeout(timeout);\n return new Promise<void>((resolve) => server.close(() => resolve()));\n },\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}/oauth2/token`, {\n method: \"POST\",\n signal: AbortSignal.timeout(30_000),\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 = OAuthTokenResponse.parse(await response.json());\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.osBaseUrl;\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}/oauth2/token`, {\n method: \"POST\",\n signal: AbortSignal.timeout(30_000),\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 = OAuthTokenResponse.parse(await response.json());\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.osBaseUrl;\n const resource = oauthResourceForOsBaseUrl(config.osBaseUrl);\n const codeVerifier = randomBase64Url(48);\n const state = randomBase64Url(32);\n const callback = await startOAuthCallbackServer();\n try {\n const clientId = await registerOAuthClient({ authBaseUrl, redirectUri: callback.redirectUri });\n\n const authorizeUrl = new URL(`${authBaseUrl}/oauth2/auth`);\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 const callbackResult = await callback.wait();\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 } finally {\n await callback.close();\n }\n};\n\nconst loginToResolvedConfig = async (resolved: { name: string; config: Config }) => {\n const { config } = resolved;\n\n console.error(`Logging in to ${config.osBaseUrl}...`);\n const oauthResult = await oauthLogin(config);\n\n // Update in-memory config so subsequent verification and calls see the token.\n config.session = oauthResult;\n\n using connection = await connectOsNext({\n baseUrl: config.osBaseUrl,\n auth: { type: \"bearer\", token: oauthResult.token },\n });\n await connection.session.whoami();\n\n updateConfigSession(resolved.name, oauthResult);\n return oauthResult;\n};\n\nconst launcherProcedures = {\n ping: os.input(z.object({})).handler(async () => {\n const { connection } = await connectConfigured();\n using owned = connection;\n return { message: \"OS Next session valid\", principal: await owned.session.whoami() };\n }),\n login: os\n .input(z.object({}))\n .meta({ description: \"Authenticate with OS Next via browser OAuth\" })\n .handler(async () => {\n const session = await loginToResolvedConfig(resolveConfig(process.cwd(), { throw: true }));\n return {\n message: \"Logged in successfully\",\n expiresAt: session.expiresAt,\n scope: session.scope,\n };\n }),\n logout: os\n .input(z.object({}))\n .meta({ description: \"Remove the current config's stored session\" })\n .handler(async () => {\n const resolved = resolveConfig(process.cwd(), { throw: true });\n removeConfigSession(resolved.name);\n return { message: `Logged out from ${resolved.name}` };\n }),\n orgs: {\n list: os.input(z.object({})).handler(async () => {\n const { connection } = await connectConfigured();\n using owned = connection;\n return await owned.session.orgs();\n }),\n },\n projects: {\n list: os.input(z.object({})).handler(async () => {\n const { connection } = await connectConfigured();\n using owned = connection;\n return await owned.session.projects.list();\n }),\n },\n repl: os\n .input(\n z.object({\n project: z.string().optional().describe(\"Project id or slug\"),\n context: z.string().default(\"/\").describe(\"Context path within the project\"),\n }),\n )\n .meta({ description: \"Open a local Node REPL with itx and RpcTarget in scope\" })\n .handler(async ({ input }) => {\n const { resolved, connection } = await connectConfigured();\n using owned = connection;\n const project = input.project || resolved.config.defaultProject;\n if (!project && input.context !== \"/\")\n throw new Error(\"--context requires --project or a configured defaultProject.\");\n using root = project ? await owned.session.projects.get(project) : null;\n using context = root ? await root.cd(input.context) : null;\n console.error(\n `Connected to ${resolved.config.osBaseUrl}, ${project ? `project ${project}, context ${input.context}` : \"session\"}. Use .exit to quit.`,\n );\n // capnweb identifies built-ins by prototype. Evaluate in this process's\n // realm so objects and argument arrays use the transport's constructors.\n const server = repl.start({ prompt: \"itx> \", useGlobal: true });\n const initialize = () => {\n server.context.itx = context || owned.session;\n server.context.RpcTarget = RpcTarget;\n };\n initialize();\n server.on(\"reset\", initialize);\n try {\n const outcome = await Promise.race([\n new Promise<\"exit\">((resolve) => server.once(\"exit\", () => resolve(\"exit\"))),\n owned.closed,\n ]);\n if (outcome !== \"exit\") {\n throw new Error(\n `REPL disconnected (${outcome.code}: ${outcome.reason || \"connection closed\"}). Start a new REPL to reconnect.`,\n );\n }\n } finally {\n server.close();\n }\n }),\n itx: {\n run: os\n .input(\n z\n .object({\n project: z\n .string()\n .optional()\n .describe(\"Project id or slug; defaults to config.defaultProject\"),\n context: z.string().default(\"/\").describe(\"Context path within the project\"),\n eval: z\n .string()\n .optional()\n .describe(\"Script body with itx in scope; use return for the result\"),\n file: z\n .string()\n .optional()\n .describe(\"Read the script from a UTF-8 file; - reads stdin\"),\n })\n .refine(\n (input) => Boolean(input.eval) !== Boolean(input.file),\n \"Specify exactly one of --eval or --file\",\n ),\n )\n .meta({ description: \"Run an itx script once on OS Next\" })\n .handler(async ({ input }) => {\n let script = input.eval;\n if (input.file === \"-\") {\n const chunks: Buffer[] = [];\n for await (const chunk of process.stdin) chunks.push(Buffer.from(chunk));\n script = Buffer.concat(chunks).toString(\"utf8\");\n } else if (input.file) script = await readFile(input.file, \"utf8\");\n const { resolved, connection } = await connectConfigured();\n using owned = connection;\n const project = await selectProject(owned, input.project || resolved.config.defaultProject);\n using root = await owned.session.projects.get(project);\n using context = await root.cd(input.context);\n return await context.run(`async (itx) => {\\n${script}\\n}`);\n }),\n },\n menubar: os\n .input(z.object({ project: z.string().optional().describe(\"Project id or slug\") }))\n .meta({ description: \"Launch the macOS menu bar for sign-in and computer sharing\" })\n .handler(async ({ input }) => {\n const resolved = resolveConfig(process.cwd(), { throw: true });\n const project = input.project || resolved.config.defaultProject;\n if (!project) throw new Error(\"menubar needs --project or a configured defaultProject.\");\n await launchMenubarApp({ configName: resolved.name, project, log: console.error });\n }),\n useMyComputer: os\n .input(\n z.object({\n project: z.string().optional().describe(\"Project id or slug\"),\n json: z.boolean().optional().describe(\"Emit menu-bar events as NDJSON; stop on stdin EOF\"),\n name: z\n .string()\n .regex(/^[a-zA-Z][a-zA-Z0-9]*$/)\n .optional()\n .describe(\"Computer capability name, e.g. jonasComputer\"),\n }),\n )\n .meta({ description: \"Share this Mac with a project until Ctrl-C\" })\n .handler(async ({ input }) => {\n if (process.platform !== \"darwin\")\n throw new Error(\"use-my-computer requires macOS (AppleScript and Swift).\");\n const { resolved, connection } = await connectConfigured();\n using owned = connection;\n const project = await selectProject(owned, input.project || resolved.config.defaultProject);\n await shareMyComputer({ connection: owned, project, name: input.name, json: input.json });\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 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.iterate2.com)\"),\n defaultProject: z.string().optional().describe(\"Default project id or slug\"),\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({ description: \"Create or update a named config\" })\n .handler(async ({ input }) => {\n const configFile = readConfigFile();\n configFile.configs ||= {};\n\n configFile.configs[input.name] ||= Config.parse({});\n if (input.osBaseUrl && input.osBaseUrl !== configFile.configs[input.name].osBaseUrl) {\n configFile.configs[input.name].osBaseUrl = input.osBaseUrl;\n delete configFile.configs[input.name].session;\n }\n if (input.defaultProject)\n configFile.configs[input.name].defaultProject = input.defaultProject;\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], session: undefined },\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: {\n ...resolved.config,\n session: resolved.config.session ? { loggedIn: true } : undefined,\n },\n resolvedVia: configFlagOverride ? \"--config flag\" : \"workspace mapping or default\",\n };\n }),\n },\n};\nexport const getCli = async () => {\n configFlagOverride = consumeCliStringFlag(\"--config\");\n if (process.argv.length === 2) process.argv.push(\"--help\");\n const cli = createCli({\n router: launcherProcedures,\n name: \"iterate\",\n description: \"Iterate CLI for OS Next. Run itx scripts, authenticate, and share your computer.\",\n });\n return {\n cli,\n prompts: isAgent || !process.stdin.isTTY || !process.stdout.isTTY ? 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"],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export { configureIterateSession, connectIterateSession, connectItx, disconnectIterateSession, isItxTransportError, reconnectIterateSession, releaseItxConnection, reportTransportSuspicion, retryFailedIterateSession, watchItxConnection, type Itx, type ItxRecoverableConnectionHandle, type IterateSessionConfig, type ProjectStub, type SessionStub, } from "./itx/itx-session.ts";
2
+ export { applyPatch, createLiveStateStore, diff } from "./sdk/capnweb/live-state/index.ts";
3
+ export type * from "./itx-api.generated.ts";
@@ -0,0 +1,4 @@
1
+ import { a as disconnectIterateSession, c as reconnectIterateSession, d as retryFailedIterateSession, l as releaseItxConnection, m as watchItxConnection, n as connectIterateSession, o as isItxTransportError, r as connectItx, t as configureIterateSession, u as reportTransportSuspicion } from "./itx-session-sjud8GiT.mjs";
2
+ import "./live-state-BJNqOwFw.mjs";
3
+ import { o as applyPatch, r as createLiveStateStore, s as diff } from "./protocol-DnK_f2m6.mjs";
4
+ export { applyPatch, configureIterateSession, connectIterateSession, connectItx, createLiveStateStore, diff, disconnectIterateSession, isItxTransportError, reconnectIterateSession, releaseItxConnection, reportTransportSuspicion, retryFailedIterateSession, watchItxConnection };