@rubytech/create-realagent 1.0.623 → 1.0.625
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/anthropic-key/dist/index.d.ts +1 -0
- package/payload/platform/lib/anthropic-key/dist/index.d.ts.map +1 -1
- package/payload/platform/lib/anthropic-key/dist/index.js +30 -0
- package/payload/platform/lib/anthropic-key/dist/index.js.map +1 -1
- package/payload/platform/plugins/admin/mcp/dist/index.js +21 -8
- package/payload/platform/plugins/admin/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/admin/skills/onboarding/SKILL.md +9 -12
- package/payload/platform/plugins/cloudflare/PLUGIN.md +31 -44
- package/payload/platform/plugins/cloudflare/mcp/dist/index.js +13 -875
- package/payload/platform/plugins/cloudflare/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/cloudflare/mcp/dist/lib/cloudflared.d.ts.map +1 -1
- package/payload/platform/plugins/cloudflare/mcp/dist/lib/cloudflared.js +1 -0
- package/payload/platform/plugins/cloudflare/mcp/dist/lib/cloudflared.js.map +1 -1
- package/payload/platform/plugins/cloudflare/references/dashboard-guide.md +108 -0
- package/payload/platform/plugins/cloudflare/references/manual-setup.md +445 -0
- package/payload/platform/plugins/cloudflare/references/reset-guide.md +118 -0
- package/payload/platform/plugins/cloudflare/scripts/reset-tunnel.sh +65 -0
- package/payload/platform/plugins/cloudflare/scripts/setup-tunnel.sh +244 -0
- package/payload/platform/plugins/cloudflare/skills/setup-tunnel/SKILL.md +96 -5
- package/payload/platform/plugins/docs/references/cloudflare.md +91 -34
- package/payload/platform/templates/agents/admin/IDENTITY.md +10 -4
- package/payload/platform/templates/specialists/agents/personal-assistant.md +9 -9
- package/payload/server/server.js +206 -298
- package/payload/platform/config/cloudflared.yml +0 -17
- package/payload/platform/plugins/cloudflare/references/setup-guide.md +0 -132
package/package.json
CHANGED
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
export declare function readKey(): string | null;
|
|
12
12
|
export declare function writeKey(key: string): void;
|
|
13
13
|
export declare function hasKey(): boolean;
|
|
14
|
+
export declare function deleteKey(): void;
|
|
14
15
|
export type KeyStatus = "valid" | "billing" | "auth_error" | "missing" | "error";
|
|
15
16
|
export interface KeyValidation {
|
|
16
17
|
status: KeyStatus;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAoEH,wBAAgB,OAAO,IAAI,MAAM,GAAG,IAAI,CAiDvC;AAMD,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAiB1C;AAMD,wBAAgB,MAAM,IAAI,OAAO,CAEhC;AAaD,wBAAgB,SAAS,IAAI,IAAI,CAsBhC;AAUD,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,YAAY,GAAG,SAAS,GAAG,OAAO,CAAC;AAEjF,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,SAAS,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAsB,WAAW,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAsFtE;AAOD,wBAAgB,WAAW,IAAI,MAAM,CAEpC"}
|
|
@@ -13,6 +13,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
13
13
|
exports.readKey = readKey;
|
|
14
14
|
exports.writeKey = writeKey;
|
|
15
15
|
exports.hasKey = hasKey;
|
|
16
|
+
exports.deleteKey = deleteKey;
|
|
16
17
|
exports.validateKey = validateKey;
|
|
17
18
|
exports.keyFilePath = keyFilePath;
|
|
18
19
|
const index_js_1 = require("../../models/dist/index.js");
|
|
@@ -125,6 +126,35 @@ function writeKey(key) {
|
|
|
125
126
|
function hasKey() {
|
|
126
127
|
return readKey() !== null;
|
|
127
128
|
}
|
|
129
|
+
// ---------------------------------------------------------------------------
|
|
130
|
+
// deleteKey — remove the stored key file; idempotent on ENOENT
|
|
131
|
+
//
|
|
132
|
+
// Throws on unexpected fs errors (EACCES, EBUSY, EPERM) so callers can
|
|
133
|
+
// surface a structured failure. ENOENT is treated as a no-op because the
|
|
134
|
+
// intended post-condition ("no key file on disk") is already satisfied.
|
|
135
|
+
// Per Task 531 learning, never use `{ force: true }` — it swallows the
|
|
136
|
+
// error classes that matter (permission, busy) and leaves the caller
|
|
137
|
+
// believing removal succeeded.
|
|
138
|
+
// ---------------------------------------------------------------------------
|
|
139
|
+
function deleteKey() {
|
|
140
|
+
const keyFilePath = resolveKeyFilePath();
|
|
141
|
+
try {
|
|
142
|
+
(0, node_fs_1.unlinkSync)(keyFilePath);
|
|
143
|
+
console.error(`[anthropic-key] deleteKey: removed ${keyFilePath}`);
|
|
144
|
+
}
|
|
145
|
+
catch (err) {
|
|
146
|
+
const code = err instanceof Error && "code" in err
|
|
147
|
+
? err.code
|
|
148
|
+
: undefined;
|
|
149
|
+
if (code === "ENOENT") {
|
|
150
|
+
console.error(`[anthropic-key] deleteKey: nothing to remove (ENOENT): ${keyFilePath}`);
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
154
|
+
console.error(`[anthropic-key] deleteKey: failed to remove ${keyFilePath}: ${msg}`);
|
|
155
|
+
throw err;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
128
158
|
async function validateKey(key) {
|
|
129
159
|
const effectiveKey = key ?? readKey();
|
|
130
160
|
if (!effectiveKey) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,7 +7,7 @@ import { readFile, writeFile } from "node:fs/promises";
|
|
|
7
7
|
import { resolve, join } from "node:path";
|
|
8
8
|
import { execFileSync } from "node:child_process";
|
|
9
9
|
import { cpSync, existsSync, mkdirSync, readdirSync, readFileSync, renameSync, statSync, writeFileSync } from "node:fs";
|
|
10
|
-
import { writeKey, validateKey, hasKey, keyFilePath } from "../../../../lib/anthropic-key/dist/index.js";
|
|
10
|
+
import { writeKey, validateKey, hasKey, keyFilePath, deleteKey } from "../../../../lib/anthropic-key/dist/index.js";
|
|
11
11
|
import { deviceUrlBlock } from "../../../../lib/device-url/dist/index.js";
|
|
12
12
|
import { createHash, randomInt, randomUUID } from "node:crypto";
|
|
13
13
|
import { createConnection } from "node:net";
|
|
@@ -1240,7 +1240,7 @@ server.tool("remote-auth-set-password", "NEVER collect a password in chat — pa
|
|
|
1240
1240
|
"Hashes with scrypt and writes to the platform's brand-specific config directory. " +
|
|
1241
1241
|
"The remote access password protects the admin interface when accessed over the internet — " +
|
|
1242
1242
|
"it has no effect on the public endpoint or the tunnel itself. " +
|
|
1243
|
-
"tunnel-
|
|
1243
|
+
"Set this before invoking setup-tunnel.sh; the script's post-restart verification curls the admin hostname, which fails unless the remote-auth gate is configured (admin must not be exposed unauthenticated).", { password: z.string() }, async ({ password }) => {
|
|
1244
1244
|
const trimmed = password.trim();
|
|
1245
1245
|
// Validate strength — same rules as the web server's validatePasswordStrength
|
|
1246
1246
|
const checks = [
|
|
@@ -1421,12 +1421,25 @@ server.tool("anthropic-setup", "Deterministic state machine for Anthropic API ke
|
|
|
1421
1421
|
data: { url: `${CONSOLE_BASE}/settings/billing` },
|
|
1422
1422
|
});
|
|
1423
1423
|
case "auth_error":
|
|
1424
|
-
|
|
1425
|
-
|
|
1426
|
-
|
|
1427
|
-
|
|
1428
|
-
|
|
1429
|
-
|
|
1424
|
+
// Deterministic transition: the state machine knows the key file
|
|
1425
|
+
// path and the only recovery is to delete and restart sign-in.
|
|
1426
|
+
// Auto-reset here so the agent never has to rediscover the path
|
|
1427
|
+
// via filesystem probes.
|
|
1428
|
+
log(`auth_error → auto-resetting: deleting revoked key at ${keyFilePath()}`);
|
|
1429
|
+
try {
|
|
1430
|
+
deleteKey();
|
|
1431
|
+
}
|
|
1432
|
+
catch (err) {
|
|
1433
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
1434
|
+
log(`auto-reset failed: ${msg}`);
|
|
1435
|
+
return anthropicResult({
|
|
1436
|
+
status: "error",
|
|
1437
|
+
message: `The stored API key was rejected and auto-reset failed: ${msg}. ` +
|
|
1438
|
+
`Manual intervention needed — remove ${keyFilePath()} and call this tool again.`,
|
|
1439
|
+
});
|
|
1440
|
+
}
|
|
1441
|
+
// Fall through to the awaiting_signin path below.
|
|
1442
|
+
break;
|
|
1430
1443
|
case "missing":
|
|
1431
1444
|
// hasKey() returned true but readKey() returned null — shouldn't happen
|
|
1432
1445
|
log("hasKey true but validate returned missing — proceeding to setup");
|