@remotedraw/cli 0.2.0 → 0.2.2

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.
@@ -1,2 +1,2 @@
1
- export declare const AGENT_SKILL_MARKDOWN = "---\nname: remotedraw\ndescription: Add RemoteDraw phone input to customer apps with the RemoteDraw CLI, public API, React SDK, raw HTTP, or customer-owned iOS sender flow.\n---\n\n# RemoteDraw Agent Skill\n\nUse this skill when a user asks to create, initialize, debug, or review a RemoteDraw integration.\n\n## Decision Flow\n\n1. Identify the receiver surface: web app, desktop app, iOS app, or headless/backend workflow.\n2. Identify the sender surface: RemoteDraw iOS app, embedded web sender, customer-owned iOS sender, or raw/headless sender.\n3. Pick the SDK path:\n - React SDK: web receiver and optional embedded web sender.\n - Plain JavaScript/raw HTTP: non-React web, desktop, backend, or custom clients.\n - Swift: customer-owned iOS sender apps.\n4. Pick a supported starter: `signature` for a bounded signature-field target,\n or `sketch` for a free-form receiver surface \u2014 both render through the\n `RemoteDrawReceiver` foundation, with the surrounding UI owned by the\n integrating app. Configure the target kind and descriptor directly for\n photos, PDFs, maps, screens, and other custom surfaces.\n\n## Endpoint, Key, and Packages\n\nRemoteDraw is hosted. There is nothing for the customer to run or self-host.\n\n- API base URL: `https://api.remotedraw.com`\n- Public docs: `https://docs.remotedraw.com/docs`\n- API keys are created in the console at\n `https://dashboard.remotedraw.com/api/keys` and belong in `.env.local` as\n `REMOTEDRAW_API_KEY`, alongside\n `REMOTEDRAW_API_BASE_URL=https://api.remotedraw.com`.\n\nPublished npm packages \u2014 install only what the chosen path needs:\n\n| Package | Install | Use it for |\n| --- | --- | --- |\n| `@remotedraw/cli` | `npm install -g @remotedraw/cli` (or `npx @remotedraw/cli@latest`) | Scaffolding, doctor, and test sessions. |\n| `@remotedraw/react` | `npm install @remotedraw/react` | React receiver, pairing, and headless sender. Peers on `react`/`react-dom` >= 18. |\n| `@remotedraw/svelte` | `npm install @remotedraw/svelte` | Svelte receiver store over the framework-free client. |\n| `@remotedraw/client` | `npm install @remotedraw/client` | Framework-free receiver/sender/API clients for any JS runtime. |\n| `@remotedraw/protocol` | `npm install @remotedraw/protocol` | Shared schemas, types, and limits for raw-HTTP integrations. |\n| `@remotedraw/geometry` | `npm install @remotedraw/geometry` | Normalized stroke geometry, shape assist, hit testing, export. |\n\n`@remotedraw/react` already depends on `client`, `protocol`, and `geometry`, so\ndo not add those separately for a React app. There is no published Swift\npackage: `remotedraw init --sdk swift` writes one self-contained\n`RemoteDrawIntegration.swift` against the public HTTP routes.\n\n## CLI First\n\nRead the machine-readable option catalog before choosing a plan:\n\n```sh\nremotedraw options --format json\n```\n\nInitialize a project with the closest supported path:\n\n```sh\nremotedraw init --target web --sender remotedraw-ios --sdk react --preset signature\nremotedraw init --target web --sender embedded-web --sdk react --preset sketch\nremotedraw init --target desktop --sender remotedraw-ios --sdk js --preset sketch\nremotedraw init --target ios --sender own-ios --sdk swift --preset sketch\n```\n\nBy default, `new` and `init` create the dashboard project and a project-scoped\ndevelopment API key, then write `REMOTEDRAW_API_BASE_URL`,\n`REMOTEDRAW_PROJECT_ID`, and `REMOTEDRAW_API_KEY` to a gitignored `.env.local`.\nUse `--offline` only when cloud setup is intentionally out of scope.\n\n`--sender own-ios` requires `--sdk swift`; every other combination of\n`--target`, `--sender`, and `--sdk` is accepted. Invalid combinations fail with\n`INVALID_COMBINATION` rather than guessing.\n\nAgents must use explicit non-interactive dry runs before changing a project:\n\n```sh\nremotedraw init --non-interactive --offline --dry-run --format json --target web --sender remotedraw-ios --sdk react --preset signature --package-manager npm\n# Inspect plan, files, defaultsApplied, and warnings before applying.\nremotedraw init --non-interactive --offline --format json --target web --sender remotedraw-ios --sdk react --preset signature --package-manager npm\nremotedraw doctor --format json\nremotedraw create-input --preset signature --json\n```\n\nDo not use the interactive wizard, synthesize arrow-key input, or scrape\nhuman-formatted output. If receiver, sender, or preset intent is ambiguous, ask\nthe user instead of guessing. Never pass `--force` unless overwrite scope was\nexplicitly approved.\n\n## Security Rules\n\n- Keep `rd_sk_...` API keys in trusted backend secrets only.\n- Keep the account-level `rd_cli_...` credential in the user config directory; never copy it into a project. Use `REMOTEDRAW_CLI_TOKEN` only as an explicitly managed CI secret.\n- Never place API keys in browser bundles, mobile clients, screenshots, logs, or generated examples.\n- Public clients should receive only `joinUrl`, `joinToken`, `receiverToken`, or `senderToken` values scoped to the session.\n- Production QR codes should use HTTPS `joinUrl` values. Do not make the custom scheme the primary QR target.\n\n## API Contract\n\n- Backend creates sessions with `POST /v1/sessions`.\n- Receiver clients read `POST /v1/receiver/session`, `/drawings`, `/drafts`, and `/senders` with a receiver token.\n- Sender clients join with `POST /v1/join`, stream mutable drafts to `/v1/sender/draft`, commit durable strokes to `/v1/sender/commit`, and finish with `/v1/sender/submit`.\n- Custom senders should throttle draft updates, coalesce to the latest pending preview, and commit one durable stroke on pointer-up with a stable `clientStrokeId`.\n\n## AI Actions\n\nReach for AI when the product needs something _from_ the finished drawing:\na generated image, a description, or structured data to branch on. Backend only\n(`aiActions:*` scopes on an `rd_sk_...` key). Never wire it to a commit,\nsubmit, or presence event \u2014 AI runs only on an explicit `POST /v1/ai-actions`\ncall the user asked for. Run it after the user is done; the route accepts\n`active` and `ended` sessions.\n\nMinimal request per outcome (`POST /v1/ai-actions`, plus optional\n`quality: \"fast\" | \"balanced\" | \"max\"`, default `balanced`):\n\n```jsonc\n{ \"sessionId\": \"...\", \"request\": \"image\", \"prompt\": \"...\" } // image back in the response\n{ \"sessionId\": \"...\", \"request\": \"image\", \"prompt\": \"...\", \"deliver\": [\"result\", \"board\"] } // and onto the board\n{ \"sessionId\": \"...\", \"request\": \"text\", \"prompt\": \"Describe this drawing.\" } // text back\n{ \"sessionId\": \"...\", \"request\": \"text\", \"prompt\": \"...\", \"text\": { \"schema\": { /* JSON Schema */ } } } // typed JSON\n```\n\nThe response is asynchronous: `create` returns `status: \"queued\"`. Poll\n`POST /v1/ai-actions/get` until `status` is `succeeded`, `failed`, or\n`canceled`, or use the helper on the API client\n(`createHttpRemoteDrawApiClient` from `@remotedraw/client`, re-exported by\n`@remotedraw/react`). This client holds the `rd_sk_` key, so it only ever runs\non the backend:\n\n```ts\nconst action = await client.createAiAction({\n sessionId,\n request: \"image\",\n prompt,\n});\nconst finished = await client.waitForAiAction({ aiActionId: action.id });\n// finished.result: generatedImageUrl | generatedText | generatedData | boardDrawingIds\n```\n\nThere is no completion webhook. Results are RemoteDraw-hosted asset URLs, not\nprovider URLs. See https://docs.remotedraw.com/docs/api#ai for the full\nrequest, credit, and legacy-mapping tables.\n\n## Verification\n\nAfter changes, verify against the customer's project \u2014 never assume RemoteDraw's\nown repo scripts exist here.\n\n```sh\nremotedraw doctor # config, SDK deps, REMOTEDRAW_* env\nremotedraw create-input --execute # open a real session, print the join URL\n```\n\nThen run whatever type check and test command the project already defines (for\nexample `npm run typecheck` and `npm test`). Do not invent script names, and do\nnot run `bun run test:api`, `bun run typecheck`, or `bun run ios:kit:test` \u2014\nthose are RemoteDraw's internal monorepo scripts and will not exist in a\ncustomer project.";
1
+ export declare const AGENT_SKILL_MARKDOWN = "---\nname: remotedraw\ndescription: Integrate RemoteDraw phone drawing into a customer's product \u2014 scan the codebase, ask the product questions, get approval before installing, then wire the receiver and the sender with the SDK's own components (React/Svelte/JS receiver, hosted web sender, RemoteDrawSenderKit full-screen iOS sender).\n---\n\n# RemoteDraw Agent Skill\n\nUse this skill when a user asks what RemoteDraw is, whether it fits their app,\nor to create, debug, or review a RemoteDraw integration.\n\n## What RemoteDraw is, in four sentences\n\nA phone becomes a pen for a screen. Your **backend** creates a **session** with\nan `rd_sk_` API key; your **receiver** (web, desktop, or any client) shows the\nsession's ink using a `rd_recv_` token; a **sender** (the hosted `/join` page\nthat any QR opens, the RemoteDraw iOS app, or your own iOS app through\n`RemoteDrawSenderKit`) draws with a `rd_send_` token. Strokes stream as drafts\nwhile the finger is down and commit on release; nothing runs on the customer's\ninfrastructure except the session-creation call.\n\n- API: `https://api.remotedraw.com` \u00B7 Docs: `https://docs.remotedraw.com/docs`\n (agent summary: `https://docs.remotedraw.com/llms.txt`) \u00B7 Keys:\n `https://dashboard.remotedraw.com/api/keys`\n- Packages: `@remotedraw/cli`, `@remotedraw/react`, `@remotedraw/svelte`,\n `@remotedraw/client`, `@remotedraw/protocol`, `@remotedraw/geometry`,\n and the SwiftPM package `https://github.com/AxioSOzo/remotedraw-swift.git`\n (product `RemoteDrawSenderKit`).\n\n## The flow \u2014 in this order\n\n1. **Explain before touching anything.** If the user is asking what RemoteDraw\n can do, answer from this file and the docs. Do not install, scaffold, or\n create sessions to answer a question.\n2. **Ask for approval before installing.** Name exactly what you want to add\n (`npm install -g @remotedraw/cli`, `@remotedraw/react`, a Swift package, a\n dashboard project + key) and why, then wait. This includes `remotedraw init`\n without `--offline`, which provisions a billable project and key.\n3. **Scan the codebase.** `remotedraw scan --format json` (or\n `npx @remotedraw/cli@latest scan --format json` before the CLI is installed)\n reports the web/server/iOS projects, where an `rd_sk_` key may live, any\n RemoteDraw wiring already present, the integration options that fit, and\n the product questions to ask. Read it; verify its `evidence` where it\n matters.\n4. **Ask the product questions.** They come back in the scan's `questions`\n array. The ones that decide the build: what is drawn on, which existing\n screen the receiver goes on, who holds the phone (signed-in user \u2192 direct\n sender, anyone \u2192 QR), what Submit does, and demo vs. real feature. Do not\n invent answers; a one-page \"drawing lab\" is only right when the user says a\n demo is what they want.\n5. **Propose one plan, then build all of it.** Receiver, session creation,\n sender, and the exit/submit path \u2014 an integration is not done when ink\n appears once on a test page. Build beside existing features; never delete\n or replace a host-app feature on your own initiative.\n6. **Verify by using it.** Run `remotedraw doctor --format json`, open a real\n session, draw from a phone (or `create-input --execute` + the hosted join\n URL), and confirm ink lands on the receiver. On iOS, run it on a device or\n simulator and look at the screen; a compiling canvas is not a working one.\n\n## Choosing the pieces\n\nReceiver (the screen that shows ink):\n\n| Host | Use | Not |\n| --- | --- | --- |\n| React / Next / Remix | `@remotedraw/react`: `RemoteDrawProvider`, `RemoteDrawReceiver`, `PairingCode`, `RemoteDrawSessionControls` | A hand-rolled SVG or polling loop |\n| Svelte / SvelteKit | `@remotedraw/svelte` receiver store | \u2014 |\n| Anything else with JS | `@remotedraw/client`: `createHttpReceiverClient`, `createRealtimeReceiverSource` | \u2014 |\n| No JS at all | Raw HTTP `POST /v1/receiver/*` with the receiver token | \u2014 |\n\nSender (the phone):\n\n| Situation | Use | Not |\n| --- | --- | --- |\n| No phone app in the product | **Hosted `/join` page.** Render `joinUrl` as a QR (`PairingCode`). Full-screen, polished, zero sender code; the RemoteDraw iOS app opens the same link. | An in-page web sender (`--sender embedded-web`) unless the user explicitly wants drawing inside their own web page |\n| The product has its own iOS app | **`RemoteDrawSenderKit`** full-screen surface (below). Backend mints `rd_send_` via `POST /v1/sessions/direct-sender` for a signed-in user; QR join stays as the fallback. | A custom canvas, a raw-HTTP Swift client, or `remotedraw init --sdk swift` when adding a SwiftPM dependency is possible |\n| Headless / tests | `POST /v1/join` \u2192 `/v1/sender/draft` \u2192 `/v1/sender/commit` | \u2014 |\n\nSession creation (`POST /v1/sessions`) needs the `rd_sk_` key and therefore\nruns only where the scan found server-side code: a Convex action, a Next route\nhandler, an Express/Hono route, a serverless function. If the scan found none,\nask where the backend is. Never scaffold `createRemoteDrawSession.ts` into a\nVite/Next client tree \u2014 `--target web` in `remotedraw init` still writes it\nunder `src/`; move it, or scaffold into a scratch directory and copy only what\nbelongs.\n\n## iOS: the bar\n\nThe reference is the RemoteDraw app's own drawing screen, and the SDK ships it.\n\n```swift\n// Package.swift / Xcode \u2192 Add Package\n.package(url: \"https://github.com/AxioSOzo/remotedraw-swift.git\", from: \"0.1.0\")\n.product(name: \"RemoteDrawSenderKit\", package: \"remotedraw-swift\")\n\nimport RemoteDrawSenderKit\n\n// Once, at app start.\nRemoteDraw.configure(.init(apiBaseURL: .production))\n\n// Wherever drawing starts. `token` is the rd_send_ string your backend\n// minted with POST /v1/sessions/direct-sender (a QR's rd_join_ works too).\nButton(\"Draw\") { drawing = true }\n .remoteDrawSurface(isPresented: $drawing, senderToken: token) { outcome in\n switch outcome {\n case .submitted(let receipt): record(receipt)\n case .left: break\n case .expired: refreshSession()\n case .failed(let error): report(error)\n }\n }\n```\n\nRules:\n\n- The drawing surface is **full screen**: `.remoteDrawSurface` (a\n `fullScreenCover`) or `RemoteDrawTakeover` inside your own cover or\n `UIHostingController`. A sheet is acceptable only if `RemoteDrawSurface`\n fills it edge to edge; the surface then owns the gestures and the sheet must\n not be draggable while drawing. There is no small-canvas option.\n- The user can always leave \u2014 the surface has its own exit; `RemoteDrawExit`\n only decides whether leaving with unsubmitted ink asks first \u2014 and the host\n gets an outcome. Submit, undo, clear, instruments, and paper are the SDK's.\n- Do not write a `UIViewRepresentable` canvas, a draft loop, or an HTTP client:\n cadence, point budgets, the packed-point codec, sequence healing, token\n refresh, and presence are protocol, and `RemoteDrawSenderSession` already\n implements them. If you must go headless, compose `RemoteDrawInkCanvas` +\n `RemoteDrawStrokeCapture` on that session \u2014 never raw `URLSession`.\n- `RemoteDraw.configure` is the only setup; the SDK needs no `Info.plist` keys.\n- Customers do not ship a separate RemoteDraw app; their app *is* the sender.\n\n## CLI\n\n```sh\nremotedraw options --format json # the option catalog\nremotedraw scan --format json # read the codebase first (step 3)\nremotedraw init --non-interactive --offline --dry-run --format json \\\n --path apps/web --target web --sender remotedraw-ios --sdk react --preset sketch --package-manager npm\nremotedraw doctor --format json\nremotedraw create-input --preset sketch --json\nremotedraw create-input --execute # a real session + join URL, needs a key\n```\n\n`--sender own-ios` requires `--sdk swift`; other invalid combinations fail with\n`INVALID_COMBINATION`. By default `init`/`new` also create a dashboard project\nand a project-scoped development key in `.env.local` \u2014 that is the step that\nneeds approval (step 2); `--offline` writes files only. Never pass `--force`\nunless the user approved overwriting. Do not drive the interactive wizard or\nscrape human-formatted output; every command has `--format json`.\n\n## Security and tenancy\n\n- `rd_sk_\u2026` keys: backend secrets only. Never in browser bundles, Swift, app\n bundles, screenshots, logs, or generated examples.\n- The account-level `rd_cli_\u2026` credential stays in the user config directory;\n never copy it into a project. `REMOTEDRAW_CLI_TOKEN` is for CI secrets only.\n- Public clients receive only `joinUrl`, `joinToken`, `receiverToken`, or\n `senderToken`, each scoped to one session. Production QR codes use the HTTPS\n `joinUrl`, not the custom scheme.\n- One key serves every customer of the product, so a session id is not a\n capability. Create sessions with `externalId: \"<product>:<tenant>\"`, and\n check it (`POST /v1/sessions/get`) before attaching a sender or ending a\n session on a tenant's behalf.\n\n## Gotchas the SDKs hide and hand-written code hits\n\n- `POST /v1/sessions` is billable and not idempotent. React StrictMode runs\n mount effects twice in development: guard with a ref, or create the session\n in a server action / loader. Store the `receiverToken` if the receiver\n outlives a page load \u2014 it is the only credential that reads a session's ink.\n- Timestamps are integer milliseconds. `occurredAt` and point `t` values are\n accepted with a fraction (floored) but a hand-written client should send\n integers.\n- Committed points come back in board space, remapped through\n `device.aspectRatio`; send the aspect ratio of the pad the finger touches.\n- `RemoteDrawReceiver` defaults `phones` and `pointers` to on. A connected\n phone that enters viewport mode is drawn on the board as a phone outline; pass\n `phones={false}` for a plain surface where that is not wanted.\n- `PairingCode` hides the join URL text unless `showLink`; pass it when a human\n needs the link without a camera.\n- `joinTokenExpiresAt` is earlier than the session's `expiresAt`: the QR dies\n first, the board stays live.\n\n## API contract\n\n- Backend: `POST /v1/sessions` (create), `/v1/sessions/get`, `/v1/sessions/end`,\n `/v1/sessions/direct-sender` (mint `rd_send_` for your own app),\n `/v1/sessions/join-token` (a fresh QR).\n- Receiver: `POST /v1/receiver/session`, `/drawings`, `/drafts`, `/senders`\n with the receiver token, or the realtime source in the SDKs.\n- Sender: `POST /v1/join` (spends a join token; revokes other senders), then\n `/v1/sender/draft` (latest-only preview, throttle to ~32 ms),\n `/v1/sender/commit` (one durable stroke per pointer-up with a stable\n `clientStrokeId`), `/v1/sender/submit`.\n\n## AI actions\n\nReach for AI when the product needs something _from_ the finished drawing:\na generated image, a description, or structured data to branch on. Backend only\n(`aiActions:*` scopes on an `rd_sk_...` key). Never wire it to a commit,\nsubmit, or presence event \u2014 AI runs only on an explicit `POST /v1/ai-actions`\ncall the user asked for. Run it after the user is done; the route accepts\n`active` and `ended` sessions.\n\nMinimal request per outcome (`POST /v1/ai-actions`, plus optional\n`quality: \"fast\" | \"balanced\" | \"max\"`, default `balanced`):\n\n```jsonc\n{ \"sessionId\": \"...\", \"request\": \"image\", \"prompt\": \"...\" } // image back in the response\n{ \"sessionId\": \"...\", \"request\": \"image\", \"prompt\": \"...\", \"deliver\": [\"result\", \"board\"] } // and onto the board\n{ \"sessionId\": \"...\", \"request\": \"text\", \"prompt\": \"Describe this drawing.\" } // text back\n{ \"sessionId\": \"...\", \"request\": \"text\", \"prompt\": \"...\", \"text\": { \"schema\": { /* JSON Schema */ } } } // typed JSON\n```\n\nThe response is asynchronous: `create` returns `status: \"queued\"`. Poll\n`POST /v1/ai-actions/get` until `status` is `succeeded`, `failed`, or\n`canceled`, or use `createAiAction` + `waitForAiAction` on\n`createHttpRemoteDrawApiClient` from `@remotedraw/client` (re-exported by\n`@remotedraw/react`) \u2014 backend only, it holds the key. There is no completion\nwebhook. See https://docs.remotedraw.com/docs/api#ai.\n\n## Verification\n\nAfter changes, verify against the customer's project \u2014 never assume RemoteDraw's\nown repo scripts exist here.\n\n```sh\nremotedraw doctor # config, SDK deps, REMOTEDRAW_* env\nremotedraw create-input --execute # open a real session, print the join URL\n```\n\nThen run whatever type check and test command the project already defines (for\nexample `npm run typecheck` and `npm test`). Do not invent script names, and do\nnot run `bun run test:api`, `bun run typecheck`, or `bun run ios:kit:test` \u2014\nthose are RemoteDraw's internal monorepo scripts and will not exist in a\ncustomer project.";
2
2
  //# sourceMappingURL=agent-skill.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"agent-skill.d.ts","sourceRoot":"","sources":["../../src/generated/agent-skill.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,oBAAoB,6nQAAomQ,CAAC"}
