Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions nuxt.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -738,6 +738,12 @@ export default defineNuxtConfig({
viteEnvironmentApi: false,
},

features: {
// Nuxt 4.6 emits unresolved inline-style chunks with this Rolldown graph.
// Load emitted CSS stylesheets instead.
inlineStyles: false,
},

vite: {
plugins: [dependencyPluginCompat()],
$client: {
Expand Down
4 changes: 2 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"name": "skilld-dev",
"type": "module",
"private": true,
"packageManager": "pnpm@12.4.2",
"packageManager": "pnpm@12.9.1",
"description": "Agent skills written by real maintainers in their own GitHub repos, with links to source",
"author": {
"name": "Harlan Wilton",
Expand All @@ -11,7 +11,7 @@
},
"license": "MIT",
"engines": {
"node": ">=22.0.0"
"node": "^22.22.3 || ^24.15.0 || >=26.0.0"
},
"scripts": {
"dev": "nuxi dev",
Expand Down
28 changes: 28 additions & 0 deletions patches/hookable@6.1.2.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
diff --git a/dist/index.mjs b/dist/index.mjs
index 433febd30eb061339cb72dbce930b91018036954..b1bafa46c747d07ffa7fc4e8e57108e1db1ce459 100644
--- a/dist/index.mjs
+++ b/dist/index.mjs
@@ -24,9 +24,21 @@ function serial(tasks, function_) {
return tasks.reduce((promise, task) => promise.then(() => function_(task)), Promise.resolve());
}
const createTask = /* @__PURE__ */ (() => {
- if (console.createTask) return console.createTask;
const defaultTask = { run: (fn) => fn() };
- return () => defaultTask;
+ const fallback = () => defaultTask;
+ // PATCH: probe that the method WORKS, not merely that it exists.
+ // Cloudflare workerd defines console.createTask and throws
+ // ERR_METHOD_NOT_IMPLEMENTED when it is called, so an existence check
+ // adopts a method that cannot run and every hook call throws. On a Nuxt
+ // worker that is every route, served as a 500.
+ // Reached once at module init, so the cost is a single call.
+ if (!console.createTask) return fallback;
+ try {
+ console.createTask("hookable-probe").run(() => {});
+ } catch {
+ return fallback;
+ }
+ return console.createTask;
})();
function callHooks(hooks, args, startIndex, task) {
for (let i = startIndex; i < hooks.length; i += 1) try {
3,434 changes: 2,081 additions & 1,353 deletions pnpm-lock.yaml

Large diffs are not rendered by default.

82 changes: 66 additions & 16 deletions pnpm-workspace.yaml
Original file line number Diff line number Diff line change
@@ -1,4 +1,20 @@
minimumReleaseAgeExclude:
- '@nuxt/cli@4.0.0'
- '@harlan-zw/comark-content@0.2.0'
- '@harlan-zw/nuxt-cf-jobs@0.3.0'
- '@harlan-zw/nuxt-checkin@0.4.1'
- '@harlan-zw/nuxt-use-query@0.3.0'
- '@harlan-zw/nuxt-wide-events@0.2.0'
- nuxt@4.6.0
- '@harlan-zw/jev@0.3.0'
- '@harlan-zw/nuxt-cloudflare@0.5.1'
- '@harlan-zw/nuxt-dx@0.3.0'
- '@harlan-zw/nuxt-sentry@0.3.0'
- '@nuxt/kit@4.6.0'
- '@nuxt/schema@4.6.0'
- '@nuxt/vite-builder@4.6.0'
- '@nuxt/nitro-server@4.6.0'
- '@nuxt/vite-server@4.6.0'
- '@cloudflare/workers-types@5.20261002.1'
- miniflare@5.20261001.0-alpha
- wrangler@4.146.0
Expand Down Expand Up @@ -92,9 +108,6 @@ autoInstallPeers: false

trustPolicy: no-downgrade

packages:
- workers/*

# The site root is a workspace project too, so `pnpm pipeline` can run its
# tasks. Every task that names no inputs hashes every tracked file, which is
# why lint carries no inputs: `eslint .` reads the whole repository. The
Expand Down Expand Up @@ -175,24 +188,60 @@ pipelines:
test: [dev:prepare, test]

typecheck: [dev:prepare, typecheck]
# npm provenance identifies cssnano/cssnano commit 9a4f2516. Nuxt 4.6 requires this version.
trustPolicyExclude:
- cssnano@9.2.2
- cssnano-preset-default@9.2.2
- stylehacks@9.0.7
- cssnano-utils@8.1.0
- postcss-colormin@9.0.6
- postcss-convert-values@9.0.7
- postcss-discard-comments@9.0.6
- postcss-discard-duplicates@9.0.5
- postcss-discard-empty@9.0.5
- postcss-discard-overridden@9.0.5
- postcss-merge-longhand@9.2.0
- postcss-merge-rules@9.0.8
- postcss-minify-font-values@9.0.7
- postcss-minify-gradients@9.0.6
- postcss-minify-params@9.0.6
- postcss-minify-selectors@9.0.6
- postcss-normalize-charset@9.0.5
- postcss-normalize-display-values@9.0.5
- postcss-normalize-positions@9.0.6
- postcss-normalize-repeat-style@9.0.5
- postcss-normalize-string@9.0.5
- postcss-normalize-timing-functions@9.0.5
- postcss-normalize-unicode@9.0.5
- postcss-normalize-url@9.0.5
- postcss-normalize-whitespace@9.0.5
- postcss-ordered-values@9.0.6
- postcss-reduce-initial@9.0.6
- postcss-reduce-transforms@9.0.4
- postcss-svgo@9.0.4
- postcss-unique-selectors@9.0.5
packages:
- workers/*

patchedDependencies:
hookable@5.5.3: patches/hookable@5.5.3.patch
hookable@6.1.1: patches/hookable@6.1.1.patch
hookable@6.1.2: patches/hookable@6.1.2.patch
skilld-protocol@2.5.0: patches/skilld-protocol@2.5.0.patch
catalog:
'@antfu/eslint-config': ^9.3.0
'@cloudflare/sandbox': 1.0.0
'@cloudflare/workers-types': ^5.20260901.1
'@comark/nuxt': 0.7.0
'@harlan-zw/comark-content': 0.1.5
'@harlan-zw/jev': 0.2.4
'@harlan-zw/nuxt-cf-jobs': 0.2.6
'@harlan-zw/nuxt-checkin': 0.3.0
'@harlan-zw/nuxt-cloudflare': 0.4.3
'@harlan-zw/nuxt-dx': 0.2.1
'@harlan-zw/nuxt-sentry': 0.2.0
'@harlan-zw/nuxt-use-query': 0.2.2
'@harlan-zw/nuxt-wide-events': ^0.1.4
'@harlan-zw/comark-content': 0.2.0
'@harlan-zw/jev': 0.3.0
'@harlan-zw/nuxt-cf-jobs': 0.3.0
'@harlan-zw/nuxt-checkin': 0.4.1
'@harlan-zw/nuxt-cloudflare': 0.5.1
'@harlan-zw/nuxt-dx': 0.3.0
'@harlan-zw/nuxt-sentry': 0.3.0
'@harlan-zw/nuxt-use-query': 0.3.0
'@harlan-zw/nuxt-wide-events': 0.2.0
'@iconify-json/lucide': ^1.2.128
'@iconify-json/simple-icons': ^1.2.94
'@iconify-json/vscode-icons': ^1.2.76
Expand All @@ -202,7 +251,7 @@ catalog:
'@nuxt/a11y': 1.0.0-alpha.1
'@nuxt/eslint': ^1.17.0
'@nuxt/fonts': ^0.14.0
'@nuxt/kit': 4.5.2
'@nuxt/kit': 4.6.0
'@nuxt/scripts': ^1.3.10
'@nuxt/test-utils': ^4.2.0
'@nuxt/ui': ^4.11.2
Expand Down Expand Up @@ -232,7 +281,7 @@ catalog:
lint-staged: ^17.4.1
marked: ^18.0.11
motion-v: ^2.5.1
nuxt: 4.5.2
nuxt: 4.6.0
nuxt-ai-ready: 2.5.2
nuxt-auth-utils: ^0.5.30
nuxt-og-image: ^6.9.1
Expand Down Expand Up @@ -263,8 +312,6 @@ ignoredBuiltDependencies:
- esbuild
- unrs-resolver
- vue-demi.
onlyBuiltDependencies:
- better-sqlite3
trustPolicyIgnoreAfter: 262800
allowBuilds:
'@parcel/watcher': true
Expand All @@ -276,3 +323,6 @@ allowBuilds:
unrs-resolver: true
vue-demi: true
workerd: true

onlyBuiltDependencies:
- better-sqlite3
4 changes: 2 additions & 2 deletions scripts/lib/d1-schema-verifier.ts
Original file line number Diff line number Diff line change
Expand Up @@ -129,8 +129,8 @@ export type CfJobsPackageVerificationResult
| { _tag: 'fail', issues: PackageContractIssue[] }

export const CF_JOBS_SCHEMA_CONTRACT = {
// The 0.2.6 distributed schema preserves these five indexes and predicates.
version: '0.2.6',
// The 0.3.0 distributed schema preserves these five indexes and predicates.
version: '0.3.0',
indexes: [
{
name: 'idx_jobs_dispatchable',
Expand Down
16 changes: 13 additions & 3 deletions server/plugins/robots-header.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import { setResponseHeader } from 'h3'
import { robotsFromHtml } from '#shared/robots-meta'

/**
Expand All @@ -7,11 +8,20 @@ import { robotsFromHtml } from '#shared/robots-meta'
* A response with no robots meta tag keeps whatever header it already has.
*/
export default defineNitroPlugin((nitroApp) => {
nitroApp.hooks.hook('render:response', (response) => {
nitroApp.hooks.hook('render:html', (html, { event }) => {
const directive = robotsFromHtml(html.head.join(''))
if (directive)
setResponseHeader(event, 'x-robots-tag', directive)
})

nitroApp.hooks.hook('render:response', (response, { event }) => {
if (typeof response.body !== 'string')
return
const directive = robotsFromHtml(response.body)
if (directive)
response.headers['x-robots-tag'] = directive
if (directive) {
if (response.headers)
response.headers['x-robots-tag'] = directive
setResponseHeader(event, 'x-robots-tag', directive)
}
})
})