@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.
Files changed (56) hide show
  1. package/dist/application-entry.d.ts +13 -0
  2. package/dist/application-entry.d.ts.map +1 -0
  3. package/dist/application-entry.js +14 -0
  4. package/dist/application-entry.js.map +1 -0
  5. package/dist/browser-test-runner.js +40 -9
  6. package/dist/browser-test-runner.js.map +1 -1
  7. package/dist/bundled-extension-registry.d.ts +2 -0
  8. package/dist/bundled-extension-registry.d.ts.map +1 -1
  9. package/dist/bundled-extension-registry.js.map +1 -1
  10. package/dist/cli.js +41 -44
  11. package/dist/cli.js.map +1 -1
  12. package/dist/config.d.ts +23 -0
  13. package/dist/config.d.ts.map +1 -1
  14. package/dist/config.js +79 -5
  15. package/dist/config.js.map +1 -1
  16. package/dist/dev-server.d.ts.map +1 -1
  17. package/dist/dev-server.js +18 -0
  18. package/dist/dev-server.js.map +1 -1
  19. package/dist/library-artifact.js +10 -2
  20. package/dist/library-artifact.js.map +1 -1
  21. package/dist/mechanical-fixer.d.ts +4 -2
  22. package/dist/mechanical-fixer.d.ts.map +1 -1
  23. package/dist/mechanical-fixer.js +17 -4
  24. package/dist/mechanical-fixer.js.map +1 -1
  25. package/dist/node-application.d.ts +7 -9
  26. package/dist/node-application.d.ts.map +1 -1
  27. package/dist/node-application.js +20 -58
  28. package/dist/node-application.js.map +1 -1
  29. package/dist/node-production-build.d.ts +4 -4
  30. package/dist/node-production-build.d.ts.map +1 -1
  31. package/dist/node-production-build.js +5 -5
  32. package/dist/node-production-build.js.map +1 -1
  33. package/dist/node-production-verifier.d.ts.map +1 -1
  34. package/dist/node-production-verifier.js +8 -5
  35. package/dist/node-production-verifier.js.map +1 -1
  36. package/dist/project-check.d.ts +15 -3
  37. package/dist/project-check.d.ts.map +1 -1
  38. package/dist/project-check.js +86 -19
  39. package/dist/project-check.js.map +1 -1
  40. package/dist/project-format.d.ts +1 -1
  41. package/dist/project-format.d.ts.map +1 -1
  42. package/dist/project-format.js +1 -0
  43. package/dist/project-format.js.map +1 -1
  44. package/dist/project.d.ts.map +1 -1
  45. package/dist/project.js +6 -1
  46. package/dist/project.js.map +1 -1
  47. package/dist/reproduction.js +5 -5
  48. package/dist/reproduction.js.map +1 -1
  49. package/dist/version.d.ts +1 -1
  50. package/dist/version.js +1 -1
  51. package/package.json +8 -8
  52. package/skill/ai-skill-desktop.md +281 -6
  53. package/skill/ai-skill-node.md +23 -17
  54. package/skill/ai-skill-server.md +39 -30
  55. package/skill/ai-skill-web.md +9 -0
  56. package/skill/ai-skill.md +13 -3
@@ -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
@@ -1,3 +1,3 @@
1
- export declare const VELAR_VERSION = "0.20.0";
1
+ export declare const VELAR_VERSION = "0.21.0";
2
2
  export { VELAR_STANDARD_API_VERSION } from "@velarscript/core";
3
3
  //# sourceMappingURL=version.d.ts.map
package/dist/version.js CHANGED
@@ -1,3 +1,3 @@
1
- export const VELAR_VERSION = "0.20.0";
1
+ export const VELAR_VERSION = "0.21.0";
2
2
  export { VELAR_STANDARD_API_VERSION } from "@velarscript/core";
3
3
  //# sourceMappingURL=version.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@velarscript/cli",
3
- "version": "0.20.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.20.0",
34
- "@velarscript/core": "0.20.0",
35
- "@velarscript/desktop": "0.20.0",
36
- "@velarscript/node": "0.20.0",
37
- "@velarscript/server": "0.20.0",
38
- "@velarscript/web": "0.20.0",
39
- "create-velar": "0.20.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/desktop-test`, and permission-scoped
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, and opaque secret names are finite allowlists.
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. Runnable target examples live
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.
@@ -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 root `application.*`, application assembly, and
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 and name
17
- one exported zero-argument async startup function:
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
- export async def start():
40
- return await serve(app, port=3000, host="127.0.0.1")
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 same exact zero-argument
44
- shape returns `Promise<WebSocketServer>`:
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
- export async def start():
51
- return await listen({
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
- The exact result is `Promise<WebSocketServer>`. The launcher supplies no
61
- host, port, or body-limit parameters.
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:
@@ -13,7 +13,7 @@ browser application activates `@velarscript/web`:
13
13
  ```json
14
14
  {
15
15
  "dependencies": {
16
- "@velarscript/server": "0.20.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
- root application configuration is not loaded.
36
+ application configuration is not loaded.
34
37
 
35
- The conventional entry export is `start`. A different exported binding may be
36
- selected with the optional `server.app` manifest field. Source maps belong to
37
- the target-neutral top-level `build.sourceMaps` switch. Host, port, request limits, database locations, and
38
- other runtime settings never belong in `velar.json`.
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
- The only conventional configuration file is root `application.yml`.
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. An explicit
46
- `.yml`, `.yaml`, or `.json` path is the escape hatch for deployment-specific
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 when the server starts:
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
- export const start = application(routes)
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 root configuration. CLI `--host` and Node `--port` overrides are not a
72
- second configuration channel. A missing conventional file uses the server
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 const settings = await configuration(ApplicationSettings)
104
+ export async def loadSettings() -> ApplicationSettings:
105
+ return await configuration(ApplicationSettings)
97
106
  ```
98
107
 
99
- `configuration(Type, path=null, maxBytes=65536)` returns
100
- `Promise<Type>`. A non-null path must end in `.yml`, `.yaml`, or `.json`.
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 export an exact zero-argument async startup
242
- function for the shared HTTP/WebSocket listener:
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
- const settings = await configuration(Settings)
257
-
258
- export async def start():
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 result must be exactly `Promise<WebSocketServer>`. The launcher supplies no
269
- host, port, or body-limit arguments; the root application configuration remains
270
- the single runtime authority. Each `@websocket` RoutePattern owns its own path,
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