1
+ {"version":3,"file":"agent-skill.d.ts","sourceRoot":"","sources":["../../src/generated/agent-skill.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,oBAAoB,s1ZAAotZ,CAAC"}
@@ -1,4 +1,4 @@
1
1
  // GENERATED FILE — do not edit.
2
2
  // Source: docs/agents/remotedraw/SKILL.md
3
3
  // Regenerate: bun run --cwd packages/cli generate:skill
4
- export const AGENT_SKILL_MARKDOWN = "---\nname: remotedraw\ndescription: Add RemoteDraw phone input to customer apps with the RemoteDraw CLI, public API, React SDK, raw HTTP, or customer-owned iOS sender flow.\n---\n\n# RemoteDraw Agent Skill\n\nUse this skill when a user asks to create, initialize, debug, or review a RemoteDraw integration.\n\n## Decision Flow\n\n1. Identify the receiver surface: web app, desktop app, iOS app, or headless/backend workflow.\n2. Identify the sender surface: RemoteDraw iOS app, embedded web sender, customer-owned iOS sender, or raw/headless sender.\n3. Pick the SDK path:\n - React SDK: web receiver and optional embedded web sender.\n - Plain JavaScript/raw HTTP: non-React web, desktop, backend, or custom clients.\n - Swift: customer-owned iOS sender apps.\n4. Pick a supported starter: `signature` for a bounded signature-field target,\n or `sketch` for a free-form receiver surface — both render through the\n `RemoteDrawReceiver` foundation, with the surrounding UI owned by the\n integrating app. Configure the target kind and descriptor directly for\n photos, PDFs, maps, screens, and other custom surfaces.\n\n## Endpoint, Key, and Packages\n\nRemoteDraw is hosted. There is nothing for the customer to run or self-host.\n\n- API base URL: `https://api.remotedraw.com`\n- Public docs: `https://docs.remotedraw.com/docs`\n- API keys are created in the console at\n `https://dashboard.remotedraw.com/api/keys` and belong in `.env.local` as\n `REMOTEDRAW_API_KEY`, alongside\n `REMOTEDRAW_API_BASE_URL=https://api.remotedraw.com`.\n\nPublished npm packages — install only what the chosen path needs:\n\n| Package | Install | Use it for |\n| --- | --- | --- |\n| `@remotedraw/cli` | `npm install -g @remotedraw/cli` (or `npx @remotedraw/cli@latest`) | Scaffolding, doctor, and test sessions. |\n| `@remotedraw/react` | `npm install @remotedraw/react` | React receiver, pairing, and headless sender. Peers on `react`/`react-dom` >= 18. |\n| `@remotedraw/svelte` | `npm install @remotedraw/svelte` | Svelte receiver store over the framework-free client. |\n| `@remotedraw/client` | `npm install @remotedraw/client` | Framework-free receiver/sender/API clients for any JS runtime. |\n| `@remotedraw/protocol` | `npm install @remotedraw/protocol` | Shared schemas, types, and limits for raw-HTTP integrations. |\n| `@remotedraw/geometry` | `npm install @remotedraw/geometry` | Normalized stroke geometry, shape assist, hit testing, export. |\n\n`@remotedraw/react` already depends on `client`, `protocol`, and `geometry`, so\ndo not add those separately for a React app. There is no published Swift\npackage: `remotedraw init --sdk swift` writes one self-contained\n`RemoteDrawIntegration.swift` against the public HTTP routes.\n\n## CLI First\n\nRead the machine-readable option catalog before choosing a plan:\n\n```sh\nremotedraw options --format json\n```\n\nInitialize a project with the closest supported path:\n\n```sh\nremotedraw init --target web --sender remotedraw-ios --sdk react --preset signature\nremotedraw init --target web --sender embedded-web --sdk react --preset sketch\nremotedraw init --target desktop --sender remotedraw-ios --sdk js --preset sketch\nremotedraw init --target ios --sender own-ios --sdk swift --preset sketch\n```\n\nBy default, `new` and `init` create the dashboard project and a project-scoped\ndevelopment API key, then write `REMOTEDRAW_API_BASE_URL`,\n`REMOTEDRAW_PROJECT_ID`, and `REMOTEDRAW_API_KEY` to a gitignored `.env.local`.\nUse `--offline` only when cloud setup is intentionally out of scope.\n\n`--sender own-ios` requires `--sdk swift`; every other combination of\n`--target`, `--sender`, and `--sdk` is accepted. Invalid combinations fail with\n`INVALID_COMBINATION` rather than guessing.\n\nAgents must use explicit non-interactive dry runs before changing a project:\n\n```sh\nremotedraw init --non-interactive --offline --dry-run --format json --target web --sender remotedraw-ios --sdk react --preset signature --package-manager npm\n# Inspect plan, files, defaultsApplied, and warnings before applying.\nremotedraw init --non-interactive --offline --format json --target web --sender remotedraw-ios --sdk react --preset signature --package-manager npm\nremotedraw doctor --format json\nremotedraw create-input --preset signature --json\n```\n\nDo not use the interactive wizard, synthesize arrow-key input, or scrape\nhuman-formatted output. If receiver, sender, or preset intent is ambiguous, ask\nthe user instead of guessing. Never pass `--force` unless overwrite scope was\nexplicitly approved.\n\n## Security Rules\n\n- Keep `rd_sk_...` API keys in trusted backend secrets only.\n- Keep the account-level `rd_cli_...` credential in the user config directory; never copy it into a project. Use `REMOTEDRAW_CLI_TOKEN` only as an explicitly managed CI secret.\n- Never place API keys in browser bundles, mobile clients, screenshots, logs, or generated examples.\n- Public clients should receive only `joinUrl`, `joinToken`, `receiverToken`, or `senderToken` values scoped to the session.\n- Production QR codes should use HTTPS `joinUrl` values. Do not make the custom scheme the primary QR target.\n\n## API Contract\n\n- Backend creates sessions with `POST /v1/sessions`.\n- Receiver clients read `POST /v1/receiver/session`, `/drawings`, `/drafts`, and `/senders` with a receiver token.\n- Sender clients join with `POST /v1/join`, stream mutable drafts to `/v1/sender/draft`, commit durable strokes to `/v1/sender/commit`, and finish with `/v1/sender/submit`.\n- Custom senders should throttle draft updates, coalesce to the latest pending preview, and commit one durable stroke on pointer-up with a stable `clientStrokeId`.\n\n## AI Actions\n\nReach for AI when the product needs something _from_ the finished drawing:\na generated image, a description, or structured data to branch on. Backend only\n(`aiActions:*` scopes on an `rd_sk_...` key). Never wire it to a commit,\nsubmit, or presence event — AI runs only on an explicit `POST /v1/ai-actions`\ncall the user asked for. Run it after the user is done; the route accepts\n`active` and `ended` sessions.\n\nMinimal request per outcome (`POST /v1/ai-actions`, plus optional\n`quality: \"fast\" | \"balanced\" | \"max\"`, default `balanced`):\n\n```jsonc\n{ \"sessionId\": \"...\", \"request\": \"image\", \"prompt\": \"...\" } // image back in the response\n{ \"sessionId\": \"...\", \"request\": \"image\", \"prompt\": \"...\", \"deliver\": [\"result\", \"board\"] } // and onto the board\n{ \"sessionId\": \"...\", \"request\": \"text\", \"prompt\": \"Describe this drawing.\" } // text back\n{ \"sessionId\": \"...\", \"request\": \"text\", \"prompt\": \"...\", \"text\": { \"schema\": { /* JSON Schema */ } } } // typed JSON\n```\n\nThe response is asynchronous: `create` returns `status: \"queued\"`. Poll\n`POST /v1/ai-actions/get` until `status` is `succeeded`, `failed`, or\n`canceled`, or use the helper on the API client\n(`createHttpRemoteDrawApiClient` from `@remotedraw/client`, re-exported by\n`@remotedraw/react`). This client holds the `rd_sk_` key, so it only ever runs\non the backend:\n\n```ts\nconst action = await client.createAiAction({\n sessionId,\n request: \"image\",\n prompt,\n});\nconst finished = await client.waitForAiAction({ aiActionId: action.id });\n// finished.result: generatedImageUrl | generatedText | generatedData | boardDrawingIds\n```\n\nThere is no completion webhook. Results are RemoteDraw-hosted asset URLs, not\nprovider URLs. See https://docs.remotedraw.com/docs/api#ai for the full\nrequest, credit, and legacy-mapping tables.\n\n## Verification\n\nAfter changes, verify against the customer's project — never assume RemoteDraw's\nown repo scripts exist here.\n\n```sh\nremotedraw doctor # config, SDK deps, REMOTEDRAW_* env\nremotedraw create-input --execute # open a real session, print the join URL\n```\n\nThen run whatever type check and test command the project already defines (for\nexample `npm run typecheck` and `npm test`). Do not invent script names, and do\nnot run `bun run test:api`, `bun run typecheck`, or `bun run ios:kit:test` —\nthose are RemoteDraw's internal monorepo scripts and will not exist in a\ncustomer project.";
4
+ export const AGENT_SKILL_MARKDOWN = "---\nname: remotedraw\ndescription: Integrate RemoteDraw phone drawing into a customer's product — scan the codebase, ask the product questions, get approval before installing, then wire the receiver and the sender with the SDK's own components (React/Svelte/JS receiver, hosted web sender, RemoteDrawSenderKit full-screen iOS sender).\n---\n\n# RemoteDraw Agent Skill\n\nUse this skill when a user asks what RemoteDraw is, whether it fits their app,\nor to create, debug, or review a RemoteDraw integration.\n\n## What RemoteDraw is, in four sentences\n\nA phone becomes a pen for a screen. Your **backend** creates a **session** with\nan `rd_sk_` API key; your **receiver** (web, desktop, or any client) shows the\nsession's ink using a `rd_recv_` token; a **sender** (the hosted `/join` page\nthat any QR opens, the RemoteDraw iOS app, or your own iOS app through\n`RemoteDrawSenderKit`) draws with a `rd_send_` token. Strokes stream as drafts\nwhile the finger is down and commit on release; nothing runs on the customer's\ninfrastructure except the session-creation call.\n\n- API: `https://api.remotedraw.com` · Docs: `https://docs.remotedraw.com/docs`\n (agent summary: `https://docs.remotedraw.com/llms.txt`) · Keys:\n `https://dashboard.remotedraw.com/api/keys`\n- Packages: `@remotedraw/cli`, `@remotedraw/react`, `@remotedraw/svelte`,\n `@remotedraw/client`, `@remotedraw/protocol`, `@remotedraw/geometry`,\n and the SwiftPM package `https://github.com/AxioSOzo/remotedraw-swift.git`\n (product `RemoteDrawSenderKit`).\n\n## The flow — in this order\n\n1. **Explain before touching anything.** If the user is asking what RemoteDraw\n can do, answer from this file and the docs. Do not install, scaffold, or\n create sessions to answer a question.\n2. **Ask for approval before installing.** Name exactly what you want to add\n (`npm install -g @remotedraw/cli`, `@remotedraw/react`, a Swift package, a\n dashboard project + key) and why, then wait. This includes `remotedraw init`\n without `--offline`, which provisions a billable project and key.\n3. **Scan the codebase.** `remotedraw scan --format json` (or\n `npx @remotedraw/cli@latest scan --format json` before the CLI is installed)\n reports the web/server/iOS projects, where an `rd_sk_` key may live, any\n RemoteDraw wiring already present, the integration options that fit, and\n the product questions to ask. Read it; verify its `evidence` where it\n matters.\n4. **Ask the product questions.** They come back in the scan's `questions`\n array. The ones that decide the build: what is drawn on, which existing\n screen the receiver goes on, who holds the phone (signed-in user → direct\n sender, anyone → QR), what Submit does, and demo vs. real feature. Do not\n invent answers; a one-page \"drawing lab\" is only right when the user says a\n demo is what they want.\n5. **Propose one plan, then build all of it.** Receiver, session creation,\n sender, and the exit/submit path — an integration is not done when ink\n appears once on a test page. Build beside existing features; never delete\n or replace a host-app feature on your own initiative.\n6. **Verify by using it.** Run `remotedraw doctor --format json`, open a real\n session, draw from a phone (or `create-input --execute` + the hosted join\n URL), and confirm ink lands on the receiver. On iOS, run it on a device or\n simulator and look at the screen; a compiling canvas is not a working one.\n\n## Choosing the pieces\n\nReceiver (the screen that shows ink):\n\n| Host | Use | Not |\n| --- | --- | --- |\n| React / Next / Remix | `@remotedraw/react`: `RemoteDrawProvider`, `RemoteDrawReceiver`, `PairingCode`, `RemoteDrawSessionControls` | A hand-rolled SVG or polling loop |\n| Svelte / SvelteKit | `@remotedraw/svelte` receiver store | — |\n| Anything else with JS | `@remotedraw/client`: `createHttpReceiverClient`, `createRealtimeReceiverSource` | — |\n| No JS at all | Raw HTTP `POST /v1/receiver/*` with the receiver token | — |\n\nSender (the phone):\n\n| Situation | Use | Not |\n| --- | --- | --- |\n| No phone app in the product | **Hosted `/join` page.** Render `joinUrl` as a QR (`PairingCode`). Full-screen, polished, zero sender code; the RemoteDraw iOS app opens the same link. | An in-page web sender (`--sender embedded-web`) unless the user explicitly wants drawing inside their own web page |\n| The product has its own iOS app | **`RemoteDrawSenderKit`** full-screen surface (below). Backend mints `rd_send_` via `POST /v1/sessions/direct-sender` for a signed-in user; QR join stays as the fallback. | A custom canvas, a raw-HTTP Swift client, or `remotedraw init --sdk swift` when adding a SwiftPM dependency is possible |\n| Headless / tests | `POST /v1/join` → `/v1/sender/draft` → `/v1/sender/commit` | — |\n\nSession creation (`POST /v1/sessions`) needs the `rd_sk_` key and therefore\nruns only where the scan found server-side code: a Convex action, a Next route\nhandler, an Express/Hono route, a serverless function. If the scan found none,\nask where the backend is. Never scaffold `createRemoteDrawSession.ts` into a\nVite/Next client tree — `--target web` in `remotedraw init` still writes it\nunder `src/`; move it, or scaffold into a scratch directory and copy only what\nbelongs.\n\n## iOS: the bar\n\nThe reference is the RemoteDraw app's own drawing screen, and the SDK ships it.\n\n```swift\n// Package.swift / Xcode → Add Package\n.package(url: \"https://github.com/AxioSOzo/remotedraw-swift.git\", from: \"0.1.0\")\n.product(name: \"RemoteDrawSenderKit\", package: \"remotedraw-swift\")\n\nimport RemoteDrawSenderKit\n\n// Once, at app start.\nRemoteDraw.configure(.init(apiBaseURL: .production))\n\n// Wherever drawing starts. `token` is the rd_send_ string your backend\n// minted with POST /v1/sessions/direct-sender (a QR's rd_join_ works too).\nButton(\"Draw\") { drawing = true }\n .remoteDrawSurface(isPresented: $drawing, senderToken: token) { outcome in\n switch outcome {\n case .submitted(let receipt): record(receipt)\n case .left: break\n case .expired: refreshSession()\n case .failed(let error): report(error)\n }\n }\n```\n\nRules:\n\n- The drawing surface is **full screen**: `.remoteDrawSurface` (a\n `fullScreenCover`) or `RemoteDrawTakeover` inside your own cover or\n `UIHostingController`. A sheet is acceptable only if `RemoteDrawSurface`\n fills it edge to edge; the surface then owns the gestures and the sheet must\n not be draggable while drawing. There is no small-canvas option.\n- The user can always leave — the surface has its own exit; `RemoteDrawExit`\n only decides whether leaving with unsubmitted ink asks first — and the host\n gets an outcome. Submit, undo, clear, instruments, and paper are the SDK's.\n- Do not write a `UIViewRepresentable` canvas, a draft loop, or an HTTP client:\n cadence, point budgets, the packed-point codec, sequence healing, token\n refresh, and presence are protocol, and `RemoteDrawSenderSession` already\n implements them. If you must go headless, compose `RemoteDrawInkCanvas` +\n `RemoteDrawStrokeCapture` on that session — never raw `URLSession`.\n- `RemoteDraw.configure` is the only setup; the SDK needs no `Info.plist` keys.\n- Customers do not ship a separate RemoteDraw app; their app *is* the sender.\n\n## CLI\n\n```sh\nremotedraw options --format json # the option catalog\nremotedraw scan --format json # read the codebase first (step 3)\nremotedraw init --non-interactive --offline --dry-run --format json \\\n --path apps/web --target web --sender remotedraw-ios --sdk react --preset sketch --package-manager npm\nremotedraw doctor --format json\nremotedraw create-input --preset sketch --json\nremotedraw create-input --execute # a real session + join URL, needs a key\n```\n\n`--sender own-ios` requires `--sdk swift`; other invalid combinations fail with\n`INVALID_COMBINATION`. By default `init`/`new` also create a dashboard project\nand a project-scoped development key in `.env.local` — that is the step that\nneeds approval (step 2); `--offline` writes files only. Never pass `--force`\nunless the user approved overwriting. Do not drive the interactive wizard or\nscrape human-formatted output; every command has `--format json`.\n\n## Security and tenancy\n\n- `rd_sk_…` keys: backend secrets only. Never in browser bundles, Swift, app\n bundles, screenshots, logs, or generated examples.\n- The account-level `rd_cli_…` credential stays in the user config directory;\n never copy it into a project. `REMOTEDRAW_CLI_TOKEN` is for CI secrets only.\n- Public clients receive only `joinUrl`, `joinToken`, `receiverToken`, or\n `senderToken`, each scoped to one session. Production QR codes use the HTTPS\n `joinUrl`, not the custom scheme.\n- One key serves every customer of the product, so a session id is not a\n capability. Create sessions with `externalId: \"<product>:<tenant>\"`, and\n check it (`POST /v1/sessions/get`) before attaching a sender or ending a\n session on a tenant's behalf.\n\n## Gotchas the SDKs hide and hand-written code hits\n\n- `POST /v1/sessions` is billable and not idempotent. React StrictMode runs\n mount effects twice in development: guard with a ref, or create the session\n in a server action / loader. Store the `receiverToken` if the receiver\n outlives a page load — it is the only credential that reads a session's ink.\n- Timestamps are integer milliseconds. `occurredAt` and point `t` values are\n accepted with a fraction (floored) but a hand-written client should send\n integers.\n- Committed points come back in board space, remapped through\n `device.aspectRatio`; send the aspect ratio of the pad the finger touches.\n- `RemoteDrawReceiver` defaults `phones` and `pointers` to on. A connected\n phone that enters viewport mode is drawn on the board as a phone outline; pass\n `phones={false}` for a plain surface where that is not wanted.\n- `PairingCode` hides the join URL text unless `showLink`; pass it when a human\n needs the link without a camera.\n- `joinTokenExpiresAt` is earlier than the session's `expiresAt`: the QR dies\n first, the board stays live.\n\n## API contract\n\n- Backend: `POST /v1/sessions` (create), `/v1/sessions/get`, `/v1/sessions/end`,\n `/v1/sessions/direct-sender` (mint `rd_send_` for your own app),\n `/v1/sessions/join-token` (a fresh QR).\n- Receiver: `POST /v1/receiver/session`, `/drawings`, `/drafts`, `/senders`\n with the receiver token, or the realtime source in the SDKs.\n- Sender: `POST /v1/join` (spends a join token; revokes other senders), then\n `/v1/sender/draft` (latest-only preview, throttle to ~32 ms),\n `/v1/sender/commit` (one durable stroke per pointer-up with a stable\n `clientStrokeId`), `/v1/sender/submit`.\n\n## AI actions\n\nReach for AI when the product needs something _from_ the finished drawing:\na generated image, a description, or structured data to branch on. Backend only\n(`aiActions:*` scopes on an `rd_sk_...` key). Never wire it to a commit,\nsubmit, or presence event — AI runs only on an explicit `POST /v1/ai-actions`\ncall the user asked for. Run it after the user is done; the route accepts\n`active` and `ended` sessions.\n\nMinimal request per outcome (`POST /v1/ai-actions`, plus optional\n`quality: \"fast\" | \"balanced\" | \"max\"`, default `balanced`):\n\n```jsonc\n{ \"sessionId\": \"...\", \"request\": \"image\", \"prompt\": \"...\" } // image back in the response\n{ \"sessionId\": \"...\", \"request\": \"image\", \"prompt\": \"...\", \"deliver\": [\"result\", \"board\"] } // and onto the board\n{ \"sessionId\": \"...\", \"request\": \"text\", \"prompt\": \"Describe this drawing.\" } // text back\n{ \"sessionId\": \"...\", \"request\": \"text\", \"prompt\": \"...\", \"text\": { \"schema\": { /* JSON Schema */ } } } // typed JSON\n```\n\nThe response is asynchronous: `create` returns `status: \"queued\"`. Poll\n`POST /v1/ai-actions/get` until `status` is `succeeded`, `failed`, or\n`canceled`, or use `createAiAction` + `waitForAiAction` on\n`createHttpRemoteDrawApiClient` from `@remotedraw/client` (re-exported by\n`@remotedraw/react`) — backend only, it holds the key. There is no completion\nwebhook. See https://docs.remotedraw.com/docs/api#ai.\n\n## Verification\n\nAfter changes, verify against the customer's project — never assume RemoteDraw's\nown repo scripts exist here.\n\n```sh\nremotedraw doctor # config, SDK deps, REMOTEDRAW_* env\nremotedraw create-input --execute # open a real session, print the join URL\n```\n\nThen run whatever type check and test command the project already defines (for\nexample `npm run typecheck` and `npm test`). Do not invent script names, and do\nnot run `bun run test:api`, `bun run typecheck`, or `bun run ios:kit:test` —\nthose are RemoteDraw's internal monorepo scripts and will not exist in a\ncustomer project.";
@@ -12,7 +12,6 @@
12
12
  */
13
13
  export declare const en: {
14
14
  readonly "language.word": "Language";
15
- readonly "language.prompt.helper": "Sets the language of the RemoteDraw CLI. Generated code and files stay in English.";
16
15
  readonly "language.saved": "Language set to {language}. Change it any time with: remotedraw language";
17
16
  readonly "language.current": "Language: {language} ({locale})";
18
17
  readonly "language.source.flag": "Set for this run by --language.";
@@ -48,6 +47,24 @@ export declare const en: {
48
47
  readonly "help.command.createInput": "Create or print a test input request payload.";
49
48
  readonly "help.command.examples": "List or install example projects.";
50
49
  readonly "help.command.agent": "Print or install the RemoteDraw agent skill.";
50
+ readonly "help.command.scan": "Read a codebase and propose where RemoteDraw fits.";
51
+ readonly "help.command.project": "Create a dashboard project and API key without scaffolding.";
52
+ readonly "project.help.usage": " remotedraw project create --name <name> [--key-name <name>] [--env <dir>] [--format json]";
53
+ readonly "project.help.body": "Creates a dashboard project and a project-scoped development API key. Nothing is scaffolded; use it when the integration already has its files.";
54
+ readonly "project.help.env": "Pass --env <dir> to write REMOTEDRAW_API_BASE_URL, REMOTEDRAW_PROJECT_ID, and REMOTEDRAW_API_KEY into <dir>/.env.local instead of printing the key.";
55
+ readonly "project.help.auth": "Needs a signed-in CLI (remotedraw login) or REMOTEDRAW_CLI_TOKEN.";
56
+ readonly "project.error.unknownSubcommand": "Unknown project subcommand: {subcommand}. Expected create.";
57
+ readonly "project.error.nameRequired": "--name is required for project create.";
58
+ readonly "project.created": "Created project {name} ({id}).";
59
+ readonly "project.keyWritten": "Wrote the API key to {path}.";
60
+ readonly "project.keyOnce": "API key (shown once): {key}";
61
+ readonly "project.keyRule": "Keep rd_sk_... keys in backend secrets only; never in browser bundles, mobile apps, or source control.";
62
+ readonly "cloud.warning.clientTree": "src/remotedraw/createRemoteDrawSession.ts reads REMOTEDRAW_API_KEY and must run server-side. Move it to your API route, server action, Convex action, or serverless function before use; a browser bundle must never import it.";
63
+ readonly "scan.help.usage": " remotedraw scan [--path <dir>] [--format json]";
64
+ readonly "scan.help.body": "Detects web, server, and iOS projects, existing RemoteDraw wiring, and where an rd_sk_ key may live; then lists integration options and the product questions to ask the user before building.";
65
+ readonly "scan.help.privacy": "Reads manifests and file names only. Reports env variable names, never values.";
66
+ readonly "scan.help.json": "Pass --format json for the machine-readable report agents should read.";
67
+ readonly "scan.error.missingPath": "Path does not exist: {path}";
51
68
  readonly "help.startHere": "Start here:";
52
69
  readonly "guide.title": "RemoteDraw integration guide";
53
70
  readonly "guide.intro": "Choose the surface your customer already has:";
@@ -141,14 +158,6 @@ export declare const en: {
141
158
  readonly "choice.sdk.headless.summary": "Config only, without a UI package.";
142
159
  readonly "choice.sdk.headless.explanation": "Choose this when another language or a custom client calls the HTTP API. The wizard adds no framework dependency.";
143
160
  readonly "choice.sdk.headless.docs": "Open HTTP API docs";
144
- readonly "choice.preset.signature.label": "Signature strip";
145
- readonly "choice.preset.signature.hint": "Product-ready branded field with exact surface mapping.";
146
- readonly "choice.preset.signature.summary": "A bounded signature field with an exactly matching phone surface.";
147
- readonly "choice.preset.signature.explanation": "Choose this for a signature field you style yourself around RemoteDrawReceiver, with an exactly matching phone surface. You can adapt logo, text, color, and the surrounding form UI.";
148
- readonly "choice.preset.signature.docs": "Open signature docs";
149
- readonly "choice.preset.initials.summary": "A small drawing field for initials.";
150
- readonly "choice.preset.initials.explanation": "Use this when someone has to place short initials in one or more places, for example during document review.";
151
- readonly "choice.preset.initials.docs": "Open initials docs";
152
161
  readonly "choice.preset.approval.summary": "Free drawing input for a visual sign-off.";
153
162
  readonly "choice.preset.approval.explanation": "Use this for approvals where a check, initial, or short mark is enough and your workflow owns the status.";
154
163
  readonly "choice.preset.approval.docs": "Open approval docs";
@@ -166,6 +175,8 @@ export declare const en: {
166
175
  readonly "choice.preset.mapMarkup.summary": "Drawings and directions on a map.";
167
176
  readonly "choice.preset.mapMarkup.explanation": "Use this for routes, locations, or spatial feedback. Your app owns the map and viewport; RemoteDraw syncs the input.";
168
177
  readonly "choice.preset.mapMarkup.docs": "Open map markup docs";
178
+ readonly "choice.preset.screenMarkup.label": "Screen annotation";
179
+ readonly "choice.preset.screenMarkup.hint": "Mark up a screen or window your receiver shares.";
169
180
  readonly "choice.preset.screenMarkup.summary": "Annotations on a screen or application view.";
170
181
  readonly "choice.preset.screenMarkup.explanation": "Use this for support, demos, and UI feedback. Your receiver supplies the screen image the phone marks are projected onto.";
171
182
  readonly "choice.preset.screenMarkup.docs": "Open screen markup docs";
@@ -203,7 +214,6 @@ export declare const en: {
203
214
  readonly "wizard.control.back": "Esc back";
204
215
  readonly "wizard.control.quitCtrlC": "Ctrl+C quit";
205
216
  readonly "wizard.control.quitQ": "q quit";
206
- readonly "wizard.control.move": "↑/↓ move";
207
217
  readonly "wizard.control.steps": "←/→ steps";
208
218
  readonly "wizard.control.choose": "↑/↓ choose";
209
219
  readonly "wizard.control.docs": "d open docs";
@@ -221,7 +231,6 @@ export declare const en: {
221
231
  readonly "wizard.tagline.setup": "phone → canvas · project setup";
222
232
  readonly "wizard.tagline": "phone → canvas";
223
233
  readonly "wizard.docs.openFailed": "Could not open the documentation. Use {url}";
224
- readonly "wizard.docs.button": "[ {label} ↗ ]";
225
234
  readonly "new.help.usage.bare": " remotedraw new";
226
235
  readonly "new.help.usage.named": " remotedraw new --app-name <name> [options]";
227
236
  readonly "new.help.interactive": "Run without options for the interactive setup flow.";
@@ -229,7 +238,7 @@ export declare const en: {
229
238
  readonly "new.help.option.target": "web, desktop, ios, or headless.";
230
239
  readonly "new.help.option.sender": "remotedraw-ios, embedded-web, own-ios, or headless.";
231
240
  readonly "new.help.option.sdk": "react, svelte, js, swift, or headless.";
232
- readonly "new.help.option.preset": "signature or sketch. Legacy API presets remain accepted for existing integrations.";
241
+ readonly "new.help.option.preset": "sketch or screenMarkup. The other API presets remain accepted for existing integrations.";
233
242
  readonly "new.help.option.packageManager": "npm, pnpm, yarn, or bun.";
234
243
  readonly "new.help.option.apiBaseUrl": "Default API origin for generated config.";
235
244
  readonly "new.help.option.force": "Overwrite generated files and existing RemoteDraw .env.local values.";
@@ -289,7 +298,7 @@ export declare const en: {
289
298
  readonly "doctor.sdk.ok": "{package} is listed in package.json dependencies.";
290
299
  readonly "doctor.sdk.missing": "Add {package}@{range} to dependencies or rerun remotedraw init.";
291
300
  readonly "doctor.apiKey.ok": "Server-side API key shape looks correct.";
292
- readonly "doctor.apiKey.missing": "Keep an rd_sk_... key in backend secrets only.";
301
+ readonly "doctor.apiKey.missing": "No rd_sk_... key found in this project's environment (REMOTEDRAW_API_KEY). When you add one, keep it in backend secrets only.";
293
302
  readonly "doctor.label.deployment": "deployment";
294
303
  readonly "doctor.label.deploymentReachable": "deployment reachable";
295
304
  readonly "doctor.label.apiKeyAccepted": "API key accepted";
@@ -352,7 +361,7 @@ export declare const en: {
352
361
  readonly "createInput.error.noFetch": "This runtime cannot execute HTTP requests.";
353
362
  readonly "createInput.error.noKey": "create-input --execute requires --api-key or REMOTEDRAW_API_KEY with an rd_sk_... server key.";
354
363
  readonly "createInput.error.apiStatus": "RemoteDraw API returned {status}.";
355
- readonly "createInput.help.usage": " remotedraw create-input [--preset signature] [--json|--curl|--execute]";
364
+ readonly "createInput.help.usage": " remotedraw create-input [--preset sketch] [--json|--curl|--execute]";
356
365
  readonly "createInput.help.option.preset": "Session/input preset.";
357
366
  readonly "createInput.help.option.label": "Receiver target label.";
358
367
  readonly "createInput.help.option.externalId": "App-owned correlation id.";
@@ -1 +1 @@
1
- {"version":3,"file":"en.d.ts","sourceRoot":"","sources":["../../src/locales/en.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAolBL,CAAC"}
1
+ {"version":3,"file":"en.d.ts","sourceRoot":"","sources":["../../src/locales/en.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAylBL,CAAC"}
@@ -16,7 +16,6 @@ export const en = {
16
16
  // installed locale into its prompt, so the question reads no matter which
17
17
  // language the user speaks.
18
18
  "language.word": "Language",
19
- "language.prompt.helper": "Sets the language of the RemoteDraw CLI. Generated code and files stay in English.",
20
19
  "language.saved": "Language set to {language}. Change it any time with: remotedraw language",
21
20
  "language.current": "Language: {language} ({locale})",
22
21
  "language.source.flag": "Set for this run by --language.",
@@ -54,6 +53,24 @@ export const en = {
54
53
  "help.command.createInput": "Create or print a test input request payload.",
55
54
  "help.command.examples": "List or install example projects.",
56
55
  "help.command.agent": "Print or install the RemoteDraw agent skill.",
56
+ "help.command.scan": "Read a codebase and propose where RemoteDraw fits.",
57
+ "help.command.project": "Create a dashboard project and API key without scaffolding.",
58
+ "project.help.usage": " remotedraw project create --name <name> [--key-name <name>] [--env <dir>] [--format json]",
59
+ "project.help.body": "Creates a dashboard project and a project-scoped development API key. Nothing is scaffolded; use it when the integration already has its files.",
60
+ "project.help.env": "Pass --env <dir> to write REMOTEDRAW_API_BASE_URL, REMOTEDRAW_PROJECT_ID, and REMOTEDRAW_API_KEY into <dir>/.env.local instead of printing the key.",
61
+ "project.help.auth": "Needs a signed-in CLI (remotedraw login) or REMOTEDRAW_CLI_TOKEN.",
62
+ "project.error.unknownSubcommand": "Unknown project subcommand: {subcommand}. Expected create.",
63
+ "project.error.nameRequired": "--name is required for project create.",
64
+ "project.created": "Created project {name} ({id}).",
65
+ "project.keyWritten": "Wrote the API key to {path}.",
66
+ "project.keyOnce": "API key (shown once): {key}",
67
+ "project.keyRule": "Keep rd_sk_... keys in backend secrets only; never in browser bundles, mobile apps, or source control.",
68
+ "cloud.warning.clientTree": "src/remotedraw/createRemoteDrawSession.ts reads REMOTEDRAW_API_KEY and must run server-side. Move it to your API route, server action, Convex action, or serverless function before use; a browser bundle must never import it.",
69
+ "scan.help.usage": " remotedraw scan [--path <dir>] [--format json]",
70
+ "scan.help.body": "Detects web, server, and iOS projects, existing RemoteDraw wiring, and where an rd_sk_ key may live; then lists integration options and the product questions to ask the user before building.",
71
+ "scan.help.privacy": "Reads manifests and file names only. Reports env variable names, never values.",
72
+ "scan.help.json": "Pass --format json for the machine-readable report agents should read.",
73
+ "scan.error.missingPath": "Path does not exist: {path}",
57
74
  "help.startHere": "Start here:",
58
75
  // ── guide ─────────────────────────────────────────────────────────────
59
76
  "guide.title": "RemoteDraw integration guide",
@@ -154,14 +171,6 @@ export const en = {
154
171
  "choice.sdk.headless.explanation": "Choose this when another language or a custom client calls the HTTP API. The wizard adds no framework dependency.",
155
172
  "choice.sdk.headless.docs": "Open HTTP API docs",
156
173
  // ── Preset choices ────────────────────────────────────────────────────
157
- "choice.preset.signature.label": "Signature strip",
158
- "choice.preset.signature.hint": "Product-ready branded field with exact surface mapping.",
159
- "choice.preset.signature.summary": "A bounded signature field with an exactly matching phone surface.",
160
- "choice.preset.signature.explanation": "Choose this for a signature field you style yourself around RemoteDrawReceiver, with an exactly matching phone surface. You can adapt logo, text, color, and the surrounding form UI.",
161
- "choice.preset.signature.docs": "Open signature docs",
162
- "choice.preset.initials.summary": "A small drawing field for initials.",
163
- "choice.preset.initials.explanation": "Use this when someone has to place short initials in one or more places, for example during document review.",
164
- "choice.preset.initials.docs": "Open initials docs",
165
174
  "choice.preset.approval.summary": "Free drawing input for a visual sign-off.",
166
175
  "choice.preset.approval.explanation": "Use this for approvals where a check, initial, or short mark is enough and your workflow owns the status.",
167
176
  "choice.preset.approval.docs": "Open approval docs",
@@ -179,6 +188,8 @@ export const en = {
179
188
  "choice.preset.mapMarkup.summary": "Drawings and directions on a map.",
180
189
  "choice.preset.mapMarkup.explanation": "Use this for routes, locations, or spatial feedback. Your app owns the map and viewport; RemoteDraw syncs the input.",
181
190
  "choice.preset.mapMarkup.docs": "Open map markup docs",
191
+ "choice.preset.screenMarkup.label": "Screen annotation",
192
+ "choice.preset.screenMarkup.hint": "Mark up a screen or window your receiver shares.",
182
193
  "choice.preset.screenMarkup.summary": "Annotations on a screen or application view.",
183
194
  "choice.preset.screenMarkup.explanation": "Use this for support, demos, and UI feedback. Your receiver supplies the screen image the phone marks are projected onto.",
184
195
  "choice.preset.screenMarkup.docs": "Open screen markup docs",
@@ -218,7 +229,6 @@ export const en = {
218
229
  "wizard.control.back": "Esc back",
219
230
  "wizard.control.quitCtrlC": "Ctrl+C quit",
220
231
  "wizard.control.quitQ": "q quit",
221
- "wizard.control.move": "↑/↓ move",
222
232
  "wizard.control.steps": "←/→ steps",
223
233
  "wizard.control.choose": "↑/↓ choose",
224
234
  "wizard.control.docs": "d open docs",
@@ -236,7 +246,6 @@ export const en = {
236
246
  "wizard.tagline.setup": "phone → canvas · project setup",
237
247
  "wizard.tagline": "phone → canvas",
238
248
  "wizard.docs.openFailed": "Could not open the documentation. Use {url}",
239
- "wizard.docs.button": "[ {label} ↗ ]",
240
249
  // ── new / init ────────────────────────────────────────────────────────
241
250
  "new.help.usage.bare": " remotedraw new",
242
251
  "new.help.usage.named": " remotedraw new --app-name <name> [options]",
@@ -245,7 +254,7 @@ export const en = {
245
254
  "new.help.option.target": "web, desktop, ios, or headless.",
246
255
  "new.help.option.sender": "remotedraw-ios, embedded-web, own-ios, or headless.",
247
256
  "new.help.option.sdk": "react, svelte, js, swift, or headless.",
248
- "new.help.option.preset": "signature or sketch. Legacy API presets remain accepted for existing integrations.",
257
+ "new.help.option.preset": "sketch or screenMarkup. The other API presets remain accepted for existing integrations.",
249
258
  "new.help.option.packageManager": "npm, pnpm, yarn, or bun.",
250
259
  "new.help.option.apiBaseUrl": "Default API origin for generated config.",
251
260
  "new.help.option.force": "Overwrite generated files and existing RemoteDraw .env.local values.",
@@ -308,7 +317,7 @@ export const en = {
308
317
  "doctor.sdk.ok": "{package} is listed in package.json dependencies.",
309
318
  "doctor.sdk.missing": "Add {package}@{range} to dependencies or rerun remotedraw init.",
310
319
  "doctor.apiKey.ok": "Server-side API key shape looks correct.",
311
- "doctor.apiKey.missing": "Keep an rd_sk_... key in backend secrets only.",
320
+ "doctor.apiKey.missing": "No rd_sk_... key found in this project's environment (REMOTEDRAW_API_KEY). When you add one, keep it in backend secrets only.",
312
321
  "doctor.label.deployment": "deployment",
313
322
  "doctor.label.deploymentReachable": "deployment reachable",
314
323
  "doctor.label.apiKeyAccepted": "API key accepted",
@@ -374,7 +383,7 @@ export const en = {
374
383
  "createInput.error.noFetch": "This runtime cannot execute HTTP requests.",
375
384
  "createInput.error.noKey": "create-input --execute requires --api-key or REMOTEDRAW_API_KEY with an rd_sk_... server key.",
376
385
  "createInput.error.apiStatus": "RemoteDraw API returned {status}.",
377
- "createInput.help.usage": " remotedraw create-input [--preset signature] [--json|--curl|--execute]",
386
+ "createInput.help.usage": " remotedraw create-input [--preset sketch] [--json|--curl|--execute]",
378
387
  "createInput.help.option.preset": "Session/input preset.",
379
388
  "createInput.help.option.label": "Receiver target label.",
380
389
  "createInput.help.option.externalId": "App-owned correlation id.",
@@ -15,7 +15,6 @@ export declare const LOCALES: {
15
15
  aliases: string[];
16
16
  catalog: {
17
17
  readonly "language.word": "Language";
18
- readonly "language.prompt.helper": "Sets the language of the RemoteDraw CLI. Generated code and files stay in English.";
19
18
  readonly "language.saved": "Language set to {language}. Change it any time with: remotedraw language";
20
19
  readonly "language.current": "Language: {language} ({locale})";
21
20
  readonly "language.source.flag": "Set for this run by --language.";
@@ -51,6 +50,24 @@ export declare const LOCALES: {
51
50
  readonly "help.command.createInput": "Create or print a test input request payload.";
52
51
  readonly "help.command.examples": "List or install example projects.";
53
52
  readonly "help.command.agent": "Print or install the RemoteDraw agent skill.";
53
+ readonly "help.command.scan": "Read a codebase and propose where RemoteDraw fits.";
54
+ readonly "help.command.project": "Create a dashboard project and API key without scaffolding.";
55
+ readonly "project.help.usage": " remotedraw project create --name <name> [--key-name <name>] [--env <dir>] [--format json]";
56
+ readonly "project.help.body": "Creates a dashboard project and a project-scoped development API key. Nothing is scaffolded; use it when the integration already has its files.";
57
+ readonly "project.help.env": "Pass --env <dir> to write REMOTEDRAW_API_BASE_URL, REMOTEDRAW_PROJECT_ID, and REMOTEDRAW_API_KEY into <dir>/.env.local instead of printing the key.";
58
+ readonly "project.help.auth": "Needs a signed-in CLI (remotedraw login) or REMOTEDRAW_CLI_TOKEN.";
59
+ readonly "project.error.unknownSubcommand": "Unknown project subcommand: {subcommand}. Expected create.";
60
+ readonly "project.error.nameRequired": "--name is required for project create.";
61
+ readonly "project.created": "Created project {name} ({id}).";
62
+ readonly "project.keyWritten": "Wrote the API key to {path}.";
63
+ readonly "project.keyOnce": "API key (shown once): {key}";
64
+ readonly "project.keyRule": "Keep rd_sk_... keys in backend secrets only; never in browser bundles, mobile apps, or source control.";
65
+ readonly "cloud.warning.clientTree": "src/remotedraw/createRemoteDrawSession.ts reads REMOTEDRAW_API_KEY and must run server-side. Move it to your API route, server action, Convex action, or serverless function before use; a browser bundle must never import it.";
66
+ readonly "scan.help.usage": " remotedraw scan [--path <dir>] [--format json]";
67
+ readonly "scan.help.body": "Detects web, server, and iOS projects, existing RemoteDraw wiring, and where an rd_sk_ key may live; then lists integration options and the product questions to ask the user before building.";
68
+ readonly "scan.help.privacy": "Reads manifests and file names only. Reports env variable names, never values.";
69
+ readonly "scan.help.json": "Pass --format json for the machine-readable report agents should read.";
70
+ readonly "scan.error.missingPath": "Path does not exist: {path}";
54
71
  readonly "help.startHere": "Start here:";
55
72
  readonly "guide.title": "RemoteDraw integration guide";
56
73
  readonly "guide.intro": "Choose the surface your customer already has:";
@@ -144,14 +161,6 @@ export declare const LOCALES: {
144
161
  readonly "choice.sdk.headless.summary": "Config only, without a UI package.";
145
162
  readonly "choice.sdk.headless.explanation": "Choose this when another language or a custom client calls the HTTP API. The wizard adds no framework dependency.";
146
163
  readonly "choice.sdk.headless.docs": "Open HTTP API docs";
147
- readonly "choice.preset.signature.label": "Signature strip";
148
- readonly "choice.preset.signature.hint": "Product-ready branded field with exact surface mapping.";
149
- readonly "choice.preset.signature.summary": "A bounded signature field with an exactly matching phone surface.";
150
- readonly "choice.preset.signature.explanation": "Choose this for a signature field you style yourself around RemoteDrawReceiver, with an exactly matching phone surface. You can adapt logo, text, color, and the surrounding form UI.";
151
- readonly "choice.preset.signature.docs": "Open signature docs";
152
- readonly "choice.preset.initials.summary": "A small drawing field for initials.";
153
- readonly "choice.preset.initials.explanation": "Use this when someone has to place short initials in one or more places, for example during document review.";
154
- readonly "choice.preset.initials.docs": "Open initials docs";
155
164
  readonly "choice.preset.approval.summary": "Free drawing input for a visual sign-off.";
156
165
  readonly "choice.preset.approval.explanation": "Use this for approvals where a check, initial, or short mark is enough and your workflow owns the status.";
157
166
  readonly "choice.preset.approval.docs": "Open approval docs";
@@ -169,6 +178,8 @@ export declare const LOCALES: {
169
178
  readonly "choice.preset.mapMarkup.summary": "Drawings and directions on a map.";
170
179
  readonly "choice.preset.mapMarkup.explanation": "Use this for routes, locations, or spatial feedback. Your app owns the map and viewport; RemoteDraw syncs the input.";
171
180
  readonly "choice.preset.mapMarkup.docs": "Open map markup docs";
181
+ readonly "choice.preset.screenMarkup.label": "Screen annotation";
182
+ readonly "choice.preset.screenMarkup.hint": "Mark up a screen or window your receiver shares.";
172
183
  readonly "choice.preset.screenMarkup.summary": "Annotations on a screen or application view.";
173
184
  readonly "choice.preset.screenMarkup.explanation": "Use this for support, demos, and UI feedback. Your receiver supplies the screen image the phone marks are projected onto.";
174
185
  readonly "choice.preset.screenMarkup.docs": "Open screen markup docs";
@@ -206,7 +217,6 @@ export declare const LOCALES: {
206
217
  readonly "wizard.control.back": "Esc back";
207
218
  readonly "wizard.control.quitCtrlC": "Ctrl+C quit";
208
219
  readonly "wizard.control.quitQ": "q quit";
209
- readonly "wizard.control.move": "↑/↓ move";
210
220
  readonly "wizard.control.steps": "←/→ steps";
211
221
  readonly "wizard.control.choose": "↑/↓ choose";
212
222
  readonly "wizard.control.docs": "d open docs";
@@ -224,7 +234,6 @@ export declare const LOCALES: {
224
234
  readonly "wizard.tagline.setup": "phone → canvas · project setup";
225
235
  readonly "wizard.tagline": "phone → canvas";
226
236
  readonly "wizard.docs.openFailed": "Could not open the documentation. Use {url}";
227
- readonly "wizard.docs.button": "[ {label} ↗ ]";
228
237
  readonly "new.help.usage.bare": " remotedraw new";
229
238
  readonly "new.help.usage.named": " remotedraw new --app-name <name> [options]";
230
239
  readonly "new.help.interactive": "Run without options for the interactive setup flow.";
@@ -232,7 +241,7 @@ export declare const LOCALES: {
232
241
  readonly "new.help.option.target": "web, desktop, ios, or headless.";
233
242
  readonly "new.help.option.sender": "remotedraw-ios, embedded-web, own-ios, or headless.";
234
243
  readonly "new.help.option.sdk": "react, svelte, js, swift, or headless.";
235
- readonly "new.help.option.preset": "signature or sketch. Legacy API presets remain accepted for existing integrations.";
244
+ readonly "new.help.option.preset": "sketch or screenMarkup. The other API presets remain accepted for existing integrations.";
236
245
  readonly "new.help.option.packageManager": "npm, pnpm, yarn, or bun.";
237
246
  readonly "new.help.option.apiBaseUrl": "Default API origin for generated config.";
238
247
  readonly "new.help.option.force": "Overwrite generated files and existing RemoteDraw .env.local values.";
@@ -292,7 +301,7 @@ export declare const LOCALES: {
292
301
  readonly "doctor.sdk.ok": "{package} is listed in package.json dependencies.";
293
302
  readonly "doctor.sdk.missing": "Add {package}@{range} to dependencies or rerun remotedraw init.";
294
303
  readonly "doctor.apiKey.ok": "Server-side API key shape looks correct.";
295
- readonly "doctor.apiKey.missing": "Keep an rd_sk_... key in backend secrets only.";
304
+ readonly "doctor.apiKey.missing": "No rd_sk_... key found in this project's environment (REMOTEDRAW_API_KEY). When you add one, keep it in backend secrets only.";
296
305
  readonly "doctor.label.deployment": "deployment";
297
306
  readonly "doctor.label.deploymentReachable": "deployment reachable";
298
307
  readonly "doctor.label.apiKeyAccepted": "API key accepted";
@@ -355,7 +364,7 @@ export declare const LOCALES: {
355
364
  readonly "createInput.error.noFetch": "This runtime cannot execute HTTP requests.";
356
365
  readonly "createInput.error.noKey": "create-input --execute requires --api-key or REMOTEDRAW_API_KEY with an rd_sk_... server key.";
357
366
  readonly "createInput.error.apiStatus": "RemoteDraw API returned {status}.";
358
- readonly "createInput.help.usage": " remotedraw create-input [--preset signature] [--json|--curl|--execute]";
367
+ readonly "createInput.help.usage": " remotedraw create-input [--preset sketch] [--json|--curl|--execute]";
359
368
  readonly "createInput.help.option.preset": "Session/input preset.";
360
369
  readonly "createInput.help.option.label": "Receiver target label.";
361
370
  readonly "createInput.help.option.externalId": "App-owned correlation id.";
@@ -425,7 +434,7 @@ export declare const LOCALES: {
425
434
  endonym: string;
426
435
  tags: string[];
427
436
  aliases: string[];
428
- catalog: Partial<Record<"language.word" | "language.prompt.helper" | "language.saved" | "language.current" | "language.source.flag" | "language.source.env" | "language.source.config" | "language.source.default" | "language.available" | "language.unknown" | "language.saveFailed" | "language.help.title" | "language.help.usage.list" | "language.help.usage.set" | "language.help.body" | "language.help.override" | "word.usage" | "word.options" | "word.commands" | "word.next" | "word.examples" | "help.title" | "help.usage.main" | "help.command.guide" | "help.command.options" | "help.command.language" | "help.command.login" | "help.command.logout" | "help.command.whoami" | "help.command.new" | "help.command.init" | "help.command.dev" | "help.command.doctor" | "help.command.update" | "help.command.createInput" | "help.command.examples" | "help.command.agent" | "help.startHere" | "guide.title" | "guide.intro" | "guide.path.webIos" | "guide.path.webOwned" | "guide.path.svelteIos" | "guide.path.desktop" | "guide.path.ownIos" | "guide.note.keys" | "guide.note.provisioning" | "guide.note.offline" | "options.title" | "options.machineReadable" | "options.help.body" | "field.appName" | "field.target" | "field.sender" | "field.sdk" | "field.preset" | "field.packageManager" | "field.apiBaseUrl" | "field.project" | "field.folder" | "field.sdkShort" | "field.sender.helper" | "field.sdk.helper" | "field.appName.error" | "field.appName.preview" | "choice.target.web.label" | "choice.target.web.summary" | "choice.target.web.explanation" | "choice.target.web.docs" | "choice.target.desktop.label" | "choice.target.desktop.summary" | "choice.target.desktop.explanation" | "choice.target.desktop.docs" | "choice.target.ios.label" | "choice.target.ios.summary" | "choice.target.ios.explanation" | "choice.target.ios.docs" | "choice.target.headless.label" | "choice.target.headless.summary" | "choice.target.headless.explanation" | "choice.target.headless.docs" | "choice.sender.remotedrawIos.label" | "choice.sender.remotedrawIos.hint.scan" | "choice.sender.remotedrawIos.hint.joinUrl" | "choice.sender.remotedrawIos.summary" | "choice.sender.remotedrawIos.explanation" | "choice.sender.remotedrawIos.docs" | "choice.sender.embeddedWeb.label" | "choice.sender.embeddedWeb.hint" | "choice.sender.embeddedWeb.summary" | "choice.sender.embeddedWeb.explanation" | "choice.sender.embeddedWeb.docs" | "choice.sender.ownIos.label" | "choice.sender.ownIos.hint" | "choice.sender.ownIos.summary" | "choice.sender.ownIos.explanation" | "choice.sender.ownIos.docs" | "choice.sender.headless.label" | "choice.sender.headless.hint.noUi" | "choice.sender.headless.hint.httpRoutes" | "choice.sender.headless.summary" | "choice.sender.headless.explanation" | "choice.sender.headless.docs" | "choice.sdk.react.label" | "choice.sdk.react.hint" | "choice.sdk.react.summary" | "choice.sdk.react.explanation" | "choice.sdk.react.docs" | "choice.sdk.svelte.label" | "choice.sdk.svelte.hint" | "choice.sdk.svelte.summary" | "choice.sdk.svelte.explanation" | "choice.sdk.svelte.docs" | "choice.sdk.js.label.client" | "choice.sdk.js.label.noFramework" | "choice.sdk.js.hint.client" | "choice.sdk.js.hint.noFramework" | "choice.sdk.js.summary" | "choice.sdk.js.explanation" | "choice.sdk.js.docs" | "choice.sdk.swift.label" | "choice.sdk.swift.hint" | "choice.sdk.swift.summary" | "choice.sdk.swift.explanation" | "choice.sdk.swift.docs" | "choice.sdk.headless.label" | "choice.sdk.headless.hint" | "choice.sdk.headless.summary" | "choice.sdk.headless.explanation" | "choice.sdk.headless.docs" | "choice.preset.signature.label" | "choice.preset.signature.hint" | "choice.preset.signature.summary" | "choice.preset.signature.explanation" | "choice.preset.signature.docs" | "choice.preset.initials.summary" | "choice.preset.initials.explanation" | "choice.preset.initials.docs" | "choice.preset.approval.summary" | "choice.preset.approval.explanation" | "choice.preset.approval.docs" | "choice.preset.sketch.label" | "choice.preset.sketch.hint" | "choice.preset.sketch.summary" | "choice.preset.sketch.explanation" | "choice.preset.sketch.docs" | "choice.preset.photoMarkup.summary" | "choice.preset.photoMarkup.explanation" | "choice.preset.photoMarkup.docs" | "choice.preset.pdfMarkup.summary" | "choice.preset.pdfMarkup.explanation" | "choice.preset.pdfMarkup.docs" | "choice.preset.mapMarkup.summary" | "choice.preset.mapMarkup.explanation" | "choice.preset.mapMarkup.docs" | "choice.preset.screenMarkup.summary" | "choice.preset.screenMarkup.explanation" | "choice.preset.screenMarkup.docs" | "choice.preset.designReview.summary" | "choice.preset.designReview.explanation" | "choice.preset.designReview.docs" | "choice.preset.pointer.summary" | "choice.preset.pointer.explanation" | "choice.preset.pointer.docs" | "choice.packageManager.npm.summary" | "choice.packageManager.npm.explanation" | "choice.packageManager.npm.docs" | "choice.packageManager.pnpm.summary" | "choice.packageManager.pnpm.explanation" | "choice.packageManager.pnpm.docs" | "choice.packageManager.yarn.summary" | "choice.packageManager.yarn.explanation" | "choice.packageManager.yarn.docs" | "choice.packageManager.bun.summary" | "choice.packageManager.bun.explanation" | "choice.packageManager.bun.docs" | "wizard.title.setup" | "wizard.title.review" | "wizard.title.confirm" | "wizard.title.executing" | "wizard.title.success" | "wizard.title.error" | "wizard.title.interrupted" | "wizard.title.cancelled" | "wizard.confirm.no" | "wizard.confirm.yes" | "wizard.hint.replaceDefault" | "wizard.hint.edit" | "wizard.control.next" | "wizard.control.back" | "wizard.control.quitCtrlC" | "wizard.control.quitQ" | "wizard.control.move" | "wizard.control.steps" | "wizard.control.choose" | "wizard.control.docs" | "wizard.control.forward" | "wizard.control.backArrow" | "wizard.control.confirm" | "wizard.progress.step" | "wizard.card.help" | "wizard.card.summary" | "wizard.value.default" | "wizard.executing.detail" | "wizard.created.at" | "wizard.next.command" | "wizard.docs.line" | "wizard.tagline.setup" | "wizard.tagline" | "wizard.docs.openFailed" | "wizard.docs.button" | "new.help.usage.bare" | "new.help.usage.named" | "new.help.interactive" | "new.help.option.path" | "new.help.option.target" | "new.help.option.sender" | "new.help.option.sdk" | "new.help.option.preset" | "new.help.option.packageManager" | "new.help.option.apiBaseUrl" | "new.help.option.force" | "new.help.option.offline" | "new.help.option.nonInteractive" | "new.help.option.format" | "new.help.option.dryRun" | "new.help.option.language" | "init.help.usage" | "init.help.body" | "prompt.control.move" | "prompt.control.select" | "prompt.control.quit" | "prompt.intro.setup" | "scaffold.verb.created" | "scaffold.verb.initialized" | "scaffold.verb.installedExample" | "scaffold.headline" | "scaffold.choices" | "scaffold.choice.app" | "scaffold.choice.sdk" | "scaffold.choice.sender" | "scaffold.choice.starter" | "scaffold.wrote" | "scaffold.wouldWrite" | "scaffold.next.install" | "scaffold.next.secrets" | "scaffold.next.createInput" | "scaffold.next.render" | "cloud.skipped" | "cloud.dashboardProject" | "cloud.devKey" | "cloud.projectId" | "cloud.warning.placeholder" | "cloud.warning.offline" | "cloud.warning.dryRun" | "login.already" | "login.complete" | "login.credential" | "login.help.title" | "login.help.usage" | "login.help.body" | "logout.done" | "logout.none" | "logout.help.title" | "logout.help.usage" | "whoami.notLoggedIn" | "whoami.api" | "whoami.anonymous" | "whoami.help.title" | "whoami.help.usage" | "doctor.title" | "doctor.config.ok" | "doctor.config.missing" | "doctor.package.ok" | "doctor.package.missing" | "doctor.sdk.ok" | "doctor.sdk.missing" | "doctor.apiKey.ok" | "doctor.apiKey.missing" | "doctor.label.deployment" | "doctor.label.deploymentReachable" | "doctor.label.apiKeyAccepted" | "doctor.label.cliVersion" | "doctor.network.offline" | "doctor.network.noOrigin" | "doctor.health.ok" | "doctor.health.failed" | "doctor.key.skippedNoKey" | "doctor.key.skippedNoHealth" | "doctor.key.liveOne" | "doctor.key.liveMany" | "doctor.version.offline" | "doctor.version.unknown" | "doctor.version.stale" | "doctor.version.latest" | "doctor.probe.noNetwork" | "doctor.probe.noNetworkKey" | "doctor.probe.nonJson" | "doctor.probe.rejected" | "doctor.baseUrl.placeholder" | "doctor.baseUrl.invalid" | "doctor.baseUrl.default" | "doctor.baseUrl.production" | "doctor.baseUrl.override" | "doctor.baseUrl.origin.flag" | "doctor.baseUrl.origin.project" | "doctor.help.usage" | "doctor.help.checks" | "doctor.help.baseUrl" | "doctor.help.network" | "doctor.help.version" | "doctor.help.offline" | "update.unreachable" | "update.alreadyLatest" | "update.available" | "update.ephemeral" | "update.runToInstall" | "update.availableRun" | "update.failed" | "update.done" | "update.help.usage" | "update.help.body" | "update.help.global" | "update.help.check" | "update.help.silence" | "dev.title" | "dev.apiBaseUrl" | "dev.hosted" | "dev.step1" | "dev.step1.detail" | "dev.step2" | "dev.step3" | "dev.step3.detail" | "dev.help.usage" | "dev.help.body" | "createInput.title" | "createInput.warning" | "createInput.footer" | "createInput.error.noFetch" | "createInput.error.noKey" | "createInput.error.apiStatus" | "createInput.help.usage" | "createInput.help.option.preset" | "createInput.help.option.label" | "createInput.help.option.externalId" | "createInput.help.option.apiBaseUrl" | "createInput.help.option.apiKey" | "createInput.help.option.expiresInMs" | "examples.title" | "examples.reactIos" | "examples.reactOwnedSender" | "examples.rawHttp" | "examples.iosOwnedSender" | "examples.installOne" | "examples.help.usage.list" | "examples.help.usage.install" | "agent.title" | "agent.intro" | "agent.printSkill" | "agent.installSkill" | "agent.wouldWrite" | "agent.installed" | "agent.next" | "agent.error.exists" | "agent.help.usage.bare" | "agent.help.usage.print" | "agent.help.usage.install" | "agent.help.paths" | "agent.help.body" | "cloud.authorize" | "cloud.browserOpened" | "cloud.browserFailed" | "cloud.error.notLoggedIn" | "cloud.error.authStatus" | "cloud.error.authExpired" | "cloud.error.noFetch" | "cloud.error.unreachable" | "cloud.error.endpointMissing" | "cloud.error.invalidResponse" | "cloud.error.requestFailed" | "cloud.error.badOrigin" | "cloud.error.configUnreadable" | "cloud.error.envConflict" | "notice.update.available" | "notice.update.ephemeral" | "notice.update.install" | "error.appNameRequired" | "error.plan.ownIosNeedsSwift" | "error.plan.swiftNeedsOwnIos" | "error.plan.iosNeedsOwnIos" | "error.plan.headlessSenderSdk" | "error.unknownChoice" | "error.refuseOverwrite" | "error.expectedHttpOrigin" | "error.expectedBareOrigin" | "error.noHome" | "error.unknownCommand" | "error.unsupportedOption" | "error.optionNoValue" | "error.optionNeedsValue" | "error.expiresInMs" | "error.interactiveNeedsTty" | "error.noChoices" | "error.httpsDocsOnly" | "error.httpUrlsOnly", string>>;
437
+ catalog: Partial<Record<"language.word" | "language.saved" | "language.current" | "language.source.flag" | "language.source.env" | "language.source.config" | "language.source.default" | "language.available" | "language.unknown" | "language.saveFailed" | "language.help.title" | "language.help.usage.list" | "language.help.usage.set" | "language.help.body" | "language.help.override" | "word.usage" | "word.options" | "word.commands" | "word.next" | "word.examples" | "help.title" | "help.usage.main" | "help.command.guide" | "help.command.options" | "help.command.language" | "help.command.login" | "help.command.logout" | "help.command.whoami" | "help.command.new" | "help.command.init" | "help.command.dev" | "help.command.doctor" | "help.command.update" | "help.command.createInput" | "help.command.examples" | "help.command.agent" | "help.command.scan" | "help.command.project" | "project.help.usage" | "project.help.body" | "project.help.env" | "project.help.auth" | "project.error.unknownSubcommand" | "project.error.nameRequired" | "project.created" | "project.keyWritten" | "project.keyOnce" | "project.keyRule" | "cloud.warning.clientTree" | "scan.help.usage" | "scan.help.body" | "scan.help.privacy" | "scan.help.json" | "scan.error.missingPath" | "help.startHere" | "guide.title" | "guide.intro" | "guide.path.webIos" | "guide.path.webOwned" | "guide.path.svelteIos" | "guide.path.desktop" | "guide.path.ownIos" | "guide.note.keys" | "guide.note.provisioning" | "guide.note.offline" | "options.title" | "options.machineReadable" | "options.help.body" | "field.appName" | "field.target" | "field.sender" | "field.sdk" | "field.preset" | "field.packageManager" | "field.apiBaseUrl" | "field.project" | "field.folder" | "field.sdkShort" | "field.sender.helper" | "field.sdk.helper" | "field.appName.error" | "field.appName.preview" | "choice.target.web.label" | "choice.target.web.summary" | "choice.target.web.explanation" | "choice.target.web.docs" | "choice.target.desktop.label" | "choice.target.desktop.summary" | "choice.target.desktop.explanation" | "choice.target.desktop.docs" | "choice.target.ios.label" | "choice.target.ios.summary" | "choice.target.ios.explanation" | "choice.target.ios.docs" | "choice.target.headless.label" | "choice.target.headless.summary" | "choice.target.headless.explanation" | "choice.target.headless.docs" | "choice.sender.remotedrawIos.label" | "choice.sender.remotedrawIos.hint.scan" | "choice.sender.remotedrawIos.hint.joinUrl" | "choice.sender.remotedrawIos.summary" | "choice.sender.remotedrawIos.explanation" | "choice.sender.remotedrawIos.docs" | "choice.sender.embeddedWeb.label" | "choice.sender.embeddedWeb.hint" | "choice.sender.embeddedWeb.summary" | "choice.sender.embeddedWeb.explanation" | "choice.sender.embeddedWeb.docs" | "choice.sender.ownIos.label" | "choice.sender.ownIos.hint" | "choice.sender.ownIos.summary" | "choice.sender.ownIos.explanation" | "choice.sender.ownIos.docs" | "choice.sender.headless.label" | "choice.sender.headless.hint.noUi" | "choice.sender.headless.hint.httpRoutes" | "choice.sender.headless.summary" | "choice.sender.headless.explanation" | "choice.sender.headless.docs" | "choice.sdk.react.label" | "choice.sdk.react.hint" | "choice.sdk.react.summary" | "choice.sdk.react.explanation" | "choice.sdk.react.docs" | "choice.sdk.svelte.label" | "choice.sdk.svelte.hint" | "choice.sdk.svelte.summary" | "choice.sdk.svelte.explanation" | "choice.sdk.svelte.docs" | "choice.sdk.js.label.client" | "choice.sdk.js.label.noFramework" | "choice.sdk.js.hint.client" | "choice.sdk.js.hint.noFramework" | "choice.sdk.js.summary" | "choice.sdk.js.explanation" | "choice.sdk.js.docs" | "choice.sdk.swift.label" | "choice.sdk.swift.hint" | "choice.sdk.swift.summary" | "choice.sdk.swift.explanation" | "choice.sdk.swift.docs" | "choice.sdk.headless.label" | "choice.sdk.headless.hint" | "choice.sdk.headless.summary" | "choice.sdk.headless.explanation" | "choice.sdk.headless.docs" | "choice.preset.approval.summary" | "choice.preset.approval.explanation" | "choice.preset.approval.docs" | "choice.preset.sketch.label" | "choice.preset.sketch.hint" | "choice.preset.sketch.summary" | "choice.preset.sketch.explanation" | "choice.preset.sketch.docs" | "choice.preset.photoMarkup.summary" | "choice.preset.photoMarkup.explanation" | "choice.preset.photoMarkup.docs" | "choice.preset.pdfMarkup.summary" | "choice.preset.pdfMarkup.explanation" | "choice.preset.pdfMarkup.docs" | "choice.preset.mapMarkup.summary" | "choice.preset.mapMarkup.explanation" | "choice.preset.mapMarkup.docs" | "choice.preset.screenMarkup.label" | "choice.preset.screenMarkup.hint" | "choice.preset.screenMarkup.summary" | "choice.preset.screenMarkup.explanation" | "choice.preset.screenMarkup.docs" | "choice.preset.designReview.summary" | "choice.preset.designReview.explanation" | "choice.preset.designReview.docs" | "choice.preset.pointer.summary" | "choice.preset.pointer.explanation" | "choice.preset.pointer.docs" | "choice.packageManager.npm.summary" | "choice.packageManager.npm.explanation" | "choice.packageManager.npm.docs" | "choice.packageManager.pnpm.summary" | "choice.packageManager.pnpm.explanation" | "choice.packageManager.pnpm.docs" | "choice.packageManager.yarn.summary" | "choice.packageManager.yarn.explanation" | "choice.packageManager.yarn.docs" | "choice.packageManager.bun.summary" | "choice.packageManager.bun.explanation" | "choice.packageManager.bun.docs" | "wizard.title.setup" | "wizard.title.review" | "wizard.title.confirm" | "wizard.title.executing" | "wizard.title.success" | "wizard.title.error" | "wizard.title.interrupted" | "wizard.title.cancelled" | "wizard.confirm.no" | "wizard.confirm.yes" | "wizard.hint.replaceDefault" | "wizard.hint.edit" | "wizard.control.next" | "wizard.control.back" | "wizard.control.quitCtrlC" | "wizard.control.quitQ" | "wizard.control.steps" | "wizard.control.choose" | "wizard.control.docs" | "wizard.control.forward" | "wizard.control.backArrow" | "wizard.control.confirm" | "wizard.progress.step" | "wizard.card.help" | "wizard.card.summary" | "wizard.value.default" | "wizard.executing.detail" | "wizard.created.at" | "wizard.next.command" | "wizard.docs.line" | "wizard.tagline.setup" | "wizard.tagline" | "wizard.docs.openFailed" | "new.help.usage.bare" | "new.help.usage.named" | "new.help.interactive" | "new.help.option.path" | "new.help.option.target" | "new.help.option.sender" | "new.help.option.sdk" | "new.help.option.preset" | "new.help.option.packageManager" | "new.help.option.apiBaseUrl" | "new.help.option.force" | "new.help.option.offline" | "new.help.option.nonInteractive" | "new.help.option.format" | "new.help.option.dryRun" | "new.help.option.language" | "init.help.usage" | "init.help.body" | "prompt.control.move" | "prompt.control.select" | "prompt.control.quit" | "prompt.intro.setup" | "scaffold.verb.created" | "scaffold.verb.initialized" | "scaffold.verb.installedExample" | "scaffold.headline" | "scaffold.choices" | "scaffold.choice.app" | "scaffold.choice.sdk" | "scaffold.choice.sender" | "scaffold.choice.starter" | "scaffold.wrote" | "scaffold.wouldWrite" | "scaffold.next.install" | "scaffold.next.secrets" | "scaffold.next.createInput" | "scaffold.next.render" | "cloud.skipped" | "cloud.dashboardProject" | "cloud.devKey" | "cloud.projectId" | "cloud.warning.placeholder" | "cloud.warning.offline" | "cloud.warning.dryRun" | "login.already" | "login.complete" | "login.credential" | "login.help.title" | "login.help.usage" | "login.help.body" | "logout.done" | "logout.none" | "logout.help.title" | "logout.help.usage" | "whoami.notLoggedIn" | "whoami.api" | "whoami.anonymous" | "whoami.help.title" | "whoami.help.usage" | "doctor.title" | "doctor.config.ok" | "doctor.config.missing" | "doctor.package.ok" | "doctor.package.missing" | "doctor.sdk.ok" | "doctor.sdk.missing" | "doctor.apiKey.ok" | "doctor.apiKey.missing" | "doctor.label.deployment" | "doctor.label.deploymentReachable" | "doctor.label.apiKeyAccepted" | "doctor.label.cliVersion" | "doctor.network.offline" | "doctor.network.noOrigin" | "doctor.health.ok" | "doctor.health.failed" | "doctor.key.skippedNoKey" | "doctor.key.skippedNoHealth" | "doctor.key.liveOne" | "doctor.key.liveMany" | "doctor.version.offline" | "doctor.version.unknown" | "doctor.version.stale" | "doctor.version.latest" | "doctor.probe.noNetwork" | "doctor.probe.noNetworkKey" | "doctor.probe.nonJson" | "doctor.probe.rejected" | "doctor.baseUrl.placeholder" | "doctor.baseUrl.invalid" | "doctor.baseUrl.default" | "doctor.baseUrl.production" | "doctor.baseUrl.override" | "doctor.baseUrl.origin.flag" | "doctor.baseUrl.origin.project" | "doctor.help.usage" | "doctor.help.checks" | "doctor.help.baseUrl" | "doctor.help.network" | "doctor.help.version" | "doctor.help.offline" | "update.unreachable" | "update.alreadyLatest" | "update.available" | "update.ephemeral" | "update.runToInstall" | "update.availableRun" | "update.failed" | "update.done" | "update.help.usage" | "update.help.body" | "update.help.global" | "update.help.check" | "update.help.silence" | "dev.title" | "dev.apiBaseUrl" | "dev.hosted" | "dev.step1" | "dev.step1.detail" | "dev.step2" | "dev.step3" | "dev.step3.detail" | "dev.help.usage" | "dev.help.body" | "createInput.title" | "createInput.warning" | "createInput.footer" | "createInput.error.noFetch" | "createInput.error.noKey" | "createInput.error.apiStatus" | "createInput.help.usage" | "createInput.help.option.preset" | "createInput.help.option.label" | "createInput.help.option.externalId" | "createInput.help.option.apiBaseUrl" | "createInput.help.option.apiKey" | "createInput.help.option.expiresInMs" | "examples.title" | "examples.reactIos" | "examples.reactOwnedSender" | "examples.rawHttp" | "examples.iosOwnedSender" | "examples.installOne" | "examples.help.usage.list" | "examples.help.usage.install" | "agent.title" | "agent.intro" | "agent.printSkill" | "agent.installSkill" | "agent.wouldWrite" | "agent.installed" | "agent.next" | "agent.error.exists" | "agent.help.usage.bare" | "agent.help.usage.print" | "agent.help.usage.install" | "agent.help.paths" | "agent.help.body" | "cloud.authorize" | "cloud.browserOpened" | "cloud.browserFailed" | "cloud.error.notLoggedIn" | "cloud.error.authStatus" | "cloud.error.authExpired" | "cloud.error.noFetch" | "cloud.error.unreachable" | "cloud.error.endpointMissing" | "cloud.error.invalidResponse" | "cloud.error.requestFailed" | "cloud.error.badOrigin" | "cloud.error.configUnreadable" | "cloud.error.envConflict" | "notice.update.available" | "notice.update.ephemeral" | "notice.update.install" | "error.appNameRequired" | "error.plan.ownIosNeedsSwift" | "error.plan.swiftNeedsOwnIos" | "error.plan.iosNeedsOwnIos" | "error.plan.headlessSenderSdk" | "error.unknownChoice" | "error.refuseOverwrite" | "error.expectedHttpOrigin" | "error.expectedBareOrigin" | "error.noHome" | "error.unknownCommand" | "error.unsupportedOption" | "error.optionNoValue" | "error.optionNeedsValue" | "error.expiresInMs" | "error.interactiveNeedsTty" | "error.noChoices" | "error.httpsDocsOnly" | "error.httpUrlsOnly", string>>;
429
438
  };
430
439
  };
431
440
  export type Locale = keyof typeof LOCALES;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/locales/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAC7B,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAG7B,YAAY,EAAE,aAAa,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE/E;;;;;;GAMG;AACH,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAawB,CAAC;AAE7C,MAAM,MAAM,MAAM,GAAG,MAAM,OAAO,OAAO,CAAC;AAE1C,6EAA6E;AAC7E,eAAO,MAAM,aAAa,EAAE,MAAa,CAAC;AAE1C,eAAO,MAAM,iBAAiB,EAA2B,MAAM,EAAE,CAAC;AAElE,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/locales/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAC7B,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAG7B,YAAY,EAAE,aAAa,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE/E;;;;;;GAMG;AACH,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAawB,CAAC;AAE7C,MAAM,MAAM,MAAM,GAAG,MAAM,OAAO,OAAO,CAAC;AAE1C,6EAA6E;AAC7E,eAAO,MAAM,aAAa,EAAE,MAAa,CAAC;AAE1C,eAAO,MAAM,iBAAiB,EAA2B,MAAM,EAAE,CAAC;AAElE,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"nl.d.ts","sourceRoot":"","sources":["../../src/locales/nl.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAElD;;;;;;GAMG;AACH,eAAO,MAAM,EAAE,EAAE,aAsmBhB,CAAC"}
1
+ {"version":3,"file":"nl.d.ts","sourceRoot":"","sources":["../../src/locales/nl.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAElD;;;;;;GAMG;AACH,eAAO,MAAM,EAAE,EAAE,aA2mBhB,CAAC"}