@relayflows/sdk 2.0.28 → 2.0.30

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (120) hide show
  1. package/dist/authored-flow-executor.d.ts.map +1 -1
  2. package/dist/authored-flow-executor.js +10 -1
  3. package/dist/authored-flow-executor.js.map +1 -1
  4. package/dist/authored-step-index.d.ts +6 -0
  5. package/dist/authored-step-index.d.ts.map +1 -1
  6. package/dist/authored-step-index.js +42 -14
  7. package/dist/authored-step-index.js.map +1 -1
  8. package/dist/bundle-extensions.d.ts.map +1 -1
  9. package/dist/bundle-extensions.js +4 -7
  10. package/dist/bundle-extensions.js.map +1 -1
  11. package/dist/bundle.d.ts.map +1 -1
  12. package/dist/bundle.js +41 -7
  13. package/dist/bundle.js.map +1 -1
  14. package/dist/canonical.d.ts.map +1 -1
  15. package/dist/canonical.js +18 -6
  16. package/dist/canonical.js.map +1 -1
  17. package/dist/cli/status.d.ts +12 -0
  18. package/dist/cli/status.d.ts.map +1 -1
  19. package/dist/cli/status.js +39 -1
  20. package/dist/cli/status.js.map +1 -1
  21. package/dist/flow-extension-compat.d.ts.map +1 -1
  22. package/dist/flow-extension-compat.js +26 -8
  23. package/dist/flow-extension-compat.js.map +1 -1
  24. package/dist/flow-extension-loader.d.ts +7 -0
  25. package/dist/flow-extension-loader.d.ts.map +1 -1
  26. package/dist/flow-extension-loader.js +48 -22
  27. package/dist/flow-extension-loader.js.map +1 -1
  28. package/dist/fs-descriptor.d.ts +17 -0
  29. package/dist/fs-descriptor.d.ts.map +1 -0
  30. package/dist/fs-descriptor.js +96 -0
  31. package/dist/fs-descriptor.js.map +1 -0
  32. package/dist/hosted-base-snapshot.d.ts +25 -0
  33. package/dist/hosted-base-snapshot.d.ts.map +1 -0
  34. package/dist/hosted-base-snapshot.js +278 -0
  35. package/dist/hosted-base-snapshot.js.map +1 -0
  36. package/dist/hosted-extension-declarations.d.ts +10 -0
  37. package/dist/hosted-extension-declarations.d.ts.map +1 -0
  38. package/dist/hosted-extension-declarations.js +272 -0
  39. package/dist/hosted-extension-declarations.js.map +1 -0
  40. package/dist/hosted-extension-isolation.d.ts +82 -0
  41. package/dist/hosted-extension-isolation.d.ts.map +1 -0
  42. package/dist/hosted-extension-isolation.js +322 -0
  43. package/dist/hosted-extension-isolation.js.map +1 -0
  44. package/dist/hosted-extension-manifest.d.ts +9 -0
  45. package/dist/hosted-extension-manifest.d.ts.map +1 -0
  46. package/dist/hosted-extension-manifest.js +235 -0
  47. package/dist/hosted-extension-manifest.js.map +1 -0
  48. package/dist/hosted-extension-protocol.d.ts +16 -0
  49. package/dist/hosted-extension-protocol.d.ts.map +1 -0
  50. package/dist/hosted-extension-protocol.js +224 -0
  51. package/dist/hosted-extension-protocol.js.map +1 -0
  52. package/dist/hosted-extension-runtime.d.ts +30 -0
  53. package/dist/hosted-extension-runtime.d.ts.map +1 -0
  54. package/dist/hosted-extension-runtime.js +167 -0
  55. package/dist/hosted-extension-runtime.js.map +1 -0
  56. package/dist/hosted-extension-sandbox-source.d.ts +9 -0
  57. package/dist/hosted-extension-sandbox-source.d.ts.map +1 -0
  58. package/dist/hosted-extension-sandbox-source.js +95 -0
  59. package/dist/hosted-extension-sandbox-source.js.map +1 -0
  60. package/dist/hosted-extension-sandbox.d.ts +39 -0
  61. package/dist/hosted-extension-sandbox.d.ts.map +1 -0
  62. package/dist/hosted-extension-sandbox.js +418 -0
  63. package/dist/hosted-extension-sandbox.js.map +1 -0
  64. package/dist/hosted-project.d.ts +3 -0
  65. package/dist/hosted-project.d.ts.map +1 -0
  66. package/dist/hosted-project.js +19 -0
  67. package/dist/hosted-project.js.map +1 -0
  68. package/dist/hosted-promise-safety.d.ts +12 -0
  69. package/dist/hosted-promise-safety.d.ts.map +1 -0
  70. package/dist/hosted-promise-safety.js +63 -0
  71. package/dist/hosted-promise-safety.js.map +1 -0
  72. package/dist/index.d.ts +2 -0
  73. package/dist/index.d.ts.map +1 -1
  74. package/dist/index.js +2 -0
  75. package/dist/index.js.map +1 -1
  76. package/dist/intrinsic-array.d.ts +3 -0
  77. package/dist/intrinsic-array.d.ts.map +1 -0
  78. package/dist/intrinsic-array.js +14 -0
  79. package/dist/intrinsic-array.js.map +1 -0
  80. package/dist/json-value.d.ts +6 -1
  81. package/dist/json-value.d.ts.map +1 -1
  82. package/dist/json-value.js +155 -36
  83. package/dist/json-value.js.map +1 -1
  84. package/dist/llm-worker.d.ts +9 -0
  85. package/dist/llm-worker.d.ts.map +1 -1
  86. package/dist/llm-worker.js +15 -1
  87. package/dist/llm-worker.js.map +1 -1
  88. package/dist/plugin-store.d.ts +8 -2
  89. package/dist/plugin-store.d.ts.map +1 -1
  90. package/dist/plugin-store.js +233 -56
  91. package/dist/plugin-store.js.map +1 -1
  92. package/dist/semver-range.d.ts.map +1 -1
  93. package/dist/semver-range.js +27 -15
  94. package/dist/semver-range.js.map +1 -1
  95. package/package.json +2 -2
  96. package/src/authored-flow-executor.ts +10 -1
  97. package/src/authored-step-index.ts +46 -12
  98. package/src/bundle-extensions.ts +6 -5
  99. package/src/bundle.ts +52 -7
  100. package/src/canonical.ts +20 -6
  101. package/src/cli/status.ts +50 -1
  102. package/src/flow-extension-compat.ts +32 -7
  103. package/src/flow-extension-loader.ts +56 -21
  104. package/src/fs-descriptor.ts +127 -0
  105. package/src/hosted-base-snapshot.ts +351 -0
  106. package/src/hosted-extension-declarations.ts +387 -0
  107. package/src/hosted-extension-isolation.ts +457 -0
  108. package/src/hosted-extension-manifest.ts +249 -0
  109. package/src/hosted-extension-protocol.ts +262 -0
  110. package/src/hosted-extension-runtime.ts +266 -0
  111. package/src/hosted-extension-sandbox-source.ts +94 -0
  112. package/src/hosted-extension-sandbox.ts +489 -0
  113. package/src/hosted-project.ts +18 -0
  114. package/src/hosted-promise-safety.ts +68 -0
  115. package/src/index.ts +18 -0
  116. package/src/intrinsic-array.ts +14 -0
  117. package/src/json-value.ts +184 -32
  118. package/src/llm-worker.ts +15 -1
  119. package/src/plugin-store.ts +323 -56
  120. package/src/semver-range.ts +39 -14
