@pellux/goodvibes-sdk 0.24.0 → 0.25.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.
Files changed (106) hide show
  1. package/dist/_internal/platform/agents/orchestrator.d.ts +2 -0
  2. package/dist/_internal/platform/agents/orchestrator.d.ts.map +1 -1
  3. package/dist/_internal/platform/agents/orchestrator.js +38 -0
  4. package/dist/_internal/platform/automation/delivery-manager.d.ts +5 -0
  5. package/dist/_internal/platform/automation/delivery-manager.d.ts.map +1 -1
  6. package/dist/_internal/platform/automation/delivery-manager.js +14 -1
  7. package/dist/_internal/platform/automation/manager-runtime.d.ts +5 -0
  8. package/dist/_internal/platform/automation/manager-runtime.d.ts.map +1 -1
  9. package/dist/_internal/platform/automation/manager-runtime.js +32 -0
  10. package/dist/_internal/platform/channels/plugin-registry.d.ts +6 -0
  11. package/dist/_internal/platform/channels/plugin-registry.d.ts.map +1 -1
  12. package/dist/_internal/platform/channels/plugin-registry.js +17 -4
  13. package/dist/_internal/platform/channels/route-manager.d.ts +7 -0
  14. package/dist/_internal/platform/channels/route-manager.d.ts.map +1 -1
  15. package/dist/_internal/platform/channels/route-manager.js +41 -3
  16. package/dist/_internal/platform/channels/surface-registry.d.ts +3 -1
  17. package/dist/_internal/platform/channels/surface-registry.d.ts.map +1 -1
  18. package/dist/_internal/platform/channels/surface-registry.js +16 -17
  19. package/dist/_internal/platform/config/schema-types.d.ts +1 -1
  20. package/dist/_internal/platform/config/schema-types.d.ts.map +1 -1
  21. package/dist/_internal/platform/control-plane/gateway.d.ts +5 -0
  22. package/dist/_internal/platform/control-plane/gateway.d.ts.map +1 -1
  23. package/dist/_internal/platform/control-plane/gateway.js +69 -4
  24. package/dist/_internal/platform/daemon/facade-composition.d.ts.map +1 -1
  25. package/dist/_internal/platform/daemon/facade-composition.js +2 -0
  26. package/dist/_internal/platform/daemon/facade.d.ts.map +1 -1
  27. package/dist/_internal/platform/daemon/facade.js +3 -1
  28. package/dist/_internal/platform/daemon/service-manager.d.ts +5 -0
  29. package/dist/_internal/platform/daemon/service-manager.d.ts.map +1 -1
  30. package/dist/_internal/platform/daemon/service-manager.js +29 -0
  31. package/dist/_internal/platform/integrations/delivery.d.ts +5 -1
  32. package/dist/_internal/platform/integrations/delivery.d.ts.map +1 -1
  33. package/dist/_internal/platform/integrations/delivery.js +8 -1
  34. package/dist/_internal/platform/integrations/notifier.d.ts +5 -1
  35. package/dist/_internal/platform/integrations/notifier.d.ts.map +1 -1
  36. package/dist/_internal/platform/integrations/notifier.js +6 -3
  37. package/dist/_internal/platform/permissions/manager.d.ts +3 -1
  38. package/dist/_internal/platform/permissions/manager.d.ts.map +1 -1
  39. package/dist/_internal/platform/permissions/manager.js +9 -5
  40. package/dist/_internal/platform/runtime/emitters/routes.d.ts +5 -0
  41. package/dist/_internal/platform/runtime/emitters/routes.d.ts.map +1 -1
  42. package/dist/_internal/platform/runtime/emitters/routes.js +3 -0
  43. package/dist/_internal/platform/runtime/events/contracts/automation-route.d.ts +1 -0
  44. package/dist/_internal/platform/runtime/events/contracts/automation-route.d.ts.map +1 -1
  45. package/dist/_internal/platform/runtime/events/contracts/automation-route.js +7 -0
  46. package/dist/_internal/platform/runtime/events/contracts.d.ts +1 -1
  47. package/dist/_internal/platform/runtime/events/contracts.d.ts.map +1 -1
  48. package/dist/_internal/platform/runtime/events/contracts.js +3 -2
  49. package/dist/_internal/platform/runtime/events/routes.d.ts +5 -0
  50. package/dist/_internal/platform/runtime/events/routes.d.ts.map +1 -1
  51. package/dist/_internal/platform/runtime/feature-flags/flags.d.ts.map +1 -1
  52. package/dist/_internal/platform/runtime/feature-flags/flags.js +17 -21
  53. package/dist/_internal/platform/runtime/feature-flags/gates.d.ts +7 -0
  54. package/dist/_internal/platform/runtime/feature-flags/gates.d.ts.map +1 -0
  55. package/dist/_internal/platform/runtime/feature-flags/gates.js +38 -0
  56. package/dist/_internal/platform/runtime/feature-flags/index.d.ts +2 -0
  57. package/dist/_internal/platform/runtime/feature-flags/index.d.ts.map +1 -1
  58. package/dist/_internal/platform/runtime/feature-flags/index.js +1 -0
  59. package/dist/_internal/platform/runtime/mcp/index.d.ts +2 -1
  60. package/dist/_internal/platform/runtime/mcp/index.d.ts.map +1 -1
  61. package/dist/_internal/platform/runtime/mcp/index.js +4 -1
  62. package/dist/_internal/platform/runtime/permissions/index.d.ts +20 -1
  63. package/dist/_internal/platform/runtime/permissions/index.d.ts.map +1 -1
  64. package/dist/_internal/platform/runtime/permissions/index.js +27 -1
  65. package/dist/_internal/platform/runtime/permissions/policy-loader.d.ts +6 -0
  66. package/dist/_internal/platform/runtime/permissions/policy-loader.d.ts.map +1 -1
  67. package/dist/_internal/platform/runtime/permissions/policy-loader.js +7 -2
  68. package/dist/_internal/platform/runtime/plugins/index.d.ts +2 -1
  69. package/dist/_internal/platform/runtime/plugins/index.d.ts.map +1 -1
  70. package/dist/_internal/platform/runtime/plugins/index.js +4 -1
  71. package/dist/_internal/platform/runtime/services.d.ts +1 -0
  72. package/dist/_internal/platform/runtime/services.d.ts.map +1 -1
  73. package/dist/_internal/platform/runtime/services.js +21 -5
  74. package/dist/_internal/platform/runtime/shell-command-ops.d.ts +2 -0
  75. package/dist/_internal/platform/runtime/shell-command-ops.d.ts.map +1 -1
  76. package/dist/_internal/platform/runtime/shell-command-ops.js +4 -1
  77. package/dist/_internal/platform/runtime/tasks/index.d.ts +2 -1
  78. package/dist/_internal/platform/runtime/tasks/index.d.ts.map +1 -1
  79. package/dist/_internal/platform/runtime/tasks/index.js +2 -2
  80. package/dist/_internal/platform/runtime/tasks/manager.d.ts +5 -1
  81. package/dist/_internal/platform/runtime/tasks/manager.d.ts.map +1 -1
  82. package/dist/_internal/platform/runtime/tasks/manager.js +30 -1
  83. package/dist/_internal/platform/runtime/telemetry/index.d.ts +9 -3
  84. package/dist/_internal/platform/runtime/telemetry/index.d.ts.map +1 -1
  85. package/dist/_internal/platform/runtime/telemetry/index.js +7 -4
  86. package/dist/_internal/platform/runtime/tools/index.d.ts.map +1 -1
  87. package/dist/_internal/platform/runtime/tools/index.js +4 -1
  88. package/dist/_internal/platform/runtime/tools/types.d.ts +6 -0
  89. package/dist/_internal/platform/runtime/tools/types.d.ts.map +1 -1
  90. package/dist/_internal/platform/security/token-audit.d.ts +7 -0
  91. package/dist/_internal/platform/security/token-audit.d.ts.map +1 -1
  92. package/dist/_internal/platform/security/token-audit.js +6 -2
  93. package/dist/_internal/platform/state/mode-manager.d.ts +7 -0
  94. package/dist/_internal/platform/state/mode-manager.d.ts.map +1 -1
  95. package/dist/_internal/platform/state/mode-manager.js +25 -0
  96. package/dist/_internal/platform/tools/index.d.ts +4 -0
  97. package/dist/_internal/platform/tools/index.d.ts.map +1 -1
  98. package/dist/_internal/platform/tools/index.js +37 -23
  99. package/dist/_internal/platform/tools/shared/overflow.d.ts +3 -0
  100. package/dist/_internal/platform/tools/shared/overflow.d.ts.map +1 -1
  101. package/dist/_internal/platform/tools/shared/overflow.js +6 -2
  102. package/dist/_internal/platform/version.js +1 -1
  103. package/dist/_internal/platform/watchers/registry.d.ts +6 -0
  104. package/dist/_internal/platform/watchers/registry.d.ts.map +1 -1
  105. package/dist/_internal/platform/watchers/registry.js +32 -0
  106. package/package.json +1 -1
