@remotedraw/cli 0.1.1 → 0.1.3

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/README.md CHANGED
@@ -1,53 +1,136 @@
1
- # @remotedraw/cli
1
+ # RemoteDraw CLI
2
2
 
3
- Command-line tools for starting and inspecting RemoteDraw developer integrations.
3
+ Set up RemoteDraw in a new or existing app from your terminal. The CLI guides
4
+ you through choosing an integration, signs in through the RemoteDraw dashboard,
5
+ creates the matching project and development API key, and writes starter code
6
+ for your chosen stack.
4
7
 
5
- ## Local Development
8
+ ## Install
9
+
10
+ RemoteDraw requires Node.js 20 or newer.
6
11
 
7
12
  ```sh
8
- bun run cli -- guide
9
- bun run cli -- options --format json
10
- bun run cli -- login
11
- bun run cli -- whoami
12
- bun run cli
13
- bun run cli -- new
14
- bun run cli -- new --app-name MijnApp --target web --sender remotedraw-ios --sdk react
15
- bun run cli -- init --target web --sender embedded-web --sdk react
16
- bun run cli -- doctor
17
- bun run cli -- agent --print-skill
13
+ npm install --global @remotedraw/cli
14
+ remotedraw --version
18
15
  ```
19
16
 
20
- The published package will expose the same commands through the `remotedraw`
21
- binary, for example `npx @remotedraw/cli@latest guide`.
17
+ You can also run it without installing globally:
22
18
 
23
- Run `remotedraw` with no arguments in an interactive terminal for the guided
24
- project-creation wizard. It supports keyboard navigation, review, and explicit
25
- confirmation before writing. Piped or redirected no-argument use prints the
26
- same deterministic help as `remotedraw --help` and never waits for input.
19
+ ```sh
20
+ npx @remotedraw/cli@latest
21
+ ```
27
22
 
28
- `remotedraw new` remains available with either explicit flags or its existing
29
- interactive prompts. Both routes use the same project validation, templates,
30
- and file writer.
23
+ ## Start here
31
24
 
32
- Coding agents and CI should use the machine-readable path instead of driving
33
- the wizard:
25
+ Run the guided setup:
34
26
 
35
27
  ```sh
36
- remotedraw options --format json
37
- remotedraw new --non-interactive --offline --dry-run --format json \
38
- --app-name AgentDesk --target web --sender remotedraw-ios \
39
- --sdk react --preset sketch --package-manager npm
40
- remotedraw doctor --format json
28
+ remotedraw
29
+ ```
30
+
31
+ On the first run, the CLI opens `dashboard.remotedraw.com` and displays a
32
+ short confirmation code. Approve that code in the browser, then return to the
33
+ terminal. The setup wizard will help you choose a target, sender experience,
34
+ SDK, and starter preset before it writes anything.
35
+
36
+ To see the available integration paths without starting the wizard:
37
+
38
+ ```sh
39
+ remotedraw guide
40
+ ```
41
+
42
+ ## Create a new app
43
+
44
+ Start the interactive project creator:
45
+
46
+ ```sh
47
+ remotedraw new
48
+ ```
49
+
50
+ Or provide the setup choices directly:
51
+
52
+ ```sh
53
+ remotedraw new \
54
+ --app-name MyApp \
55
+ --target web \
56
+ --sender remotedraw-ios \
57
+ --sdk react
58
+ ```
59
+
60
+ ## Add RemoteDraw to an existing app
61
+
62
+ Run `init` from the project you want to update:
63
+
64
+ ```sh
65
+ cd my-existing-app
66
+ remotedraw init
67
+ ```
68
+
69
+ You can also choose the integration explicitly:
70
+
71
+ ```sh
72
+ remotedraw init \
73
+ --target web \
74
+ --sender embedded-web \
75
+ --sdk react
76
+ ```
77
+
78
+ Before writing, the interactive flow shows a review and asks for explicit
79
+ confirmation. Existing files are protected unless you intentionally pass
80
+ `--force`.
81
+
82
+ ## Check an integration
83
+
84
+ Use `doctor` after setup or when troubleshooting:
85
+
86
+ ```sh
87
+ remotedraw doctor
41
88
  ```
