@floegence/redevplugin-ui 1.1.3 → 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,3 +1,5 @@
1
+ export declare const surfaceAPIMajor: 1;
2
+ /** @deprecated Internal frozen transport alias. Plugin code should use surfaceAPIMajor. */
1
3
  export declare const pluginUIProtocolVersion: "plugin-ui-v7";
2
4
  export declare const pluginHostProtocolVersion: "plugin-host-v11";
3
5
  export declare const bridgeSchemaVersion: "bridge-v7";
@@ -11,9 +13,9 @@ export declare const redevPluginContractVersions: {
11
13
  readonly bridge_schema_version: "bridge-v7";
12
14
  }];
13
15
  readonly plugin_host_protocol_version: "plugin-host-v11";
14
- readonly rust_ipc_version: "rust-ipc-v6";
16
+ readonly rust_ipc_version: "rust-ipc-v7";
15
17
  readonly wasm_abi_version: "redevplugin-wasm-worker-v2";
16
- readonly manifest_schema_version: "manifest-v8";
18
+ readonly manifest_schema_version: "manifest-v9";
17
19
  readonly package_signature_schema_version: "package-signature-v1";
18
20
  readonly release_metadata_schema_version: "release-metadata-v8";
19
21
  readonly release_root_delegation_schema_version: "release-root-delegation-v1";
