@jimhoyd/urlcode 0.4.0-alpha.1 → 0.4.0-alpha.3
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/.claude/skills/urlcode-authoring/SKILL.md +36 -22
- package/.claude/skills/urlcode-operations/SKILL.md +16 -22
- package/.claude-plugin/marketplace.json +1 -1
- package/CONTRIBUTING.md +20 -16
- package/README.md +83 -80
- package/ROADMAP.md +61 -331
- package/SECURITY.md +23 -8
- package/dist/BUILD-MANIFEST.json +42 -47
- package/dist/agents-guide.js +18 -18
- package/dist/build-static.js +136 -0
- package/dist/capabilities.js +85 -31
- package/dist/capability-query.js +0 -1
- package/dist/cli.js +24 -32
- package/dist/compliance-rules/baseline.js +2 -10
- package/dist/compliance-rules/privacy.js +5 -16
- package/dist/compliance-rules/shared.js +0 -2
- package/dist/compliance.js +6 -8
- package/dist/config.js +15 -8
- package/dist/context.js +9 -10
- package/dist/examples.js +2 -2
- package/dist/explain-cli.js +7 -5
- package/dist/explain.js +10 -5
- package/dist/extensions.js +61 -2
- package/dist/function-sources.js +34 -2
- package/dist/function-worker.js +3 -1
- package/dist/functions.js +84 -13
- package/dist/guest-api.js +29 -3
- package/dist/index.js +3 -6
- package/dist/manifest.js +11 -7
- package/dist/mcp-authoring.js +2 -2
- package/dist/mcp.js +1 -1
- package/dist/observability.js +1 -21
- package/dist/policies/cache.js +8 -3
- package/dist/policies.js +3 -1
- package/dist/policy.js +28 -9
- package/dist/prerender.js +4 -0
- package/dist/project-tests.js +3 -3
- package/dist/readiness.js +35 -9
- package/dist/route-diff.js +12 -5
- package/dist/router.js +5 -7
- package/dist/runtime.js +77 -58
- package/dist/sandbox.js +48 -0
- package/dist/scaffold.js +0 -0
- package/dist/scripts/operational-drills.js +12 -54
- package/dist/server.js +3 -29
- package/dist/tooling.js +1 -1
- package/dist/trusted-functions.js +210 -0
- package/dist/types/build-static.d.ts +43 -0
- package/dist/types/capabilities.d.ts +14 -5
- package/dist/types/compliance-rules/shared.d.ts +0 -2
- package/dist/types/compliance.d.ts +0 -3
- package/dist/types/config.d.ts +2 -1
- package/dist/types/context.d.ts +2 -1
- package/dist/types/examples.d.ts +1 -1
- package/dist/types/explain.d.ts +6 -0
- package/dist/types/extensions.d.ts +55 -0
- package/dist/types/function-sources.d.ts +4 -0
- package/dist/types/functions.d.ts +48 -5
- package/dist/types/guest-api.d.ts +1 -0
- package/dist/types/index.d.ts +3 -6
- package/dist/types/manifest.d.ts +5 -3
- package/dist/types/observability.d.ts +1 -14
- package/dist/types/project-tests.d.ts +1 -2
- package/dist/types/readiness.d.ts +12 -3
- package/dist/types/router.d.ts +2 -1
- package/dist/types/runtime.d.ts +0 -27
- package/dist/types/sandbox.d.ts +12 -0
- package/dist/types/scaffold.d.ts +0 -2
- package/dist/types/server.d.ts +1 -4
- package/dist/types/tooling.d.ts +3 -3
- package/dist/types/trusted-functions.d.ts +29 -0
- package/dist/types/types.d.ts +22 -8
- package/dist/types/verify-deployment.d.ts +2 -2
- package/dist/types.js +25 -5
- package/dist/typescript-authoring.js +67 -18
- package/dist/verify-deployment.js +3 -3
- package/docs/AI-AUTHORING.md +109 -10
- package/docs/ASSETS.md +2 -1
- package/docs/AUTH-BACKUP.md +32 -0
- package/docs/AWS.md +4 -4
- package/docs/BEST-PRACTICES.md +17 -8
- package/docs/CAPABILITIES.md +30 -17
- package/docs/CAPACITY.md +128 -31
- package/docs/CI-FOLLOWUP-2026-09-19.md +97 -0
- package/docs/CI-RELEASE-AUDIT-2026-09-19.md +322 -0
- package/docs/CI.md +8 -3
- package/docs/CLOUDFLARE.md +1 -2
- package/docs/CODEBASE-AUDIT-2026-09-20.md +278 -0
- package/docs/COMPLIANCE.md +6 -9
- package/docs/DEPLOYMENT-CHECKS.md +1 -1
- package/docs/DEVELOPMENT-PIPELINE.md +181 -0
- package/docs/EXTENSIONS.md +193 -11
- package/docs/FRAMEWORK.md +53 -33
- package/docs/FUNCTION-SECURITY.md +173 -32
- package/docs/INSTALL.md +0 -5
- package/docs/LOAD-TESTING.md +4 -4
- package/docs/LOCAL-DEVELOPMENT.md +3 -0
- package/docs/MIDDLEWARE.md +27 -16
- package/docs/MONITORING.md +2 -19
- package/docs/OBSERVABILITY.md +7 -16
- package/docs/OPEN-DECISIONS.md +184 -0
- package/docs/OPERATIONAL-PROOF.md +26 -30
- package/docs/OPERATIONS.md +23 -32
- package/docs/POLICIES.md +27 -8
- package/docs/PRERENDER.md +25 -13
- package/docs/PROJECT-DIRECTION.md +35 -10
- package/docs/READINESS.md +6 -2
- package/docs/README.md +20 -41
- package/docs/RELEASE-0.4.0-alpha.3.md +50 -0
- package/docs/RELEASE-READINESS.md +50 -30
- package/docs/RELEASE-SECURITY.md +72 -86
- package/docs/RESILIENCE.md +16 -15
- package/docs/ROUTING.md +7 -10
- package/docs/SANDBOX-REVIEW.md +19 -6
- package/docs/SCAFFOLDING.md +0 -2
- package/docs/SECURITY-AUDIT.md +42 -2
- package/docs/SPECIFICATION.md +63 -27
- package/docs/SPIKE-AI-FRAMEWORK-BENCHMARK.md +288 -0
- package/docs/SPIKE-BUSINESS-SUITE.md +16 -0
- package/docs/SPIKE-CORE-LAYERING.md +368 -0
- package/docs/SPIKE-DEFAULT-TRUST-MODEL.md +211 -0
- package/docs/SPIKE-LAMBDA-COMPILE.md +12 -2
- package/docs/STARTERS.md +1 -1
- package/docs/STATIC.md +105 -0
- package/docs/TOOLING.md +17 -12
- package/docs/TUNNELS.md +0 -3
- package/docs/TYPESCRIPT-AUTHORING.md +32 -12
- package/docs/TYPESCRIPT.md +25 -4
- package/docs/VERCEL.md +4 -5
- package/docs/VERSION-ALIGNMENT.md +46 -0
- package/docs/YAML-GUIDE.md +0 -3
- package/docs/YAML-REFERENCE.md +16 -6
- package/docs/archive/2026-09-19/EXTENSION-IMPLEMENTATION.md +68 -0
- package/docs/{MANAGEMENT-SECURITY.md → archive/2026-09-19/MANAGEMENT-SECURITY.md} +20 -0
- package/docs/{NEXT-PHASE-PLAN.md → archive/2026-09-19/NEXT-PHASE-PLAN.md} +26 -8
- package/docs/{NEXT-STEPS.md → archive/2026-09-19/NEXT-STEPS.md} +274 -43
- package/docs/archive/2026-09-19/OPEN-DECISIONS.md +277 -0
- package/docs/archive/2026-09-19/RELEASE-SECURITY.md +186 -0
- package/docs/archive/2026-09-19/ROADMAP.md +386 -0
- package/docs/{SPIKE-EXTENSION-MODEL.md → archive/2026-09-19/SPIKE-EXTENSION-MODEL.md} +12 -2
- package/docs/{SPIKE-EXTENSIONS.md → archive/2026-09-19/SPIKE-EXTENSIONS.md} +28 -12
- package/docs/archive/2026-09-19/SPIKE-MONOREPO.md +776 -0
- package/docs/{USABILITY-REVIEW.md → archive/2026-09-19/USABILITY-REVIEW.md} +18 -2
- package/docs/archive/README.md +27 -0
- package/docs/policies/agents.md +1 -1
- package/docs/policies/cache.md +13 -0
- package/docs/policies/compression.md +3 -2
- package/docs/policies/security.md +3 -2
- package/examples/assets/example.yaml +2 -2
- package/examples/aws/example.yaml +1 -1
- package/examples/cloudflare/example.yaml +1 -1
- package/examples/conditions/example.yaml +1 -1
- package/examples/cookbook/example.yaml +1 -1
- package/examples/cookbook/middleware/bucket.mjs +12 -2
- package/examples/cookbook/middleware/locale.mjs +7 -3
- package/examples/cookbook/route-index.json +1 -1
- package/examples/cookbook/routes/middleware.yaml +1 -1
- package/examples/egress/example.yaml +1 -1
- package/examples/extensions/example.yaml +1 -1
- package/examples/prerender/README.md +14 -6
- package/examples/prerender/example.yaml +1 -1
- package/examples/prerender/functions/page.mjs +4 -2
- package/examples/prerender/middleware/template.mjs +1 -1
- package/examples/prerender/prerender.mjs +1 -1
- package/examples/prerender/urlcode.yaml +8 -4
- package/examples/provider-conformance/example.yaml +1 -1
- package/examples/vercel/example.yaml +1 -1
- package/llms-full.txt +686 -239
- package/llms.txt +27 -15
- package/package.json +32 -5
- package/packaging/claude-plugin/.claude-plugin/plugin.json +2 -2
- package/packaging/claude-plugin/skills/urlcode-authoring/SKILL.md +36 -22
- package/packaging/claude-plugin/skills/urlcode-operations/SKILL.md +16 -22
- package/recipes/authenticated-json-api/README.md +4 -3
- package/recipes/authenticated-json-api/functions/profile.mjs +2 -1
- package/recipes/authenticated-json-api/recipe.yaml +2 -2
- package/recipes/contact-form/functions/contact.mjs +2 -1
- package/recipes/contact-form/recipe.yaml +3 -3
- package/recipes/cors-api/README.md +2 -2
- package/recipes/cors-api/recipe.yaml +2 -2
- package/recipes/health-page/README.md +1 -1
- package/recipes/health-page/recipe.yaml +1 -1
- package/recipes/json-api/README.md +1 -1
- package/recipes/json-api/recipe.yaml +4 -4
- package/recipes/middleware/README.md +8 -4
- package/recipes/middleware/middleware/bucket.mjs +12 -2
- package/recipes/middleware/middleware/locale.mjs +7 -3
- package/recipes/middleware/recipe.yaml +1 -1
- package/recipes/protected-download/README.md +1 -1
- package/recipes/protected-download/recipe.yaml +2 -2
- package/recipes/redirect/recipe.yaml +1 -1
- package/recipes/static-plus-api/README.md +2 -2
- package/recipes/static-plus-api/public/index.html +1 -1
- package/recipes/static-plus-api/recipe.yaml +2 -2
- package/recipes/static-plus-api/urlcode.yaml +1 -1
- package/recipes/typescript/README.md +2 -1
- package/recipes/typescript/recipe.yaml +5 -5
- package/recipes/webhook-receiver/README.md +5 -1
- package/recipes/webhook-receiver/recipe.yaml +2 -1
- package/recipes/webhook-receiver/urlcode.yaml +7 -0
- package/schemas/recipe.schema.json +4 -3
- package/schemas/urlcode.schema.json +14 -41
- package/skills/urlcode/SKILL.md +32 -11
- package/starters/default/AGENTS.md +18 -18
- package/starters/default/urlcode.yaml +0 -1
- package/dist/link-api.js +0 -136
- package/dist/link-cli.js +0 -141
- package/dist/link-events.js +0 -76
- package/dist/link-records.js +0 -31
- package/dist/link-store-worker.js +0 -150
- package/dist/link-store.js +0 -250
- package/dist/management-policy.js +0 -40
- package/dist/sqlite-version.js +0 -6
- package/dist/types/link-api.d.ts +0 -30
- package/dist/types/link-cli.d.ts +0 -37
- package/dist/types/link-events.d.ts +0 -27
- package/dist/types/link-records.d.ts +0 -11
- package/dist/types/link-store-worker.d.ts +0 -1
- package/dist/types/link-store.d.ts +0 -130
- package/dist/types/management-policy.d.ts +0 -8
- package/dist/types/sqlite-version.d.ts +0 -1
- package/docs/DYNAMIC-LINKS.md +0 -61
- package/docs/links/cli.md +0 -110
- package/docs/links/limits.md +0 -175
- package/docs/links/management-api.md +0 -80
- package/docs/links/pools.md +0 -75
- package/docs/links/setup.md +0 -135
- package/docs/yaml/links.md +0 -30
- package/examples/live-links/README.md +0 -11
- package/examples/live-links/example.yaml +0 -21
- package/examples/live-links/tests/requests.json +0 -6
- package/examples/live-links/urlcode.yaml +0 -16
package/ROADMAP.md
CHANGED
|
@@ -1,331 +1,61 @@
|
|
|
1
|
-
#
|
|
2
|
-
|
|
3
|
-
URLCode
|
|
4
|
-
|
|
5
|
-
[
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
(
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
(
|
|
43
|
-
[
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
and
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
See [capabilities](docs/CAPABILITIES.md) and the
|
|
63
|
-
[next-phase review and implementation status](docs/NEXT-PHASE-PLAN.md).
|
|
64
|
-
|
|
65
|
-
## Portability and URL behavior — implemented, unreleased
|
|
66
|
-
|
|
67
|
-
Strict redirect interchange supports CSV/JSON/YAML, Netlify and Cloudflare
|
|
68
|
-
`_redirects`, a bounded Netlify TOML subset and Vercel redirects. Conversion
|
|
69
|
-
reports refuse unsupported semantics; provider differences require explicit
|
|
70
|
-
acknowledgment and are never called lossless. A synthetic conformance fixture
|
|
71
|
-
and bounded HTTPS runner distinguish local adapter tests from observed
|
|
72
|
-
provider deployments. Actual Cloudflare/AWS/Vercel deployment evidence remains
|
|
73
|
-
pending; this does not complete M4.
|
|
74
|
-
|
|
75
|
-
Exact query/header/cookie/origin/method conditions and disjoint conditional
|
|
76
|
-
redirect/response cases run in the self-hosted, AWS and Vercel runtimes.
|
|
77
|
-
Cloudflare refuses these until its compiler can preserve their semantics.
|
|
78
|
-
Self-hosted proxy and webhook signals use explicit revision-pinned operator
|
|
79
|
-
origin grants, connection-pinned public DNS and bounded transport. Signals
|
|
80
|
-
have no durable delivery or retry guarantee. Other targets refuse proxy and
|
|
81
|
-
signals. See [conditions](docs/CONDITIONS.md), [egress](docs/EGRESS.md),
|
|
82
|
-
[interchange](docs/INTERCHANGE.md) and
|
|
83
|
-
[provider verification](docs/PROVIDER-VERIFICATION.md).
|
|
84
|
-
|
|
85
|
-
## Developer ecosystem — implemented, unreleased
|
|
86
|
-
|
|
87
|
-
Bundled Git-owned recipes, safe bulk imports into route includes, build-time
|
|
88
|
-
TypeScript guest transpilation, read-only inspection APIs and optional stdio
|
|
89
|
-
MCP tooling are available. The runtime still executes only JavaScript inside
|
|
90
|
-
QuickJS/WASM; TypeScript authoring does not add host execution. Bulk benchmarks
|
|
91
|
-
successfully cover 1,000, 10,000 and 100,000 routes without relaxing parser
|
|
92
|
-
limits. See [recipes](docs/RECIPES.md), [bulk evidence](docs/BULK.md),
|
|
93
|
-
[TypeScript authoring](docs/TYPESCRIPT-AUTHORING.md) and
|
|
94
|
-
[SDK/MCP](docs/TOOLING.md). These features do not supply durable signals,
|
|
95
|
-
protected downloads, a remote marketplace or provider deployment proof.
|
|
96
|
-
|
|
97
|
-
## TypeScript source and shipped declarations — implemented, unreleased
|
|
98
|
-
|
|
99
|
-
The runtime, scripts, tests and benchmarks are TypeScript under a strict
|
|
100
|
-
configuration, checked by `npm run typecheck` inside `npm run verify`. The
|
|
101
|
-
package ships `dist/`: Node's own type stripping of the source with the
|
|
102
|
-
specifier extension rewritten, so it is the same JavaScript line for line,
|
|
103
|
-
plus `.d.ts` declarations for every export (`urlcode`, `@jimhoyd/urlcode/plugins`,
|
|
104
|
-
`@jimhoyd/urlcode/policies`, `@jimhoyd/urlcode/observability`, `@jimhoyd/urlcode/compliance`,
|
|
105
|
-
`@jimhoyd/urlcode/prerender` and the three provider entries). `dist` is never
|
|
106
|
-
committed; the build runs in the digest-pinned release container, its hashes
|
|
107
|
-
are recorded in the manifest, and a CI job builds twice and diffs the trees.
|
|
108
|
-
Measured cold start, throughput and memory of `dist/` equal the previous
|
|
109
|
-
JavaScript (see [performance](docs/PERFORMANCE.md)). Contributors need Node
|
|
110
|
-
22.18+ to run the source directly; installed packages still run on 22.13+.
|
|
111
|
-
See [TypeScript](docs/TYPESCRIPT.md).
|
|
112
|
-
|
|
113
|
-
## Host policies and plugins — implemented, unreleased
|
|
114
|
-
|
|
115
|
-
A `policies` block in YAML, reusable `profiles` and an operator plugin API
|
|
116
|
-
close the gaps the [extensions spike](docs/SPIKE-EXTENSIONS.md) ranked
|
|
117
|
-
highest: no cross-cutting behavior, no per-client throttle, no bot policy, no
|
|
118
|
-
security-header preset, no compression and no response cache. Five policies
|
|
119
|
-
(`throttle`, `agents`, `security`, `compression`, `cache`) run in the host
|
|
120
|
-
process after route match and before the route contract, all off by default,
|
|
121
|
-
with a per-target table that refuses at activation what a target cannot
|
|
122
|
-
enforce: the serverless adapters take `agents`, `security`, `cache` and
|
|
123
|
-
route-partitioned `throttle`; the Cloudflare build compiles `agents` and
|
|
124
|
-
`security` into the artifact and refuses the rest with the route named.
|
|
125
|
-
`--trusted-proxies` names the hops allowed to set `X-Forwarded-For` for client
|
|
126
|
-
identity. Plugins are host code passed to `startServer` and the adapters on
|
|
127
|
-
the same hook seam the policies use; nothing in YAML names one. See
|
|
128
|
-
[policies](docs/POLICIES.md) and [plugins](docs/PLUGINS.md).
|
|
129
|
-
|
|
130
|
-
This checkpoint is on a branch and not in a published release. An
|
|
131
|
-
interoperability review of the five policies together, the spike's `report`
|
|
132
|
-
mode headers on every target and the audit's policy table remain open, and no
|
|
133
|
-
deployment has exercised a policy on a provider.
|
|
134
|
-
|
|
135
|
-
## Provider adapters — Vercel and AWS Lambda native handlers
|
|
136
|
-
|
|
137
|
-
`@jimhoyd/urlcode/vercel` serves a project as a Vercel Node function, reusing the
|
|
138
|
-
runtime's transport-agnostic handle() and a shared response writer, so a
|
|
139
|
-
deployment returns byte-identical status, body and headers to the self-hosted
|
|
140
|
-
server. Bindings arrive through a `URLCODE_POLICY` environment variable holding
|
|
141
|
-
the same revision-pinned grant document the operator policy file carries.
|
|
142
|
-
|
|
143
|
-
Native handlers only: isolated functions, middleware and stored live links are
|
|
144
|
-
refused at activation, because every cold start would pay worker and WASM
|
|
145
|
-
startup and a serverless filesystem cannot hold a durable link store. The
|
|
146
|
-
`@jimhoyd/urlcode/aws` does the same for a Lambda Function URL or API Gateway HTTP API.
|
|
147
|
-
Payload format 2.0 only: format 1.0 supplies an already-decoded path and query,
|
|
148
|
-
and this runtime rejects ambiguous encoding deliberately, so rebuilding a target
|
|
149
|
-
from decoded parts would misrepresent the request. Response policy, including
|
|
150
|
-
content length, now lives in one place shared by every host rather than partly
|
|
151
|
-
relying on Node's implicit behaviour.
|
|
152
|
-
|
|
153
|
-
Neither adapter has been deployed; see the [Vercel](docs/VERCEL.md) and
|
|
154
|
-
[AWS](docs/AWS.md) guides, which state what stays unverified as a result.
|
|
155
|
-
|
|
156
|
-
## Provider targets — Cloudflare Workers
|
|
157
|
-
|
|
158
|
-
Cloudflare Workers has no worker threads, no filesystem and no runtime code
|
|
159
|
-
generation, so it gets a compiler rather than an adapter: `urlcode build
|
|
160
|
-
--target cloudflare` emits a Worker, the compiled routes and Ajv standalone
|
|
161
|
-
validators, and `@jimhoyd/urlcode/cloudflare` serves them with the same matching, request
|
|
162
|
-
policy and response policy as every other host. Declarative routes only —
|
|
163
|
-
redirects and declared responses with parameters, defaults, validation, response
|
|
164
|
-
headers, `enabled` and `expires`. Functions, middleware, stored links, assets and
|
|
165
|
-
bindings are refused at build time with the route named, so an unsupported
|
|
166
|
-
project fails the build instead of the deployment. Bindings are refused even as
|
|
167
|
-
literals, because a build artifact must never carry a secret.
|
|
168
|
-
|
|
169
|
-
Making this possible moved request-time matching into `src/match.ts` and header
|
|
170
|
-
validation into `src/header-validation.ts`, both free of Node imports, so one
|
|
171
|
-
implementation now serves the Node server, the serverless adapters and the
|
|
172
|
-
Worker. `test/header-validation.test.ts` compares the header rules against
|
|
173
|
-
`node:http` across the full character range, because disagreeing there is header
|
|
174
|
-
injection, and `test/cloudflare.test.ts` asserts the Worker and the self-hosted
|
|
175
|
-
server return the same status, body and headers for the same project.
|
|
176
|
-
|
|
177
|
-
This has not been deployed to Cloudflare; see the
|
|
178
|
-
[Cloudflare guide](docs/CLOUDFLARE.md) for the two request-level differences the
|
|
179
|
-
platform imposes and what stays unverified.
|
|
180
|
-
|
|
181
|
-
## Installation and publication — 0.1.0
|
|
182
|
-
|
|
183
|
-
Added a tag-driven release workflow that reuses the audited candidate build path,
|
|
184
|
-
publishes a GitHub release with the signed tarball, SBOM, manifest, `SHA256SUMS`
|
|
185
|
-
and a rendered Homebrew formula, and optionally publishes to npm (with
|
|
186
|
-
provenance) and GHCR behind repository variables. Added a checksum-verifying
|
|
187
|
-
`install.sh`, a Homebrew formula template rendered only from measured bytes, and
|
|
188
|
-
an [installation guide](docs/INSTALL.md) covering npm, Homebrew, the script, the
|
|
189
|
-
container and provenance verification.
|
|
190
|
-
|
|
191
|
-
0.1.0 was released from this pipeline: the GitHub release carries the signed
|
|
192
|
-
tarball, SBOM, manifest, `SHA256SUMS` and Homebrew formula, and an install from
|
|
193
|
-
the published release was verified end to end. npm and GHCR publication stay
|
|
194
|
-
opt-in and remain unproven until enabled, so the Homebrew formula's registry URL
|
|
195
|
-
does not resolve yet.
|
|
196
|
-
|
|
197
|
-
Added tunnel and [monitoring](docs/MONITORING.md) recipes, and extended
|
|
198
|
-
`urlcode benchmark` to measure a running deployment through its real path with
|
|
199
|
-
warm-up and shed/transport separation; see [load testing](docs/LOAD-TESTING.md).
|
|
200
|
-
M3's remaining gap is sustained soak and slow-peer behaviour, which that tool
|
|
201
|
-
does not cover.
|
|
202
|
-
|
|
203
|
-
## Hardening checkpoint — alpha.8
|
|
204
|
-
|
|
205
|
-
Bound HTTP admission and inactive sockets, drain accepted link writes on shutdown,
|
|
206
|
-
reject invalid store metadata, and correct management defaults/method responses.
|
|
207
|
-
The [readiness register](docs/RELEASE-READINESS.md) distinguishes tested safeguards
|
|
208
|
-
from deployment and stable-release gates. Feature breadth does not imply stability.
|
|
209
|
-
|
|
210
|
-
## Live short links — alpha.8
|
|
211
|
-
|
|
212
|
-
Implemented an optional native `link` handler, local SQLite persistence, CLI CRUD
|
|
213
|
-
and a separate authenticated management API. Links become visible without YAML
|
|
214
|
-
changes/reloads; versioned writes prevent silent lost updates. No guest storage
|
|
215
|
-
or network access is added. Same-host only; distributed storage, general state,
|
|
216
|
-
user accounts and provider adapters remain open. See [dynamic links](docs/DYNAMIC-LINKS.md).
|
|
217
|
-
|
|
218
|
-
## Middleware — alpha.7
|
|
219
|
-
|
|
220
|
-
Implemented route-local ordered `next()` middleware around every handler, early
|
|
221
|
-
responses, request-local state and shared sandbox deadlines. Plain native routes
|
|
222
|
-
retain their fast path. Native bodies stay opaque; middleware coverage requires
|
|
223
|
-
explicit assertions. See [middleware](docs/MIDDLEWARE.md).
|
|
224
|
-
|
|
225
|
-
## One starter — alpha.6
|
|
226
|
-
|
|
227
|
-
`urlcode init <directory>` always creates the same function-plus-redirect project.
|
|
228
|
-
There is no template selector. The public urlcode-template repository mirrors
|
|
229
|
-
those examples with a pinned npm dependency. Richer asset examples remain under
|
|
230
|
-
examples/assets. Historical starter branches are not maintained.
|
|
231
|
-
|
|
232
|
-
## Route readiness and local project benchmarks — alpha.5
|
|
233
|
-
|
|
234
|
-
Implemented route inventory, expected-count checks, active route/method coverage,
|
|
235
|
-
generated native probes plus explicit fixtures, and bounded assertion-aware local
|
|
236
|
-
benchmarks. [Readiness](docs/READINESS.md) documents the gate and remaining deployment,
|
|
237
|
-
soak, remote-destination and business-coverage work. This does not complete M3/M4.
|
|
238
|
-
|
|
239
|
-
## HTTP configuration and standalone starter — 0.1.0-alpha.4
|
|
240
|
-
|
|
241
|
-
Implemented bounded request body/media-type/JSON checks, literal response headers
|
|
242
|
-
and separate Set-Cookie values, and native text/JSON responses. See [HTTP](docs/HTTP.md)
|
|
243
|
-
for precise scope; automatic CORS, multipart, streaming and other listed features
|
|
244
|
-
remain open. The public [urlcode-template](https://github.com/jimhoyd-com/urlcode-template)
|
|
245
|
-
provides two routes with a pinned runtime dependency and cross-platform CI.
|
|
246
|
-
|
|
247
|
-
## Native assets — 0.1.0-alpha.3
|
|
248
|
-
|
|
249
|
-
Implemented the page/static/download portion of M2: project-contained asset
|
|
250
|
-
snapshots, automatic MIME types, attachment names, HEAD, cache validators and
|
|
251
|
-
single byte ranges. Dedicated public directories, symlink/hardlink rejection and
|
|
252
|
-
bounded memory are part of the contract. [Asset guide](docs/ASSETS.md).
|
|
253
|
-
Bulk tools, recipes and best-effort signals were added in the unreleased next-phase work above; they were not part of alpha.3.
|
|
254
|
-
|
|
255
|
-
## Security correction — 0.1.0-alpha.2
|
|
256
|
-
|
|
257
|
-
All function code is untrusted. Node host execution has been replaced by
|
|
258
|
-
QuickJS/WebAssembly isolation with fresh invocation state, no ambient host or
|
|
259
|
-
network APIs, bounded resources, restricted module graphs and revision-pinned
|
|
260
|
-
operator binding policy. This protection is part of the free product. See the
|
|
261
|
-
[security model](docs/FUNCTION-SECURITY.md). Full Fetch/Node
|
|
262
|
-
API compatibility and network integrations were not part of that alpha and
|
|
263
|
-
remain outside the 0.1 contract.
|
|
264
|
-
|
|
265
|
-
## Earlier implementation checkpoint — 0.1.0-alpha.1
|
|
266
|
-
|
|
267
|
-
Implemented: versioned strict YAML/JSON Schema subset, explicit file composition,
|
|
268
|
-
redirect/parameter semantics, JavaScript Request/Response functions with bounded
|
|
269
|
-
workers, scoped binding context, init/add/validate/dev/serve/test/doctor, indexed
|
|
270
|
-
snapshots, last-good reloads, graceful shutdown, health/readiness, safe request
|
|
271
|
-
logs, two runnable starters, ESLint and unit/HTTP/package tests. Cross-platform
|
|
272
|
-
CI and a non-root container build are included. See the [contract](docs/SPECIFICATION.md)
|
|
273
|
-
and [operations guide](docs/OPERATIONS.md) for exact support and evidence limits.
|
|
274
|
-
|
|
275
|
-
Still open in the early contract: host namespaces, stable identity beyond paths,
|
|
276
|
-
fuller parameter vocabulary. Build-time TypeScript authoring and capability planning are now implemented in the unreleased work above.
|
|
277
|
-
No claims of complete M0/M1 or stable production readiness. M2–M4 work continues
|
|
278
|
-
in the order below; a few independently useful operational foundations shipped early.
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
| Milestone | Scope | Completion evidence |
|
|
282
|
-
|---|---|---|
|
|
283
|
-
| M0 — contract/build loop | YAML schema, matching/input semantics, function API, composition, runtime/packaging prototype, CI | Fixture validates; invalid definitions fail; verification runs |
|
|
284
|
-
| M1 — local alpha | CLI, aliases, redirects, parameters, custom functions, env/secrets, indexed routes and reload | Redirect plus function tested locally without accounts/DB; invalid reload preserves working version |
|
|
285
|
-
| M2 — bulk/reusable behavior | CSV/YAML/JSON, safe bulk edits/checks, templates, best-effort async signals, simple pages/static/downloads | 10k-route example, local side-effect tests, safe file serving, benchmark datasets |
|
|
286
|
-
| M3 — self-hosted beta | Process/container deployment, domain/TLS guide, packages/Homebrew, ngrok, monitoring and load tools | Install, test, deploy, observe and roll back a real project |
|
|
287
|
-
| M4 — provider public release | Cloudflare/AWS/Vercel adapters, provider conversion, capability/limit checks and stable docs | Baseline redirect/parameter/function fixtures on each advertised initial target; additional capability gaps explicit |
|
|
288
|
-
| M5 — advanced public features | Bounded proxies, protected/one-time downloads, durable signals/state, broader catalog and API/SDK/MCP | Feature-specific guarantees, tests and portable capability reports |
|
|
289
|
-
|
|
290
|
-
The first provider-capable public release is M4; the 0.1 self-hosted release is
|
|
291
|
-
useful within its documented scope. A marketplace and advanced stateful
|
|
292
|
-
features are not prerequisites. No web UI/TUI or framework-hosting platform.
|
|
293
|
-
Netlify starts as redirect interchange after the initial provider adapters.
|
|
294
|
-
|
|
295
|
-
## Launch and stabilize the free version
|
|
296
|
-
|
|
297
|
-
Stability means repeatable installs/upgrades, dependable routing/functions,
|
|
298
|
-
working deployment and rollback, useful diagnostics, and serious recurring
|
|
299
|
-
issues from actual users addressed. Feedback begins with usable alphas, but the
|
|
300
|
-
free version is not stable until that evidence exists; do not invent a calendar
|
|
301
|
-
deadline or adoption-count threshold.
|
|
302
|
-
|
|
303
|
-
Keep the architectural direction: reusable runtime/compiler, provider adapters,
|
|
304
|
-
separate configuration and secrets, versioned artifacts, Git-owned definitions
|
|
305
|
-
and observable behavior. Avoid assumptions that would force users to rewrite
|
|
306
|
-
projects later. No artificial restrictions in the free version; it is licensed
|
|
307
|
-
under Apache-2.0.
|
|
308
|
-
|
|
309
|
-
## Starter delivery
|
|
310
|
-
|
|
311
|
-
The [starter plan](docs/STARTERS.md) makes both Git clone and CLI initialization
|
|
312
|
-
release requirements: one function-plus-redirect starter in M1, bulk-growth examples in
|
|
313
|
-
M2, and the business foundation with self-host tooling in M3. Provider recipes
|
|
314
|
-
follow tested M4 adapters. All use the same runtime and portable project format.
|
|
315
|
-
|
|
316
|
-
## Quality gates
|
|
317
|
-
|
|
318
|
-
- Same fixtures pass on the local reference and each claimed runtime adapter.
|
|
319
|
-
A static exporter alone is not a complete function-capable adapter.
|
|
320
|
-
- Pure redirects avoid Lambda/per-route user functions; generated shared routing
|
|
321
|
-
is allowed where native provider rules cannot preserve behavior.
|
|
322
|
-
- CSV exports report unsupported nested content instead of silently losing it.
|
|
323
|
-
- 1k/10k/100k datasets measure compile/reload, memory, latency and throughput.
|
|
324
|
-
- Default tests run against local HTTP/fake services; ngrok is optional.
|
|
325
|
-
- Load tests use bounded owned targets and do not follow third-party redirects.
|
|
326
|
-
- Invalid reload preserves working config; secret values stay out of artifacts.
|
|
327
|
-
- Installation claims match tested OS/architecture packages.
|
|
328
|
-
|
|
329
|
-
Implementation runtime, exact schema/function API, first adapter order and package
|
|
330
|
-
format are decided through early prototypes. Do not invent performance targets
|
|
331
|
-
or advertise all providers before they pass tests.
|
|
1
|
+
# Roadmap
|
|
2
|
+
|
|
3
|
+
URLCode lets people and agents describe URL behavior in YAML and write application
|
|
4
|
+
code only where the framework cannot express it. The free Apache-2.0 runtime
|
|
5
|
+
stays useful on its own. [Project direction](docs/PROJECT-DIRECTION.md) owns the
|
|
6
|
+
principles; [the specification](docs/SPECIFICATION.md) owns implemented behavior.
|
|
7
|
+
|
|
8
|
+
## What works now
|
|
9
|
+
|
|
10
|
+
The source at `db375bf` provides declarative routing, responses, assets, policies,
|
|
11
|
+
conditions, proxy/signals, trusted Node functions and middleware, and opt-in
|
|
12
|
+
`sandbox: true` isolation. Target support differs: use `urlcode capabilities`
|
|
13
|
+
before promising a deployment. Stored short links have no supported package.
|
|
14
|
+
|
|
15
|
+
Auth, admin, UI and middleware are separate optional packages. Auth/admin already
|
|
16
|
+
render through the shared UI kit when configured. Core includes scaffolding,
|
|
17
|
+
searchable recipes/examples, compact context, schema queries, a semantic manifest,
|
|
18
|
+
and MCP inspection with separately enabled authoring. These are implemented,
|
|
19
|
+
not future phases. See [the framework](docs/FRAMEWORK.md).
|
|
20
|
+
|
|
21
|
+
## Next work
|
|
22
|
+
|
|
23
|
+
Monorepo work is starting now. Move middleware in as a separate package before
|
|
24
|
+
folding it into core; coordinate the guidance cleanup with that migration.
|
|
25
|
+
|
|
26
|
+
1. **Make the existing product coherent.** Keep docs, examples, generated LLM
|
|
27
|
+
resources, installed skills and the standalone template consistent with their
|
|
28
|
+
runtime version. Resolve the [open decisions](docs/OPEN-DECISIONS.md).
|
|
29
|
+
[Issue 168](https://github.com/jimhoyd-com/urlcode/issues/168) tracks checking
|
|
30
|
+
schema-invalid documentation examples beyond the existing prose checks.
|
|
31
|
+
[Issue 174](https://github.com/jimhoyd-com/urlcode/issues/174) retains the
|
|
32
|
+
extension-schema retrieval proposal.
|
|
33
|
+
2. **Measure the agent experience.** The benchmark harness and authoring evals
|
|
34
|
+
exist, but the committed baseline is a stub, not a real-model measurement.
|
|
35
|
+
[Issue 173](https://github.com/jimhoyd-com/urlcode/issues/173) tracks the
|
|
36
|
+
measurement. Run the existing tasks, retain the raw results and use observed friction to
|
|
37
|
+
choose improvements. See [the benchmark](benchmarks/agent/README.md) and
|
|
38
|
+
[the broader experiment proposal](docs/SPIKE-AI-FRAMEWORK-BENCHMARK.md).
|
|
39
|
+
3. **Close release evidence gaps.** Browser/device coverage, accessibility,
|
|
40
|
+
independent security review, deployed recovery/soak tests and real provider
|
|
41
|
+
verification remain distinct from source implementation and local tests.
|
|
42
|
+
[Issue 58](https://github.com/jimhoyd-com/urlcode/issues/58) and
|
|
43
|
+
[release readiness](docs/RELEASE-READINESS.md) retain those gates. Live
|
|
44
|
+
Google/Apple/SES checks remain explicitly deferred.
|
|
45
|
+
4. **After the monorepo move, consolidate middleware into core.** Move the
|
|
46
|
+
existing middleware package first, preserving behavior.
|
|
47
|
+
[issue 172](https://github.com/jimhoyd-com/urlcode/issues/172) tracks the later consolidation
|
|
48
|
+
and consumer migration; package retirement is not part of the initial move. Static targets continue rejecting
|
|
49
|
+
request-time middleware.
|
|
50
|
+
5. **Choose expansion from evidence.** Collections, a business application suite,
|
|
51
|
+
and per-route Lambda compilation are proposals,
|
|
52
|
+
not available features. Decide scope before implementing them.
|
|
53
|
+
|
|
54
|
+
## Records and ownership
|
|
55
|
+
|
|
56
|
+
Track actionable defects and feature gaps in the owning repository's issues.
|
|
57
|
+
This page explains sequence; package contracts explain behavior; dated evidence
|
|
58
|
+
states what was actually tested. Completed and superseded plans live in the
|
|
59
|
+
[archive](docs/archive/README.md), including the previous release chronology
|
|
60
|
+
and detailed phase plan. Archiving an implementation plan does not close its
|
|
61
|
+
remaining operational acceptance gates.
|
package/SECURITY.md
CHANGED
|
@@ -1,13 +1,28 @@
|
|
|
1
1
|
# Security
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
3
|
+
Project `function`/`middleware` code is **trusted and unsandboxed by default**:
|
|
4
|
+
it runs directly in the host process, exactly like any other project code,
|
|
5
|
+
with full Node, filesystem and network access (docs/SPIKE-DEFAULT-TRUST-MODEL.md).
|
|
6
|
+
A route opts into isolation explicitly with `sandbox: true`, which dispatches
|
|
7
|
+
that route through the QuickJS/WebAssembly worker pool instead — unchanged
|
|
8
|
+
from the isolation this project has always provided, still the boundary to
|
|
9
|
+
reach for when a route's code specifically warrants it (input from a source
|
|
10
|
+
the project doesn't fully trust, a contribution nobody has reviewed, logic
|
|
11
|
+
handling an especially sensitive secret).
|
|
12
|
+
|
|
13
|
+
A `sandbox: true` guest has no Node, filesystem, shell, network or ambient
|
|
14
|
+
process-environment access. Each invocation gets fresh state and bounded
|
|
15
|
+
resources. Imports stay inside a snapshotted project module graph. Binding
|
|
16
|
+
grants — for a trusted route as much as a sandboxed one — come from operator
|
|
17
|
+
policy outside the project and are pinned to the configuration/code revision;
|
|
18
|
+
trusting a route's code by default does not grant it any `env`/`secrets` it
|
|
19
|
+
was not explicitly declared and pinned to receive. This is a claim about what
|
|
20
|
+
URLCode injects into `context.env`/`context.secrets` for a route, not an
|
|
21
|
+
access-control boundary on trusted code itself: a trusted (non-`sandbox`)
|
|
22
|
+
route runs with full Node access by design, so its own code can read
|
|
23
|
+
`process.env`, the filesystem or the network independently of anything the
|
|
24
|
+
binding grant declared or withheld. The grant only governs what URLCode hands
|
|
25
|
+
that code through `context`; it is not a restriction the code is confined to.
|
|
11
26
|
See the [security model and policy instructions](docs/FUNCTION-SECURITY.md).
|
|
12
27
|
|
|
13
28
|
The host/runtime and sandbox engine still require patching, independent review
|
package/dist/BUILD-MANIFEST.json
CHANGED
|
@@ -3,88 +3,83 @@
|
|
|
3
3
|
"files": {
|
|
4
4
|
"dist/adapters.js": "a7153ec52f2ed7e0cdd8ed7d433504815f402ec53b2b1c3d38d0cf0e2fcf6509",
|
|
5
5
|
"dist/agent-lists.js": "35ab484198897501d011cb6cc00b5a6787192e19df29c97646e8c118fcc19eef",
|
|
6
|
-
"dist/agents-guide.js": "
|
|
6
|
+
"dist/agents-guide.js": "0b19909aee3f8a1039c34c43ff58116ec1bc3f1875e3dbc34b3b01655273201c",
|
|
7
7
|
"dist/assets.js": "0833b093d2fe457ce68281110dc07d47914992753607741c13b339d92c76cf5c",
|
|
8
8
|
"dist/authoring-files.js": "ad32814f9ae9c549c6247396f982aa700d13a293cc0a589609eccc68f8965550",
|
|
9
9
|
"dist/authoring.js": "ec5240e8686c124f4601229b45f89ce112d9eeb9d35e3059fe55e93056c45209",
|
|
10
10
|
"dist/aws.js": "7d8e3a97b4f6dbefbd68da058f05192469d1efcaed5458b284863ebe462e060e",
|
|
11
11
|
"dist/build-cloudflare.js": "af4f49ad45287d7c4105bb84b1592b5b8e76c930f7159505338298f7c5fd5651",
|
|
12
|
+
"dist/build-static.js": "fe01ef4fcc66d83d8be7a787538b55974e84fd3d7c89e26f0a2f1a152762d565",
|
|
12
13
|
"dist/bulk.js": "aac88d422bd9a7a341a421fb4e29ff5580b28d39250b7f1f5315ba20ae92da8a",
|
|
13
|
-
"dist/capabilities.js": "
|
|
14
|
-
"dist/capability-query.js": "
|
|
14
|
+
"dist/capabilities.js": "28dba05b3851b8b12b3c1b809af87b732f84d601c737afe9225abe429886e691",
|
|
15
|
+
"dist/capability-query.js": "ba148b27c6a60f8c895f13f26468b16c18ae0a5cddea26b602965c8efbba90ae",
|
|
15
16
|
"dist/catalog.js": "ab1c01c9296cc277d2bd4fd682aeb053656a7d9f91c61974f4b78feea0211de8",
|
|
16
|
-
"dist/cli.js": "
|
|
17
|
+
"dist/cli.js": "ff3e583bd43044bdc06122e33c6137f400f677967ebff1ab49900b517682531c",
|
|
17
18
|
"dist/client-address.js": "9d0d01466aab23124330605c5a0e0f981f87c897858acfad909f546a63df165b",
|
|
18
19
|
"dist/cloudflare.js": "17b43b0a6b6a0ef8a893415c989e4ae3976d97cc966adbf897b785f9adc472e3",
|
|
19
|
-
"dist/compliance-rules/baseline.js": "
|
|
20
|
-
"dist/compliance-rules/privacy.js": "
|
|
21
|
-
"dist/compliance-rules/shared.js": "
|
|
20
|
+
"dist/compliance-rules/baseline.js": "6296dea6bcb9f9bb80ed6ed5ab2f456e7f74e6de2be5d2d98ca8c983fb4df3ab",
|
|
21
|
+
"dist/compliance-rules/privacy.js": "4cfb1c07d7df698c362dfc8761cd3bba893769e92d7fb0a3901e1c2d25e801f1",
|
|
22
|
+
"dist/compliance-rules/shared.js": "86fd6db6a93375689acc64975cbc394ce9452dea21ae5941e743f99822515995",
|
|
22
23
|
"dist/compliance-rules/strict.js": "73ee13c2f893acf20cc3d44bf054e58c1474dec52eafe0cf2ce7f4eb96a3bc53",
|
|
23
|
-
"dist/compliance.js": "
|
|
24
|
+
"dist/compliance.js": "29a18da3cefea94802ac7d817d1ab4e3674abd5c3ac4ef893cb8b01c6a23fb61",
|
|
24
25
|
"dist/conditions.js": "ff25e97da550a3bdd80af55522045669438aa31a77d2bc83ad602bcefdee0475",
|
|
25
26
|
"dist/config-worker.js": "bc2170d60c35f8d5de227cbfc4c5067dc61d7cbc5b98aed88e68a11797072da5",
|
|
26
|
-
"dist/config.js": "
|
|
27
|
-
"dist/context.js": "
|
|
27
|
+
"dist/config.js": "0cd82b4c407848f9c66e804a6dd4bf9a8a8503264e51584456578073e0f01921",
|
|
28
|
+
"dist/context.js": "549a53e4738b9c20a1ec55614027f758026fb5860bf4ac962ce22d7029e48df0",
|
|
28
29
|
"dist/ecosystem-cli.js": "1e71bacd53d6fa8c7857cfcce3c3012ce054771a434b78d1f39e892e32642edd",
|
|
29
30
|
"dist/egress.js": "2ae29fe2cb4590fd2f715abe6817db47fed2f50dd31f37946ecf42eafbb0dd9e",
|
|
30
31
|
"dist/errors.js": "a908e66496afebbdd632a8c159a6e14d23f8f38798a0b4342ca122f2511c6cde",
|
|
31
|
-
"dist/examples.js": "
|
|
32
|
-
"dist/explain-cli.js": "
|
|
33
|
-
"dist/explain.js": "
|
|
34
|
-
"dist/extensions.js": "
|
|
35
|
-
"dist/function-sources.js": "
|
|
36
|
-
"dist/function-worker.js": "
|
|
37
|
-
"dist/functions.js": "
|
|
38
|
-
"dist/guest-api.js": "
|
|
32
|
+
"dist/examples.js": "89ae2b764a688fe52acfb9b94d3d262d7742401ebd0ef10c9ebfc76edfa5631c",
|
|
33
|
+
"dist/explain-cli.js": "f0f8f3b5046430d03c6abb629b38651c9c734b03456040735ce9d7e582b2bcd5",
|
|
34
|
+
"dist/explain.js": "dff1ed9a1bd818906ea867f4fb6d4601397943f9bdc4fceccf1809a365f95168",
|
|
35
|
+
"dist/extensions.js": "0506ec6289fa0582399d8c6d27727ffeb629bd442264248c921c63cc5b46ff01",
|
|
36
|
+
"dist/function-sources.js": "16fad4abc81c7ee07b6cbcef2d23a9fc50e97a17cb4dde1db53469bbb555c96f",
|
|
37
|
+
"dist/function-worker.js": "35771790ada4e1b36d447d4967a5e6cf0b543f32944e4c904f5fbf8998e824a5",
|
|
38
|
+
"dist/functions.js": "0f09d1bd27eb655ceb5900a4a5e2b760d2028b02cb637a6a89a4eb5940828008",
|
|
39
|
+
"dist/guest-api.js": "49aec9ed72733ad119e63bcfcee18158dcc8ceb951e1823b8947f6407ff24afc",
|
|
39
40
|
"dist/header-validation.js": "465181dbb08ff05f52defdd29fda025c0c64589bf319fa87fa6d3ab4b68216d5",
|
|
40
41
|
"dist/http-policy.js": "4cb187642269078ddf3460a3f1813dc57878a616a6f8132ef8f8d3b4b91ebb56",
|
|
41
42
|
"dist/http-response.js": "5fc3bb9eb932a3fd2fbc72c361416a5f1439b8bf45b2be37baca1c6446abf40c",
|
|
42
|
-
"dist/index.js": "
|
|
43
|
+
"dist/index.js": "7e9f6ec8a125e2dfd4230b2ecd17ac513c0153d778a57bbcee7a1a9cd9681f81",
|
|
43
44
|
"dist/init-with.js": "8371f568867ebdc6ab8e9aa762234ae2aa015865f46aa901254528e20d69b791",
|
|
44
45
|
"dist/interchange-cli.js": "35bd70ba8077af5c3e39404ff0e5d28707632090a59a90645141252449fd3f04",
|
|
45
46
|
"dist/interchange.js": "26789420af33344d9a08c00fe6b2708aa71994224df527b3075295be2151611e",
|
|
46
|
-
"dist/link-api.js": "0d1f2fb5ef8cd6fda7b071d3e08c53eb4b1c01d4003167af2f400949b70dea4f",
|
|
47
|
-
"dist/link-cli.js": "c4e2121a3e66f33c640832a7cb362a6a1db8b6d91d55a4239ce38ba0ced67b22",
|
|
48
|
-
"dist/link-events.js": "502a6038a538fa43094a9ba9c7546f504b4a1832a1377f26ca8cb69c2326670e",
|
|
49
|
-
"dist/link-records.js": "ef67a58cd107db0c3ac1c0ffd7b32817553606cf69bb3002da4ca0138c272f69",
|
|
50
|
-
"dist/link-store-worker.js": "0080452bbada2154b923449cd14596579bde94ad5f8dab94ecc84aa0d59c089b",
|
|
51
|
-
"dist/link-store.js": "526cdbe1b917cc7a74fb6edbbf13717d823ace5b5d6a5f89bc91438056a10b37",
|
|
52
47
|
"dist/logging.js": "8ec57fea26983aa071b05fe15d680d6550b03488101163ed9666da674118cf31",
|
|
53
|
-
"dist/
|
|
54
|
-
"dist/manifest.js": "d4f58f936febbabf09ec1706baae7c1cb186dcd8a3d29b5725dad5b6eaf43a3f",
|
|
48
|
+
"dist/manifest.js": "aa450ff88d44b184ed1ad3331d1f81005a844a9f971e9e12dfa039952839bc75",
|
|
55
49
|
"dist/match.js": "53ebcc2cda529a8d07fb83f8cb69a1446036ffc1641af3c4bd45a55851bded28",
|
|
56
|
-
"dist/mcp-authoring.js": "
|
|
57
|
-
"dist/mcp.js": "
|
|
58
|
-
"dist/observability.js": "
|
|
50
|
+
"dist/mcp-authoring.js": "4987b0ba08999309e07aea1b8bb31f4600cec22d79998e6982e56f765070587a",
|
|
51
|
+
"dist/mcp.js": "fa44f5f9e0bc4ca9790d1d1eb461147673c1539cf1704a4daae9bad30e4120eb",
|
|
52
|
+
"dist/observability.js": "f4b1ab496f051fe3ef2ed36b2b2e469c63a8940700e2df852e6ff2d9cccdd5ae",
|
|
59
53
|
"dist/operator-host.js": "e3dac9d43a83beb775202b4ab9eeeba7ac63cebfc5dcc669be38d825be587bd0",
|
|
60
54
|
"dist/plugins.js": "a61aa933cd9e1b41020b86fae78aa3a7f45f5313124aa11b50cb57898722385e",
|
|
61
55
|
"dist/policies/agents.js": "c1dbc1e90339f472eeeb2372f7f4637f59a5d210797ea680ac8120a02aa20c10",
|
|
62
|
-
"dist/policies/cache.js": "
|
|
56
|
+
"dist/policies/cache.js": "03f79b91694bb78a98de4473384e5110e1ae1c3c83d46f929495d03af04d9da1",
|
|
63
57
|
"dist/policies/compression.js": "800f3ae3b1a4c1fe58c3d9908364ea9d78f655ff50c7f7589f584378e7f194b0",
|
|
64
58
|
"dist/policies/security.js": "2b3bfdf82140156fea4b162adc28ee43ccd85c402fb200680dbb8d8706417420",
|
|
65
59
|
"dist/policies/throttle.js": "bbb0cb1c24cf70d0a1ac32fc0618efb6c44e5b5d42564842f9c585ff7e501603",
|
|
66
|
-
"dist/policies.js": "
|
|
67
|
-
"dist/policy.js": "
|
|
68
|
-
"dist/prerender.js": "
|
|
69
|
-
"dist/project-tests.js": "
|
|
60
|
+
"dist/policies.js": "3750a7032ec7326aa544f4808683ad9eb91d4f2c5afe79904420cd8a355710a9",
|
|
61
|
+
"dist/policy.js": "33c527008fafe4af18243ba668d069517c20659150f9f1d1a5a1d076e8724f89",
|
|
62
|
+
"dist/prerender.js": "6210999e848ab86c87f265943960ef63716896da7a40e248221a6a30425c56b8",
|
|
63
|
+
"dist/project-tests.js": "445eaa139d2f1a2534369cfdeef081ef518de03218a467e7c5c2059caf840270",
|
|
70
64
|
"dist/provider-verification.js": "ffcf9f05e8cb5f71ea46a97e279e8a613fdfdf9435ab02bd57af11e2680a9107",
|
|
71
65
|
"dist/proxy.js": "34107e59ac0dbbea090efa3cf5badf3226c5302ba25e8f8ff9b2b5596ed80e50",
|
|
72
|
-
"dist/readiness.js": "
|
|
66
|
+
"dist/readiness.js": "90b54bc0cf60dd155d05789a1aad767bd67483d5fa6064ae8b1143f8cf9e06b2",
|
|
73
67
|
"dist/recipes.js": "11853f23e63c3c65c5bed03a278cde0349d28c9fa23266c9907a2df318bb5fc3",
|
|
74
|
-
"dist/route-diff.js": "
|
|
75
|
-
"dist/router.js": "
|
|
76
|
-
"dist/runtime.js": "
|
|
77
|
-
"dist/
|
|
68
|
+
"dist/route-diff.js": "8d71d50d332ffaaed588656bd32aa36763260d1ad87bb62d7ea1c8fb23383969",
|
|
69
|
+
"dist/router.js": "cf831025d5ed6778d1d6a0e541177799794e76766c82084ded81d3e87317ca1e",
|
|
70
|
+
"dist/runtime.js": "0470dcab0774d2da3336e9ce76a4853757bf96081e52bd741f6b44c1bdd4161f",
|
|
71
|
+
"dist/sandbox.js": "c88c5aa5dd95b4f55f1ba62da7969ad66dbd97c30f72e5b5f2817a2098ac1c65",
|
|
72
|
+
"dist/scaffold.js": "3ef243aceca7ddf2780aa2c8c04ae17edd07682d3a418fd5d65ba00f5c762f14",
|
|
78
73
|
"dist/schema-query.js": "bfd1844acd8d54ac361115191fcfbaf828a67e223b9ec6e9c22f158761af149b",
|
|
79
|
-
"dist/server.js": "
|
|
74
|
+
"dist/server.js": "d878bc8f0d6a05f8fd25997cace3150e2ff4d44ee9c8f4b5530e29601e164be1",
|
|
80
75
|
"dist/signals.js": "b55e54efc8fb6703e08f2a1e808ec8e011bda67738db8ceadf1b248f695795be",
|
|
81
76
|
"dist/site.js": "c40a06a6f9e2d6d3bea94727783c115fed4309bb0190787f58434eed64cbde84",
|
|
82
|
-
"dist/
|
|
83
|
-
"dist/
|
|
84
|
-
"dist/types.js": "
|
|
85
|
-
"dist/typescript-authoring.js": "
|
|
77
|
+
"dist/tooling.js": "7409db98422325cd4181d073d645ea57debca0e54cb151123474b85f4d4ed7dc",
|
|
78
|
+
"dist/trusted-functions.js": "befd256848be786f97e372c6af0e05ac08a0c93baed38bf2470ea49bc00dd3e4",
|
|
79
|
+
"dist/types.js": "2fe7664dbb5695ec72114197abde72de4031df9c3b211740eacefa68e9b21844",
|
|
80
|
+
"dist/typescript-authoring.js": "2e98498a15bdbb76f36fbee84afb7c42ca95bbf80a2e6dd4040147f3b1642a29",
|
|
86
81
|
"dist/vercel.js": "a0da20c095d0c7fa8f579ed4dd5951e7a34191f8a72a57c5e782c9eab39f6f08",
|
|
87
|
-
"dist/verify-deployment.js": "
|
|
88
|
-
"dist/scripts/operational-drills.js": "
|
|
82
|
+
"dist/verify-deployment.js": "0c2e68f3cf258a364728c801411df5284343bc01b75a64fe275ff84e397e998b",
|
|
83
|
+
"dist/scripts/operational-drills.js": "c26c406d28013cc554b25a5b6bf8baf4e71d5e67e50d866fae546f538a192317"
|
|
89
84
|
}
|
|
90
85
|
}
|