@velarscript/cli 0.20.0 → 0.21.0
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/dist/application-entry.d.ts +13 -0
- package/dist/application-entry.d.ts.map +1 -0
- package/dist/application-entry.js +14 -0
- package/dist/application-entry.js.map +1 -0
- package/dist/browser-test-runner.js +40 -9
- package/dist/browser-test-runner.js.map +1 -1
- package/dist/bundled-extension-registry.d.ts +2 -0
- package/dist/bundled-extension-registry.d.ts.map +1 -1
- package/dist/bundled-extension-registry.js.map +1 -1
- package/dist/cli.js +41 -44
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +23 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +79 -5
- package/dist/config.js.map +1 -1
- package/dist/dev-server.d.ts.map +1 -1
- package/dist/dev-server.js +18 -0
- package/dist/dev-server.js.map +1 -1
- package/dist/library-artifact.js +10 -2
- package/dist/library-artifact.js.map +1 -1
- package/dist/mechanical-fixer.d.ts +4 -2
- package/dist/mechanical-fixer.d.ts.map +1 -1
- package/dist/mechanical-fixer.js +17 -4
- package/dist/mechanical-fixer.js.map +1 -1
- package/dist/node-application.d.ts +7 -9
- package/dist/node-application.d.ts.map +1 -1
- package/dist/node-application.js +20 -58
- package/dist/node-application.js.map +1 -1
- package/dist/node-production-build.d.ts +4 -4
- package/dist/node-production-build.d.ts.map +1 -1
- package/dist/node-production-build.js +5 -5
- package/dist/node-production-build.js.map +1 -1
- package/dist/node-production-verifier.d.ts.map +1 -1
- package/dist/node-production-verifier.js +8 -5
- package/dist/node-production-verifier.js.map +1 -1
- package/dist/project-check.d.ts +15 -3
- package/dist/project-check.d.ts.map +1 -1
- package/dist/project-check.js +86 -19
- package/dist/project-check.js.map +1 -1
- package/dist/project-format.d.ts +1 -1
- package/dist/project-format.d.ts.map +1 -1
- package/dist/project-format.js +1 -0
- package/dist/project-format.js.map +1 -1
- package/dist/project.d.ts.map +1 -1
- package/dist/project.js +6 -1
- package/dist/project.js.map +1 -1
- package/dist/reproduction.js +5 -5
- package/dist/reproduction.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +8 -8
- package/skill/ai-skill-desktop.md +281 -6
- package/skill/ai-skill-node.md +23 -17
- package/skill/ai-skill-server.md +39 -30
- package/skill/ai-skill-web.md +9 -0
- package/skill/ai-skill.md +13 -3
package/dist/reproduction.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reproduction.js","sourceRoot":"","sources":["../src/reproduction.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"reproduction.js","sourceRoot":"","sources":["../src/reproduction.ts"],"names":[],"mappings":"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"}
|
package/dist/version.d.ts
CHANGED
package/dist/version.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@velarscript/cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.21.0",
|
|
4
4
|
"description": "The VelarScript command-line compiler, dev server, test runner, and language server.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"type": "module",
|
|
@@ -30,13 +30,13 @@
|
|
|
30
30
|
"velar": "./dist/cli.js"
|
|
31
31
|
},
|
|
32
32
|
"dependencies": {
|
|
33
|
-
"@velarscript/compiler": "0.
|
|
34
|
-
"@velarscript/core": "0.
|
|
35
|
-
"@velarscript/desktop": "0.
|
|
36
|
-
"@velarscript/node": "0.
|
|
37
|
-
"@velarscript/server": "0.
|
|
38
|
-
"@velarscript/web": "0.
|
|
39
|
-
"create-velar": "0.
|
|
33
|
+
"@velarscript/compiler": "0.21.0",
|
|
34
|
+
"@velarscript/core": "0.21.0",
|
|
35
|
+
"@velarscript/desktop": "0.21.0",
|
|
36
|
+
"@velarscript/node": "0.21.0",
|
|
37
|
+
"@velarscript/server": "0.21.0",
|
|
38
|
+
"@velarscript/web": "0.21.0",
|
|
39
|
+
"create-velar": "0.21.0",
|
|
40
40
|
"esbuild": "^0.28.1",
|
|
41
41
|
"playwright": "^1.58.2"
|
|
42
42
|
}
|
|
@@ -16,18 +16,29 @@ Activate Desktop explicitly and declare the smallest required authority:
|
|
|
16
16
|
"desktop": {
|
|
17
17
|
"productName": "Example",
|
|
18
18
|
"identifier": "com.example.app",
|
|
19
|
+
"windows": {
|
|
20
|
+
"main": { "width": 1280, "height": 820 },
|
|
21
|
+
"note-preview": { "style": "panel", "frame": false, "aspectRatio": 1.6, "width": 512, "height": 320 }
|
|
22
|
+
},
|
|
23
|
+
"services": {
|
|
24
|
+
"core": { "payload": "dist/service-core", "entry": "main.js", "restart": "always" }
|
|
25
|
+
},
|
|
19
26
|
"permissions": {
|
|
20
|
-
"files": ["project"],
|
|
27
|
+
"files": ["project", "dropped"],
|
|
21
28
|
"processes": ["git"],
|
|
22
29
|
"network": ["https://api.example.com"],
|
|
23
30
|
"environment": [],
|
|
24
|
-
"secrets": []
|
|
31
|
+
"secrets": [],
|
|
32
|
+
"links": ["https", "mailto"],
|
|
33
|
+
"notifications": true,
|
|
34
|
+
"secureStorage": ["CLOUD_SESSION"]
|
|
25
35
|
}
|
|
26
36
|
}
|
|
27
37
|
}
|
|
28
38
|
```
|
|
29
39
|
|
|
30
|
-
Desktop owns `velar/desktop`, `velar/
|
|
40
|
+
Desktop owns `velar/desktop`, `velar/window`, `velar/service`,
|
|
41
|
+
`velar/notification`, `velar/secure-storage`, `velar/desktop-test`, and permission-scoped
|
|
31
42
|
implementations of `velar/fs`, `velar/path`, `velar/process`, `velar/http`, and
|
|
32
43
|
`velar/env`. It composes Web components, JSX, Look, state, resources, actions,
|
|
33
44
|
and browser tests. It does not expose a user main process, renderer project,
|
|
@@ -35,7 +46,208 @@ local server, port, or general IPC surface.
|
|
|
35
46
|
|
|
36
47
|
The manifest is the authority. Never broaden a grant merely to silence a
|
|
37
48
|
failure. File roots, executable identities, network origins, readable
|
|
38
|
-
environment names,
|
|
49
|
+
environment names, opaque secret names, link schemes, and credential slot names
|
|
50
|
+
are finite allowlists, and `notifications` is a single declaration of intent. A
|
|
51
|
+
capability the manifest never declared fails where it is *called*, naming the
|
|
52
|
+
line that would grant it — never at the import, and never silently.
|
|
53
|
+
|
|
54
|
+
## Windows
|
|
55
|
+
|
|
56
|
+
`desktop.windows` declares every window kind the application may open, keyed by
|
|
57
|
+
kind. `main` is required and opens at launch; a kind that is not declared is
|
|
58
|
+
refused at the `openWindow` call, by name. Kind names are lowercase words joined
|
|
59
|
+
by single hyphens, at most 32 per application. Each kind's fields are closed
|
|
60
|
+
vocabularies with defaults: `title` (the product name), `width`/`height`/
|
|
61
|
+
`minWidth`/`minHeight`, `titleBar` (`standard` | `hidden-inset`), `material`
|
|
62
|
+
(`none` | `sidebar`), `style` (`window` | `panel`), `frame`, `level` (`normal` |
|
|
63
|
+
`floating`), `visibleOnAllWorkspaces`, `aspectRatio`, and `resizable`.
|
|
64
|
+
|
|
65
|
+
Every window loads the same application at the route given to `openWindow`, so
|
|
66
|
+
one source graph renders every window; `currentWindowKind()` is how a component
|
|
67
|
+
decides which one it is in.
|
|
68
|
+
|
|
69
|
+
```velar fragment
|
|
70
|
+
import {WindowState, currentWindowKind, openWindow, windows} from "velar/window"
|
|
71
|
+
|
|
72
|
+
async def previewNote(note: string) -> number:
|
|
73
|
+
// Same kind and key focuses the window that already exists.
|
|
74
|
+
using preview = await openWindow("note-preview", {route: f"/preview?note={note}", key: f"note-{note}"})
|
|
75
|
+
const bounds = await preview.bounds()
|
|
76
|
+
await preview.setBounds({x: bounds.x, y: bounds.y, width: 512, height: 320})
|
|
77
|
+
using states = await preview.watchState()
|
|
78
|
+
let seen = 0
|
|
79
|
+
async for state in states:
|
|
80
|
+
seen += 1
|
|
81
|
+
if state == WindowState.closed: break
|
|
82
|
+
return seen + (await windows()).size + currentWindowKind().size
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
A `Window` is an owned resource: `using` closes it, and the release is
|
|
86
|
+
idempotent. `currentWindow()` hands back this window rather than one you opened,
|
|
87
|
+
so hold it in a `const`. `watchState()` is a bounded pull stream — `moved`,
|
|
88
|
+
`resized`, `focused`, `blurred`, `closed` — that drains after `closed`; a slow
|
|
89
|
+
consumer coalesces repeated `moved`/`resized` instead of growing a queue.
|
|
90
|
+
|
|
91
|
+
Two host rules have no knob: closing `main` closes every other window and quits,
|
|
92
|
+
and closing the last window quits. Do not build an application that depends on
|
|
93
|
+
outliving them, and do not try to share state between windows through the
|
|
94
|
+
language — windows do not share a JavaScript context.
|
|
95
|
+
|
|
96
|
+
## Service processes
|
|
97
|
+
|
|
98
|
+
`desktop.services` declares the long-running processes the *product* owns. The
|
|
99
|
+
language does four things and no more: it starts them, supervises them,
|
|
100
|
+
converges them when the application quits, and hands the renderer one
|
|
101
|
+
authenticated loopback channel to each. It does not sandbox them — a service
|
|
102
|
+
does not go through the capability worker, and declaring one makes it auditable
|
|
103
|
+
rather than confined. The service itself is not a language capability: writing
|
|
104
|
+
one is the product's job, exactly as the exclusion list at the end of this brief
|
|
105
|
+
says.
|
|
106
|
+
|
|
107
|
+
A service name follows the window kind's rule and at most eight may be declared.
|
|
108
|
+
`payload` is a project directory copied whole into
|
|
109
|
+
`Contents/Resources/services/<name>/` at package time; `entry` is a JavaScript
|
|
110
|
+
file inside it, run by the Node.js runtime the bundle carries. No other
|
|
111
|
+
executable is declarable: a short-lived process is `velar/process` with a
|
|
112
|
+
`processes` grant, and that is a different model on purpose. `restart` is
|
|
113
|
+
`always` (exponential backoff from 1s to a 30s cap, and five consecutive
|
|
114
|
+
failures reach the terminal `failed`) or `never`.
|
|
115
|
+
|
|
116
|
+
The host gives each service three variables and no more, the same three under
|
|
117
|
+
`velar dev` as in a packaged application: a loopback endpoint and a 128-bit token
|
|
118
|
+
in `VELAR_SERVICE_ENDPOINT` and `VELAR_SERVICE_TOKEN`, and the application's own
|
|
119
|
+
data directory in `VELAR_SERVICE_APP_DATA` — the exact path
|
|
120
|
+
`velar/desktop.appDataDirectory()` answers the renderer, already created. That
|
|
121
|
+
third one is standard because it is the only thing a service needs that cannot
|
|
122
|
+
be baked into its payload: it is the application's identity resolved against
|
|
123
|
+
this machine. `desktop.services` has no `env`, and a value that is the same on
|
|
124
|
+
every machine belongs in the payload rather than in the environment.
|
|
125
|
+
|
|
126
|
+
The service must run a WebSocket server on that endpoint. Readiness is the
|
|
127
|
+
handshake: the host sends `{"velar":"service-hello","token":"…"}` and the
|
|
128
|
+
service answers `{"velar":"service-ready"}`. A connection that opens with any other token must
|
|
129
|
+
be closed with WebSocket code 1008 and no answer — a loopback port is reachable
|
|
130
|
+
by every process on the machine, so the token is the whole of the channel's
|
|
131
|
+
authentication, and the pinned code is what separates a refusal from a service
|
|
132
|
+
that has not finished starting. Both sides wait 30 seconds. The host's readiness
|
|
133
|
+
probe is indistinguishable from an application `connect()`, so a service sees
|
|
134
|
+
connections open and close that no window asked for and must not read a closed
|
|
135
|
+
authenticated connection as an application-level event.
|
|
136
|
+
|
|
137
|
+
```velar fragment
|
|
138
|
+
import {ServiceState, connect, watchServices} from "velar/service"
|
|
139
|
+
|
|
140
|
+
async def indexNote(id: string) -> string:
|
|
141
|
+
using channel = await connect("core")
|
|
142
|
+
await channel.send(f"put {id}")
|
|
143
|
+
return (await channel.next()) ?? ""
|
|
144
|
+
|
|
145
|
+
async def coreState() -> ServiceState:
|
|
146
|
+
using states = await watchServices()
|
|
147
|
+
const event = await states.next()
|
|
148
|
+
return event?.state ?? ServiceState.stopped
|
|
149
|
+
|
|
150
|
+
async def whyCoreFailed() -> string:
|
|
151
|
+
using states = await watchServices()
|
|
152
|
+
const event = await states.next()
|
|
153
|
+
return event?.detail ?? "no detail"
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
A `ServiceStateEvent` is `{name, state, detail}`. `detail` is up to 4 KiB of what
|
|
157
|
+
the service last wrote to its own standard error, carried by `failed` and
|
|
158
|
+
`restarting` and null for every other state; show it to a person, never match on
|
|
159
|
+
it. The whole of a service's output is a rotating log file under the app-data
|
|
160
|
+
directory, which `packages/desktop/README.md` names.
|
|
161
|
+
|
|
162
|
+
Application code never holds the token: the host spends it itself on the first
|
|
163
|
+
frame of every connection. An undeclared name fails at the `connect` call, and a
|
|
164
|
+
service that is not `ready` is refused by state — services start before the
|
|
165
|
+
renderer loads and are not awaited, so read `watchServices()` rather than
|
|
166
|
+
assuming one is up. `ServiceConnection` keeps the `velar/websocket` client's
|
|
167
|
+
discipline: a backpressured `send`, a bounded pull `next`, and a release `using`
|
|
168
|
+
performs. It carries text.
|
|
169
|
+
|
|
170
|
+
`velar dev` runs the same services from `<project>/<payload>/<entry>` on the
|
|
171
|
+
system Node and converges them when the dev server closes. It does not watch or
|
|
172
|
+
rebuild them — a service's build is the product's own toolchain.
|
|
173
|
+
|
|
174
|
+
## Notifications
|
|
175
|
+
|
|
176
|
+
`desktop.permissions.notifications: true` is the application's declaration that
|
|
177
|
+
it may notify at all; without it `requestPermission`, `show`, and `activations`
|
|
178
|
+
each fail at the call and name that line. The operating system's own answer is a
|
|
179
|
+
second, different gate — ask for it with `requestPermission()`, and expect
|
|
180
|
+
`granted`, `denied`, or `undetermined`. `show` on an unauthorized application
|
|
181
|
+
fails; it never quietly delivers nothing.
|
|
182
|
+
|
|
183
|
+
```velar fragment
|
|
184
|
+
import {NotificationPermission, activations, requestPermission, show} from "velar/notification"
|
|
185
|
+
|
|
186
|
+
async def announce(packages: number) -> string:
|
|
187
|
+
if await requestPermission() != NotificationPermission.granted: return "not notified"
|
|
188
|
+
// A tag is the notification's identity: a second notification carrying it
|
|
189
|
+
// replaces the first, and an activation reports it back.
|
|
190
|
+
await show({title: "Build finished", body: f"{packages} packages", tag: "build"})
|
|
191
|
+
using clicks = await activations()
|
|
192
|
+
async for click in clicks: return click.tag ?? "untagged"
|
|
193
|
+
return "no activation"
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
`title` is at most 256 characters, `body` 1024, `tag` 128. `activations()` is a
|
|
197
|
+
bounded pull stream of `{tag: string?}`; two clicks on one notification are one
|
|
198
|
+
activation, and the host brings the application forward with it, opening `main`
|
|
199
|
+
when no window is left.
|
|
200
|
+
|
|
201
|
+
## Secure storage
|
|
202
|
+
|
|
203
|
+
`secureStorage` is a finite allowlist of credential slot names, spelled the way
|
|
204
|
+
`secrets` names are, and one name may appear in only one of the two lists. They
|
|
205
|
+
are different authorities: a `secrets` entry is an opaque value the environment
|
|
206
|
+
injects, while a `secureStorage` entry is a slot the application itself writes
|
|
207
|
+
and reads — a macOS keychain generic password under the application's bundle
|
|
208
|
+
identifier.
|
|
209
|
+
|
|
210
|
+
```velar fragment
|
|
211
|
+
import {get, remove, set} from "velar/secure-storage"
|
|
212
|
+
|
|
213
|
+
async def rotate(token: string) -> bool:
|
|
214
|
+
await set("CLOUD_SESSION", token) // at most 8 KiB
|
|
215
|
+
const stored = await get("CLOUD_SESSION")
|
|
216
|
+
await remove("CLOUD_SESSION") // removing what is absent is not an error
|
|
217
|
+
await remove("CLOUD_SESSION")
|
|
218
|
+
return stored != null
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
A name outside the allowlist fails at the call and lists the declared names.
|
|
222
|
+
Never render, log, or serialize a stored value; report whether a credential is
|
|
223
|
+
present, not what it is.
|
|
224
|
+
|
|
225
|
+
## Links, displays, power, dropped files, and probes
|
|
226
|
+
|
|
227
|
+
```velar fragment
|
|
228
|
+
import {PowerState, SystemPermission, displays, openExternal, permissionStatus, watchDroppedFiles, watchPower} from "velar/desktop"
|
|
229
|
+
|
|
230
|
+
async def sleepAware() -> string:
|
|
231
|
+
await openExternal("https://example.com/guide") // scheme must be in `links`
|
|
232
|
+
const attached = await displays()
|
|
233
|
+
const ready = await permissionStatus(SystemPermission.screenRecording)
|
|
234
|
+
using states = await watchPower()
|
|
235
|
+
using drops = await watchDroppedFiles() // needs files: ["dropped"]
|
|
236
|
+
async for state in states:
|
|
237
|
+
if state == PowerState.suspended: break
|
|
238
|
+
async for batch in drops: return f"{batch.paths.size}:{attached.size}:{ready}"
|
|
239
|
+
return "none"
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
`links` is a closed set of `http`, `https`, and `mailto`; any other scheme is
|
|
243
|
+
refused at the call and again by the host. `displays()` answers the same
|
|
244
|
+
`Display` record a window's own `display()` does. `watchPower()` carries
|
|
245
|
+
transitions only — a machine already awake publishes nothing on waking.
|
|
246
|
+
`watchDroppedFiles()` needs the `dropped` file root and reports the real paths of
|
|
247
|
+
the files a user's drag gesture brought in, in gesture order; the page still gets
|
|
248
|
+
its ordinary DOM `drop` event, and the two are the same gesture.
|
|
249
|
+
`permissionStatus` only reads. There is no request function: asking the user for
|
|
250
|
+
a system permission belongs to the product flow that consumes the answer.
|
|
39
251
|
|
|
40
252
|
## Capability model
|
|
41
253
|
|
|
@@ -69,7 +281,48 @@ mount(<App />, "#app")
|
|
|
69
281
|
Put target-specific calls in narrow service modules so UI components consume
|
|
70
282
|
checked application data instead of transport details. Use
|
|
71
283
|
`velar/desktop-test` only from official browser-test modules; plain unit tests
|
|
72
|
-
should cover pure policy and conversion logic without platform authority.
|
|
284
|
+
should cover pure policy and conversion logic without platform authority. Its
|
|
285
|
+
fake host answers every module above for the page and lets a browser test
|
|
286
|
+
produce the host events a real system would. Two of its choices are made before
|
|
287
|
+
the first `browser.open()` and sealed by it — `setPlatform` and `setWindowKind`
|
|
288
|
+
— and the rest are events inside a running page: `openWindows`, `focusWindow`,
|
|
289
|
+
`moveWindow`, `closeWindow`, `setNotificationPermission`, `shownNotifications`,
|
|
290
|
+
`activateNotification`, `secureStorageNames`, `publishPower`, `dropFiles`,
|
|
291
|
+
`setSystemPermission`, and `openedLinks`. `secureStorageNames` reports the names
|
|
292
|
+
the fake keychain holds and never the values: a test seam that handed a
|
|
293
|
+
credential back would be the exception that ends that rule.
|
|
294
|
+
|
|
295
|
+
## Updating the installed application
|
|
296
|
+
|
|
297
|
+
```velar fragment
|
|
298
|
+
import {applyUpdate} from "velar/desktop"
|
|
299
|
+
|
|
300
|
+
async def install(archivePath: string) -> string:
|
|
301
|
+
try:
|
|
302
|
+
await applyUpdate(archivePath)
|
|
303
|
+
return "replaced; relaunching"
|
|
304
|
+
catch error:
|
|
305
|
+
return f"refused: {error.message}"
|
|
306
|
+
```
|
|
307
|
+
|
|
308
|
+
`applyUpdate` is the mechanism and nothing else. There is no feed, no channel,
|
|
309
|
+
no version check, no automatic download, and no delta format — deciding when to
|
|
310
|
+
look, where to look, and what to tell the user is the product's, and so is
|
|
311
|
+
downloading the archive with the capabilities the application already has.
|
|
312
|
+
|
|
313
|
+
The host expands the archive elsewhere, requires the application inside it to
|
|
314
|
+
carry this application's bundle identifier and this application's signing Team
|
|
315
|
+
ID, and only then replaces the installed bundle atomically and relaunches. Every
|
|
316
|
+
failure leaves the current install untouched. Do not write a fallback that
|
|
317
|
+
retries with a different archive or works around a refusal: a refusal means the
|
|
318
|
+
archive is not this application.
|
|
319
|
+
|
|
320
|
+
A development build is ad-hoc-signed and therefore has **no** Team ID, so
|
|
321
|
+
`applyUpdate` refuses it by name. That is not a bug to route around — an update
|
|
322
|
+
path where no team matches no team is an update path that accepts every archive
|
|
323
|
+
on the machine. Test the flow with `velar/desktop-test`'s `setSigningTeam`,
|
|
324
|
+
`stageUpdate` and `appliedUpdates`, and expect the real call to work only in a
|
|
325
|
+
Developer ID signed install.
|
|
73
326
|
|
|
74
327
|
## Build and finish
|
|
75
328
|
|
|
@@ -78,7 +331,29 @@ output, and `velar package` creates the native application containing the
|
|
|
78
331
|
system-WebView host and capability worker. It does not embed compiler or
|
|
79
332
|
Workbench tooling.
|
|
80
333
|
|
|
334
|
+
`velar package` output is self-contained: it carries one bare Node.js executable
|
|
335
|
+
at `Contents/MacOS/node`, whose version belongs to the toolchain generation
|
|
336
|
+
rather than the project. Do not add a manifest field for it, do not check for
|
|
337
|
+
Node at install time, and do not tell a user to install one. The first package on
|
|
338
|
+
a machine downloads and verifies the official archive; later ones use the
|
|
339
|
+
verified cache and need no network.
|
|
340
|
+
|
|
341
|
+
`desktop.build.sizeBudgetBytes` measures the application's own components; the
|
|
342
|
+
runtime is reported separately and has its own toolchain-owned ceiling. Do not
|
|
343
|
+
raise the budget to make room for it.
|
|
344
|
+
|
|
345
|
+
Signing always happens — ad-hoc when `desktop.build.signing.identity` is absent,
|
|
346
|
+
so a local build runs on arm64. Set `identity`, `entitlements` and
|
|
347
|
+
`notarization.keychainProfile` when the product distributes. Never put an Apple
|
|
348
|
+
ID, a password, or an App Store Connect key in `velar.json`: the keychain profile
|
|
349
|
+
name is the only credential-shaped thing that belongs there, and it is a
|
|
350
|
+
reference the local keychain resolves.
|
|
351
|
+
|
|
81
352
|
Run `velar format`, `velar check`, `velar test`, the Desktop browser tests,
|
|
82
|
-
`velar build`, and the platform packaging gate
|
|
353
|
+
`velar build`, and the platform packaging gate, whose acceptance is the packaged
|
|
354
|
+
host's `--headless-smoke` (host up, capability worker up on the bundled runtime,
|
|
355
|
+
one real capability round-trip, every declared service started and through its
|
|
356
|
+
authenticated handshake to `ready`, converged, exit 0). `--verify-bundle` is the
|
|
357
|
+
static bundle check beside it and is not an acceptance. Runnable target examples live
|
|
83
358
|
in `examples/tour/desktop/`; diagnostics and checked manifest vocabulary
|
|
84
359
|
outrank this brief if they disagree.
|
package/skill/ai-skill-node.md
CHANGED
|
@@ -10,11 +10,12 @@ capabilities, or application configuration.
|
|
|
10
10
|
path-pattern strings, Node modules, HTTP/WebSocket transport, and low-level
|
|
11
11
|
server lifecycle; it does not own convention-based application configuration.
|
|
12
12
|
An ordinary service activates `@velarscript/server` and then loads
|
|
13
|
-
`velar skill server` for
|
|
13
|
+
`velar skill server` for manifest-declared application configuration, assembly, and
|
|
14
14
|
connection lifecycle.
|
|
15
15
|
|
|
16
|
-
A deliberately low-level Node application may activate Node directly
|
|
17
|
-
|
|
16
|
+
A deliberately low-level Node application may activate Node directly. Its
|
|
17
|
+
selected entry source owns startup inside `@main`, exactly like Core, Web, and
|
|
18
|
+
Desktop entries:
|
|
18
19
|
|
|
19
20
|
```json
|
|
20
21
|
{
|
|
@@ -23,42 +24,41 @@ one exported zero-argument async startup function:
|
|
|
23
24
|
"outDir": "dist",
|
|
24
25
|
"publicDir": "public",
|
|
25
26
|
"build": {"mode": "production", "sourceMaps": false},
|
|
26
|
-
"extensions": ["@velarscript/node"]
|
|
27
|
-
"node": {
|
|
28
|
-
"app": "start"
|
|
29
|
-
}
|
|
27
|
+
"extensions": ["@velarscript/node"]
|
|
30
28
|
}
|
|
31
29
|
```
|
|
32
30
|
|
|
33
31
|
The low-level entry owns its own startup arguments in code:
|
|
34
32
|
|
|
35
33
|
```velar fragment
|
|
36
|
-
import {serve} from "velar/serve"
|
|
34
|
+
import {run, serve} from "velar/serve"
|
|
37
35
|
import {app} from "./app.vel"
|
|
38
36
|
|
|
39
|
-
|
|
40
|
-
|
|
37
|
+
@main:
|
|
38
|
+
const server = await serve(app, port=3000, host="127.0.0.1")
|
|
39
|
+
await run(server)
|
|
41
40
|
```
|
|
42
41
|
|
|
43
|
-
For one shared HTTP/WebSocket application port, the
|
|
44
|
-
|
|
42
|
+
For one shared HTTP/WebSocket application port, use the WebSocket transport's
|
|
43
|
+
matching lifecycle operation:
|
|
45
44
|
|
|
46
45
|
```velar fragment
|
|
47
46
|
import {app as routes} from "./app.vel"
|
|
48
|
-
import {listen} from "velar/websocket"
|
|
47
|
+
import {listen, run} from "velar/websocket"
|
|
49
48
|
|
|
50
|
-
|
|
51
|
-
|
|
49
|
+
@main:
|
|
50
|
+
const server = await listen({
|
|
52
51
|
host: "127.0.0.1",
|
|
53
52
|
port: 3000,
|
|
54
53
|
http: routes,
|
|
55
54
|
origins: ["https://app.example.com"],
|
|
56
55
|
maxBodyBytes: 16777216,
|
|
57
56
|
})
|
|
57
|
+
await run(server)
|
|
58
58
|
```
|
|
59
59
|
|
|
60
|
-
|
|
61
|
-
|
|
60
|
+
`run(server)` owns SIGINT/SIGTERM shutdown for either transport. The external
|
|
61
|
+
CLI executes the compiled entry module directly.
|
|
62
62
|
|
|
63
63
|
Use direct Node activation for tools, embedded adapters, and tests. For an
|
|
64
64
|
application service, activate `@velarscript/server`; it provides the same
|
|
@@ -224,6 +224,12 @@ An app-scoped provider may depend only on other app-scoped providers, may be
|
|
|
224
224
|
eager, and releases during shutdown. Cycles and provider-budget exhaustion fail
|
|
225
225
|
closed. Do not build a controller or container layer around it.
|
|
226
226
|
|
|
227
|
+
When the process has already constructed an application resource, bind it with
|
|
228
|
+
`supply(app, provider, value)`. The provider must be app-scoped, the value is
|
|
229
|
+
checked against that provider's inferred result type, and its `release` callback
|
|
230
|
+
still owns shutdown. The binding follows `prefix`, middleware, docs, lifecycle,
|
|
231
|
+
and server composition; supplying the same provider twice is rejected.
|
|
232
|
+
|
|
227
233
|
## Composition, lifecycle, and middleware
|
|
228
234
|
|
|
229
235
|
Compose route tables as values:
|
package/skill/ai-skill-server.md
CHANGED
|
@@ -13,7 +13,7 @@ browser application activates `@velarscript/web`:
|
|
|
13
13
|
```json
|
|
14
14
|
{
|
|
15
15
|
"dependencies": {
|
|
16
|
-
"@velarscript/server": "0.
|
|
16
|
+
"@velarscript/server": "0.21.0"
|
|
17
17
|
}
|
|
18
18
|
}
|
|
19
19
|
```
|
|
@@ -24,27 +24,33 @@ browser application activates `@velarscript/web`:
|
|
|
24
24
|
"entry": "src/main.vel",
|
|
25
25
|
"outDir": "dist",
|
|
26
26
|
"publicDir": "public",
|
|
27
|
-
"extensions": ["@velarscript/server"]
|
|
27
|
+
"extensions": ["@velarscript/server"],
|
|
28
|
+
"server": {
|
|
29
|
+
"configuration": "application.yml"
|
|
30
|
+
}
|
|
28
31
|
}
|
|
29
32
|
```
|
|
30
33
|
|
|
31
34
|
The Server application extension composes the Node capability. Do not list both
|
|
32
35
|
extensions. Without `@velarscript/server`, `velar/server` is unavailable and
|
|
33
|
-
|
|
36
|
+
application configuration is not loaded.
|
|
34
37
|
|
|
35
|
-
The
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
38
|
+
The selected entry source must start the application inside `@main`; there is
|
|
39
|
+
no special exported startup binding. Source maps belong to the target-neutral
|
|
40
|
+
top-level `build.sourceMaps` switch. `velar.json` stores only the project-relative
|
|
41
|
+
configuration path. Host, port, request limits, database locations, and other
|
|
42
|
+
runtime values remain in that YAML or JSON file.
|
|
39
43
|
|
|
40
44
|
## Convention-based application configuration
|
|
41
45
|
|
|
42
|
-
|
|
46
|
+
`server.configuration` is required and is the single configuration source.
|
|
47
|
+
The CLI's minimal template chooses root `application.yml`, but users may rename
|
|
48
|
+
or move it by editing `velar.json`; the framework never scans conventional
|
|
49
|
+
filenames.
|
|
43
50
|
|
|
44
51
|
YAML and JSON enter the same checked runtime-Type boundary. Files are bounded;
|
|
45
|
-
YAML is strict, rejects duplicate keys, and limits aliases.
|
|
46
|
-
`.yml`, `.yaml`, or `.json
|
|
47
|
-
configuration; other root filenames are never discovered by convention.
|
|
52
|
+
YAML is strict, rejects duplicate keys, and limits aliases. The declared path
|
|
53
|
+
must stay within the project and end in `.yml`, `.yaml`, or `.json`.
|
|
48
54
|
|
|
49
55
|
The framework-owned server section is:
|
|
50
56
|
|
|
@@ -56,22 +62,24 @@ server:
|
|
|
56
62
|
```
|
|
57
63
|
|
|
58
64
|
All three fields are optional. Their defaults are `127.0.0.1`, `3000`, and
|
|
59
|
-
16 MiB. `application(app)` reads this section
|
|
65
|
+
16 MiB. `application(app)` reads this section and creates the server; the
|
|
66
|
+
entry owns its lifetime explicitly:
|
|
60
67
|
|
|
61
68
|
```velar
|
|
62
69
|
import {application} from "velar/server"
|
|
70
|
+
import {run} from "velar/serve"
|
|
63
71
|
|
|
64
72
|
export server routes:
|
|
65
73
|
@get(p"/health") => {status: "ready"}
|
|
66
74
|
|
|
67
|
-
|
|
75
|
+
@main:
|
|
76
|
+
const server = await application(routes)
|
|
77
|
+
await run(server)
|
|
68
78
|
```
|
|
69
79
|
|
|
70
80
|
`velar dev`, `velar serve`, and the standalone `velar build` output use the
|
|
71
|
-
same
|
|
72
|
-
second configuration channel. A missing
|
|
73
|
-
defaults; when application-specific settings are required, load the full file
|
|
74
|
-
with `configuration(Type)`, which requires the file to exist.
|
|
81
|
+
same declared configuration. CLI `--host` and Node `--port` overrides are not
|
|
82
|
+
a second configuration channel. A missing declared file fails closed.
|
|
75
83
|
|
|
76
84
|
## Typed application settings
|
|
77
85
|
|
|
@@ -93,11 +101,12 @@ type ApplicationSettings:
|
|
|
93
101
|
server: ServerSettings
|
|
94
102
|
database: DatabaseSettings
|
|
95
103
|
|
|
96
|
-
export
|
|
104
|
+
export async def loadSettings() -> ApplicationSettings:
|
|
105
|
+
return await configuration(ApplicationSettings)
|
|
97
106
|
```
|
|
98
107
|
|
|
99
|
-
`configuration(Type,
|
|
100
|
-
|
|
108
|
+
`configuration(Type, maxBytes=65536)` returns `Promise<Type>` and always reads
|
|
109
|
+
the manifest-declared path.
|
|
101
110
|
The framework parses syntax; the application Runtime Type owns field names and
|
|
102
111
|
types, and application validation still owns domain ranges and invariants.
|
|
103
112
|
Environment variables may form an explicit deployment override layer, but
|
|
@@ -238,12 +247,12 @@ idempotent handling.
|
|
|
238
247
|
## Custom shared HTTP/WebSocket startup
|
|
239
248
|
|
|
240
249
|
A service whose route table contains `@websocket` declarations may load the
|
|
241
|
-
same typed configuration and
|
|
242
|
-
|
|
250
|
+
same typed configuration and create the shared HTTP/WebSocket listener inside
|
|
251
|
+
`@main`:
|
|
243
252
|
|
|
244
253
|
```velar fragment
|
|
245
254
|
import {configuration} from "velar/server"
|
|
246
|
-
import {listen} from "velar/websocket"
|
|
255
|
+
import {listen, run} from "velar/websocket"
|
|
247
256
|
|
|
248
257
|
type ServerSettings:
|
|
249
258
|
host: string
|
|
@@ -253,21 +262,21 @@ type ServerSettings:
|
|
|
253
262
|
type Settings:
|
|
254
263
|
server: ServerSettings
|
|
255
264
|
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
return await listen({
|
|
265
|
+
@main:
|
|
266
|
+
const settings = await configuration(Settings)
|
|
267
|
+
const server = await listen({
|
|
260
268
|
host: settings.server.host,
|
|
261
269
|
port: settings.server.port,
|
|
262
270
|
http: routes,
|
|
263
271
|
origins: ["https://app.example.com"],
|
|
264
272
|
maxBodyBytes: settings.server.maxBodyBytes,
|
|
265
273
|
})
|
|
274
|
+
await run(server)
|
|
266
275
|
```
|
|
267
276
|
|
|
268
|
-
The
|
|
269
|
-
|
|
270
|
-
|
|
277
|
+
The entry module itself is the executable artifact; the declared application
|
|
278
|
+
configuration remains the single runtime authority. Each `@websocket`
|
|
279
|
+
RoutePattern owns its own path,
|
|
271
280
|
typed captures, admission inputs, and session handler, so this declarative mode
|
|
272
281
|
does not accept the listener's legacy single `path` option.
|
|
273
282
|
|