@telorun/cli 0.61.0 → 0.63.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/README.md +19 -4
- package/dist/bundle/partition-layers.d.ts +4 -2
- package/dist/bundle/partition-layers.d.ts.map +1 -1
- package/dist/bundle/partition-layers.js +13 -14
- package/dist/bundle/partition-layers.js.map +1 -1
- package/dist/bundle/payload-drift.d.ts +46 -0
- package/dist/bundle/payload-drift.d.ts.map +1 -0
- package/dist/bundle/payload-drift.js +109 -0
- package/dist/bundle/payload-drift.js.map +1 -0
- package/dist/bundle/select-files.d.ts +13 -0
- package/dist/bundle/select-files.d.ts.map +1 -1
- package/dist/bundle/select-files.js +27 -4
- package/dist/bundle/select-files.js.map +1 -1
- package/dist/commands/check.d.ts +1 -0
- package/dist/commands/check.d.ts.map +1 -1
- package/dist/commands/check.js +136 -10
- package/dist/commands/check.js.map +1 -1
- package/dist/commands/manifest-imports.d.ts.map +1 -1
- package/dist/commands/manifest-imports.js +2 -2
- package/dist/commands/manifest-imports.js.map +1 -1
- package/dist/commands/publish.d.ts.map +1 -1
- package/dist/commands/publish.js +51 -7
- package/dist/commands/publish.js.map +1 -1
- package/dist/commands/run.d.ts.map +1 -1
- package/dist/commands/run.js +149 -30
- package/dist/commands/run.js.map +1 -1
- package/dist/logger.d.ts +5 -1
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +55 -26
- package/dist/logger.js.map +1 -1
- package/dist/manifest-freshness.d.ts +120 -0
- package/dist/manifest-freshness.d.ts.map +1 -0
- package/dist/manifest-freshness.js +261 -0
- package/dist/manifest-freshness.js.map +1 -0
- package/package.json +6 -6
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
import { isOciRef, parseOciRef } from "@telorun/analyzer";
|
|
2
|
+
import { defaultTransportRegistry } from "@telorun/kernel/transports";
|
|
3
|
+
import * as fs from "fs/promises";
|
|
4
|
+
import * as path from "path";
|
|
5
|
+
import { fileURLToPath, pathToFileURL } from "url";
|
|
6
|
+
/** Sits beside `.validated.json` inside `<cacheRoot>/manifests/`. */
|
|
7
|
+
const ORIGINS_FILE = ".origins.json";
|
|
8
|
+
const ORIGINS_VERSION = 1;
|
|
9
|
+
/**
|
|
10
|
+
* True when `ref` names an OCI artifact by a **tag** rather than by content —
|
|
11
|
+
* the only case a cached manifest can silently go stale.
|
|
12
|
+
*
|
|
13
|
+
* A `sha256:` *reference* addresses the OCI manifest directly and is immutable.
|
|
14
|
+
* A tag the publisher can repoint is not, unless something else verifies the
|
|
15
|
+
* bytes — which is what {@link isPinnedOciRef} covers separately, because the
|
|
16
|
+
* pin does not survive into a resolved graph.
|
|
17
|
+
*/
|
|
18
|
+
export function isOciTagRef(ref) {
|
|
19
|
+
if (!isOciRef(ref))
|
|
20
|
+
return false;
|
|
21
|
+
try {
|
|
22
|
+
return !parseOciRef(ref).reference.includes(":");
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
// An unparseable ref is not something this pass can revalidate; the loader
|
|
26
|
+
// will report it as a resolution failure in its own right.
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
/** True when `ref` carries Telo's inline `#sha256-…` pin, which the cache source
|
|
31
|
+
* and the OCI transport both verify the manifest bytes against on every read.
|
|
32
|
+
* A moved tag therefore cannot be served undetected, so no `HEAD` is needed.
|
|
33
|
+
*
|
|
34
|
+
* This must be asked of the ref **as authored**: `OciTransport` strips the
|
|
35
|
+
* fragment when it builds a module's canonical source, so a network-resolved
|
|
36
|
+
* graph no longer remembers that the import was pinned. */
|
|
37
|
+
export function isPinnedOciRef(ref) {
|
|
38
|
+
if (!isOciRef(ref))
|
|
39
|
+
return false;
|
|
40
|
+
try {
|
|
41
|
+
return Boolean(parseOciRef(ref).integrity);
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
return false;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
/** Identity under which a mutable ref's origin digest is recorded:
|
|
48
|
+
* `host/repo@tag`, independent of scheme spelling. */
|
|
49
|
+
export function originKey(ref) {
|
|
50
|
+
const { host, repo, reference } = parseOciRef(ref);
|
|
51
|
+
return `${host}/${repo}@${reference}`;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Whether a cached manifest for `ref` may be served to `check` at all.
|
|
55
|
+
*
|
|
56
|
+
* The cache maps three key shapes, and only two of them address content that
|
|
57
|
+
* cannot change under the key:
|
|
58
|
+
*
|
|
59
|
+
* - `oci` — the reference is either a `sha256:` digest or a tag. A tag is
|
|
60
|
+
* mutable, which is what {@link revalidateMutableOciRefs} exists to catch,
|
|
61
|
+
* so both are cacheable and freshness is settled separately.
|
|
62
|
+
* - `registry` — `<path>@<version>`, always version-segmented. A published
|
|
63
|
+
* version is immutable by convention, the same assumption npm makes, so
|
|
64
|
+
* these are served without revalidation. This is a deliberate policy call,
|
|
65
|
+
* not a gap: the registry origin has no cheap freshness probe (`digest()`
|
|
66
|
+
* downloads the manifest to hash it), so revalidating would cost exactly
|
|
67
|
+
* what re-fetching costs and buy nothing.
|
|
68
|
+
* - `url` — an arbitrary HTTP(S) import. Its key carries **no version
|
|
69
|
+
* segment**: one URL is one path forever, so a cached copy would be served
|
|
70
|
+
* for the lifetime of the directory no matter what the server now returns.
|
|
71
|
+
* `check` therefore never reads these from the cache and always re-fetches.
|
|
72
|
+
* That costs one request — exactly what revalidating would cost, since
|
|
73
|
+
* `RegistryTransport.digest` is a full GET — so the honest option is also
|
|
74
|
+
* the cheap one. `telo run` keeps caching them; changing that is a separate
|
|
75
|
+
* decision about `run`'s freshness model, not a property of this pass.
|
|
76
|
+
*/
|
|
77
|
+
export function isCacheableForCheck(ref, registryUrl) {
|
|
78
|
+
return defaultTransportRegistry(registryUrl).cacheCoords(ref)?.transport !== "url";
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Wraps a manifest source and records which request URLs it actually served,
|
|
82
|
+
* and from which file on disk.
|
|
83
|
+
*
|
|
84
|
+
* The freshness pass needs both halves, and neither survives into the loaded
|
|
85
|
+
* graph: once the cache serves a manifest the graph's canonical source is a
|
|
86
|
+
* `file://` URL, so the `oci://` ref that asked for it is gone. Recording at
|
|
87
|
+
* the source is also what makes a *relative* import inside an OCI module work
|
|
88
|
+
* here — the loader resolves it to an absolute `oci://` ref before `read()`,
|
|
89
|
+
* so this map holds the absolute ref even though no manifest ever spelled it.
|
|
90
|
+
*/
|
|
91
|
+
export class RecordingCacheSource {
|
|
92
|
+
inner;
|
|
93
|
+
registryUrl;
|
|
94
|
+
/** Request URL → absolute path of the cache file that answered it. */
|
|
95
|
+
served = new Map();
|
|
96
|
+
constructor(inner, registryUrl) {
|
|
97
|
+
this.inner = inner;
|
|
98
|
+
this.registryUrl = registryUrl;
|
|
99
|
+
}
|
|
100
|
+
supports(url) {
|
|
101
|
+
return isCacheableForCheck(url, this.registryUrl) && this.inner.supports(url);
|
|
102
|
+
}
|
|
103
|
+
async read(url) {
|
|
104
|
+
const result = await this.inner.read(url);
|
|
105
|
+
// The cache always answers with a `file://` URL; anything else means the
|
|
106
|
+
// wrapped source is not disk-backed, and there is no cache file to record.
|
|
107
|
+
if (result.source.startsWith("file://")) {
|
|
108
|
+
this.served.set(url, fileURLToPath(result.source));
|
|
109
|
+
}
|
|
110
|
+
return result;
|
|
111
|
+
}
|
|
112
|
+
resolveRelative(base, relative) {
|
|
113
|
+
return this.inner.resolveRelative(base, relative);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Read the recorded origin digests for one cache root.
|
|
118
|
+
*
|
|
119
|
+
* A missing, unreadable, or version-mismatched record yields an empty map,
|
|
120
|
+
* which makes every cached mutable ref count as *unverified* and therefore
|
|
121
|
+
* stale. That is the conservative direction — the failure mode is one extra
|
|
122
|
+
* fetch, never serving a manifest whose tag has moved. It is a cache miss in
|
|
123
|
+
* the same sense `LocalManifestCacheSource` treats a failed `stat`, not a
|
|
124
|
+
* suppressed error.
|
|
125
|
+
*/
|
|
126
|
+
export async function readOriginDigests(manifestsDir) {
|
|
127
|
+
let raw;
|
|
128
|
+
try {
|
|
129
|
+
raw = await fs.readFile(path.join(manifestsDir, ORIGINS_FILE), "utf-8");
|
|
130
|
+
}
|
|
131
|
+
catch {
|
|
132
|
+
return new Map();
|
|
133
|
+
}
|
|
134
|
+
let parsed;
|
|
135
|
+
try {
|
|
136
|
+
parsed = JSON.parse(raw);
|
|
137
|
+
}
|
|
138
|
+
catch {
|
|
139
|
+
return new Map();
|
|
140
|
+
}
|
|
141
|
+
if (parsed?.version !== ORIGINS_VERSION || typeof parsed.digests !== "object") {
|
|
142
|
+
return new Map();
|
|
143
|
+
}
|
|
144
|
+
return new Map(Object.entries(parsed.digests));
|
|
145
|
+
}
|
|
146
|
+
/** Persist origin digests, merging over whatever the record already held so a
|
|
147
|
+
* check of one entry never drops another's. */
|
|
148
|
+
export async function writeOriginDigests(manifestsDir, digests) {
|
|
149
|
+
if (digests.size === 0)
|
|
150
|
+
return;
|
|
151
|
+
const merged = new Map([...(await readOriginDigests(manifestsDir)), ...digests]);
|
|
152
|
+
const record = {
|
|
153
|
+
version: ORIGINS_VERSION,
|
|
154
|
+
digests: Object.fromEntries([...merged].sort(([a], [b]) => (a < b ? -1 : a > b ? 1 : 0))),
|
|
155
|
+
};
|
|
156
|
+
await fs.mkdir(manifestsDir, { recursive: true });
|
|
157
|
+
await fs.writeFile(path.join(manifestsDir, ORIGINS_FILE), `${JSON.stringify(record, null, 2)}\n`, "utf-8");
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Revalidate every **mutable** OCI ref this graph resolved, with one `HEAD` per
|
|
161
|
+
* repository reference.
|
|
162
|
+
*
|
|
163
|
+
* `check` is the correctness command, so it must not report a clean bill of
|
|
164
|
+
* health against a manifest whose tag has since moved. But re-pulling every
|
|
165
|
+
* import to find that out is what made it slow, and a pinned ref — which is
|
|
166
|
+
* what `telo install` writes and what every published manifest carries — needs
|
|
167
|
+
* no network at all: its bytes are verified against the inline hash. So the
|
|
168
|
+
* cost falls only on unpinned tags, and only one round trip each, against the
|
|
169
|
+
* four a full re-pull would take.
|
|
170
|
+
*
|
|
171
|
+
* A ref fetched over the network during this load is fresh by construction and
|
|
172
|
+
* is only recorded, never revalidated.
|
|
173
|
+
*/
|
|
174
|
+
export async function revalidateMutableOciRefs(graph, served,
|
|
175
|
+
/** Recorded origin digests per cache root (keyed by its `manifests` dir). A
|
|
176
|
+
* cached manifest is judged against the record of the root it was served
|
|
177
|
+
* from, which is not necessarily the root this entry writes to: one loader
|
|
178
|
+
* serves every input path, so a hit may land in a sibling's cache. */
|
|
179
|
+
originsByRoot, registryUrl,
|
|
180
|
+
/** Digests already probed earlier in this invocation, keyed as {@link originKey}.
|
|
181
|
+
* A tag verified once in a process is verified for the whole run, so checking
|
|
182
|
+
* twenty manifests that share an import issues one `HEAD`, not twenty.
|
|
183
|
+
* Mutated in place so later paths see what earlier ones learned. */
|
|
184
|
+
verified = new Map()) {
|
|
185
|
+
const recordFor = (cacheFile) => {
|
|
186
|
+
let best;
|
|
187
|
+
for (const root of originsByRoot.keys()) {
|
|
188
|
+
if (!cacheFile.startsWith(root + path.sep))
|
|
189
|
+
continue;
|
|
190
|
+
if (!best || root.length > best.length)
|
|
191
|
+
best = root;
|
|
192
|
+
}
|
|
193
|
+
return (best && originsByRoot.get(best)) || new Map();
|
|
194
|
+
};
|
|
195
|
+
// A module's canonical source loses the `#sha256-` pin, so pinning has to be
|
|
196
|
+
// read off the refs as authored. Collect every authored ref that reached each
|
|
197
|
+
// canonical source; one pinned edge is enough, since edges sharing a canonical
|
|
198
|
+
// source resolved the same tag and its bytes were verified against that pin.
|
|
199
|
+
const pinnedSources = new Set();
|
|
200
|
+
for (const [, edges] of graph.importEdges) {
|
|
201
|
+
for (const [, edge] of edges) {
|
|
202
|
+
if (isPinnedOciRef(edge.targetRef))
|
|
203
|
+
pinnedSources.add(edge.targetSource);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
// Cache hits record the request URL, which keeps its pin — and is the only
|
|
207
|
+
// place a relative import's absolute `oci://` ref survives.
|
|
208
|
+
const cacheFileToRequest = new Map();
|
|
209
|
+
for (const [url, cacheFile] of served) {
|
|
210
|
+
cacheFileToRequest.set(pathToFileURL(cacheFile).href, url);
|
|
211
|
+
}
|
|
212
|
+
const targets = new Map();
|
|
213
|
+
// Restricted to modules this graph actually reached — a shared loader carries
|
|
214
|
+
// entries from previously-checked paths too.
|
|
215
|
+
for (const source of graph.modules.keys()) {
|
|
216
|
+
const request = cacheFileToRequest.get(source);
|
|
217
|
+
const ref = request ?? source;
|
|
218
|
+
if (!isOciTagRef(ref))
|
|
219
|
+
continue;
|
|
220
|
+
if (isPinnedOciRef(ref) || pinnedSources.has(source))
|
|
221
|
+
continue;
|
|
222
|
+
const key = originKey(ref);
|
|
223
|
+
// The same tag reached twice can only differ in whether a copy sat on disk;
|
|
224
|
+
// the cache-served one is what a staleness verdict has to act on.
|
|
225
|
+
if (targets.get(key)?.cacheFile)
|
|
226
|
+
continue;
|
|
227
|
+
targets.set(key, {
|
|
228
|
+
ref,
|
|
229
|
+
...(request ? { cacheFile: fileURLToPath(source) } : {}),
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
if (targets.size === 0)
|
|
233
|
+
return { staleFiles: [], digests: new Map() };
|
|
234
|
+
const transports = defaultTransportRegistry(registryUrl);
|
|
235
|
+
const resolved = await Promise.all([...targets.entries()].map(async ([key, target]) => {
|
|
236
|
+
const already = verified.get(key);
|
|
237
|
+
if (already !== undefined)
|
|
238
|
+
return [key, already];
|
|
239
|
+
const digest = await transports.digest(target.ref);
|
|
240
|
+
if (digest)
|
|
241
|
+
verified.set(key, digest);
|
|
242
|
+
return [key, digest];
|
|
243
|
+
}));
|
|
244
|
+
const staleFiles = [];
|
|
245
|
+
const digests = new Map();
|
|
246
|
+
for (const [key, digest] of resolved) {
|
|
247
|
+
if (digest)
|
|
248
|
+
digests.set(key, digest);
|
|
249
|
+
const target = targets.get(key);
|
|
250
|
+
if (!target?.cacheFile)
|
|
251
|
+
continue;
|
|
252
|
+
// A tag that no longer resolves (`null`) is stale too — dropping the cached
|
|
253
|
+
// copy lets the reload surface the real resolution failure instead of
|
|
254
|
+
// quietly analyzing a version the registry no longer publishes.
|
|
255
|
+
if (digest && recordFor(target.cacheFile).get(key) === digest)
|
|
256
|
+
continue;
|
|
257
|
+
staleFiles.push(target.cacheFile);
|
|
258
|
+
}
|
|
259
|
+
return { staleFiles, digests };
|
|
260
|
+
}
|
|
261
|
+
//# sourceMappingURL=manifest-freshness.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest-freshness.js","sourceRoot":"","sources":["../src/manifest-freshness.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@telorun/cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.63.0",
|
|
4
4
|
"description": "Telo CLI - Command-line interface for the Telo runtime.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"telo",
|
|
@@ -34,12 +34,12 @@
|
|
|
34
34
|
"dist"
|
|
35
35
|
],
|
|
36
36
|
"dependencies": {
|
|
37
|
-
"@telorun/analyzer": "0.
|
|
37
|
+
"@telorun/analyzer": "0.50.0",
|
|
38
38
|
"@telorun/glob": "0.2.0",
|
|
39
|
-
"@telorun/ide-support": "0.
|
|
40
|
-
"@telorun/kernel": "0.
|
|
41
|
-
"@telorun/sdk": "0.
|
|
42
|
-
"@telorun/templating": "0.11.
|
|
39
|
+
"@telorun/ide-support": "0.8.0",
|
|
40
|
+
"@telorun/kernel": "0.63.0",
|
|
41
|
+
"@telorun/sdk": "0.63.0",
|
|
42
|
+
"@telorun/templating": "0.11.1",
|
|
43
43
|
"dotenv": "^17.4.0",
|
|
44
44
|
"packageurl-js": "^2.0.1",
|
|
45
45
|
"semver": "^7.7.3",
|