rootr-cli 0.26.0 → 0.29.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.ko.md +38 -1
- package/README.md +40 -2
- package/bin/rootr.js +422 -9
- package/lib/client.js +78 -1
- package/lib/domain-billing.js +52 -0
- package/lib/mcp-tools/databases.js +110 -5
- package/lib/mcp-tools/documents.js +17 -1
- package/lib/mcp-tools/domains.js +236 -0
- package/lib/mcp-tools/forms.js +20 -2
- package/lib/mcp-tools/public.js +13 -0
- package/lib/mcp-tools/workspaces.js +63 -1
- package/lib/mcp.js +2 -0
- package/package.json +1 -1
package/README.ko.md
CHANGED
|
@@ -331,6 +331,33 @@ stdout 과 `--json` 출력은 그대로입니다. 끄려면 `ROOTR_MAIL_NOTICE=0
|
|
|
331
331
|
키마다 한 번 붙입니다. 웹훅 요청은 서명되어 있습니다 — `add` 때 한 번 보이는 비밀값으로
|
|
332
332
|
`X-Rootr-Signature: sha256=HMAC_SHA256(secret, 원문)` 을 확인하세요. 몸통에는 문서 내용이 없습니다(`apiUrl` 을 부르세요).
|
|
333
333
|
|
|
334
|
+
### 내 도메인 연결 (domain)
|
|
335
|
+
|
|
336
|
+
발행한 페이지(PAGE)를 내 도메인(`www.회사.co.kr`)에서 보통 홈페이지처럼 엽니다 — 첫 화면은 그 페이지, `/{하위}` 는
|
|
337
|
+
공개된 하위 페이지, 루터 서명은 붙지 않습니다. Team 플랜부터, 워크스페이스 관리자만 됩니다.
|
|
338
|
+
|
|
339
|
+
- **무료 주소** `이름.rootr.site` — 결제·DNS 없이 바로 열립니다(워크스페이스당 3개, 영어 소문자·숫자·하이픈 3~30자, `www`·`api`·`admin` 같은 이름과 `rootr` 가 들어간 이름은 예약).
|
|
340
|
+
- **내 도메인** — 1개당 월 $10, 연 결제 시 월 $8(연 $96). "도메인 연결" 애드온의 자리를 하나 씁니다. 자리가 없으면
|
|
341
|
+
`402`(결제 필요)와 함께 설정 › 결제 주소를 알려 줍니다. 애드온이 있는데 꽉 찼으면 `--confirm-charge` 로 1개를 더 삽니다(일할 계산).
|
|
342
|
+
해제하면 수량이 줄고(일할 환불), 마지막 하나면 이번 주기 끝에 애드온이 끝나도록 예약됩니다.
|
|
343
|
+
|
|
344
|
+
```bash
|
|
345
|
+
rootr domain detect www.회사.co.kr # DNS 를 어디서 관리하는지(가비아·카페24·Cloudflare…) + 단계 안내
|
|
346
|
+
rootr domain add www.회사.co.kr /홈페이지 # 등록 — 넣을 한 줄과 그 업체 화면 기준 단계가 나온다
|
|
347
|
+
rootr domain add --subdomain acme /홈페이지 # 무료 주소 acme.rootr.site — 바로 열린다
|
|
348
|
+
rootr domain available acme # 무료 주소 이름을 쓸 수 있는지
|
|
349
|
+
rootr domain check <id> # 지금 다시 확인(연결 전이면 exit 2)
|
|
350
|
+
rootr domain list # 종류·상태(DNS 확인 중 / 인증서 발급 중 / 연결됨 / 일시 중지) + 자리 사용
|
|
351
|
+
rootr domain rename <id> www.right.co.kr # 연결 전 도메인의 이름 바꾸기(결제 그대로, 새 id)
|
|
352
|
+
rootr domain remove <id> # 연결 해제(업체 DNS 의 CNAME 줄도 지우세요)
|
|
353
|
+
```
|
|
354
|
+
|
|
355
|
+
고객이 넣는 것은 **딱 한 줄**입니다: 타입 `CNAME`, 이름 `www`, 값 `connect.rootr.site`. 그다음 HTTPS 인증서는
|
|
356
|
+
루터가 알아서 발급하고 5분마다 다시 확인합니다 — 연결되면 등록한 사람에게 알림과 메일이 갑니다. 루트 도메인
|
|
357
|
+
(`회사.co.kr`)에는 CNAME 을 못 거는 곳이 많아 `www.` 으로 연결하고 루트는 포워딩합니다(업체별 방법이 안내에 나옵니다).
|
|
358
|
+
같은 주소를 **다른 워크스페이스가 전에 등록했던** 경우에만 소유 확인 줄(`TXT`, 이름 `_rootr-verify.www`)이 하나 더 필요합니다 —
|
|
359
|
+
남겨 둔 CNAME 으로 남의 도메인을 가로채지 못하게.
|
|
360
|
+
|
|
334
361
|
### 제보 보내기 (feedback)
|
|
335
362
|
|
|
336
363
|
```bash
|
|
@@ -378,7 +405,7 @@ rootr memory forget <id> # 폐기(--hard면 행 삭제)
|
|
|
378
405
|
|
|
379
406
|
## MCP 서버로 사용하기
|
|
380
407
|
|
|
381
|
-
`rootr mcp`는 stdio로 MCP(Model Context Protocol) 서버를 구동합니다. 제공 도구
|
|
408
|
+
`rootr mcp`는 stdio로 MCP(Model Context Protocol) 서버를 구동합니다. 제공 도구 214종:
|
|
382
409
|
|
|
383
410
|
노드를 가리키는 인자(`target`, `databaseId`, `spreadsheetId`, `formId`, `crmId`, `trackerId`,
|
|
384
411
|
`recordingId`, `presentationId`, `whiteboardId`, `logId`, `parentId` 등)는 **노드 id와 경로를 모두**
|
|
@@ -843,6 +870,16 @@ rootr db column <표> 특이사항 --wrap on --align center # 긴 글 줄바꿈
|
|
|
843
870
|
| `rootr_remove_doc_mail_webhook` | 내 받은 문서 웹훅 지우기 |
|
|
844
871
|
| `rootr_test_doc_mail_webhook` | 시험 전송(doc_mail.test) 후 전달 결과 |
|
|
845
872
|
|
|
873
|
+
#### 내 도메인 연결 (워크스페이스 관리자, Team 플랜)
|
|
874
|
+
|
|
875
|
+
| 도구 | 설명 |
|
|
876
|
+
|---|---|
|
|
877
|
+
| `rootr_list_custom_domains` | 워크스페이스의 도메인 목록 — 종류(내 도메인·무료 주소)·상태·가리키는 페이지·넣을 DNS 줄·사이트 주소 + 자리 요약(`slots`) |
|
|
878
|
+
| `rootr_add_custom_domain` | 발행한 페이지를 내 도메인으로 연결 — 넣을 한 줄 + 이름서버로 짚은 업체(가비아·카페24·Cloudflare…)의 단계 안내(`instructions`). `subdomain` 이면 무료 주소(바로 열림), 자리가 꽉 찼으면 사람 동의 뒤 `confirmCharge: true` |
|
|
879
|
+
| `rootr_check_custom_domain` | 지금 다시 확인 — DNS·인증서 상태와 쉬운 말 사유 |
|
|
880
|
+
| `rootr_rename_custom_domain` | 연결 전 내 도메인의 이름 바꾸기(결제 자리는 새 이름으로 옮겨 감) |
|
|
881
|
+
| `rootr_remove_custom_domain` | 연결 해제(인증서 호스트도 바로 지움) |
|
|
882
|
+
|
|
846
883
|
문서함은 워크스페이스가 아니라 **사람(이메일)**에 붙습니다. 사람 없는 워크스페이스 키(원격 커넥터)는
|
|
847
884
|
그 키를 만든 구성원으로 동작합니다.
|
|
848
885
|
|
package/README.md
CHANGED
|
@@ -11,7 +11,7 @@ citations back to the exact paragraph.
|
|
|
11
11
|
*(한국어 문서: [README.ko.md](https://github.com/gwmage/rootr-cli/blob/main/README.ko.md))*
|
|
12
12
|
|
|
13
13
|
- `rootr` CLI — documents, databases, forms, signed documents, publishing, permissions, memory
|
|
14
|
-
- `rootr mcp` — stdio MCP server, **
|
|
14
|
+
- `rootr mcp` — stdio MCP server, **214 tools** (see [MCP tools](#mcp-tools))
|
|
15
15
|
|
|
16
16
|
Plain Node.js ESM, no build step. Node 18+ (uses the built-in `fetch`).
|
|
17
17
|
|
|
@@ -256,8 +256,14 @@ rootr form mapping /intake/request # which column each questi
|
|
|
256
256
|
rootr form mapping /intake/request --set '{"f_name":"p_title"}'
|
|
257
257
|
rootr form responses /intake/request --latest # --latest = newest one per person
|
|
258
258
|
rootr form response-edit <responseId> --values '{"Email":"a@b.com"}'
|
|
259
|
+
rootr form submit /intake/request --values '{"f_email":"a@b.com"}' \
|
|
260
|
+
--files '{"Portfolio":["a.pdf","b.png"]}' # uploads each file, then submits
|
|
259
261
|
```
|
|
260
262
|
|
|
263
|
+
A `file` question takes one file unless it has `"multiple": true` (add `"maxFiles": 5`
|
|
264
|
+
to cap it, default 10); then the answer is an array. `"allowImages": true` on a
|
|
265
|
+
`text`/`textarea` question lets respondents put images inside their answer.
|
|
266
|
+
|
|
261
267
|
Run `form mapping` right after pointing a form at a hand-built table. Answers reach the
|
|
262
268
|
table by matching the question name to the column name, so a question the table has no
|
|
263
269
|
column for is **dropped with no error anywhere** — this command is the only place that
|
|
@@ -294,6 +300,37 @@ rootr readreq /handbook/policy.md --users u1,u2 --due 2026-10-01T00:00:00Z --ack
|
|
|
294
300
|
rootr readreq /handbook/policy.md # who has read it, completion rate
|
|
295
301
|
```
|
|
296
302
|
|
|
303
|
+
### Custom domains (your own website address)
|
|
304
|
+
|
|
305
|
+
Open a published PAGE at your own domain (`www.customer.co.kr`) as a normal website — the root shows the
|
|
306
|
+
page, `/{child}` shows its published child pages, and there is no Rootr signature. Team plan and up,
|
|
307
|
+
workspace admins only.
|
|
308
|
+
|
|
309
|
+
- **Free address** `name.rootr.site` — live at once, no DNS and no payment (3 per workspace; lowercase a-z, 0-9 and
|
|
310
|
+
hyphen, 3–30 chars; names like `www`, `api`, `admin` and anything containing `rootr` are reserved).
|
|
311
|
+
- **Your own domain** — $10/month per domain, $8/month billed yearly ($96/year): one slot of the "Custom domain"
|
|
312
|
+
add-on. With no free slot the API answers `402` and points to Settings → Billing; when the add-on exists but is
|
|
313
|
+
full, `--confirm-charge` buys one more slot (prorated). Removing a domain lowers the quantity (prorated credit);
|
|
314
|
+
removing the last one schedules the add-on to end at the end of the billing period.
|
|
315
|
+
|
|
316
|
+
```bash
|
|
317
|
+
rootr domain detect www.customer.co.kr # where is the DNS managed (Gabia, Cafe24, Cloudflare…) + the steps
|
|
318
|
+
rootr domain add www.customer.co.kr /홈페이지 # register; prints the one DNS line and provider-specific steps
|
|
319
|
+
rootr domain add --subdomain acme /홈페이지 # free address acme.rootr.site — live immediately
|
|
320
|
+
rootr domain available acme # is acme.rootr.site free to take
|
|
321
|
+
rootr domain check <id> # re-check now (exit 2 until it is live)
|
|
322
|
+
rootr domain list # kind, status (waiting for DNS / issuing certificate / connected / paused) + slot usage
|
|
323
|
+
rootr domain rename <id> www.right.co.kr # fix the name of a not-yet-live domain (billing unchanged, new id)
|
|
324
|
+
rootr domain remove <id> # disconnect (then remove the CNAME at your provider)
|
|
325
|
+
```
|
|
326
|
+
|
|
327
|
+
The customer adds exactly **one** DNS line: `CNAME`, name `www`, value `connect.rootr.site`. Rootr then
|
|
328
|
+
issues the HTTPS certificate on its own and re-checks every 5 minutes; whoever registered the domain
|
|
329
|
+
gets a notification and an email when it goes live. A bare root domain (`customer.co.kr`) usually
|
|
330
|
+
cannot hold a CNAME — connect `www.` and forward the root to it (the guide shows how for your provider).
|
|
331
|
+
Only when the same name was registered before by a *different* workspace, one extra `TXT` line
|
|
332
|
+
(`_rootr-verify.www`) is required, so nobody can take over a domain whose CNAME was left behind.
|
|
333
|
+
|
|
297
334
|
### Signed documents and research notes
|
|
298
335
|
|
|
299
336
|
A signed document is a markdown document whose body **freezes the moment it is submitted**; the
|
|
@@ -452,7 +489,7 @@ is refused and says when the grace was used.
|
|
|
452
489
|
|
|
453
490
|
## MCP tools
|
|
454
491
|
|
|
455
|
-
`rootr mcp` speaks MCP over stdio.
|
|
492
|
+
`rootr mcp` speaks MCP over stdio. 214 tools:
|
|
456
493
|
|
|
457
494
|
| Group | Count | Tools |
|
|
458
495
|
|---|---|---|
|
|
@@ -478,6 +515,7 @@ is refused and says when the grace was used.
|
|
|
478
515
|
| Visitor booking & Google Calendar | 6 | turn a published table into a booking page, rules, open slots, connect / list / disconnect Google Calendar |
|
|
479
516
|
| Root-cause Q&A | 1 | ask the workspace knowledge graph, answer with citations |
|
|
480
517
|
| Feedback | 1 | send feedback to the Rootr team |
|
|
518
|
+
| Custom domains | 4 | list (with kind + slot usage), add (own domain: the one DNS line + click-by-click steps for the detected DNS provider; `subdomain` for a free name.rootr.site; `confirmCharge` after the person agrees to buy a slot), check now, remove |
|
|
481
519
|
|
|
482
520
|
Two gaps keep breathing room: `bufferMin` around bookings made through the table (CLI `--buffer`) and
|
|
483
521
|
`calendarBufferMin` around events already on the connected Google Calendar, e.g. travel time to an outside
|