@cat-factory/contracts 0.318.0 → 0.320.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/binary-generators.d.ts +10 -127
- package/dist/binary-generators.d.ts.map +1 -1
- package/dist/binary-generators.js +10 -92
- package/dist/binary-generators.js.map +1 -1
- package/dist/binary-outputs.d.ts +44 -0
- package/dist/binary-outputs.d.ts.map +1 -1
- package/dist/binary-outputs.js +22 -0
- package/dist/binary-outputs.js.map +1 -1
- package/dist/capability-credentials.d.ts +142 -2
- package/dist/capability-credentials.d.ts.map +1 -1
- package/dist/capability-credentials.js +167 -1
- package/dist/capability-credentials.js.map +1 -1
- package/dist/execution.d.ts +2 -0
- package/dist/execution.d.ts.map +1 -1
- package/dist/foundational-services.d.ts +88 -2
- package/dist/foundational-services.d.ts.map +1 -1
- package/dist/foundational-services.js +62 -2
- package/dist/foundational-services.js.map +1 -1
- package/dist/platform-assets.d.ts +22 -0
- package/dist/platform-assets.d.ts.map +1 -1
- package/dist/platform-assets.js +24 -0
- package/dist/platform-assets.js.map +1 -1
- package/dist/public-api.d.ts +31 -0
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +26 -3
- package/dist/public-api.js.map +1 -1
- package/dist/public-provisioning.d.ts +193 -0
- package/dist/public-provisioning.d.ts.map +1 -1
- package/dist/public-provisioning.js +161 -0
- package/dist/public-provisioning.js.map +1 -1
- package/dist/routes/agent-runs.d.ts +2 -0
- package/dist/routes/agent-runs.d.ts.map +1 -1
- package/dist/routes/bug-hunt.d.ts +2 -0
- package/dist/routes/bug-hunt.d.ts.map +1 -1
- package/dist/routes/capability-credentials.d.ts +3 -3
- package/dist/routes/execution.d.ts +9 -0
- package/dist/routes/execution.d.ts.map +1 -1
- package/dist/routes/foundational-services.d.ts +38 -2
- package/dist/routes/foundational-services.d.ts.map +1 -1
- package/dist/routes/human-review.d.ts +1 -0
- package/dist/routes/human-review.d.ts.map +1 -1
- package/dist/routes/human-test.d.ts +5 -0
- package/dist/routes/human-test.d.ts.map +1 -1
- package/dist/routes/public-api.d.ts +4 -0
- package/dist/routes/public-api.d.ts.map +1 -1
- package/dist/routes/public-board.d.ts +4 -0
- package/dist/routes/public-board.d.ts.map +1 -1
- package/dist/routes/public-provisioning.d.ts +147 -0
- package/dist/routes/public-provisioning.d.ts.map +1 -1
- package/dist/routes/public-provisioning.js +60 -2
- package/dist/routes/public-provisioning.js.map +1 -1
- package/dist/routes/runners.d.ts +30 -0
- package/dist/routes/runners.d.ts.map +1 -1
- package/dist/routes/sandbox.d.ts +20 -10
- package/dist/routes/sandbox.d.ts.map +1 -1
- package/dist/routes/sandbox.js +12 -2
- package/dist/routes/sandbox.js.map +1 -1
- package/dist/routes/visual-confirm.d.ts +3 -0
- package/dist/routes/visual-confirm.d.ts.map +1 -1
- package/dist/routes/workspaces.d.ts +2 -0
- package/dist/routes/workspaces.d.ts.map +1 -1
- package/dist/runners.d.ts +208 -0
- package/dist/runners.d.ts.map +1 -1
- package/dist/runners.js +45 -0
- package/dist/runners.js.map +1 -1
- package/dist/sandbox.d.ts +70 -13
- package/dist/sandbox.d.ts.map +1 -1
- package/dist/sandbox.js +41 -2
- package/dist/sandbox.js.map +1 -1
- package/dist/snapshot.d.ts +1 -0
- package/dist/snapshot.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import * as v from 'valibot';
|
|
2
|
+
import { type CapabilityCredential } from './capability-credentials.js';
|
|
2
3
|
/**
|
|
3
4
|
* The registry id of the ONE integration the platform itself ships: Google's Gemini image models,
|
|
4
5
|
* defined in `@cat-factory/binary-generators` and installed by every facade's default registry.
|
|
@@ -15,106 +16,23 @@ import * as v from 'valibot';
|
|
|
15
16
|
*/
|
|
16
17
|
export declare const NANO_BANANA_GENERATOR_ID = "nano-banana";
|
|
17
18
|
/**
|
|
18
|
-
*
|
|
19
|
+
* The credential declaration a generative integration uses: the shared
|
|
20
|
+
* {@link capabilityCredentialSchema}, unchanged.
|
|
19
21
|
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
* An integration declares a LIST of these ({@link binaryGeneratorDefinitionSchema}'s
|
|
27
|
-
* `credentials`), because a vendor's account is not always one string. HTTP Basic over a
|
|
28
|
-
* key/secret pair is the ordinary case that breaks a single field, and it is common enough to be
|
|
29
|
-
* a shape rather than one vendor's eccentricity. Under one field the two halves have to be
|
|
30
|
-
* colon-joined into a single variable, which rotates them together, hands the operator one
|
|
31
|
-
* checklist row where their vendor console shows two values, and turns a mis-joined value into a
|
|
32
|
-
* 401 indistinguishable from a wrong key.
|
|
22
|
+
* An ALIAS rather than a copy, and named here because the brief, the picker and the checklist all
|
|
23
|
+
* speak of "the integration's credentials". The shape moved out when a foundational STORAGE
|
|
24
|
+
* service needed the same declaration: the two names a credential carries, and the reserved-key
|
|
25
|
+
* and toolchain floors over them, are properties of the injection CHANNEL rather than of what
|
|
26
|
+
* declared it, and a second copy is the first place two declarers could disagree about a reserved
|
|
27
|
+
* key.
|
|
33
28
|
*/
|
|
34
29
|
export declare const binaryGeneratorCredentialSchema: v.ObjectSchema<{
|
|
35
|
-
/**
|
|
36
|
-
* The credential's LOOKUP key: what the secret resolver is asked for, and what a workspace
|
|
37
|
-
* stores its own value under. Also the ENVIRONMENT VARIABLE the agent reads it from unless
|
|
38
|
-
* {@link envName} says otherwise, so it must be a valid POSIX variable name either way: a
|
|
39
|
-
* generator declaring `x-rd-token` would resolve fine and then be dropped by the harness's env
|
|
40
|
-
* validation, which is a silent "the integration just 401s" at run time.
|
|
41
|
-
*
|
|
42
|
-
* It may NOT name a variable the platform's own configuration owns
|
|
43
|
-
* ({@link isReservedPlatformEnvKey}). The resolver reads the key off the deployment's
|
|
44
|
-
* environment and the value is injected into an agent process, so an integration declaring
|
|
45
|
-
* `ENCRYPTION_KEY` would hand a prompt-injectable agent the deployment's master sealing key.
|
|
46
|
-
* Refused here so a deployment learns at boot, and again at dispatch, since a mothership-mode
|
|
47
|
-
* node boot-validates none of the definitions it resolves.
|
|
48
|
-
*/
|
|
49
30
|
readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 128, undefined>, v.RegexAction<string, "must be a valid environment variable name">, v.CheckAction<string, (issue: v.CheckIssue<string>) => string>]>;
|
|
50
|
-
/**
|
|
51
|
-
* The environment variable the value is injected as, when that differs from {@link key}. This
|
|
52
|
-
* is the name the agent is told to read, and it is what a vendor SDK that auto-reads its own
|
|
53
|
-
* documented variable needs.
|
|
54
|
-
*
|
|
55
|
-
* Held to the toolchain rule rather than the reserved-platform one, because it reads nothing:
|
|
56
|
-
* the floor above is about what may be READ off the deployment's environment, and an injection
|
|
57
|
-
* name only decides what a variable is called inside this job's agent process. That is what lets
|
|
58
|
-
* an integration keep a vendor's documented name even when a platform prefix family covers it.
|
|
59
|
-
*/
|
|
60
31
|
readonly envName: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 128, undefined>, v.RegexAction<string, "must be a valid environment variable name">, v.CheckAction<string, (issue: v.CheckIssue<string>) => string>]>, undefined>;
|
|
61
|
-
/**
|
|
62
|
-
* How the integration expects the credential to be presented (`X-RD-Token: <value>`,
|
|
63
|
-
* `Authorization: Bearer <value>`). Folded into the brief verbatim: the agent writes the
|
|
64
|
-
* request itself, and a key with no stated header is a key it has to guess the use of.
|
|
65
|
-
*/
|
|
66
32
|
readonly usage: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MaxLengthAction<string, 400, undefined>]>, undefined>;
|
|
67
|
-
/**
|
|
68
|
-
* When true (the default), an integration whose credential does not resolve is reported to
|
|
69
|
-
* the agent as UNAVAILABLE rather than offered. Set false only for an endpoint that genuinely
|
|
70
|
-
* works unauthenticated — an agent handed an API whose first call 401s burns a run
|
|
71
|
-
* discovering it.
|
|
72
|
-
*/
|
|
73
33
|
readonly required: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
|
|
74
34
|
}, undefined>;
|
|
75
|
-
export type BinaryGeneratorCredential =
|
|
76
|
-
/**
|
|
77
|
-
* The two names a credential carries, which is all the fallback below reads.
|
|
78
|
-
*
|
|
79
|
-
* Structural rather than {@link BinaryGeneratorCredential} itself, because the DISPATCH projection
|
|
80
|
-
* carries a narrower shape (kernel's `ResolvedBinaryGeneratorCredential`, which drops `usage` and
|
|
81
|
-
* every other prose field the container executor has no use for) and would otherwise have to
|
|
82
|
-
* either widen or re-spell the fallback. A parameter type nothing outside the two names can
|
|
83
|
-
* satisfy is what makes the "one place" claim below enforceable rather than aspirational.
|
|
84
|
-
*/
|
|
85
|
-
export interface BinaryCredentialNames {
|
|
86
|
-
key: string;
|
|
87
|
-
envName?: string;
|
|
88
|
-
}
|
|
89
|
-
/**
|
|
90
|
-
* The environment variable one credential arrives as: its {@link BinaryGeneratorCredential.envName}
|
|
91
|
-
* when it declares one, else its lookup key.
|
|
92
|
-
*
|
|
93
|
-
* The ONE place that fallback is written, because three layers apply it (the schema's uniqueness
|
|
94
|
-
* check below, the dispatch-time resolver that keys the job body, and the brief that tells the
|
|
95
|
-
* agent which variable to read) and a copy that drifted would name a variable that is never set:
|
|
96
|
-
* an integration reported as unavailable on every run, with nothing to see at either end.
|
|
97
|
-
*/
|
|
98
|
-
export declare function binaryCredentialInjectionName(credential: BinaryCredentialNames): string;
|
|
99
|
-
/**
|
|
100
|
-
* The form an injection name is COMPARED in, which is not the form it is injected under.
|
|
101
|
-
*
|
|
102
|
-
* Case-folded, the same way {@link isReservedPlatformEnvKey} folds the lookup key it screens, and
|
|
103
|
-
* for the reason that floor has: environment lookup is case-insensitive on Windows, so `ACME_KEY`
|
|
104
|
-
* and `acme_key` are two variables in the declaration and one variable in the process that reads
|
|
105
|
-
* them. A rule comparing them exactly would call that pair distinct and let one value overwrite
|
|
106
|
-
* the other on the one platform where it matters.
|
|
107
|
-
*/
|
|
108
|
-
export declare function comparableCredentialInjectionName(credential: BinaryCredentialNames): string;
|
|
109
|
-
/**
|
|
110
|
-
* Whether every credential in a declaration arrives as its own variable.
|
|
111
|
-
*
|
|
112
|
-
* Exported so the boot check and the schema share one implementation rather than agreeing by
|
|
113
|
-
* hand. Duplicate LOOKUP keys are deliberately allowed: an integration wanting one stored value
|
|
114
|
-
* delivered under two names is odd but honest, and nothing is lost. A duplicate INJECTION name
|
|
115
|
-
* loses a value, which is why only that one is refused.
|
|
116
|
-
*/
|
|
117
|
-
export declare function uniqueCredentialInjectionNames(credentials: readonly BinaryGeneratorCredential[]): boolean;
|
|
35
|
+
export type BinaryGeneratorCredential = CapabilityCredential;
|
|
118
36
|
/**
|
|
119
37
|
* HOW an integration is reached, which decides what the rest of the definition may say.
|
|
120
38
|
*
|
|
@@ -238,44 +156,9 @@ export declare const binaryGeneratorDefinitionSchema: v.SchemaWithPipe<readonly
|
|
|
238
156
|
* half of a pair.
|
|
239
157
|
*/
|
|
240
158
|
readonly credentials: v.OptionalSchema<v.SchemaWithPipe<readonly [v.ArraySchema<v.ObjectSchema<{
|
|
241
|
-
/**
|
|
242
|
-
* The credential's LOOKUP key: what the secret resolver is asked for, and what a workspace
|
|
243
|
-
* stores its own value under. Also the ENVIRONMENT VARIABLE the agent reads it from unless
|
|
244
|
-
* {@link envName} says otherwise, so it must be a valid POSIX variable name either way: a
|
|
245
|
-
* generator declaring `x-rd-token` would resolve fine and then be dropped by the harness's env
|
|
246
|
-
* validation, which is a silent "the integration just 401s" at run time.
|
|
247
|
-
*
|
|
248
|
-
* It may NOT name a variable the platform's own configuration owns
|
|
249
|
-
* ({@link isReservedPlatformEnvKey}). The resolver reads the key off the deployment's
|
|
250
|
-
* environment and the value is injected into an agent process, so an integration declaring
|
|
251
|
-
* `ENCRYPTION_KEY` would hand a prompt-injectable agent the deployment's master sealing key.
|
|
252
|
-
* Refused here so a deployment learns at boot, and again at dispatch, since a mothership-mode
|
|
253
|
-
* node boot-validates none of the definitions it resolves.
|
|
254
|
-
*/
|
|
255
159
|
readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 128, undefined>, v.RegexAction<string, "must be a valid environment variable name">, v.CheckAction<string, (issue: v.CheckIssue<string>) => string>]>;
|
|
256
|
-
/**
|
|
257
|
-
* The environment variable the value is injected as, when that differs from {@link key}. This
|
|
258
|
-
* is the name the agent is told to read, and it is what a vendor SDK that auto-reads its own
|
|
259
|
-
* documented variable needs.
|
|
260
|
-
*
|
|
261
|
-
* Held to the toolchain rule rather than the reserved-platform one, because it reads nothing:
|
|
262
|
-
* the floor above is about what may be READ off the deployment's environment, and an injection
|
|
263
|
-
* name only decides what a variable is called inside this job's agent process. That is what lets
|
|
264
|
-
* an integration keep a vendor's documented name even when a platform prefix family covers it.
|
|
265
|
-
*/
|
|
266
160
|
readonly envName: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 128, undefined>, v.RegexAction<string, "must be a valid environment variable name">, v.CheckAction<string, (issue: v.CheckIssue<string>) => string>]>, undefined>;
|
|
267
|
-
/**
|
|
268
|
-
* How the integration expects the credential to be presented (`X-RD-Token: <value>`,
|
|
269
|
-
* `Authorization: Bearer <value>`). Folded into the brief verbatim: the agent writes the
|
|
270
|
-
* request itself, and a key with no stated header is a key it has to guess the use of.
|
|
271
|
-
*/
|
|
272
161
|
readonly usage: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MaxLengthAction<string, 400, undefined>]>, undefined>;
|
|
273
|
-
/**
|
|
274
|
-
* When true (the default), an integration whose credential does not resolve is reported to
|
|
275
|
-
* the agent as UNAVAILABLE rather than offered. Set false only for an endpoint that genuinely
|
|
276
|
-
* works unauthenticated — an agent handed an API whose first call 401s burns a run
|
|
277
|
-
* discovering it.
|
|
278
|
-
*/
|
|
279
162
|
readonly required: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
|
|
280
163
|
}, undefined>, undefined>, v.MaxLengthAction<{
|
|
281
164
|
key: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"binary-generators.d.ts","sourceRoot":"","sources":["../src/binary-generators.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"binary-generators.d.ts","sourceRoot":"","sources":["../src/binary-generators.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAC5B,OAAO,EACL,KAAK,oBAAoB,EAG1B,MAAM,6BAA6B,CAAA;AA4BpC;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,wBAAwB,gBAAgB,CAAA;AAUrD;;;;;;;;;;GAUG;AACH,eAAO,MAAM,+BAA+B;;;;;aAA6B,CAAA;AACzE,MAAM,MAAM,yBAAyB,GAAG,oBAAoB,CAAA;AAE5D;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,8BAA8B,iDAAiC,CAAA;AAC5E,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,8BAA8B,CAAC,CAAA;AAE3F;;;;;;;GAOG;AACH,eAAO,MAAM,+BAA+B;IAExC,iFAAiF;;;IAGjF,2DAA2D;;IAE3D;;;OAGG;;IAEH;;;OAGG;;IAEH;;;;OAIG;;IAEH;;;;;;;;;;;;;;OAcG;;IAEH;;;;;;;;;;;;;;OAcG;;;;;;;;;;;;;;;IAEH;;;;OAIG;;IAEH;;;;OAIG;;IAEH;;;;;;;;;;;;;;;OAeG;;;;;;;;;;;;;;;;;IAiBH;;;;OAIG;;;;;;;IAEH;;;OAGG;;IAEH;;;;;;;;OAQG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iHA0BN,CAAA;AACD,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,+BAA+B,CAAC,CAAA;AAE7F;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE;IAAE,SAAS,CAAC,EAAE,wBAAwB,CAAA;CAAE,GAAG,OAAO,CAE7F;AAED;;;;;;;;GAQG;AACH;;;;;;;;;;GAUG;AACH,eAAO,MAAM,+BAA+B;;;;IAI1C,0FAA0F;;IAE1F,gGAAgG;;IAEhG;;;;;;;;;OASG;;IAEH;;;;;;OAMG;;;;;;;;;;;;;;;IAEH;;;;;;;;OAQG;;;aAGH,CAAA;AACF,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,+BAA+B,CAAC,CAAA;AAE7F,wBAAgB,+BAA+B,CAAC,UAAU,EAAE,OAAO,GAAG,MAAM,EAAE,CAO7E"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import * as v from 'valibot';
|
|
2
|
+
import { capabilityCredentialSchema, uniqueCredentialInjectionNames, } from './capability-credentials.js';
|
|
2
3
|
import { binaryGeneratorAcceptsSchema, binaryGeneratorCapabilitySchema, } from './binary-capabilities.js';
|
|
3
4
|
import { binaryModalitySchema, mediaTypeSchema } from './binary-modalities.js';
|
|
4
5
|
import { uploadApiContractSchema } from './foundational-services.js';
|
|
5
|
-
import { isReservedPlatformEnvKey, isToolchainEnvName, reservedEnvKeyMessage, toolchainEnvNameMessage, } from './reserved-env-keys.js';
|
|
6
6
|
// ---------------------------------------------------------------------------
|
|
7
7
|
// Wire vocabulary for GENERATIVE BINARY INTEGRATIONS — the third-party (or in-house) APIs a
|
|
8
8
|
// binary-generating agent kind calls to PRODUCE its deliverable: an image generator, a
|
|
@@ -39,99 +39,17 @@ import { isReservedPlatformEnvKey, isToolchainEnvName, reservedEnvKeyMessage, to
|
|
|
39
39
|
export const NANO_BANANA_GENERATOR_ID = 'nano-banana';
|
|
40
40
|
const slug = v.pipe(v.string(), v.trim(), v.minLength(1), v.maxLength(64), v.regex(/^[a-z0-9][a-z0-9-]*$/, 'must be a lower-kebab slug'));
|
|
41
41
|
/**
|
|
42
|
-
*
|
|
42
|
+
* The credential declaration a generative integration uses: the shared
|
|
43
|
+
* {@link capabilityCredentialSchema}, unchanged.
|
|
43
44
|
*
|
|
44
|
-
*
|
|
45
|
-
*
|
|
46
|
-
*
|
|
47
|
-
*
|
|
48
|
-
*
|
|
49
|
-
*
|
|
50
|
-
* An integration declares a LIST of these ({@link binaryGeneratorDefinitionSchema}'s
|
|
51
|
-
* `credentials`), because a vendor's account is not always one string. HTTP Basic over a
|
|
52
|
-
* key/secret pair is the ordinary case that breaks a single field, and it is common enough to be
|
|
53
|
-
* a shape rather than one vendor's eccentricity. Under one field the two halves have to be
|
|
54
|
-
* colon-joined into a single variable, which rotates them together, hands the operator one
|
|
55
|
-
* checklist row where their vendor console shows two values, and turns a mis-joined value into a
|
|
56
|
-
* 401 indistinguishable from a wrong key.
|
|
57
|
-
*/
|
|
58
|
-
export const binaryGeneratorCredentialSchema = v.object({
|
|
59
|
-
/**
|
|
60
|
-
* The credential's LOOKUP key: what the secret resolver is asked for, and what a workspace
|
|
61
|
-
* stores its own value under. Also the ENVIRONMENT VARIABLE the agent reads it from unless
|
|
62
|
-
* {@link envName} says otherwise, so it must be a valid POSIX variable name either way: a
|
|
63
|
-
* generator declaring `x-rd-token` would resolve fine and then be dropped by the harness's env
|
|
64
|
-
* validation, which is a silent "the integration just 401s" at run time.
|
|
65
|
-
*
|
|
66
|
-
* It may NOT name a variable the platform's own configuration owns
|
|
67
|
-
* ({@link isReservedPlatformEnvKey}). The resolver reads the key off the deployment's
|
|
68
|
-
* environment and the value is injected into an agent process, so an integration declaring
|
|
69
|
-
* `ENCRYPTION_KEY` would hand a prompt-injectable agent the deployment's master sealing key.
|
|
70
|
-
* Refused here so a deployment learns at boot, and again at dispatch, since a mothership-mode
|
|
71
|
-
* node boot-validates none of the definitions it resolves.
|
|
72
|
-
*/
|
|
73
|
-
key: v.pipe(v.string(), v.trim(), v.minLength(1), v.maxLength(128), v.regex(/^[A-Za-z_][A-Za-z0-9_]*$/, 'must be a valid environment variable name'), v.check((key) => !isReservedPlatformEnvKey(key), (issue) => reservedEnvKeyMessage(String(issue.input)))),
|
|
74
|
-
/**
|
|
75
|
-
* The environment variable the value is injected as, when that differs from {@link key}. This
|
|
76
|
-
* is the name the agent is told to read, and it is what a vendor SDK that auto-reads its own
|
|
77
|
-
* documented variable needs.
|
|
78
|
-
*
|
|
79
|
-
* Held to the toolchain rule rather than the reserved-platform one, because it reads nothing:
|
|
80
|
-
* the floor above is about what may be READ off the deployment's environment, and an injection
|
|
81
|
-
* name only decides what a variable is called inside this job's agent process. That is what lets
|
|
82
|
-
* an integration keep a vendor's documented name even when a platform prefix family covers it.
|
|
83
|
-
*/
|
|
84
|
-
envName: v.optional(v.pipe(v.string(), v.trim(), v.minLength(1), v.maxLength(128), v.regex(/^[A-Za-z_][A-Za-z0-9_]*$/, 'must be a valid environment variable name'), v.check((name) => !isToolchainEnvName(name), (issue) => toolchainEnvNameMessage(String(issue.input))))),
|
|
85
|
-
/**
|
|
86
|
-
* How the integration expects the credential to be presented (`X-RD-Token: <value>`,
|
|
87
|
-
* `Authorization: Bearer <value>`). Folded into the brief verbatim: the agent writes the
|
|
88
|
-
* request itself, and a key with no stated header is a key it has to guess the use of.
|
|
89
|
-
*/
|
|
90
|
-
usage: v.optional(v.pipe(v.string(), v.trim(), v.maxLength(400))),
|
|
91
|
-
/**
|
|
92
|
-
* When true (the default), an integration whose credential does not resolve is reported to
|
|
93
|
-
* the agent as UNAVAILABLE rather than offered. Set false only for an endpoint that genuinely
|
|
94
|
-
* works unauthenticated — an agent handed an API whose first call 401s burns a run
|
|
95
|
-
* discovering it.
|
|
96
|
-
*/
|
|
97
|
-
required: v.optional(v.boolean()),
|
|
98
|
-
});
|
|
99
|
-
/**
|
|
100
|
-
* The environment variable one credential arrives as: its {@link BinaryGeneratorCredential.envName}
|
|
101
|
-
* when it declares one, else its lookup key.
|
|
102
|
-
*
|
|
103
|
-
* The ONE place that fallback is written, because three layers apply it (the schema's uniqueness
|
|
104
|
-
* check below, the dispatch-time resolver that keys the job body, and the brief that tells the
|
|
105
|
-
* agent which variable to read) and a copy that drifted would name a variable that is never set:
|
|
106
|
-
* an integration reported as unavailable on every run, with nothing to see at either end.
|
|
107
|
-
*/
|
|
108
|
-
export function binaryCredentialInjectionName(credential) {
|
|
109
|
-
return credential.envName ?? credential.key;
|
|
110
|
-
}
|
|
111
|
-
/**
|
|
112
|
-
* The form an injection name is COMPARED in, which is not the form it is injected under.
|
|
113
|
-
*
|
|
114
|
-
* Case-folded, the same way {@link isReservedPlatformEnvKey} folds the lookup key it screens, and
|
|
115
|
-
* for the reason that floor has: environment lookup is case-insensitive on Windows, so `ACME_KEY`
|
|
116
|
-
* and `acme_key` are two variables in the declaration and one variable in the process that reads
|
|
117
|
-
* them. A rule comparing them exactly would call that pair distinct and let one value overwrite
|
|
118
|
-
* the other on the one platform where it matters.
|
|
119
|
-
*/
|
|
120
|
-
export function comparableCredentialInjectionName(credential) {
|
|
121
|
-
return binaryCredentialInjectionName(credential).toUpperCase();
|
|
122
|
-
}
|
|
123
|
-
/**
|
|
124
|
-
* Whether every credential in a declaration arrives as its own variable.
|
|
125
|
-
*
|
|
126
|
-
* Exported so the boot check and the schema share one implementation rather than agreeing by
|
|
127
|
-
* hand. Duplicate LOOKUP keys are deliberately allowed: an integration wanting one stored value
|
|
128
|
-
* delivered under two names is odd but honest, and nothing is lost. A duplicate INJECTION name
|
|
129
|
-
* loses a value, which is why only that one is refused.
|
|
45
|
+
* An ALIAS rather than a copy, and named here because the brief, the picker and the checklist all
|
|
46
|
+
* speak of "the integration's credentials". The shape moved out when a foundational STORAGE
|
|
47
|
+
* service needed the same declaration: the two names a credential carries, and the reserved-key
|
|
48
|
+
* and toolchain floors over them, are properties of the injection CHANNEL rather than of what
|
|
49
|
+
* declared it, and a second copy is the first place two declarers could disagree about a reserved
|
|
50
|
+
* key.
|
|
130
51
|
*/
|
|
131
|
-
export
|
|
132
|
-
const names = credentials.map(comparableCredentialInjectionName);
|
|
133
|
-
return new Set(names).size === names.length;
|
|
134
|
-
}
|
|
52
|
+
export const binaryGeneratorCredentialSchema = capabilityCredentialSchema;
|
|
135
53
|
/**
|
|
136
54
|
* HOW an integration is reached, which decides what the rest of the definition may say.
|
|
137
55
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"binary-generators.js","sourceRoot":"","sources":["../src/binary-generators.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAC5B,OAAO,EACL,4BAA4B,EAC5B,+BAA+B,GAChC,MAAM,0BAA0B,CAAA;AACjC,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAC9E,OAAO,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAA;
|
|
1
|
+
{"version":3,"file":"binary-generators.js","sourceRoot":"","sources":["../src/binary-generators.ts"],"names":[],"mappings":"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"}
|
package/dist/binary-outputs.d.ts
CHANGED
|
@@ -160,6 +160,28 @@ export declare const binaryOutputArtifactSchema: v.ObjectSchema<{
|
|
|
160
160
|
* NAMED in the report rather than dropped.
|
|
161
161
|
*/
|
|
162
162
|
readonly generator: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
163
|
+
/**
|
|
164
|
+
* What ran over the generated bytes AFTER the integration produced them and BEFORE they were
|
|
165
|
+
* stored, in the agent's own words (`pixel-snapper`, `sharp resize`).
|
|
166
|
+
*
|
|
167
|
+
* A post-processing pass gives an artifact two producers, and {@link generator} can name only
|
|
168
|
+
* one. Both single answers are wrong: naming the integration records a producer of something
|
|
169
|
+
* that is not what is stored (the bytes are not the ones it returned, and neither are the
|
|
170
|
+
* dimensions), and naming nothing loses the vendor attribution the field exists for, along with
|
|
171
|
+
* the spend story behind it. So the delivery gets its own hole rather than a contested one.
|
|
172
|
+
*
|
|
173
|
+
* A FREE STRING rather than a registry reference, deliberately. A post-processor is not a
|
|
174
|
+
* registered thing and must not become one: `binaryGeneratorCapabilitySchema` admits a member
|
|
175
|
+
* only when it partitions an ENDPOINT's request, and a step's choice to snap a render onto a
|
|
176
|
+
* pixel grid is a property of the WORK, whose home is the step's own prompt. There is nothing to
|
|
177
|
+
* check this against, so it is recorded verbatim (capped) and judged by whoever reads the run,
|
|
178
|
+
* exactly as `location` is. It gets no `unknownGenerators`-style report for the same reason.
|
|
179
|
+
*
|
|
180
|
+
* The same epistemic status as everything else the agent declares here, and the same third
|
|
181
|
+
* state: ABSENT means "not stated", which is what every artifact recorded before this field
|
|
182
|
+
* existed says, and is never evidence that nothing ran.
|
|
183
|
+
*/
|
|
184
|
+
readonly processedBy: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
163
185
|
/**
|
|
164
186
|
* The CONTENT TYPE of the artifact, DERIVED in code from {@link contentType} — never read off
|
|
165
187
|
* the model's prose. Absent when no media type was declared, or when the declared one is not
|
|
@@ -231,6 +253,28 @@ export declare const binaryOutputReportSchema: v.ObjectSchema<{
|
|
|
231
253
|
* NAMED in the report rather than dropped.
|
|
232
254
|
*/
|
|
233
255
|
readonly generator: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
256
|
+
/**
|
|
257
|
+
* What ran over the generated bytes AFTER the integration produced them and BEFORE they were
|
|
258
|
+
* stored, in the agent's own words (`pixel-snapper`, `sharp resize`).
|
|
259
|
+
*
|
|
260
|
+
* A post-processing pass gives an artifact two producers, and {@link generator} can name only
|
|
261
|
+
* one. Both single answers are wrong: naming the integration records a producer of something
|
|
262
|
+
* that is not what is stored (the bytes are not the ones it returned, and neither are the
|
|
263
|
+
* dimensions), and naming nothing loses the vendor attribution the field exists for, along with
|
|
264
|
+
* the spend story behind it. So the delivery gets its own hole rather than a contested one.
|
|
265
|
+
*
|
|
266
|
+
* A FREE STRING rather than a registry reference, deliberately. A post-processor is not a
|
|
267
|
+
* registered thing and must not become one: `binaryGeneratorCapabilitySchema` admits a member
|
|
268
|
+
* only when it partitions an ENDPOINT's request, and a step's choice to snap a render onto a
|
|
269
|
+
* pixel grid is a property of the WORK, whose home is the step's own prompt. There is nothing to
|
|
270
|
+
* check this against, so it is recorded verbatim (capped) and judged by whoever reads the run,
|
|
271
|
+
* exactly as `location` is. It gets no `unknownGenerators`-style report for the same reason.
|
|
272
|
+
*
|
|
273
|
+
* The same epistemic status as everything else the agent declares here, and the same third
|
|
274
|
+
* state: ABSENT means "not stated", which is what every artifact recorded before this field
|
|
275
|
+
* existed says, and is never evidence that nothing ran.
|
|
276
|
+
*/
|
|
277
|
+
readonly processedBy: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
234
278
|
/**
|
|
235
279
|
* The CONTENT TYPE of the artifact, DERIVED in code from {@link contentType} — never read off
|
|
236
280
|
* the model's prose. Absent when no media type was declared, or when the declared one is not
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"binary-outputs.d.ts","sourceRoot":"","sources":["../src/binary-outputs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAyB5B;;;;;;GAMG;AACH,eAAO,MAAM,wBAAwB;IACnC;;;;OAIG;;IAEH;;;;;;OAMG;;IAEH;;;;;;;;;OASG;;IAEH;;;;;;;;;;OAUG;;IAEH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAkCG;;IAEH;;;;;;;;;;;;;;;OAeG;;IAEH;;;;;;;;;OASG;;;;;aAEH,CAAA;AACF,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,wBAAwB,CAAC,CAAA;AAE/E,+FAA+F;AAC/F,eAAO,MAAM,0BAA0B;IACrC;;;;;OAKG;;IAEH;;;OAGG;;IAEH,8FAA8F;;IAE9F,uEAAuE;;IAEvE,oDAAoD;;IAEpD;;;;;;;;;;;;;;OAcG;;;;;IAEH;;;;;;OAMG;;IAEH;;;;;OAKG;;aAEH,CAAA;AACF,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,0BAA0B,CAAC,CAAA;AAEnF;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,wBAAwB;;
|
|
1
|
+
{"version":3,"file":"binary-outputs.d.ts","sourceRoot":"","sources":["../src/binary-outputs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAyB5B;;;;;;GAMG;AACH,eAAO,MAAM,wBAAwB;IACnC;;;;OAIG;;IAEH;;;;;;OAMG;;IAEH;;;;;;;;;OASG;;IAEH;;;;;;;;;;OAUG;;IAEH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAkCG;;IAEH;;;;;;;;;;;;;;;OAeG;;IAEH;;;;;;;;;OASG;;;;;aAEH,CAAA;AACF,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,wBAAwB,CAAC,CAAA;AAE/E,+FAA+F;AAC/F,eAAO,MAAM,0BAA0B;IACrC;;;;;OAKG;;IAEH;;;OAGG;;IAEH,8FAA8F;;IAE9F,uEAAuE;;IAEvE,oDAAoD;;IAEpD;;;;;;;;;;;;;;OAcG;;;;;IAEH;;;;;;OAMG;;IAEH;;;;;;;;;;;;;;;;;;;;OAoBG;;IAEH;;;;;OAKG;;aAEH,CAAA;AACF,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,0BAA0B,CAAC,CAAA;AAEnF;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,wBAAwB;;QAzFnC;;;;;WAKG;;QAEH;;;WAGG;;QAEH,8FAA8F;;QAE9F,uEAAuE;;QAEvE,oDAAoD;;QAEpD;;;;;;;;;;;;;;WAcG;;;;;QAEH;;;;;;WAMG;;QAEH;;;;;;;;;;;;;;;;;;;;WAoBG;;QAEH;;;;;WAKG;;;IAsBH,0FAA0F;;IAE1F;;;;;;OAMG;;IAEH;;;;;;;;OAQG;;IAEH,2FAA2F;;IAE3F,qDAAqD;;IAErD,0FAA0F;;IAE1F,qEAAqE;;aAErE,CAAA;AACF,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,wBAAwB,CAAC,CAAA"}
|
package/dist/binary-outputs.js
CHANGED
|
@@ -168,6 +168,28 @@ export const binaryOutputArtifactSchema = v.object({
|
|
|
168
168
|
* NAMED in the report rather than dropped.
|
|
169
169
|
*/
|
|
170
170
|
generator: v.optional(v.string()),
|
|
171
|
+
/**
|
|
172
|
+
* What ran over the generated bytes AFTER the integration produced them and BEFORE they were
|
|
173
|
+
* stored, in the agent's own words (`pixel-snapper`, `sharp resize`).
|
|
174
|
+
*
|
|
175
|
+
* A post-processing pass gives an artifact two producers, and {@link generator} can name only
|
|
176
|
+
* one. Both single answers are wrong: naming the integration records a producer of something
|
|
177
|
+
* that is not what is stored (the bytes are not the ones it returned, and neither are the
|
|
178
|
+
* dimensions), and naming nothing loses the vendor attribution the field exists for, along with
|
|
179
|
+
* the spend story behind it. So the delivery gets its own hole rather than a contested one.
|
|
180
|
+
*
|
|
181
|
+
* A FREE STRING rather than a registry reference, deliberately. A post-processor is not a
|
|
182
|
+
* registered thing and must not become one: `binaryGeneratorCapabilitySchema` admits a member
|
|
183
|
+
* only when it partitions an ENDPOINT's request, and a step's choice to snap a render onto a
|
|
184
|
+
* pixel grid is a property of the WORK, whose home is the step's own prompt. There is nothing to
|
|
185
|
+
* check this against, so it is recorded verbatim (capped) and judged by whoever reads the run,
|
|
186
|
+
* exactly as `location` is. It gets no `unknownGenerators`-style report for the same reason.
|
|
187
|
+
*
|
|
188
|
+
* The same epistemic status as everything else the agent declares here, and the same third
|
|
189
|
+
* state: ABSENT means "not stated", which is what every artifact recorded before this field
|
|
190
|
+
* existed says, and is never evidence that nothing ran.
|
|
191
|
+
*/
|
|
192
|
+
processedBy: v.optional(v.string()),
|
|
171
193
|
/**
|
|
172
194
|
* The CONTENT TYPE of the artifact, DERIVED in code from {@link contentType} — never read off
|
|
173
195
|
* the model's prose. Absent when no media type was declared, or when the declared one is not
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"binary-outputs.js","sourceRoot":"","sources":["../src/binary-outputs.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"binary-outputs.js","sourceRoot":"","sources":["../src/binary-outputs.ts"],"names":[],"mappings":"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"}
|
|
@@ -74,7 +74,7 @@ export declare const capabilityCredentialStatusSchema: v.ObjectSchema<{
|
|
|
74
74
|
readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 128, undefined>, v.RegexAction<string, "must be a valid environment variable name (letters, digits and underscores, not starting with a digit)">, v.CheckAction<string, (issue: v.CheckIssue<string>) => string>, v.CheckAction<string, (issue: v.CheckIssue<string>) => string>]>;
|
|
75
75
|
/** Which capabilities want it — id + label, so the UI can say who a key is for. */
|
|
76
76
|
readonly declaredBy: v.ArraySchema<v.ObjectSchema<{
|
|
77
|
-
readonly subject: v.PicklistSchema<["tool-server", "binary-generator"], undefined>;
|
|
77
|
+
readonly subject: v.PicklistSchema<["tool-server", "binary-generator", "foundational-service"], undefined>;
|
|
78
78
|
readonly id: v.StringSchema<undefined>;
|
|
79
79
|
readonly label: v.StringSchema<undefined>;
|
|
80
80
|
/** The definition's own note on how the value is presented, when it states one. */
|
|
@@ -127,7 +127,7 @@ export declare const capabilityCredentialsViewSchema: v.ObjectSchema<{
|
|
|
127
127
|
readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 128, undefined>, v.RegexAction<string, "must be a valid environment variable name (letters, digits and underscores, not starting with a digit)">, v.CheckAction<string, (issue: v.CheckIssue<string>) => string>, v.CheckAction<string, (issue: v.CheckIssue<string>) => string>]>;
|
|
128
128
|
/** Which capabilities want it — id + label, so the UI can say who a key is for. */
|
|
129
129
|
readonly declaredBy: v.ArraySchema<v.ObjectSchema<{
|
|
130
|
-
readonly subject: v.PicklistSchema<["tool-server", "binary-generator"], undefined>;
|
|
130
|
+
readonly subject: v.PicklistSchema<["tool-server", "binary-generator", "foundational-service"], undefined>;
|
|
131
131
|
readonly id: v.StringSchema<undefined>;
|
|
132
132
|
readonly label: v.StringSchema<undefined>;
|
|
133
133
|
/** The definition's own note on how the value is presented, when it states one. */
|
|
@@ -182,4 +182,144 @@ export declare const capabilityCredentialEntriesSchema: v.ArraySchema<v.ObjectSc
|
|
|
182
182
|
export declare function parseCapabilityCredentialEntries(raw: unknown): CapabilityCredentialEntry[];
|
|
183
183
|
/** The non-secret summary persisted beside the sealed values, so a read decrypts nothing. */
|
|
184
184
|
export declare function capabilityCredentialsSummary(entries: CapabilityCredentialEntry[], updatedAt: number): CapabilityCredentialRef[];
|
|
185
|
+
/**
|
|
186
|
+
* ONE credential a registered capability needs, declared by NAME only, never a value.
|
|
187
|
+
*
|
|
188
|
+
* The value is resolved per dispatch through the facade-wired `ToolSecretResolver` port (the
|
|
189
|
+
* same port a tool server's credentials go through) and written straight onto the job body,
|
|
190
|
+
* where the harness injects it into THIS JOB's agent environment. It never reaches
|
|
191
|
+
* `AgentRunContext`, a prompt, or the telemetry snapshot: only the key NAME does, because the
|
|
192
|
+
* agent has to know which variable to read.
|
|
193
|
+
*
|
|
194
|
+
* A declarer states a LIST of these, because a vendor's account is not always one string. HTTP Basic over a
|
|
195
|
+
* key/secret pair is the ordinary case that breaks a single field, and it is common enough to be
|
|
196
|
+
* a shape rather than one vendor's eccentricity. Under one field the two halves have to be
|
|
197
|
+
* colon-joined into a single variable, which rotates them together, hands the operator one
|
|
198
|
+
* checklist row where their vendor console shows two values, and turns a mis-joined value into a
|
|
199
|
+
* 401 indistinguishable from a wrong key.
|
|
200
|
+
*/
|
|
201
|
+
export declare const capabilityCredentialSchema: v.ObjectSchema<{
|
|
202
|
+
/**
|
|
203
|
+
* The credential's LOOKUP key: what the secret resolver is asked for, and what a workspace
|
|
204
|
+
* stores its own value under. Also the ENVIRONMENT VARIABLE the agent reads it from unless
|
|
205
|
+
* {@link envName} says otherwise, so it must be a valid POSIX variable name either way: a
|
|
206
|
+
* generator declaring `x-rd-token` would resolve fine and then be dropped by the harness's env
|
|
207
|
+
* validation, which is a silent "the integration just 401s" at run time.
|
|
208
|
+
*
|
|
209
|
+
* It may NOT name a variable the platform's own configuration owns
|
|
210
|
+
* ({@link isReservedPlatformEnvKey}). The resolver reads the key off the deployment's
|
|
211
|
+
* environment and the value is injected into an agent process, so an integration declaring
|
|
212
|
+
* `ENCRYPTION_KEY` would hand a prompt-injectable agent the deployment's master sealing key.
|
|
213
|
+
* Refused here so a deployment learns at boot, and again at dispatch, since a mothership-mode
|
|
214
|
+
* node boot-validates none of the definitions it resolves.
|
|
215
|
+
*/
|
|
216
|
+
readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 128, undefined>, v.RegexAction<string, "must be a valid environment variable name">, v.CheckAction<string, (issue: v.CheckIssue<string>) => string>]>;
|
|
217
|
+
/**
|
|
218
|
+
* The environment variable the value is injected as, when that differs from {@link key}. This
|
|
219
|
+
* is the name the agent is told to read, and it is what a vendor SDK that auto-reads its own
|
|
220
|
+
* documented variable needs.
|
|
221
|
+
*
|
|
222
|
+
* Held to the toolchain rule rather than the reserved-platform one, because it reads nothing:
|
|
223
|
+
* the floor above is about what may be READ off the deployment's environment, and an injection
|
|
224
|
+
* name only decides what a variable is called inside this job's agent process. That is what lets
|
|
225
|
+
* a declaration keep a vendor's documented name even when a platform prefix family covers it.
|
|
226
|
+
*/
|
|
227
|
+
readonly envName: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 128, undefined>, v.RegexAction<string, "must be a valid environment variable name">, v.CheckAction<string, (issue: v.CheckIssue<string>) => string>]>, undefined>;
|
|
228
|
+
/**
|
|
229
|
+
* How the capability expects the credential to be presented (`X-RD-Token: <value>`,
|
|
230
|
+
* `Authorization: Bearer <value>`). Folded into the brief verbatim: the agent writes the
|
|
231
|
+
* request itself, and a key with no stated header is a key it has to guess the use of.
|
|
232
|
+
*/
|
|
233
|
+
readonly usage: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MaxLengthAction<string, 400, undefined>]>, undefined>;
|
|
234
|
+
/**
|
|
235
|
+
* When true (the default), a capability whose credential does not resolve is reported to
|
|
236
|
+
* the agent as UNAVAILABLE rather than offered. Set false only for an endpoint that genuinely
|
|
237
|
+
* works unauthenticated — an agent handed an API whose first call 401s burns a run
|
|
238
|
+
* discovering it.
|
|
239
|
+
*/
|
|
240
|
+
readonly required: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
|
|
241
|
+
}, undefined>;
|
|
242
|
+
export type CapabilityCredential = v.InferOutput<typeof capabilityCredentialSchema>;
|
|
243
|
+
/**
|
|
244
|
+
* The two names a credential carries, which is all the fallback below reads.
|
|
245
|
+
*
|
|
246
|
+
* Structural rather than {@link CapabilityCredential} itself, because the DISPATCH projection
|
|
247
|
+
* carries a narrower shape (kernel's `ResolvedBinaryGeneratorCredential`, which drops `usage` and
|
|
248
|
+
* every other prose field the container executor has no use for) and would otherwise have to
|
|
249
|
+
* either widen or re-spell the fallback. A parameter type nothing outside the two names can
|
|
250
|
+
* satisfy is what makes the "one place" claim below enforceable rather than aspirational.
|
|
251
|
+
*/
|
|
252
|
+
export interface CapabilityCredentialNames {
|
|
253
|
+
key: string;
|
|
254
|
+
envName?: string;
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* The environment variable one credential arrives as: its {@link CapabilityCredential.envName}
|
|
258
|
+
* when it declares one, else its lookup key.
|
|
259
|
+
*
|
|
260
|
+
* The ONE place that fallback is written, because three layers apply it (the schemas' uniqueness
|
|
261
|
+
* checks, the dispatch-time resolvers that key the job body, and the briefs that tell the
|
|
262
|
+
* agent which variable to read) and a copy that drifted would name a variable that is never set:
|
|
263
|
+
* a capability reported as unavailable on every run, with nothing to see at either end.
|
|
264
|
+
*/
|
|
265
|
+
export declare function credentialInjectionName(credential: CapabilityCredentialNames): string;
|
|
266
|
+
/**
|
|
267
|
+
* The form an injection name is COMPARED in, which is not the form it is injected under.
|
|
268
|
+
*
|
|
269
|
+
* Case-folded, the same way {@link isReservedPlatformEnvKey} folds the lookup key it screens, and
|
|
270
|
+
* for the reason that floor has: environment lookup is case-insensitive on Windows, so `ACME_KEY`
|
|
271
|
+
* and `acme_key` are two variables in the declaration and one variable in the process that reads
|
|
272
|
+
* them. A rule comparing them exactly would call that pair distinct and let one value overwrite
|
|
273
|
+
* the other on the one platform where it matters.
|
|
274
|
+
*/
|
|
275
|
+
export declare function comparableCredentialInjectionName(credential: CapabilityCredentialNames): string;
|
|
276
|
+
/**
|
|
277
|
+
* Whether every credential in a declaration arrives as its own variable.
|
|
278
|
+
*
|
|
279
|
+
* Exported so the boot checks and the schemas share one implementation rather than agreeing by
|
|
280
|
+
* hand. Duplicate LOOKUP keys are deliberately allowed: a capability wanting one stored value
|
|
281
|
+
* delivered under two names is odd but honest, and nothing is lost. A duplicate INJECTION name
|
|
282
|
+
* loses a value, which is why only that one is refused.
|
|
283
|
+
*/
|
|
284
|
+
export declare function uniqueCredentialInjectionNames(credentials: readonly CapabilityCredentialNames[]): boolean;
|
|
285
|
+
/** One capability that claims environment variables, as {@link credentialInjectionCollisions} reads it. */
|
|
286
|
+
export interface CredentialInjectionClaimant {
|
|
287
|
+
/**
|
|
288
|
+
* How this claimant is NAMED in the fault message, qualified by what it is: `integration "x"`,
|
|
289
|
+
* `service "y"`. The rule spans registries, so an id alone would leave an operator hunting for
|
|
290
|
+
* which registry to edit.
|
|
291
|
+
*/
|
|
292
|
+
owner: string;
|
|
293
|
+
credentials?: readonly CapabilityCredentialNames[];
|
|
294
|
+
}
|
|
295
|
+
/** One environment variable two or more claimants want to hold different values. */
|
|
296
|
+
export interface CredentialInjectionCollision {
|
|
297
|
+
/** The variable, in the spelling the deployment wrote (comparison is case-folded; injection is not). */
|
|
298
|
+
envName: string;
|
|
299
|
+
message: string;
|
|
300
|
+
}
|
|
301
|
+
/**
|
|
302
|
+
* The rule that spans DECLARATIONS: two capabilities may not inject different values into one
|
|
303
|
+
* environment variable.
|
|
304
|
+
*
|
|
305
|
+
* The across-declaration twin of {@link uniqueCredentialInjectionNames}, and stated over CLAIMANTS
|
|
306
|
+
* rather than over any one registry's definition type because the variable is the shared resource
|
|
307
|
+
* and the registries cannot see each other. A generative integration, a foundational service and
|
|
308
|
+
* an MCP tool server are registered independently, and the pair only meets when a step selects
|
|
309
|
+
* both, so a rule scoped to one registry answers a question narrower than the fault: the same
|
|
310
|
+
* collision graded twice, once per registry, produces two remediations for one variable.
|
|
311
|
+
*
|
|
312
|
+
* A SHARED name is legitimate and common, because one vendor behind an image endpoint and a music
|
|
313
|
+
* endpoint is one account: what makes that safe is that both look the value up under the SAME key,
|
|
314
|
+
* so whichever resolves first sets the variable to exactly what the other wanted. Different keys
|
|
315
|
+
* behind one name is the opposite, and there is no arbitration that makes it right. Serving the
|
|
316
|
+
* first claimant sets the variable the second capability's brief tells the agent to read, so the
|
|
317
|
+
* agent authenticates one thing with another's credential; withholding it (what dispatch does,
|
|
318
|
+
* since a mothership node validates nothing) costs both capabilities every run. Only a
|
|
319
|
+
* disagreement about the VALUE is reported.
|
|
320
|
+
*
|
|
321
|
+
* Takes the claimants that PARSED. Reading a malformed definition's credentials would restate a
|
|
322
|
+
* fault already reported as a second, more confusing one.
|
|
323
|
+
*/
|
|
324
|
+
export declare function credentialInjectionCollisions(claimants: readonly CredentialInjectionClaimant[]): CredentialInjectionCollision[];
|
|
185
325
|
//# sourceMappingURL=capability-credentials.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capability-credentials.d.ts","sourceRoot":"","sources":["../src/capability-credentials.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAiC5B;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,6BAA6B,2ZAiBzC,CAAA;AAED,8FAA8F;AAC9F,eAAO,MAAM,+BAA+B;;;aAG1C,CAAA;AACF,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,+BAA+B,CAAC,CAAA;AAE7F;;;;;;;;;;GAUG;AACH,eAAO,MAAM,6BAA6B;;aAExC,CAAA;AACF,MAAM,MAAM,4BAA4B,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,6BAA6B,CAAC,CAAA;AAE9F;;;;;;;;GAQG;AACH,eAAO,MAAM,6BAA6B;;IAExC,2FAA2F;;aAE3F,CAAA;AACF,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,6BAA6B,CAAC,CAAA;AAEzF;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,gCAAgC;;IAE3C,mFAAmF;;;;;QAM/E,mFAAmF;;;IAIvF,uEAAuE;;IAEvE,iDAAiD;;IAEjD,6EAA6E;;aAE7E,CAAA;AACF,MAAM,MAAM,0BAA0B,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,gCAAgC,CAAC,CAAA;AAE/F;;;GAGG;AACH,eAAO,MAAM,0BAA0B,MAAM,CAAA;AAE7C,wFAAwF;AACxF,eAAO,MAAM,iCAAiC;;;;;;;;;;;;;;;wDAU7C,CAAA;AACD,MAAM,MAAM,gCAAgC,GAAG,CAAC,CAAC,WAAW,CAC1D,OAAO,iCAAiC,CACzC,CAAA;AAED;;;;;;;;;;GAUG;AACH,eAAO,MAAM,+BAA+B;;;QApD1C,mFAAmF;;;;;YAM/E,mFAAmF;;;QAIvF,uEAAuE;;QAEvE,iDAAiD;;QAEjD,6EAA6E;;;IAwC7E,qDAAqD;;;QA5ErD,2FAA2F;;;IA8E3F;;;;;;;;;;;;;OAaG;;IAEH;;;;;;;;;OASG;;aAEH,CAAA;AACF,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,+BAA+B,CAAC,CAAA;AAE7F,gGAAgG;AAChG,eAAO,MAAM,iCAAiC;;;yBAA2C,CAAA;AACzF,wBAAgB,gCAAgC,CAAC,GAAG,EAAE,OAAO,GAAG,yBAAyB,EAAE,CAE1F;AAED,6FAA6F;AAC7F,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,yBAAyB,EAAE,EACpC,SAAS,EAAE,MAAM,GAChB,uBAAuB,EAAE,CAE3B"}
|
|
1
|
+
{"version":3,"file":"capability-credentials.d.ts","sourceRoot":"","sources":["../src/capability-credentials.ts"],"names":[],"mappings":"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"}
|