@rubytech/create-realagent 1.0.614 → 1.0.616
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/index.js +42 -8
- package/package.json +1 -1
- package/payload/platform/config/brand.json +4 -0
- package/payload/platform/lib/mcp-stderr-tee/dist/index.d.ts +23 -13
- package/payload/platform/lib/mcp-stderr-tee/dist/index.d.ts.map +1 -1
- package/payload/platform/lib/mcp-stderr-tee/dist/index.js +86 -89
- package/payload/platform/lib/mcp-stderr-tee/dist/index.js.map +1 -1
- package/payload/platform/lib/mcp-stderr-tee/src/index.ts +86 -101
- package/payload/platform/plugins/admin/mcp/dist/index.js +33 -2
- package/payload/platform/plugins/admin/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/admin/mcp/dist/lib/review-tools.d.ts.map +1 -1
- package/payload/platform/plugins/admin/mcp/dist/lib/review-tools.js +2 -0
- package/payload/platform/plugins/admin/mcp/dist/lib/review-tools.js.map +1 -1
- package/payload/platform/plugins/admin/skills/stream-log-review/SKILL.md +22 -8
- package/payload/platform/plugins/cloudflare/PLUGIN.md +5 -4
- package/payload/platform/plugins/cloudflare/mcp/__tests__/auth-binding.test.ts +196 -0
- package/payload/platform/plugins/cloudflare/mcp/__tests__/brand-load.test.ts +81 -0
- package/payload/platform/plugins/cloudflare/mcp/__tests__/manifest-scope.test.ts +65 -0
- package/payload/platform/plugins/cloudflare/mcp/__tests__/verify-scenario-0.test.ts +70 -0
- package/payload/platform/plugins/cloudflare/mcp/__tests__/verify-scenario-B.test.ts +124 -0
- package/payload/platform/plugins/cloudflare/mcp/dist/index.js +232 -183
- package/payload/platform/plugins/cloudflare/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/cloudflare/mcp/dist/lib/cloudflared.d.ts +181 -30
- package/payload/platform/plugins/cloudflare/mcp/dist/lib/cloudflared.d.ts.map +1 -1
- package/payload/platform/plugins/cloudflare/mcp/dist/lib/cloudflared.js +938 -154
- package/payload/platform/plugins/cloudflare/mcp/dist/lib/cloudflared.js.map +1 -1
- package/payload/platform/plugins/cloudflare/mcp/package.json +5 -2
- package/payload/platform/plugins/cloudflare/mcp/vitest.config.ts +10 -0
- package/payload/platform/plugins/cloudflare/references/setup-guide.md +32 -27
- package/payload/platform/plugins/cloudflare/skills/setup-tunnel/SKILL.md +25 -3
- package/payload/platform/plugins/docs/PLUGIN.md +2 -0
- package/payload/platform/plugins/docs/references/cloudflare.md +68 -0
- package/payload/platform/plugins/docs/references/plugins-guide.md +8 -6
- package/payload/platform/plugins/docs/references/troubleshooting.md +2 -0
- package/payload/platform/plugins/email/mcp/dist/lib/providers.d.ts +9 -2
- package/payload/platform/plugins/email/mcp/dist/lib/providers.d.ts.map +1 -1
- package/payload/platform/plugins/email/mcp/dist/lib/providers.js +545 -92
- package/payload/platform/plugins/email/mcp/dist/lib/providers.js.map +1 -1
- package/payload/platform/scripts/logs-read.sh +114 -54
- package/payload/platform/templates/agents/admin/IDENTITY.md +6 -0
- package/payload/platform/templates/agents/public/IDENTITY.md +1 -0
- package/payload/platform/templates/specialists/agents/content-producer.md +4 -0
- package/payload/platform/templates/specialists/agents/personal-assistant.md +16 -8
- package/payload/platform/templates/specialists/agents/project-manager.md +4 -0
- package/payload/platform/templates/specialists/agents/research-assistant.md +4 -0
- package/payload/server/server.js +714 -125
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"review-tools.js","sourceRoot":"","sources":["../../src/lib/review-tools.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"review-tools.js","sourceRoot":"","sources":["../../src/lib/review-tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,7 +10,9 @@ description: >
|
|
|
10
10
|
|
|
11
11
|
# Stream Log Review
|
|
12
12
|
|
|
13
|
-
Analyse Claude agent stream logs — the `claude-agent-stream
|
|
13
|
+
Analyse Claude agent stream logs — the `claude-agent-stream-{conversationId}.log` files generated by the platform (Task 532). Each file is scoped to exactly one conversation; a resumed conversation accumulates in one file across multiple process lifetimes, delimited by `[spawn]` / `[process-exit]`. Pre-conversation events (CDP auth-poll, module-init warnings) live in `preconversation-claude-agent-stream-{YYYY-MM-DD}.log` — a separate file per UTC day, read only when investigating boot-time failures.
|
|
14
|
+
|
|
15
|
+
Parse the log, identify problems, attempt diagnosis, and produce a structured report.
|
|
14
16
|
|
|
15
17
|
## When to Activate
|
|
16
18
|
|
|
@@ -30,24 +32,36 @@ Analyse Claude agent stream logs — the `claude-agent-stream-*.log` files gener
|
|
|
30
32
|
|
|
31
33
|
## Log Retrieval
|
|
32
34
|
|
|
33
|
-
On the Pi, use the `logs-read` MCP tool to retrieve
|
|
35
|
+
On the Pi, use the `logs-read` MCP tool with `conversationId` to retrieve a single conversation's log. From the dev machine (SSH), use the shell counterpart:
|
|
34
36
|
|
|
35
37
|
```bash
|
|
36
|
-
#
|
|
37
|
-
sshpass -p 'password' ssh admin@<hostname>.local "~/<installDir>/platform/scripts/logs-read.sh <
|
|
38
|
+
# Read a single conversation's stream log (primary mode — Task 532)
|
|
39
|
+
sshpass -p 'password' ssh admin@<hostname>.local "~/<installDir>/platform/scripts/logs-read.sh <conversationId> system"
|
|
38
40
|
|
|
39
|
-
# Tail the most
|
|
41
|
+
# Tail the most-recently-active stream log (any conversation)
|
|
40
42
|
sshpass -p 'password' ssh admin@<hostname>.local "~/<installDir>/platform/scripts/logs-read.sh --tail system 200"
|
|
43
|
+
|
|
44
|
+
# Legacy: grep sessionKey across all log files (backward compat)
|
|
45
|
+
sshpass -p 'password' ssh admin@<hostname>.local "~/<installDir>/platform/scripts/logs-read.sh --grep <sessionKey>"
|
|
41
46
|
```
|
|
42
47
|
|
|
43
|
-
|
|
48
|
+
The `conversationId` is visible in the admin UI and appears on every `[spawn]` / `[process-exit]` line in the log itself. A single `logs-read.sh <conversationId> system` returns the full conversation-scoped record — no grep filter required, no cross-file correlation.
|
|
49
|
+
|
|
50
|
+
## What to Look For
|
|
51
|
+
|
|
52
|
+
- `[tool-wait]` lines every 5 s between `[tool-use]` and `[tool-result]` — distinguishes API silence from tool-internal stall.
|
|
53
|
+
- `[tool-wait-diag]` at 15 / 30 / 45 / 60 s — confirms DNS/TCP/HTTP health across a stall window (not just at the timeout moment).
|
|
54
|
+
- `[tool-wait-proc]` at 30 s — subprocess open FDs, sockets by TCP state, RSS.
|
|
55
|
+
- `[subproc-stderr]` — subprocess stderr teed in, includes `NODE_DEBUG=http,http2,net,tls,undici,dns` network traces. Missing UNDICI/HTTP write lines during a tool-wait window = tool never sent the request.
|
|
56
|
+
- `[tool-failure-diag]` — one-shot probe on the failure path (Task 530); complements the mid-flight `[tool-wait-diag]` with end-of-wait network state.
|
|
57
|
+
- `[mcp-tee-attach]` / `[mcp-tee-skip]` / `[mcp:<server>]` — MCP server stderr routed into the stream log; a missing attach marker explains missing server diagnostics.
|
|
44
58
|
|
|
45
59
|
## Boundaries
|
|
46
60
|
|
|
47
61
|
- This skill analyses logs. It does not fix the bugs it finds — that's a separate task.
|
|
48
|
-
- Applies to `claude-agent-stream
|
|
62
|
+
- Applies to `claude-agent-stream-{conversationId}.log` files only. SSE event logs and stderr logs are handled by `logs-read` directly.
|
|
49
63
|
- Does not modify or rotate log files.
|
|
50
|
-
- Does not correlate across
|
|
64
|
+
- Does not correlate across conversations — each report covers a single conversation's log.
|
|
51
65
|
|
|
52
66
|
## References
|
|
53
67
|
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: cloudflare
|
|
3
|
-
description: Cloudflare Tunnel setup and management
|
|
3
|
+
description: Cloudflare Tunnel setup and management — declarative brand-zone scope, deterministic recovery
|
|
4
4
|
tools:
|
|
5
5
|
- cloudflare-setup
|
|
6
|
-
- cf-set-token
|
|
7
6
|
- cf-add-zone
|
|
8
|
-
- tunnel-login
|
|
9
7
|
- cf-zone-status
|
|
8
|
+
- cf-verify
|
|
9
|
+
- cf-rebuild
|
|
10
|
+
- tunnel-login
|
|
10
11
|
- tunnel-status
|
|
11
12
|
- tunnel-install
|
|
12
13
|
- tunnel-create
|
|
@@ -18,7 +19,7 @@ tools:
|
|
|
18
19
|
|
|
19
20
|
# Cloudflare Tunnel Setup
|
|
20
21
|
|
|
21
|
-
|
|
22
|
+
The brand declares its Cloudflare zones in `brand.json` (`cloudflare.zones`) at build time. Every tool refuses operations against hostnames whose registrable parent is not in that list — declared scope is authoritative. `cloudflare-setup` is the single onboarding orchestrator: a UI-driven state machine that prompts for tunnel/zone selections and admin/public addresses via rendered components (`single-select`, `tunnel-route-picker`). Tunnel names are unique per customer (derived from chosen admin label + domain) so multiple customers can coexist on a shared zone. The agent never synthesises subdomains from free text — every label comes from a component submission. Authentication is OAuth-only via `tunnel-login`; on first success the device records an `account-binding.json` so any later cert rotation under a different Cloudflare account is detected and refused. `cf-verify` is the non-mutating audit; `cf-rebuild` is the deterministic recovery.
|
|
22
23
|
|
|
23
24
|
## When to activate
|
|
24
25
|
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
import { afterEach, beforeEach, describe, expect, it } from "vitest";
|
|
2
|
+
import { mkdtempSync, mkdirSync, writeFileSync, rmSync } from "node:fs";
|
|
3
|
+
import { homedir, tmpdir } from "node:os";
|
|
4
|
+
import { join } from "node:path";
|
|
5
|
+
import {
|
|
6
|
+
CloudflareRefusalError,
|
|
7
|
+
_resetBrandCache,
|
|
8
|
+
getClient,
|
|
9
|
+
getReadOnlyClient,
|
|
10
|
+
readAccountBinding,
|
|
11
|
+
validateAuth,
|
|
12
|
+
writeAccountBinding,
|
|
13
|
+
} from "../src/lib/cloudflared.js";
|
|
14
|
+
|
|
15
|
+
// Tests for the auth pre-conditions that getClient() enforces. We don't mock
|
|
16
|
+
// the Cloudflare SDK here — we only ever exercise the gate, not the SDK call.
|
|
17
|
+
// The gate throws CloudflareRefusalError BEFORE constructing the client, so
|
|
18
|
+
// no network is touched.
|
|
19
|
+
|
|
20
|
+
let tmpRoot: string;
|
|
21
|
+
let homeRoot: string;
|
|
22
|
+
let originalHome: string | undefined;
|
|
23
|
+
|
|
24
|
+
function writeBrand(content: object): void {
|
|
25
|
+
const dir = join(tmpRoot, "config");
|
|
26
|
+
mkdirSync(dir, { recursive: true });
|
|
27
|
+
writeFileSync(join(dir, "brand.json"), JSON.stringify(content));
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
function writeCertPem(accountId: string, apiToken: string): void {
|
|
31
|
+
const certDir = join(homeRoot, ".maxy", "cloudflared");
|
|
32
|
+
mkdirSync(certDir, { recursive: true });
|
|
33
|
+
const tokenJson = JSON.stringify({ APIToken: apiToken, AccountTag: accountId });
|
|
34
|
+
const b64 = Buffer.from(tokenJson, "utf-8").toString("base64");
|
|
35
|
+
const pem = `dummy-private-key
|
|
36
|
+
-----BEGIN ARGO TUNNEL TOKEN-----
|
|
37
|
+
${b64}
|
|
38
|
+
-----END ARGO TUNNEL TOKEN-----
|
|
39
|
+
`;
|
|
40
|
+
writeFileSync(join(certDir, "cert.pem"), pem);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
beforeEach(() => {
|
|
44
|
+
tmpRoot = mkdtempSync(join(tmpdir(), "maxy-cf-auth-"));
|
|
45
|
+
homeRoot = mkdtempSync(join(tmpdir(), "maxy-cf-home-"));
|
|
46
|
+
originalHome = process.env.HOME;
|
|
47
|
+
process.env.HOME = homeRoot;
|
|
48
|
+
process.env.PLATFORM_ROOT = tmpRoot;
|
|
49
|
+
_resetBrandCache();
|
|
50
|
+
writeBrand({
|
|
51
|
+
productName: "Maxy",
|
|
52
|
+
configDir: ".maxy",
|
|
53
|
+
cloudflare: { zones: ["maxy.bot"] },
|
|
54
|
+
});
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
afterEach(() => {
|
|
58
|
+
if (originalHome !== undefined) process.env.HOME = originalHome;
|
|
59
|
+
else delete process.env.HOME;
|
|
60
|
+
delete process.env.PLATFORM_ROOT;
|
|
61
|
+
rmSync(tmpRoot, { recursive: true, force: true });
|
|
62
|
+
rmSync(homeRoot, { recursive: true, force: true });
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
describe("validateAuth — pure read of cert + binding state", () => {
|
|
66
|
+
it("reports nothing on a fresh install", () => {
|
|
67
|
+
const auth = validateAuth();
|
|
68
|
+
expect(auth.hasCert).toBe(false);
|
|
69
|
+
expect(auth.hasBinding).toBe(false);
|
|
70
|
+
expect(auth.bound).toBe(false);
|
|
71
|
+
expect(auth.certAccountId).toBeNull();
|
|
72
|
+
expect(auth.boundAccountId).toBeNull();
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
it("reports cert when present, no binding", () => {
|
|
76
|
+
writeCertPem("acct-X", "cfut_dummy");
|
|
77
|
+
const auth = validateAuth();
|
|
78
|
+
expect(auth.hasCert).toBe(true);
|
|
79
|
+
expect(auth.hasBinding).toBe(false);
|
|
80
|
+
expect(auth.bound).toBe(false);
|
|
81
|
+
expect(auth.certAccountId).toBe("acct-X");
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
it("reports bound when cert + binding agree", () => {
|
|
85
|
+
writeCertPem("acct-X", "cfut_dummy");
|
|
86
|
+
writeAccountBinding("acct-X");
|
|
87
|
+
const auth = validateAuth();
|
|
88
|
+
expect(auth.bound).toBe(true);
|
|
89
|
+
expect(auth.certAccountId).toBe("acct-X");
|
|
90
|
+
expect(auth.boundAccountId).toBe("acct-X");
|
|
91
|
+
});
|
|
92
|
+
|
|
93
|
+
it("reports drift when cert and binding disagree", () => {
|
|
94
|
+
writeCertPem("acct-X", "cfut_dummy");
|
|
95
|
+
writeAccountBinding("acct-Y");
|
|
96
|
+
const auth = validateAuth();
|
|
97
|
+
expect(auth.hasCert).toBe(true);
|
|
98
|
+
expect(auth.hasBinding).toBe(true);
|
|
99
|
+
expect(auth.bound).toBe(false);
|
|
100
|
+
expect(auth.certAccountId).toBe("acct-X");
|
|
101
|
+
expect(auth.boundAccountId).toBe("acct-Y");
|
|
102
|
+
});
|
|
103
|
+
});
|
|
104
|
+
|
|
105
|
+
describe("getClient — refuses uncircumventably on auth failures", () => {
|
|
106
|
+
it("refuses unbound-device when cert is absent", () => {
|
|
107
|
+
expect(() => getClient()).toThrow(CloudflareRefusalError);
|
|
108
|
+
try {
|
|
109
|
+
getClient();
|
|
110
|
+
} catch (err) {
|
|
111
|
+
expect((err as CloudflareRefusalError).refusal.reason).toBe("unbound-device");
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
|
|
115
|
+
it("refuses unbound-device when cert exists but no binding", () => {
|
|
116
|
+
writeCertPem("acct-X", "cfut_dummy");
|
|
117
|
+
try {
|
|
118
|
+
getClient();
|
|
119
|
+
throw new Error("expected refusal");
|
|
120
|
+
} catch (err) {
|
|
121
|
+
expect(err).toBeInstanceOf(CloudflareRefusalError);
|
|
122
|
+
expect((err as CloudflareRefusalError).refusal.reason).toBe("unbound-device");
|
|
123
|
+
}
|
|
124
|
+
});
|
|
125
|
+
|
|
126
|
+
it("refuses account-drift when cert and binding disagree", () => {
|
|
127
|
+
writeCertPem("acct-X", "cfut_dummy");
|
|
128
|
+
writeAccountBinding("acct-Y");
|
|
129
|
+
try {
|
|
130
|
+
getClient();
|
|
131
|
+
throw new Error("expected refusal");
|
|
132
|
+
} catch (err) {
|
|
133
|
+
expect(err).toBeInstanceOf(CloudflareRefusalError);
|
|
134
|
+
const refusal = (err as CloudflareRefusalError).refusal;
|
|
135
|
+
expect(refusal.reason).toBe("account-drift");
|
|
136
|
+
expect(refusal.fields.certAccountId).toBe("acct-X");
|
|
137
|
+
expect(refusal.fields.boundAccountId).toBe("acct-Y");
|
|
138
|
+
}
|
|
139
|
+
});
|
|
140
|
+
|
|
141
|
+
it("succeeds when cert + binding agree", () => {
|
|
142
|
+
writeCertPem("acct-X", "cfut_dummy");
|
|
143
|
+
writeAccountBinding("acct-X");
|
|
144
|
+
const { accountId } = getClient();
|
|
145
|
+
expect(accountId).toBe("acct-X");
|
|
146
|
+
});
|
|
147
|
+
});
|
|
148
|
+
|
|
149
|
+
describe("getReadOnlyClient — never throws, surfaces partial state", () => {
|
|
150
|
+
it("returns nulls on fresh install", () => {
|
|
151
|
+
const ro = getReadOnlyClient();
|
|
152
|
+
expect(ro.client).toBeNull();
|
|
153
|
+
expect(ro.certAccountId).toBeNull();
|
|
154
|
+
expect(ro.boundAccountId).toBeNull();
|
|
155
|
+
expect(ro.bindingMatches).toBe(false);
|
|
156
|
+
});
|
|
157
|
+
|
|
158
|
+
it("returns cert info when cert exists, no binding", () => {
|
|
159
|
+
writeCertPem("acct-X", "cfut_dummy");
|
|
160
|
+
const ro = getReadOnlyClient();
|
|
161
|
+
expect(ro.client).not.toBeNull();
|
|
162
|
+
expect(ro.certAccountId).toBe("acct-X");
|
|
163
|
+
expect(ro.boundAccountId).toBeNull();
|
|
164
|
+
expect(ro.bindingMatches).toBe(false);
|
|
165
|
+
});
|
|
166
|
+
|
|
167
|
+
it("reports bindingMatches when cert + binding agree", () => {
|
|
168
|
+
writeCertPem("acct-X", "cfut_dummy");
|
|
169
|
+
writeAccountBinding("acct-X");
|
|
170
|
+
const ro = getReadOnlyClient();
|
|
171
|
+
expect(ro.bindingMatches).toBe(true);
|
|
172
|
+
});
|
|
173
|
+
|
|
174
|
+
it("reports bindingMatches=false on drift but still returns client + ids", () => {
|
|
175
|
+
writeCertPem("acct-X", "cfut_dummy");
|
|
176
|
+
writeAccountBinding("acct-Y");
|
|
177
|
+
const ro = getReadOnlyClient();
|
|
178
|
+
expect(ro.client).not.toBeNull();
|
|
179
|
+
expect(ro.certAccountId).toBe("acct-X");
|
|
180
|
+
expect(ro.boundAccountId).toBe("acct-Y");
|
|
181
|
+
expect(ro.bindingMatches).toBe(false);
|
|
182
|
+
});
|
|
183
|
+
});
|
|
184
|
+
|
|
185
|
+
describe("account-binding write/read round-trip", () => {
|
|
186
|
+
it("persists accountId and a parseable boundAt", () => {
|
|
187
|
+
writeAccountBinding("acct-Z");
|
|
188
|
+
const binding = readAccountBinding();
|
|
189
|
+
expect(binding?.accountId).toBe("acct-Z");
|
|
190
|
+
expect(binding?.boundAt).toMatch(/^\d{4}-\d{2}-\d{2}T/);
|
|
191
|
+
});
|
|
192
|
+
|
|
193
|
+
it("returns null when no binding file exists", () => {
|
|
194
|
+
expect(readAccountBinding()).toBeNull();
|
|
195
|
+
});
|
|
196
|
+
});
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { afterEach, beforeEach, describe, expect, it } from "vitest";
|
|
2
|
+
import { mkdtempSync, mkdirSync, writeFileSync, rmSync } from "node:fs";
|
|
3
|
+
import { tmpdir } from "node:os";
|
|
4
|
+
import { join } from "node:path";
|
|
5
|
+
import { _resetBrandCache, loadBrand } from "../src/lib/cloudflared.js";
|
|
6
|
+
|
|
7
|
+
// loadBrand() reads PLATFORM_ROOT/config/brand.json. We point PLATFORM_ROOT at
|
|
8
|
+
// a fresh tmpdir per test, write the brand.json shape we want, reset the
|
|
9
|
+
// module-level cache, then assert load behaviour.
|
|
10
|
+
|
|
11
|
+
let tmpRoot: string;
|
|
12
|
+
|
|
13
|
+
beforeEach(() => {
|
|
14
|
+
tmpRoot = mkdtempSync(join(tmpdir(), "maxy-cf-brand-"));
|
|
15
|
+
process.env.PLATFORM_ROOT = tmpRoot;
|
|
16
|
+
_resetBrandCache();
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
afterEach(() => {
|
|
20
|
+
rmSync(tmpRoot, { recursive: true, force: true });
|
|
21
|
+
delete process.env.PLATFORM_ROOT;
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
function writeBrand(content: object): void {
|
|
25
|
+
const dir = join(tmpRoot, "config");
|
|
26
|
+
mkdirSync(dir, { recursive: true });
|
|
27
|
+
writeFileSync(join(dir, "brand.json"), JSON.stringify(content));
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
describe("loadBrand cloudflare.zones validation", () => {
|
|
31
|
+
it("loads when cloudflare.zones is present", () => {
|
|
32
|
+
writeBrand({
|
|
33
|
+
productName: "Maxy",
|
|
34
|
+
configDir: ".maxy",
|
|
35
|
+
cloudflare: { zones: ["maxy.bot", "maxy.chat"] },
|
|
36
|
+
});
|
|
37
|
+
const brand = loadBrand();
|
|
38
|
+
expect(brand.cloudflare.zones).toEqual(["maxy.bot", "maxy.chat"]);
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
it("hard-fails when cloudflare key is absent", () => {
|
|
42
|
+
writeBrand({ productName: "Maxy", configDir: ".maxy" });
|
|
43
|
+
expect(() => loadBrand()).toThrow(/cloudflare\.zones/);
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
it("hard-fails when cloudflare.zones is empty", () => {
|
|
47
|
+
writeBrand({
|
|
48
|
+
productName: "Maxy",
|
|
49
|
+
configDir: ".maxy",
|
|
50
|
+
cloudflare: { zones: [] },
|
|
51
|
+
});
|
|
52
|
+
expect(() => loadBrand()).toThrow(/cloudflare\.zones/);
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
it("hard-fails when cloudflare.zones is not an array", () => {
|
|
56
|
+
writeBrand({
|
|
57
|
+
productName: "Maxy",
|
|
58
|
+
configDir: ".maxy",
|
|
59
|
+
cloudflare: { zones: "maxy.bot" },
|
|
60
|
+
});
|
|
61
|
+
expect(() => loadBrand()).toThrow(/cloudflare\.zones/);
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
it("hard-fails when cloudflare.zones contains a non-string", () => {
|
|
65
|
+
writeBrand({
|
|
66
|
+
productName: "Maxy",
|
|
67
|
+
configDir: ".maxy",
|
|
68
|
+
cloudflare: { zones: ["maxy.bot", 42] },
|
|
69
|
+
});
|
|
70
|
+
expect(() => loadBrand()).toThrow(/invalid cloudflare\.zones entry/);
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
it("hard-fails when PLATFORM_ROOT is unset", () => {
|
|
74
|
+
delete process.env.PLATFORM_ROOT;
|
|
75
|
+
expect(() => loadBrand()).toThrow(/PLATFORM_ROOT/);
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
it("hard-fails when brand.json is absent at the configured path", () => {
|
|
79
|
+
expect(() => loadBrand()).toThrow(/brand\.json not found/);
|
|
80
|
+
});
|
|
81
|
+
});
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
|
2
|
+
import { matchManifestZone } from "../src/lib/cloudflared.js";
|
|
3
|
+
|
|
4
|
+
// Pure function — no fs, no network. Tests the registrable-parent suffix-match
|
|
5
|
+
// against an explicit declared-zone list. The whole point of declarative zones
|
|
6
|
+
// is that we never need a PSL lookup or a "last two labels" heuristic.
|
|
7
|
+
|
|
8
|
+
describe("matchManifestZone", () => {
|
|
9
|
+
const zones = ["maxy.bot", "maxy.chat", "example.co.uk"];
|
|
10
|
+
|
|
11
|
+
it("matches a hostname whose registrable parent is in the zone list", () => {
|
|
12
|
+
const r = matchManifestZone("admin.maxy.bot", zones);
|
|
13
|
+
expect(r.ok).toBe(true);
|
|
14
|
+
expect(r.matchedZone).toBe("maxy.bot");
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
it("matches the zone itself (no subdomain)", () => {
|
|
18
|
+
const r = matchManifestZone("maxy.bot", zones);
|
|
19
|
+
expect(r.ok).toBe(true);
|
|
20
|
+
expect(r.matchedZone).toBe("maxy.bot");
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
it("matches deeper subdomains", () => {
|
|
24
|
+
const r = matchManifestZone("foo.bar.maxy.bot", zones);
|
|
25
|
+
expect(r.ok).toBe(true);
|
|
26
|
+
expect(r.matchedZone).toBe("maxy.bot");
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
it("matches case-insensitively", () => {
|
|
30
|
+
const r = matchManifestZone("Admin.MAXY.BOT", zones);
|
|
31
|
+
expect(r.ok).toBe(true);
|
|
32
|
+
expect(r.matchedZone).toBe("maxy.bot");
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
it("refuses hostnames outside the zone list", () => {
|
|
36
|
+
const r = matchManifestZone("admin.example.org", zones);
|
|
37
|
+
expect(r.ok).toBe(false);
|
|
38
|
+
expect(r.matchedZone).toBeNull();
|
|
39
|
+
expect(r.declaredZones).toEqual(zones);
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
it("does not partial-match — admin.notmaxy.bot must not match maxy.bot", () => {
|
|
43
|
+
// The leading-dot boundary is what prevents this.
|
|
44
|
+
const r = matchManifestZone("admin.notmaxy.bot", zones);
|
|
45
|
+
expect(r.ok).toBe(false);
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
it("handles multi-label TLDs (.co.uk) when declared", () => {
|
|
49
|
+
const r = matchManifestZone("admin.example.co.uk", zones);
|
|
50
|
+
expect(r.ok).toBe(true);
|
|
51
|
+
expect(r.matchedZone).toBe("example.co.uk");
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
it("prefers the longest match when zones overlap", () => {
|
|
55
|
+
const overlap = ["bot", "maxy.bot"];
|
|
56
|
+
const r = matchManifestZone("admin.maxy.bot", overlap);
|
|
57
|
+
expect(r.ok).toBe(true);
|
|
58
|
+
expect(r.matchedZone).toBe("maxy.bot");
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
it("refuses against an empty zone list", () => {
|
|
62
|
+
const r = matchManifestZone("admin.maxy.bot", []);
|
|
63
|
+
expect(r.ok).toBe(false);
|
|
64
|
+
});
|
|
65
|
+
});
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { afterEach, beforeEach, describe, expect, it } from "vitest";
|
|
2
|
+
import { mkdtempSync, mkdirSync, writeFileSync, rmSync } from "node:fs";
|
|
3
|
+
import { tmpdir } from "node:os";
|
|
4
|
+
import { join } from "node:path";
|
|
5
|
+
import {
|
|
6
|
+
_resetBrandCache,
|
|
7
|
+
cfVerifyCore,
|
|
8
|
+
liveScopeContext,
|
|
9
|
+
} from "../src/lib/cloudflared.js";
|
|
10
|
+
|
|
11
|
+
// Scenario 0 (per task spec): fresh install — no cert.pem, no binding,
|
|
12
|
+
// no tunnels, no config.yml. cf-verify must return zero OUT-OF-SCOPE,
|
|
13
|
+
// every declared zone tagged MISSING, no throws. Proves the audit runs
|
|
14
|
+
// before any login completes.
|
|
15
|
+
|
|
16
|
+
let tmpRoot: string;
|
|
17
|
+
let homeRoot: string;
|
|
18
|
+
let originalHome: string | undefined;
|
|
19
|
+
|
|
20
|
+
beforeEach(() => {
|
|
21
|
+
tmpRoot = mkdtempSync(join(tmpdir(), "maxy-cf-verify-"));
|
|
22
|
+
homeRoot = mkdtempSync(join(tmpdir(), "maxy-cf-home-"));
|
|
23
|
+
originalHome = process.env.HOME;
|
|
24
|
+
process.env.HOME = homeRoot;
|
|
25
|
+
process.env.PLATFORM_ROOT = tmpRoot;
|
|
26
|
+
_resetBrandCache();
|
|
27
|
+
const cfg = join(tmpRoot, "config");
|
|
28
|
+
mkdirSync(cfg, { recursive: true });
|
|
29
|
+
writeFileSync(
|
|
30
|
+
join(cfg, "brand.json"),
|
|
31
|
+
JSON.stringify({
|
|
32
|
+
productName: "Maxy",
|
|
33
|
+
configDir: ".maxy",
|
|
34
|
+
cloudflare: { zones: ["b.test", "c.test"] },
|
|
35
|
+
}),
|
|
36
|
+
);
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
afterEach(() => {
|
|
40
|
+
if (originalHome !== undefined) process.env.HOME = originalHome;
|
|
41
|
+
else delete process.env.HOME;
|
|
42
|
+
delete process.env.PLATFORM_ROOT;
|
|
43
|
+
rmSync(tmpRoot, { recursive: true, force: true });
|
|
44
|
+
rmSync(homeRoot, { recursive: true, force: true });
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
describe("cfVerifyCore — Scenario 0 (fresh install, no login)", () => {
|
|
48
|
+
it("runs without throwing and reports everything as MISSING", async () => {
|
|
49
|
+
const ctx = liveScopeContext();
|
|
50
|
+
const report = await cfVerifyCore(ctx);
|
|
51
|
+
|
|
52
|
+
expect(report.brand).toBe("Maxy");
|
|
53
|
+
expect(report.declaredZones).toEqual(["b.test", "c.test"]);
|
|
54
|
+
expect(report.bindingPresent).toBe(false);
|
|
55
|
+
expect(report.bindingMatchesCert).toBe(false);
|
|
56
|
+
expect(report.certPresent).toBe(false);
|
|
57
|
+
|
|
58
|
+
// No OUT-OF-SCOPE artefacts on a clean fresh device.
|
|
59
|
+
expect(report.counts.outOfScope).toBe(0);
|
|
60
|
+
|
|
61
|
+
// Cert, binding, tunnel.state, and each declared zone all MISSING.
|
|
62
|
+
const missingTypes = report.artefacts
|
|
63
|
+
.filter((a) => a.tag === "missing")
|
|
64
|
+
.map((a) => a.type);
|
|
65
|
+
expect(missingTypes).toContain("cert.pem");
|
|
66
|
+
expect(missingTypes).toContain("binding");
|
|
67
|
+
expect(missingTypes).toContain("tunnel.state");
|
|
68
|
+
expect(missingTypes.filter((t) => t === "declared-zone").length).toBe(2);
|
|
69
|
+
});
|
|
70
|
+
});
|