42
89
 
43
- `--non-interactive` guarantees that setup never opens prompts or browser
44
- authorization. JSON dry runs return the resolved plan, applied defaults, file
45
- list, warnings, cloud mode, and next commands. Remove `--dry-run` only after
46
- inspecting that result; `--force` remains an explicit overwrite decision.
90
+ It checks the project configuration, installed packages, environment values,
91
+ the installed CLI version, and—when credentials are available—the RemoteDraw
92
+ API connection.
47
93
 
48
- By default, `new` and `init` also create a project on the RemoteDraw backend,
49
- mint a project-scoped development API key, and write these server-side values
50
- to a gitignored `.env.local`:
94
+ Without an override, commands talk to `https://api.remotedraw.com`. Doctor
95
+ prints the API base URL it resolved and where that value came from, so a
96
+ `.env.local` pointing at a non-production deployment is visible rather than
97
+ silent.
98
+
99
+ ## Update the CLI
100
+
101
+ `npm install -g` pins the version it installed and never revisits it, so a
102
+ global RemoteDraw CLI stays on whatever release you first installed:
103
+
104
+ ```sh
105
+ remotedraw update # install the latest published version
106
+ remotedraw update --check # report it without installing
107
+ ```
108
+
109
+ `update` detects whether the binary came from npm, pnpm, yarn, or bun and runs
110
+ that package manager. Other commands check the registry at most once a day and
111
+ print a one-line notice when a newer version exists; that notice only appears on
112
+ an interactive terminal, and `REMOTEDRAW_CLI_NO_UPDATE_CHECK=1`, `CI`, or
113
+ `NO_UPDATE_NOTIFIER` disable it.
114
+
115
+ Useful account commands:
116
+
117
+ ```sh
118
+ remotedraw login
119
+ remotedraw whoami
120
+ remotedraw logout
121
+ ```
122
+
123
+ ## Generated files and credentials
124
+
125
+ Depending on your selected integration, `new` and `init` create or update:
126
+
127
+ - `remotedraw.config.json`
128
+ - `.env.example`
129
+ - `.env.local`
130
+ - starter files under `src/remotedraw`
131
+
132
+ The generated `.env.local` contains the project runtime values and should stay
133
+ gitignored:
51
134
 
52
135
  ```dotenv
53
136
  REMOTEDRAW_API_BASE_URL=https://api.remotedraw.com
@@ -55,25 +138,82 @@ REMOTEDRAW_PROJECT_ID=...
55
138
  REMOTEDRAW_API_KEY=rd_sk_...
56
139
  ```
57
140
 
58
- The account-level `rd_cli_...` credential is separate: it is stored with mode
59
- `0600` in the user's config directory (`$XDG_CONFIG_HOME/remotedraw/config.json`
60
- or `~/.config/remotedraw/config.json`) and never copied into a project. Use
61
- `remotedraw logout` to revoke it. For CI, provide `REMOTEDRAW_CLI_TOKEN` as a
62
- secret. Use `--offline` when only local scaffolding is wanted.
141
+ The account-level `rd_cli_...` credential is stored separately with restricted
142
+ file permissions in `$XDG_CONFIG_HOME/remotedraw/config.json` or
143
+ `~/.config/remotedraw/config.json`. It is never copied into a project. Run
144
+ `remotedraw logout` to revoke and remove it.
63
145
 
64
- Like the Convex CLI, RemoteDraw reads generated runtime values back from
65
- `.env.local`, so `remotedraw doctor` and `remotedraw create-input --execute`
66
- work without manually exporting them in the shell.
146
+ Use `--offline` when you only want local scaffolding and do not want to create a
147
+ RemoteDraw cloud project.
67
148
 
