@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.
- package/dist/_internal/contracts/zod-schemas/providers.d.ts +5 -5
- package/dist/_internal/platform/agents/orchestrator.d.ts +2 -0
- package/dist/_internal/platform/agents/orchestrator.d.ts.map +1 -1
- package/dist/_internal/platform/agents/orchestrator.js +38 -0
- package/dist/_internal/platform/automation/delivery-manager.d.ts +5 -0
- package/dist/_internal/platform/automation/delivery-manager.d.ts.map +1 -1
- package/dist/_internal/platform/automation/delivery-manager.js +14 -1
- package/dist/_internal/platform/automation/manager-runtime.d.ts +5 -0
- package/dist/_internal/platform/automation/manager-runtime.d.ts.map +1 -1
- package/dist/_internal/platform/automation/manager-runtime.js +32 -0
- package/dist/_internal/platform/channels/plugin-registry.d.ts +6 -0
- package/dist/_internal/platform/channels/plugin-registry.d.ts.map +1 -1
- package/dist/_internal/platform/channels/plugin-registry.js +17 -4
- package/dist/_internal/platform/channels/route-manager.d.ts +7 -0
- package/dist/_internal/platform/channels/route-manager.d.ts.map +1 -1
- package/dist/_internal/platform/channels/route-manager.js +41 -3
- package/dist/_internal/platform/channels/surface-registry.d.ts +3 -1
- package/dist/_internal/platform/channels/surface-registry.d.ts.map +1 -1
- package/dist/_internal/platform/channels/surface-registry.js +16 -17
- package/dist/_internal/platform/config/schema-types.d.ts +1 -1
- package/dist/_internal/platform/config/schema-types.d.ts.map +1 -1
- package/dist/_internal/platform/config/secret-refs.d.ts.map +1 -1
- package/dist/_internal/platform/config/secret-refs.js +137 -2
- package/dist/_internal/platform/control-plane/gateway.d.ts +5 -0
- package/dist/_internal/platform/control-plane/gateway.d.ts.map +1 -1
- package/dist/_internal/platform/control-plane/gateway.js +69 -4
- package/dist/_internal/platform/daemon/facade-composition.d.ts.map +1 -1
- package/dist/_internal/platform/daemon/facade-composition.js +2 -0
- package/dist/_internal/platform/daemon/facade.d.ts.map +1 -1
- package/dist/_internal/platform/daemon/facade.js +3 -1
- package/dist/_internal/platform/daemon/service-manager.d.ts +5 -0
- package/dist/_internal/platform/daemon/service-manager.d.ts.map +1 -1
- package/dist/_internal/platform/daemon/service-manager.js +29 -0
- package/dist/_internal/platform/integrations/delivery.d.ts +5 -1
- package/dist/_internal/platform/integrations/delivery.d.ts.map +1 -1
- package/dist/_internal/platform/integrations/delivery.js +8 -1
- package/dist/_internal/platform/integrations/notifier.d.ts +5 -1
- package/dist/_internal/platform/integrations/notifier.d.ts.map +1 -1
- package/dist/_internal/platform/integrations/notifier.js +6 -3
- package/dist/_internal/platform/permissions/manager.d.ts +3 -1
- package/dist/_internal/platform/permissions/manager.d.ts.map +1 -1
- package/dist/_internal/platform/permissions/manager.js +9 -5
- package/dist/_internal/platform/runtime/emitters/routes.d.ts +5 -0
- package/dist/_internal/platform/runtime/emitters/routes.d.ts.map +1 -1
- package/dist/_internal/platform/runtime/emitters/routes.js +3 -0
- package/dist/_internal/platform/runtime/events/contracts/automation-route.d.ts +1 -0
- package/dist/_internal/platform/runtime/events/contracts/automation-route.d.ts.map +1 -1
- package/dist/_internal/platform/runtime/events/contracts/automation-route.js +7 -0
- package/dist/_internal/platform/runtime/events/contracts.d.ts +1 -1
- package/dist/_internal/platform/runtime/events/contracts.d.ts.map +1 -1
- package/dist/_internal/platform/runtime/events/contracts.js +3 -2
- package/dist/_internal/platform/runtime/events/routes.d.ts +5 -0
- package/dist/_internal/platform/runtime/events/routes.d.ts.map +1 -1
- package/dist/_internal/platform/runtime/feature-flags/flags.d.ts.map +1 -1
- package/dist/_internal/platform/runtime/feature-flags/flags.js +17 -21
- package/dist/_internal/platform/runtime/feature-flags/gates.d.ts +7 -0
- package/dist/_internal/platform/runtime/feature-flags/gates.d.ts.map +1 -0
- package/dist/_internal/platform/runtime/feature-flags/gates.js +38 -0
- package/dist/_internal/platform/runtime/feature-flags/index.d.ts +2 -0
- package/dist/_internal/platform/runtime/feature-flags/index.d.ts.map +1 -1
- package/dist/_internal/platform/runtime/feature-flags/index.js +1 -0
- package/dist/_internal/platform/runtime/mcp/index.d.ts +2 -1
- package/dist/_internal/platform/runtime/mcp/index.d.ts.map +1 -1
- package/dist/_internal/platform/runtime/mcp/index.js +4 -1
- package/dist/_internal/platform/runtime/permissions/index.d.ts +20 -1
- package/dist/_internal/platform/runtime/permissions/index.d.ts.map +1 -1
- package/dist/_internal/platform/runtime/permissions/index.js +27 -1
- package/dist/_internal/platform/runtime/permissions/policy-loader.d.ts +6 -0
- package/dist/_internal/platform/runtime/permissions/policy-loader.d.ts.map +1 -1
- package/dist/_internal/platform/runtime/permissions/policy-loader.js +7 -2
- package/dist/_internal/platform/runtime/plugins/index.d.ts +2 -1
- package/dist/_internal/platform/runtime/plugins/index.d.ts.map +1 -1
- package/dist/_internal/platform/runtime/plugins/index.js +4 -1
- package/dist/_internal/platform/runtime/services.d.ts +1 -0
- package/dist/_internal/platform/runtime/services.d.ts.map +1 -1
- package/dist/_internal/platform/runtime/services.js +21 -5
- package/dist/_internal/platform/runtime/shell-command-ops.d.ts +2 -0
- package/dist/_internal/platform/runtime/shell-command-ops.d.ts.map +1 -1
- package/dist/_internal/platform/runtime/shell-command-ops.js +4 -1
- package/dist/_internal/platform/runtime/tasks/index.d.ts +2 -1
- package/dist/_internal/platform/runtime/tasks/index.d.ts.map +1 -1
- package/dist/_internal/platform/runtime/tasks/index.js +2 -2
- package/dist/_internal/platform/runtime/tasks/manager.d.ts +5 -1
- package/dist/_internal/platform/runtime/tasks/manager.d.ts.map +1 -1
- package/dist/_internal/platform/runtime/tasks/manager.js +30 -1
- package/dist/_internal/platform/runtime/telemetry/index.d.ts +9 -3
- package/dist/_internal/platform/runtime/telemetry/index.d.ts.map +1 -1
- package/dist/_internal/platform/runtime/telemetry/index.js +7 -4
- package/dist/_internal/platform/runtime/tools/index.d.ts.map +1 -1
- package/dist/_internal/platform/runtime/tools/index.js +4 -1
- package/dist/_internal/platform/runtime/tools/types.d.ts +6 -0
- package/dist/_internal/platform/runtime/tools/types.d.ts.map +1 -1
- package/dist/_internal/platform/security/token-audit.d.ts +7 -0
- package/dist/_internal/platform/security/token-audit.d.ts.map +1 -1
- package/dist/_internal/platform/security/token-audit.js +6 -2
- package/dist/_internal/platform/state/mode-manager.d.ts +7 -0
- package/dist/_internal/platform/state/mode-manager.d.ts.map +1 -1
- package/dist/_internal/platform/state/mode-manager.js +25 -0
- package/dist/_internal/platform/tools/index.d.ts +4 -0
- package/dist/_internal/platform/tools/index.d.ts.map +1 -1
- package/dist/_internal/platform/tools/index.js +37 -23
- package/dist/_internal/platform/tools/shared/overflow.d.ts +3 -0
- package/dist/_internal/platform/tools/shared/overflow.d.ts.map +1 -1
- package/dist/_internal/platform/tools/shared/overflow.js +6 -2
- package/dist/_internal/platform/version.js +1 -1
- package/dist/_internal/platform/watchers/registry.d.ts +6 -0
- package/dist/_internal/platform/watchers/registry.d.ts.map +1 -1
- package/dist/_internal/platform/watchers/registry.js +32 -0
- 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":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAEvD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAWrD,OAAO,EAAE,sBAAsB,EAAsB,MAAM,qBAAqB,CAAC;AAcjF,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AACvE,OAAO,EAAE,wBAAwB,EAAE,MAAM,oCAAoC,CAAC;AAC9E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,wCAAwC,CAAC;AACrF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AAC5E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAC1E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE/D;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,YAAY,EACtB,IAAI,CAAC,EAAE;IACL,SAAS,CAAC,EAAE,cAAc,CAAC;IAC3B,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,eAAe,EAAE,eAAe,CAAC;IACjC,WAAW,EAAE,WAAW,CAAC;IACzB,cAAc,EAAE,cAAc,CAAC;IAC/B,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,eAAe,EAAE,eAAe,CAAC;IACjC,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,eAAe,CAAC,EAAE,qBAAqB,GAAG,IAAI,CAAC;IAC/C,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;IAC5C,gBAAgB,EAAE,UAAU,CAAC,OAAO,sBAAsB,CAAC,CAAC;IAC5D,WAAW,CAAC,EAAE,OAAO,oBAAoB,EAAE,WAAW,CAAC;IACvD,oBAAoB,CAAC,EAAE,wBAAwB,CAAC;IAChD,sBAAsB,CAAC,EAAE,sBAAsB,CAAC;IAChD,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,IAAI,CAAC,eAAe,EAAE,eAAe,CAAC,CAAC;IACzD,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,IAAI,CAAC,kBAAkB,EAAE,WAAW,CAAC,GAAG,IAAI,CAAC;IAC5D,eAAe,CAAC,EAAE,IAAI,CAAC,eAAe,EAAE,aAAa,CAAC,GAAG,IAAI,CAAC;IAC9D,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,aAAa,CAAC,EAAE,oBAAoB,CAAC;CACtC,GACA;IAAE,SAAS,EAAE,cAAc,CAAC;IAAC,YAAY,EAAE,YAAY,CAAA;CAAE,
|
|
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
|
-
|
|
83
|
-
|
|
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
|
-
|
|
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
|
-
|
|
99
|
-
|
|
112
|
+
registerTool(createFindTool(workingDirectory, deps.featureFlags));
|
|
113
|
+
registerTool(createExecTool(processManager, {
|
|
100
114
|
featureFlags: deps.featureFlags,
|
|
101
115
|
overflowHandler: deps.overflowHandler,
|
|
102
116
|
}));
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
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
|
-
|
|
128
|
+
registerTool(createStateTool(kvState, projectIndex, {
|
|
115
129
|
memoryDir: join(workingDirectory, '.goodvibes', 'memory'),
|
|
116
130
|
hookDispatcher,
|
|
117
131
|
modeManager,
|
|
118
132
|
}));
|
|
119
|
-
|
|
120
|
-
|
|
133
|
+
registerTool(createWorkflowTool(workflowServices));
|
|
134
|
+
registerTool(createFetchTool({
|
|
121
135
|
serviceRegistry: deps.serviceRegistry,
|
|
122
136
|
featureFlags: deps.featureFlags,
|
|
123
137
|
}));
|
|
124
138
|
if (webSearchService) {
|
|
125
|
-
|
|
139
|
+
registerTool(createWebSearchTool(webSearchService));
|
|
126
140
|
}
|
|
127
|
-
|
|
141
|
+
registerTool(createRegistryTool(registry, {
|
|
128
142
|
workingDirectory,
|
|
129
143
|
homeDirectory: deps.configManager.getHomeDirectory() ?? undefined,
|
|
130
144
|
}));
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
145
|
+
registerTool(createTaskTool(sessionOrchestration));
|
|
146
|
+
registerTool(createTeamTool({ surfaceRoot: deps.surfaceRoot }));
|
|
147
|
+
registerTool(createWorklistTool({ surfaceRoot: deps.surfaceRoot }));
|
|
134
148
|
if (mcpRegistry) {
|
|
135
|
-
|
|
149
|
+
registerTool(createMcpTool(mcpRegistry));
|
|
136
150
|
}
|
|
137
|
-
|
|
138
|
-
|
|
151
|
+
registerTool(createPacketTool({ workingDirectory, surfaceRoot: deps.surfaceRoot }));
|
|
152
|
+
registerTool(createQueryTool({ workingDirectory, surfaceRoot: deps.surfaceRoot }));
|
|
139
153
|
if (remoteRunnerRegistry) {
|
|
140
|
-
|
|
154
|
+
registerTool(createRemoteTool(remoteRunnerRegistry));
|
|
141
155
|
}
|
|
142
|
-
|
|
156
|
+
registerTool(createReplTool(deps.configManager, deps.sandboxSessionRegistry, {
|
|
143
157
|
surfaceRoot: deps.surfaceRoot,
|
|
144
158
|
}));
|
|
145
|
-
|
|
146
|
-
|
|
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":"
|
|
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
|
-
|
|
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 =
|
|
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.
|
|
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;
|
|
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);
|