@pellux/goodvibes-sdk 0.23.2 → 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 (109) hide show
  1. package/dist/_internal/contracts/zod-schemas/providers.d.ts +5 -5
  2. package/dist/_internal/platform/agents/orchestrator.d.ts +2 -0
  3. package/dist/_internal/platform/agents/orchestrator.d.ts.map +1 -1
  4. package/dist/_internal/platform/agents/orchestrator.js +38 -0
  5. package/dist/_internal/platform/automation/delivery-manager.d.ts +5 -0
  6. package/dist/_internal/platform/automation/delivery-manager.d.ts.map +1 -1
  7. package/dist/_internal/platform/automation/delivery-manager.js +14 -1
  8. package/dist/_internal/platform/automation/manager-runtime.d.ts +5 -0
  9. package/dist/_internal/platform/automation/manager-runtime.d.ts.map +1 -1
  10. package/dist/_internal/platform/automation/manager-runtime.js +32 -0
  11. package/dist/_internal/platform/channels/plugin-registry.d.ts +6 -0
  12. package/dist/_internal/platform/channels/plugin-registry.d.ts.map +1 -1
  13. package/dist/_internal/platform/channels/plugin-registry.js +17 -4
  14. package/dist/_internal/platform/channels/route-manager.d.ts +7 -0
  15. package/dist/_internal/platform/channels/route-manager.d.ts.map +1 -1
  16. package/dist/_internal/platform/channels/route-manager.js +41 -3
  17. package/dist/_internal/platform/channels/surface-registry.d.ts +3 -1
  18. package/dist/_internal/platform/channels/surface-registry.d.ts.map +1 -1
  19. package/dist/_internal/platform/channels/surface-registry.js +16 -17
  20. package/dist/_internal/platform/config/schema-types.d.ts +1 -1
  21. package/dist/_internal/platform/config/schema-types.d.ts.map +1 -1
  22. package/dist/_internal/platform/config/secret-refs.d.ts.map +1 -1
  23. package/dist/_internal/platform/config/secret-refs.js +137 -2
  24. package/dist/_internal/platform/control-plane/gateway.d.ts +5 -0
  25. package/dist/_internal/platform/control-plane/gateway.d.ts.map +1 -1
  26. package/dist/_internal/platform/control-plane/gateway.js +69 -4
  27. package/dist/_internal/platform/daemon/facade-composition.d.ts.map +1 -1
  28. package/dist/_internal/platform/daemon/facade-composition.js +2 -0
  29. package/dist/_internal/platform/daemon/facade.d.ts.map +1 -1
  30. package/dist/_internal/platform/daemon/facade.js +3 -1
  31. package/dist/_internal/platform/daemon/service-manager.d.ts +5 -0
  32. package/dist/_internal/platform/daemon/service-manager.d.ts.map +1 -1
  33. package/dist/_internal/platform/daemon/service-manager.js +29 -0
  34. package/dist/_internal/platform/integrations/delivery.d.ts +5 -1
  35. package/dist/_internal/platform/integrations/delivery.d.ts.map +1 -1
  36. package/dist/_internal/platform/integrations/delivery.js +8 -1
  37. package/dist/_internal/platform/integrations/notifier.d.ts +5 -1
  38. package/dist/_internal/platform/integrations/notifier.d.ts.map +1 -1
  39. package/dist/_internal/platform/integrations/notifier.js +6 -3
  40. package/dist/_internal/platform/permissions/manager.d.ts +3 -1
  41. package/dist/_internal/platform/permissions/manager.d.ts.map +1 -1
  42. package/dist/_internal/platform/permissions/manager.js +9 -5
  43. package/dist/_internal/platform/runtime/emitters/routes.d.ts +5 -0
  44. package/dist/_internal/platform/runtime/emitters/routes.d.ts.map +1 -1
  45. package/dist/_internal/platform/runtime/emitters/routes.js +3 -0
  46. package/dist/_internal/platform/runtime/events/contracts/automation-route.d.ts +1 -0
  47. package/dist/_internal/platform/runtime/events/contracts/automation-route.d.ts.map +1 -1
  48. package/dist/_internal/platform/runtime/events/contracts/automation-route.js +7 -0
  49. package/dist/_internal/platform/runtime/events/contracts.d.ts +1 -1
  50. package/dist/_internal/platform/runtime/events/contracts.d.ts.map +1 -1
  51. package/dist/_internal/platform/runtime/events/contracts.js +3 -2
  52. package/dist/_internal/platform/runtime/events/routes.d.ts +5 -0
  53. package/dist/_internal/platform/runtime/events/routes.d.ts.map +1 -1
  54. package/dist/_internal/platform/runtime/feature-flags/flags.d.ts.map +1 -1
  55. package/dist/_internal/platform/runtime/feature-flags/flags.js +17 -21
  56. package/dist/_internal/platform/runtime/feature-flags/gates.d.ts +7 -0
  57. package/dist/_internal/platform/runtime/feature-flags/gates.d.ts.map +1 -0
  58. package/dist/_internal/platform/runtime/feature-flags/gates.js +38 -0
  59. package/dist/_internal/platform/runtime/feature-flags/index.d.ts +2 -0
  60. package/dist/_internal/platform/runtime/feature-flags/index.d.ts.map +1 -1
  61. package/dist/_internal/platform/runtime/feature-flags/index.js +1 -0
  62. package/dist/_internal/platform/runtime/mcp/index.d.ts +2 -1
  63. package/dist/_internal/platform/runtime/mcp/index.d.ts.map +1 -1
  64. package/dist/_internal/platform/runtime/mcp/index.js +4 -1
  65. package/dist/_internal/platform/runtime/permissions/index.d.ts +20 -1
  66. package/dist/_internal/platform/runtime/permissions/index.d.ts.map +1 -1
  67. package/dist/_internal/platform/runtime/permissions/index.js +27 -1
  68. package/dist/_internal/platform/runtime/permissions/policy-loader.d.ts +6 -0
  69. package/dist/_internal/platform/runtime/permissions/policy-loader.d.ts.map +1 -1
  70. package/dist/_internal/platform/runtime/permissions/policy-loader.js +7 -2
  71. package/dist/_internal/platform/runtime/plugins/index.d.ts +2 -1
  72. package/dist/_internal/platform/runtime/plugins/index.d.ts.map +1 -1
  73. package/dist/_internal/platform/runtime/plugins/index.js +4 -1
  74. package/dist/_internal/platform/runtime/services.d.ts +1 -0
  75. package/dist/_internal/platform/runtime/services.d.ts.map +1 -1
  76. package/dist/_internal/platform/runtime/services.js +21 -5
  77. package/dist/_internal/platform/runtime/shell-command-ops.d.ts +2 -0
  78. package/dist/_internal/platform/runtime/shell-command-ops.d.ts.map +1 -1
  79. package/dist/_internal/platform/runtime/shell-command-ops.js +4 -1
  80. package/dist/_internal/platform/runtime/tasks/index.d.ts +2 -1
  81. package/dist/_internal/platform/runtime/tasks/index.d.ts.map +1 -1
  82. package/dist/_internal/platform/runtime/tasks/index.js +2 -2
  83. package/dist/_internal/platform/runtime/tasks/manager.d.ts +5 -1
  84. package/dist/_internal/platform/runtime/tasks/manager.d.ts.map +1 -1
  85. package/dist/_internal/platform/runtime/tasks/manager.js +30 -1
  86. package/dist/_internal/platform/runtime/telemetry/index.d.ts +9 -3
  87. package/dist/_internal/platform/runtime/telemetry/index.d.ts.map +1 -1
  88. package/dist/_internal/platform/runtime/telemetry/index.js +7 -4
  89. package/dist/_internal/platform/runtime/tools/index.d.ts.map +1 -1
  90. package/dist/_internal/platform/runtime/tools/index.js +4 -1
  91. package/dist/_internal/platform/runtime/tools/types.d.ts +6 -0
  92. package/dist/_internal/platform/runtime/tools/types.d.ts.map +1 -1
  93. package/dist/_internal/platform/security/token-audit.d.ts +7 -0
  94. package/dist/_internal/platform/security/token-audit.d.ts.map +1 -1
  95. package/dist/_internal/platform/security/token-audit.js +6 -2
  96. package/dist/_internal/platform/state/mode-manager.d.ts +7 -0
  97. package/dist/_internal/platform/state/mode-manager.d.ts.map +1 -1
  98. package/dist/_internal/platform/state/mode-manager.js +25 -0
  99. package/dist/_internal/platform/tools/index.d.ts +4 -0
  100. package/dist/_internal/platform/tools/index.d.ts.map +1 -1
  101. package/dist/_internal/platform/tools/index.js +37 -23
  102. package/dist/_internal/platform/tools/shared/overflow.d.ts +3 -0
  103. package/dist/_internal/platform/tools/shared/overflow.d.ts.map +1 -1
  104. package/dist/_internal/platform/tools/shared/overflow.js +6 -2
  105. package/dist/_internal/platform/version.js +1 -1
  106. package/dist/_internal/platform/watchers/registry.d.ts +6 -0
  107. package/dist/_internal/platform/watchers/registry.d.ts.map +1 -1
  108. package/dist/_internal/platform/watchers/registry.js +32 -0
  109. package/package.json +1 -1