68
- ## Agent Skill
149
+ ## Automation and coding agents
69
150
 
70
- Print or install the RemoteDraw agent skill:
151
+ CI and coding agents should use the machine-readable, non-interactive flow:
152
+
153
+ ```sh
154
+ remotedraw options --format json
155
+
156
+ remotedraw new \
157
+ --non-interactive \
158
+ --offline \
159
+ --dry-run \
160
+ --format json \
161
+ --app-name AgentDesk \
162
+ --target web \
163
+ --sender remotedraw-ios \
164
+ --sdk react \
165
+ --preset sketch \
166
+ --package-manager npm
167
+
168
+ remotedraw doctor --format json
169
+ ```
170
+
171
+ `--non-interactive` prevents prompts and browser authorization. JSON dry runs
172
+ return the resolved plan, defaults, files, warnings, cloud mode, and suggested
173
+ next commands. Inspect the result before rerunning without `--dry-run`.
174
+
175
+ For authenticated CI provisioning, provide `REMOTEDRAW_CLI_TOKEN` as a secret.
176
+
177
+ The CLI can also print or install the RemoteDraw skill for coding agents:
71
178
 
72
179
  ```sh
73
180
  remotedraw agent --print-skill
74
181
  remotedraw agent --path ~/.codex/skills/remotedraw --force
75
182
  ```
76
183
 
77
- The skill teaches coding agents the CLI-first integration flow, SDK choices,
78
- API key boundary, token lifecycle, structured dry-run workflow, and
79
- verification commands.
184
+ ## Command reference
185
+
186
+ ```text
187
+ guide Choose an integration path and SDK.
188
+ options Print setup choices and compatibility metadata.
189
+ login Authorize this computer through the dashboard.
190
+ logout Revoke and remove this computer's CLI credential.
191
+ whoami Show the signed-in RemoteDraw account.
192
+ new Create a new app with RemoteDraw starter code.
193
+ init Add RemoteDraw starter code to an existing project.
194
+ dev Print the local sandbox workflow for an integration.
195
+ doctor Check project config, packages, and environment variables.
196
+ create-input Create or print a test input request payload.
197
+ examples List or install example projects.
198
+ agent Print or install the RemoteDraw agent skill.
199
+ ```
200
+
201
+ Run `remotedraw <command> --help` for command-specific options.
202
+
203
+ ## Links
204
+
205
+ - [RemoteDraw documentation](https://docs.remotedraw.com)
206
+ - [API dashboard](https://dashboard.remotedraw.com)
207
+ - [Support](mailto:support@remotedraw.com)
208
+
209
+ ## Contributing
210
+
211
+ This section is for contributors working inside the RemoteDraw repository:
212
+
213
+ ```sh
214
+ bun install
215
+ bun run cli -- --help
216
+ cd packages/cli
217
+ bun run verify:publish
218
+ npm pack --dry-run
219
+ ```
package/dist/cli.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  import { type WizardDefinition, type WizardTerminal } from "./setup-wizard.js";
2
2
  import { type CloudRuntime } from "./cloud.js";
3
+ import { type UpdateRuntime } from "./update.js";
3
4
  export declare const CLI_VERSION: string;
4
5
  export type CliResult = {
5
6
  exitCode: number;
@@ -27,8 +28,10 @@ export type CliPrompter = {
27
28
  text: (options: TextPromptOptions) => Promise<string>;
28
29
  select: <T extends string>(options: SelectPromptOptions<T>) => Promise<T>;
29
30
  };
30
- export type CliRuntime = CloudRuntime & {
31
+ export type CliRuntime = CloudRuntime & UpdateRuntime & {
31
32
  cwd: string;
33
+ /** Absolute path of the running binary; drives update-command detection. */
34
+ binPath?: string;
32
35
  prompts?: CliPrompter;
33
36
  wizardTerminal?: WizardTerminal | undefined;
34
37
  };
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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"}