@sensigo/realm 0.13.0 → 0.14.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/engine/execution-loop.d.ts +0 -4
- package/dist/engine/execution-loop.d.ts.map +1 -1
- package/dist/engine/execution-loop.js +8 -8
- package/dist/engine/execution-loop.js.map +1 -1
- package/dist/extensions/default-registry.d.ts +6 -13
- package/dist/extensions/default-registry.d.ts.map +1 -1
- package/dist/extensions/default-registry.js +13 -20
- package/dist/extensions/default-registry.js.map +1 -1
- package/dist/extensions/manifest.d.ts +11 -0
- package/dist/extensions/manifest.d.ts.map +1 -1
- package/dist/extensions/registry.d.ts +0 -14
- package/dist/extensions/registry.d.ts.map +1 -1
- package/dist/extensions/registry.js +3 -24
- package/dist/extensions/registry.js.map +1 -1
- package/dist/index.d.ts +6 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -3
- package/dist/index.js.map +1 -1
- package/dist/manifest/deployment-manifest.d.ts +197 -0
- package/dist/manifest/deployment-manifest.d.ts.map +1 -0
- package/dist/manifest/deployment-manifest.js +174 -0
- package/dist/manifest/deployment-manifest.js.map +1 -0
- package/dist/manifest/secret-refs.d.ts +44 -0
- package/dist/manifest/secret-refs.d.ts.map +1 -0
- package/dist/manifest/secret-refs.js +126 -0
- package/dist/manifest/secret-refs.js.map +1 -0
- package/dist/types/extension-identity.d.ts +14 -0
- package/dist/types/extension-identity.d.ts.map +1 -1
- package/dist/types/extension-identity.js +0 -0
- package/dist/types/extension-identity.js.map +1 -1
- package/dist/types/workflow-definition.d.ts +0 -3
- package/dist/types/workflow-definition.d.ts.map +1 -1
- package/dist/workflow/yaml-loader.d.ts.map +1 -1
- package/dist/workflow/yaml-loader.js +39 -6
- package/dist/workflow/yaml-loader.js.map +1 -1
- package/package.json +1 -1
- package/dist/config/secrets.d.ts +0 -15
- package/dist/config/secrets.d.ts.map +0 -1
- package/dist/config/secrets.js +0 -33
- package/dist/config/secrets.js.map +0 -1
package/dist/index.js
CHANGED
|
@@ -16,15 +16,18 @@ export { submitHumanResponse, executeChain, buildNextActions, buildPreExecutionE
|
|
|
16
16
|
export { findEligibleSteps, isWorkflowComplete, deriveRunPhase, buildEvidenceByStep, propagateSkips, } from './engine/eligibility.js';
|
|
17
17
|
export { TERMINAL_PHASES, RESUMABLE_PHASES, WAITING_PHASES, isTerminalPhase, TERMINAL_STATES, RESUMABLE_STATES, WAITING_STATES, isTerminalState, } from './engine/lifecycle.js';
|
|
18
18
|
export { evaluatePrecondition, checkPreconditions, evaluateAllPreconditions, } from './engine/precondition.js';
|
|
19
|
-
export const VERSION = '0.
|
|
19
|
+
export const VERSION = '0.14.0';
|
|
20
20
|
export { ExtensionRegistry } from './extensions/registry.js';
|
|
21
21
|
export { createDefaultRegistry } from './extensions/default-registry.js';
|
|
22
|
+
export { validateDeploymentManifest, collectManifestSecretRefs, DEPLOYMENT_MANIFEST_JSON_SCHEMA, } from './manifest/deployment-manifest.js';
|
|
23
|
+
export { scanSecretString, stringHasSecretRefs, interpolateSecretString, interpolateConfigTree, findSecretRefSites, } from './manifest/secret-refs.js';
|
|
22
24
|
export { extensionIdentityDiffers } from './types/extension-identity.js';
|
|
23
25
|
// Evidence
|
|
24
26
|
export { captureEvidence } from './evidence/snapshot.js';
|
|
25
27
|
// Adapters
|
|
26
28
|
export { GenericHttpAdapter } from './adapters/http-adapter.js';
|
|
27
29
|
export { FileSystemAdapter } from './adapters/file-adapter.js';
|
|
30
|
+
export { MockAdapter } from './adapters/mock-adapter.js';
|
|
28
31
|
export { GitHubAdapter } from './adapters/github-adapter.js';
|
|
29
32
|
export { SlackAdapter } from './adapters/slack-adapter.js';
|
|
30
33
|
export { GorgiasAdapter } from './adapters/gorgias-adapter.js';
|
|
@@ -36,8 +39,6 @@ export { NotionAdapter } from './adapters/notion-adapter.js';
|
|
|
36
39
|
export { TRACE_POLICY_VERSION, TRACE_POLICY, TRACE_POLICY_HASH } from './engine/trace-policy.js';
|
|
37
40
|
// Validation
|
|
38
41
|
export { validateInputSchema } from './validation/input-schema.js';
|
|
39
|
-
// Config
|
|
40
|
-
export { loadSecrets, resolveSecret } from './config/secrets.js';
|
|
41
42
|
// Workflow
|
|
42
43
|
export { loadWorkflowFromFile, loadWorkflowFromString, CURRENT_WORKFLOW_SCHEMA_VERSION, } from './workflow/yaml-loader.js';
|
|
43
44
|
export { JsonWorkflowStore } from './workflow/registrar.js';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,kDAAkD;AAClD,cAAc,uBAAuB,CAAC;AACtC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,2BAA2B,CAAC;AAC1C,OAAO,EAAE,8BAA8B,EAAE,MAAM,8BAA8B,CAAC;AAC9E,cAAc,gCAAgC,CAAC;AAC/C,cAAc,4BAA4B,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAE3D,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AAExE,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EACL,wBAAwB,EACxB,0BAA0B,GAC3B,MAAM,0CAA0C,CAAC;AAMlD,OAAO,EACL,kBAAkB,EAClB,gCAAgC,GACjC,MAAM,iCAAiC,CAAC;AAGzC,OAAO,EACL,mBAAmB,EACnB,YAAY,EACZ,gBAAgB,EAChB,8BAA8B,GAC/B,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,EACd,mBAAmB,EACnB,cAAc,GACf,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,eAAe,GAChB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,oBAAoB,EACpB,kBAAkB,EAClB,wBAAwB,GACzB,MAAM,0BAA0B,CAAC;AAGlC,MAAM,CAAC,MAAM,OAAO,GAAG,QAAQ,CAAC;AAYhC,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
/** One adapter/handler/processor entry, keyed by REGISTRATION name in the manifest maps. */
|
|
2
|
+
export interface ManifestEntry {
|
|
3
|
+
/**
|
|
4
|
+
* What constructs the instance: a built-in catalog name (e.g. `github`), or a module
|
|
5
|
+
* reference `./path.js#ExportName` resolved against the MANIFEST file's directory
|
|
6
|
+
* (`#ExportName` optional — default export otherwise). Contains `/` or a file
|
|
7
|
+
* extension → module ref; else catalog name. Handlers/processors have no catalog —
|
|
8
|
+
* module refs only. Omitted `use:` is invalid for adapters and handlers/processors
|
|
9
|
+
* alike (there is nothing to construct).
|
|
10
|
+
*/
|
|
11
|
+
use?: string;
|
|
12
|
+
/** Construction config; `${secret:NAME}` references are legal only inside its strings. */
|
|
13
|
+
config?: Record<string, unknown>;
|
|
14
|
+
}
|
|
15
|
+
/** Slack gate-notifier config — the reborn checkSlackBidirectionalConfig semantics. */
|
|
16
|
+
export interface SlackGateNotifierConfig {
|
|
17
|
+
type: 'slack';
|
|
18
|
+
config: {
|
|
19
|
+
webhook_url?: string;
|
|
20
|
+
bot_token?: string;
|
|
21
|
+
channel_id?: string;
|
|
22
|
+
app_token?: string;
|
|
23
|
+
signing_secret?: string;
|
|
24
|
+
events_port?: number;
|
|
25
|
+
reminder_interval_ms?: number;
|
|
26
|
+
escalation_threshold_ms?: number;
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
export interface ManifestSecretsConfig {
|
|
30
|
+
/** Secret sources in PRECEDENCE order. Default: ['dotenv']. `env` is opt-in. */
|
|
31
|
+
sources?: Array<'dotenv' | 'env'>;
|
|
32
|
+
/** dotenv file path, relative to the manifest file. Default: `<root>/.env`. */
|
|
33
|
+
dotenv?: string;
|
|
34
|
+
}
|
|
35
|
+
export interface DeploymentManifest {
|
|
36
|
+
version: 1;
|
|
37
|
+
secrets?: ManifestSecretsConfig;
|
|
38
|
+
adapters?: Record<string, ManifestEntry>;
|
|
39
|
+
handlers?: Record<string, ManifestEntry>;
|
|
40
|
+
processors?: Record<string, ManifestEntry>;
|
|
41
|
+
notifiers?: {
|
|
42
|
+
slack_gate?: SlackGateNotifierConfig;
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* The ONE construction shape for `use:` module refs AND catalog wrappers: a factory
|
|
47
|
+
* receiving the registration id and the secret-RESOLVED config, returning the instance.
|
|
48
|
+
*/
|
|
49
|
+
export interface ExtensionFactoryContext {
|
|
50
|
+
id: string;
|
|
51
|
+
config: Record<string, unknown>;
|
|
52
|
+
}
|
|
53
|
+
export type ExtensionFactory<T = unknown> = (ctx: ExtensionFactoryContext) => T;
|
|
54
|
+
/** Ajv-strict JSON schema for the deployment manifest document. */
|
|
55
|
+
export declare const DEPLOYMENT_MANIFEST_JSON_SCHEMA: {
|
|
56
|
+
type: string;
|
|
57
|
+
additionalProperties: boolean;
|
|
58
|
+
required: string[];
|
|
59
|
+
properties: {
|
|
60
|
+
version: {
|
|
61
|
+
const: number;
|
|
62
|
+
};
|
|
63
|
+
secrets: {
|
|
64
|
+
type: string;
|
|
65
|
+
additionalProperties: boolean;
|
|
66
|
+
properties: {
|
|
67
|
+
sources: {
|
|
68
|
+
type: string;
|
|
69
|
+
minItems: number;
|
|
70
|
+
items: {
|
|
71
|
+
enum: string[];
|
|
72
|
+
};
|
|
73
|
+
};
|
|
74
|
+
dotenv: {
|
|
75
|
+
type: string;
|
|
76
|
+
minLength: number;
|
|
77
|
+
};
|
|
78
|
+
};
|
|
79
|
+
};
|
|
80
|
+
adapters: {
|
|
81
|
+
readonly type: "object";
|
|
82
|
+
readonly additionalProperties: {
|
|
83
|
+
readonly type: "object";
|
|
84
|
+
readonly additionalProperties: false;
|
|
85
|
+
readonly properties: {
|
|
86
|
+
readonly use: {
|
|
87
|
+
readonly type: "string";
|
|
88
|
+
readonly minLength: 1;
|
|
89
|
+
};
|
|
90
|
+
readonly config: {
|
|
91
|
+
readonly type: "object";
|
|
92
|
+
};
|
|
93
|
+
};
|
|
94
|
+
};
|
|
95
|
+
};
|
|
96
|
+
handlers: {
|
|
97
|
+
readonly type: "object";
|
|
98
|
+
readonly additionalProperties: {
|
|
99
|
+
readonly type: "object";
|
|
100
|
+
readonly additionalProperties: false;
|
|
101
|
+
readonly properties: {
|
|
102
|
+
readonly use: {
|
|
103
|
+
readonly type: "string";
|
|
104
|
+
readonly minLength: 1;
|
|
105
|
+
};
|
|
106
|
+
readonly config: {
|
|
107
|
+
readonly type: "object";
|
|
108
|
+
};
|
|
109
|
+
};
|
|
110
|
+
};
|
|
111
|
+
};
|
|
112
|
+
processors: {
|
|
113
|
+
readonly type: "object";
|
|
114
|
+
readonly additionalProperties: {
|
|
115
|
+
readonly type: "object";
|
|
116
|
+
readonly additionalProperties: false;
|
|
117
|
+
readonly properties: {
|
|
118
|
+
readonly use: {
|
|
119
|
+
readonly type: "string";
|
|
120
|
+
readonly minLength: 1;
|
|
121
|
+
};
|
|
122
|
+
readonly config: {
|
|
123
|
+
readonly type: "object";
|
|
124
|
+
};
|
|
125
|
+
};
|
|
126
|
+
};
|
|
127
|
+
};
|
|
128
|
+
notifiers: {
|
|
129
|
+
type: string;
|
|
130
|
+
additionalProperties: boolean;
|
|
131
|
+
properties: {
|
|
132
|
+
slack_gate: {
|
|
133
|
+
type: string;
|
|
134
|
+
additionalProperties: boolean;
|
|
135
|
+
required: string[];
|
|
136
|
+
properties: {
|
|
137
|
+
type: {
|
|
138
|
+
const: string;
|
|
139
|
+
};
|
|
140
|
+
config: {
|
|
141
|
+
type: string;
|
|
142
|
+
additionalProperties: boolean;
|
|
143
|
+
properties: {
|
|
144
|
+
webhook_url: {
|
|
145
|
+
type: string;
|
|
146
|
+
minLength: number;
|
|
147
|
+
};
|
|
148
|
+
bot_token: {
|
|
149
|
+
type: string;
|
|
150
|
+
minLength: number;
|
|
151
|
+
};
|
|
152
|
+
channel_id: {
|
|
153
|
+
type: string;
|
|
154
|
+
minLength: number;
|
|
155
|
+
};
|
|
156
|
+
app_token: {
|
|
157
|
+
type: string;
|
|
158
|
+
minLength: number;
|
|
159
|
+
};
|
|
160
|
+
signing_secret: {
|
|
161
|
+
type: string;
|
|
162
|
+
minLength: number;
|
|
163
|
+
};
|
|
164
|
+
events_port: {
|
|
165
|
+
type: string;
|
|
166
|
+
minimum: number;
|
|
167
|
+
maximum: number;
|
|
168
|
+
};
|
|
169
|
+
reminder_interval_ms: {
|
|
170
|
+
type: string;
|
|
171
|
+
minimum: number;
|
|
172
|
+
};
|
|
173
|
+
escalation_threshold_ms: {
|
|
174
|
+
type: string;
|
|
175
|
+
minimum: number;
|
|
176
|
+
};
|
|
177
|
+
};
|
|
178
|
+
};
|
|
179
|
+
};
|
|
180
|
+
};
|
|
181
|
+
};
|
|
182
|
+
};
|
|
183
|
+
};
|
|
184
|
+
};
|
|
185
|
+
/**
|
|
186
|
+
* Pure structural + semantic validation of a parsed manifest document.
|
|
187
|
+
* Returns actionable error strings (empty = valid). Empty maps and absent sections are
|
|
188
|
+
* valid. Duplicate-name detection across manifest entries and code-module exports is
|
|
189
|
+
* loader-side (post-resolution) — one namespace, one collision map.
|
|
190
|
+
*/
|
|
191
|
+
export declare function validateDeploymentManifest(raw: unknown): string[];
|
|
192
|
+
/** Collects every well-formed secret reference site across all config trees. */
|
|
193
|
+
export declare function collectManifestSecretRefs(manifest: DeploymentManifest): Array<{
|
|
194
|
+
name: string;
|
|
195
|
+
path: string;
|
|
196
|
+
}>;
|
|
197
|
+
//# sourceMappingURL=deployment-manifest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deployment-manifest.d.ts","sourceRoot":"","sources":["../../src/manifest/deployment-manifest.ts"],"names":[],"mappings":"AAWA,4FAA4F;AAC5F,MAAM,WAAW,aAAa;IAC5B;;;;;;;OAOG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,0FAA0F;IAC1F,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED,uFAAuF;AACvF,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE;QACN,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,oBAAoB,CAAC,EAAE,MAAM,CAAC;QAC9B,uBAAuB,CAAC,EAAE,MAAM,CAAC;KAClC,CAAC;CACH;AAED,MAAM,WAAW,qBAAqB;IACpC,gFAAgF;IAChF,OAAO,CAAC,EAAE,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,CAAC;IAClC,+EAA+E;IAC/E,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,CAAC,CAAC;IACX,OAAO,CAAC,EAAE,qBAAqB,CAAC;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACzC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAC3C,SAAS,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,uBAAuB,CAAA;KAAE,CAAC;CACtD;AAED;;;GAGG;AACH,MAAM,WAAW,uBAAuB;IACtC,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AACD,MAAM,MAAM,gBAAgB,CAAC,CAAC,GAAG,OAAO,IAAI,CAAC,GAAG,EAAE,uBAAuB,KAAK,CAAC,CAAC;AAgBhF,mEAAmE;AACnE,eAAO,MAAM,+BAA+B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkD3C,CAAC;AAWF;;;;;GAKG;AACH,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,EAAE,CAuCjE;AA0DD,gFAAgF;AAChF,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,kBAAkB,GAC3B,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAkBvC"}
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
// Deployment manifest (`<deployment root>/realm.yaml`, v0.14) — types, Ajv-STRICT schema,
|
|
2
|
+
// and the pure validate function (precedent: trigger-schema.ts). The manifest is the single
|
|
3
|
+
// home of ALL deployment configuration: adapter construction (built-in catalog + custom
|
|
4
|
+
// factories), handler/processor construction config, secret bindings (`${secret:NAME}`),
|
|
5
|
+
// and gate-notifier config. Core owns SHAPE validation only — the CLI owns fs/parse/
|
|
6
|
+
// resolve/construct. Workflows keep declaring CODE via `extensions:`; the manifest owns
|
|
7
|
+
// CONFIG. Trust model: manifest-write = credential-redirection = code-write-equivalent.
|
|
8
|
+
import { Ajv } from 'ajv';
|
|
9
|
+
import { findSecretRefSites } from './secret-refs.js';
|
|
10
|
+
const ENTRY_SCHEMA = {
|
|
11
|
+
type: 'object',
|
|
12
|
+
additionalProperties: false,
|
|
13
|
+
properties: {
|
|
14
|
+
use: { type: 'string', minLength: 1 },
|
|
15
|
+
config: { type: 'object' },
|
|
16
|
+
},
|
|
17
|
+
};
|
|
18
|
+
const ENTRY_MAP_SCHEMA = {
|
|
19
|
+
type: 'object',
|
|
20
|
+
additionalProperties: ENTRY_SCHEMA,
|
|
21
|
+
};
|
|
22
|
+
/** Ajv-strict JSON schema for the deployment manifest document. */
|
|
23
|
+
export const DEPLOYMENT_MANIFEST_JSON_SCHEMA = {
|
|
24
|
+
type: 'object',
|
|
25
|
+
additionalProperties: false,
|
|
26
|
+
required: ['version'],
|
|
27
|
+
properties: {
|
|
28
|
+
version: { const: 1 },
|
|
29
|
+
secrets: {
|
|
30
|
+
type: 'object',
|
|
31
|
+
additionalProperties: false,
|
|
32
|
+
properties: {
|
|
33
|
+
sources: {
|
|
34
|
+
type: 'array',
|
|
35
|
+
minItems: 1,
|
|
36
|
+
items: { enum: ['dotenv', 'env'] },
|
|
37
|
+
},
|
|
38
|
+
dotenv: { type: 'string', minLength: 1 },
|
|
39
|
+
},
|
|
40
|
+
},
|
|
41
|
+
adapters: ENTRY_MAP_SCHEMA,
|
|
42
|
+
handlers: ENTRY_MAP_SCHEMA,
|
|
43
|
+
processors: ENTRY_MAP_SCHEMA,
|
|
44
|
+
notifiers: {
|
|
45
|
+
type: 'object',
|
|
46
|
+
additionalProperties: false,
|
|
47
|
+
properties: {
|
|
48
|
+
slack_gate: {
|
|
49
|
+
type: 'object',
|
|
50
|
+
additionalProperties: false,
|
|
51
|
+
required: ['type', 'config'],
|
|
52
|
+
properties: {
|
|
53
|
+
type: { const: 'slack' },
|
|
54
|
+
config: {
|
|
55
|
+
type: 'object',
|
|
56
|
+
additionalProperties: false,
|
|
57
|
+
properties: {
|
|
58
|
+
webhook_url: { type: 'string', minLength: 1 },
|
|
59
|
+
bot_token: { type: 'string', minLength: 1 },
|
|
60
|
+
channel_id: { type: 'string', minLength: 1 },
|
|
61
|
+
app_token: { type: 'string', minLength: 1 },
|
|
62
|
+
signing_secret: { type: 'string', minLength: 1 },
|
|
63
|
+
events_port: { type: 'integer', minimum: 1, maximum: 65535 },
|
|
64
|
+
reminder_interval_ms: { type: 'integer', minimum: 1 },
|
|
65
|
+
escalation_threshold_ms: { type: 'integer', minimum: 1 },
|
|
66
|
+
},
|
|
67
|
+
},
|
|
68
|
+
},
|
|
69
|
+
},
|
|
70
|
+
},
|
|
71
|
+
},
|
|
72
|
+
},
|
|
73
|
+
};
|
|
74
|
+
function formatAjvError(err) {
|
|
75
|
+
const where = err.instancePath === '' ? 'manifest' : `manifest${err.instancePath}`;
|
|
76
|
+
const detail = err.keyword === 'additionalProperties'
|
|
77
|
+
? `unknown key '${String(err.params.additionalProperty)}'`
|
|
78
|
+
: (err.message ?? 'invalid');
|
|
79
|
+
return `${where}: ${detail}`;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Pure structural + semantic validation of a parsed manifest document.
|
|
83
|
+
* Returns actionable error strings (empty = valid). Empty maps and absent sections are
|
|
84
|
+
* valid. Duplicate-name detection across manifest entries and code-module exports is
|
|
85
|
+
* loader-side (post-resolution) — one namespace, one collision map.
|
|
86
|
+
*/
|
|
87
|
+
export function validateDeploymentManifest(raw) {
|
|
88
|
+
const errors = [];
|
|
89
|
+
const ajv = new Ajv({ strict: true, allErrors: true });
|
|
90
|
+
if (!ajv.validate(DEPLOYMENT_MANIFEST_JSON_SCHEMA, raw)) {
|
|
91
|
+
for (const err of ajv.errors ?? [])
|
|
92
|
+
errors.push(formatAjvError(err));
|
|
93
|
+
return errors;
|
|
94
|
+
}
|
|
95
|
+
const manifest = raw;
|
|
96
|
+
// Notifier combo validation (the reborn checkSlackBidirectionalConfig, as hard schema):
|
|
97
|
+
const slack = manifest.notifiers?.slack_gate?.config;
|
|
98
|
+
if (slack !== undefined) {
|
|
99
|
+
if (slack.app_token !== undefined && slack.bot_token === undefined) {
|
|
100
|
+
errors.push(`notifiers.slack_gate: 'app_token' (Socket Mode) requires 'bot_token' — Socket Mode replies are posted via the bot token.`);
|
|
101
|
+
}
|
|
102
|
+
if (slack.signing_secret !== undefined && slack.events_port === undefined) {
|
|
103
|
+
errors.push(`notifiers.slack_gate: 'signing_secret' (Events API) requires 'events_port' — the events listener needs a port to bind.`);
|
|
104
|
+
}
|
|
105
|
+
if (slack.events_port !== undefined && slack.signing_secret === undefined) {
|
|
106
|
+
errors.push(`notifiers.slack_gate: 'events_port' requires 'signing_secret' — an events listener without request verification is not allowed.`);
|
|
107
|
+
}
|
|
108
|
+
if (slack.app_token !== undefined && slack.signing_secret !== undefined) {
|
|
109
|
+
errors.push(`notifiers.slack_gate: 'app_token' and 'signing_secret' are mutually exclusive — Socket Mode and the Events API are alternative reply channels; configure one.`);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
// `${secret:NAME}` placement: legal ONLY inside string values under `config` trees.
|
|
113
|
+
// Also reject malformed reference-like fragments anywhere (typos never pass silently).
|
|
114
|
+
errors.push(...checkSecretRefPlacement(manifest));
|
|
115
|
+
return errors;
|
|
116
|
+
}
|
|
117
|
+
/** Sections whose `config` subtree is the ONLY legal home for secret references. */
|
|
118
|
+
function checkSecretRefPlacement(manifest) {
|
|
119
|
+
const errors = [];
|
|
120
|
+
const checkEntryMap = (section, map) => {
|
|
121
|
+
for (const [name, entry] of Object.entries(map ?? {})) {
|
|
122
|
+
// use: must not carry secret refs (it names code, not config).
|
|
123
|
+
if (entry.use !== undefined) {
|
|
124
|
+
const scan = findSecretRefSites(entry.use, `${section}.${name}.use`);
|
|
125
|
+
for (const site of scan.sites) {
|
|
126
|
+
errors.push(`${site.path}: '\${secret:${site.name}}' is not allowed here — secret references are legal only inside string values under 'config'.`);
|
|
127
|
+
}
|
|
128
|
+
for (const bad of scan.malformed) {
|
|
129
|
+
errors.push(`${bad.path}: malformed secret reference '${bad.fragment}'.`);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
const scan = findSecretRefSites(entry.config, `${section}.${name}.config`);
|
|
133
|
+
for (const bad of scan.malformed) {
|
|
134
|
+
errors.push(`${bad.path}: malformed secret reference '${bad.fragment}' — the form is \${secret:NAME} with NAME = [A-Z0-9_]+.`);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
};
|
|
138
|
+
checkEntryMap('adapters', manifest.adapters);
|
|
139
|
+
checkEntryMap('handlers', manifest.handlers);
|
|
140
|
+
checkEntryMap('processors', manifest.processors);
|
|
141
|
+
const slackConfig = manifest.notifiers?.slack_gate?.config;
|
|
142
|
+
if (slackConfig !== undefined) {
|
|
143
|
+
const scan = findSecretRefSites(slackConfig, 'notifiers.slack_gate.config');
|
|
144
|
+
for (const bad of scan.malformed) {
|
|
145
|
+
errors.push(`${bad.path}: malformed secret reference '${bad.fragment}' — the form is \${secret:NAME} with NAME = [A-Z0-9_]+.`);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
// secrets.dotenv must not carry refs (it locates the source, it cannot use one).
|
|
149
|
+
if (manifest.secrets?.dotenv !== undefined) {
|
|
150
|
+
const scan = findSecretRefSites(manifest.secrets.dotenv, 'secrets.dotenv');
|
|
151
|
+
for (const site of scan.sites) {
|
|
152
|
+
errors.push(`${site.path}: '\${secret:${site.name}}' is not allowed here — secret references are legal only inside string values under 'config'.`);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
return errors;
|
|
156
|
+
}
|
|
157
|
+
/** Collects every well-formed secret reference site across all config trees. */
|
|
158
|
+
export function collectManifestSecretRefs(manifest) {
|
|
159
|
+
const sites = [];
|
|
160
|
+
const fromMap = (section, map) => {
|
|
161
|
+
for (const [name, entry] of Object.entries(map ?? {})) {
|
|
162
|
+
sites.push(...findSecretRefSites(entry.config, `${section}.${name}.config`).sites);
|
|
163
|
+
}
|
|
164
|
+
};
|
|
165
|
+
fromMap('adapters', manifest.adapters);
|
|
166
|
+
fromMap('handlers', manifest.handlers);
|
|
167
|
+
fromMap('processors', manifest.processors);
|
|
168
|
+
const slack = manifest.notifiers?.slack_gate?.config;
|
|
169
|
+
if (slack !== undefined) {
|
|
170
|
+
sites.push(...findSecretRefSites(slack, 'notifiers.slack_gate.config').sites);
|
|
171
|
+
}
|
|
172
|
+
return sites;
|
|
173
|
+
}
|
|
174
|
+
//# sourceMappingURL=deployment-manifest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deployment-manifest.js","sourceRoot":"","sources":["../../src/manifest/deployment-manifest.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/** Result of scanning one string value for secret references. */
|
|
2
|
+
export interface SecretScanResult {
|
|
3
|
+
/** Referenced secret NAMEs, in order of appearance (duplicates preserved). */
|
|
4
|
+
refs: string[];
|
|
5
|
+
/** Malformed `${secret:...}`-like fragments (bad charset, unterminated). */
|
|
6
|
+
malformed: string[];
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Scans a string left-to-right honoring the `$$` escape. Well-formed references are
|
|
10
|
+
* collected; anything starting like a reference but not matching the grammar is malformed.
|
|
11
|
+
*/
|
|
12
|
+
export declare function scanSecretString(value: string): SecretScanResult;
|
|
13
|
+
/** True when the string contains at least one well-formed secret reference. */
|
|
14
|
+
export declare function stringHasSecretRefs(value: string): boolean;
|
|
15
|
+
/**
|
|
16
|
+
* Interpolates a string: well-formed references are replaced via `resolve(name)`,
|
|
17
|
+
* `$$` becomes a literal `$`. The caller guarantees every referenced name resolves
|
|
18
|
+
* (the CLI aggregates unresolved references into one loud error BEFORE interpolating).
|
|
19
|
+
*/
|
|
20
|
+
export declare function interpolateSecretString(value: string, resolve: (name: string) => string): string;
|
|
21
|
+
/** One secret reference found in a config tree, with its binding site for error messages. */
|
|
22
|
+
export interface SecretRefSite {
|
|
23
|
+
/** Referenced secret NAME. */
|
|
24
|
+
name: string;
|
|
25
|
+
/** Dot-path binding site, e.g. `adapters.github.config.auth.token`. */
|
|
26
|
+
path: string;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Walks a config tree (objects/arrays/strings) collecting every well-formed secret
|
|
30
|
+
* reference with its binding site. Malformed fragments are collected separately.
|
|
31
|
+
*/
|
|
32
|
+
export declare function findSecretRefSites(node: unknown, basePath: string): {
|
|
33
|
+
sites: SecretRefSite[];
|
|
34
|
+
malformed: Array<{
|
|
35
|
+
path: string;
|
|
36
|
+
fragment: string;
|
|
37
|
+
}>;
|
|
38
|
+
};
|
|
39
|
+
/**
|
|
40
|
+
* Interpolates every string inside a config tree, returning a deep copy.
|
|
41
|
+
* Non-string leaves pass through untouched.
|
|
42
|
+
*/
|
|
43
|
+
export declare function interpolateConfigTree<T>(node: T, resolve: (name: string) => string): T;
|
|
44
|
+
//# sourceMappingURL=secret-refs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secret-refs.d.ts","sourceRoot":"","sources":["../../src/manifest/secret-refs.ts"],"names":[],"mappings":"AAeA,iEAAiE;AACjE,MAAM,WAAW,gBAAgB;IAC/B,8EAA8E;IAC9E,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,4EAA4E;IAC5E,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,gBAAgB,CA4BhE;AAED,+EAA+E;AAC/E,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE1D;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG,MAAM,CAqBhG;AAED,6FAA6F;AAC7F,MAAM,WAAW,aAAa;IAC5B,8BAA8B;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,uEAAuE;IACvE,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,OAAO,EACb,QAAQ,EAAE,MAAM,GACf;IAAE,KAAK,EAAE,aAAa,EAAE,CAAC;IAAC,SAAS,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAoBlF;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG,CAAC,CAetF"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
// Secret-reference grammar for the deployment manifest (v0.14): `${secret:NAME}`.
|
|
2
|
+
//
|
|
3
|
+
// Pure string/tree functions — core owns the GRAMMAR only. Reading secret sources
|
|
4
|
+
// (dotenv files, process.env) and resolving values is the CLI's job.
|
|
5
|
+
//
|
|
6
|
+
// Grammar:
|
|
7
|
+
// - a reference is exactly `${secret:NAME}` with NAME = [A-Z0-9_]+
|
|
8
|
+
// - references are legal ONLY inside string values under `config` trees
|
|
9
|
+
// - composite/embedded references are allowed: "${secret:A}:${secret:B}"
|
|
10
|
+
// - `$$` escapes a literal `$` (so `$${secret:X}` interpolates to the literal text
|
|
11
|
+
// `${secret:X}`); any other `${secret:` occurrence that does not match the full
|
|
12
|
+
// grammar is MALFORMED and must be rejected loudly (typos never pass silently).
|
|
13
|
+
const REF_PATTERN = /^\$\{secret:([A-Z0-9_]+)\}/;
|
|
14
|
+
/**
|
|
15
|
+
* Scans a string left-to-right honoring the `$$` escape. Well-formed references are
|
|
16
|
+
* collected; anything starting like a reference but not matching the grammar is malformed.
|
|
17
|
+
*/
|
|
18
|
+
export function scanSecretString(value) {
|
|
19
|
+
const refs = [];
|
|
20
|
+
const malformed = [];
|
|
21
|
+
let i = 0;
|
|
22
|
+
while (i < value.length) {
|
|
23
|
+
if (value[i] === '$') {
|
|
24
|
+
if (value[i + 1] === '$') {
|
|
25
|
+
i += 2; // escaped literal '$'
|
|
26
|
+
continue;
|
|
27
|
+
}
|
|
28
|
+
const rest = value.slice(i);
|
|
29
|
+
const match = REF_PATTERN.exec(rest);
|
|
30
|
+
if (match !== null) {
|
|
31
|
+
refs.push(match[1]);
|
|
32
|
+
i += match[0].length;
|
|
33
|
+
continue;
|
|
34
|
+
}
|
|
35
|
+
if (rest.startsWith('${secret:') || rest.startsWith('${secret')) {
|
|
36
|
+
// Looks like a reference but is not one — surface the fragment for the error.
|
|
37
|
+
const end = rest.indexOf('}');
|
|
38
|
+
malformed.push(end === -1 ? rest.slice(0, 24) : rest.slice(0, end + 1));
|
|
39
|
+
i += end === -1 ? rest.length : end + 1;
|
|
40
|
+
continue;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
i += 1;
|
|
44
|
+
}
|
|
45
|
+
return { refs, malformed };
|
|
46
|
+
}
|
|
47
|
+
/** True when the string contains at least one well-formed secret reference. */
|
|
48
|
+
export function stringHasSecretRefs(value) {
|
|
49
|
+
return scanSecretString(value).refs.length > 0;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Interpolates a string: well-formed references are replaced via `resolve(name)`,
|
|
53
|
+
* `$$` becomes a literal `$`. The caller guarantees every referenced name resolves
|
|
54
|
+
* (the CLI aggregates unresolved references into one loud error BEFORE interpolating).
|
|
55
|
+
*/
|
|
56
|
+
export function interpolateSecretString(value, resolve) {
|
|
57
|
+
let out = '';
|
|
58
|
+
let i = 0;
|
|
59
|
+
while (i < value.length) {
|
|
60
|
+
if (value[i] === '$') {
|
|
61
|
+
if (value[i + 1] === '$') {
|
|
62
|
+
out += '$';
|
|
63
|
+
i += 2;
|
|
64
|
+
continue;
|
|
65
|
+
}
|
|
66
|
+
const match = REF_PATTERN.exec(value.slice(i));
|
|
67
|
+
if (match !== null) {
|
|
68
|
+
out += resolve(match[1]);
|
|
69
|
+
i += match[0].length;
|
|
70
|
+
continue;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
out += value[i];
|
|
74
|
+
i += 1;
|
|
75
|
+
}
|
|
76
|
+
return out;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Walks a config tree (objects/arrays/strings) collecting every well-formed secret
|
|
80
|
+
* reference with its binding site. Malformed fragments are collected separately.
|
|
81
|
+
*/
|
|
82
|
+
export function findSecretRefSites(node, basePath) {
|
|
83
|
+
const sites = [];
|
|
84
|
+
const malformed = [];
|
|
85
|
+
const walk = (value, path) => {
|
|
86
|
+
if (typeof value === 'string') {
|
|
87
|
+
const scan = scanSecretString(value);
|
|
88
|
+
for (const name of scan.refs)
|
|
89
|
+
sites.push({ name, path });
|
|
90
|
+
for (const fragment of scan.malformed)
|
|
91
|
+
malformed.push({ path, fragment });
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
if (Array.isArray(value)) {
|
|
95
|
+
value.forEach((item, idx) => walk(item, `${path}[${idx}]`));
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
if (typeof value === 'object' && value !== null) {
|
|
99
|
+
for (const [key, child] of Object.entries(value))
|
|
100
|
+
walk(child, `${path}.${key}`);
|
|
101
|
+
}
|
|
102
|
+
};
|
|
103
|
+
walk(node, basePath);
|
|
104
|
+
return { sites, malformed };
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Interpolates every string inside a config tree, returning a deep copy.
|
|
108
|
+
* Non-string leaves pass through untouched.
|
|
109
|
+
*/
|
|
110
|
+
export function interpolateConfigTree(node, resolve) {
|
|
111
|
+
if (typeof node === 'string') {
|
|
112
|
+
return interpolateSecretString(node, resolve);
|
|
113
|
+
}
|
|
114
|
+
if (Array.isArray(node)) {
|
|
115
|
+
return node.map((item) => interpolateConfigTree(item, resolve));
|
|
116
|
+
}
|
|
117
|
+
if (typeof node === 'object' && node !== null) {
|
|
118
|
+
const out = {};
|
|
119
|
+
for (const [key, child] of Object.entries(node)) {
|
|
120
|
+
out[key] = interpolateConfigTree(child, resolve);
|
|
121
|
+
}
|
|
122
|
+
return out;
|
|
123
|
+
}
|
|
124
|
+
return node;
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=secret-refs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secret-refs.js","sourceRoot":"","sources":["../../src/manifest/secret-refs.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAClF,EAAE;AACF,kFAAkF;AAClF,qEAAqE;AACrE,EAAE;AACF,WAAW;AACX,qEAAqE;AACrE,0EAA0E;AAC1E,2EAA2E;AAC3E,qFAAqF;AACrF,oFAAoF;AACpF,oFAAoF;AAEpF,MAAM,WAAW,GAAG,4BAA4B,CAAC;AAUjD;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC5C,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;QACxB,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;YACrB,IAAI,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;gBACzB,CAAC,IAAI,CAAC,CAAC,CAAC,sBAAsB;gBAC9B,SAAS;YACX,CAAC;YACD,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC5B,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACrC,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;gBACnB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC;gBACrB,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;gBACrB,SAAS;YACX,CAAC;YACD,IAAI,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;gBAChE,8EAA8E;gBAC9E,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBAC9B,SAAS,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;gBACxE,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;gBACxC,SAAS;YACX,CAAC;QACH,CAAC;QACD,CAAC,IAAI,CAAC,CAAC;IACT,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;AAC7B,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,mBAAmB,CAAC,KAAa;IAC/C,OAAO,gBAAgB,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;AACjD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,uBAAuB,CAAC,KAAa,EAAE,OAAiC;IACtF,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;QACxB,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;YACrB,IAAI,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;gBACzB,GAAG,IAAI,GAAG,CAAC;gBACX,CAAC,IAAI,CAAC,CAAC;gBACP,SAAS;YACX,CAAC;YACD,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/C,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;gBACnB,GAAG,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC;gBAC1B,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;gBACrB,SAAS;YACX,CAAC;QACH,CAAC;QACD,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC;QAChB,CAAC,IAAI,CAAC,CAAC;IACT,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAUD;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAChC,IAAa,EACb,QAAgB;IAEhB,MAAM,KAAK,GAAoB,EAAE,CAAC;IAClC,MAAM,SAAS,GAA8C,EAAE,CAAC;IAChE,MAAM,IAAI,GAAG,CAAC,KAAc,EAAE,IAAY,EAAQ,EAAE;QAClD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,MAAM,IAAI,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;YACrC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,IAAI;gBAAE,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YACzD,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS;gBAAE,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;YAC1E,OAAO;QACT,CAAC;QACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC;YAC5D,OAAO;QACT,CAAC;QACD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YAChD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;gBAAE,IAAI,CAAC,KAAK,EAAE,GAAG,IAAI,IAAI,GAAG,EAAE,CAAC,CAAC;QAClF,CAAC;IACH,CAAC,CAAC;IACF,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACrB,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;AAC9B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAI,IAAO,EAAE,OAAiC;IACjF,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7B,OAAO,uBAAuB,CAAC,IAAI,EAAE,OAAO,CAAiB,CAAC;IAChE,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,qBAAqB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAiB,CAAC;IAClF,CAAC;IACD,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QAC9C,MAAM,GAAG,GAA4B,EAAE,CAAC;QACxC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YAChD,GAAG,CAAC,GAAG,CAAC,GAAG,qBAAqB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACnD,CAAC;QACD,OAAO,GAAmB,CAAC;IAC7B,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -46,6 +46,20 @@ export interface ExtensionIdentityEntry {
|
|
|
46
46
|
signals?: ExtensionIdentitySignals;
|
|
47
47
|
/** Coverage label of the sweep rules — never 'complete'. */
|
|
48
48
|
coverage: 'dir_tree_v1';
|
|
49
|
+
/**
|
|
50
|
+
* Deployment-manifest identity: the manifest file's path and its raw-bytes sha256
|
|
51
|
+
* (placeholders included — an edited binding IS drift; a rotated secret VALUE is not).
|
|
52
|
+
* The manifest file never contributes a sweep root — only this content hash.
|
|
53
|
+
*/
|
|
54
|
+
manifest?: {
|
|
55
|
+
path: string;
|
|
56
|
+
content_hash: string;
|
|
57
|
+
};
|
|
58
|
+
/**
|
|
59
|
+
* Secret NAMES referenced by the manifest at load time. Recorded, never compared —
|
|
60
|
+
* and never values or value hashes.
|
|
61
|
+
*/
|
|
62
|
+
secret_names?: string[];
|
|
49
63
|
/** Present when --extensions-module replaced the declared modules — omitting it would lie. */
|
|
50
64
|
override_active?: true;
|
|
51
65
|
/** Present when capture (or the extension load itself) failed — the failure is itself a record. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extension-identity.d.ts","sourceRoot":"","sources":["../../src/types/extension-identity.ts"],"names":[],"mappings":"AASA,8CAA8C;AAC9C,MAAM,WAAW,uBAAuB;IACtC,8FAA8F;IAC9F,QAAQ,EAAE,MAAM,CAAC;IACjB,gEAAgE;IAChE,QAAQ,EAAE,MAAM,CAAC;IACjB,gEAAgE;IAChE,UAAU,EAAE,MAAM,CAAC;IACnB,0FAA0F;IAC1F,MAAM,EAAE,KAAK,GAAG,KAAK,GAAG,SAAS,CAAC;CACnC;AAED,gFAAgF;AAChF,MAAM,WAAW,qBAAqB;IACpC,wEAAwE;IACxE,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,wFAAwF;IACxF,KAAK,EAAE,MAAM,CAAC;IACd,mDAAmD;IACnD,UAAU,EAAE,MAAM,CAAC;IACnB,yCAAyC;IACzC,WAAW,EAAE,MAAM,CAAC;IACpB,4DAA4D;IAC5D,SAAS,EAAE,MAAM,CAAC;IAClB,6FAA6F;IAC7F,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,6FAA6F;AAC7F,MAAM,WAAW,wBAAwB;IACvC,mEAAmE;IACnE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gGAAgG;IAChG,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;GAIG;AACH,MAAM,WAAW,sBAAsB;IACrC,yFAAyF;IACzF,WAAW,EAAE,MAAM,CAAC;IACpB,oCAAoC;IACpC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,uBAAuB,EAAE,CAAC;IACnC,IAAI,EAAE,qBAAqB,CAAC;IAC5B,OAAO,CAAC,EAAE,wBAAwB,CAAC;IACnC,4DAA4D;IAC5D,QAAQ,EAAE,aAAa,CAAC;IACxB,8FAA8F;IAC9F,eAAe,CAAC,EAAE,IAAI,CAAC;IACvB,mGAAmG;IACnG,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CACtC,CAAC,EAAE,sBAAsB,EACzB,CAAC,EAAE,sBAAsB,GACxB,OAAO,
|
|
1
|
+
{"version":3,"file":"extension-identity.d.ts","sourceRoot":"","sources":["../../src/types/extension-identity.ts"],"names":[],"mappings":"AASA,8CAA8C;AAC9C,MAAM,WAAW,uBAAuB;IACtC,8FAA8F;IAC9F,QAAQ,EAAE,MAAM,CAAC;IACjB,gEAAgE;IAChE,QAAQ,EAAE,MAAM,CAAC;IACjB,gEAAgE;IAChE,UAAU,EAAE,MAAM,CAAC;IACnB,0FAA0F;IAC1F,MAAM,EAAE,KAAK,GAAG,KAAK,GAAG,SAAS,CAAC;CACnC;AAED,gFAAgF;AAChF,MAAM,WAAW,qBAAqB;IACpC,wEAAwE;IACxE,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,wFAAwF;IACxF,KAAK,EAAE,MAAM,CAAC;IACd,mDAAmD;IACnD,UAAU,EAAE,MAAM,CAAC;IACnB,yCAAyC;IACzC,WAAW,EAAE,MAAM,CAAC;IACpB,4DAA4D;IAC5D,SAAS,EAAE,MAAM,CAAC;IAClB,6FAA6F;IAC7F,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,6FAA6F;AAC7F,MAAM,WAAW,wBAAwB;IACvC,mEAAmE;IACnE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gGAAgG;IAChG,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;GAIG;AACH,MAAM,WAAW,sBAAsB;IACrC,yFAAyF;IACzF,WAAW,EAAE,MAAM,CAAC;IACpB,oCAAoC;IACpC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,uBAAuB,EAAE,CAAC;IACnC,IAAI,EAAE,qBAAqB,CAAC;IAC5B,OAAO,CAAC,EAAE,wBAAwB,CAAC;IACnC,4DAA4D;IAC5D,QAAQ,EAAE,aAAa,CAAC;IACxB;;;;OAIG;IACH,QAAQ,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC;IAClD;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,8FAA8F;IAC9F,eAAe,CAAC,EAAE,IAAI,CAAC;IACvB,mGAAmG;IACnG,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CACtC,CAAC,EAAE,sBAAsB,EACzB,CAAC,EAAE,sBAAsB,GACxB,OAAO,CAST"}
|
|
Binary file
|