@velarscript/cli 0.23.4 → 0.25.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/cli.js +20 -3
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +71 -1
- package/dist/config.js.map +1 -1
- package/dist/dev-server.d.ts.map +1 -1
- package/dist/dev-server.js +8 -2
- package/dist/dev-server.js.map +1 -1
- package/dist/extension-metadata.d.ts +12 -0
- package/dist/extension-metadata.d.ts.map +1 -1
- package/dist/extension-metadata.js +38 -2
- package/dist/extension-metadata.js.map +1 -1
- package/dist/host-error.d.ts +7 -0
- package/dist/host-error.d.ts.map +1 -1
- package/dist/host-error.js +9 -0
- package/dist/host-error.js.map +1 -1
- package/dist/language-server-bundle-entry.js +1 -1
- package/dist/language-server-bundle-entry.js.map +1 -1
- package/dist/language-server-tool.d.ts.map +1 -1
- package/dist/language-server-tool.js +34 -0
- package/dist/language-server-tool.js.map +1 -1
- package/dist/npm.d.ts.map +1 -1
- package/dist/npm.js +147 -16
- package/dist/npm.js.map +1 -1
- package/dist/official-language-server-extensions.d.ts +12 -1
- package/dist/official-language-server-extensions.d.ts.map +1 -1
- package/dist/official-language-server-extensions.js +78 -46
- package/dist/official-language-server-extensions.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 +6 -0
- package/dist/project-format.js.map +1 -1
- package/dist/surface-versions.d.ts +42 -0
- package/dist/surface-versions.d.ts.map +1 -0
- package/dist/surface-versions.js +72 -0
- package/dist/surface-versions.js.map +1 -0
- package/dist/test-output.d.ts.map +1 -1
- package/dist/test-output.js +69 -1
- package/dist/test-output.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +25 -9
- package/skill/ai-skill-server.md +1 -1
- package/skill/ai-skill-web.md +24 -4
- package/skill/ai-skill.md +10 -0
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { VELAR_CORE_API_VERSION } from "@velarscript/compiler";
|
|
2
|
+
/**
|
|
3
|
+
* D110 — one installation number, five surface versions.
|
|
4
|
+
*
|
|
5
|
+
* `VELAR_VERSION` is the number you install. It steps for every package at
|
|
6
|
+
* once, so it cannot say which of the five observable surfaces actually moved:
|
|
7
|
+
* Desktop's surface sat still for several releases while its package climbed
|
|
8
|
+
* with everybody else's. The surface versions answer the question an upgrade
|
|
9
|
+
* really raises — *which code do I have to re-read?*
|
|
10
|
+
*
|
|
11
|
+
* Every number here is read from the package that owns the surface. None of
|
|
12
|
+
* them is written down twice: D110's background is a website that accumulated
|
|
13
|
+
* two dozen hand-typed release numbers and had every one of them go stale in a
|
|
14
|
+
* single release, and a hand-typed number is the failure this whole mechanism
|
|
15
|
+
* exists to remove. `scripts/check-surface-versions.mjs` hashes each surface
|
|
16
|
+
* and refuses a change that leaves its number behind.
|
|
17
|
+
*
|
|
18
|
+
* `0.N`'s `N` counts how many times that surface has changed since counting
|
|
19
|
+
* began, and it is not a maturity grade: a low number beside a high one means
|
|
20
|
+
* that surface started counting later, and nothing else.
|
|
21
|
+
*
|
|
22
|
+
* The four target constants are imported *lazily*, and that is not an
|
|
23
|
+
* optimization detail — it is the difference between this file costing one
|
|
24
|
+
* command and costing all of them. Reading Web's, Server's and Desktop's
|
|
25
|
+
* numbers means loading three compiler extensions the CLI otherwise touches
|
|
26
|
+
* only when a project activates them, and a static import here would put that
|
|
27
|
+
* on the start of `velar check` and every other command for the sake of a
|
|
28
|
+
* banner almost none of them print. Core's constant is already loaded, because
|
|
29
|
+
* the compiler always is.
|
|
30
|
+
*
|
|
31
|
+
* Three of those four are also optional now (D111): a project installs the
|
|
32
|
+
* targets it declares, so a Core project has no Web, Server or Desktop package
|
|
33
|
+
* to read a number out of. The banner answers for the installation it is in —
|
|
34
|
+
* the same reading `velar.json`'s `surfaces` check already takes, where the
|
|
35
|
+
* installed packages, not the CLI's own pins, decide what a project activates.
|
|
36
|
+
* A surface with nothing installed to speak for it is left out rather than
|
|
37
|
+
* printed from a number written down here, which is exactly the second copy
|
|
38
|
+
* this file exists to avoid.
|
|
39
|
+
*/
|
|
40
|
+
export async function readSurfaceVersions() {
|
|
41
|
+
const [web, node, server, desktop] = await Promise.all([
|
|
42
|
+
installedSurface(() => import("@velarscript/web/compiler")),
|
|
43
|
+
import("@velarscript/node/compiler"),
|
|
44
|
+
installedSurface(() => import("@velarscript/server/compiler")),
|
|
45
|
+
installedSurface(() => import("@velarscript/desktop")),
|
|
46
|
+
]);
|
|
47
|
+
// Declaration order is the order the surface table is printed in (D110 rule 6).
|
|
48
|
+
const versions = { core: VELAR_CORE_API_VERSION };
|
|
49
|
+
if (web)
|
|
50
|
+
versions.web = web.VELAR_WEB_API_VERSION;
|
|
51
|
+
versions.node = node.VELAR_NODE_API_VERSION;
|
|
52
|
+
if (server)
|
|
53
|
+
versions.server = server.VELAR_SERVER_API_VERSION;
|
|
54
|
+
if (desktop)
|
|
55
|
+
versions.desktop = desktop.VELAR_DESKTOP_API_VERSION;
|
|
56
|
+
return Object.freeze(versions);
|
|
57
|
+
}
|
|
58
|
+
/** One optional target's module, or null when this project did not install it. */
|
|
59
|
+
async function installedSurface(load) {
|
|
60
|
+
try {
|
|
61
|
+
return await load();
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
return null;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
/** One line, three spaces between entries: `core@<n> web@<n> …`. */
|
|
68
|
+
export async function formatSurfaceVersions() {
|
|
69
|
+
const versions = await readSurfaceVersions();
|
|
70
|
+
return Object.entries(versions).map(([surface, version]) => `${surface}@${version}`).join(" ");
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=surface-versions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"surface-versions.js","sourceRoot":"","sources":["../src/surface-versions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAE/D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB;IACvC,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACrD,gBAAgB,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,2BAA2B,CAAC,CAAC;QAC3D,MAAM,CAAC,4BAA4B,CAAC;QACpC,gBAAgB,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,8BAA8B,CAAC,CAAC;QAC9D,gBAAgB,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC;KACvD,CAAC,CAAC;IACH,gFAAgF;IAChF,MAAM,QAAQ,GAA2B,EAAE,IAAI,EAAE,sBAAsB,EAAE,CAAC;IAC1E,IAAI,GAAG;QAAE,QAAQ,CAAC,GAAG,GAAG,GAAG,CAAC,qBAAqB,CAAC;IAClD,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,sBAAsB,CAAC;IAC5C,IAAI,MAAM;QAAE,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC,wBAAwB,CAAC;IAC9D,IAAI,OAAO;QAAE,QAAQ,CAAC,OAAO,GAAG,OAAO,CAAC,yBAAyB,CAAC;IAClE,OAAO,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AACjC,CAAC;AAED,kFAAkF;AAClF,KAAK,UAAU,gBAAgB,CAAI,IAAsB;IACvD,IAAI,CAAC;QACH,OAAO,MAAM,IAAI,EAAE,CAAC;IACtB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,wEAAwE;AACxE,MAAM,CAAC,KAAK,UAAU,qBAAqB;IACzC,MAAM,QAAQ,GAAG,MAAM,mBAAmB,EAAE,CAAC;IAC7C,OAAO,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,GAAG,OAAO,IAAI,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACnG,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-output.d.ts","sourceRoot":"","sources":["../src/test-output.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAsB,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"test-output.d.ts","sourceRoot":"","sources":["../src/test-output.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAsB,MAAM,cAAc,CAAC;AAoBrF,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAKvD;AAED,0EAA0E;AAC1E,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAElD;AAED;;;;;;;;;GASG;AACH,wBAAsB,qBAAqB,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,KAAK,GAAG,KAAK,GAAG,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAe1H;AAwED,6EAA6E;AAC7E,wBAAsB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAO1E;AAED,wBAAsB,wBAAwB,CAAC,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,UAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CA2B3H;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAIhH"}
|
package/dist/test-output.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { mkdir, mkdtemp, readFile, rm, rmdir, writeFile } from "node:fs/promises";
|
|
2
|
-
import { basename, dirname, join, relative } from "node:path";
|
|
2
|
+
import { basename, dirname, isAbsolute, join, relative, resolve, sep } from "node:path";
|
|
3
3
|
import { assertUniqueEmbeddedModuleOutputs, embeddedModuleFileContents, embeddedModuleOutputPath } from "./embedded-modules.js";
|
|
4
|
+
import { importSpecifierSites } from "./module-assets.js";
|
|
4
5
|
import { usedPackageResourceExports, writeProjectResources } from "./resource-output.js";
|
|
5
6
|
/**
|
|
6
7
|
* D51 rule 105: the verdict line is the last link in the trust chain, so what
|
|
@@ -46,6 +47,8 @@ export async function createCompiledSandbox(projectRoot, prefix) {
|
|
|
46
47
|
type: "module",
|
|
47
48
|
...(imports ? { imports } : {}),
|
|
48
49
|
}), "utf8");
|
|
50
|
+
if (imports)
|
|
51
|
+
await copyPackageImportTargets(projectRoot, sandbox, imports);
|
|
49
52
|
return sandbox;
|
|
50
53
|
}
|
|
51
54
|
async function projectPackageImports(projectRoot) {
|
|
@@ -59,6 +62,71 @@ async function projectPackageImports(projectRoot) {
|
|
|
59
62
|
return null;
|
|
60
63
|
}
|
|
61
64
|
}
|
|
65
|
+
/** Every string leaf of an `imports` target: a plain path, a fallback array, or a conditions object. */
|
|
66
|
+
function packageImportTargets(value) {
|
|
67
|
+
if (typeof value === "string")
|
|
68
|
+
return [value];
|
|
69
|
+
if (Array.isArray(value))
|
|
70
|
+
return value.flatMap(packageImportTargets);
|
|
71
|
+
if (value !== null && typeof value === "object")
|
|
72
|
+
return Object.values(value).flatMap(packageImportTargets);
|
|
73
|
+
return [];
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Brings the files a relative `#` import target names into the sandbox.
|
|
77
|
+
*
|
|
78
|
+
* The manifest is copied verbatim, and that is right for a target that names a
|
|
79
|
+
* package: the sandbox lives inside the project precisely so Node's upward
|
|
80
|
+
* `node_modules` walk still reaches the project's real installation. A target
|
|
81
|
+
* that names a *path* has no such fallback — it is anchored to the manifest's
|
|
82
|
+
* own directory, which is now the sandbox — so `velar test` and `velar run`
|
|
83
|
+
* used to fail to resolve a `#` specifier that `velar check` and `velar build`
|
|
84
|
+
* both resolve, because those two resolve from the real importer instead.
|
|
85
|
+
*
|
|
86
|
+
* The file is mirrored at its project-relative path so its own relative imports
|
|
87
|
+
* keep their meaning without a byte being rewritten, and those imports are
|
|
88
|
+
* followed, because a target's neighbours are as necessary to it as the target
|
|
89
|
+
* is to the compiled tree. Bare and `#` specifiers inside a copied file are not
|
|
90
|
+
* followed: those resolve exactly as they did before, through the upward walk
|
|
91
|
+
* and through this same manifest. A target that resolves outside the project is
|
|
92
|
+
* skipped rather than mirrored somewhere it does not belong — Node rejects that
|
|
93
|
+
* shape itself, since an `imports` target may not escape its package.
|
|
94
|
+
*/
|
|
95
|
+
async function copyPackageImportTargets(projectRoot, sandbox, imports) {
|
|
96
|
+
const pending = Object.values(imports)
|
|
97
|
+
.flatMap(packageImportTargets)
|
|
98
|
+
.filter((target) => target.startsWith("./") || target.startsWith("../"))
|
|
99
|
+
.map((target) => resolve(projectRoot, target));
|
|
100
|
+
const copied = new Set();
|
|
101
|
+
const velarRoot = join(projectRoot, ".velar");
|
|
102
|
+
while (pending.length > 0) {
|
|
103
|
+
const source = pending.pop();
|
|
104
|
+
if (copied.has(source))
|
|
105
|
+
continue;
|
|
106
|
+
const inside = relative(projectRoot, source);
|
|
107
|
+
if (inside.startsWith("..") || isAbsolute(inside) || source === velarRoot || source.startsWith(`${velarRoot}${sep}`))
|
|
108
|
+
continue;
|
|
109
|
+
let contents;
|
|
110
|
+
try {
|
|
111
|
+
contents = await readFile(source);
|
|
112
|
+
}
|
|
113
|
+
catch {
|
|
114
|
+
// A target that does not exist is the project's own defect, and the
|
|
115
|
+
// resolution failure names it far better than a copier could.
|
|
116
|
+
continue;
|
|
117
|
+
}
|
|
118
|
+
copied.add(source);
|
|
119
|
+
const output = join(sandbox, inside);
|
|
120
|
+
await mkdir(dirname(output), { recursive: true });
|
|
121
|
+
await writeFile(output, contents);
|
|
122
|
+
if (!/\.[cm]?js$/u.test(source))
|
|
123
|
+
continue;
|
|
124
|
+
for (const site of importSpecifierSites(contents.toString("utf8"))) {
|
|
125
|
+
if (site.source.startsWith("./") || site.source.startsWith("../"))
|
|
126
|
+
pending.push(resolve(dirname(source), site.source));
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
62
130
|
/** Removes a compiled sandbox and prunes `.velar/` when it becomes empty. */
|
|
63
131
|
export async function removeCompiledSandbox(sandbox) {
|
|
64
132
|
await rm(sandbox, { recursive: true, force: true });
|
package/dist/test-output.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-output.js","sourceRoot":"","sources":["../src/test-output.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClF,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"test-output.js","sourceRoot":"","sources":["../src/test-output.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.25.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,14 +30,30 @@
|
|
|
30
30
|
"velar": "./dist/cli.js"
|
|
31
31
|
},
|
|
32
32
|
"dependencies": {
|
|
33
|
-
"@velarscript/compiler": "0.
|
|
34
|
-
"@velarscript/core": "0.
|
|
35
|
-
"@velarscript/
|
|
36
|
-
"
|
|
37
|
-
"
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
"
|
|
33
|
+
"@velarscript/compiler": "0.25.0",
|
|
34
|
+
"@velarscript/core": "0.25.0",
|
|
35
|
+
"@velarscript/node": "0.25.0",
|
|
36
|
+
"create-velar": "0.25.0",
|
|
37
|
+
"esbuild": "^0.28.1"
|
|
38
|
+
},
|
|
39
|
+
"peerDependencies": {
|
|
40
|
+
"@velarscript/desktop": "0.25.0",
|
|
41
|
+
"@velarscript/server": "0.25.0",
|
|
42
|
+
"@velarscript/web": "0.25.0",
|
|
41
43
|
"playwright": "^1.58.2"
|
|
44
|
+
},
|
|
45
|
+
"peerDependenciesMeta": {
|
|
46
|
+
"@velarscript/desktop": {
|
|
47
|
+
"optional": true
|
|
48
|
+
},
|
|
49
|
+
"@velarscript/server": {
|
|
50
|
+
"optional": true
|
|
51
|
+
},
|
|
52
|
+
"@velarscript/web": {
|
|
53
|
+
"optional": true
|
|
54
|
+
},
|
|
55
|
+
"playwright": {
|
|
56
|
+
"optional": true
|
|
57
|
+
}
|
|
42
58
|
}
|
|
43
59
|
}
|
package/skill/ai-skill-server.md
CHANGED
package/skill/ai-skill-web.md
CHANGED
|
@@ -74,6 +74,13 @@ A resource loads once at mount. Refetching after an input changes is an
|
|
|
74
74
|
explicit `watch` plus detached `async resource.reload()`. Actions do not queue;
|
|
75
75
|
disable or otherwise guard a trigger when concurrent calls are unwanted.
|
|
76
76
|
|
|
77
|
+
Markup children are text, and text has no comment form. A `//` or `/* ... */`
|
|
78
|
+
opener standing at the start of its own line inside a children region is
|
|
79
|
+
`VEL5002`, exactly as `<!-- ... -->` and `{/* ... */}` are; it used to render as
|
|
80
|
+
a paragraph of source comment on the page. Put the note above the markup, where
|
|
81
|
+
`//` is a comment, and interpolate the line — `{"// ..."}` — on the rare
|
|
82
|
+
occasion the text really does begin with an opener.
|
|
83
|
+
|
|
77
84
|
A watch subject is a reactive name — a `state`, a `computed`, a prop, or a
|
|
78
85
|
resource field — or a read path out of one, such as `items[0].done`. An operator
|
|
79
86
|
or a call there is refused; declare the value with `computed` and watch that
|
|
@@ -109,10 +116,13 @@ Conditional rendering is an expression, and repeated children need stable
|
|
|
109
116
|
must still be the same value. `items = items.map(item => { ...item, done: true })`
|
|
110
117
|
rebuilds every row, so the keyed list recognises none of them and destroys and
|
|
111
118
|
rebuilds all of its children — an input being typed into loses focus. Change the
|
|
112
|
-
field in place, `items[index].done = true`.
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
119
|
+
field in place, `items[index].done = true`. A `computed` that builds a fresh
|
|
120
|
+
record per source element is the same rebuild, once per recompute; there, render
|
|
121
|
+
the source rows and change the field on those, or carry the source records
|
|
122
|
+
through. The compiler raises advisory **A4** for both spellings where the rebuilt
|
|
123
|
+
rows are the ones a keyed position renders; `// velar-allow A4: <reason>`
|
|
124
|
+
suppresses it where building the rows is the only spelling, which a `readonly`
|
|
125
|
+
list or one API response makes it.
|
|
116
126
|
|
|
117
127
|
A native element rejects every attribute name beginning with `on` other than
|
|
118
128
|
the `on:` directive itself. `onclick`, `onClick`, and `ONCLICK` are one
|
|
@@ -186,6 +196,16 @@ defines it. Do not write `var(--name)` as a string and do not wrap it in
|
|
|
186
196
|
migrates them. `animation` is the exception: motion is a `keyframes:` value
|
|
187
197
|
passed to `animate(...)`, never a token.
|
|
188
198
|
|
|
199
|
+
Do not write a CSS shorthand beside a longhand it writes — `padding` with
|
|
200
|
+
`paddingTop`, `border` with `borderColor`, `background` with `backgroundColor`.
|
|
201
|
+
Each Look entry becomes its own CSS rule and the stylesheet orders them
|
|
202
|
+
module-wide, so the block's own order does not decide which survives; the pair
|
|
203
|
+
is refused, and the refusal names the longhands to write instead. There is no
|
|
204
|
+
`font` property: it is a shorthand whose value nothing can check, and a value
|
|
205
|
+
that is not a legal `font` shorthand silently resets `fontSize`, `fontFamily`,
|
|
206
|
+
`fontWeight` and `lineHeight` along with it. Write the longhands, and put a
|
|
207
|
+
size token in `fontSize = token("--ui-font-size-body")`.
|
|
208
|
+
|
|
189
209
|
A `look` written on a component invocation composes after the look the
|
|
190
210
|
component applies to its own host, per property and per condition: declare a
|
|
191
211
|
property unconditionally to override the component's outright, and declare it
|
package/skill/ai-skill.md
CHANGED
|
@@ -88,6 +88,16 @@ Writing the manifest yourself: `formatVersion` is required, `kind` may be
|
|
|
88
88
|
omitted by a project that loads none, `entry` defaults to `src/main.vel`,
|
|
89
89
|
`outDir` to `dist`, and `publicDir` to `public`.
|
|
90
90
|
|
|
91
|
+
`surfaces` is optional and records the **surface version** the project was
|
|
92
|
+
written against — `core`, plus one entry per activated extension. `velar create`
|
|
93
|
+
writes it. **Never invent the values**: read them from `velar --version`, which
|
|
94
|
+
prints the five the installed toolchain ships, or leave the key out. A
|
|
95
|
+
declaration that is present must be complete — every activated surface and no
|
|
96
|
+
others — and one that no longer matches what is installed is refused, naming the
|
|
97
|
+
surface, both numbers, and the changelog sections between them. That refusal
|
|
98
|
+
means the surface moved under the project: read those sections, fix the code,
|
|
99
|
+
then write the new number. It is not a range to widen.
|
|
100
|
+
|
|
91
101
|
A Core project (CLI or library) loads no extensions:
|
|
92
102
|
|
|
93
103
|
```json
|