@rubytech/create-realagent 1.0.619 → 1.0.621
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/package.json +1 -1
- package/payload/platform/lib/mcp-stderr-tee/dist/index.d.ts.map +1 -1
- package/payload/platform/lib/mcp-stderr-tee/dist/index.js +11 -5
- package/payload/platform/lib/mcp-stderr-tee/dist/index.js.map +1 -1
- package/payload/platform/lib/mcp-stderr-tee/src/index.ts +10 -5
- package/payload/platform/plugins/admin/skills/onboarding/SKILL.md +11 -7
- package/payload/platform/plugins/cloudflare/PLUGIN.md +10 -13
- package/payload/platform/plugins/cloudflare/mcp/dist/index.js +181 -1033
- package/payload/platform/plugins/cloudflare/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/cloudflare/mcp/dist/lib/cloudflared.d.ts +117 -261
- package/payload/platform/plugins/cloudflare/mcp/dist/lib/cloudflared.d.ts.map +1 -1
- package/payload/platform/plugins/cloudflare/mcp/dist/lib/cloudflared.js +379 -903
- package/payload/platform/plugins/cloudflare/mcp/dist/lib/cloudflared.js.map +1 -1
- package/payload/platform/plugins/cloudflare/mcp/package.json +3 -7
- package/payload/platform/plugins/cloudflare/references/setup-guide.md +70 -76
- package/payload/platform/plugins/cloudflare/skills/setup-tunnel/SKILL.md +34 -82
- package/payload/platform/plugins/docs/PLUGIN.md +1 -1
- package/payload/platform/plugins/docs/references/cloudflare.md +21 -30
- package/payload/platform/templates/agents/admin/IDENTITY.md +8 -0
- package/payload/platform/templates/agents/public/IDENTITY.md +8 -0
- package/payload/platform/templates/specialists/agents/personal-assistant.md +9 -9
- package/payload/server/server.js +85 -9
- package/payload/platform/plugins/cloudflare/mcp/__tests__/auth-binding.test.ts +0 -195
package/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAeH;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAeH;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CA8ItD"}
|
|
@@ -172,12 +172,18 @@ function initStderrTee(serverName) {
|
|
|
172
172
|
// Mark the patch so a second initStderrTee() call is refused at the top.
|
|
173
173
|
process.stderr.write[INIT_MARKER] = true;
|
|
174
174
|
// Flush any trailing unterminated segment on graceful event-loop drain.
|
|
175
|
-
// `beforeExit`
|
|
176
|
-
//
|
|
177
|
-
//
|
|
178
|
-
//
|
|
179
|
-
//
|
|
175
|
+
// `beforeExit` can fire repeatedly: each async write to `streamLogStream`
|
|
176
|
+
// schedules I/O that keeps the event loop alive, which drains, which fires
|
|
177
|
+
// `beforeExit` again. With N MCP servers attached, the handler can emit
|
|
178
|
+
// thousands of detach lines per second. The `detached` flag gates the
|
|
179
|
+
// drain+detach emission to a single invocation; subsequent firings are
|
|
180
|
+
// no-ops. Buffer flushing also runs only once — partial-line state at true
|
|
181
|
+
// process exit doesn't change across re-fires.
|
|
182
|
+
let detached = false;
|
|
180
183
|
process.on("beforeExit", () => {
|
|
184
|
+
if (detached)
|
|
185
|
+
return;
|
|
186
|
+
detached = true;
|
|
181
187
|
if (streamLogStream && !streamLogStream.destroyed && !streamLogStream.writableEnded) {
|
|
182
188
|
if (lineBuffer.length > 0) {
|
|
183
189
|
streamLogStream.write(`${tsPrefix()} [mcp:${serverName}] ${lineBuffer}\n`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;;AA8BH,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -184,12 +184,17 @@ export function initStderrTee(serverName: string): void {
|
|
|
184
184
|
(process.stderr.write as unknown as { [k: symbol]: boolean })[INIT_MARKER] = true;
|
|
185
185
|
|
|
186
186
|
// Flush any trailing unterminated segment on graceful event-loop drain.
|
|
187
|
-
// `beforeExit`
|
|
188
|
-
//
|
|
189
|
-
//
|
|
190
|
-
//
|
|
191
|
-
//
|
|
187
|
+
// `beforeExit` can fire repeatedly: each async write to `streamLogStream`
|
|
188
|
+
// schedules I/O that keeps the event loop alive, which drains, which fires
|
|
189
|
+
// `beforeExit` again. With N MCP servers attached, the handler can emit
|
|
190
|
+
// thousands of detach lines per second. The `detached` flag gates the
|
|
191
|
+
// drain+detach emission to a single invocation; subsequent firings are
|
|
192
|
+
// no-ops. Buffer flushing also runs only once — partial-line state at true
|
|
193
|
+
// process exit doesn't change across re-fires.
|
|
194
|
+
let detached = false;
|
|
192
195
|
process.on("beforeExit", () => {
|
|
196
|
+
if (detached) return;
|
|
197
|
+
detached = true;
|
|
193
198
|
if (streamLogStream && !streamLogStream.destroyed && !streamLogStream.writableEnded) {
|
|
194
199
|
if (lineBuffer.length > 0) {
|
|
195
200
|
streamLogStream.write(`${tsPrefix()} [mcp:${serverName}] ${lineBuffer}\n`);
|
|
@@ -127,15 +127,19 @@ Ask the user: "Would you like to set up remote access now? This connects your pl
|
|
|
127
127
|
|
|
128
128
|
If the user skips, let them know they can set up Cloudflare at any time by asking. Also mention that remote access is still possible without Cloudflare — WhatsApp, Telegram, and Email channels all connect directly to the device, so the user (and their customers) can reach the agent from anywhere through those channels without needing a tunnel or custom domain. Call `onboarding-complete-step` with step 7.
|
|
129
129
|
|
|
130
|
-
If the user wants to proceed,
|
|
130
|
+
If the user wants to proceed, coach them through the dashboard — the agent never reads Cloudflare account state. The operator's logged-in dashboard is the source of truth; this step's job is to get them signed in on the correct account and then run `cloudflared` against that sign-in.
|
|
131
131
|
|
|
132
|
-
|
|
133
|
-
- `
|
|
134
|
-
|
|
135
|
-
- `
|
|
136
|
-
|
|
132
|
+
1. Ask: "What domain do you want to use, and is it already on Cloudflare?" If the domain is already on their Cloudflare account, skip to step 3.
|
|
133
|
+
2. If not: call `render-component` with `name: "browser-viewer"` and `data: { title: "Cloudflare" }`, then `browser_navigate` to `https://dash.cloudflare.com/`. Tell the user: "Open Cloudflare, go to Websites → Add a site, enter your domain, and follow the instructions. Cloudflare will give you two nameservers to set at your domain registrar — the page walks you through it. When the domain shows as Active in the dashboard (minutes to 24 hours), tell me."
|
|
134
|
+
3. Call `tunnel-login`. Relay the sign-in URL to the user: "Open this URL in your browser, pick the Cloudflare account that owns your domain (the name shows in the top-left of Cloudflare), and click Authorize. Tell me when you are done." When they confirm, call `tunnel-login` again — it will detect the completed sign-in and record it.
|
|
135
|
+
4. Ask for the sub-addresses (defaults: `admin` and `public`). Call `tunnel-create` with the domain and sub-addresses.
|
|
136
|
+
5. If `tunnel-create` returns a refusal message about the Cloudflare account not owning the domain, relay the message verbatim (it contains the dashboard instructions). When the user confirms they have switched accounts in the browser, call `tunnel-login` with `force=true`, wait for the fresh sign-in, then retry `tunnel-create`.
|
|
137
|
+
6. Set the remote password. Relay the URL from `tunnel-create`'s response (wrap it in backticks — `/__remote-auth/setup` contains double-underscores). When the user confirms, continue.
|
|
138
|
+
7. Call `tunnel-enable`. If it succeeds, call `onboarding-complete-step` with step 7.
|
|
139
|
+
|
|
140
|
+
If any step fails, relay the error message verbatim. Offer to try again or skip.
|
|
137
141
|
|
|
138
|
-
Do not read any skill files. Do not
|
|
142
|
+
Do not read any skill files. Do not dispatch specialists. The cloudflare plugin's tools handle all the mechanics.
|
|
139
143
|
|
|
140
144
|
## Step 8 — Anthropic API key
|
|
141
145
|
|
|
@@ -1,12 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: cloudflare
|
|
3
|
-
description: Cloudflare Tunnel setup and management —
|
|
3
|
+
description: Cloudflare Tunnel setup and management — the dashboard is the source of truth, the agent executes cloudflared CLI only
|
|
4
4
|
tools:
|
|
5
|
-
- cloudflare-setup
|
|
6
|
-
- cf-add-zone
|
|
7
|
-
- cf-zone-status
|
|
8
|
-
- cf-verify
|
|
9
|
-
- cf-rebuild
|
|
10
5
|
- tunnel-login
|
|
11
6
|
- tunnel-status
|
|
12
7
|
- tunnel-install
|
|
@@ -19,14 +14,16 @@ tools:
|
|
|
19
14
|
|
|
20
15
|
# Cloudflare Tunnel Setup
|
|
21
16
|
|
|
22
|
-
Each installation has its own Cloudflare account
|
|
17
|
+
Each installation has its own Cloudflare account. The operator signs in with OAuth (`tunnel-login`) — `cloudflared` writes `cert.pem` and the plugin records which Cloudflare account this laptop is signed into (`account-binding.json`). That binding is a drift detector only: if the operator later signs in under a different account, subsequent tool calls refuse and point the operator back to the browser.
|
|
18
|
+
|
|
19
|
+
The Cloudflare dashboard is the single source of truth for which domains, addresses, and tunnels exist on the account. The plugin never reads or mutates account state via any API path — only `cloudflared` CLI shell-outs (which use the signed-in cert locally) and DNS + HTTPS probes against public surfaces. When something is wrong, the agent tells the operator where to click in the dashboard; the operator clicks; then the agent runs the next `cloudflared` command.
|
|
23
20
|
|
|
24
21
|
## When to activate
|
|
25
22
|
|
|
26
|
-
-
|
|
27
|
-
-
|
|
28
|
-
-
|
|
29
|
-
-
|
|
23
|
+
- Operator mentions Cloudflare, custom domain, public access, or internet access
|
|
24
|
+
- Operator wants to expose the assistant publicly with a custom URL
|
|
25
|
+
- Operator asks about setting up remote access with a custom domain
|
|
26
|
+
- Operator says "set up Cloudflare" or similar
|
|
30
27
|
|
|
31
28
|
## What it unlocks
|
|
32
29
|
|
|
@@ -39,12 +36,12 @@ Each installation has its own Cloudflare account, owned by the user, accessed vi
|
|
|
39
36
|
|
|
40
37
|
| Skill | Purpose |
|
|
41
38
|
|-------|---------|
|
|
42
|
-
| [setup-tunnel/SKILL.md](skills/setup-tunnel/SKILL.md) |
|
|
39
|
+
| [setup-tunnel/SKILL.md](skills/setup-tunnel/SKILL.md) | Dashboard-driven tunnel setup flow — the agent is the coach, the operator clicks |
|
|
43
40
|
|
|
44
41
|
## References
|
|
45
42
|
|
|
46
43
|
| Reference | Topics |
|
|
47
44
|
|-----------|--------|
|
|
48
|
-
| [setup-guide.md](references/setup-guide.md) | Prerequisites, domain setup, troubleshooting, tool reference |
|
|
45
|
+
| [setup-guide.md](references/setup-guide.md) | Prerequisites, domain setup in the dashboard, troubleshooting, tool reference |
|
|
49
46
|
|
|
50
47
|
Load the relevant skill or reference based on the task.
|