@@ -0,0 +1,82 @@
1
+ import type { FlowExtensionManifest } from './flow-extension-manifest.js';
2
+ import { type HostedExtensionDispatch } from './flow-extension-loader.js';
3
+ import { type HostedExtensionArtifact, type HostedExtensionBase, type HostedExtensionInstallation } from './hosted-extension-runtime.js';
4
+ import { type HostedExtensionProtocolResult } from './hosted-extension-protocol.js';
5
+ export { loadHostedExtensionArtifacts, loadHostedExtensionBase, loadHostedExtensionRuntime, } from './hosted-extension-runtime.js';
6
+ export type { HostedExtensionArtifact, HostedExtensionBase, HostedExtensionInstallation, HostedExtensionRuntime, } from './hosted-extension-runtime.js';
7
+ export interface HostedCapabilityAuthority {
8
+ readonly dispatch: HostedExtensionDispatch;
9
+ readonly extension: Readonly<{
10
+ name: string;
11
+ version: string;
12
+ ref: string;
13
+ digest: string;
14
+ }>;
15
+ }
16
+ export interface HostedBabysitterCapability {
17
+ queue(request: unknown, authority: HostedCapabilityAuthority): Promise<unknown>;
18
+ }
19
+ export interface RunHostedExtensionOptions {
20
+ /** Complete, lock-ordered set returned by loadHostedExtensionRuntime. */
21
+ readonly installation: HostedExtensionInstallation;
22
+ /** Same-generation base returned by loadHostedExtensionRuntime. */
23
+ readonly base: HostedExtensionBase;
24
+ readonly dispatch: HostedExtensionDispatch;
25
+ /** Host-normalized delivery descriptor. Its event identity must equal dispatch. */
26
+ readonly input: unknown;
27
+ readonly babysitterTurn: HostedBabysitterCapability;
28
+ readonly timeoutMs?: number;
29
+ /** Test/packaging override. Production resolves /usr/bin/bwrap. */
30
+ readonly bubblewrapPath?: string;
31
+ /** Test/packaging override. Defaults to the current, fingerprinted Node executable. */
32
+ readonly nodePath?: string;
33
+ /** Test/packaging override. Production resolves /usr/bin/prlimit. */
34
+ readonly prlimitPath?: string;
35
+ }
36
+ export type HostedExtensionResult = HostedExtensionProtocolResult;
37
+ /**
38
+ * Execute a capability-only hosted extension in a Linux mount/PID/network/user
39
+ * namespace. The extension is first imported inside that namespace. It sees
40
+ * no host workspace, environment credentials, network, child process, MCP,
41
+ * helpers, harnesses, or base-flow context. The parent exposes exactly one
42
+ * authenticated capability adapter and passes the original branded dispatch
43
+ * authority to that adapter out of band.
44
+ *
45
+ * This is deliberately not wired into executeAuthoredFlow yet. #549's refusal
46
+ * remains the rollout gate until the Cloud adapter and independent review land.
47
+ */
48
+ export declare function runHostedCapabilityExtension(options: RunHostedExtensionOptions): Promise<HostedExtensionResult>;
49
+ interface RunVerifiedNativeExtensionOptions {
50
+ readonly artifact: HostedExtensionArtifact;
51
+ readonly manifest: FlowExtensionManifest;
52
+ readonly dispatch: HostedExtensionDispatch;
53
+ readonly input: unknown;
54
+ readonly babysitterTurn: HostedBabysitterCapability;
55
+ readonly timeoutMs?: number;
56
+ readonly bubblewrapPath?: string;
57
+ readonly nodePath?: string;
58
+ readonly prlimitPath?: string;
59
+ readonly surfaceRoot?: string;
60
+ readonly beforeLaunch?: () => Promise<void>;
61
+ }
62
+ /** @internal Security-harness seam; not exported from the SDK package root. */
63
+ export declare function runVerifiedNativeExtensionSandbox(options: RunVerifiedNativeExtensionOptions): Promise<HostedExtensionResult>;
64
+ /** @internal Selection seam used by compatibility/security regression tests. */
65
+ export declare function selectHostedExtensionForRuntime(value: HostedExtensionInstallation, base: HostedExtensionBase, identity: {
66
+ readonly provider: string;
67
+ readonly event: string;
68
+ readonly action?: string;
69
+ }, versions: Readonly<{
70
+ sdk: string;
71
+ surface: string;
72
+ }>): Promise<{
73
+ artifact: HostedExtensionArtifact;
74
+ manifest: FlowExtensionManifest;
75
+ }>;
76
+ /** Generic handlers overlap action-specific deliveries, matching the SDK handler router. */
77
+ export declare function hostedManifestRoutes(manifest: Pick<FlowExtensionManifest, 'triggers'>, identity: {
78
+ readonly provider: string;
79
+ readonly event: string;
80
+ readonly action?: string;
81
+ }): boolean;
82
+ //# sourceMappingURL=hosted-extension-isolation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hosted-extension-isolation.d.ts","sourceRoot":"","sources":["../src/hosted-extension-isolation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,322 @@
1
+ import { canonicalize } from './canonical.js';
2
+ import { sha256 } from './bundle.js';
3
+ import { validateHostedFlowExtensionManifest } from './hosted-extension-manifest.js';
4
+ import { assertBaseCompatible, assertCompatible, runtimeVersions } from './flow-extension-compat.js';
5
+ import { hostedExtensionDispatchIdentity, } from './flow-extension-loader.js';
6
+ import { assertHostedInstallationAuthority, assertHostedRuntimeAuthority, } from './hosted-extension-runtime.js';
7
+ import { PluginError } from './plugin-manifest.js';
8
+ import { assertHostedPromiseSafety, frozenHostedPromiseValue, } from './hosted-promise-safety.js';
9
+ import { appendIntrinsicArray } from './intrinsic-array.js';
10
+ import { readStoredPluginFiles } from './plugin-store.js';
11
+ import { boundedJsonSnapshot, } from './hosted-extension-protocol.js';
12
+ import { runHostedExtensionSandbox } from './hosted-extension-sandbox.js';
13
+ export { loadHostedExtensionArtifacts, loadHostedExtensionBase, loadHostedExtensionRuntime, } from './hosted-extension-runtime.js';
14
+ const HOSTED_WRITE = 'cloud:babysitter-turn';
15
+ const ARRAY_IS_ARRAY = Array.isArray;
16
+ const BUFFER_TO_STRING = Function.prototype.call.bind(Buffer.prototype.toString);
17
+ const JSON_PARSE = JSON.parse;
18
+ const NUMBER_IS_SAFE_INTEGER = Number.isSafeInteger;
19
+ const OBJECT_HAS_OWN = Object.hasOwn;
20
+ const OBJECT_FREEZE = Object.freeze;
21
+ const OBJECT_GET_OWN_PROPERTY_DESCRIPTOR = Object.getOwnPropertyDescriptor;
22
+ const OBJECT_KEYS = Object.keys;
23
+ const REGEXP_TEST = Function.prototype.call.bind(RegExp.prototype.test);
24
+ const STRING_STARTS_WITH = Function.prototype.call.bind(String.prototype.startsWith);
25
+ const BABYSITTER_REF = 'github:AgentWorkforce/flows@8b33ebab8347514f80d9da5a81206a087f641714#extensions/babysitter';
26
+ const BABYSITTER_DIGEST = 'bdf2187b9a242667d34bbc63e7a744753e146dc8cd6f4047047f2aed28f406ee';
27
+ const BABYSITTER_MANIFEST_SHA256 = '5631a06bbdc8186f4ee0ff955610ead24d001c5197b59fb1fe81fe422c44f226';
28
+ const DELIVERY_ID = /^[A-Za-z0-9_.:-]{1,200}$/;
29
+ const RECEIPT_ID = /^[A-Za-z0-9_.:-]{1,200}$/;
30
+ const OWNER = /^[A-Za-z0-9](?:[A-Za-z0-9-]{0,38})$/;
31
+ const REPOSITORY = /^[A-Za-z0-9._-]{1,100}$/;
32
+ const HEAD_SHA = /^[a-f0-9]{40}$/;
33
+ const NATIVE_TRIGGERS = [
34
+ { provider: 'github', event: 'pull_request', actions: ['opened', 'synchronize', 'reopened', 'ready_for_review', 'closed', 'labeled', 'unlabeled'] },
35
+ { provider: 'github', event: 'pull_request_review', actions: ['submitted', 'dismissed'] },
36
+ { provider: 'github', event: 'check_run', actions: ['completed'] },
37
+ { provider: 'github', event: 'issue_comment', actions: ['created'] },
38
+ ];
39
+ /**
40
+ * Execute a capability-only hosted extension in a Linux mount/PID/network/user
41
+ * namespace. The extension is first imported inside that namespace. It sees
42
+ * no host workspace, environment credentials, network, child process, MCP,
43
+ * helpers, harnesses, or base-flow context. The parent exposes exactly one
44
+ * authenticated capability adapter and passes the original branded dispatch
45
+ * authority to that adapter out of band.
46
+ *
47
+ * This is deliberately not wired into executeAuthoredFlow yet. #549's refusal
48
+ * remains the rollout gate until the Cloud adapter and independent review land.
49
+ */
50
+ export async function runHostedCapabilityExtension(options) {
51
+ assertHostedPromiseSafety('plugin_unsupported');
52
+ const identity = hostedExtensionDispatchIdentity(options.dispatch);
53
+ await assertHostedRuntimeAuthority(options.installation, options.base);
54
+ const { artifact, manifest } = await selectHostedExtensionForRuntime(options.installation, options.base, identity, runtimeVersions());
55
+ return await runVerifiedNativeExtensionSandbox({
56
+ ...options,
57
+ artifact,
58
+ manifest,
59
+ beforeLaunch: () => assertHostedRuntimeAuthority(options.installation, options.base),
60
+ });
61
+ }
62
+ /** @internal Security-harness seam; not exported from the SDK package root. */
63
+ export async function runVerifiedNativeExtensionSandbox(options) {
64
+ assertHostedPromiseSafety('plugin_unsupported');
65
+ assertCapabilityOnlyManifest(options.manifest);
66
+ const identity = hostedExtensionDispatchIdentity(options.dispatch);
67
+ assertManifestRoutes(options.manifest, identity);
68
+ const normalizedInput = babysitterInput(options.input, options.dispatch);
69
+ const versions = runtimeVersions();
70
+ const authority = OBJECT_FREEZE({
71
+ dispatch: options.dispatch,
72
+ extension: OBJECT_FREEZE({
73
+ name: options.manifest.name,
74
+ version: options.manifest.version,
75
+ ref: options.artifact.ref,
76
+ digest: options.artifact.digest,
77
+ }),
78
+ });
79
+ return await runHostedExtensionSandbox({
80
+ artifactDirectory: options.artifact.directory,
81
+ artifactDigest: options.artifact.digest,
82
+ entry: options.manifest.entry,
83
+ surfaceVersion: versions.surface,
84
+ identity,
85
+ input: normalizedInput,
86
+ timeoutMs: ownOption(options, 'timeoutMs'),
87
+ bubblewrapPath: ownOption(options, 'bubblewrapPath'),
88
+ nodePath: ownOption(options, 'nodePath'),
89
+ prlimitPath: ownOption(options, 'prlimitPath'),
90
+ surfaceRoot: ownOption(options, 'surfaceRoot'),
91
+ beforeLaunch: ownOption(options, 'beforeLaunch'),
92
+ invoke: async (request) => babysitterReceipt(await options.babysitterTurn.queue(babysitterRequest(request, normalizedInput, options.dispatch), authority)),
93
+ });
94
+ }
95
+ /** @internal Selection seam used by compatibility/security regression tests. */
96
+ export async function selectHostedExtensionForRuntime(value, base, identity, versions) {
97
+ assertHostedPromiseSafety('plugin_source_invalid');
98
+ assertHostedInstallationAuthority(value);
99
+ if (typeof base !== 'object' || base === null || typeof base.name !== 'string'
100
+ || (base.version !== undefined && typeof base.version !== 'string')) {
101
+ throw new PluginError('plugin_incompatible', 'Hosted base identity is malformed.');
102
+ }
103
+ const matches = [];
104
+ for (let index = 0; index < value.artifacts.length; index += 1) {
105
+ const artifact = value.artifacts[index];
106
+ const manifest = await verifiedManifest(artifact);
107
+ assertCompatible(manifest, versions);
108
+ assertBaseCompatible(manifest, base);
109
+ if (hostedManifestRoutes(manifest, identity))
110
+ appendIntrinsicArray(matches, { artifact, manifest });
111
+ }
112
+ if (matches.length > 1) {
113
+ throw new PluginError('plugin_event_ambiguous', `Hosted event matches multiple extension manifests (${manifestNames(matches)}).`);
114
+ }
115
+ const selected = matches[0];
116
+ if (selected === undefined || selected.artifact.ref !== BABYSITTER_REF) {
117
+ throw new PluginError('plugin_event_unroutable', 'Hosted event does not route to the pinned native Babysitter extension.');
118
+ }
119
+ await assertPinnedBabysitter(selected.artifact);
120
+ assertCapabilityOnlyManifest(selected.manifest);
121
+ return frozenHostedPromiseValue(selected);
122
+ }
123
+ async function verifiedManifest(artifact) {
124
+ if (!matches(/^[a-f0-9]{64}$/, artifact.digest) || !matches(/^[a-f0-9]{64}$/, artifact.manifestSha256)) {
125
+ throw new PluginError('plugin_source_drift', `${artifact.ref}: hosted extension digests are malformed.`);
126
+ }
127
+ const stored = await readStoredPluginFiles(artifact.directory, artifact.digest);
128
+ let bytes;
129
+ for (let index = 0; index < stored.length; index += 1) {
130
+ if (stored[index].path === 'flows-plugin.json')
131
+ bytes = stored[index].data;
132
+ }
133
+ if (bytes === undefined) {
134
+ throw new PluginError('plugin_source_drift', `${artifact.ref}: flows-plugin.json is missing.`);
135
+ }
136
+ if (sha256(bytes) !== artifact.manifestSha256) {
137
+ throw new PluginError('plugin_source_drift', `${artifact.ref}: flows-plugin.json differs from the lockfile's manifest hash.`);
138
+ }
139
+ let input;
140
+ try {
141
+ input = JSON_PARSE(BUFFER_TO_STRING(bytes, 'utf8'));
142
+ }
143
+ catch {
144
+ throw new PluginError('plugin_manifest_invalid', `${artifact.ref}: flows-plugin.json is not valid JSON.`);
145
+ }
146
+ const manifest = validateHostedFlowExtensionManifest(input);
147
+ if (manifest.name !== artifact.name || manifest.version !== artifact.version) {
148
+ throw new PluginError('plugin_source_drift', `${artifact.ref}: manifest names ${manifest.name}@${manifest.version}, lockfile has ${artifact.name}@${artifact.version}.`);
149
+ }
150
+ return manifest;
151
+ }
152
+ async function assertPinnedBabysitter(artifact) {
153
+ if (artifact.ref !== BABYSITTER_REF || artifact.name !== 'babysitter' || artifact.version !== '0.2.0'
154
+ || artifact.digest !== BABYSITTER_DIGEST || artifact.manifestSha256 !== BABYSITTER_MANIFEST_SHA256) {
155
+ throw new PluginError('plugin_source_invalid', 'Hosted capability isolation accepts only the reviewed native Babysitter artifact.');
156
+ }
157
+ const stored = await readStoredPluginFiles(artifact.directory, artifact.digest);
158
+ for (let index = 0; index < stored.length; index += 1) {
159
+ const path = stored[index].path;
160
+ if (path === 'node_modules' || STRING_STARTS_WITH(path, 'node_modules/')) {
161
+ throw new PluginError('plugin_source_drift', `${artifact.ref}: hosted extensions cannot carry node_modules.`);
162
+ }
163
+ }
164
+ }
165
+ function assertCapabilityOnlyManifest(manifest) {
166
+ const expected = {
167
+ integrations: ['github'], harnesses: ['codex'], mcp: [], writes: [HOSTED_WRITE],
168
+ base: [{ name: 'software-factory', version: '*' }],
169
+ budget: { dollars: 1, wallclock: '5m' },
170
+ triggers: NATIVE_TRIGGERS,
171
+ };
172
+ const actual = {
173
+ integrations: manifest.permissions.integrations,
174
+ harnesses: manifest.permissions.harnesses,
175
+ mcp: manifest.permissions.mcp,
176
+ writes: manifest.permissions.writes,
177
+ base: manifest.compat.base,
178
+ budget: manifest.permissions.budget,
179
+ triggers: manifest.triggers,
180
+ };
181
+ if (canonicalize(actual) !== canonicalize(expected)
182
+ || manifest.name !== 'babysitter'
183
+ || manifest.entry !== 'babysitter.flow.ts'
184
+ || !manifest.extends.handlers || manifest.extends.hooks.length !== 0
185
+ || manifest.preflight.credentials.length !== 0 || manifest.preflight.servers.length !== 0) {
186
+ throw new PluginError('plugin_unsupported', `${manifest.name}: hosted capability isolation accepts only the native Babysitter permission profile.`);
187
+ }
188
+ }
189
+ function assertManifestRoutes(manifest, identity) {
190
+ if (!hostedManifestRoutes(manifest, identity)) {
191
+ throw new PluginError('plugin_event_unroutable', `${manifest.name}: hosted event is not declared exactly once.`);
192
+ }
193
+ }
194
+ /** Generic handlers overlap action-specific deliveries, matching the SDK handler router. */
195
+ export function hostedManifestRoutes(manifest, identity) {
196
+ for (let triggerIndex = 0; triggerIndex < manifest.triggers.length; triggerIndex += 1) {
197
+ const trigger = manifest.triggers[triggerIndex];
198
+ if (trigger.provider !== identity.provider || trigger.event !== identity.event)
199
+ continue;
200
+ if (trigger.actions.length === 0)
201
+ return true;
202
+ if (identity.action === undefined)
203
+ continue;
204
+ for (let actionIndex = 0; actionIndex < trigger.actions.length; actionIndex += 1) {
205
+ if (trigger.actions[actionIndex] === identity.action)
206
+ return true;
207
+ }
208
+ }
209
+ return false;
210
+ }
211
+ function babysitterInput(input, dispatch) {
212
+ const snapshot = boundedJsonSnapshot(input, 'hosted extension input');
213
+ const top = exactRecord(snapshot, 'Hosted extension input', ['event', 'pullRequest']);
214
+ const event = exactRecord(top.event, 'Hosted extension event', ['provider', 'eventType', 'deliveryId']);
215
+ const pullRequest = optionalRecord(top.pullRequest, 'Hosted extension pull request', ['host', 'owner', 'repo', 'number', 'headSha'], ['owner', 'repo', 'number']);
216
+ if (event.provider !== dispatch.provider || event.eventType !== dispatch.eventType
217
+ || event.deliveryId !== dispatch.deliveryId || event.provider !== 'github'
218
+ || typeof event.deliveryId !== 'string' || !matches(DELIVERY_ID, event.deliveryId)
219
+ || (pullRequest.host !== undefined && pullRequest.host !== 'github')
220
+ || typeof pullRequest.owner !== 'string' || !matches(OWNER, pullRequest.owner)
221
+ || typeof pullRequest.repo !== 'string' || !matches(REPOSITORY, pullRequest.repo)
222
+ || pullRequest.repo === '.' || pullRequest.repo === '..'
223
+ || typeof pullRequest.number !== 'number' || !NUMBER_IS_SAFE_INTEGER(pullRequest.number) || pullRequest.number <= 0
224
+ || (pullRequest.headSha !== undefined
225
+ && (typeof pullRequest.headSha !== 'string' || !matches(HEAD_SHA, pullRequest.headSha)))) {
226
+ throw new PluginError('plugin_event_unroutable', 'Hosted extension input does not match the verified GitHub delivery.');
227
+ }
228
+ return snapshot;
229
+ }
230
+ function babysitterRequest(value, input, dispatch) {
231
+ const snapshot = boundedJsonSnapshot(value, 'Babysitter capability request');
232
+ const request = exactRecord(snapshot, 'Babysitter capability request', ['delivery']);
233
+ const delivery = exactRecord(request.delivery, 'Babysitter delivery', ['deliveryId', 'provider', 'eventType', 'pullRequest']);
234
+ const pullRequest = exactRecord(delivery.pullRequest, 'Babysitter pull request', ['owner', 'repository', 'number']);
235
+ const normalized = exactRecord(input, 'Hosted extension input', ['event', 'pullRequest']);
236
+ const inputPullRequest = record(normalized.pullRequest, 'Hosted extension pull request');
237
+ if (delivery.deliveryId !== dispatch.deliveryId
238
+ || typeof delivery.deliveryId !== 'string' || !matches(DELIVERY_ID, delivery.deliveryId)
239
+ || delivery.provider !== 'github' || delivery.eventType !== dispatch.eventType
240
+ || typeof pullRequest.owner !== 'string' || !matches(OWNER, pullRequest.owner)
241
+ || typeof pullRequest.repository !== 'string' || !matches(REPOSITORY, pullRequest.repository)
242
+ || pullRequest.repository === '.' || pullRequest.repository === '..'
243
+ || typeof pullRequest.number !== 'number' || !NUMBER_IS_SAFE_INTEGER(pullRequest.number) || pullRequest.number <= 0
244
+ || pullRequest.owner !== inputPullRequest.owner
245
+ || pullRequest.repository !== inputPullRequest.repo
246
+ || pullRequest.number !== inputPullRequest.number) {
247
+ throw new PluginError('plugin_event_unroutable', 'Babysitter capability request does not match verified delivery input.');
248
+ }
249
+ return snapshot;
250
+ }
251
+ function babysitterReceipt(value) {
252
+ const snapshot = boundedJsonSnapshot(value, 'Babysitter capability receipt');
253
+ if (typeof snapshot !== 'object' || snapshot === null || ARRAY_IS_ARRAY(snapshot)) {
254
+ throw new PluginError('plugin_unsupported', 'Babysitter capability returned an invalid receipt.');
255
+ }
256
+ const receipt = snapshot;
257
+ if (!hasExactKeys(receipt, ['receiptId', 'status'])
258
+ || typeof receipt.receiptId !== 'string' || !matches(RECEIPT_ID, receipt.receiptId)
259
+ || (receipt.status !== 'queued' && receipt.status !== 'duplicate')) {
260
+ throw new PluginError('plugin_unsupported', 'Babysitter capability returned an invalid receipt.');
261
+ }
262
+ return OBJECT_FREEZE({ receiptId: receipt.receiptId, status: receipt.status });
263
+ }
264
+ function matches(pattern, value) {
265
+ return REGEXP_TEST(pattern, value);
266
+ }
267
+ function ownOption(options, name) {
268
+ const descriptor = OBJECT_GET_OWN_PROPERTY_DESCRIPTOR(options, name);
269
+ return descriptor !== undefined && 'value' in descriptor ? descriptor.value : undefined;
270
+ }
271
+ function record(value, what) {
272
+ if (typeof value !== 'object' || value === null || ARRAY_IS_ARRAY(value)) {
273
+ throw new PluginError('plugin_event_unroutable', `${what} must be an object.`);
274
+ }
275
+ return value;
276
+ }
277
+ function exactRecord(value, what, keys) {
278
+ const object = record(value, what);
279
+ if (!hasExactKeys(object, keys)) {
280
+ throw new PluginError('plugin_event_unroutable', `${what} has an invalid field set.`);
281
+ }
282
+ return object;
283
+ }
284
+ function optionalRecord(value, what, allowed, required) {
285
+ const object = record(value, what);
286
+ const actual = OBJECT_KEYS(object);
287
+ for (let index = 0; index < actual.length; index += 1) {
288
+ if (!contains(allowed, actual[index])) {
289
+ throw new PluginError('plugin_event_unroutable', `${what} has an invalid field set.`);
290
+ }
291
+ }
292
+ for (let index = 0; index < required.length; index += 1) {
293
+ if (!OBJECT_HAS_OWN(object, required[index])) {
294
+ throw new PluginError('plugin_event_unroutable', `${what} has an invalid field set.`);
295
+ }
296
+ }
297
+ return object;
298
+ }
299
+ function hasExactKeys(value, keys) {
300
+ if (OBJECT_KEYS(value).length !== keys.length)
301
+ return false;
302
+ for (let index = 0; index < keys.length; index += 1) {
303
+ if (!OBJECT_HAS_OWN(value, keys[index]))
304
+ return false;
305
+ }
306
+ return true;
307
+ }
308
+ function contains(values, expected) {
309
+ for (let index = 0; index < values.length; index += 1) {
310
+ if (values[index] === expected)
311
+ return true;
312
+ }
313
+ return false;
314
+ }
315
+ function manifestNames(matches) {
316
+ let value = '';
317
+ for (let index = 0; index < matches.length; index += 1) {
318
+ value += `${index === 0 ? '' : ', '}${matches[index].manifest.name}`;
319
+ }
320
+ return value;
321
+ }
322
+ //# sourceMappingURL=hosted-extension-isolation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hosted-extension-isolation.js","sourceRoot":"","sources":["../src/hosted-extension-isolation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { FlowExtensionManifest } from './flow-extension-manifest.js';
2
+ /**
3
+ * Hosted manifests are parsed after authored code may have executed. Keep this
4
+ * projection deliberately narrower than the authoring validator and use only
5
+ * module-captured intrinsics. The only manifest that can launch is separately
6
+ * pinned by exact ref, payload digest, and manifest digest.
7
+ */
8
+ export declare function validateHostedFlowExtensionManifest(input: unknown): FlowExtensionManifest;
9
+ //# sourceMappingURL=hosted-extension-manifest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hosted-extension-manifest.d.ts","sourceRoot":"","sources":["../src/hosted-extension-manifest.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAEV,qBAAqB,EAGtB,MAAM,8BAA8B,CAAC;AAwCtC;;;;;GAKG;AACH,wBAAgB,mCAAmC,CAAC,KAAK,EAAE,OAAO,GAAG,qBAAqB,CAgDzF"}