@listen-fire/engine-contracts 0.12.0-rc.7 → 0.12.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/protocol.d.ts +33 -2
- package/dist/protocol.js +16 -2
- package/dist/slots/index.d.ts +2 -0
- package/dist/slots/index.js +2 -0
- package/dist/slots/models.d.ts +1 -0
- package/dist/slots/movements.d.ts +41 -0
- package/dist/slots/movements.js +38 -0
- package/dist/slots/secrets.d.ts +65 -0
- package/dist/slots/secrets.js +40 -0
- package/dist/slots/wire.d.ts +2 -0
- package/dist/versions.d.ts +7 -1
- package/dist/versions.js +5 -1
- package/package.json +4 -5
package/dist/protocol.d.ts
CHANGED
|
@@ -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">;
|
|
@@ -1548,8 +1554,13 @@ export type WireModuleKindShape = z.infer<typeof WireModuleKind>;
|
|
|
1548
1554
|
* other host leaves empty (a module asking for a page is refused by name),
|
|
1549
1555
|
* and `wake`, which stays empty unless named (nobody is told work is due;
|
|
1550
1556
|
* a scheduled worker finds it), and `ocr`, which stays empty unless named
|
|
1551
|
-
* (a scanned file is refused, saying the slot is empty).
|
|
1552
|
-
|
|
1557
|
+
* (a scanned file is refused, saying the slot is empty). `secrets` is
|
|
1558
|
+
* where credentials are kept (`lf`'s default: its secrets file); a secrets
|
|
1559
|
+
* module's own settings come from the environment or that file, never
|
|
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"];
|
|
1553
1564
|
export declare const WireCoreSlot: z.ZodEnum<{
|
|
1554
1565
|
store: "store";
|
|
1555
1566
|
models: "models";
|
|
@@ -1560,6 +1571,8 @@ export declare const WireCoreSlot: z.ZodEnum<{
|
|
|
1560
1571
|
browser: "browser";
|
|
1561
1572
|
wake: "wake";
|
|
1562
1573
|
ocr: "ocr";
|
|
1574
|
+
secrets: "secrets";
|
|
1575
|
+
movements: "movements";
|
|
1563
1576
|
}>;
|
|
1564
1577
|
export type WireCoreSlotShape = z.infer<typeof WireCoreSlot>;
|
|
1565
1578
|
/** One construction argument the install supplies (an Airtable `base`, a
|
|
@@ -1618,6 +1631,8 @@ export declare const WireModuleDeclarations: z.ZodObject<{
|
|
|
1618
1631
|
browser: "browser";
|
|
1619
1632
|
wake: "wake";
|
|
1620
1633
|
ocr: "ocr";
|
|
1634
|
+
secrets: "secrets";
|
|
1635
|
+
movements: "movements";
|
|
1621
1636
|
}>>;
|
|
1622
1637
|
settings: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
1623
1638
|
name: z.ZodString;
|
|
@@ -1676,6 +1691,9 @@ export declare const WireModuleDeclarations: z.ZodObject<{
|
|
|
1676
1691
|
installer: "installer";
|
|
1677
1692
|
provider: "provider";
|
|
1678
1693
|
}>>;
|
|
1694
|
+
deliveryId: z.ZodOptional<z.ZodObject<{
|
|
1695
|
+
header: z.ZodString;
|
|
1696
|
+
}, z.core.$strip>>;
|
|
1679
1697
|
}, z.core.$strip>, z.ZodObject<{
|
|
1680
1698
|
providerKey: z.ZodString;
|
|
1681
1699
|
scheme: z.ZodLiteral<"module">;
|
|
@@ -1759,6 +1777,8 @@ export declare const WireManifestResult: z.ZodObject<{
|
|
|
1759
1777
|
browser: "browser";
|
|
1760
1778
|
wake: "wake";
|
|
1761
1779
|
ocr: "ocr";
|
|
1780
|
+
secrets: "secrets";
|
|
1781
|
+
movements: "movements";
|
|
1762
1782
|
}>>;
|
|
1763
1783
|
settings: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
1764
1784
|
name: z.ZodString;
|
|
@@ -1817,6 +1837,9 @@ export declare const WireManifestResult: z.ZodObject<{
|
|
|
1817
1837
|
installer: "installer";
|
|
1818
1838
|
provider: "provider";
|
|
1819
1839
|
}>>;
|
|
1840
|
+
deliveryId: z.ZodOptional<z.ZodObject<{
|
|
1841
|
+
header: z.ZodString;
|
|
1842
|
+
}, z.core.$strip>>;
|
|
1820
1843
|
}, z.core.$strip>, z.ZodObject<{
|
|
1821
1844
|
providerKey: z.ZodString;
|
|
1822
1845
|
scheme: z.ZodLiteral<"module">;
|
|
@@ -2064,6 +2087,7 @@ export declare const WireInboundCheck: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
|
2064
2087
|
}, z.core.$strip>>;
|
|
2065
2088
|
wakeKeys: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
2066
2089
|
checkpoint: z.ZodOptional<z.ZodUnknown>;
|
|
2090
|
+
deliveryId: z.ZodOptional<z.ZodString>;
|
|
2067
2091
|
}, z.core.$strip>, z.ZodObject<{
|
|
2068
2092
|
outcome: z.ZodLiteral<"refused">;
|
|
2069
2093
|
status: z.ZodOptional<z.ZodNumber>;
|
|
@@ -2092,6 +2116,7 @@ export declare const HostModelRequest: z.ZodObject<{
|
|
|
2092
2116
|
schema: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
2093
2117
|
toolName: z.ZodOptional<z.ZodString>;
|
|
2094
2118
|
toolDescription: z.ZodOptional<z.ZodString>;
|
|
2119
|
+
runId: z.ZodOptional<z.ZodString>;
|
|
2095
2120
|
}, z.core.$strip>;
|
|
2096
2121
|
export type HostModelRequestShape = z.infer<typeof HostModelRequest>;
|
|
2097
2122
|
/** The tokens a model call spent: what a run's usage reports, beside its cost. */
|
|
@@ -2260,6 +2285,8 @@ export declare const METHODS: {
|
|
|
2260
2285
|
browser: "browser";
|
|
2261
2286
|
wake: "wake";
|
|
2262
2287
|
ocr: "ocr";
|
|
2288
|
+
secrets: "secrets";
|
|
2289
|
+
movements: "movements";
|
|
2263
2290
|
}>>;
|
|
2264
2291
|
settings: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
2265
2292
|
name: z.ZodString;
|
|
@@ -2318,6 +2345,9 @@ export declare const METHODS: {
|
|
|
2318
2345
|
installer: "installer";
|
|
2319
2346
|
provider: "provider";
|
|
2320
2347
|
}>>;
|
|
2348
|
+
deliveryId: z.ZodOptional<z.ZodObject<{
|
|
2349
|
+
header: z.ZodString;
|
|
2350
|
+
}, z.core.$strip>>;
|
|
2321
2351
|
}, z.core.$strip>, z.ZodObject<{
|
|
2322
2352
|
providerKey: z.ZodString;
|
|
2323
2353
|
scheme: z.ZodLiteral<"module">;
|
|
@@ -3775,6 +3805,7 @@ export declare const METHODS: {
|
|
|
3775
3805
|
}, z.core.$strip>>;
|
|
3776
3806
|
wakeKeys: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
3777
3807
|
checkpoint: z.ZodOptional<z.ZodUnknown>;
|
|
3808
|
+
deliveryId: z.ZodOptional<z.ZodString>;
|
|
3778
3809
|
}, z.core.$strip>, z.ZodObject<{
|
|
3779
3810
|
outcome: z.ZodLiteral<"refused">;
|
|
3780
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
|
|
@@ -738,8 +742,13 @@ exports.WireModuleKind = zod_1.z.enum(exports.MODULE_KINDS);
|
|
|
738
742
|
* other host leaves empty (a module asking for a page is refused by name),
|
|
739
743
|
* and `wake`, which stays empty unless named (nobody is told work is due;
|
|
740
744
|
* a scheduled worker finds it), and `ocr`, which stays empty unless named
|
|
741
|
-
* (a scanned file is refused, saying the slot is empty).
|
|
742
|
-
|
|
745
|
+
* (a scanned file is refused, saying the slot is empty). `secrets` is
|
|
746
|
+
* where credentials are kept (`lf`'s default: its secrets file); a secrets
|
|
747
|
+
* module's own settings come from the environment or that file, never
|
|
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'];
|
|
743
752
|
exports.WireCoreSlot = zod_1.z.enum(exports.CORE_SLOTS);
|
|
744
753
|
/** One construction argument the install supplies (an Airtable `base`, a
|
|
745
754
|
* Sheets `spreadsheet`): asked for when the module is set up (`lf connect`,
|
|
@@ -926,6 +935,9 @@ exports.WireInboundCheck = zod_1.z.discriminatedUnion('outcome', [
|
|
|
926
935
|
events: zod_1.z.array(exports.WireDiscriminableEvent),
|
|
927
936
|
wakeKeys: zod_1.z.array(zod_1.z.string().min(1)).optional(),
|
|
928
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(),
|
|
929
941
|
}),
|
|
930
942
|
zod_1.z.object({
|
|
931
943
|
outcome: zod_1.z.literal('refused'),
|
|
@@ -953,6 +965,8 @@ exports.HostModelRequest = zod_1.z.object({
|
|
|
953
965
|
schema: zod_1.z.record(zod_1.z.string(), zod_1.z.unknown()).optional(),
|
|
954
966
|
toolName: zod_1.z.string().optional(),
|
|
955
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(),
|
|
956
970
|
});
|
|
957
971
|
/** The tokens a model call spent: what a run's usage reports, beside its cost. */
|
|
958
972
|
exports.WireModelUsage = zod_1.z.object({
|
package/dist/slots/index.d.ts
CHANGED
package/dist/slots/index.js
CHANGED
|
@@ -24,3 +24,5 @@ __exportStar(require("./files"), exports);
|
|
|
24
24
|
__exportStar(require("./browser"), exports);
|
|
25
25
|
__exportStar(require("./wake"), exports);
|
|
26
26
|
__exportStar(require("./ocr"), exports);
|
|
27
|
+
__exportStar(require("./secrets"), exports);
|
|
28
|
+
__exportStar(require("./movements"), exports);
|
package/dist/slots/models.d.ts
CHANGED
|
@@ -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
|
+
]);
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const SECRETS_METHODS: readonly ["secrets.resolve", "secrets.writeBack", "secrets.list", "secrets.lock", "secrets.unlock", "secrets.assertWritable", "secrets.create", "secrets.replace", "secrets.delete"];
|
|
3
|
+
/** What `secrets.resolve` answers (or null: nothing is stored under the ref). */
|
|
4
|
+
export declare const SecretsRecord: z.ZodObject<{
|
|
5
|
+
fields: z.ZodRecord<z.ZodString, z.ZodString>;
|
|
6
|
+
version: z.ZodString;
|
|
7
|
+
}, z.core.$strip>;
|
|
8
|
+
export declare const SecretsWriteBackAnswer: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
9
|
+
kind: z.ZodLiteral<"written">;
|
|
10
|
+
record: z.ZodObject<{
|
|
11
|
+
fields: z.ZodRecord<z.ZodString, z.ZodString>;
|
|
12
|
+
version: z.ZodString;
|
|
13
|
+
}, z.core.$strip>;
|
|
14
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
15
|
+
kind: z.ZodLiteral<"not_persisted">;
|
|
16
|
+
record: z.ZodObject<{
|
|
17
|
+
fields: z.ZodRecord<z.ZodString, z.ZodString>;
|
|
18
|
+
version: z.ZodString;
|
|
19
|
+
}, z.core.$strip>;
|
|
20
|
+
why: z.ZodString;
|
|
21
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
22
|
+
kind: z.ZodLiteral<"conflict">;
|
|
23
|
+
current: z.ZodObject<{
|
|
24
|
+
fields: z.ZodRecord<z.ZodString, z.ZodString>;
|
|
25
|
+
version: z.ZodString;
|
|
26
|
+
}, z.core.$strip>;
|
|
27
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
28
|
+
kind: z.ZodLiteral<"missing">;
|
|
29
|
+
}, z.core.$strip>], "kind">;
|
|
30
|
+
/** How an entry is bound: an install of a module, a hand-written legacy
|
|
31
|
+
* entry, or a credential the module declares. */
|
|
32
|
+
export declare const SecretsBinding: z.ZodUnion<readonly [z.ZodLiteral<"install">, z.ZodLiteral<"legacy">, z.ZodObject<{
|
|
33
|
+
credential: z.ZodString;
|
|
34
|
+
}, z.core.$strip>]>;
|
|
35
|
+
export type SecretsBindingShape = z.infer<typeof SecretsBinding>;
|
|
36
|
+
export declare const SecretsListed: z.ZodObject<{
|
|
37
|
+
ref: z.ZodString;
|
|
38
|
+
external: z.ZodString;
|
|
39
|
+
binding: z.ZodUnion<readonly [z.ZodLiteral<"install">, z.ZodLiteral<"legacy">, z.ZodObject<{
|
|
40
|
+
credential: z.ZodString;
|
|
41
|
+
}, z.core.$strip>]>;
|
|
42
|
+
version: z.ZodString;
|
|
43
|
+
}, z.core.$strip>;
|
|
44
|
+
/** `secrets.lock` answers a token, or null when another holds the lease. */
|
|
45
|
+
export declare const SecretsLockAnswer: z.ZodNullable<z.ZodObject<{
|
|
46
|
+
token: z.ZodString;
|
|
47
|
+
}, z.core.$strip>>;
|
|
48
|
+
/** What `secrets.assertWritable`, `create`, `replace` and `delete` answer
|
|
49
|
+
* besides null: the module keeps its credentials where lf cannot change them. */
|
|
50
|
+
export declare const SecretsReadOnlyAnswer: z.ZodObject<{
|
|
51
|
+
kind: z.ZodLiteral<"read_only">;
|
|
52
|
+
reason: z.ZodString;
|
|
53
|
+
}, z.core.$strip>;
|
|
54
|
+
export declare const SecretsEntryAnswer: z.ZodNullable<z.ZodObject<{
|
|
55
|
+
kind: z.ZodLiteral<"read_only">;
|
|
56
|
+
reason: z.ZodString;
|
|
57
|
+
}, z.core.$strip>>;
|
|
58
|
+
export declare const SecretsEntryRequest: z.ZodObject<{
|
|
59
|
+
ref: z.ZodString;
|
|
60
|
+
external: z.ZodString;
|
|
61
|
+
binding: z.ZodUnion<readonly [z.ZodLiteral<"install">, z.ZodLiteral<"legacy">, z.ZodObject<{
|
|
62
|
+
credential: z.ZodString;
|
|
63
|
+
}, z.core.$strip>]>;
|
|
64
|
+
fields: z.ZodRecord<z.ZodString, z.ZodString>;
|
|
65
|
+
}, z.core.$strip>;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// The secrets slot's methods (docs/contracts/secrets-slot.md): where lf's
|
|
3
|
+
// credentials are kept. A module resolves and lists what it holds, takes a
|
|
4
|
+
// write-back by version, holds a credential under a lease while a refresh
|
|
5
|
+
// spends its token, and changes whole entries for `lf connect` and
|
|
6
|
+
// `lf credential`. Token refresh stays in lf; a module only stores.
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.SecretsEntryRequest = exports.SecretsEntryAnswer = exports.SecretsReadOnlyAnswer = exports.SecretsLockAnswer = exports.SecretsListed = exports.SecretsBinding = exports.SecretsWriteBackAnswer = exports.SecretsRecord = exports.SECRETS_METHODS = void 0;
|
|
9
|
+
const zod_1 = require("zod");
|
|
10
|
+
exports.SECRETS_METHODS = [
|
|
11
|
+
'secrets.resolve',
|
|
12
|
+
'secrets.writeBack',
|
|
13
|
+
'secrets.list',
|
|
14
|
+
'secrets.lock',
|
|
15
|
+
'secrets.unlock',
|
|
16
|
+
'secrets.assertWritable',
|
|
17
|
+
'secrets.create',
|
|
18
|
+
'secrets.replace',
|
|
19
|
+
'secrets.delete',
|
|
20
|
+
];
|
|
21
|
+
const Fields = zod_1.z.record(zod_1.z.string(), zod_1.z.string());
|
|
22
|
+
/** What `secrets.resolve` answers (or null: nothing is stored under the ref). */
|
|
23
|
+
exports.SecretsRecord = zod_1.z.object({ fields: Fields, version: zod_1.z.string().min(1) });
|
|
24
|
+
exports.SecretsWriteBackAnswer = zod_1.z.discriminatedUnion('kind', [
|
|
25
|
+
zod_1.z.object({ kind: zod_1.z.literal('written'), record: exports.SecretsRecord }),
|
|
26
|
+
zod_1.z.object({ kind: zod_1.z.literal('not_persisted'), record: exports.SecretsRecord, why: zod_1.z.string() }),
|
|
27
|
+
zod_1.z.object({ kind: zod_1.z.literal('conflict'), current: exports.SecretsRecord }),
|
|
28
|
+
zod_1.z.object({ kind: zod_1.z.literal('missing') }),
|
|
29
|
+
]);
|
|
30
|
+
/** How an entry is bound: an install of a module, a hand-written legacy
|
|
31
|
+
* entry, or a credential the module declares. */
|
|
32
|
+
exports.SecretsBinding = zod_1.z.union([zod_1.z.literal('install'), zod_1.z.literal('legacy'), zod_1.z.object({ credential: zod_1.z.string().min(1) })]);
|
|
33
|
+
exports.SecretsListed = zod_1.z.object({ ref: zod_1.z.string().min(1), external: zod_1.z.string().min(1), binding: exports.SecretsBinding, version: zod_1.z.string() });
|
|
34
|
+
/** `secrets.lock` answers a token, or null when another holds the lease. */
|
|
35
|
+
exports.SecretsLockAnswer = zod_1.z.object({ token: zod_1.z.string().min(1) }).nullable();
|
|
36
|
+
/** What `secrets.assertWritable`, `create`, `replace` and `delete` answer
|
|
37
|
+
* besides null: the module keeps its credentials where lf cannot change them. */
|
|
38
|
+
exports.SecretsReadOnlyAnswer = zod_1.z.object({ kind: zod_1.z.literal('read_only'), reason: zod_1.z.string().min(1) });
|
|
39
|
+
exports.SecretsEntryAnswer = exports.SecretsReadOnlyAnswer.nullable();
|
|
40
|
+
exports.SecretsEntryRequest = zod_1.z.object({ ref: zod_1.z.string().min(1), external: zod_1.z.string().min(1), binding: exports.SecretsBinding, fields: Fields });
|
package/dist/slots/wire.d.ts
CHANGED
package/dist/versions.d.ts
CHANGED
|
@@ -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
|
|
4
|
+
"version": "0.12.0",
|
|
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.
|
|
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
|
|
33
|
+
"@listen-fire/movement-lang": "^0.12.0"
|
|
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",
|