@remotedraw/cli 0.2.0 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli.d.ts CHANGED
@@ -2,7 +2,7 @@ import { type WizardDefinition, type WizardTerminal } from "./setup-wizard.js";
2
2
  import { type CloudRuntime } from "./cloud.js";
3
3
  import { type UpdateRuntime } from "./update.js";
4
4
  export declare const CLI_VERSION: string;
5
- export declare const REMOTEDRAW_SDK_RANGE = "^0.1.0";
5
+ export declare const REMOTEDRAW_SDK_RANGE = "^0.2.0";
6
6
  export declare const REMOTEDRAW_CLI_RANGE = "^0.2.0";
7
7
  export type CliResult = {
8
8
  exitCode: number;
@@ -40,7 +40,7 @@ export type CliRuntime = CloudRuntime & UpdateRuntime & {
40
40
  export declare const targetChoices: readonly ["web", "desktop", "ios", "headless"];
41
41
  export declare const senderChoices: readonly ["remotedraw-ios", "embedded-web", "own-ios", "headless"];
42
42
  export declare const sdkChoices: readonly ["react", "svelte", "js", "swift", "headless"];
43
- declare const presetChoices: readonly ["signature", "initials", "approval", "sketch", "photoMarkup", "pdfMarkup", "mapMarkup", "screenMarkup", "designReview", "pointer"];
43
+ declare const presetChoices: readonly ["approval", "sketch", "photoMarkup", "pdfMarkup", "mapMarkup", "screenMarkup", "designReview", "pointer"];
44
44
  declare const packageManagerChoices: readonly ["npm", "pnpm", "yarn", "bun"];
45
45
  type TargetChoice = (typeof targetChoices)[number];
46
46
  type SenderChoice = (typeof senderChoices)[number];
@@ -74,35 +74,12 @@ type PayloadOptions = {
74
74
  export declare function createSessionPayload(options: PayloadOptions): {
75
75
  expiresInMs?: number;
76
76
  externalId: string;
77
- markupPreset: "signature" | "initials" | "approval" | "sketch" | "photoMarkup" | "pdfMarkup" | "mapMarkup" | "screenMarkup" | "designReview" | "pointer";
77
+ markupPreset: "approval" | "sketch" | "photoMarkup" | "pdfMarkup" | "mapMarkup" | "screenMarkup" | "designReview" | "pointer";
78
78
  target: {
79
+ kind: string;
80
+ label: string;
79
81
  metadata: {
80
82
  descriptor: {
81
- version: number;
82
- privacy: string;
83
- surfaceRole: string;
84
- inputIntent: "signature" | "initials";
85
- label: string;
86
- components: {
87
- id: "signature" | "initials";
88
- role: string;
89
- inputIntent: "signature" | "initials";
90
- required: boolean;
91
- bounds: {
92
- minX: number;
93
- minY: number;
94
- maxX: number;
95
- maxY: number;
96
- };
97
- }[];
98
- phoneHints: {
99
- preferredLayout: string;
100
- preferredTool: string;
101
- primaryActionLabel: string;
102
- showUndo: boolean;
103
- showClear: boolean;
104
- };
105
- } | {
106
83
  version: number;
107
84
  privacy: string;
108
85
  surfaceRole: string;
@@ -115,7 +92,6 @@ export declare function createSessionPayload(options: PayloadOptions): {
115
92
  showUndo?: never;
116
93
  showClear?: never;
117
94
  };
118
- components?: never;
119
95
  } | {
120
96
  version: number;
121
97
  privacy: string;
@@ -129,16 +105,8 @@ export declare function createSessionPayload(options: PayloadOptions): {
129
105
  showUndo: boolean;
130
106
  showClear: boolean;
131
107
  };
132
- components?: never;
133
108
  };
134
109
  };
135
- inputMapping?: "surface";
136
- coordinateSpace?: {
137
- width: number;
138
- height: number;
139
- };
140
- kind: string;
141
- label: string;
142
110
  };
143
111
  };
144
112
  /**
package/dist/cli.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
package/dist/cli.js CHANGED
@@ -23,7 +23,7 @@ export const CLI_VERSION = typeof packageMetadata.version === "string"
23
23
  // private, and would silently accept a future breaking major once they were
24
24
  // not. tests/generated-manifest.test.ts cross-checks every range below against
25
25
  // the workspace manifests.
26
- export const REMOTEDRAW_SDK_RANGE = "^0.1.0";
26
+ export const REMOTEDRAW_SDK_RANGE = "^0.2.0";
27
27
  export const REMOTEDRAW_CLI_RANGE = "^0.2.0";
28
28
  export const targetChoices = ["web", "desktop", "ios", "headless"];
29
29
  export const senderChoices = [
@@ -40,8 +40,6 @@ export const sdkChoices = [
40
40
  "headless",
41
41
  ];
42
42
  const presetChoices = [
43
- "signature",
44
- "initials",
45
43
  "approval",
46
44
  "sketch",
47
45
  "photoMarkup",
@@ -641,13 +639,13 @@ function guideText() {
641
639
  "",
642
640
  t("guide.intro"),
643
641
  t("guide.path.webIos"),
644
- " remotedraw init --target web --sender remotedraw-ios --sdk react --preset signature",
642
+ " remotedraw init --target web --sender remotedraw-ios --sdk react --preset sketch",
645
643
  "",
646
644
  t("guide.path.webOwned"),
647
645
  " remotedraw init --target web --sender embedded-web --sdk react --preset sketch",
648
646
  "",
649
647
  t("guide.path.svelteIos"),
650
- " remotedraw init --target web --sender remotedraw-ios --sdk svelte --preset signature",
648
+ " remotedraw init --target web --sender remotedraw-ios --sdk svelte --preset sketch",
651
649
  "",
652
650
  t("guide.path.desktop"),
653
651
  " remotedraw init --target desktop --sender remotedraw-ios --sdk js --preset sketch",
@@ -1154,7 +1152,7 @@ async function devCommand(args, runtime) {
1154
1152
  t("dev.step1.detail"),
1155
1153
  "",
1156
1154
  t("dev.step2"),
1157
- ` remotedraw create-input --preset signature --api-base-url ${apiBaseUrl}`,
1155
+ ` remotedraw create-input --preset sketch --api-base-url ${apiBaseUrl}`,
1158
1156
  "",
1159
1157
  t("dev.step3"),
1160
1158
  t("dev.step3.detail"),
@@ -1175,7 +1173,7 @@ async function createInputCommand(args, runtime) {
1175
1173
  if (parsed.booleans.has("help"))
1176
1174
  return ok(createInputHelpText());
1177
1175
  const projectEnv = await environmentForProject(runtime.cwd, runtime);
1178
- const preset = choice(readString(parsed, "preset") ?? "signature", presetChoices, "preset");
1176
+ const preset = choice(readString(parsed, "preset") ?? "sketch", presetChoices, "preset");
1179
1177
  const apiBaseUrl = readString(parsed, "api-base-url") ??
1180
1178
  projectEnv.REMOTEDRAW_API_BASE_URL ??
1181
1179
  DEFAULT_REMOTEDRAW_API_BASE_URL;
@@ -1527,7 +1525,7 @@ async function promptForNewProject(parsed, runtime) {
1527
1525
  const preset = readString(parsed, "preset") == null
1528
1526
  ? await prompts.select({
1529
1527
  message: t("field.preset"),
1530
- defaultValue: "signature",
1528
+ defaultValue: "sketch",
1531
1529
  choices: presetPromptChoices(),
1532
1530
  })
1533
1531
  : choice(readString(parsed, "preset"), presetChoices, "preset");
@@ -1788,16 +1786,16 @@ function sdkPromptChoices(target, sender) {
1788
1786
  }
1789
1787
  function presetPromptChoices() {
1790
1788
  return [
1791
- {
1792
- value: "signature",
1793
- label: t("choice.preset.signature.label"),
1794
- hint: t("choice.preset.signature.hint"),
1795
- },
1796
1789
  {
1797
1790
  value: "sketch",
1798
1791
  label: t("choice.preset.sketch.label"),
1799
1792
  hint: t("choice.preset.sketch.hint"),
1800
1793
  },
1794
+ {
1795
+ value: "screenMarkup",
1796
+ label: t("choice.preset.screenMarkup.label"),
1797
+ hint: t("choice.preset.screenMarkup.hint"),
1798
+ },
1801
1799
  ];
1802
1800
  }
1803
1801
  function packageManagerPromptChoices() {
@@ -1808,18 +1806,6 @@ function packageManagerPromptChoices() {
1808
1806
  }
1809
1807
  function presetWizardDetails() {
1810
1808
  return {
1811
- signature: {
1812
- summary: t("choice.preset.signature.summary"),
1813
- explanation: t("choice.preset.signature.explanation"),
1814
- docsUrl: DOCS_PAYLOADS,
1815
- docsLabel: t("choice.preset.signature.docs"),
1816
- },
1817
- initials: {
1818
- summary: t("choice.preset.initials.summary"),
1819
- explanation: t("choice.preset.initials.explanation"),
1820
- docsUrl: DOCS_PAYLOADS,
1821
- docsLabel: t("choice.preset.initials.docs"),
1822
- },
1823
1809
  approval: {
1824
1810
  summary: t("choice.preset.approval.summary"),
1825
1811
  explanation: t("choice.preset.approval.explanation"),
@@ -1989,7 +1975,7 @@ function agentOptionCatalog() {
1989
1975
  `${target}:${sender.value}`,
1990
1976
  defaultSdkForChoices(target, sender.value),
1991
1977
  ]))),
1992
- preset: "signature",
1978
+ preset: "sketch",
1993
1979
  packageManager: "npm",
1994
1980
  apiBaseUrl: DEFAULT_REMOTEDRAW_API_BASE_URL,
1995
1981
  },
@@ -2008,7 +1994,7 @@ export function projectSetupDefinition() {
2008
1994
  target: "web",
2009
1995
  sender: "remotedraw-ios",
2010
1996
  sdk: "react",
2011
- preset: "signature",
1997
+ preset: "sketch",
2012
1998
  packageManager: "npm",
2013
1999
  },
2014
2000
  fields: projectSetupFields(),
@@ -2124,7 +2110,7 @@ function planFromArgs(parsed, options) {
2124
2110
  const sdk = choice(readString(parsed, "sdk") ??
2125
2111
  options.defaults?.sdk ??
2126
2112
  defaultSdkForChoices(target, sender), sdkChoices, "sdk");
2127
- const preset = choice(readString(parsed, "preset") ?? options.defaults?.preset ?? "signature", presetChoices, "preset");
2113
+ const preset = choice(readString(parsed, "preset") ?? options.defaults?.preset ?? "sketch", presetChoices, "preset");
2128
2114
  const packageManager = choice(readString(parsed, "package-manager") ??
2129
2115
  options.defaults?.packageManager ??
2130
2116
  "npm", packageManagerChoices, "package-manager");
@@ -3051,17 +3037,6 @@ export function createSessionPayload(options) {
3051
3037
  target: {
3052
3038
  kind: targetKindForPreset(options.preset),
3053
3039
  label: options.label,
3054
- ...(options.preset === "signature"
3055
- ? {
3056
- inputMapping: "surface",
3057
- coordinateSpace: { width: 1600, height: 500 },
3058
- }
3059
- : options.preset === "initials"
3060
- ? {
3061
- inputMapping: "surface",
3062
- coordinateSpace: { width: 800, height: 500 },
3063
- }
3064
- : {}),
3065
3040
  metadata: {
3066
3041
  descriptor,
3067
3042
  },
@@ -3072,31 +3047,6 @@ export function createSessionPayload(options) {
3072
3047
  };
3073
3048
  }
3074
3049
  function descriptorForPreset(preset, label) {
3075
- if (preset === "signature" || preset === "initials") {
3076
- return {
3077
- version: 1,
3078
- privacy: "metadata-only",
3079
- surfaceRole: "field",
3080
- inputIntent: preset,
3081
- label,
3082
- components: [
3083
- {
3084
- id: preset,
3085
- role: "field",
3086
- inputIntent: preset,
3087
- required: true,
3088
- bounds: { minX: 0.1, minY: 0.68, maxX: 0.9, maxY: 0.86 },
3089
- },
3090
- ],
3091
- phoneHints: {
3092
- preferredLayout: "signature-pad",
3093
- preferredTool: "freehand",
3094
- primaryActionLabel: "Submit",
3095
- showUndo: true,
3096
- showClear: true,
3097
- },
3098
- };
3099
- }
3100
3050
  if (preset === "approval") {
3101
3051
  return {
3102
3052
  version: 1,
@@ -3127,11 +3077,8 @@ function descriptorForPreset(preset, label) {
3127
3077
  };
3128
3078
  }
3129
3079
  function targetKindForPreset(preset) {
3130
- if (preset === "signature" ||
3131
- preset === "initials" ||
3132
- preset === "approval") {
3080
+ if (preset === "approval")
3133
3081
  return "field";
3134
- }
3135
3082
  if (preset === "photoMarkup" || preset === "designReview")
3136
3083
  return "image";
3137
3084
  if (preset === "pdfMarkup")
@@ -3155,8 +3102,6 @@ function surfaceRoleForPreset(preset) {
3155
3102
  }
3156
3103
  function labelForPreset(preset) {
3157
3104
  const labels = {
3158
- signature: "Customer signature",
3159
- initials: "Customer initials",
3160
3105
  approval: "Quick approval",
3161
3106
  sketch: "Sketch input",
3162
3107
  photoMarkup: "Photo annotation",
@@ -3313,7 +3258,7 @@ function planDefaultsForExample(example) {
3313
3258
  target: "web",
3314
3259
  sender: "remotedraw-ios",
3315
3260
  sdk: "react",
3316
- preset: "signature",
3261
+ preset: "sketch",
3317
3262
  };
3318
3263
  }
3319
3264
  function scaffoldSummary(verb, plan, outputDir, written, dryRun) {
@@ -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: 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: `sketch` for a free-form receiver surface, or\n `screenMarkup` for annotations over a shared screen \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, bounded fields, and other custom surfaces. A bounded\n field is a target you describe yourself \u2014 `inputMapping: \"surface\"` plus a\n `coordinateSpace` \u2014 not a preset RemoteDraw ships.\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.\n\nFor customer-owned iOS senders, prefer the published SwiftPM package \u2014 it is the\nsame implementation the first-party RemoteDraw app runs:\n\n```swift\n.package(url: \"https://github.com/AxioSOzo/remotedraw-swift.git\", from: \"0.1.0\")\n.product(name: \"RemoteDrawSenderKit\", package: \"remotedraw-swift\")\n```\n\n`package:` is the repository basename, not the module name. `remotedraw init\n--sdk swift` remains available and writes one self-contained\n`RemoteDrawIntegration.swift` against the public HTTP routes; use it only when\nadding a SwiftPM dependency is not an option.\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 sketch\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 sketch --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 sketch --package-manager npm\nremotedraw doctor --format json\nremotedraw create-input --preset sketch --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.";
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,ysRAAiqR,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: 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: `sketch` for a free-form receiver surface, or\n `screenMarkup` for annotations over a shared screen — 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, bounded fields, and other custom surfaces. A bounded\n field is a target you describe yourself — `inputMapping: \"surface\"` plus a\n `coordinateSpace` — not a preset RemoteDraw ships.\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.\n\nFor customer-owned iOS senders, prefer the published SwiftPM package — it is the\nsame implementation the first-party RemoteDraw app runs:\n\n```swift\n.package(url: \"https://github.com/AxioSOzo/remotedraw-swift.git\", from: \"0.1.0\")\n.product(name: \"RemoteDrawSenderKit\", package: \"remotedraw-swift\")\n```\n\n`package:` is the repository basename, not the module name. `remotedraw init\n--sdk swift` remains available and writes one self-contained\n`RemoteDrawIntegration.swift` against the public HTTP routes; use it only when\nadding a SwiftPM dependency is not an option.\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 sketch\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 sketch --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 sketch --package-manager npm\nremotedraw doctor --format json\nremotedraw create-input --preset sketch --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.";
@@ -141,14 +141,6 @@ export declare const en: {
141
141
  readonly "choice.sdk.headless.summary": "Config only, without a UI package.";
142
142
  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
143
  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
144
  readonly "choice.preset.approval.summary": "Free drawing input for a visual sign-off.";
153
145
  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
146
  readonly "choice.preset.approval.docs": "Open approval docs";
@@ -166,6 +158,8 @@ export declare const en: {
166
158
  readonly "choice.preset.mapMarkup.summary": "Drawings and directions on a map.";
167
159
  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
160
  readonly "choice.preset.mapMarkup.docs": "Open map markup docs";
161
+ readonly "choice.preset.screenMarkup.label": "Screen annotation";
162
+ readonly "choice.preset.screenMarkup.hint": "Mark up a screen or window your receiver shares.";
169
163
  readonly "choice.preset.screenMarkup.summary": "Annotations on a screen or application view.";
170
164
  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
165
  readonly "choice.preset.screenMarkup.docs": "Open screen markup docs";
@@ -229,7 +223,7 @@ export declare const en: {
229
223
  readonly "new.help.option.target": "web, desktop, ios, or headless.";
230
224
  readonly "new.help.option.sender": "remotedraw-ios, embedded-web, own-ios, or headless.";
231
225
  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.";
226
+ readonly "new.help.option.preset": "sketch or screenMarkup. The other API presets remain accepted for existing integrations.";
233
227
  readonly "new.help.option.packageManager": "npm, pnpm, yarn, or bun.";
234
228
  readonly "new.help.option.apiBaseUrl": "Default API origin for generated config.";
235
229
  readonly "new.help.option.force": "Overwrite generated files and existing RemoteDraw .env.local values.";
@@ -352,7 +346,7 @@ export declare const en: {
352
346
  readonly "createInput.error.noFetch": "This runtime cannot execute HTTP requests.";
353
347
  readonly "createInput.error.noKey": "create-input --execute requires --api-key or REMOTEDRAW_API_KEY with an rd_sk_... server key.";
354
348
  readonly "createInput.error.apiStatus": "RemoteDraw API returned {status}.";
355
- readonly "createInput.help.usage": " remotedraw create-input [--preset signature] [--json|--curl|--execute]";
349
+ readonly "createInput.help.usage": " remotedraw create-input [--preset sketch] [--json|--curl|--execute]";
356
350
  readonly "createInput.help.option.preset": "Session/input preset.";
357
351
  readonly "createInput.help.option.label": "Receiver target label.";
358
352
  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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2kBL,CAAC"}
@@ -154,14 +154,6 @@ export const en = {
154
154
  "choice.sdk.headless.explanation": "Choose this when another language or a custom client calls the HTTP API. The wizard adds no framework dependency.",
155
155
  "choice.sdk.headless.docs": "Open HTTP API docs",
156
156
  // ── 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
157
  "choice.preset.approval.summary": "Free drawing input for a visual sign-off.",
166
158
  "choice.preset.approval.explanation": "Use this for approvals where a check, initial, or short mark is enough and your workflow owns the status.",
167
159
  "choice.preset.approval.docs": "Open approval docs",
@@ -179,6 +171,8 @@ export const en = {
179
171
  "choice.preset.mapMarkup.summary": "Drawings and directions on a map.",
180
172
  "choice.preset.mapMarkup.explanation": "Use this for routes, locations, or spatial feedback. Your app owns the map and viewport; RemoteDraw syncs the input.",
181
173
  "choice.preset.mapMarkup.docs": "Open map markup docs",
174
+ "choice.preset.screenMarkup.label": "Screen annotation",
175
+ "choice.preset.screenMarkup.hint": "Mark up a screen or window your receiver shares.",
182
176
  "choice.preset.screenMarkup.summary": "Annotations on a screen or application view.",
183
177
  "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
178
  "choice.preset.screenMarkup.docs": "Open screen markup docs",
@@ -245,7 +239,7 @@ export const en = {
245
239
  "new.help.option.target": "web, desktop, ios, or headless.",
246
240
  "new.help.option.sender": "remotedraw-ios, embedded-web, own-ios, or headless.",
247
241
  "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.",
242
+ "new.help.option.preset": "sketch or screenMarkup. The other API presets remain accepted for existing integrations.",
249
243
  "new.help.option.packageManager": "npm, pnpm, yarn, or bun.",
250
244
  "new.help.option.apiBaseUrl": "Default API origin for generated config.",
251
245
  "new.help.option.force": "Overwrite generated files and existing RemoteDraw .env.local values.",
@@ -374,7 +368,7 @@ export const en = {
374
368
  "createInput.error.noFetch": "This runtime cannot execute HTTP requests.",
375
369
  "createInput.error.noKey": "create-input --execute requires --api-key or REMOTEDRAW_API_KEY with an rd_sk_... server key.",
376
370
  "createInput.error.apiStatus": "RemoteDraw API returned {status}.",
377
- "createInput.help.usage": " remotedraw create-input [--preset signature] [--json|--curl|--execute]",
371
+ "createInput.help.usage": " remotedraw create-input [--preset sketch] [--json|--curl|--execute]",
378
372
  "createInput.help.option.preset": "Session/input preset.",
379
373
  "createInput.help.option.label": "Receiver target label.",
380
374
  "createInput.help.option.externalId": "App-owned correlation id.",
@@ -144,14 +144,6 @@ export declare const LOCALES: {
144
144
  readonly "choice.sdk.headless.summary": "Config only, without a UI package.";
145
145
  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
146
  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
147
  readonly "choice.preset.approval.summary": "Free drawing input for a visual sign-off.";
156
148
  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
149
  readonly "choice.preset.approval.docs": "Open approval docs";
@@ -169,6 +161,8 @@ export declare const LOCALES: {
169
161
  readonly "choice.preset.mapMarkup.summary": "Drawings and directions on a map.";
170
162
  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
163
  readonly "choice.preset.mapMarkup.docs": "Open map markup docs";
164
+ readonly "choice.preset.screenMarkup.label": "Screen annotation";
165
+ readonly "choice.preset.screenMarkup.hint": "Mark up a screen or window your receiver shares.";
172
166
  readonly "choice.preset.screenMarkup.summary": "Annotations on a screen or application view.";
173
167
  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
168
  readonly "choice.preset.screenMarkup.docs": "Open screen markup docs";
@@ -232,7 +226,7 @@ export declare const LOCALES: {
232
226
  readonly "new.help.option.target": "web, desktop, ios, or headless.";
233
227
  readonly "new.help.option.sender": "remotedraw-ios, embedded-web, own-ios, or headless.";
234
228
  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.";
229
+ readonly "new.help.option.preset": "sketch or screenMarkup. The other API presets remain accepted for existing integrations.";
236
230
  readonly "new.help.option.packageManager": "npm, pnpm, yarn, or bun.";
237
231
  readonly "new.help.option.apiBaseUrl": "Default API origin for generated config.";
238
232
  readonly "new.help.option.force": "Overwrite generated files and existing RemoteDraw .env.local values.";
@@ -355,7 +349,7 @@ export declare const LOCALES: {
355
349
  readonly "createInput.error.noFetch": "This runtime cannot execute HTTP requests.";
356
350
  readonly "createInput.error.noKey": "create-input --execute requires --api-key or REMOTEDRAW_API_KEY with an rd_sk_... server key.";
357
351
  readonly "createInput.error.apiStatus": "RemoteDraw API returned {status}.";
358
- readonly "createInput.help.usage": " remotedraw create-input [--preset signature] [--json|--curl|--execute]";
352
+ readonly "createInput.help.usage": " remotedraw create-input [--preset sketch] [--json|--curl|--execute]";
359
353
  readonly "createInput.help.option.preset": "Session/input preset.";
360
354
  readonly "createInput.help.option.label": "Receiver target label.";
361
355
  readonly "createInput.help.option.externalId": "App-owned correlation id.";
@@ -425,7 +419,7 @@ export declare const LOCALES: {
425
419
  endonym: string;
426
420
  tags: string[];
427
421
  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>>;
422
+ 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.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.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>>;
429
423
  };
430
424
  };
431
425
  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,aA6lBhB,CAAC"}
@@ -146,14 +146,6 @@ export const nl = {
146
146
  "choice.sdk.headless.explanation": "Kies dit als een andere taal of eigen client de HTTP-API aanroept. De wizard voegt geen frameworkafhankelijkheid toe.",
147
147
  "choice.sdk.headless.docs": "HTTP API-docs openen",
148
148
  // ── Startpunt ─────────────────────────────────────────────────────────
149
- "choice.preset.signature.label": "Handtekeningstrook",
150
- "choice.preset.signature.hint": "Productklaar merkveld met exacte oppervlaktekoppeling.",
151
- "choice.preset.signature.summary": "Een begrensd handtekeningveld met exact passend telefoonoppervlak.",
152
- "choice.preset.signature.explanation": "Kies dit voor een handtekeningveld dat je zelf om RemoteDrawReceiver heen vormgeeft, met een exact passend telefoonoppervlak. Je kunt logo, tekst, kleur en omliggende formulier-UI aanpassen.",
153
- "choice.preset.signature.docs": "Handtekeningdocs openen",
154
- "choice.preset.initials.summary": "Een klein tekenveld voor initialen.",
155
- "choice.preset.initials.explanation": "Gebruik dit wanneer iemand op één of meerdere plekken korte initialen moet plaatsen, bijvoorbeeld bij documentcontrole.",
156
- "choice.preset.initials.docs": "Initialendocs openen",
157
149
  "choice.preset.approval.summary": "Vrije tekeninvoer voor een visueel akkoord.",
158
150
  "choice.preset.approval.explanation": "Gebruik dit voor goedkeuringen waarbij een vink, paraaf of korte markering voldoende is en je workflow de status beheert.",
159
151
  "choice.preset.approval.docs": "Goedkeuringsdocs openen",
@@ -171,6 +163,8 @@ export const nl = {
171
163
  "choice.preset.mapMarkup.summary": "Tekeningen en aanwijzingen op een kaart.",
172
164
  "choice.preset.mapMarkup.explanation": "Gebruik dit voor routes, locaties of ruimtelijke feedback. Je app beheert de kaart en viewport; RemoteDraw synchroniseert de invoer.",
173
165
  "choice.preset.mapMarkup.docs": "Kaartannotatiedocs openen",
166
+ "choice.preset.screenMarkup.label": "Schermannotatie",
167
+ "choice.preset.screenMarkup.hint": "Teken over een scherm of venster dat je ontvanger deelt.",
174
168
  "choice.preset.screenMarkup.summary": "Aantekeningen op een scherm of applicatieweergave.",
175
169
  "choice.preset.screenMarkup.explanation": "Gebruik dit voor support, demo's en UI-feedback. Je ontvanger levert het schermbeeld waarop de telefoonmarkeringen worden geprojecteerd.",
176
170
  "choice.preset.screenMarkup.docs": "Schermaantekeningdocs openen",
@@ -237,7 +231,7 @@ export const nl = {
237
231
  "new.help.option.target": "web, desktop, ios of headless.",
238
232
  "new.help.option.sender": "remotedraw-ios, embedded-web, own-ios of headless.",
239
233
  "new.help.option.sdk": "react, svelte, js, swift of headless.",
240
- "new.help.option.preset": "signature of sketch. Oude API-presets blijven werken voor bestaande integraties.",
234
+ "new.help.option.preset": "sketch of screenMarkup. De overige API-presets blijven werken voor bestaande integraties.",
241
235
  "new.help.option.packageManager": "npm, pnpm, yarn of bun.",
242
236
  "new.help.option.apiBaseUrl": "Standaard API-origin voor de gegenereerde configuratie.",
243
237
  "new.help.option.force": "Overschrijf gegenereerde bestanden en bestaande RemoteDraw-waarden in .env.local.",
@@ -366,7 +360,7 @@ export const nl = {
366
360
  "createInput.error.noFetch": "Deze runtime kan geen HTTP-verzoeken uitvoeren.",
367
361
  "createInput.error.noKey": "create-input --execute vereist --api-key of REMOTEDRAW_API_KEY met een rd_sk_...-serversleutel.",
368
362
  "createInput.error.apiStatus": "De RemoteDraw-API gaf {status} terug.",
369
- "createInput.help.usage": " remotedraw create-input [--preset signature] [--json|--curl|--execute]",
363
+ "createInput.help.usage": " remotedraw create-input [--preset sketch] [--json|--curl|--execute]",
370
364
  "createInput.help.option.preset": "Preset voor sessie en invoer.",
371
365
  "createInput.help.option.label": "Label van het doel in de ontvanger.",
372
366
  "createInput.help.option.externalId": "Eigen correlatie-ID van je app.",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@remotedraw/cli",
3
- "version": "0.2.0",
3
+ "version": "0.2.1",
4
4
  "description": "Command-line tools for creating and inspecting RemoteDraw integrations.",
5
5
  "type": "module",
6
6
  "bin": {