@listen-fire/engine-contracts 0.12.0-rc.8 → 0.12.1

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.
@@ -1423,6 +1423,9 @@ export declare const WireSignedInboundDeclaration: z.ZodObject<{
1423
1423
  installer: "installer";
1424
1424
  provider: "provider";
1425
1425
  }>>;
1426
+ deliveryId: z.ZodOptional<z.ZodObject<{
1427
+ header: z.ZodString;
1428
+ }, z.core.$strip>>;
1426
1429
  }, z.core.$strip>;
1427
1430
  /**
1428
1431
  * The module checks its own inbound requests (`scheme: module`): the host
@@ -1457,6 +1460,9 @@ export declare const WireInboundDeclaration: z.ZodDiscriminatedUnion<[z.ZodObjec
1457
1460
  installer: "installer";
1458
1461
  provider: "provider";
1459
1462
  }>>;
1463
+ deliveryId: z.ZodOptional<z.ZodObject<{
1464
+ header: z.ZodString;
1465
+ }, z.core.$strip>>;
1460
1466
  }, z.core.$strip>, z.ZodObject<{
1461
1467
  providerKey: z.ZodString;
1462
1468
  scheme: z.ZodLiteral<"module">;
@@ -1551,8 +1557,10 @@ export type WireModuleKindShape = z.infer<typeof WireModuleKind>;
1551
1557
  * (a scanned file is refused, saying the slot is empty). `secrets` is
1552
1558
  * where credentials are kept (`lf`'s default: its secrets file); a secrets
1553
1559
  * module's own settings come from the environment or that file, never
1554
- * from itself. */
1555
- export declare const CORE_SLOTS: readonly ["models", "judge", "store", "files", "limiter", "loopGuard", "browser", "wake", "ocr", "secrets"];
1560
+ * from itself. `movements` answers the project's movement files by name
1561
+ * (`lf`'s default: the movements folder); its module's own settings come
1562
+ * from the same two places. */
1563
+ export declare const CORE_SLOTS: readonly ["models", "judge", "store", "files", "limiter", "loopGuard", "browser", "wake", "ocr", "secrets", "movements"];
1556
1564
  export declare const WireCoreSlot: z.ZodEnum<{
1557
1565
  store: "store";
1558
1566
  models: "models";
@@ -1564,6 +1572,7 @@ export declare const WireCoreSlot: z.ZodEnum<{
1564
1572
  wake: "wake";
1565
1573
  ocr: "ocr";
1566
1574
  secrets: "secrets";
1575
+ movements: "movements";
1567
1576
  }>;
1568
1577
  export type WireCoreSlotShape = z.infer<typeof WireCoreSlot>;
1569
1578
  /** One construction argument the install supplies (an Airtable `base`, a
@@ -1623,6 +1632,7 @@ export declare const WireModuleDeclarations: z.ZodObject<{
1623
1632
  wake: "wake";
1624
1633
  ocr: "ocr";
1625
1634
  secrets: "secrets";
1635
+ movements: "movements";
1626
1636
  }>>;
1627
1637
  settings: z.ZodOptional<z.ZodArray<z.ZodObject<{
1628
1638
  name: z.ZodString;
@@ -1681,6 +1691,9 @@ export declare const WireModuleDeclarations: z.ZodObject<{
1681
1691
  installer: "installer";
1682
1692
  provider: "provider";
1683
1693
  }>>;
1694
+ deliveryId: z.ZodOptional<z.ZodObject<{
1695
+ header: z.ZodString;
1696
+ }, z.core.$strip>>;
1684
1697
  }, z.core.$strip>, z.ZodObject<{
1685
1698
  providerKey: z.ZodString;
1686
1699
  scheme: z.ZodLiteral<"module">;
@@ -1765,6 +1778,7 @@ export declare const WireManifestResult: z.ZodObject<{
1765
1778
  wake: "wake";
1766
1779
  ocr: "ocr";
1767
1780
  secrets: "secrets";
1781
+ movements: "movements";
1768
1782
  }>>;
1769
1783
  settings: z.ZodOptional<z.ZodArray<z.ZodObject<{
1770
1784
  name: z.ZodString;
@@ -1823,6 +1837,9 @@ export declare const WireManifestResult: z.ZodObject<{
1823
1837
  installer: "installer";
1824
1838
  provider: "provider";
1825
1839
  }>>;
1840
+ deliveryId: z.ZodOptional<z.ZodObject<{
1841
+ header: z.ZodString;
1842
+ }, z.core.$strip>>;
1826
1843
  }, z.core.$strip>, z.ZodObject<{
1827
1844
  providerKey: z.ZodString;
1828
1845
  scheme: z.ZodLiteral<"module">;
@@ -2070,6 +2087,7 @@ export declare const WireInboundCheck: z.ZodDiscriminatedUnion<[z.ZodObject<{
2070
2087
  }, z.core.$strip>>;
2071
2088
  wakeKeys: z.ZodOptional<z.ZodArray<z.ZodString>>;
2072
2089
  checkpoint: z.ZodOptional<z.ZodUnknown>;
2090
+ deliveryId: z.ZodOptional<z.ZodString>;
2073
2091
  }, z.core.$strip>, z.ZodObject<{
2074
2092
  outcome: z.ZodLiteral<"refused">;
2075
2093
  status: z.ZodOptional<z.ZodNumber>;
@@ -2098,6 +2116,7 @@ export declare const HostModelRequest: z.ZodObject<{
2098
2116
  schema: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
2099
2117
  toolName: z.ZodOptional<z.ZodString>;
2100
2118
  toolDescription: z.ZodOptional<z.ZodString>;
2119
+ runId: z.ZodOptional<z.ZodString>;
2101
2120
  }, z.core.$strip>;
2102
2121
  export type HostModelRequestShape = z.infer<typeof HostModelRequest>;
2103
2122
  /** The tokens a model call spent: what a run's usage reports, beside its cost. */
@@ -2267,6 +2286,7 @@ export declare const METHODS: {
2267
2286
  wake: "wake";
2268
2287
  ocr: "ocr";
2269
2288
  secrets: "secrets";
2289
+ movements: "movements";
2270
2290
  }>>;
2271
2291
  settings: z.ZodOptional<z.ZodArray<z.ZodObject<{
2272
2292
  name: z.ZodString;
@@ -2325,6 +2345,9 @@ export declare const METHODS: {
2325
2345
  installer: "installer";
2326
2346
  provider: "provider";
2327
2347
  }>>;
2348
+ deliveryId: z.ZodOptional<z.ZodObject<{
2349
+ header: z.ZodString;
2350
+ }, z.core.$strip>>;
2328
2351
  }, z.core.$strip>, z.ZodObject<{
2329
2352
  providerKey: z.ZodString;
2330
2353
  scheme: z.ZodLiteral<"module">;
@@ -3782,6 +3805,7 @@ export declare const METHODS: {
3782
3805
  }, z.core.$strip>>;
3783
3806
  wakeKeys: z.ZodOptional<z.ZodArray<z.ZodString>>;
3784
3807
  checkpoint: z.ZodOptional<z.ZodUnknown>;
3808
+ deliveryId: z.ZodOptional<z.ZodString>;
3785
3809
  }, z.core.$strip>, z.ZodObject<{
3786
3810
  outcome: z.ZodLiteral<"refused">;
3787
3811
  status: z.ZodOptional<z.ZodNumber>;
package/dist/protocol.js CHANGED
@@ -664,6 +664,10 @@ exports.WireSignedInboundDeclaration = zod_1.z.object({
664
664
  .min(1),
665
665
  intercepts: zod_1.z.array(exports.WireInboundIntercept).optional(),
666
666
  secretIssuedBy: WireSecretIssuedBy.optional(),
667
+ /** The header carrying the provider's id for each delivery (GitHub's
668
+ * `x-github-delivery`), read by the host before the module sees the body:
669
+ * a redelivery under an id the host kept before is acked and runs nothing. */
670
+ deliveryId: zod_1.z.object({ header: zod_1.z.string().regex(HEADER_NAME, 'a delivery id header is a lower-case header name') }).optional(),
667
671
  });
668
672
  /**
669
673
  * The module checks its own inbound requests (`scheme: module`): the host
@@ -741,8 +745,10 @@ exports.WireModuleKind = zod_1.z.enum(exports.MODULE_KINDS);
741
745
  * (a scanned file is refused, saying the slot is empty). `secrets` is
742
746
  * where credentials are kept (`lf`'s default: its secrets file); a secrets
743
747
  * module's own settings come from the environment or that file, never
744
- * from itself. */
745
- exports.CORE_SLOTS = ['models', 'judge', 'store', 'files', 'limiter', 'loopGuard', 'browser', 'wake', 'ocr', 'secrets'];
748
+ * from itself. `movements` answers the project's movement files by name
749
+ * (`lf`'s default: the movements folder); its module's own settings come
750
+ * from the same two places. */
751
+ exports.CORE_SLOTS = ['models', 'judge', 'store', 'files', 'limiter', 'loopGuard', 'browser', 'wake', 'ocr', 'secrets', 'movements'];
746
752
  exports.WireCoreSlot = zod_1.z.enum(exports.CORE_SLOTS);
747
753
  /** One construction argument the install supplies (an Airtable `base`, a
748
754
  * Sheets `spreadsheet`): asked for when the module is set up (`lf connect`,
@@ -929,6 +935,9 @@ exports.WireInboundCheck = zod_1.z.discriminatedUnion('outcome', [
929
935
  events: zod_1.z.array(exports.WireDiscriminableEvent),
930
936
  wakeKeys: zod_1.z.array(zod_1.z.string().min(1)).optional(),
931
937
  checkpoint: zod_1.z.unknown().optional(),
938
+ /** The provider's id for this delivery: a redelivery under an id the
939
+ * host kept before is acked and runs nothing. */
940
+ deliveryId: zod_1.z.string().min(1).optional(),
932
941
  }),
933
942
  zod_1.z.object({
934
943
  outcome: zod_1.z.literal('refused'),
@@ -956,6 +965,8 @@ exports.HostModelRequest = zod_1.z.object({
956
965
  schema: zod_1.z.record(zod_1.z.string(), zod_1.z.unknown()).optional(),
957
966
  toolName: zod_1.z.string().optional(),
958
967
  toolDescription: zod_1.z.string().optional(),
968
+ /** The run the call is made for, when it is made inside one: a host's usage rows attribute the call to it. */
969
+ runId: zod_1.z.string().optional(),
959
970
  });
960
971
  /** The tokens a model call spent: what a run's usage reports, beside its cost. */
961
972
  exports.WireModelUsage = zod_1.z.object({
@@ -6,3 +6,4 @@ export * from './browser';
6
6
  export * from './wake';
7
7
  export * from './ocr';
8
8
  export * from './secrets';
9
+ export * from './movements';
@@ -25,3 +25,4 @@ __exportStar(require("./browser"), exports);
25
25
  __exportStar(require("./wake"), exports);
26
26
  __exportStar(require("./ocr"), exports);
27
27
  __exportStar(require("./secrets"), exports);
28
+ __exportStar(require("./movements"), exports);
@@ -10,6 +10,7 @@ export declare const ModelsCallRequest: z.ZodObject<{
10
10
  schema: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
11
11
  toolName: z.ZodOptional<z.ZodString>;
12
12
  toolDescription: z.ZodOptional<z.ZodString>;
13
+ runId: z.ZodOptional<z.ZodString>;
13
14
  effort: z.ZodOptional<z.ZodEnum<{
14
15
  low: "low";
15
16
  medium: "medium";
@@ -0,0 +1,41 @@
1
+ import { z } from 'zod';
2
+ export declare const MOVEMENTS_METHODS: readonly ["movements.list", "movements.read", "movements.write"];
3
+ /** A file's path under the movements folder: `/`-separated, ending `.mvt`,
4
+ * no segment empty, `.` or `..`, and no `\` (`orders/sync.mvt`). */
5
+ export declare const MovementPath: z.ZodString;
6
+ export declare function isMovementPath(path: string): boolean;
7
+ /** One file `movements.list` names; without a version, `lf` reads it on every scan. */
8
+ export declare const MovementsListed: z.ZodObject<{
9
+ path: z.ZodString;
10
+ version: z.ZodOptional<z.ZodString>;
11
+ }, z.core.$strip>;
12
+ export declare const MovementsListAnswer: z.ZodArray<z.ZodObject<{
13
+ path: z.ZodString;
14
+ version: z.ZodOptional<z.ZodString>;
15
+ }, z.core.$strip>>;
16
+ /** What `movements.read` answers (or null: nothing is at the path). */
17
+ export declare const MovementsReadAnswer: z.ZodNullable<z.ZodObject<{
18
+ text: z.ZodString;
19
+ version: z.ZodString;
20
+ }, z.core.$strip>>;
21
+ export declare const MovementsReadRequest: z.ZodObject<{
22
+ path: z.ZodString;
23
+ }, z.core.$strip>;
24
+ /** `expectedVersion` is present: a version replaces the file only if it is
25
+ * still at it; null creates it only if nothing is at the path. */
26
+ export declare const MovementsWriteRequest: z.ZodObject<{
27
+ path: z.ZodString;
28
+ text: z.ZodString;
29
+ expectedVersion: z.ZodNullable<z.ZodString>;
30
+ }, z.core.$strip>;
31
+ export declare const MovementsWriteAnswer: z.ZodDiscriminatedUnion<[z.ZodObject<{
32
+ kind: z.ZodLiteral<"written">;
33
+ version: z.ZodString;
34
+ }, z.core.$strip>, z.ZodObject<{
35
+ kind: z.ZodLiteral<"conflict">;
36
+ current: z.ZodNullable<z.ZodString>;
37
+ }, z.core.$strip>, z.ZodObject<{
38
+ kind: z.ZodLiteral<"read_only">;
39
+ reason: z.ZodString;
40
+ }, z.core.$strip>], "kind">;
41
+ export type MovementsWriteAnswerShape = z.infer<typeof MovementsWriteAnswer>;
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ // The movements slot's methods (docs/contracts/movements-slot.md): where the
3
+ // project's movement files live. A module lists every file by its path under
4
+ // the movements folder, reads one, and writes one by compare-and-swap on its
5
+ // version. `lf.yaml` and the externals folder stay local files.
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.MovementsWriteAnswer = exports.MovementsWriteRequest = exports.MovementsReadRequest = exports.MovementsReadAnswer = exports.MovementsListAnswer = exports.MovementsListed = exports.MovementPath = exports.MOVEMENTS_METHODS = void 0;
8
+ exports.isMovementPath = isMovementPath;
9
+ const zod_1 = require("zod");
10
+ exports.MOVEMENTS_METHODS = ['movements.list', 'movements.read', 'movements.write'];
11
+ /** A file's path under the movements folder: `/`-separated, ending `.mvt`,
12
+ * no segment empty, `.` or `..`, and no `\` (`orders/sync.mvt`). */
13
+ exports.MovementPath = zod_1.z.string().refine(isMovementPath, 'a movement path: relative to the movements folder, `/`-separated, ending .mvt');
14
+ function isMovementPath(path) {
15
+ const segments = path.split('/');
16
+ return (!path.includes('\\') &&
17
+ path.endsWith('.mvt') &&
18
+ segments.every((segment) => segment !== '' && segment !== '.' && segment !== '..') &&
19
+ segments.at(-1) !== '.mvt');
20
+ }
21
+ /** Opaque; it changes whenever the text changes. */
22
+ const Version = zod_1.z.string().min(1);
23
+ /** One file `movements.list` names; without a version, `lf` reads it on every scan. */
24
+ exports.MovementsListed = zod_1.z.object({ path: exports.MovementPath, version: Version.optional() });
25
+ exports.MovementsListAnswer = zod_1.z.array(exports.MovementsListed);
26
+ /** What `movements.read` answers (or null: nothing is at the path). */
27
+ exports.MovementsReadAnswer = zod_1.z.object({ text: zod_1.z.string(), version: Version }).nullable();
28
+ exports.MovementsReadRequest = zod_1.z.object({ path: exports.MovementPath });
29
+ /** `expectedVersion` is present: a version replaces the file only if it is
30
+ * still at it; null creates it only if nothing is at the path. */
31
+ exports.MovementsWriteRequest = zod_1.z.object({ path: exports.MovementPath, text: zod_1.z.string(), expectedVersion: Version.nullable() });
32
+ exports.MovementsWriteAnswer = zod_1.z.discriminatedUnion('kind', [
33
+ zod_1.z.object({ kind: zod_1.z.literal('written'), version: Version }),
34
+ /** `current`: the version there now, or null when there is none. */
35
+ zod_1.z.object({ kind: zod_1.z.literal('conflict'), current: Version.nullable() }),
36
+ /** The module keeps the project's movements where `lf` cannot change them. */
37
+ zod_1.z.object({ kind: zod_1.z.literal('read_only'), reason: zod_1.z.string().min(1) }),
38
+ ]);
@@ -40,6 +40,7 @@ export declare const WireSlotManifest: z.ZodObject<{
40
40
  wake: "wake";
41
41
  ocr: "ocr";
42
42
  secrets: "secrets";
43
+ movements: "movements";
43
44
  }>;
44
45
  methods: z.ZodArray<z.ZodString>;
45
46
  }, z.core.$strip>;
@@ -1,5 +1,6 @@
1
- import { CATALOG_SNAPSHOT_VERSION, DEPRECATED_CATALOG_SNAPSHOT_VERSIONS, SUPPORTED_CATALOG_SNAPSHOT_VERSIONS } from '@listen-fire/movement-lang';
1
+ import { CATALOG_SNAPSHOT_VERSION, DEPRECATED_CATALOG_SNAPSHOT_VERSIONS, STORY_ANALYSIS_VERSION, SUPPORTED_CATALOG_SNAPSHOT_VERSIONS, SUPPORTED_STORY_ANALYSIS_VERSIONS } from '@listen-fire/movement-lang';
2
2
  export { CATALOG_SNAPSHOT_VERSION, DEPRECATED_CATALOG_SNAPSHOT_VERSIONS, SUPPORTED_CATALOG_SNAPSHOT_VERSIONS };
3
+ export { STORY_ANALYSIS_VERSION, SUPPORTED_STORY_ANALYSIS_VERSIONS };
3
4
  /** A parked flow's state (docs/contracts/park-state.md). Engine to engine: a
4
5
  * host stores it and hands it back. Version 2 is the Rust engine's; the earlier
5
6
  * TypeScript engine wrote and read 1. */
@@ -47,6 +48,11 @@ export declare const CONTRACTS: {
47
48
  readonly supported: readonly [1];
48
49
  readonly deprecated: readonly [];
49
50
  };
51
+ readonly 'story-analysis': {
52
+ readonly current: 1;
53
+ readonly supported: readonly number[];
54
+ readonly deprecated: readonly [];
55
+ };
50
56
  };
51
57
  /** The language's contract (docs/contracts/language-versions.md) is not an
52
58
  * integer of its own: it is the release's version, and a release reads the
package/dist/versions.js CHANGED
@@ -8,13 +8,15 @@
8
8
  // the version at the point of difference, never by a forked reader. A version
9
9
  // this release does not support is refused at the boundary, loudly.
10
10
  Object.defineProperty(exports, "__esModule", { value: true });
11
- exports.LANGUAGE_CONTRACT = exports.CONTRACTS = exports.SYSTEM_CALLER_VERSION = exports.SUPPORTED_HOST_FAMILIES_VERSIONS = exports.HOST_FAMILIES_VERSION = exports.SUPPORTED_PARK_STATE_VERSIONS = exports.PARK_STATE_VERSION = exports.SUPPORTED_CATALOG_SNAPSHOT_VERSIONS = exports.DEPRECATED_CATALOG_SNAPSHOT_VERSIONS = exports.CATALOG_SNAPSHOT_VERSION = void 0;
11
+ exports.LANGUAGE_CONTRACT = exports.CONTRACTS = exports.SYSTEM_CALLER_VERSION = exports.SUPPORTED_HOST_FAMILIES_VERSIONS = exports.HOST_FAMILIES_VERSION = exports.SUPPORTED_PARK_STATE_VERSIONS = exports.PARK_STATE_VERSION = exports.SUPPORTED_STORY_ANALYSIS_VERSIONS = exports.STORY_ANALYSIS_VERSION = exports.SUPPORTED_CATALOG_SNAPSHOT_VERSIONS = exports.DEPRECATED_CATALOG_SNAPSHOT_VERSIONS = exports.CATALOG_SNAPSHOT_VERSION = void 0;
12
12
  exports.refuseUnsupportedHostFamiliesVersion = refuseUnsupportedHostFamiliesVersion;
13
13
  exports.refuseUnsupportedParkStateVersion = refuseUnsupportedParkStateVersion;
14
14
  const movement_lang_1 = require("@listen-fire/movement-lang");
15
15
  Object.defineProperty(exports, "CATALOG_SNAPSHOT_VERSION", { enumerable: true, get: function () { return movement_lang_1.CATALOG_SNAPSHOT_VERSION; } });
16
16
  Object.defineProperty(exports, "DEPRECATED_CATALOG_SNAPSHOT_VERSIONS", { enumerable: true, get: function () { return movement_lang_1.DEPRECATED_CATALOG_SNAPSHOT_VERSIONS; } });
17
+ Object.defineProperty(exports, "STORY_ANALYSIS_VERSION", { enumerable: true, get: function () { return movement_lang_1.STORY_ANALYSIS_VERSION; } });
17
18
  Object.defineProperty(exports, "SUPPORTED_CATALOG_SNAPSHOT_VERSIONS", { enumerable: true, get: function () { return movement_lang_1.SUPPORTED_CATALOG_SNAPSHOT_VERSIONS; } });
19
+ Object.defineProperty(exports, "SUPPORTED_STORY_ANALYSIS_VERSIONS", { enumerable: true, get: function () { return movement_lang_1.SUPPORTED_STORY_ANALYSIS_VERSIONS; } });
18
20
  const protocol_1 = require("./protocol");
19
21
  /** A parked flow's state (docs/contracts/park-state.md). Engine to engine: a
20
22
  * host stores it and hands it back. Version 2 is the Rust engine's; the earlier
@@ -46,6 +48,8 @@ exports.CONTRACTS = {
46
48
  },
47
49
  'adapter-protocol': { current: protocol_1.MANIFEST_PROTOCOL_VERSION, supported: [protocol_1.MANIFEST_PROTOCOL_VERSION], deprecated: [] },
48
50
  'system-caller': { current: exports.SYSTEM_CALLER_VERSION, supported: [exports.SYSTEM_CALLER_VERSION], deprecated: [] },
51
+ // The shape of what the check settled, for a surface that draws a movement's story (docs/contracts/story-analysis.md).
52
+ 'story-analysis': { current: movement_lang_1.STORY_ANALYSIS_VERSION, supported: [...movement_lang_1.SUPPORTED_STORY_ANALYSIS_VERSIONS], deprecated: [] },
49
53
  };
50
54
  /** The language's contract (docs/contracts/language-versions.md) is not an
51
55
  * integer of its own: it is the release's version, and a release reads the
package/package.json CHANGED
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "name": "@listen-fire/engine-contracts",
3
3
  "license": "Apache-2.0",
4
- "version": "0.12.0-rc.8",
4
+ "version": "0.12.1",
5
5
  "description": "The contracts the movement engine speaks: the tenant id, the host families and entry-point inputs, the parked state, file descriptors, the adapter protocol, the adapter contract and its manifest, the catalog's schema types and positions, the Expression vocabulary, plugins as data and the model names. Runtime-neutral: no Node import, no ambient types.",
6
6
  "engines": {
7
- "node": "22.20.0"
7
+ "node": ">=22.23.4 <23"
8
8
  },
9
9
  "main": "./dist/index.js",
10
10
  "types": "./dist/index.d.ts",
@@ -30,7 +30,7 @@
30
30
  "type": "commonjs",
31
31
  "dependencies": {
32
32
  "zod": "4.1.12",
33
- "@listen-fire/movement-lang": "^0.12.0-rc.8"
33
+ "@listen-fire/movement-lang": "^0.12.1"
34
34
  },
35
35
  "devDependencies": {
36
36
  "@types/node": "20.16.5",
@@ -45,8 +45,7 @@
45
45
  "dist"
46
46
  ],
47
47
  "publishConfig": {
48
- "access": "public",
49
- "tag": "next"
48
+ "access": "public"
50
49
  },
51
50
  "scripts": {
52
51
  "code:type-check": "tsc --pretty --noEmit && node __embed_smoke__/check.cjs",