@@ -29,9 +31,10 @@ export declare const redevPluginContractVersions: {
29
31
  readonly network_grant_schema_version: "network-grant-v2";
30
32
  readonly resource_scope_schema_version: "resource-scope-v1";
31
33
  readonly session_scope_schema_version: "session-scope-v1";
32
- readonly plugin_platform_openapi_version: "plugin-platform-v15";
33
- readonly compatibility_manifest_version: "redevplugin.compatibility.v18";
34
- readonly compatibility_schema_version: "compatibility-manifest-v18";
34
+ readonly plugin_platform_openapi_version: "plugin-platform-v17";
35
+ readonly public_api_catalog_version: "public-api-v1";
36
+ readonly compatibility_manifest_version: "redevplugin.compatibility.v20";
37
+ readonly compatibility_schema_version: "compatibility-manifest-v20";
35
38
  readonly worker_invocation_schema_version: "worker-invocation-v3";
36
39
  readonly host_capability_contract_schema_version: "host-capability-contract-v1";
37
40
  readonly host_capability_pin_schema_version: "host-capability-pin-v1";
@@ -42,7 +45,7 @@ export declare const redevPluginContractVersions: {
42
45
  readonly platform_package_set_schema_version: "platform-package-set-v3";
43
46
  readonly platform_package_publication_schema_version: "platform-package-publication-v2";
44
47
  readonly runtime_admission_schema_version: "runtime-admission-v1";
45
- readonly runtime_descriptor_schema_version: "runtime-descriptor-v2";
48
+ readonly runtime_descriptor_schema_version: "runtime-descriptor-v3";
46
49
  readonly owner_scope_inventory_registry_version: "owner-scope-inventory-registry-v1";
47
50
  readonly owner_scope_inventory_schema_version: "owner-scope-inventory-v1";
48
51
  readonly owner_scope_migration_schema_version: "owner-scope-migration-v1";
@@ -59,9 +62,9 @@ export type ReDevPluginContractArtifact = {
59
62
  };
60
63
  export declare const redevPluginContractArtifacts: readonly [{
61
64
  readonly id: "compatibility-manifest-schema";
62
- readonly path: "spec/plugin/compatibility-manifest-v18.schema.json";
63
- readonly version: "compatibility-manifest-v18";
64
- readonly sha256: "48889bd7ddd936b9757a56b1b154244abc6904bd8e55e177e80ae4509d15ce06";
65
+ readonly path: "spec/plugin/compatibility-manifest-v20.schema.json";
66
+ readonly version: "compatibility-manifest-v20";
67
+ readonly sha256: "8ace15ee3f0bb05e5cdd3449385dd498e37f5fb2e22a67302efb5efeaee1aa02";
65
68
  }, {
66
69
  readonly id: "contract-registry-schema";
67
70
  readonly path: "spec/plugin/contract-registry-v2.schema.json";
@@ -99,9 +102,9 @@ export declare const redevPluginContractArtifacts: readonly [{
99
102
  readonly sha256: "5a6e7307f1649eb70d13e83e5d16177458957bffb3262b9299b4cf6d443e284a";
100
103
  }, {
101
104
  readonly id: "manifest-schema";
102
- readonly path: "spec/plugin/manifest-v8.schema.json";
103
- readonly version: "manifest-v8";
104
- readonly sha256: "dfe5e9ea5f15d4f9c0272427ca8650d475e2fa8aacc4fb6be3a945a3069a26fb";
105
+ readonly path: "spec/plugin/manifest-v9.schema.json";
106
+ readonly version: "manifest-v9";
107
+ readonly sha256: "d8b0fc348179a1a9af81f152897bad1891b1f8b7a7a4448c0a4e54e9883f1322";
105
108
  }, {
106
109
  readonly id: "network-grant-schema";
107
110
  readonly path: "spec/plugin/network-grant-v2.schema.json";
@@ -146,7 +149,7 @@ export declare const redevPluginContractArtifacts: readonly [{
146
149
  readonly id: "performance-contract";
147
150
  readonly path: "spec/plugin/performance-contract-v4.json";
148
151
  readonly version: "performance-contract-v4";
149
- readonly sha256: "75bd7955383cf77711c7df9b624d62b1eda3275ddc558500f206be4ea876f858";
152
+ readonly sha256: "08830053b38f0f8466c4e9e608fd7f21e24175063ec02307543fbd8adfb5692e";
150
153
  }, {
151
154
  readonly id: "performance-evidence-schema";
152
155
  readonly path: "spec/plugin/performance-evidence-v4.schema.json";
@@ -156,17 +159,17 @@ export declare const redevPluginContractArtifacts: readonly [{
156
159
  readonly id: "platform-package-publication-schema";
157
160
  readonly path: "spec/plugin/platform-package-publication-v2.schema.json";
158
161
  readonly version: "platform-package-publication-v2";
159
- readonly sha256: "f506ef7838757a05d5742fd3f223eb80cec99710972c517860cebd61c517012b";
162
+ readonly sha256: "1cc7a342b7dda8533324764c7f29fa7a3ca24a93f6015e7a18a17539febd538a";
160
163
  }, {
161
164
  readonly id: "platform-package-set-schema";
162
165
  readonly path: "spec/plugin/platform-package-set-v3.schema.json";
163
166
  readonly version: "platform-package-set-v3";
164
- readonly sha256: "2ac6e9a520e21a3294bec0059e0fabb6ee5d285fe6efe08a6bb6cbf2c7aea2bb";
167
+ readonly sha256: "8acba305f9df90be10cca516b98a598efc9a4bffd0e3c2915d78385e18397b88";
165
168
  }, {
166
169
  readonly id: "plugin-platform-openapi";
167
- readonly path: "spec/openapi/plugin-platform-v15.yaml";
168
- readonly version: "plugin-platform-v15";
169
- readonly sha256: "2e52294ca38c568df62297b2092f0dea91288c3692903760bf8504821e1809e1";
170
+ readonly path: "spec/openapi/plugin-platform-v17.yaml";
171
+ readonly version: "plugin-platform-v17";
172
+ readonly sha256: "1a043991f4d87ddfabdf614364e1bec42400f4bc19b7856c4c774b9f282fcda3";
170
173
  }, {
171
174
  readonly id: "presentation-icon-evidence-schema";
172
175
  readonly path: "spec/plugin/presentation-icon-evidence-v1.schema.json";
@@ -182,6 +185,11 @@ export declare const redevPluginContractArtifacts: readonly [{
182
185
  readonly path: "spec/plugin/process-containment-v1.schema.json";
183
186
  readonly version: "process-containment-v1";
184
187
  readonly sha256: "930ea44b1f62361706e994649e84f62af0a6418b77a661ae9bf9c10f1398e3fc";
188
+ }, {
189
+ readonly id: "public-api-catalog";
190
+ readonly path: "spec/plugin/public-api-v1.json";
191
+ readonly version: "public-api-v1";
192
+ readonly sha256: "fec900c56ce6eb2ad5ee1f229d62918726c23af48eb6cbe52bb0aff7599e06cc";
185
193
  }, {
186
194
  readonly id: "publisher-release-ref-schema";
187
195
  readonly path: "spec/plugin/publisher-release-ref-v1.schema.json";
@@ -239,9 +247,9 @@ export declare const redevPluginContractArtifacts: readonly [{
239
247
  readonly sha256: "bee7b149876447d663a4099dbd71e71fa97f8ff80ddf4e12cbfba951a47c4beb";
240
248
  }, {
241
249
  readonly id: "runtime-descriptor-schema";
242
- readonly path: "spec/plugin/runtime-descriptor-v2.schema.json";
243
- readonly version: "runtime-descriptor-v2";
244
- readonly sha256: "2ba59f6fb70d4ad757f60aca5541f4a44886542525e5bf76c393cd2368188351";
250
+ readonly path: "spec/plugin/runtime-descriptor-v3.schema.json";
251
+ readonly version: "runtime-descriptor-v3";
252
+ readonly sha256: "c95c9126c0bbb4b5f697114d4e11d7107d1bebea56d700d3549d00812e7c3e97";
245
253
  }, {
246
254
  readonly id: "runtime-exec-journal-schema";
247
255
  readonly path: "spec/plugin/runtime-exec-journal-v1.schema.json";
@@ -249,9 +257,9 @@ export declare const redevPluginContractArtifacts: readonly [{
249
257
  readonly sha256: "2bddbba383843b8ebc1554009909f0bb25e98616be763826a697cb0f408870d2";
250
258
  }, {
251
259
  readonly id: "rust-ipc-schema";
252
- readonly path: "spec/plugin/ipc-v6.schema.json";
253
- readonly version: "rust-ipc-v6";
254
- readonly sha256: "75d7fb83d4502be726e986025f7ec14fac592bcaeb7add6b28dff42a7360c5dc";
260
+ readonly path: "spec/plugin/ipc-v7.schema.json";
261
+ readonly version: "rust-ipc-v7";
262
+ readonly sha256: "1e1c5b6414030a0c7ffa6f4356f95e2f78f339b9b4dff45bb3691931316d9502";
255
263
  }, {
256
264
  readonly id: "session-scope-schema";
257
265
  readonly path: "spec/plugin/session-scope-v1.schema.json";
@@ -1,4 +1,6 @@
1
1
  // Code generated by scripts/generate_contract_registry.mjs; DO NOT EDIT.
2
+ export const surfaceAPIMajor = 1;
3
+ /** @deprecated Internal frozen transport alias. Plugin code should use surfaceAPIMajor. */
2
4
  export const pluginUIProtocolVersion = "plugin-ui-v7";
3
5
  export const pluginHostProtocolVersion = "plugin-host-v11";
4
6
  export const bridgeSchemaVersion = "bridge-v7";
@@ -8,9 +10,9 @@ export const redevPluginContractVersions = {
8
10
  "supported_plugin_ui_protocol_versions": ["plugin-ui-v7"],
9
11
  "plugin_ui_transport_mappings": [{ "plugin_ui_protocol_version": "plugin-ui-v7", "opaque_surface_transport_schema_version": "opaque-surface-transport-v6", "bridge_schema_version": "bridge-v7" }],
10
12
  "plugin_host_protocol_version": "plugin-host-v11",
11
- "rust_ipc_version": "rust-ipc-v6",
13
+ "rust_ipc_version": "rust-ipc-v7",
12
14
  "wasm_abi_version": "redevplugin-wasm-worker-v2",
13
- "manifest_schema_version": "manifest-v8",
15
+ "manifest_schema_version": "manifest-v9",
14
16
  "package_signature_schema_version": "package-signature-v1",
15
17
  "release_metadata_schema_version": "release-metadata-v8",
16
18
  "release_root_delegation_schema_version": "release-root-delegation-v1",
@@ -26,9 +28,10 @@ export const redevPluginContractVersions = {
26
28
  "network_grant_schema_version": "network-grant-v2",
27
29
  "resource_scope_schema_version": "resource-scope-v1",
28
30
  "session_scope_schema_version": "session-scope-v1",
29
- "plugin_platform_openapi_version": "plugin-platform-v15",
30
- "compatibility_manifest_version": "redevplugin.compatibility.v18",
31
- "compatibility_schema_version": "compatibility-manifest-v18",
31
+ "plugin_platform_openapi_version": "plugin-platform-v17",
32
+ "public_api_catalog_version": "public-api-v1",
33
+ "compatibility_manifest_version": "redevplugin.compatibility.v20",
34
+ "compatibility_schema_version": "compatibility-manifest-v20",
32
35
  "worker_invocation_schema_version": "worker-invocation-v3",
33
36
  "host_capability_contract_schema_version": "host-capability-contract-v1",
34
37
  "host_capability_pin_schema_version": "host-capability-pin-v1",
@@ -39,7 +42,7 @@ export const redevPluginContractVersions = {
39
42
  "platform_package_set_schema_version": "platform-package-set-v3",
40
43
  "platform_package_publication_schema_version": "platform-package-publication-v2",
41
44
  "runtime_admission_schema_version": "runtime-admission-v1",
42
- "runtime_descriptor_schema_version": "runtime-descriptor-v2",
45
+ "runtime_descriptor_schema_version": "runtime-descriptor-v3",
43
46
  "owner_scope_inventory_registry_version": "owner-scope-inventory-registry-v1",
44
47
  "owner_scope_inventory_schema_version": "owner-scope-inventory-v1",
45
48
  "owner_scope_migration_schema_version": "owner-scope-migration-v1",
@@ -51,9 +54,9 @@ export const redevPluginContractVersions = {
51
54
  export const redevPluginContractArtifacts = [
52
55
  {
53
56
  id: "compatibility-manifest-schema",
54
- path: "spec/plugin/compatibility-manifest-v18.schema.json",
55
- version: "compatibility-manifest-v18",
56
- sha256: "48889bd7ddd936b9757a56b1b154244abc6904bd8e55e177e80ae4509d15ce06",
57
+ path: "spec/plugin/compatibility-manifest-v20.schema.json",
58
+ version: "compatibility-manifest-v20",
59
+ sha256: "8ace15ee3f0bb05e5cdd3449385dd498e37f5fb2e22a67302efb5efeaee1aa02",
57
60
  },
58
61
  {
59
62
  id: "contract-registry-schema",
@@ -99,9 +102,9 @@ export const redevPluginContractArtifacts = [
99
102
  },
100
103
  {
101
104
  id: "manifest-schema",
102
- path: "spec/plugin/manifest-v8.schema.json",
103
- version: "manifest-v8",
104
- sha256: "dfe5e9ea5f15d4f9c0272427ca8650d475e2fa8aacc4fb6be3a945a3069a26fb",
105
+ path: "spec/plugin/manifest-v9.schema.json",
106
+ version: "manifest-v9",
107
+ sha256: "d8b0fc348179a1a9af81f152897bad1891b1f8b7a7a4448c0a4e54e9883f1322",
105
108
  },
106
109
  {
107
110
  id: "network-grant-schema",
@@ -155,7 +158,7 @@ export const redevPluginContractArtifacts = [
155
158
  id: "performance-contract",
156
159
  path: "spec/plugin/performance-contract-v4.json",
157
160
  version: "performance-contract-v4",
158
- sha256: "75bd7955383cf77711c7df9b624d62b1eda3275ddc558500f206be4ea876f858",
161
+ sha256: "08830053b38f0f8466c4e9e608fd7f21e24175063ec02307543fbd8adfb5692e",
159
162
  },
160
163
  {
161
164
  id: "performance-evidence-schema",
@@ -167,19 +170,19 @@ export const redevPluginContractArtifacts = [
167
170
  id: "platform-package-publication-schema",
168
171
  path: "spec/plugin/platform-package-publication-v2.schema.json",
169
172
  version: "platform-package-publication-v2",
170
- sha256: "f506ef7838757a05d5742fd3f223eb80cec99710972c517860cebd61c517012b",
173
+ sha256: "1cc7a342b7dda8533324764c7f29fa7a3ca24a93f6015e7a18a17539febd538a",
171
174
  },
172
175
  {
173
176
  id: "platform-package-set-schema",
174
177
  path: "spec/plugin/platform-package-set-v3.schema.json",
175
178
  version: "platform-package-set-v3",
176
- sha256: "2ac6e9a520e21a3294bec0059e0fabb6ee5d285fe6efe08a6bb6cbf2c7aea2bb",
179
+ sha256: "8acba305f9df90be10cca516b98a598efc9a4bffd0e3c2915d78385e18397b88",
177
180
  },
178
181
  {
179
182
  id: "plugin-platform-openapi",
180
- path: "spec/openapi/plugin-platform-v15.yaml",
181
- version: "plugin-platform-v15",
182
- sha256: "2e52294ca38c568df62297b2092f0dea91288c3692903760bf8504821e1809e1",
183
+ path: "spec/openapi/plugin-platform-v17.yaml",
184
+ version: "plugin-platform-v17",
185
+ sha256: "1a043991f4d87ddfabdf614364e1bec42400f4bc19b7856c4c774b9f282fcda3",
183
186
  },
184
187
  {
185
188
  id: "presentation-icon-evidence-schema",
@@ -199,6 +202,12 @@ export const redevPluginContractArtifacts = [
199
202
  version: "process-containment-v1",
200
203
  sha256: "930ea44b1f62361706e994649e84f62af0a6418b77a661ae9bf9c10f1398e3fc",
201
204
  },
205
+ {
206
+ id: "public-api-catalog",
207
+ path: "spec/plugin/public-api-v1.json",
208
+ version: "public-api-v1",
209
+ sha256: "fec900c56ce6eb2ad5ee1f229d62918726c23af48eb6cbe52bb0aff7599e06cc",
210
+ },
202
211
  {
203
212
  id: "publisher-release-ref-schema",
204
213
  path: "spec/plugin/publisher-release-ref-v1.schema.json",
@@ -267,9 +276,9 @@ export const redevPluginContractArtifacts = [
267
276
  },
268
277
  {
269
278
  id: "runtime-descriptor-schema",
270
- path: "spec/plugin/runtime-descriptor-v2.schema.json",
271
- version: "runtime-descriptor-v2",
272
- sha256: "2ba59f6fb70d4ad757f60aca5541f4a44886542525e5bf76c393cd2368188351",
279
+ path: "spec/plugin/runtime-descriptor-v3.schema.json",
280
+ version: "runtime-descriptor-v3",
281
+ sha256: "c95c9126c0bbb4b5f697114d4e11d7107d1bebea56d700d3549d00812e7c3e97",
273
282
  },
274
283
  {
275
284
  id: "runtime-exec-journal-schema",
@@ -279,9 +288,9 @@ export const redevPluginContractArtifacts = [
279
288
  },
280
289
  {
281
290
  id: "rust-ipc-schema",
282
- path: "spec/plugin/ipc-v6.schema.json",
283
- version: "rust-ipc-v6",
284
- sha256: "75d7fb83d4502be726e986025f7ec14fac592bcaeb7add6b28dff42a7360c5dc",
291
+ path: "spec/plugin/ipc-v7.schema.json",
292
+ version: "rust-ipc-v7",
293
+ sha256: "1e1c5b6414030a0c7ffa6f4356f95e2f78f339b9b4dff45bb3691931316d9502",
285
294
  },
286
295
  {
287
296
  id: "session-scope-schema",
package/dist/http.d.ts CHANGED
@@ -40,3 +40,4 @@ export declare function readMutationPlatformResponse<T>(response: FetchResponseL
40
40
  export declare function isRecord(value: unknown): value is Record<string, unknown>;
41
41
  export declare function hasExactKeys(value: unknown, keys: readonly string[]): value is Record<string, unknown>;
42
42
  export declare function hasAllowedKeys(value: unknown, keys: readonly string[]): value is Record<string, unknown>;
43
+ export declare function hasRequiredKeys(value: Record<string, unknown>, keys: readonly string[]): boolean;
package/dist/http.js CHANGED
@@ -95,12 +95,12 @@ function isPlatformResponse(value, mutation) {
95
95
  if (!isRecord(value) || typeof value.ok !== "boolean")
96
96
  return false;
97
97
  if (value.ok) {
98
- return hasExactKeys(value, ["ok", "data"]);
98
+ return hasRequiredKeys(value, ["ok", "data"]);
99
99
  }
100
- if (!hasExactKeys(value, ["ok", "error"]) || !isRecord(value.error))
100
+ if (!hasRequiredKeys(value, ["ok", "error"]) || !isRecord(value.error))
101
101
  return false;
102
102
  const errorKeys = mutation ? ["code", "message", "details", "mutation_outcome"] : ["code", "message", "details"];
103
- if (!hasExactKeys(value.error, errorKeys) ||
103
+ if (!hasRequiredKeys(value.error, errorKeys) ||
104
104
  !isPluginPlatformErrorCode(value.error.code) ||
105
105
  typeof value.error.message !== "string" || value.error.message.trim().length === 0 ||
106
106
  Array.from(value.error.message).length > 4096 ||
@@ -212,6 +212,6 @@ function isIncompleteSessionScopeResult(value) {
212
212
  return false;
213
213
  return sessionScopeCountKeys.every((key) => Number.isSafeInteger(counts[key]) && Number(counts[key]) >= 0);
214
214
  }
215
- function hasRequiredKeys(value, keys) {
215
+ export function hasRequiredKeys(value, keys) {
216
216
  return keys.every((key) => Object.hasOwn(value, key));
217
217
  }
@@ -79,7 +79,7 @@ export interface paths {
79
79
  };
80
80
  get?: never;
81
81
  put?: never;
82
- /** @description Reopens and installs one unexpired process-local inspection after the user confirms its exact package digest. The inspection is bound to the exact authenticated session. Invalid or revoked signatures fail closed; absent or unknown signatures install disabled, with no grants and manual updates only. */
82
+ /** @description Reopens and installs one unexpired process-local inspection after the user confirms its exact package digest and permission selection. The inspection is bound to the exact authenticated session. Invalid or revoked signatures fail closed; absent or unknown signatures remain manual-update-only but enable by default when required permissions are approved and runtime policy allows activation. */
83
83
  post: operations["installInspectedPackage"];
84
84
  delete?: never;
85
85
  options?: never;
@@ -103,6 +103,23 @@ export interface paths {
103
103
  patch?: never;
104
104
  trace?: never;
105
105
  };
106
+ "/_redevplugin/api/plugins/release-packages/inspect": {
107
+ parameters: {
108
+ query?: never;
109
+ header?: never;
110
+ path?: never;
111
+ cookie?: never;
112
+ };
113
+ get?: never;
114
+ put?: never;
115
+ /** @description Resolves and fully verifies an exact release reference before installation so one user confirmation can review the Host-derived permissions and package identity. The inspection does not install a plugin, and installation re-verifies the exact release and hashes. */
116
+ post: operations["inspectReleasePackage"];
117
+ delete?: never;
118
+ options?: never;
119
+ head?: never;
120
+ patch?: never;
121
+ trace?: never;
122
+ };
106
123
  "/_redevplugin/api/plugins/enable": {
107
124
  parameters: {
108
125
  query?: never;
@@ -995,6 +1012,11 @@ export interface components {
995
1012
  ok: true;
996
1013
  data: components["schemas"]["InstalledExternalPackage"];
997
1014
  };
1015
+ ReleasePackageInspectionSuccessResponse: {
1016
+ /** @constant */
1017
+ ok: true;
1018
+ data: components["schemas"]["ReleasePackageInspection"];
1019
+ };
998
1020
  PluginCatalogSuccessResponse: {
999
1021
  /** @constant */
1000
1022
  ok: true;
@@ -1360,7 +1382,7 @@ export interface components {
1360
1382
  PluginCatalogResult: {
1361
1383
  plugins: components["schemas"]["PluginCatalogRecord"][];
1362
1384
  };
1363
- PluginCompatibilityManifest: components["schemas"]["CompatibilityManifestV18"];
1385
+ PluginCompatibilityManifest: components["schemas"]["CompatibilityManifestV20"];
1364
1386
  ExecutionList: {
1365
1387
  executions: components["schemas"]["Execution"][];
1366
1388
  next_cursor?: number;
@@ -1557,14 +1579,32 @@ export interface components {
1557
1579
  StrictSemVer: string;
1558
1580
  RuntimeDescriptor: {
1559
1581
  /** @constant */
1560
- schema_version: "runtime-descriptor-v2";
1582
+ schema_version: "runtime-descriptor-v3";
1561
1583
  platform_version: components["schemas"]["StrictSemVer"];
1562
1584
  target: components["schemas"]["RuntimeAdmissionTarget"];
1563
- /** @constant */
1564
- rust_ipc_version: "rust-ipc-v6";
1565
- /** @constant */
1566
- wasm_abi_version: "redevplugin-wasm-worker-v2";
1567
- contract_set_sha256: string;
1585
+ internal: {
1586
+ /** @constant */
1587
+ rust_ipc: "rust-ipc-v7";
1588
+ contract_set_sha256: string;
1589
+ };
1590
+ public_api: {
1591
+ /** @constant */
1592
+ worker_majors: [
1593
+ 1
1594
+ ];
1595
+ /** @constant */
1596
+ features: [
1597
+ "fs.environment.v1",
1598
+ "fs.home.v1",
1599
+ "fs.watch.v1",
1600
+ "fs.workspace.v1",
1601
+ "io.stream.v1",
1602
+ "net.http.v1",
1603
+ "net.tcp.v1",
1604
+ "net.udp.v1",
1605
+ "net.websocket.v1"
1606
+ ];
1607
+ };
1568
1608
  binary_sha256: string;
1569
1609
  };
1570
1610
  /** @description Negotiated runtime capacities. per_plugin_concurrency must not exceed worker_count. Route capacities are derived exactly from negotiated limits: active hostcall routes = worker_count, canceled hostcall retention = worker_count + queue_capacity, and compile-flight artifact routes = worker_count. */
@@ -1712,10 +1752,16 @@ export interface components {
1712
1752
  intent: components["schemas"]["ExternalPackageIntentRequest"];
1713
1753
  source: components["schemas"]["ExternalPackageSource"];
1714
1754
  };
1715
- /** @description Confirms an unexpired process-local inspection by its exact package digest. The digest cannot override any inspected fact. */
1755
+ /** @description Confirms an unexpired process-local inspection by its exact package digest and carries the single Host-owned activation intent. New installs activate by default; updates preserve their pre-install enable intent. */
1716
1756
  InstallInspectedPackageRequest: {
1717
1757
  inspection_id: string;
1718
1758
  expected_package_sha256: string;
1759
+ activate_after_install?: boolean;
1760
+ approved_permission_ids?: string[];
1761
+ };
1762
+ InspectReleasePackageRequest: {
1763
+ plugin_instance_id: string;
1764
+ release_ref: components["schemas"]["PluginReleaseRef"];
1719
1765
  };
1720
1766
  /** @description Cryptographic signature fact computed over the inspected artifact. The absent state is installable and affects trust classification and automatic-update eligibility only. */
1721
1767
  ExternalPackageSignatureAssessment: {
@@ -1976,12 +2022,28 @@ export interface components {
1976
2022
  };
1977
2023
  InstalledExternalPackage: {
1978
2024
  plugin: components["schemas"]["PluginRecord"];
2025
+ activation: components["schemas"]["PluginInstallActivation"];
1979
2026
  signature_assessment: components["schemas"]["ExternalPackageSignatureAssessment"];
1980
2027
  source_provenance: components["schemas"]["ExternalPackageSourceProvenance"];
1981
2028
  execution_approval: components["schemas"]["ExternalPackageExecutionApproval"];
1982
2029
  update_eligibility: components["schemas"]["ExternalPackageUpdateEligibility"];
1983
2030
  security_summary: components["schemas"]["ExternalPackageSecuritySummary"];
1984
2031
  };
2032
+ PluginInstallActivation: {
2033
+ /** @enum {string} */
2034
+ status: "not_requested" | "enabled" | "needs_attention";
2035
+ missing_permission_ids?: string[];
2036
+ /** @enum {string} */
2037
+ next_action?: "approve_permissions" | "retry_activation";
2038
+ };
2039
+ ReleasePackageInspection: {
2040
+ plugin_instance_id: string;
2041
+ release_ref: components["schemas"]["PluginReleaseRef"];
2042
+ inspected_hashes: components["schemas"]["TrustHashSet"];
2043
+ presentation: components["schemas"]["PresentationCatalog"];
2044
+ presentation_sha256: string;
2045
+ security_summary: components["schemas"]["ExternalPackageSecuritySummary"];
2046
+ };
1985
2047
  /** @enum {string} */
1986
2048
  TrustState: "verified" | "unsigned_local" | "untrusted" | "needs_review" | "trust_unavailable" | "blocked_security";
1987
2049
  TrustHashSet: {
@@ -2024,7 +2086,7 @@ export interface components {
2024
2086
  update_eligibility?: components["schemas"]["ExternalPackageUpdateEligibility"];
2025
2087
  security_summary?: components["schemas"]["ExternalPackageSecuritySummary"];
2026
2088
  capability_contracts?: components["schemas"]["CapabilityContractPin"][];
2027
- manifest: components["schemas"]["ManifestV8"];
2089
+ manifest: components["schemas"]["ManifestV9"];
2028
2090
  presentation: components["schemas"]["PresentationCatalog"];
2029
2091
  presentation_sha256: string;
2030
2092
  package_entries: components["schemas"]["PackageEntry"][];
@@ -2064,7 +2126,7 @@ export interface components {
2064
2126
  policy_revision: number;
2065
2127
  management_revision: number;
2066
2128
  revoke_epoch: number;
2067
- manifest: components["schemas"]["ManifestV8"];
2129
+ manifest: components["schemas"]["ManifestV9"];
2068
2130
  presentation: components["schemas"]["PresentationCatalog"];
2069
2131
  presentation_sha256: string;
2070
2132
  package_entries: components["schemas"]["PackageEntry"][];
@@ -2610,9 +2672,9 @@ export interface components {
2610
2672
  counts: components["schemas"]["SessionScopeV1RevokeCounts"];
2611
2673
  };
2612
2674
  SessionScopeV1PublicRevokeResult: components["schemas"]["SessionScopeV1CompleteRevokeResult"] | components["schemas"]["SessionScopeV1IncompleteRevokeResult"];
2613
- CompatibilityManifestV18: {
2675
+ CompatibilityManifestV20: {
2614
2676
  /** @constant */
2615
- schema_version: "redevplugin.compatibility.v18";
2677
+ schema_version: "redevplugin.compatibility.v20";
2616
2678
  package_set: components["schemas"]["PlatformPackageSetV3"];
2617
2679
  matrix: {
2618
2680
  /** @constant */
@@ -2632,11 +2694,11 @@ export interface components {
2632
2694
  /** @constant */
2633
2695
  plugin_host_protocol_version: "plugin-host-v11";
2634
2696
  /** @constant */
2635
- rust_ipc_version: "rust-ipc-v6";
2697
+ rust_ipc_version: "rust-ipc-v7";
2636
2698
  /** @constant */
2637
2699
  wasm_abi_version: "redevplugin-wasm-worker-v2";
2638
2700
  /** @constant */
2639
- manifest_schema_version: "manifest-v8";
2701
+ manifest_schema_version: "manifest-v9";
2640
2702
  /** @constant */
2641
2703
  package_signature_schema_version: "package-signature-v1";
2642
2704
  /** @constant */
@@ -2668,9 +2730,11 @@ export interface components {
2668
2730
  /** @constant */
2669
2731
  session_scope_schema_version: "session-scope-v1";
2670
2732
  /** @constant */
2671
- plugin_platform_openapi_version: "plugin-platform-v15";
2733
+ plugin_platform_openapi_version: "plugin-platform-v17";
2672
2734
  /** @constant */
2673
- compatibility_schema_version: "compatibility-manifest-v18";
2735
+ public_api_catalog_version: "public-api-v1";
2736
+ /** @constant */
2737
+ compatibility_schema_version: "compatibility-manifest-v20";
2674
2738
  /** @constant */
2675
2739
  worker_invocation_schema_version: "worker-invocation-v3";
2676
2740
  /** @constant */
@@ -2692,7 +2756,7 @@ export interface components {
2692
2756
  /** @constant */
2693
2757
  runtime_admission_schema_version: "runtime-admission-v1";
2694
2758
  /** @constant */
2695
- runtime_descriptor_schema_version: "runtime-descriptor-v2";
2759
+ runtime_descriptor_schema_version: "runtime-descriptor-v3";
2696
2760
  /** @constant */
2697
2761
  owner_scope_inventory_registry_version: "owner-scope-inventory-registry-v1";
2698
2762
  /** @constant */
@@ -2709,9 +2773,9 @@ export interface components {
2709
2773
  quarantine_cleanup_schema_version: "quarantine-cleanup-v1";
2710
2774
  };
2711
2775
  contract_set_sha256: string;
2712
- contracts: components["schemas"]["CompatibilityManifestV18Contract"][];
2776
+ contracts: components["schemas"]["CompatibilityManifestV20Contract"][];
2713
2777
  };
2714
- CompatibilityManifestV18Contract: {
2778
+ CompatibilityManifestV20Contract: {
2715
2779
  id: string;
2716
2780
  path: string;
2717
2781
  version: string;
@@ -2738,7 +2802,7 @@ export interface components {
2738
2802
  PlatformPackageSetV3Sha256: string;
2739
2803
  PlatformPackageSetV3GoModule: {
2740
2804
  /** @constant */
2741
- module: "github.com/floegence/redevplugin";
2805
+ module: "github.com/floegence/redevplugin/v2";
2742
2806
  version: string;
2743
2807
  };
2744
2808
  PlatformPackageSetV3NpmPackage: {
@@ -2771,9 +2835,9 @@ export interface components {
2771
2835
  /** @constant */
2772
2836
  role?: "runtime";
2773
2837
  };
2774
- ManifestV8: {
2838
+ ManifestV9: {
2775
2839
  /** @constant */
2776
- schema_version: "redevplugin.manifest.v8";
2840
+ schema_version: "redevplugin.manifest.v9";
2777
2841
  publisher: {
2778
2842
  publisher_id: string;
2779
2843
  display_name?: string;
@@ -2781,23 +2845,24 @@ export interface components {
2781
2845
  plugin: {
2782
2846
  plugin_id: string;
2783
2847
  display_name: string;
2784
- version: components["schemas"]["ManifestV8Semver"];
2848
+ version: components["schemas"]["ManifestV9Semver"];
2849
+ };
2850
+ api: {
2785
2851
  /** @constant */
2786
- api_version: "plugin-v1";
2787
- min_runtime_version: components["schemas"]["ManifestV8Semver"];
2852
+ surface: 1;
2788
2853
  /** @constant */
2789
- ui_protocol_version: "plugin-ui-v7";
2854
+ worker: 1;
2855
+ required_features?: components["schemas"]["ManifestV9RequiredFeatures"];
2856
+ optional_features?: components["schemas"]["ManifestV9OptionalFeatures"];
2790
2857
  };
2858
+ permissions: ("fs.workspace.read" | "fs.workspace.write" | "fs.home.read" | "fs.home.write" | "fs.environment.read" | "fs.environment.write" | "network.client" | "network.listen")[];
2791
2859
  presentation: {
2792
- default_locale: components["schemas"]["ManifestV8Locale"];
2793
- summary: components["schemas"]["ManifestV8Summary"];
2794
- description: components["schemas"]["ManifestV8Description"];
2795
- highlights: components["schemas"]["ManifestV8Highlights"];
2796
- keywords: components["schemas"]["ManifestV8Keywords"];
2860
+ locales: {
2861
+ default: components["schemas"]["ManifestV9Locale"];
2862
+ };
2797
2863
  icon?: {
2798
2864
  path: string;
2799
2865
  };
2800
- localizations: components["schemas"]["ManifestV8Localization"][];
2801
2866
  };
2802
2867
  surfaces: {
2803
2868
  surface_id: string;
@@ -2813,78 +2878,24 @@ export interface components {
2813
2878
  height: number;
2814
2879
  };
2815
2880
  }[];
2816
- capability_bindings?: {
2817
- binding_id: string;
2818
- contract: components["schemas"]["HostCapabilityPinV1"];
2819
- }[];
2820
- methods?: ({
2821
- method: string;
2822
- /** @enum {unknown} */
2823
- effect?: "read" | "write" | "delete" | "execute" | "admin";
2824
- /** @enum {unknown} */
2825
- execution?: "sync" | "operation" | "subscription";
2826
- dangerous?: boolean;
2827
- preflight_only?: boolean;
2828
- broker_access?: {
2829
- storage?: {
2830
- store_id: string;
2831
- operations: ("read" | "write" | "delete" | "list" | "get" | "put" | "query" | "exec")[];
2832
- }[];
2833
- network?: ({
2834
- connector_id: string;
2835
- /** @enum {unknown} */
2836
- transport: "http" | "websocket" | "tcp" | "udp";
2837
- operations: ("http" | "http_stream" | "websocket_round_trip" | "tcp_round_trip" | "udp_round_trip")[];
2838
- http_methods?: ("GET" | "HEAD" | "POST" | "PUT" | "PATCH" | "DELETE" | "OPTIONS")[];
2839
- } & unknown)[];
2840
- };
2841
- route: {
2842
- /** @enum {unknown} */
2843
- kind: "capability" | "worker" | "core_action";
2844
- binding_id?: string;
2845
- target_method?: string;
2846
- worker_id?: string;
2847
- action_id?: string;
2848
- } & (unknown & unknown & unknown);
2849
- confirmation?: {
2850
- /** @enum {unknown} */
2851
- mode: "none" | "required" | "risk_based";
2852
- preflight_method?: string | null;
2853
- request_hash_fields?: string[];
2854
- plan_hash_required?: boolean;
2855
- };
2856
- cancel_policy?: {
2857
- cancelable: boolean;
2858
- /** @enum {unknown} */
2859
- disable_behavior?: "cancel" | "orphan" | "wait";
2860
- /** @enum {unknown} */
2861
- uninstall_behavior?: "cancel_then_block_delete" | "force_cleanup_allowed";
2862
- ack_timeout_ms?: number;
2863
- } & (unknown & unknown);
2864
- request_schema?: components["schemas"]["ManifestV8MethodSchema"] & {
2865
- /** @constant */
2866
- type: "object";
2867
- /** @constant */
2868
- additionalProperties: false;
2869
- };
2870
- response_schema?: components["schemas"]["ManifestV8MethodSchema"] & {
2871
- /** @constant */
2872
- type: "object";
2873
- /** @constant */
2874
- additionalProperties: false;
2875
- };
2876
- } & (unknown & unknown & unknown & unknown))[];
2877
- workers?: {
2881
+ workers: {
2878
2882
  worker_id: string;
2879
2883
  artifact: string;
2880
2884
  /** @constant */
2881
- abi: "redevplugin-wasm-worker-v2";
2882
- /** @constant */
2883
2885
  mode: "job";
2884
2886
  /** @enum {unknown} */
2885
2887
  scope: "user" | "environment";
2886
2888
  memory_limit_bytes: number;
2887
- idle_timeout_ms?: number;
2889
+ }[];
2890
+ methods: {
2891
+ method: string;
2892
+ worker_id: string;
2893
+ /** @enum {unknown} */
2894
+ effect: "read" | "write" | "execute" | "delete" | "admin";
2895
+ /** @enum {unknown} */
2896
+ execution: "sync" | "operation" | "subscription";
2897
+ request_schema: components["schemas"]["ManifestV9MethodSchema"];
2898
+ response_schema: components["schemas"]["ManifestV9MethodSchema"];
2888
2899
  }[];
2889
2900
  storage?: {
2890
2901
  stores?: {
@@ -2898,115 +2909,13 @@ export interface components {
2898
2909
  schema_version: number;
2899
2910
  }[];
2900
2911
  };
2901
- network_access?: {
2902
- connectors?: {
2903
- connector_id: string;
2904
- /** @enum {unknown} */
2905
- transport: "http" | "websocket" | "tcp" | "udp";
2906
- /** @enum {unknown} */
2907
- scope: "user" | "environment";
2908
- destinations: string[];
2909
- auth?: Record<string, never>;
2910
- tls?: Record<string, never>;
2911
- }[];
2912
- };
2913
- settings?: {
2914
- schema_version: number;
2915
- fields?: {
2916
- key: string;
2917
- type: string;
2918
- /** @enum {unknown} */
2919
- scope: "user" | "environment";
2920
- label: string;
2921
- default?: unknown;
2922
- secret_ref?: string;
2923
- options?: components["schemas"]["ManifestV8SettingOption"][];
2924
- validation?: Record<string, never>;
2925
- }[];
2926
- };
2927
- intents?: {
2928
- intent_id: string;
2929
- method: string;
2930
- payload_schema?: Record<string, never>;
2931
- }[];
2932
- };
2933
- ManifestV8Locale: string;
2934
- ManifestV8Summary: string;
2935
- ManifestV8Description: string[];
2936
- ManifestV8Highlights: string[];
2937
- ManifestV8Keywords: string[];
2938
- ManifestV8SettingOption: {
2939
- value: string;
2940
- label: string;
2941
- };
2942
- ManifestV8LocalizedSurface: {
2943
- surface_id: string;
2944
- label: string;
2945
- };
2946
- ManifestV8LocalizedSetting: {
2947
- key: string;
2948
- label: string;
2949
- options: components["schemas"]["ManifestV8SettingOption"][];
2950
- };
2951
- ManifestV8Localization: {
2952
- locale: components["schemas"]["ManifestV8Locale"];
2953
- plugin_name: string;
2954
- publisher_name?: string;
2955
- summary: components["schemas"]["ManifestV8Summary"];
2956
- description: components["schemas"]["ManifestV8Description"];
2957
- highlights: components["schemas"]["ManifestV8Highlights"];
2958
- keywords: components["schemas"]["ManifestV8Keywords"];
2959
- surfaces: components["schemas"]["ManifestV8LocalizedSurface"][];
2960
- settings: components["schemas"]["ManifestV8LocalizedSetting"][];
2961
- };
2962
- ManifestV8Semver: string;
2963
- ManifestV8MethodSchema: false | (({
2964
- description?: string;
2965
- readOnly?: boolean;
2966
- writeOnly?: boolean;
2967
- $ref?: string;
2968
- type?: ("null" | "boolean" | "object" | "array" | "number" | "integer" | "string") | ("null" | "boolean" | "object" | "array" | "number" | "integer" | "string")[];
2969
- properties?: {
2970
- [key: string]: components["schemas"]["ManifestV8MethodSchema"];
2971
- };
2972
- patternProperties?: {
2973
- [key: string]: components["schemas"]["ManifestV8MethodSchema"];
2974
- };
2975
- required?: string[];
2976
- /** @constant */
2977
- additionalProperties?: false;
2978
- items?: components["schemas"]["ManifestV8MethodSchema"];
2979
- allOf?: components["schemas"]["ManifestV8MethodSchema"][];
2980
- anyOf?: components["schemas"]["ManifestV8MethodSchema"][];
2981
- oneOf?: components["schemas"]["ManifestV8MethodSchema"][];
2982
- enum?: unknown[];
2983
- const?: unknown;
2984
- default?: unknown;
2985
- examples?: unknown[];
2986
- minimum?: number;
2987
- maximum?: number;
2988
- exclusiveMinimum?: number;
2989
- exclusiveMaximum?: number;
2990
- multipleOf?: number;
2991
- minLength?: number;
2992
- maxLength?: number;
2993
- pattern?: string;
2994
- format?: string;
2995
- minItems?: number;
2996
- maxItems?: number;
2997
- uniqueItems?: boolean;
2998
- minProperties?: number;
2999
- maxProperties?: number;
3000
- } & (unknown & unknown)) | unknown | unknown | unknown | unknown | unknown | unknown | unknown | unknown | unknown | unknown | unknown | unknown | unknown);
3001
- HostCapabilityPinV1: {
3002
- publisher_id: components["schemas"]["HostCapabilityPinV1Id"];
3003
- contract_id: components["schemas"]["HostCapabilityPinV1Id"];
3004
- contract_version: components["schemas"]["HostCapabilityPinV1Semver"];
3005
- artifact_sha256: components["schemas"]["HostCapabilityPinV1Sha256"];
2912
+ settings?: Record<string, never>;
3006
2913
  };
3007
- HostCapabilityPinV1Id: string;
3008
- HostCapabilityPinV1Semver: string;
3009
- HostCapabilityPinV1Sha256: string;
2914
+ ManifestV9Semver: string;
2915
+ ManifestV9Locale: string;
2916
+ ManifestV9RequiredFeatures: ("io.stream.v1" | "fs.workspace.v1" | "fs.home.v1" | "fs.environment.v1" | "fs.watch.v1" | "net.http.v1" | "net.websocket.v1" | "net.tcp.v1" | "net.udp.v1")[];
2917
+ ManifestV9OptionalFeatures: string[];
2918
+ ManifestV9MethodSchema: false | Record<string, never>;
3010
2919
  OpaqueSurfaceDocumentV3: {
3011
2920
  /** @constant */
3012
2921
  schema_version: "redevplugin.opaque_surface_document.v3";
@@ -3043,6 +2952,15 @@ export interface components {
3043
2952
  size: number;
3044
2953
  content_type: string;
3045
2954
  };
2955
+ HostCapabilityPinV1: {
2956
+ publisher_id: components["schemas"]["HostCapabilityPinV1Id"];
2957
+ contract_id: components["schemas"]["HostCapabilityPinV1Id"];
2958
+ contract_version: components["schemas"]["HostCapabilityPinV1Semver"];
2959
+ artifact_sha256: components["schemas"]["HostCapabilityPinV1Sha256"];
2960
+ };
2961
+ HostCapabilityPinV1Id: string;
2962
+ HostCapabilityPinV1Semver: string;
2963
+ HostCapabilityPinV1Sha256: string;
3046
2964
  };
3047
2965
  responses: {
3048
2966
  /** @description Closed non-success response for read-only platform operations. */
@@ -3432,6 +3350,15 @@ export interface components {
3432
3350
  "application/json": components["schemas"]["SettingsSnapshotSuccessResponse"];
3433
3351
  };
3434
3352
  };
3353
+ /** @description Verified release package facts for the installation review. */
3354
+ ReleasePackageInspectionResponse: {
3355
+ headers: {
3356
+ [name: string]: unknown;
3357
+ };
3358
+ content: {
3359
+ "application/json": components["schemas"]["ReleasePackageInspectionSuccessResponse"];
3360
+ };
3361
+ };
3435
3362
  };
3436
3363
  parameters: {
3437
3364
  ExecutionID: string;
@@ -3456,6 +3383,11 @@ export interface components {
3456
3383
  "application/json": components["schemas"]["InstallReleaseRefRequest"];
3457
3384
  };
3458
3385
  };
3386
+ InspectReleasePackageRequest: {
3387
+ content: {
3388
+ "application/json": components["schemas"]["InspectReleasePackageRequest"];
3389
+ };
3390
+ };
3459
3391
  UpdateReleaseRefRequest: {
3460
3392
  content: {
3461
3393
  "application/json": components["schemas"]["UpdateReleaseRefRequest"];
@@ -3786,6 +3718,19 @@ export interface operations {
3786
3718
  default: components["responses"]["MutationPlatformErrorResponse"];
3787
3719
  };
3788
3720
  };
3721
+ inspectReleasePackage: {
3722
+ parameters: {
3723
+ query?: never;
3724
+ header?: never;
3725
+ path?: never;
3726
+ cookie?: never;
3727
+ };
3728
+ requestBody: components["requestBodies"]["InspectReleasePackageRequest"];
3729
+ responses: {
3730
+ 200: components["responses"]["ReleasePackageInspectionResponse"];
3731
+ default: components["responses"]["MutationPlatformErrorResponse"];
3732
+ };
3733
+ };
3789
3734
  enablePlugin: {
3790
3735
  parameters: {
3791
3736
  query?: never;
@@ -30,6 +30,8 @@ export type PluginEnableState = PluginRecord["enable_state"];
30
30
  export type PluginPackageHashSet = PlatformSchemas["PackageHashSet"];
31
31
  export type PluginReleaseRef = PlatformSchemas["PluginReleaseRef"];
32
32
  export type PluginInstallReleaseRefRequest = PlatformSchemas["InstallReleaseRefRequest"];
33
+ export type PluginInspectReleasePackageRequest = PlatformSchemas["InspectReleasePackageRequest"];
34
+ export type PluginReleasePackageInspection = PlatformSchemas["ReleasePackageInspection"];
33
35
  export type PluginUpdateReleaseRefRequest = PlatformSchemas["UpdateReleaseRefRequest"];
34
36
  export type PluginInspectExternalPackageRequest = PlatformSchemas["InspectExternalPackageRequest"];
35
37
  export type PluginUploadedExternalPackageIntent = PlatformSchemas["ExternalPackageIntentRequest"];
@@ -132,6 +134,7 @@ export declare class PluginPlatformClient {
132
134
  features(options?: PluginRequestOptions): Promise<PluginFeatures>;
133
135
  getCompatibility(options?: PluginRequestOptions): Promise<PluginCompatibilityManifest>;
134
136
  installReleaseRef(request: PluginInstallReleaseRefRequest, options?: PluginRequestOptions): Promise<PluginRecord>;
137
+ inspectReleasePackage(request: PluginInspectReleasePackageRequest, options?: PluginRequestOptions): Promise<PluginReleasePackageInspection>;
135
138
  inspectExternalPackage(request: PluginInspectExternalPackageRequest, options?: PluginRequestOptions): Promise<PluginExternalPackageInspection>;
136
139
  inspectUploadedExternalPackage(intent: PluginUploadedExternalPackageIntent, packageBlob: Blob, options?: PluginRequestOptions): Promise<PluginExternalPackageInspection>;
137
140
  installInspectedPackage(request: PluginInstallInspectedPackageRequest, options?: PluginRequestOptions): Promise<PluginInstalledExternalPackage>;
package/dist/platform.js CHANGED
@@ -41,6 +41,9 @@ export class PluginPlatformClient {
41
41
  installReleaseRef(request, options = {}) {
42
42
  return this.#requestMutation("POST", "/_redevplugin/api/plugins/install-release-ref", request, options);
43
43
  }
44
+ inspectReleasePackage(request, options = {}) {
45
+ return this.#requestMutation("POST", "/_redevplugin/api/plugins/release-packages/inspect", request, options);
46
+ }
44
47
  async inspectExternalPackage(request, options = {}) {
45
48
  const inspection = await this.#requestMutation("POST", "/_redevplugin/api/plugins/external-packages/inspect", request, options);
46
49
  this.#externalInspectionTargets.set(inspection.inspection_id, inspection.intent.plugin_instance_id ?? "");
package/dist/plugin.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  export { PluginBridgeClient } from "./surface.js";
2
2
  export { PluginBridgeError } from "./errors.js";
3
+ export { surfaceAPIMajor } from "./contracts.gen.js";
3
4
  export { callCapabilityOperation, callCapabilityStream, callCapabilitySync, isCapabilityBusinessError, } from "./capability-client.js";
4
5
  export type { BridgeLifecycleEvent, MessagePortLike, PluginBridgeClientOptions, PluginBridgeRequestOptions, PluginCanvasAccessibilityState, PluginCanvasInputEvent, PluginCanvasKeyEvent, PluginCanvasPointerEvent, PluginCanvasResizeEvent, PluginCanvasSurface, PluginJSONObject, PluginJSONValue, PluginMethodResult, PluginExecutionFailureCode, PluginExecutionSnapshot, PluginExecutionProgress, PluginExecutionEvent, PluginExecutionEventList, PluginSurfaceContext, PluginUIActionEvent, PluginUIAttributeValue, PluginUIElementVNode, PluginUIPatchOperation, PluginUIVNode, } from "./surface.js";
5
6
  export type { PluginCapabilitySchema, PluginCapabilityEffect, PluginCapabilityOperationContract, PluginCapabilityStreamContract, PluginCapabilitySyncContract, PluginCapabilityStreamEvent, PluginCapabilityStreamReadResult, PluginExecution, PluginExecutionTerminalStatus, PluginExecutionWaitOptions, PluginStream, } from "./capability-client.js";
package/dist/plugin.js CHANGED
@@ -1,3 +1,4 @@
1
1
  export { PluginBridgeClient } from "./surface.js";
2
2
  export { PluginBridgeError } from "./errors.js";
3
+ export { surfaceAPIMajor } from "./contracts.gen.js";
3
4
  export { callCapabilityOperation, callCapabilityStream, callCapabilitySync, isCapabilityBusinessError, } from "./capability-client.js";
package/dist/surface.js CHANGED
@@ -2,7 +2,7 @@ import { PluginBridgeError, PluginPlatformRequestError, PluginTransportError, pl
2
2
  import { pluginBridgeCapabilityEffect, } from "./bridge-capability.js";
3
3
  import { pluginUIProtocolVersion } from "./contracts.gen.js";
4
4
  import { opaqueSurfaceAllowedTags, opaqueSurfaceGlobalAttributes, opaqueSurfaceRenderLimits, opaqueSurfaceSafeInputTypes, opaqueSurfaceTagAttributes, } from "./opaque-surface-policy.gen.js";
5
- import { defaultFetch, hasAllowedKeys, hasExactKeys, isRecord, readMutationPlatformResponse, readPlatformResponse, } from "./http.js";
5
+ import { defaultFetch, hasAllowedKeys, hasExactKeys, hasRequiredKeys, isRecord, readMutationPlatformResponse, readPlatformResponse, } from "./http.js";
6
6
  import { defaultPluginSurfaceScope, registerPluginSurface, } from "./surface-scope.js";
7
7
  import { PluginUIReconcileError, reconcileValidatedPluginUITrees, validatePluginUITree, } from "./ui-reconciler.js";
8
8
  export const opaqueSurfaceDocumentSchemaVersion = "redevplugin.opaque_surface_document.v3";
@@ -4051,16 +4051,17 @@ function validDateTime(value) {
4051
4051
  return typeof value === "string" && value.length > 0 && Number.isFinite(Date.parse(value));
4052
4052
  }
4053
4053
  function isPluginExecutionEventList(value, executionID, afterCursor) {
4054
- if (!hasExactKeys(value, ["execution_id", "events", "cursor"]) || value.execution_id !== executionID ||
4054
+ if (!isRecord(value) || !hasRequiredKeys(value, ["execution_id", "events", "cursor"]) || value.execution_id !== executionID ||
4055
4055
  !Array.isArray(value.events) || !Number.isSafeInteger(value.cursor) || Number(value.cursor) < afterCursor)
4056
4056
  return false;
4057
4057
  let cursor = afterCursor;
4058
4058
  for (const event of value.events) {
4059
- if (!isRecord(event) || !hasAllowedKeys(event, ["execution_id", "sequence", "kind", "payload", "error"]) ||
4059
+ if (!isRecord(event) || !hasRequiredKeys(event, ["execution_id", "sequence", "kind"]) ||
4060
4060
  event.execution_id !== executionID || !Number.isSafeInteger(event.sequence) || Number(event.sequence) <= cursor ||
4061
4061
  !["progress", "data", "diagnostic", "terminal"].includes(String(event.kind)) ||
4062
4062
  (event.payload !== undefined && !isRecord(event.payload)) ||
4063
- (event.error !== undefined && (!hasExactKeys(event.error, ["code", "message"]) || typeof event.error.code !== "string" || typeof event.error.message !== "string")))
4063
+ (event.error !== undefined && (!isRecord(event.error) || !hasRequiredKeys(event.error, ["code", "message"]) ||
4064
+ typeof event.error.code !== "string" || typeof event.error.message !== "string")))
4064
4065
  return false;
4065
4066
  cursor = Number(event.sequence);
4066
4067
  }
@@ -4086,10 +4087,9 @@ function isBridgeResponse(value) {
4086
4087
  if (!isBridgeResponseCandidate(value) || !validBridgeRequestID(value.id))
4087
4088
  return false;
4088
4089
  if (value.ok === true)
4089
- return Object.keys(value).every((key) => ["type", "id", "ok", "data"].includes(key));
4090
+ return true;
4090
4091
  if (value.ok !== false || typeof value.error_code !== "string" || !pluginBridgeErrorCodeSet.has(value.error_code) ||
4091
4092
  typeof value.error !== "string" || value.error.length > 4096 ||
4092
- !Object.keys(value).every((key) => ["type", "id", "ok", "error_code", "error", "error_details", "mutation_outcome"].includes(key)) ||
4093
4093
  (value.mutation_outcome !== undefined && value.mutation_outcome !== "committed" &&
4094
4094
  value.mutation_outcome !== "not_committed" && value.mutation_outcome !== "unknown")) {
4095
4095
  return false;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@floegence/redevplugin-ui",
3
- "version": "1.1.3",
3
+ "version": "2.0.1",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "repository": {
@@ -40,7 +40,7 @@
40
40
  "dist"
41
41
  ],
42
42
  "dependencies": {
43
- "@floegence/redevplugin-contracts": "1.1.3"
43
+ "@floegence/redevplugin-contracts": "2.0.1"
44
44
  },
45
45
  "publishConfig": {
46
46
  "access": "public"