@@ -1,3 +1,4 @@
1
+ import { isFeatureGateEnabled, requireFeatureGate } from '../runtime/feature-flags/index.js';
1
2
  const DEFAULT_VERBOSITY = {
2
3
  write: 'standard',
3
4
  edit: 'with_diff',
@@ -62,8 +63,18 @@ const HITL_PRESETS = [HITL_QUIET, HITL_BALANCED, HITL_OPERATOR];
62
63
  export class ModeManager {
63
64
  currentMode = 'default';
64
65
  modes = [...BUILT_IN_MODES];
66
+ featureFlags;
65
67
  hitlMode = 'balanced';
66
68
  domainOverrides = new Map();
69
+ constructor(options = {}) {
70
+ this.featureFlags = options.featureFlags ?? null;
71
+ }
72
+ hitlEnabled() {
73
+ return isFeatureGateEnabled(this.featureFlags, 'hitl-ux-modes');
74
+ }
75
+ requireHitlEnabled(operation) {
76
+ requireFeatureGate(this.featureFlags, 'hitl-ux-modes', operation);
77
+ }
67
78
  // -------------------------------------------------------------------------
68
79
  // Precision tool verbosity mode API
69
80
  // -------------------------------------------------------------------------
@@ -100,9 +111,13 @@ export class ModeManager {
100
111
  // HITL UX mode API.
101
112
  // -------------------------------------------------------------------------
102
113
  getHITLMode() {
114
+ if (!this.hitlEnabled())
115
+ return 'balanced';
103
116
  return this.hitlMode;
104
117
  }
105
118
  getHITLPreset() {
119
+ if (!this.hitlEnabled())
120
+ return HITL_BALANCED;
106
121
  return HITL_PRESETS.find((p) => p.name === this.hitlMode) ?? HITL_BALANCED;
107
122
  }
108
123
  /**
@@ -114,6 +129,7 @@ export class ModeManager {
114
129
  * any domain-specific overrides.
115
130
  */
116
131
  setHITLMode(mode) {
132
+ this.requireHitlEnabled('set HITL UX mode');
117
133
  const found = HITL_PRESETS.find((p) => p.name === mode);
118
134
  if (!found) {
119
135
  const available = HITL_PRESETS.map((p) => `"${p.name}"`).join(', ');
@@ -123,18 +139,27 @@ export class ModeManager {
123
139
  this.domainOverrides.clear();
124
140
  }
125
141
  listHITLPresets() {
142
+ if (!this.hitlEnabled())
143
+ return [];
126
144
  return [...HITL_PRESETS];
127
145
  }
128
146
  setDomainVerbosity(domain, verbosity) {
147
+ this.requireHitlEnabled('set HITL domain verbosity');
129
148
  this.domainOverrides.set(domain, verbosity);
130
149
  }
131
150
  getDomainVerbosity(domain) {
151
+ if (!this.hitlEnabled())
152
+ return HITL_BALANCED.defaultDomainVerbosity;
132
153
  return this.domainOverrides.get(domain) ?? this.getHITLPreset().defaultDomainVerbosity;
133
154
  }
134
155
  getDomainOverrides() {
156
+ if (!this.hitlEnabled())
157
+ return {};
135
158
  return Object.fromEntries(this.domainOverrides);
136
159
  }
137
160
  applyToRouter(router) {
161
+ if (!this.hitlEnabled())
162
+ return;
138
163
  const preset = this.getHITLPreset();
139
164
  router.setQuietWhileTyping(preset.quietWhileTyping);
140
165
  router.setBatchWindowMs?.(preset.batchWindowMs);
@@ -1,4 +1,5 @@
1
1
  import { ToolRegistry } from './registry.js';
2
+ import type { Tool } from '../types/tools.js';
2
3
  import { FileStateCache } from '../state/file-cache.js';
3
4
  import { ProjectIndex } from '../state/project-index.js';
4
5
  import { ModeManager } from '../state/mode-manager.js';
@@ -21,6 +22,8 @@ import type { ServiceRegistry } from '../config/service-registry.js';
21
22
  import { OverflowHandler } from './shared/overflow.js';
22
23
  import type { SessionChangeTracker } from '../sessions/change-tracker.js';
23
24
  import type { ArchetypeLoader } from '../agents/archetypes.js';
25
+ type ToolContractFeatureFlags = Pick<FeatureFlagManager, 'isEnabled'>;
26
+ export declare function registerToolWithContractGate(registry: ToolRegistry, tool: Tool, featureFlags?: ToolContractFeatureFlags | null): void;
24
27
  /**
25
28
  * Register all built-in tools into the given registry.
26
29
  * Creates shared FileStateCache and ProjectIndex instances so read/write/edit
@@ -56,4 +59,5 @@ export declare function registerAllTools(registry: ToolRegistry, deps?: {
56
59
  fileCache: FileStateCache;
57
60
  projectIndex: ProjectIndex;
58
61
  };
62
+ export {};
59
63
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/_internal/platform/tools/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/_internal/platform/tools/index.ts"],"names":[],"mappings":"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"}
@@ -33,6 +33,17 @@ import { ProcessManager } from './shared/process-manager.js';
33
33
  import { AgentMessageBus } from '../agents/message-bus.js';
34
34
  import { CrossSessionTaskRegistry } from '../sessions/orchestration/index.js';
35
35
  import { OverflowHandler } from './shared/overflow.js';
36
+ export function registerToolWithContractGate(registry, tool, featureFlags) {
37
+ const verifyContracts = featureFlags?.isEnabled('tool-contract-verification') ?? true;
38
+ if (!verifyContracts) {
39
+ registry.register(tool);
40
+ return;
41
+ }
42
+ registry.registerWithContract(tool, {
43
+ strictIdempotency: false,
44
+ strictPermissionClass: false,
45
+ });
46
+ }
36
47
  /**
37
48
  * Register all built-in tools into the given registry.
38
49
  * Creates shared FileStateCache and ProjectIndex instances so read/write/edit
@@ -79,8 +90,11 @@ export function registerAllTools(registry, deps) {
79
90
  throw new Error('registerAllTools requires surfaceRoot');
80
91
  }
81
92
  const projectIndex = deps?.projectIndex ?? new ProjectIndex(workingDirectory);
82
- registry.register(new ReadTool(projectIndex, fileCache));
83
- registry.register(createWriteTool({
93
+ const registerTool = (tool) => {
94
+ registerToolWithContractGate(registry, tool, deps.featureFlags);
95
+ };
96
+ registerTool(new ReadTool(projectIndex, fileCache));
97
+ registerTool(createWriteTool({
84
98
  projectRoot: workingDirectory,
85
99
  fileCache,
86
100
  projectIndex,
@@ -89,20 +103,20 @@ export function registerAllTools(registry, deps) {
89
103
  toolLLM: deps.toolLLM,
90
104
  changeTracker: deps?.changeTracker,
91
105
  }));
92
- registry.register(createEditTool(fileCache, {
106
+ registerTool(createEditTool(fileCache, {
93
107
  fileUndoManager,
94
108
  configManager: deps.configManager,
95
109
  toolLLM: deps.toolLLM,
96
110
  changeTracker: deps?.changeTracker,
97
111
  }));
98
- registry.register(createFindTool(workingDirectory, deps.featureFlags));
99
- registry.register(createExecTool(processManager, {
112
+ registerTool(createFindTool(workingDirectory, deps.featureFlags));
113
+ registerTool(createExecTool(processManager, {
100
114
  featureFlags: deps.featureFlags,
101
115
  overflowHandler: deps.overflowHandler,
102
116
  }));
103
- registry.register(createAnalyzeTool(deps.toolLLM, deps.featureFlags, workingDirectory));
104
- registry.register(new InspectTool(deps.featureFlags, workingDirectory));
105
- registry.register(createAgentTool({
117
+ registerTool(createAnalyzeTool(deps.toolLLM, deps.featureFlags, workingDirectory));
118
+ registerTool(new InspectTool(deps.featureFlags, workingDirectory));
119
+ registerTool(createAgentTool({
106
120
  manager: agentManager,
107
121
  messageBus: agentMessageBus,
108
122
  configManager: deps.configManager,
@@ -111,38 +125,38 @@ export function registerAllTools(registry, deps) {
111
125
  }));
112
126
  const kvState = new KVState(undefined, workingDirectory);
113
127
  const hookDispatcher = new HookDispatcher();
114
- registry.register(createStateTool(kvState, projectIndex, {
128
+ registerTool(createStateTool(kvState, projectIndex, {
115
129
  memoryDir: join(workingDirectory, '.goodvibes', 'memory'),
116
130
  hookDispatcher,
117
131
  modeManager,
118
132
  }));
119
- registry.register(createWorkflowTool(workflowServices));
120
- registry.register(createFetchTool({
133
+ registerTool(createWorkflowTool(workflowServices));
134
+ registerTool(createFetchTool({
121
135
  serviceRegistry: deps.serviceRegistry,
122
136
  featureFlags: deps.featureFlags,
123
137
  }));
124
138
  if (webSearchService) {
125
- registry.register(createWebSearchTool(webSearchService));
139
+ registerTool(createWebSearchTool(webSearchService));
126
140
  }
127
- registry.register(createRegistryTool(registry, {
141
+ registerTool(createRegistryTool(registry, {
128
142
  workingDirectory,
129
143
  homeDirectory: deps.configManager.getHomeDirectory() ?? undefined,
130
144
  }));
131
- registry.register(createTaskTool(sessionOrchestration));
132
- registry.register(createTeamTool({ surfaceRoot: deps.surfaceRoot }));
133
- registry.register(createWorklistTool({ surfaceRoot: deps.surfaceRoot }));
145
+ registerTool(createTaskTool(sessionOrchestration));
146
+ registerTool(createTeamTool({ surfaceRoot: deps.surfaceRoot }));
147
+ registerTool(createWorklistTool({ surfaceRoot: deps.surfaceRoot }));
134
148
  if (mcpRegistry) {
135
- registry.register(createMcpTool(mcpRegistry));
149
+ registerTool(createMcpTool(mcpRegistry));
136
150
  }
137
- registry.register(createPacketTool({ workingDirectory, surfaceRoot: deps.surfaceRoot }));
138
- registry.register(createQueryTool({ workingDirectory, surfaceRoot: deps.surfaceRoot }));
151
+ registerTool(createPacketTool({ workingDirectory, surfaceRoot: deps.surfaceRoot }));
152
+ registerTool(createQueryTool({ workingDirectory, surfaceRoot: deps.surfaceRoot }));
139
153
  if (remoteRunnerRegistry) {
140
- registry.register(createRemoteTool(remoteRunnerRegistry));
154
+ registerTool(createRemoteTool(remoteRunnerRegistry));
141
155
  }
142
- registry.register(createReplTool(deps.configManager, deps.sandboxSessionRegistry, {
156
+ registerTool(createReplTool(deps.configManager, deps.sandboxSessionRegistry, {
143
157
  surfaceRoot: deps.surfaceRoot,
144
158
  }));
145
- registry.register(controlTool);
146
- registry.register(createChannelTool(channelRegistry));
159
+ registerTool(controlTool);
160
+ registerTool(createChannelTool(channelRegistry));
147
161
  return { fileCache, projectIndex };
148
162
  }
@@ -1,3 +1,4 @@
1
+ import type { FeatureFlagReader } from '../../runtime/feature-flags/index.js';
1
2
  export declare const DEFAULT_MAX_CHARS = 50000;
2
3
  /**
3
4
  * RetentionPolicyConfig — limits enforced during cleanup for a spill backend.
@@ -111,6 +112,8 @@ export interface OverflowHandlerConfig {
111
112
  retention?: RetentionPolicyConfig;
112
113
  /** Inject a custom backend directly (takes precedence over spillBackend). */
113
114
  backend?: SpillBackend;
115
+ /** Feature flags gate alternate spill backends when supplied by SDK runtime services. */
116
+ featureFlags?: FeatureFlagReader;
114
117
  }
115
118
  /**
116
119
  * Handles large tool output by delegating overflow content to a pluggable
@@ -1 +1 @@
1
- {"version":3,"file":"overflow.d.ts","sourceRoot":"","sources":["../../../../../src/_internal/platform/tools/shared/overflow.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"overflow.d.ts","sourceRoot":"","sources":["../../../../../src/_internal/platform/tools/shared/overflow.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@ import { mkdirSync, writeFileSync, readFileSync, readdirSync, unlinkSync, statSy
2
2
  import { join } from 'node:path';
3
3
  import { logger } from '../../utils/logger.js';
4
4
  import { summarizeError } from '../../utils/error-display.js';
5
+ import { isFeatureGateEnabled } from '../../runtime/feature-flags/index.js';
5
6
  // ─── Constants ─────────────────────────────────────────────────────────────
6
7
  export const DEFAULT_MAX_CHARS = 50_000;
7
8
  const OVERFLOW_DIR = '.goodvibes/.overflow';
@@ -277,10 +278,13 @@ export class OverflowHandler {
277
278
  backend;
278
279
  retention;
279
280
  constructor(config = {}) {
280
- if (!config.backend && (config.spillBackend ?? 'file') === 'file' && !config.baseDir) {
281
+ const alternateBackendsEnabled = isFeatureGateEnabled(config.featureFlags, 'overflow-spill-backends');
282
+ const backend = alternateBackendsEnabled ? config.backend : undefined;
283
+ const spillBackend = alternateBackendsEnabled ? (config.spillBackend ?? 'file') : 'file';
284
+ if (!backend && spillBackend === 'file' && !config.baseDir) {
281
285
  throw new Error('OverflowHandler requires an explicit baseDir when using the file spill backend');
282
286
  }
283
- this.backend = config.backend ?? createSpillBackend(config.spillBackend ?? 'file', config.baseDir);
287
+ this.backend = backend ?? createSpillBackend(spillBackend, config.baseDir);
284
288
  this.retention = { ...DEFAULT_RETENTION, ...config.retention };
285
289
  }
286
290
  sanitizeLabel(label) {
@@ -1,6 +1,6 @@
1
1
  import { readFileSync } from 'node:fs';
2
2
  import { join } from 'node:path';
3
- let version = '0.23.2';
3
+ let version = '0.25.0';
4
4
  try {
5
5
  const pkg = JSON.parse(readFileSync(join(import.meta.dir, '..', '..', 'package.json'), 'utf-8'));
6
6
  version = pkg.version ?? version;
@@ -2,6 +2,7 @@ import type { RuntimeStore } from '../runtime/store/index.js';
2
2
  import type { RuntimeEventBus } from '../runtime/events/index.js';
3
3
  import type { WatcherKind, WatcherRecord } from '../runtime/store/domains/watchers.js';
4
4
  import type { AutomationSourceRecord } from '../automation/sources.js';
5
+ import type { FeatureFlagReader } from '../runtime/feature-flags/index.js';
5
6
  export interface RegisterWatcherInput {
6
7
  readonly id: string;
7
8
  readonly label: string;
@@ -20,6 +21,7 @@ export interface RegisterPollingWatcherInput {
20
21
  }
21
22
  export interface WatcherRegistryOptions {
22
23
  readonly storePath?: string;
24
+ readonly featureFlags?: FeatureFlagReader;
23
25
  }
24
26
  export declare class WatcherRegistry {
25
27
  private readonly watchers;
@@ -28,8 +30,12 @@ export declare class WatcherRegistry {
28
30
  private readonly storePath;
29
31
  private runtimeDispatch;
30
32
  private runtimeBus;
33
+ private readonly featureFlags;
31
34
  private loaded;
32
35
  constructor(options?: WatcherRegistryOptions);
36
+ private isEnabled;
37
+ private requireEnabled;
38
+ private clearTimers;
33
39
  attachRuntime(config: {
34
40
  readonly runtimeStore?: RuntimeStore | null;
35
41
  readonly runtimeBus?: RuntimeEventBus | null;
@@ -1 +1 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../../src/_internal/platform/watchers/registry.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAkB,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC9E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAuB,MAAM,sCAAsC,CAAC;AAC5G,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAgBvE,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,CAAC,EAAE,WAAW,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,sBAAsB,CAAC;IACxC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC5C,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC;CAC7D;AAED,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,sBAAsB,CAAC;IACxC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,GAAG,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC;CAC5D;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAwFD,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAwC;IACjE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqD;IAC5E,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAqB;IAC9C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,eAAe,CAA+B;IACtD,OAAO,CAAC,UAAU,CAAgC;IAClD,OAAO,CAAC,MAAM,CAAS;gBAEX,OAAO,GAAE,sBAA2B;IAIhD,aAAa,CAAC,MAAM,EAAE;QACpB,QAAQ,CAAC,YAAY,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;QAC5C,QAAQ,CAAC,UAAU,CAAC,EAAE,eAAe,GAAG,IAAI,CAAC;KAC9C,GAAG,IAAI;IAYR,eAAe,CAAC,KAAK,EAAE,oBAAoB,GAAG,aAAa;IAuC3D,sBAAsB,CAAC,KAAK,EAAE,2BAA2B,GAAG,aAAa;IAezE,IAAI,IAAI,aAAa,EAAE;IAkBvB,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI;IAa5C,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI;IAuC9C,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,SAAY,GAAG,aAAa,GAAG,IAAI;IA8B3D,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAQ9D,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAoBlC,OAAO,CAAC,YAAY;IAkCpB,OAAO,CAAC,eAAe;YAYT,UAAU;IA4DxB,OAAO,CAAC,gBAAgB;IA+DxB,OAAO,CAAC,OAAO;CAShB"}
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../../src/_internal/platform/watchers/registry.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,7 @@ import { summarizeError } from '../utils/error-display.js';
4
4
  import { emitWatcherFailed, emitWatcherHeartbeat, emitWatcherStarted, emitWatcherStopped, } from '../runtime/emitters/index.js';
5
5
  import { loadWatcherSnapshotFromPath, resolveWatcherStorePath, saveWatcherSnapshotToPath, } from './store.js';
6
6
  import { instrumentedFetch } from '../utils/fetch-with-timeout.js';
7
+ import { isFeatureGateEnabled, requireFeatureGate } from '../runtime/feature-flags/index.js';
7
8
  function now() {
8
9
  return Date.now();
9
10
  }
@@ -83,9 +84,23 @@ export class WatcherRegistry {
83
84
  storePath;
84
85
  runtimeDispatch = null;
85
86
  runtimeBus = null;
87
+ featureFlags;
86
88
  loaded = false;
87
89
  constructor(options = {}) {
88
90
  this.storePath = resolveWatcherStorePath(options.storePath);
91
+ this.featureFlags = options.featureFlags ?? null;
92
+ }
93
+ isEnabled() {
94
+ return isFeatureGateEnabled(this.featureFlags, 'watcher-framework', ['managed-watcher-services']);
95
+ }
96
+ requireEnabled(operation) {
97
+ requireFeatureGate(this.featureFlags, 'watcher-framework', operation, ['managed-watcher-services']);
98
+ }
99
+ clearTimers() {
100
+ for (const timer of this.timers.values()) {
101
+ clearInterval(timer);
102
+ }
103
+ this.timers.clear();
89
104
  }
90
105
  attachRuntime(config) {
91
106
  if (config.runtimeStore) {
@@ -99,6 +114,7 @@ export class WatcherRegistry {
99
114
  }
100
115
  }
101
116
  registerWatcher(input) {
117
+ this.requireEnabled('register watcher');
102
118
  this.ensureLoaded();
103
119
  const existing = this.watchers.get(input.id)?.record;
104
120
  const wasRunning = existing?.state === 'running' || existing?.state === 'starting' || existing?.state === 'degraded';
@@ -151,6 +167,10 @@ export class WatcherRegistry {
151
167
  });
152
168
  }
153
169
  list() {
170
+ if (!this.isEnabled()) {
171
+ this.clearTimers();
172
+ return [];
173
+ }
154
174
  this.ensureLoaded();
155
175
  const refreshed = [];
156
176
  let changed = false;
@@ -168,6 +188,10 @@ export class WatcherRegistry {
168
188
  return sortWatchers(refreshed);
169
189
  }
170
190
  getWatcher(id) {
191
+ if (!this.isEnabled()) {
192
+ this.clearTimers();
193
+ return null;
194
+ }
171
195
  this.ensureLoaded();
172
196
  const watcher = this.watchers.get(id);
173
197
  if (!watcher)
@@ -181,6 +205,7 @@ export class WatcherRegistry {
181
205
  return normalized;
182
206
  }
183
207
  startWatcher(id) {
208
+ this.requireEnabled('start watcher');
184
209
  this.ensureLoaded();
185
210
  const watcher = this.watchers.get(id);
186
211
  if (!watcher)
@@ -219,6 +244,7 @@ export class WatcherRegistry {
219
244
  return started;
220
245
  }
221
246
  stopWatcher(id, reason = 'stopped') {
247
+ this.requireEnabled('stop watcher');
222
248
  this.ensureLoaded();
223
249
  const watcher = this.watchers.get(id);
224
250
  if (!watcher)
@@ -249,6 +275,7 @@ export class WatcherRegistry {
249
275
  return stopped;
250
276
  }
251
277
  async runWatcherNow(id) {
278
+ this.requireEnabled('run watcher');
252
279
  this.ensureLoaded();
253
280
  const watcher = this.watchers.get(id);
254
281
  if (!watcher)
@@ -257,6 +284,7 @@ export class WatcherRegistry {
257
284
  return this.getWatcher(id);
258
285
  }
259
286
  removeWatcher(id) {
287
+ this.requireEnabled('remove watcher');
260
288
  this.ensureLoaded();
261
289
  const watcher = this.watchers.get(id);
262
290
  if (!watcher)
@@ -277,6 +305,8 @@ export class WatcherRegistry {
277
305
  return removed;
278
306
  }
279
307
  ensureLoaded() {
308
+ if (!this.isEnabled())
309
+ return;
280
310
  if (this.loaded)
281
311
  return;
282
312
  const snapshot = loadWatcherSnapshotFromPath(this.storePath);
@@ -320,6 +350,8 @@ export class WatcherRegistry {
320
350
  };
321
351
  }
322
352
  async runWatcher(id) {
353
+ if (!this.isEnabled())
354
+ return;
323
355
  if (this.inFlight.has(id))
324
356
  return;
325
357
  const watcher = this.watchers.get(id);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pellux/goodvibes-sdk",
3
- "version": "0.23.2",
3
+ "version": "0.25.0",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+https://github.com/mgd34msu/goodvibes-sdk.git"