Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
0e95fdd
feat(contracts): evolve the net spec to v2 and add the ws and httpd m…
HalfSweet Aug 18, 2026
59fc375
feat(framework): replace the NET v1 SDK with the network modules
HalfSweet Aug 18, 2026
88cc047
feat(framework): add the headless frame entry
HalfSweet Aug 18, 2026
a3480ed
feat(web): move the browser net host to the streaming v2 contract
HalfSweet Aug 18, 2026
bddc354
feat(net): add the portable C network core with the HTTP client
HalfSweet Aug 18, 2026
36c5f70
feat(net): add the HTTP server core and the socket-level harness
HalfSweet Aug 18, 2026
4657c93
feat(net): add the WebSocket client core
HalfSweet Aug 18, 2026
01e4311
feat(esp-idf): QuickJS-ng host with the network modules for AtomS3R a…
HalfSweet Aug 18, 2026
e6715bd
feat(pocket-net): rewrite the Rust reference core for the v2 boundary
HalfSweet Aug 18, 2026
cdd4fc7
docs(net): describe the network modules and register the network capa…
HalfSweet Aug 18, 2026
b31d238
chore(framework): drop an unused import from net/http
HalfSweet Aug 18, 2026
a20fc26
feat(esp-idf): let the host choose which network roles it mounts
HalfSweet Aug 18, 2026
fe49743
docs(esp-idf): record the board-to-board soak result
HalfSweet Aug 18, 2026
697172f
feat(net): add the TlsProvider boundary and the OpenSSL provider
HalfSweet Aug 18, 2026
0485b28
feat(esp-idf): HTTPS/WSS via the ESP-TLS provider on AtomS3R and Tab5
HalfSweet Aug 18, 2026
2f96753
docs(net): drop references to the internal design docs
HalfSweet Aug 18, 2026
7d6585c
docs(net): drop the phased-rollout framing
HalfSweet Aug 18, 2026
29c1b02
feat(contracts): network policy is Build Plan truth — manifest format…
HalfSweet Aug 19, 2026
d52a9ed
feat(contracts): pin the HTTP wire semantics in the spec and run shar…
HalfSweet Aug 19, 2026
add9ac5
feat(framework): hard tee/queue bounds, one frame prelude, changelog …
HalfSweet Aug 19, 2026
b544035
fix(net): poll is transactional — a batch that cannot be allocated co…
HalfSweet Aug 19, 2026
007894f
fix(net): run getaddrinfo on a resolver worker, never on the network …
HalfSweet Aug 19, 2026
fad2f68
fix(esp-idf): exact tick cadence, one startup/shutdown state machine,…
HalfSweet Aug 19, 2026
d0f605c
feat(pocket-net): the core owns the security policy — PolicyGate for …
HalfSweet Aug 19, 2026
cbd77ba
docs(net): policy ownership (manifest → plan → host), transactional p…
HalfSweet Aug 19, 2026
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
387 changes: 387 additions & 0 deletions contracts/schema/pocket-3.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,387 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://pocketjs.dev/schema/pocket-3.json",
"title": "Pocket application manifest, format 3",
"type": "object",
"additionalProperties": false,
"required": [
"$schema",
"pocket",
"id",
"name",
"title",
"version",
"engine",
"app"
],
"properties": {
"$schema": {
"const": "https://pocketjs.dev/schema/pocket-3.json"
},
"pocket": {
"const": 3
},
"id": {
"type": "string",
"minLength": 3,
"pattern": "^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)+$"
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"pattern": "^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$"
},
"title": {
"type": "string",
"minLength": 1,
"maxLength": 128
},
"version": {
"type": "string",
"pattern": "^(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)(?:-[0-9A-Za-z-]+(?:\\.[0-9A-Za-z-]+)*)?(?:\\+[0-9A-Za-z-]+(?:\\.[0-9A-Za-z-]+)*)?$"
},
"execution": {
"type": "object",
"additionalProperties": false,
"required": [
"classes"
],
"properties": {
"classes": {
"type": "array",
"items": {
"enum": [
"guest",
"aot"
]
},
"minItems": 1,
"uniqueItems": true
}
}
},
"engine": {
"type": "object",
"additionalProperties": false,
"required": [
"capabilities"
],
"properties": {
"capabilities": {
"type": "object",
"additionalProperties": false,
"required": [
"requires"
],
"properties": {
"requires": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[a-z][a-z0-9-]*(?:\\.[a-z][a-z0-9-]*)+$"
},
"minItems": 1,
"uniqueItems": true
},
"enhances": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[a-z][a-z0-9-]*(?:\\.[a-z][a-z0-9-]*)+$"
},
"uniqueItems": true
}
}
}
}
},
"app": {
"type": "object",
"additionalProperties": false,
"required": [
"entry",
"framework",
"viewport"
],
"properties": {
"entry": {
"type": "string",
"minLength": 1,
"pattern": "^(?!/)(?!.*(?:^|/)\\.\\.(?:/|$))(?!.*\\\\).+\\.tsx?$"
},
"output": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"pattern": "^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$"
},
"framework": {
"enum": [
"solid",
"vue-vapor",
"octane"
]
},
"companions": {
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"pattern": "^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$"
},
"uniqueItems": true
},
"viewport": {
"anyOf": [
{
"type": "object",
"additionalProperties": false,
"required": [
"logical",
"presentation"
],
"properties": {
"logical": {
"type": "array",
"items": {
"type": "integer",
"minimum": 1
},
"minItems": 2,
"maxItems": 2
},
"presentation": {
"enum": [
"fill",
"fit",
"integer-fit",
"native",
"stretch"
]
}
}
},
{
"type": "object",
"additionalProperties": false,
"properties": {
"fixed": {
"type": "object",
"additionalProperties": false,
"required": [
"logical",
"presentation"
],
"properties": {
"logical": {
"type": "array",
"items": {
"type": "integer",
"minimum": 1
},
"minItems": 2,
"maxItems": 2
},
"presentation": {
"enum": [
"fill",
"fit",
"integer-fit",
"native",
"stretch"
]
}
}
},
"dynamic": {
"type": "object",
"additionalProperties": false,
"required": [
"default"
],
"properties": {
"default": {
"type": "array",
"items": {
"type": "integer",
"minimum": 1
},
"minItems": 2,
"maxItems": 2
},
"min": {
"type": "array",
"items": {
"type": "integer",
"minimum": 1
},
"minItems": 2,
"maxItems": 2
},
"max": {
"type": "array",
"items": {
"type": "integer",
"minimum": 1
},
"minItems": 2,
"maxItems": 2
}
}
}
}
}
]
}
}
},
"permissions": {
"type": "object",
"additionalProperties": false,
"properties": {
"network": {
"type": "object",
"additionalProperties": false,
"properties": {
"connect": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": false,
"required": [
"protocol",
"host",
"port"
],
"properties": {
"protocol": {
"enum": [
"http",
"https",
"ws",
"wss"
]
},
"host": {
"type": "string",
"minLength": 1,
"maxLength": 255
},
"port": {
"anyOf": [
{
"type": "integer",
"minimum": 1,
"maximum": 65535
},
{
"type": "object",
"additionalProperties": false,
"required": [
"min",
"max"
],
"properties": {
"min": {
"type": "integer",
"minimum": 1,
"maximum": 65535
},
"max": {
"type": "integer",
"minimum": 1,
"maximum": 65535
}
}
}
]
}
}
}
},
"listen": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": false,
"required": [
"protocol",
"address",
"port"
],
"properties": {
"protocol": {
"enum": [
"http",
"https",
"ws",
"wss"
]
},
"address": {
"type": "string",
"minLength": 1,
"maxLength": 64
},
"port": {
"anyOf": [
{
"type": "integer",
"minimum": 1,
"maximum": 65535
},
{
"type": "object",
"additionalProperties": false,
"required": [
"min",
"max"
],
"properties": {
"min": {
"type": "integer",
"minimum": 1,
"maximum": 65535
},
"max": {
"type": "integer",
"minimum": 1,
"maximum": 65535
}
}
},
{
"const": "ephemeral"
}
]
}
}
}
},
"credentials": {
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"pattern": "^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$"
},
"uniqueItems": true
},
"localNetwork": {
"type": "boolean"
},
"insecureTransport": {
"type": "boolean"
},
"allowInvalidTlsForDevelopment": {
"type": "boolean"
}
}
}
}
}
}
}
Loading