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.title || url.hostname)}

${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)}

Public Web results

${web}
` : '

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)}

Public Web results

${web}
` : '

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
${resources.map((item) => `
${pill(categories.get(item.id) || item.type)}${item.verification.valid ? '✓ Signed' : 'Verification failed'}

${e(item.name)}

${e(item.description)}

${e(item.id.replace('w3bs://', ''))}
${e(item.publisher.namespace)} / ${e(item.version)}
`).join('') || '

No matching resources.

Try another phrase or view all prompts.

'}
`; + 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
${resources.map((item) => `
${pill(categories.get(item.id) || item.type)}${item.verification.valid ? '✓ Signed' : 'Verification failed'}

${e(item.name)}

${e(item.description)}

${e(item.id.replace('w3bs://', ''))}
${e(item.publisher.namespace)} / ${e(item.version)}
`).join('') || '

No matching resources.

Try another phrase or view all prompts.

'}
`; } const BROWSE_COMMANDS = [ { @@ -335,7 +335,7 @@ async function browse(store, query, browser) { : result ? browseDetail(result) : `
w3bs://

The URI is canonical.
The surface is optional.

Try the research prompt, a Moshpit name like chovy.hacker, or explore the registry.

`; - 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)}THENw3bs 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);