@@ -3,6 +3,7 @@ import { dirname, join, resolve } from 'node:path';
3
3
  import { spawnSync, spawn } from 'node:child_process';
4
4
  import { ConfigManager } from '../config/manager.js';
5
5
  import { resolveScopedDirectory } from '../runtime/surface-root.js';
6
+ import { isFeatureGateEnabled, requireFeatureGate } from '../runtime/feature-flags/index.js';
6
7
  function detectPlatform(platform) {
7
8
  switch (platform) {
8
9
  case 'systemd':
@@ -166,6 +167,7 @@ export class PlatformServiceManager {
166
167
  binaryBaseName;
167
168
  defaultServiceName;
168
169
  defaultServiceDescription;
170
+ featureFlags;
169
171
  constructor(configManager, options) {
170
172
  this.configManager = configManager;
171
173
  this.workingDirectory = resolve(options.workingDirectory);
@@ -176,6 +178,13 @@ export class PlatformServiceManager {
176
178
  this.binaryBaseName = options.binaryBaseName;
177
179
  this.defaultServiceName = options.defaultServiceName;
178
180
  this.defaultServiceDescription = options.defaultServiceDescription;
181
+ this.featureFlags = options.featureFlags ?? null;
182
+ }
183
+ isEnabled() {
184
+ return isFeatureGateEnabled(this.featureFlags, 'service-management', ['service-installation']);
185
+ }
186
+ requireEnabled(operation) {
187
+ requireFeatureGate(this.featureFlags, 'service-management', operation, ['service-installation']);
179
188
  }
180
189
  getPaths() {
181
190
  return {
@@ -187,6 +196,21 @@ export class PlatformServiceManager {
187
196
  const platform = detectPlatform(String(this.configManager.get('service.platform')));
188
197
  const serviceName = resolveServiceName(this.configManager, this.defaultServiceName);
189
198
  const path = definitionPath(platform, serviceName, this.getPaths(), this.surfaceRoot);
199
+ if (!this.isEnabled()) {
200
+ const definition = this.resolveDefinition();
201
+ return {
202
+ platform,
203
+ path,
204
+ installed: false,
205
+ autostart: false,
206
+ running: false,
207
+ logPath: resolveLogPath(this.configManager, platform, this.workingDirectory, this.surfaceRoot),
208
+ commandPreview: [definition.command, ...definition.args].join(' '),
209
+ suggestedCommands: [],
210
+ lastAction: 'status',
211
+ actionError: 'service-management feature flag is disabled',
212
+ };
213
+ }
190
214
  const installed = existsSync(path);
191
215
  const pidPath = pidFilePath(platform, this.workingDirectory, this.surfaceRoot);
192
216
  const pid = existsSync(pidPath) ? this.readPid(pidPath) : undefined;
@@ -210,6 +234,7 @@ export class PlatformServiceManager {
210
234
  };
211
235
  }
212
236
  install() {
237
+ this.requireEnabled('install service');
213
238
  const platform = detectPlatform(String(this.configManager.get('service.platform')));
214
239
  const serviceName = resolveServiceName(this.configManager, this.defaultServiceName);
215
240
  const definition = this.resolveDefinition();
@@ -229,6 +254,7 @@ export class PlatformServiceManager {
229
254
  };
230
255
  }
231
256
  uninstall() {
257
+ this.requireEnabled('uninstall service');
232
258
  const status = this.status();
233
259
  if (existsSync(status.path)) {
234
260
  rmSync(status.path, { force: true });
@@ -243,6 +269,7 @@ export class PlatformServiceManager {
243
269
  };
244
270
  }
245
271
  start() {
272
+ this.requireEnabled('start service');
246
273
  const platform = detectPlatform(String(this.configManager.get('service.platform')));
247
274
  if (platform === 'manual') {
248
275
  return this.startManual(platform);
@@ -250,6 +277,7 @@ export class PlatformServiceManager {
250
277
  return this.runPlatformAction(platform, 'start');
251
278
  }
252
279
  stop() {
280
+ this.requireEnabled('stop service');
253
281
  const platform = detectPlatform(String(this.configManager.get('service.platform')));
254
282
  if (platform === 'manual') {
255
283
  return this.stopManual(platform);
@@ -257,6 +285,7 @@ export class PlatformServiceManager {
257
285
  return this.runPlatformAction(platform, 'stop');
258
286
  }
259
287
  restart() {
288
+ this.requireEnabled('restart service');
260
289
  const platform = detectPlatform(String(this.configManager.get('service.platform')));
261
290
  if (platform === 'manual') {
262
291
  this.stopManual(platform);
@@ -1,4 +1,5 @@
1
1
  import { GoodVibesSdkError } from '../../errors/index.js';
2
+ import type { FeatureFlagManager } from '../runtime/feature-flags/index.js';
2
3
  /**
3
4
  * The three possible outcomes for a single integration delivery attempt.
4
5
  *
@@ -92,6 +93,9 @@ export interface DeliveryQueueConfig {
92
93
  */
93
94
  sloEnforced: boolean;
94
95
  }
96
+ export interface DeliveryQueueOptions extends Partial<DeliveryQueueConfig> {
97
+ readonly featureFlags?: Pick<FeatureFlagManager, 'isEnabled'> | null;
98
+ }
95
99
  /**
96
100
  * Delivery queue with retry/backoff and dead-letter storage.
97
101
  *
@@ -117,7 +121,7 @@ export declare class DeliveryQueue {
117
121
  private _delivered;
118
122
  private _retrying;
119
123
  private _deadLettered;
120
- constructor(config?: Partial<DeliveryQueueConfig>);
124
+ constructor(config?: DeliveryQueueOptions);
121
125
  /**
122
126
  * Enqueue a delivery attempt.
123
127
  *
@@ -1 +1 @@
1
- {"version":3,"file":"delivery.d.ts","sourceRoot":"","sources":["../../../../src/_internal/platform/integrations/delivery.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"delivery.d.ts","sourceRoot":"","sources":["../../../../src/_internal/platform/integrations/delivery.ts"],"names":[],"mappings":"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"}
@@ -94,7 +94,14 @@ export class DeliveryQueue {
94
94
  _retrying = 0;
95
95
  _deadLettered = 0;
96
96
  constructor(config = {}) {
97
- this._config = { ...DEFAULT_CONFIG, ...config };
97
+ const { featureFlags, ...queueConfig } = config;
98
+ this._config = {
99
+ ...DEFAULT_CONFIG,
100
+ ...queueConfig,
101
+ sloEnforced: queueConfig.sloEnforced
102
+ ?? featureFlags?.isEnabled('integration-delivery-slo')
103
+ ?? DEFAULT_CONFIG.sloEnforced,
104
+ };
98
105
  }
99
106
  // -------------------------------------------------------------------------
100
107
  // Public API
@@ -3,6 +3,7 @@ import { SlackIntegration } from './slack.js';
3
3
  import { DiscordIntegration } from './discord.js';
4
4
  import type { DeliveryQueueConfig, IntegrationQueueStatus } from './delivery.js';
5
5
  import { ServiceRegistry } from '../config/service-registry.js';
6
+ import type { FeatureFlagManager } from '../runtime/feature-flags/index.js';
6
7
  /**
7
8
  * Notifier — unified notification dispatcher.
8
9
  *
@@ -21,11 +22,14 @@ export declare class Notifier {
21
22
  slack?: SlackIntegration;
22
23
  discord?: DiscordIntegration;
23
24
  delivery?: Partial<DeliveryQueueConfig>;
25
+ featureFlags?: Pick<FeatureFlagManager, 'isEnabled'> | null;
24
26
  });
25
27
  /**
26
28
  * Create a Notifier pre-wired from configured services and environment variables.
27
29
  */
28
- static fromConfig(serviceRegistry: Pick<ServiceRegistry, 'resolveSecret'>): Promise<Notifier>;
30
+ static fromConfig(serviceRegistry: Pick<ServiceRegistry, 'resolveSecret'>, options?: {
31
+ featureFlags?: Pick<FeatureFlagManager, 'isEnabled'> | null;
32
+ }): Promise<Notifier>;
29
33
  /**
30
34
  * Send a notification to all configured channels.
31
35
  *
@@ -1 +1 @@
1
- {"version":3,"file":"notifier.d.ts","sourceRoot":"","sources":["../../../../src/_internal/platform/integrations/notifier.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAA6B,MAAM,4BAA4B,CAAC;AAC7F,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAElD,OAAO,KAAK,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AAEjF,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAMhE;;;;;;;;GAQG;AACH,qBAAa,QAAQ;IACnB,OAAO,CAAC,KAAK,CAAC,CAAmB;IACjC,OAAO,CAAC,OAAO,CAAC,CAAqB;IACrC,OAAO,CAAC,aAAa,CAAyB;IAC9C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgB;gBAE3B,OAAO,CAAC,EAAE;QACpB,KAAK,CAAC,EAAE,gBAAgB,CAAC;QACzB,OAAO,CAAC,EAAE,kBAAkB,CAAC;QAC7B,QAAQ,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC,CAAC;KACzC;IAMD;;OAEG;WACU,UAAU,CAAC,eAAe,EAAE,IAAI,CAAC,eAAe,EAAE,eAAe,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC;IAmCnG;;;;;OAKG;IACG,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAczE;;;OAGG;IACH,cAAc,IAAI,sBAAsB,EAAE;IAY1C;;;OAGG;IACG,iBAAiB,IAAI,OAAO,CAAC,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,sDAAsD,EAAE,eAAe,CAAA;KAAE,CAAC,CAAC;IAalJ,4EAA4E;IAC5E,OAAO,IAAI,IAAI;IAIf,kBAAkB,CAAC,GAAG,EAAE,eAAe,GAAG,IAAI;IAoC9C,6CAA6C;IAC7C,MAAM,IAAI,IAAI;IAWd,OAAO,CAAC,UAAU;CAuBnB"}
1
+ {"version":3,"file":"notifier.d.ts","sourceRoot":"","sources":["../../../../src/_internal/platform/integrations/notifier.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAA6B,MAAM,4BAA4B,CAAC;AAC7F,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAElD,OAAO,KAAK,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AAEjF,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AAM5E;;;;;;;;GAQG;AACH,qBAAa,QAAQ;IACnB,OAAO,CAAC,KAAK,CAAC,CAAmB;IACjC,OAAO,CAAC,OAAO,CAAC,CAAqB;IACrC,OAAO,CAAC,aAAa,CAAyB;IAC9C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgB;gBAE3B,OAAO,CAAC,EAAE;QACpB,KAAK,CAAC,EAAE,gBAAgB,CAAC;QACzB,OAAO,CAAC,EAAE,kBAAkB,CAAC;QAC7B,QAAQ,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC,CAAC;QACxC,YAAY,CAAC,EAAE,IAAI,CAAC,kBAAkB,EAAE,WAAW,CAAC,GAAG,IAAI,CAAC;KAC7D;IASD;;OAEG;WACU,UAAU,CACrB,eAAe,EAAE,IAAI,CAAC,eAAe,EAAE,eAAe,CAAC,EACvD,OAAO,GAAE;QAAE,YAAY,CAAC,EAAE,IAAI,CAAC,kBAAkB,EAAE,WAAW,CAAC,GAAG,IAAI,CAAA;KAAO,GAC5E,OAAO,CAAC,QAAQ,CAAC;IAmCpB;;;;;OAKG;IACG,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAczE;;;OAGG;IACH,cAAc,IAAI,sBAAsB,EAAE;IAY1C;;;OAGG;IACG,iBAAiB,IAAI,OAAO,CAAC,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,sDAAsD,EAAE,eAAe,CAAA;KAAE,CAAC,CAAC;IAalJ,4EAA4E;IAC5E,OAAO,IAAI,IAAI;IAIf,kBAAkB,CAAC,GAAG,EAAE,eAAe,GAAG,IAAI;IAoC9C,6CAA6C;IAC7C,MAAM,IAAI,IAAI;IAWd,OAAO,CAAC,UAAU;CAuBnB"}
@@ -24,12 +24,15 @@ export class Notifier {
24
24
  constructor(options) {
25
25
  this.slack = options?.slack;
26
26
  this.discord = options?.discord;
27
- this._queue = new DeliveryQueue(options?.delivery ?? {});
27
+ this._queue = new DeliveryQueue({
28
+ ...(options?.delivery ?? {}),
29
+ featureFlags: options?.featureFlags,
30
+ });
28
31
  }
29
32
  /**
30
33
  * Create a Notifier pre-wired from configured services and environment variables.
31
34
  */
32
- static async fromConfig(serviceRegistry) {
35
+ static async fromConfig(serviceRegistry, options = {}) {
33
36
  const [slackWebhookFromService, slackTokenFromService, discordWebhookFromService, discordTokenFromService,] = await Promise.all([
34
37
  serviceRegistry.resolveSecret('slack', 'webhookUrl'),
35
38
  serviceRegistry.resolveSecret('slack', 'primary'),
@@ -46,7 +49,7 @@ export class Notifier {
46
49
  const discord = discordWebhook || discordToken
47
50
  ? new DiscordIntegration(discordWebhook, discordToken)
48
51
  : undefined;
49
- return new Notifier({ slack, discord });
52
+ return new Notifier({ slack, discord, featureFlags: options.featureFlags });
50
53
  }
51
54
  // -------------------------------------------------------------------------
52
55
  // Public API
@@ -1,6 +1,7 @@
1
1
  import { getConfigSnapshot } from '../config/index.js';
2
2
  import type { PermissionRequestHandler } from './prompt.js';
3
3
  import type { PolicyRuntimeState } from '../runtime/permissions/policy-runtime.js';
4
+ import type { FeatureFlagManager } from '../runtime/feature-flags/index.js';
4
5
  import type { HookDispatcher } from '../hooks/index.js';
5
6
  import type { ConfigManager } from '../config/manager.js';
6
7
  import type { PermissionCategory, PermissionCheckResult } from './types.js';
@@ -29,7 +30,8 @@ export declare class PermissionManager {
29
30
  private readonly configReader;
30
31
  private readonly hookDispatcher;
31
32
  private readonly policyRuntimeState;
32
- constructor(requestPermission: PermissionRequestHandler | undefined, configReader: PermissionConfigReader, policyRuntimeState: Pick<PolicyRuntimeState, 'recordPermissionRequest' | 'recordPermissionDecision' | 'getRegistry'>, hookDispatcher?: Pick<HookDispatcher, 'fire'> | null);
33
+ private readonly featureFlags;
34
+ constructor(requestPermission: PermissionRequestHandler | undefined, configReader: PermissionConfigReader, policyRuntimeState: Pick<PolicyRuntimeState, 'recordPermissionRequest' | 'recordPermissionDecision' | 'getRegistry'>, hookDispatcher?: Pick<HookDispatcher, 'fire'> | null, featureFlags?: Pick<FeatureFlagManager, 'isEnabled'> | null);
33
35
  /**
34
36
  * check - Returns a Promise that resolves to true (approved) or false (denied).
35
37
  * Blocks orchestrator until the user responds when a prompt is needed.
@@ -1 +1 @@
1
- {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../../../src/_internal/platform/permissions/manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAwB,MAAM,oBAAoB,CAAC;AAE7E,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAE5D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0CAA0C,CAAC;AAGnF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE1D,OAAO,KAAK,EACV,kBAAkB,EAClB,qBAAqB,EAGtB,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,YAAY,EACV,kBAAkB,EAClB,mBAAmB,EACnB,wBAAwB,EACxB,4BAA4B,EAC5B,yBAAyB,EACzB,qBAAqB,GACtB,MAAM,YAAY,CAAC;AAEpB,KAAK,wBAAwB,GAAG,UAAU,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAErE,MAAM,WAAW,sBAAsB;IACrC,oBAAoB,IAAI,OAAO,CAAC;IAChC,WAAW,IAAI,wBAAwB,CAAC;IACxC,mBAAmB,IAAI,MAAM,GAAG,IAAI,CAAC;CACtC;AAED,wBAAgB,4BAA4B,CAC1C,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE,KAAK,GAAG,QAAQ,GAAG,qBAAqB,CAAC,GAC3E,sBAAsB,CAMxB;AAyCD;;;;;;;;;GASG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,gBAAgB,CAA8B;IACtD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAA2B;IAC7D,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAyB;IACtD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAsC;IACrE,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAmG;gBAGpI,iBAAiB,EAAE,wBAAwB,YAAqD,EAChG,YAAY,EAAE,sBAAsB,EACpC,kBAAkB,EAAE,IAAI,CAAC,kBAAkB,EAAE,yBAAyB,GAAG,0BAA0B,GAAG,aAAa,CAAC,EACpH,cAAc,GAAE,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,GAAG,IAAW;IAQ5D;;;OAGG;IACG,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAKxE,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAkGpG,4FAA4F;IAC5F,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAAG,kBAAkB;IAOrF;;;OAGG;IACH,OAAO,CAAC,cAAc;IAWtB,OAAO,CAAC,MAAM;IAgBd,OAAO,CAAC,qBAAqB;IAe7B,OAAO,CAAC,oBAAoB;IAiC5B,OAAO,CAAC,aAAa;YA0BP,QAAQ;CAsBvB"}
1
+ {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../../../src/_internal/platform/permissions/manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAwB,MAAM,oBAAoB,CAAC;AAE7E,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAE5D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0CAA0C,CAAC;AAGnF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AAC5E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE1D,OAAO,KAAK,EACV,kBAAkB,EAClB,qBAAqB,EAGtB,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,YAAY,EACV,kBAAkB,EAClB,mBAAmB,EACnB,wBAAwB,EACxB,4BAA4B,EAC5B,yBAAyB,EACzB,qBAAqB,GACtB,MAAM,YAAY,CAAC;AAEpB,KAAK,wBAAwB,GAAG,UAAU,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAErE,MAAM,WAAW,sBAAsB;IACrC,oBAAoB,IAAI,OAAO,CAAC;IAChC,WAAW,IAAI,wBAAwB,CAAC;IACxC,mBAAmB,IAAI,MAAM,GAAG,IAAI,CAAC;CACtC;AAED,wBAAgB,4BAA4B,CAC1C,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE,KAAK,GAAG,QAAQ,GAAG,qBAAqB,CAAC,GAC3E,sBAAsB,CAMxB;AAyCD;;;;;;;;;GASG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,gBAAgB,CAA8B;IACtD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAA2B;IAC7D,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAyB;IACtD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAsC;IACrE,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAmG;IACtI,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA+C;gBAG1E,iBAAiB,EAAE,wBAAwB,YAAqD,EAChG,YAAY,EAAE,sBAAsB,EACpC,kBAAkB,EAAE,IAAI,CAAC,kBAAkB,EAAE,yBAAyB,GAAG,0BAA0B,GAAG,aAAa,CAAC,EACpH,cAAc,GAAE,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,GAAG,IAAW,EAC1D,YAAY,GAAE,IAAI,CAAC,kBAAkB,EAAE,WAAW,CAAC,GAAG,IAAW;IASnE;;;OAGG;IACG,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAKxE,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAoGpG,4FAA4F;IAC5F,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAAG,kBAAkB;IAOrF;;;OAGG;IACH,OAAO,CAAC,cAAc;IAWtB,OAAO,CAAC,MAAM;IAgBd,OAAO,CAAC,qBAAqB;IAe7B,OAAO,CAAC,oBAAoB;IAiC5B,OAAO,CAAC,aAAa;YA0BP,QAAQ;CAsBvB"}
@@ -62,11 +62,13 @@ export class PermissionManager {
62
62
  configReader;
63
63
  hookDispatcher;
64
64
  policyRuntimeState;
65
- constructor(requestPermission = async () => ({ approved: false, remember: false }), configReader, policyRuntimeState, hookDispatcher = null) {
65
+ featureFlags;
66
+ constructor(requestPermission = async () => ({ approved: false, remember: false }), configReader, policyRuntimeState, hookDispatcher = null, featureFlags = null) {
66
67
  this.requestPermission = requestPermission;
67
68
  this.configReader = configReader;
68
69
  this.policyRuntimeState = policyRuntimeState;
69
70
  this.hookDispatcher = hookDispatcher;
71
+ this.featureFlags = featureFlags;
70
72
  }
71
73
  /**
72
74
  * check - Returns a Promise that resolves to true (approved) or false (denied).
@@ -102,10 +104,12 @@ export class PermissionManager {
102
104
  if (mode === 'allow-all') {
103
105
  return this.emitAndReturn(callId, toolName, category, this.result(true, false, 'runtime_mode', 'mode_allow_all', analysis));
104
106
  }
105
- const evaluatorDecision = this.evaluateRuntimePolicy(toolName, args, mode);
106
- const mappedDecision = this.mapEvaluatorDecision(evaluatorDecision, analysis);
107
- if (mappedDecision) {
108
- return this.emitAndReturn(callId, toolName, category, mappedDecision);
107
+ if (this.featureFlags?.isEnabled('permissions-policy-engine') === true) {
108
+ const evaluatorDecision = this.evaluateRuntimePolicy(toolName, args, mode);
109
+ const mappedDecision = this.mapEvaluatorDecision(evaluatorDecision, analysis);
110
+ if (mappedDecision) {
111
+ return this.emitAndReturn(callId, toolName, category, mappedDecision);
112
+ }
109
113
  }
110
114
  // 3. custom mode: check per-tool setting
111
115
  if (mode === 'custom') {
@@ -15,6 +15,11 @@ export declare function emitRouteBindingUpdated(bus: RuntimeEventBus, ctx: Emitt
15
15
  bindingId: string;
16
16
  changedFields: string[];
17
17
  }): void;
18
+ export declare function emitRouteBindingRemoved(bus: RuntimeEventBus, ctx: EmitterContext, data: {
19
+ bindingId: string;
20
+ surfaceKind: RouteSurfaceKind;
21
+ externalId: string;
22
+ }): void;
18
23
  export declare function emitRouteBindingResolved(bus: RuntimeEventBus, ctx: EmitterContext, data: {
19
24
  bindingId: string;
20
25
  surfaceKind: RouteSurfaceKind;
@@ -1 +1 @@
1
- {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../../../../src/_internal/platform/runtime/emitters/routes.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,KAAK,EAAc,gBAAgB,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACzF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAUjD,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,IAAI,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,gBAAgB,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,eAAe,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAC5H,IAAI,CAEN;AAED,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,IAAI,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,EAAE,CAAA;CAAE,GACnD,IAAI,CAEN;AAED,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,IAAI,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,gBAAgB,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,eAAe,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAC5H,IAAI,CAEN;AAED,wBAAgB,4BAA4B,CAC1C,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,IAAI,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,gBAAgB,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GACtH,IAAI,CAEN;AAED,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,IAAI,EAAE;IAAE,WAAW,EAAE,gBAAgB,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACzE,IAAI,CAEN"}
1
+ {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../../../../src/_internal/platform/runtime/emitters/routes.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,KAAK,EAAc,gBAAgB,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACzF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAUjD,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,IAAI,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,gBAAgB,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,eAAe,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAC5H,IAAI,CAEN;AAED,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,IAAI,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,EAAE,CAAA;CAAE,GACnD,IAAI,CAEN;AAED,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,IAAI,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,gBAAgB,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAC7E,IAAI,CAEN;AAED,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,IAAI,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,gBAAgB,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,eAAe,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAC5H,IAAI,CAEN;AAED,wBAAgB,4BAA4B,CAC1C,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,IAAI,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,gBAAgB,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GACtH,IAAI,CAEN;AAED,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,IAAI,EAAE;IAAE,WAAW,EAAE,gBAAgB,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACzE,IAAI,CAEN"}
@@ -11,6 +11,9 @@ export function emitRouteBindingCreated(bus, ctx, data) {
11
11
  export function emitRouteBindingUpdated(bus, ctx, data) {
12
12
  bus.emit('routes', routeEvent('ROUTE_BINDING_UPDATED', data, ctx));
13
13
  }
14
+ export function emitRouteBindingRemoved(bus, ctx, data) {
15
+ bus.emit('routes', routeEvent('ROUTE_BINDING_REMOVED', data, ctx));
16
+ }
14
17
  export function emitRouteBindingResolved(bus, ctx, data) {
15
18
  bus.emit('routes', routeEvent('ROUTE_BINDING_RESOLVED', data, ctx));
16
19
  }
@@ -14,6 +14,7 @@ export declare function validateAutomationScheduleError(v: unknown): ContractRes
14
14
  export declare function validateAutomationJobAutoDisabled(v: unknown): ContractResult;
15
15
  export declare function validateRouteBindingCreated(v: unknown): ContractResult;
16
16
  export declare function validateRouteBindingUpdated(v: unknown): ContractResult;
17
+ export declare function validateRouteBindingRemoved(v: unknown): ContractResult;
17
18
  export declare function validateRouteBindingResolved(v: unknown): ContractResult;
18
19
  export declare function validateRouteReplyTargetCaptured(v: unknown): ContractResult;
19
20
  export declare function validateRouteBindingFailed(v: unknown): ContractResult;
@@ -1 +1 @@
1
- {"version":3,"file":"automation-route.d.ts","sourceRoot":"","sources":["../../../../../../src/_internal/platform/runtime/events/contracts/automation-route.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"automation-route.d.ts","sourceRoot":"","sources":["../../../../../../src/_internal/platform/runtime/events/contracts/automation-route.ts"],"names":[],"mappings":"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"}
@@ -116,6 +116,13 @@ export function validateRouteBindingUpdated(v) {
116
116
  { key: 'changedFields', kind: 'string[]' },
117
117
  ]);
118
118
  }
119
+ export function validateRouteBindingRemoved(v) {
120
+ return validateEventFields('ROUTE_BINDING_REMOVED', v, [
121
+ { key: 'bindingId', kind: 'string' },
122
+ { key: 'surfaceKind', kind: 'enum', values: ROUTE_SURFACE_KINDS },
123
+ { key: 'externalId', kind: 'string' },
124
+ ]);
125
+ }
119
126
  export function validateRouteBindingResolved(v) {
120
127
  return validateEventFields('ROUTE_BINDING_RESOLVED', v, [
121
128
  { key: 'bindingId', kind: 'string' },
@@ -4,7 +4,7 @@
4
4
  export { type ContractResult, type EventEnvelopeShape, type FieldKind, type FieldSpec, validateEnvelope, validateEventFields, isString, isNumber, isBoolean, isObject, } from './contracts/shared.js';
5
5
  export { validateTurnStarted, validateTurnStreaming, validateTurnCompleted, validateTurnFailed, validateTurnCancelled, validateToolReceived, validateToolSucceeded, validateToolFailed, } from './contracts/turn-tool.js';
6
6
  export { validateAgentSpawning, validateAgentCompleted, validateAgentFailed, validateMcpConnected, validateMcpDisconnected, validateMcpReconnecting, } from './contracts/agent-mcp.js';
7
- export { validatePluginLoaded, validatePluginFailed, validateAutomationJobCreated, validateAutomationJobUpdated, validateAutomationJobEnabled, validateAutomationJobDisabled, validateAutomationRunQueued, validateAutomationRunStarted, validateAutomationRunCompleted, validateAutomationRunFailed, validateAutomationRunCancelled, validateAutomationScheduleError, validateAutomationJobAutoDisabled, validateRouteBindingCreated, validateRouteBindingUpdated, validateRouteBindingResolved, validateRouteReplyTargetCaptured, validateRouteBindingFailed, validateControlPlaneClientConnected, validateControlPlaneClientDisconnected, validateControlPlaneSubscriptionCreated, validateControlPlaneSubscriptionDropped, validateControlPlaneAuthGranted, validateControlPlaneAuthRejected, validateDeliveryQueued, validateDeliveryStarted, validateDeliverySucceeded, validateDeliveryFailed, validateDeliveryDeadLettered, validateWatcherStarted, validateWatcherHeartbeat, validateWatcherCheckpointAdvanced, validateWatcherFailed, validateWatcherStopped, validateSurfaceEnabled, validateSurfaceDisabled, validateSurfaceAccountConnected, validateSurfaceAccountDegraded, validateSurfaceCapabilityChanged, } from './contracts/automation-route.js';
7
+ export { validatePluginLoaded, validatePluginFailed, validateAutomationJobCreated, validateAutomationJobUpdated, validateAutomationJobEnabled, validateAutomationJobDisabled, validateAutomationRunQueued, validateAutomationRunStarted, validateAutomationRunCompleted, validateAutomationRunFailed, validateAutomationRunCancelled, validateAutomationScheduleError, validateAutomationJobAutoDisabled, validateRouteBindingCreated, validateRouteBindingUpdated, validateRouteBindingRemoved, validateRouteBindingResolved, validateRouteReplyTargetCaptured, validateRouteBindingFailed, validateControlPlaneClientConnected, validateControlPlaneClientDisconnected, validateControlPlaneSubscriptionCreated, validateControlPlaneSubscriptionDropped, validateControlPlaneAuthGranted, validateControlPlaneAuthRejected, validateDeliveryQueued, validateDeliveryStarted, validateDeliverySucceeded, validateDeliveryFailed, validateDeliveryDeadLettered, validateWatcherStarted, validateWatcherHeartbeat, validateWatcherCheckpointAdvanced, validateWatcherFailed, validateWatcherStopped, validateSurfaceEnabled, validateSurfaceDisabled, validateSurfaceAccountConnected, validateSurfaceAccountDegraded, validateSurfaceCapabilityChanged, } from './contracts/automation-route.js';
8
8
  export declare function validateEvent(event: unknown): import('./contracts/shared.js').ContractResult;
9
9
  export declare function isKnownEventType(type: unknown): type is string;
10
10
  export declare function registeredEventTypes(): readonly string[];
@@ -1 +1 @@
1
- {"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../../../../../src/_internal/platform/runtime/events/contracts.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,kBAAkB,EACvB,KAAK,SAAS,EACd,KAAK,SAAS,EACd,gBAAgB,EAChB,mBAAmB,EACnB,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,QAAQ,GACT,MAAM,uBAAuB,CAAC;AAO/B,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,qBAAqB,EACrB,kBAAkB,EAClB,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,qBAAqB,EACrB,sBAAsB,EACtB,mBAAmB,EACnB,oBAAoB,EACpB,uBAAuB,EACvB,uBAAuB,GACxB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,oBAAoB,EACpB,oBAAoB,EACpB,4BAA4B,EAC5B,4BAA4B,EAC5B,4BAA4B,EAC5B,6BAA6B,EAC7B,2BAA2B,EAC3B,4BAA4B,EAC5B,8BAA8B,EAC9B,2BAA2B,EAC3B,8BAA8B,EAC9B,+BAA+B,EAC/B,iCAAiC,EACjC,2BAA2B,EAC3B,2BAA2B,EAC3B,4BAA4B,EAC5B,gCAAgC,EAChC,0BAA0B,EAC1B,mCAAmC,EACnC,sCAAsC,EACtC,uCAAuC,EACvC,uCAAuC,EACvC,+BAA+B,EAC/B,gCAAgC,EAChC,sBAAsB,EACtB,uBAAuB,EACvB,yBAAyB,EACzB,sBAAsB,EACtB,4BAA4B,EAC5B,sBAAsB,EACtB,wBAAwB,EACxB,iCAAiC,EACjC,qBAAqB,EACrB,sBAAsB,EACtB,sBAAsB,EACtB,uBAAuB,EACvB,+BAA+B,EAC/B,8BAA8B,EAC9B,gCAAgC,GACjC,MAAM,iCAAiC,CAAC;AAsHzC,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,uBAAuB,EAAE,cAAc,CAO5F;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,MAAM,CAE9D;AAED,wBAAgB,oBAAoB,IAAI,SAAS,MAAM,EAAE,CAExD"}
1
+ {"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../../../../../src/_internal/platform/runtime/events/contracts.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,kBAAkB,EACvB,KAAK,SAAS,EACd,KAAK,SAAS,EACd,gBAAgB,EAChB,mBAAmB,EACnB,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,QAAQ,GACT,MAAM,uBAAuB,CAAC;AAO/B,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,qBAAqB,EACrB,kBAAkB,EAClB,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,qBAAqB,EACrB,sBAAsB,EACtB,mBAAmB,EACnB,oBAAoB,EACpB,uBAAuB,EACvB,uBAAuB,GACxB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,oBAAoB,EACpB,oBAAoB,EACpB,4BAA4B,EAC5B,4BAA4B,EAC5B,4BAA4B,EAC5B,6BAA6B,EAC7B,2BAA2B,EAC3B,4BAA4B,EAC5B,8BAA8B,EAC9B,2BAA2B,EAC3B,8BAA8B,EAC9B,+BAA+B,EAC/B,iCAAiC,EACjC,2BAA2B,EAC3B,2BAA2B,EAC3B,2BAA2B,EAC3B,4BAA4B,EAC5B,gCAAgC,EAChC,0BAA0B,EAC1B,mCAAmC,EACnC,sCAAsC,EACtC,uCAAuC,EACvC,uCAAuC,EACvC,+BAA+B,EAC/B,gCAAgC,EAChC,sBAAsB,EACtB,uBAAuB,EACvB,yBAAyB,EACzB,sBAAsB,EACtB,4BAA4B,EAC5B,sBAAsB,EACtB,wBAAwB,EACxB,iCAAiC,EACjC,qBAAqB,EACrB,sBAAsB,EACtB,sBAAsB,EACtB,uBAAuB,EACvB,+BAA+B,EAC/B,8BAA8B,EAC9B,gCAAgC,GACjC,MAAM,iCAAiC,CAAC;AAwHzC,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,uBAAuB,EAAE,cAAc,CAO5F;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,MAAM,CAE9D;AAED,wBAAgB,oBAAoB,IAAI,SAAS,MAAM,EAAE,CAExD"}
@@ -5,10 +5,10 @@ export { validateEnvelope, validateEventFields, isString, isNumber, isBoolean, i
5
5
  import { isObject, isString, } from './contracts/shared.js';
6
6
  export { validateTurnStarted, validateTurnStreaming, validateTurnCompleted, validateTurnFailed, validateTurnCancelled, validateToolReceived, validateToolSucceeded, validateToolFailed, } from './contracts/turn-tool.js';
7
7
  export { validateAgentSpawning, validateAgentCompleted, validateAgentFailed, validateMcpConnected, validateMcpDisconnected, validateMcpReconnecting, } from './contracts/agent-mcp.js';
8
- export { validatePluginLoaded, validatePluginFailed, validateAutomationJobCreated, validateAutomationJobUpdated, validateAutomationJobEnabled, validateAutomationJobDisabled, validateAutomationRunQueued, validateAutomationRunStarted, validateAutomationRunCompleted, validateAutomationRunFailed, validateAutomationRunCancelled, validateAutomationScheduleError, validateAutomationJobAutoDisabled, validateRouteBindingCreated, validateRouteBindingUpdated, validateRouteBindingResolved, validateRouteReplyTargetCaptured, validateRouteBindingFailed, validateControlPlaneClientConnected, validateControlPlaneClientDisconnected, validateControlPlaneSubscriptionCreated, validateControlPlaneSubscriptionDropped, validateControlPlaneAuthGranted, validateControlPlaneAuthRejected, validateDeliveryQueued, validateDeliveryStarted, validateDeliverySucceeded, validateDeliveryFailed, validateDeliveryDeadLettered, validateWatcherStarted, validateWatcherHeartbeat, validateWatcherCheckpointAdvanced, validateWatcherFailed, validateWatcherStopped, validateSurfaceEnabled, validateSurfaceDisabled, validateSurfaceAccountConnected, validateSurfaceAccountDegraded, validateSurfaceCapabilityChanged, } from './contracts/automation-route.js';
8
+ export { validatePluginLoaded, validatePluginFailed, validateAutomationJobCreated, validateAutomationJobUpdated, validateAutomationJobEnabled, validateAutomationJobDisabled, validateAutomationRunQueued, validateAutomationRunStarted, validateAutomationRunCompleted, validateAutomationRunFailed, validateAutomationRunCancelled, validateAutomationScheduleError, validateAutomationJobAutoDisabled, validateRouteBindingCreated, validateRouteBindingUpdated, validateRouteBindingRemoved, validateRouteBindingResolved, validateRouteReplyTargetCaptured, validateRouteBindingFailed, validateControlPlaneClientConnected, validateControlPlaneClientDisconnected, validateControlPlaneSubscriptionCreated, validateControlPlaneSubscriptionDropped, validateControlPlaneAuthGranted, validateControlPlaneAuthRejected, validateDeliveryQueued, validateDeliveryStarted, validateDeliverySucceeded, validateDeliveryFailed, validateDeliveryDeadLettered, validateWatcherStarted, validateWatcherHeartbeat, validateWatcherCheckpointAdvanced, validateWatcherFailed, validateWatcherStopped, validateSurfaceEnabled, validateSurfaceDisabled, validateSurfaceAccountConnected, validateSurfaceAccountDegraded, validateSurfaceCapabilityChanged, } from './contracts/automation-route.js';
9
9
  import { validateTurnStarted, validateTurnStreaming, validateTurnCompleted, validateTurnFailed, validateTurnCancelled, validateToolReceived, validateToolSucceeded, validateToolFailed, } from './contracts/turn-tool.js';
10
10
  import { validateAgentSpawning, validateAgentCompleted, validateAgentFailed, validateMcpConnected, validateMcpDisconnected, validateMcpReconnecting, } from './contracts/agent-mcp.js';
11
- import { validatePluginLoaded, validatePluginFailed, validateAutomationJobCreated, validateAutomationJobUpdated, validateAutomationJobEnabled, validateAutomationJobDisabled, validateAutomationRunQueued, validateAutomationRunStarted, validateAutomationRunCompleted, validateAutomationRunFailed, validateAutomationRunCancelled, validateAutomationScheduleError, validateAutomationJobAutoDisabled, validateRouteBindingCreated, validateRouteBindingUpdated, validateRouteBindingResolved, validateRouteReplyTargetCaptured, validateRouteBindingFailed, validateControlPlaneClientConnected, validateControlPlaneClientDisconnected, validateControlPlaneSubscriptionCreated, validateControlPlaneSubscriptionDropped, validateControlPlaneAuthGranted, validateControlPlaneAuthRejected, validateDeliveryQueued, validateDeliveryStarted, validateDeliverySucceeded, validateDeliveryFailed, validateDeliveryDeadLettered, validateWatcherStarted, validateWatcherHeartbeat, validateWatcherCheckpointAdvanced, validateWatcherFailed, validateWatcherStopped, validateSurfaceEnabled, validateSurfaceDisabled, validateSurfaceAccountConnected, validateSurfaceAccountDegraded, validateSurfaceCapabilityChanged, } from './contracts/automation-route.js';
11
+ import { validatePluginLoaded, validatePluginFailed, validateAutomationJobCreated, validateAutomationJobUpdated, validateAutomationJobEnabled, validateAutomationJobDisabled, validateAutomationRunQueued, validateAutomationRunStarted, validateAutomationRunCompleted, validateAutomationRunFailed, validateAutomationRunCancelled, validateAutomationScheduleError, validateAutomationJobAutoDisabled, validateRouteBindingCreated, validateRouteBindingUpdated, validateRouteBindingRemoved, validateRouteBindingResolved, validateRouteReplyTargetCaptured, validateRouteBindingFailed, validateControlPlaneClientConnected, validateControlPlaneClientDisconnected, validateControlPlaneSubscriptionCreated, validateControlPlaneSubscriptionDropped, validateControlPlaneAuthGranted, validateControlPlaneAuthRejected, validateDeliveryQueued, validateDeliveryStarted, validateDeliverySucceeded, validateDeliveryFailed, validateDeliveryDeadLettered, validateWatcherStarted, validateWatcherHeartbeat, validateWatcherCheckpointAdvanced, validateWatcherFailed, validateWatcherStopped, validateSurfaceEnabled, validateSurfaceDisabled, validateSurfaceAccountConnected, validateSurfaceAccountDegraded, validateSurfaceCapabilityChanged, } from './contracts/automation-route.js';
12
12
  const EVENT_VALIDATORS = {
13
13
  TURN_STARTED: validateTurnStarted,
14
14
  TURN_STREAMING: validateTurnStreaming,
@@ -39,6 +39,7 @@ const EVENT_VALIDATORS = {
39
39
  AUTOMATION_JOB_AUTO_DISABLED: validateAutomationJobAutoDisabled,
40
40
  ROUTE_BINDING_CREATED: validateRouteBindingCreated,
41
41
  ROUTE_BINDING_UPDATED: validateRouteBindingUpdated,
42
+ ROUTE_BINDING_REMOVED: validateRouteBindingRemoved,
42
43
  ROUTE_BINDING_RESOLVED: validateRouteBindingResolved,
43
44
  ROUTE_REPLY_TARGET_CAPTURED: validateRouteReplyTargetCaptured,
44
45
  ROUTE_BINDING_FAILED: validateRouteBindingFailed,
@@ -17,6 +17,11 @@ export type RouteEvent = {
17
17
  type: 'ROUTE_BINDING_UPDATED';
18
18
  bindingId: string;
19
19
  changedFields: string[];
20
+ } | {
21
+ type: 'ROUTE_BINDING_REMOVED';
22
+ bindingId: string;
23
+ surfaceKind: RouteSurfaceKind;
24
+ externalId: string;
20
25
  } | {
21
26
  type: 'ROUTE_BINDING_RESOLVED';
22
27
  bindingId: string;
@@ -1 +1 @@
1
- {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../../../../src/_internal/platform/runtime/events/routes.ts"],"names":[],"mappings":"AAAA,qFAAqF;AAErF;;GAEG;AAEH,eAAO,MAAM,mBAAmB,0LAiBtB,CAAC;AACX,eAAO,MAAM,kBAAkB,uDAAwD,CAAC;AAExF,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,mBAAmB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEpE,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC;AAElE,MAAM,MAAM,UAAU,GAClB;IACE,IAAI,EAAE,uBAAuB,CAAC;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,gBAAgB,CAAC;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,eAAe,CAAC;IAC5B,QAAQ,EAAE,MAAM,CAAC;CAClB,GACD;IACE,IAAI,EAAE,uBAAuB,CAAC;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB,GACD;IACE,IAAI,EAAE,wBAAwB,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,gBAAgB,CAAC;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,eAAe,CAAC;IAC5B,QAAQ,EAAE,MAAM,CAAC;CAClB,GACD;IACE,IAAI,EAAE,6BAA6B,CAAC;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,gBAAgB,CAAC;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;CAClB,GACD;IACE,IAAI,EAAE,sBAAsB,CAAC;IAC7B,WAAW,EAAE,gBAAgB,CAAC;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEN,MAAM,MAAM,cAAc,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC"}
1
+ {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../../../../src/_internal/platform/runtime/events/routes.ts"],"names":[],"mappings":"AAAA,qFAAqF;AAErF;;GAEG;AAEH,eAAO,MAAM,mBAAmB,0LAiBtB,CAAC;AACX,eAAO,MAAM,kBAAkB,uDAAwD,CAAC;AAExF,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,mBAAmB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEpE,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC;AAElE,MAAM,MAAM,UAAU,GAClB;IACE,IAAI,EAAE,uBAAuB,CAAC;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,gBAAgB,CAAC;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,eAAe,CAAC;IAC5B,QAAQ,EAAE,MAAM,CAAC;CAClB,GACD;IACE,IAAI,EAAE,uBAAuB,CAAC;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB,GACD;IACE,IAAI,EAAE,uBAAuB,CAAC;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,gBAAgB,CAAC;IAC9B,UAAU,EAAE,MAAM,CAAC;CACpB,GACD;IACE,IAAI,EAAE,wBAAwB,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,gBAAgB,CAAC;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,eAAe,CAAC;IAC5B,QAAQ,EAAE,MAAM,CAAC;CAClB,GACD;IACE,IAAI,EAAE,6BAA6B,CAAC;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,gBAAgB,CAAC;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;CAClB,GACD;IACE,IAAI,EAAE,sBAAsB,CAAC;IAC7B,WAAW,EAAE,gBAAgB,CAAC;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEN,MAAM,MAAM,cAAc,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"flags.d.ts","sourceRoot":"","sources":["../../../../../src/_internal/platform/runtime/feature-flags/flags.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C;;;;GAIG;AACH,eAAO,MAAM,aAAa,EAAE,WAAW,EA8gBtC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,gBAAgB,EAAE,WAAW,CAAC,MAAM,EAAE,WAAW,CAE7D,CAAC"}
1
+ {"version":3,"file":"flags.d.ts","sourceRoot":"","sources":["../../../../../src/_internal/platform/runtime/feature-flags/flags.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C;;;;GAIG;AACH,eAAO,MAAM,aAAa,EAAE,WAAW,EA0gBtC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,gBAAgB,EAAE,WAAW,CAAC,MAAM,EAAE,WAAW,CAE7D,CAAC"}
@@ -30,10 +30,7 @@ export const FEATURE_FLAGS = [
30
30
  description: 'Enables the HITL UX mode system (quiet/balanced/operator) for notification verbosity '
31
31
  + 'control. When enabled, ModeManager applies the configured HITL preset to the '
32
32
  + 'notification router at startup and on mode change. '
33
- + 'Disable to keep the router on its baseline delivery policy. '
34
- + '@remarks This flag is informational for dashboard display only. '
35
- + 'HITL modes are always applied from config at startup regardless of this flag — '
36
- + 'it does not gate the runtime behaviour of ModeManager.',
33
+ + 'Disable to keep the router on its baseline delivery policy and reject HITL mode changes.',
37
34
  defaultState: 'disabled',
38
35
  tier: 3,
39
36
  runtimeToggleable: true,
@@ -94,10 +91,6 @@ export const FEATURE_FLAGS = [
94
91
  runtimeToggleable: true,
95
92
  },
96
93
  // ── Tier 7 (continued) ──────────────────────────────────────────────────
97
- // @remarks policy-signing: this flag is informational for UI/ops status display only —
98
- // it is NOT a runtime gate. Signing always runs when a signing key is provided via
99
- // `signingKey` in `PolicyLoaderOptions`; the flag does not suppress or bypass that
100
- // behaviour. Use this flag to surface signing status in dashboards or operational tooling.
101
94
  {
102
95
  id: 'policy-signing',
103
96
  name: 'Policy Signing',
@@ -266,9 +259,9 @@ export const FEATURE_FLAGS = [
266
259
  {
267
260
  id: 'automation-runtime',
268
261
  name: 'Automation Runtime',
269
- description: 'Enables the first-class automation job and run model, including durable scheduling, '
270
- + 'run history, catch-up behavior, and execution policies. Disable to keep the legacy '
271
- + 'scheduler as the active execution path.',
262
+ description: 'Legacy startup alias for automation-domain. Enables the first-class automation job '
263
+ + 'and run model, including durable scheduling, run history, catch-up behavior, '
264
+ + 'and execution policies.',
272
265
  defaultState: 'disabled',
273
266
  tier: 6,
274
267
  runtimeToggleable: false,
@@ -276,8 +269,9 @@ export const FEATURE_FLAGS = [
276
269
  {
277
270
  id: 'gateway-control-plane',
278
271
  name: 'Gateway Control Plane',
279
- description: 'Enables the unified control-plane server that exposes shared automation, session, '
280
- + 'task, and integration state over authenticated APIs and live event streams.',
272
+ description: 'Legacy startup alias for control-plane-gateway. Enables the unified control-plane '
273
+ + 'server that exposes shared automation, session, task, and integration state over '
274
+ + 'authenticated APIs and live event streams.',
281
275
  defaultState: 'disabled',
282
276
  tier: 6,
283
277
  runtimeToggleable: false,
@@ -285,8 +279,8 @@ export const FEATURE_FLAGS = [
285
279
  {
286
280
  id: 'omnichannel-route-binding',
287
281
  name: 'Omnichannel Route Binding',
288
- description: 'Enables route binding and reply-context preservation across terminal, web, Slack, Discord, '
289
- + 'ntfy, and generic webhook surfaces.',
282
+ description: 'Legacy startup alias for route-binding. Enables route binding and reply-context '
283
+ + 'preservation across terminal, web, Slack, Discord, ntfy, and generic webhook surfaces.',
290
284
  defaultState: 'disabled',
291
285
  tier: 6,
292
286
  runtimeToggleable: false,
@@ -294,7 +288,8 @@ export const FEATURE_FLAGS = [
294
288
  {
295
289
  id: 'omnichannel-surface-adapters',
296
290
  name: 'Omnichannel Surface Adapters',
297
- description: 'Enables the channel adapter layer for interactive Slack and Discord surfaces plus '
291
+ description: 'Legacy startup alias that enables all non-TUI channel surface gates. Enables the '
292
+ + 'channel adapter layer for interactive Slack and Discord surfaces plus '
298
293
  + 'notification-oriented ntfy and generic webhook delivery.',
299
294
  defaultState: 'disabled',
300
295
  tier: 7,
@@ -303,7 +298,8 @@ export const FEATURE_FLAGS = [
303
298
  {
304
299
  id: 'embedded-web-control-ui',
305
300
  name: 'Embedded Web Control UI',
306
- description: 'Enables the embedded browser operator surface served by the control plane.',
301
+ description: 'Legacy startup alias for web-surface. Enables the embedded browser operator surface '
302
+ + 'served by the control plane.',
307
303
  defaultState: 'disabled',
308
304
  tier: 7,
309
305
  runtimeToggleable: false,
@@ -311,8 +307,8 @@ export const FEATURE_FLAGS = [
311
307
  {
312
308
  id: 'managed-watcher-services',
313
309
  name: 'Managed Watcher Services',
314
- description: 'Enables the watcher registry and managed long-running source listeners for external '
315
- + 'automation triggers and integration health.',
310
+ description: 'Legacy startup alias for watcher-framework. Enables the watcher registry and managed '
311
+ + 'long-running source listeners for external automation triggers and integration health.',
316
312
  defaultState: 'disabled',
317
313
  tier: 7,
318
314
  runtimeToggleable: false,
@@ -320,8 +316,8 @@ export const FEATURE_FLAGS = [
320
316
  {
321
317
  id: 'service-installation',
322
318
  name: 'Service Installation',
323
- description: 'Enables platform service install, autostart, and status management for daemonized '
324
- + 'Goodvibes deployments.',
319
+ description: 'Legacy startup alias for service-management. Enables platform service install, '
320
+ + 'autostart, and status management for daemonized Goodvibes deployments.',
325
321
  defaultState: 'disabled',
326
322
  tier: 7,
327
323
  runtimeToggleable: false,
@@ -0,0 +1,7 @@
1
+ import type { FeatureFlagManager } from './manager.js';
2
+ export type FeatureFlagReader = Pick<FeatureFlagManager, 'isEnabled'> | null | undefined;
3
+ export declare function isFeatureGateEnabled(featureFlags: FeatureFlagReader, flagId: string, aliases?: readonly string[]): boolean;
4
+ export declare function requireFeatureGate(featureFlags: FeatureFlagReader, flagId: string, operation: string, aliases?: readonly string[]): void;
5
+ export declare function surfaceFeatureGateId(surface: string): string | null;
6
+ export declare function isSurfaceFeatureGateEnabled(featureFlags: FeatureFlagReader, surface: string): boolean;
7
+ //# sourceMappingURL=gates.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gates.d.ts","sourceRoot":"","sources":["../../../../../src/_internal/platform/runtime/feature-flags/gates.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAEvD,MAAM,MAAM,iBAAiB,GAAG,IAAI,CAAC,kBAAkB,EAAE,WAAW,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC;AAEzF,wBAAgB,oBAAoB,CAClC,YAAY,EAAE,iBAAiB,EAC/B,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,SAAS,MAAM,EAAO,GAC9B,OAAO,CAGT;AAED,wBAAgB,kBAAkB,CAChC,YAAY,EAAE,iBAAiB,EAC/B,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,SAAS,MAAM,EAAO,GAC9B,IAAI,CAGN;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAenE;AAED,wBAAgB,2BAA2B,CACzC,YAAY,EAAE,iBAAiB,EAC/B,OAAO,EAAE,MAAM,GACd,OAAO,CAOT"}
@@ -0,0 +1,38 @@
1
+ export function isFeatureGateEnabled(featureFlags, flagId, aliases = []) {
2
+ if (!featureFlags)
3
+ return true;
4
+ return featureFlags.isEnabled(flagId) || aliases.some((alias) => featureFlags.isEnabled(alias));
5
+ }
6
+ export function requireFeatureGate(featureFlags, flagId, operation, aliases = []) {
7
+ if (isFeatureGateEnabled(featureFlags, flagId, aliases))
8
+ return;
9
+ throw new Error(`${flagId} feature flag is disabled; cannot ${operation}`);
10
+ }
11
+ export function surfaceFeatureGateId(surface) {
12
+ switch (surface) {
13
+ case 'web':
14
+ return 'web-surface';
15
+ case 'slack':
16
+ return 'slack-surface';
17
+ case 'discord':
18
+ return 'discord-surface';
19
+ case 'ntfy':
20
+ return 'ntfy-surface';
21
+ case 'webhook':
22
+ return 'webhook-surface';
23
+ default:
24
+ return null;
25
+ }
26
+ }
27
+ export function isSurfaceFeatureGateEnabled(featureFlags, surface) {
28
+ if (!featureFlags)
29
+ return true;
30
+ if (surface === 'tui' || surface === 'service')
31
+ return true;
32
+ if (featureFlags.isEnabled('omnichannel-surface-adapters'))
33
+ return true;
34
+ if (surface === 'web' && featureFlags.isEnabled('embedded-web-control-ui'))
35
+ return true;
36
+ const flagId = surfaceFeatureGateId(surface);
37
+ return flagId ? featureFlags.isEnabled(flagId) : false;
38
+ }
@@ -19,4 +19,6 @@ export type { FlagState, FeatureFlag, FlagConfig, FlagTransition } from './types
19
19
  export type { FlagSubscriber } from './manager.js';
20
20
  export { FeatureFlagManager, createFeatureFlagManager } from './manager.js';
21
21
  export { FEATURE_FLAGS, FEATURE_FLAG_MAP } from './flags.js';
22
+ export type { FeatureFlagReader } from './gates.js';
23
+ export { isFeatureGateEnabled, isSurfaceFeatureGateEnabled, requireFeatureGate, surfaceFeatureGateId, } from './gates.js';
22
24
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/_internal/platform/runtime/feature-flags/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACrF,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC;AAC5E,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/_internal/platform/runtime/feature-flags/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACrF,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC;AAC5E,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC7D,YAAY,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,EACL,oBAAoB,EACpB,2BAA2B,EAC3B,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,YAAY,CAAC"}
@@ -17,3 +17,4 @@
17
17
  */
18
18
  export { FeatureFlagManager, createFeatureFlagManager } from './manager.js';
19
19
  export { FEATURE_FLAGS, FEATURE_FLAG_MAP } from './flags.js';
20
+ export { isFeatureGateEnabled, isSurfaceFeatureGateEnabled, requireFeatureGate, surfaceFeatureGateId, } from './gates.js';