Feat v0.9.5 typed forms SDK primitive
Extract typed form system from models/workflow.go into standalone server/forms/ package. Any package can now declare and validate forms, not just workflow stages. - New server/forms/ package (types + validation + condition evaluator) - REST POST /api/v1/forms/validate endpoint - Starlark forms.validate(template, data) module - Frontend sw.forms.render(), .validate(), .validateRemote() - Manifest form_template accepted at package level - 16 new tests (12 forms + 4 Starlark module) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -184,3 +184,30 @@ Kernel event prefixes: `user.*`, `team.*`, `workflow.*`, `notification.*`, `pres
|
||||
| POST | `/presence/heartbeat` | Update presence status |
|
||||
| GET | `/presence` | Query online users |
|
||||
| GET | `/users/search` | Search users |
|
||||
|
||||
### Forms (v0.9.5)
|
||||
|
||||
| Method | Path | Description |
|
||||
|--------|------|-------------|
|
||||
| POST | `/forms/validate` | Validate form data against a typed template |
|
||||
|
||||
**Request body:**
|
||||
|
||||
```json
|
||||
{
|
||||
"template": {
|
||||
"fields": [
|
||||
{"key": "name", "type": "text", "label": "Name", "required": true}
|
||||
]
|
||||
},
|
||||
"data": {"name": "Alice"}
|
||||
}
|
||||
```
|
||||
|
||||
**Response:**
|
||||
|
||||
```json
|
||||
{"valid": true, "errors": []}
|
||||
```
|
||||
|
||||
On validation failure, `errors` contains `[{"key": "name", "message": "Name is required"}]`.
|
||||
|
||||
Reference in New Issue
Block a user