diff --git a/src/net-routes.mjs b/src/net-routes.mjs
index 3973fcb..dd8f672 100644
--- a/src/net-routes.mjs
+++ b/src/net-routes.mjs
@@ -102,7 +102,7 @@ function searchMarkup(query, local, backfill, webResults, error) {
return `${e(item.description || item.snippet || '')}
${e(url.hostname)}
`;
}).join('')}`
: '
No Web results were returned.
';
- return `W3BS NET · SEARCH
Search the network. W3BS primary registry first, Moshpit backfill second, and public Web results last.
${query ? `W3BS Net · local first ${links(local)}Moshpit and peer backfill ${error ? `${e(error)}
` : ''}${links(backfill)} ` : 'Search local registrations and the Moshpit backfill. The query is sent to pit.world only for public Web results.
'}`;
+ return `W3BS NET · SEARCH
Search the network. W3BS primary registry first, Moshpit backfill second, and public Web results last.
${query ? `W3BS Net · local first ${links(local)}Moshpit and peer backfill ${error ? `${e(error)}
` : ''}${links(backfill)} ` : 'Search local registrations and the Moshpit backfill. The query is sent to pit.world only for public Web results.
'}`;
}
function operatorMarkup(username) {
diff --git a/src/server.mjs b/src/server.mjs
index bebe425..2190c50 100644
--- a/src/server.mjs
+++ b/src/server.mjs
@@ -70,7 +70,7 @@ export function createApp({
'X-Content-Type-Options': 'nosniff',
'Referrer-Policy': 'strict-origin-when-cross-origin',
'Cache-Control': 'no-store',
- 'Content-Security-Policy': `default-src 'self'; script-src 'self' https://crawlproof.com ${FOOTER_SCRIPT_SRC}; style-src 'self'; img-src 'self' data: https://built.indie.pit.world https://pwamart.com https://profullstack.com; connect-src 'self' https://crawlproof.com https://pit.world; object-src 'none'; base-uri 'none'; frame-ancestors 'none'; form-action 'self' https://pit.world`,
+ 'Content-Security-Policy': `default-src 'self'; script-src 'self' https://crawlproof.com https://cdn.jsdelivr.net ${FOOTER_SCRIPT_SRC}; style-src 'self'; img-src 'self' data: https://built.indie.pit.world https://pwamart.com https://profullstack.com; connect-src 'self' https://crawlproof.com https://pit.world; object-src 'none'; base-uri 'none'; frame-ancestors 'none'; form-action 'self' https://pit.world`,
'Permissions-Policy': 'camera=(), microphone=(), geolocation=()',
});
const railwayHealth =
diff --git a/src/site.mjs b/src/site.mjs
index ad9201f..3812da6 100644
--- a/src/site.mjs
+++ b/src/site.mjs
@@ -207,7 +207,7 @@ async function promptCards(store, query) {
(file) => JSON.parse(readFileSync(resolve(ROOT, file), 'utf8')),
);
const categories = new Map(catalog.map((item) => [item.id, item.category]));
- return `THE OPEN PROMPT REGISTRY
Good instructions should travel. Portable, versioned, signed artifacts. Inspect their source, understand their permissions and make them your own.
${resources.length} ${resources.length === 1 ? 'resource' : 'resources'} Open examples · MIT licensed · v1.0.0
`;
+ return `THE OPEN PROMPT REGISTRY
Good instructions should travel. Portable, versioned, signed artifacts. Inspect their source, understand their permissions and make them your own.
${resources.length} ${resources.length === 1 ? 'resource' : 'resources'} Open examples · MIT licensed · v1.0.0
`;
}
const BROWSE_COMMANDS = [
{
@@ -335,7 +335,7 @@ async function browse(store, query, browser) {
: result
? browseDetail(result)
: ``;
- return `THE BROWSER
A window into the Agentic Web. Enter a W3BS URI, a Moshpit name like chovy.hacker, a pit.world URL or any https URL. Moshpit names resolve on the server over Moshpit DNS.
${body}${browseExamples()}${browseCli()}`;
+ return `THE BROWSER
A window into the Agentic Web. Enter a W3BS URI, a Moshpit name like chovy.hacker, a pit.world URL or any https URL. Moshpit names resolve on the server over Moshpit DNS.
${body}${browseExamples()}${browseCli()}`;
}
function resourceDetail(result) {
const { manifest: m, verification: v } = result;
@@ -388,7 +388,7 @@ async function packagesPage(store, query) {
return `THE W3BS CLI · PACKAGES
Install from anywhere.Update everything at once. w3bs is the W3BS command line, and packages are its first app. Every listed tool installs with its publisher's curl | sh; w3bs packages prints this list and w3bs update keeps everything current. The same CLI resolves, verifies and runs signed w3bs:// resources.
GET STARTED
One line. Then one command. The installer downloads the prebuilt w3bs CLI for your machine (Linux or macOS, x86_64 or arm64), checks it, and lets it install itself from the signed W3BS repository. No Node, Python or Rust needed.
Read the guide → install w3bs
${e(INSTALL)}${copy(INSTALL)}THEN w3bs packagesw3bs install claude-codew3bs updatew3bs ask business "How do I get my first customers?"
THE CATALOG
${all.length} tools, one update command. Agentic coding tools, MCP servers and the CLIs around them. Search, copy the publisher's own installer, or let w3bs install run it and track it for you.
-
+
${tab('', 'All', all.length)} ${tab('agentic', 'Agentic', all.filter((x) => x.agentic).length)} ${tab('ours', 'Profullstack', all.filter((x) => x.publisher === 'profullstack').length)} ${items.length} shown · curl installers only
${
items
@@ -1066,5 +1066,5 @@ export function pageShell({
canonical = '',
}) {
const share = `
${canonical ? `
` : ''}
`;
- return `
${e(title)} — W3BS ${robots ? `
` : ''}${canonical ? `
` : ''}${share}
${scripts}${track ? tracker(trackerSite()) : ''}${header(active)}
${content} ${footer()}
`;
+ return `
${e(title)} — W3BS ${robots ? `
` : ''}${canonical ? `
` : ''}${share}
${scripts}${track ? tracker(trackerSite()) : ''}${header(active)}
${content} ${footer()}
`;
}
diff --git a/test/site.test.mjs b/test/site.test.mjs
index cb52bab..120c809 100644
--- a/test/site.test.mjs
+++ b/test/site.test.mjs
@@ -128,7 +128,7 @@ test('CrawlProof: only for https://w3bs.org, never on pages that can carry accou
const home = await fetch(`${t.base}/`);
assert.ok((await home.text()).includes(tag));
const csp = home.headers.get('content-security-policy');
- assert.match(csp, /script-src 'self' https:\/\/crawlproof\.com 'sha256-[A-Za-z0-9+/=]+';/);
+ assert.match(csp, /script-src 'self' https:\/\/crawlproof\.com https:\/\/cdn\.jsdelivr\.net 'sha256-[A-Za-z0-9+/=]+';/);
assert.match(csp, /connect-src 'self' https:\/\/crawlproof\.com https:\/\/pit\.world;/);
for (const path of ['/pricing', '/signup', '/login', '/login?next=%2Ffleet'])
assert.ok((await (await fetch(`${t.base}${path}`)).text()).includes(tag), path);