@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.
Files changed (35) hide show
  1. package/README.md +19 -4
  2. package/dist/bundle/partition-layers.d.ts +4 -2
  3. package/dist/bundle/partition-layers.d.ts.map +1 -1
  4. package/dist/bundle/partition-layers.js +13 -14
  5. package/dist/bundle/partition-layers.js.map +1 -1
  6. package/dist/bundle/payload-drift.d.ts +46 -0
  7. package/dist/bundle/payload-drift.d.ts.map +1 -0
  8. package/dist/bundle/payload-drift.js +109 -0
  9. package/dist/bundle/payload-drift.js.map +1 -0
  10. package/dist/bundle/select-files.d.ts +13 -0
  11. package/dist/bundle/select-files.d.ts.map +1 -1
  12. package/dist/bundle/select-files.js +27 -4
  13. package/dist/bundle/select-files.js.map +1 -1
  14. package/dist/commands/check.d.ts +1 -0
  15. package/dist/commands/check.d.ts.map +1 -1
  16. package/dist/commands/check.js +136 -10
  17. package/dist/commands/check.js.map +1 -1
  18. package/dist/commands/manifest-imports.d.ts.map +1 -1
  19. package/dist/commands/manifest-imports.js +2 -2
  20. package/dist/commands/manifest-imports.js.map +1 -1
  21. package/dist/commands/publish.d.ts.map +1 -1
  22. package/dist/commands/publish.js +51 -7
  23. package/dist/commands/publish.js.map +1 -1
  24. package/dist/commands/run.d.ts.map +1 -1
  25. package/dist/commands/run.js +149 -30
  26. package/dist/commands/run.js.map +1 -1
  27. package/dist/logger.d.ts +5 -1
  28. package/dist/logger.d.ts.map +1 -1
  29. package/dist/logger.js +55 -26
  30. package/dist/logger.js.map +1 -1
  31. package/dist/manifest-freshness.d.ts +120 -0
  32. package/dist/manifest-freshness.d.ts.map +1 -0
  33. package/dist/manifest-freshness.js +261 -0
  34. package/dist/manifest-freshness.js.map +1 -0
  35. 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":"AAAA,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAyC,MAAM,mBAAmB,CAAC;AAEjG,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,KAAK,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEnD,qEAAqE;AACrE,MAAM,YAAY,GAAG,eAAe,CAAC;AACrC,MAAM,eAAe,GAAG,CAAC,CAAC;AAQ1B;;;;;;;;GAQG;AACH,MAAM,UAAU,WAAW,CAAC,GAAW;IACrC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IACjC,IAAI,CAAC;QACH,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IACnD,CAAC;IAAC,MAAM,CAAC;QACP,2EAA2E;QAC3E,2DAA2D;QAC3D,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;;;;4DAM4D;AAC5D,MAAM,UAAU,cAAc,CAAC,GAAW;IACxC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IACjC,IAAI,CAAC;QACH,OAAO,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC;IAC7C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;uDACuD;AACvD,MAAM,UAAU,SAAS,CAAC,GAAW;IACnC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;IACnD,OAAO,GAAG,IAAI,IAAI,IAAI,IAAI,SAAS,EAAE,CAAC;AACxC,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,UAAU,mBAAmB,CAAC,GAAW,EAAE,WAAmB;IAClE,OAAO,wBAAwB,CAAC,WAAW,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,SAAS,KAAK,KAAK,CAAC;AACrF,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,OAAO,oBAAoB;IAKZ;IACA;IALnB,sEAAsE;IAC7D,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IAE5C,YACmB,KAA+B,EAC/B,WAAmB;QADnB,UAAK,GAAL,KAAK,CAA0B;QAC/B,gBAAW,GAAX,WAAW,CAAQ;IACnC,CAAC;IAEJ,QAAQ,CAAC,GAAW;QAClB,OAAO,mBAAmB,CAAC,GAAG,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IAChF,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,GAAW;QACpB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC1C,yEAAyE;QACzE,2EAA2E;QAC3E,IAAI,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YACxC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;QACrD,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,eAAe,CAAC,IAAY,EAAE,QAAgB;QAC5C,OAAO,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACpD,CAAC;CACF;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,YAAoB;IAC1D,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACH,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,YAAY,CAAC,EAAE,OAAO,CAAC,CAAC;IAC1E,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,GAAG,EAAE,CAAC;IACnB,CAAC;IACD,IAAI,MAAqB,CAAC;IAC1B,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAkB,CAAC;IAC5C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,GAAG,EAAE,CAAC;IACnB,CAAC;IACD,IAAI,MAAM,EAAE,OAAO,KAAK,eAAe,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;QAC9E,OAAO,IAAI,GAAG,EAAE,CAAC;IACnB,CAAC;IACD,OAAO,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;AACjD,CAAC;AAED;gDACgD;AAChD,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,YAAoB,EACpB,OAA4B;IAE5B,IAAI,OAAO,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO;IAC/B,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,iBAAiB,CAAC,YAAY,CAAC,CAAC,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC;IACjF,MAAM,MAAM,GAAkB;QAC5B,OAAO,EAAE,eAAe;QACxB,OAAO,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KAC1F,CAAC;IACF,MAAM,EAAE,CAAC,KAAK,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAClD,MAAM,EAAE,CAAC,SAAS,CAChB,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,YAAY,CAAC,EACrC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EACtC,OAAO,CACR,CAAC;AACJ,CAAC;AAUD;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,KAAkB,EAClB,MAA2B;AAC3B;;;uEAGuE;AACvE,aAA+C,EAC/C,WAAmB;AACnB;;;qEAGqE;AACrE,WAAgC,IAAI,GAAG,EAAE;IAEzC,MAAM,SAAS,GAAG,CAAC,SAAiB,EAAuB,EAAE;QAC3D,IAAI,IAAwB,CAAC;QAC7B,KAAK,MAAM,IAAI,IAAI,aAAa,CAAC,IAAI,EAAE,EAAE,CAAC;YACxC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC;gBAAE,SAAS;YACrD,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM;gBAAE,IAAI,GAAG,IAAI,CAAC;QACtD,CAAC;QACD,OAAO,CAAC,IAAI,IAAI,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,GAAG,EAAE,CAAC;IACxD,CAAC,CAAC;IAEF,6EAA6E;IAC7E,8EAA8E;IAC9E,+EAA+E;IAC/E,6EAA6E;IAC7E,MAAM,aAAa,GAAG,IAAI,GAAG,EAAU,CAAC;IACxC,KAAK,MAAM,CAAC,EAAE,KAAK,CAAC,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;QAC1C,KAAK,MAAM,CAAC,EAAE,IAAI,CAAC,IAAI,KAAK,EAAE,CAAC;YAC7B,IAAI,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC;gBAAE,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC3E,CAAC;IACH,CAAC;IAED,2EAA2E;IAC3E,4DAA4D;IAC5D,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAAkB,CAAC;IACrD,KAAK,MAAM,CAAC,GAAG,EAAE,SAAS,CAAC,IAAI,MAAM,EAAE,CAAC;QACtC,kBAAkB,CAAC,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAC7D,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,GAAG,EAA+C,CAAC;IACvE,8EAA8E;IAC9E,6CAA6C;IAC7C,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;QAC1C,MAAM,OAAO,GAAG,kBAAkB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC/C,MAAM,GAAG,GAAG,OAAO,IAAI,MAAM,CAAC;QAC9B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC;YAAE,SAAS;QAChC,IAAI,cAAc,CAAC,GAAG,CAAC,IAAI,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC;YAAE,SAAS;QAC/D,MAAM,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;QAC3B,4EAA4E;QAC5E,kEAAkE;QAClE,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,SAAS;YAAE,SAAS;QAC1C,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE;YACf,GAAG;YACH,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACzD,CAAC,CAAC;IACL,CAAC;IAED,IAAI,OAAO,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC;IAEtE,MAAM,UAAU,GAAG,wBAAwB,CAAC,WAAW,CAAC,CAAC;IACzD,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,CAChC,CAAC,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,EAAE;QACjD,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,OAAO,KAAK,SAAS;YAAE,OAAO,CAAC,GAAG,EAAE,OAAO,CAAU,CAAC;QAC1D,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACnD,IAAI,MAAM;YAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACtC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAU,CAAC;IAChC,CAAC,CAAC,CACH,CAAC;IAEF,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC1C,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACrC,IAAI,MAAM;YAAE,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACrC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,CAAC,MAAM,EAAE,SAAS;YAAE,SAAS;QACjC,4EAA4E;QAC5E,sEAAsE;QACtE,gEAAgE;QAChE,IAAI,MAAM,IAAI,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,MAAM;YAAE,SAAS;QACxE,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACpC,CAAC;IAED,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC;AACjC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@telorun/cli",
3
- "version": "0.61.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.49.0",
37
+ "@telorun/analyzer": "0.50.0",
38
38
  "@telorun/glob": "0.2.0",
39
- "@telorun/ide-support": "0.7.9",
40
- "@telorun/kernel": "0.61.0",
41
- "@telorun/sdk": "0.61.0",
42
- "@telorun/templating": "0.11.0",
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",