@pellux/goodvibes-sdk 0.25.8 → 0.25.11
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/README.md +4 -0
- package/dist/_internal/contracts/artifacts/operator-contract.json +178 -6
- package/dist/_internal/contracts/generated/foundation-client-types.d.ts +16 -1
- package/dist/_internal/contracts/generated/foundation-client-types.d.ts.map +1 -1
- package/dist/_internal/contracts/generated/foundation-metadata.d.ts +2 -2
- package/dist/_internal/contracts/generated/foundation-metadata.js +2 -2
- package/dist/_internal/contracts/generated/operator-contract.d.ts.map +1 -1
- package/dist/_internal/contracts/generated/operator-contract.js +178 -6
- package/dist/_internal/contracts/generated/operator-method-ids.d.ts +1 -1
- package/dist/_internal/contracts/generated/operator-method-ids.d.ts.map +1 -1
- package/dist/_internal/contracts/generated/operator-method-ids.js +1 -0
- package/dist/_internal/daemon/context.d.ts +1 -0
- package/dist/_internal/daemon/context.d.ts.map +1 -1
- package/dist/_internal/daemon/integration-route-types.d.ts +1 -0
- package/dist/_internal/daemon/integration-route-types.d.ts.map +1 -1
- package/dist/_internal/daemon/integration-routes.d.ts +1 -1
- package/dist/_internal/daemon/integration-routes.d.ts.map +1 -1
- package/dist/_internal/daemon/integration-routes.js +3 -0
- package/dist/_internal/daemon/operator.d.ts +1 -1
- package/dist/_internal/daemon/operator.d.ts.map +1 -1
- package/dist/_internal/daemon/operator.js +2 -0
- package/dist/_internal/daemon/runtime-route-types.d.ts +1 -1
- package/dist/_internal/daemon/runtime-route-types.d.ts.map +1 -1
- package/dist/_internal/platform/adapters/discord/index.d.ts.map +1 -1
- package/dist/_internal/platform/adapters/discord/index.js +4 -5
- package/dist/_internal/platform/adapters/github/index.d.ts.map +1 -1
- package/dist/_internal/platform/adapters/github/index.js +4 -5
- package/dist/_internal/platform/adapters/google-chat/index.d.ts.map +1 -1
- package/dist/_internal/platform/adapters/google-chat/index.js +7 -5
- package/dist/_internal/platform/adapters/helpers.d.ts +2 -1
- package/dist/_internal/platform/adapters/helpers.d.ts.map +1 -1
- package/dist/_internal/platform/adapters/helpers.js +3 -34
- package/dist/_internal/platform/adapters/homeassistant/index.d.ts +3 -0
- package/dist/_internal/platform/adapters/homeassistant/index.d.ts.map +1 -0
- package/dist/_internal/platform/adapters/homeassistant/index.js +177 -0
- package/dist/_internal/platform/adapters/index.d.ts +1 -0
- package/dist/_internal/platform/adapters/index.d.ts.map +1 -1
- package/dist/_internal/platform/adapters/index.js +1 -0
- package/dist/_internal/platform/adapters/mattermost/index.d.ts.map +1 -1
- package/dist/_internal/platform/adapters/mattermost/index.js +6 -2
- package/dist/_internal/platform/adapters/slack/index.d.ts.map +1 -1
- package/dist/_internal/platform/adapters/slack/index.js +4 -5
- package/dist/_internal/platform/adapters/telegram/index.d.ts.map +1 -1
- package/dist/_internal/platform/adapters/telegram/index.js +7 -5
- package/dist/_internal/platform/adapters/types.d.ts +1 -1
- package/dist/_internal/platform/adapters/types.d.ts.map +1 -1
- package/dist/_internal/platform/adapters/webhook/index.d.ts.map +1 -1
- package/dist/_internal/platform/adapters/webhook/index.js +4 -1
- package/dist/_internal/platform/automation/types.d.ts +1 -1
- package/dist/_internal/platform/automation/types.d.ts.map +1 -1
- package/dist/_internal/platform/batch/manager.d.ts.map +1 -1
- package/dist/_internal/platform/batch/manager.js +4 -0
- package/dist/_internal/platform/batch/types.d.ts +4 -0
- package/dist/_internal/platform/batch/types.d.ts.map +1 -1
- package/dist/_internal/platform/channels/builtin/accounts.d.ts.map +1 -1
- package/dist/_internal/platform/channels/builtin/accounts.js +22 -0
- package/dist/_internal/platform/channels/builtin/contracts.d.ts.map +1 -1
- package/dist/_internal/platform/channels/builtin/contracts.js +9 -0
- package/dist/_internal/platform/channels/builtin/descriptors.d.ts.map +1 -1
- package/dist/_internal/platform/channels/builtin/descriptors.js +9 -2
- package/dist/_internal/platform/channels/builtin/homeassistant.d.ts +64 -0
- package/dist/_internal/platform/channels/builtin/homeassistant.d.ts.map +1 -0
- package/dist/_internal/platform/channels/builtin/homeassistant.js +380 -0
- package/dist/_internal/platform/channels/builtin/plugins.d.ts.map +1 -1
- package/dist/_internal/platform/channels/builtin/plugins.js +2 -1
- package/dist/_internal/platform/channels/builtin/presentation.d.ts.map +1 -1
- package/dist/_internal/platform/channels/builtin/presentation.js +4 -0
- package/dist/_internal/platform/channels/builtin/setup-schema.d.ts.map +1 -1
- package/dist/_internal/platform/channels/builtin/setup-schema.js +46 -0
- package/dist/_internal/platform/channels/builtin/shared.d.ts +1 -1
- package/dist/_internal/platform/channels/builtin/shared.d.ts.map +1 -1
- package/dist/_internal/platform/channels/builtin/shared.js +2 -0
- package/dist/_internal/platform/channels/builtin/surfaces.d.ts.map +1 -1
- package/dist/_internal/platform/channels/builtin/surfaces.js +1 -0
- package/dist/_internal/platform/channels/builtin/targets.d.ts.map +1 -1
- package/dist/_internal/platform/channels/builtin/targets.js +24 -0
- package/dist/_internal/platform/channels/builtin-runtime.d.ts.map +1 -1
- package/dist/_internal/platform/channels/builtin-runtime.js +6 -0
- package/dist/_internal/platform/channels/delivery/strategies-core.d.ts +1 -0
- package/dist/_internal/platform/channels/delivery/strategies-core.d.ts.map +1 -1
- package/dist/_internal/platform/channels/delivery/strategies-core.js +41 -1
- package/dist/_internal/platform/channels/delivery-router.d.ts.map +1 -1
- package/dist/_internal/platform/channels/delivery-router.js +2 -1
- package/dist/_internal/platform/channels/reply-pipeline.d.ts.map +1 -1
- package/dist/_internal/platform/channels/reply-pipeline.js +9 -0
- package/dist/_internal/platform/channels/route-manager.d.ts.map +1 -1
- package/dist/_internal/platform/channels/route-manager.js +1 -0
- package/dist/_internal/platform/channels/surface-registry.d.ts.map +1 -1
- package/dist/_internal/platform/channels/surface-registry.js +4 -0
- package/dist/_internal/platform/channels/types.d.ts +1 -1
- package/dist/_internal/platform/channels/types.d.ts.map +1 -1
- package/dist/_internal/platform/cloudflare/client.d.ts +3 -0
- package/dist/_internal/platform/cloudflare/client.d.ts.map +1 -0
- package/dist/_internal/platform/cloudflare/client.js +9 -0
- package/dist/_internal/platform/cloudflare/config.d.ts +8 -0
- package/dist/_internal/platform/cloudflare/config.d.ts.map +1 -0
- package/dist/_internal/platform/cloudflare/config.js +48 -0
- package/dist/_internal/platform/cloudflare/constants.d.ts +18 -0
- package/dist/_internal/platform/cloudflare/constants.d.ts.map +1 -0
- package/dist/_internal/platform/cloudflare/constants.js +36 -0
- package/dist/_internal/platform/cloudflare/discovery.d.ts +23 -0
- package/dist/_internal/platform/cloudflare/discovery.d.ts.map +1 -0
- package/dist/_internal/platform/cloudflare/discovery.js +57 -0
- package/dist/_internal/platform/cloudflare/index.d.ts +6 -0
- package/dist/_internal/platform/cloudflare/index.d.ts.map +1 -0
- package/dist/_internal/platform/cloudflare/index.js +4 -0
- package/dist/_internal/platform/cloudflare/manager.d.ts +30 -0
- package/dist/_internal/platform/cloudflare/manager.d.ts.map +1 -0
- package/dist/_internal/platform/cloudflare/manager.js +674 -0
- package/dist/_internal/platform/cloudflare/resources.d.ts +79 -0
- package/dist/_internal/platform/cloudflare/resources.d.ts.map +1 -0
- package/dist/_internal/platform/cloudflare/resources.js +353 -0
- package/dist/_internal/platform/cloudflare/types.d.ts +694 -0
- package/dist/_internal/platform/cloudflare/types.d.ts.map +1 -0
- package/dist/_internal/platform/cloudflare/types.js +10 -0
- package/dist/_internal/platform/cloudflare/utils.d.ts +14 -0
- package/dist/_internal/platform/cloudflare/utils.d.ts.map +1 -0
- package/dist/_internal/platform/cloudflare/utils.js +216 -0
- package/dist/_internal/platform/cloudflare/worker-source.d.ts +2 -0
- package/dist/_internal/platform/cloudflare/worker-source.d.ts.map +1 -0
- package/dist/_internal/platform/cloudflare/worker-source.js +165 -0
- package/dist/_internal/platform/companion/companion-chat-manager.d.ts +24 -4
- package/dist/_internal/platform/companion/companion-chat-manager.d.ts.map +1 -1
- package/dist/_internal/platform/companion/companion-chat-manager.js +128 -78
- package/dist/_internal/platform/config/schema-domain-runtime.d.ts +24 -0
- package/dist/_internal/platform/config/schema-domain-runtime.d.ts.map +1 -1
- package/dist/_internal/platform/config/schema-domain-runtime.js +169 -0
- package/dist/_internal/platform/config/schema-domain-surfaces.d.ts +11 -0
- package/dist/_internal/platform/config/schema-domain-surfaces.d.ts.map +1 -1
- package/dist/_internal/platform/config/schema-domain-surfaces.js +59 -0
- package/dist/_internal/platform/config/schema-types.d.ts +38 -2
- package/dist/_internal/platform/config/schema-types.d.ts.map +1 -1
- package/dist/_internal/platform/control-plane/gateway-utils.d.ts +37 -0
- package/dist/_internal/platform/control-plane/gateway-utils.d.ts.map +1 -0
- package/dist/_internal/platform/control-plane/gateway-utils.js +97 -0
- package/dist/_internal/platform/control-plane/gateway.d.ts +4 -9
- package/dist/_internal/platform/control-plane/gateway.d.ts.map +1 -1
- package/dist/_internal/platform/control-plane/gateway.js +26 -61
- package/dist/_internal/platform/control-plane/method-catalog-runtime.d.ts.map +1 -1
- package/dist/_internal/platform/control-plane/method-catalog-runtime.js +11 -1
- package/dist/_internal/platform/control-plane/operator-contract-schemas-admin.d.ts.map +1 -1
- package/dist/_internal/platform/control-plane/operator-contract-schemas-admin.js +3 -2
- package/dist/_internal/platform/control-plane/operator-contract-schemas-control.d.ts +1 -0
- package/dist/_internal/platform/control-plane/operator-contract-schemas-control.d.ts.map +1 -1
- package/dist/_internal/platform/control-plane/operator-contract-schemas-control.js +26 -0
- package/dist/_internal/platform/control-plane/routes/operator.d.ts +1 -1
- package/dist/_internal/platform/control-plane/routes/operator.d.ts.map +1 -1
- package/dist/_internal/platform/control-plane/routes/operator.js +2 -0
- package/dist/_internal/platform/control-plane/types.d.ts +1 -1
- package/dist/_internal/platform/control-plane/types.d.ts.map +1 -1
- package/dist/_internal/platform/daemon/control-plane.d.ts.map +1 -1
- package/dist/_internal/platform/daemon/control-plane.js +50 -6
- package/dist/_internal/platform/daemon/facade-composition.d.ts.map +1 -1
- package/dist/_internal/platform/daemon/facade-composition.js +30 -2
- package/dist/_internal/platform/daemon/facade-types.d.ts +1 -1
- package/dist/_internal/platform/daemon/facade-types.d.ts.map +1 -1
- package/dist/_internal/platform/daemon/http/cloudflare-routes.d.ts +7 -0
- package/dist/_internal/platform/daemon/http/cloudflare-routes.d.ts.map +1 -0
- package/dist/_internal/platform/daemon/http/cloudflare-routes.js +201 -0
- package/dist/_internal/platform/daemon/http/router.d.ts +3 -3
- package/dist/_internal/platform/daemon/http/router.d.ts.map +1 -1
- package/dist/_internal/platform/daemon/http/router.js +22 -16
- package/dist/_internal/platform/daemon/http/runtime-route-types.d.ts +1 -1
- package/dist/_internal/platform/daemon/http/runtime-route-types.d.ts.map +1 -1
- package/dist/_internal/platform/daemon/http-listener.d.ts.map +1 -1
- package/dist/_internal/platform/daemon/http-listener.js +4 -8
- package/dist/_internal/platform/daemon/surface-actions.d.ts +1 -1
- package/dist/_internal/platform/daemon/surface-actions.d.ts.map +1 -1
- package/dist/_internal/platform/daemon/surface-delivery.d.ts +1 -1
- package/dist/_internal/platform/daemon/surface-delivery.d.ts.map +1 -1
- package/dist/_internal/platform/daemon/surface-delivery.js +1 -0
- package/dist/_internal/platform/daemon/surface-policy.d.ts +1 -1
- package/dist/_internal/platform/daemon/surface-policy.d.ts.map +1 -1
- package/dist/_internal/platform/daemon/surface-policy.js +8 -0
- package/dist/_internal/platform/daemon/types.d.ts +2 -2
- package/dist/_internal/platform/daemon/types.d.ts.map +1 -1
- package/dist/_internal/platform/integrations/homeassistant.d.ts +58 -0
- package/dist/_internal/platform/integrations/homeassistant.d.ts.map +1 -0
- package/dist/_internal/platform/integrations/homeassistant.js +174 -0
- package/dist/_internal/platform/integrations/index.d.ts +2 -0
- package/dist/_internal/platform/integrations/index.d.ts.map +1 -1
- package/dist/_internal/platform/integrations/index.js +1 -0
- package/dist/_internal/platform/runtime/events/control-plane.d.ts +1 -1
- package/dist/_internal/platform/runtime/events/control-plane.d.ts.map +1 -1
- package/dist/_internal/platform/runtime/events/control-plane.js +1 -0
- package/dist/_internal/platform/runtime/events/routes.d.ts +1 -1
- package/dist/_internal/platform/runtime/events/routes.d.ts.map +1 -1
- package/dist/_internal/platform/runtime/events/routes.js +1 -0
- package/dist/_internal/platform/runtime/feature-flags/flags.d.ts.map +1 -1
- package/dist/_internal/platform/runtime/feature-flags/flags.js +9 -0
- package/dist/_internal/platform/runtime/feature-flags/gates.d.ts.map +1 -1
- package/dist/_internal/platform/runtime/feature-flags/gates.js +2 -0
- package/dist/_internal/platform/runtime/index.d.ts +2 -0
- package/dist/_internal/platform/runtime/index.d.ts.map +1 -1
- package/dist/_internal/platform/runtime/index.js +1 -0
- package/dist/_internal/platform/runtime/integration/helpers.d.ts +4 -0
- package/dist/_internal/platform/runtime/integration/helpers.d.ts.map +1 -1
- package/dist/_internal/platform/runtime/integration/helpers.js +4 -0
- package/dist/_internal/platform/runtime/security-settings.d.ts +19 -0
- package/dist/_internal/platform/runtime/security-settings.d.ts.map +1 -0
- package/dist/_internal/platform/runtime/security-settings.js +187 -0
- package/dist/_internal/platform/runtime/services.d.ts.map +1 -1
- package/dist/_internal/platform/runtime/services.js +1 -0
- package/dist/_internal/platform/security/user-auth.d.ts +1 -1
- package/dist/_internal/platform/security/user-auth.d.ts.map +1 -1
- package/dist/_internal/platform/security/user-auth.js +18 -3
- package/dist/_internal/platform/tools/edit/core.d.ts.map +1 -1
- package/dist/_internal/platform/tools/edit/core.js +4 -47
- package/dist/_internal/platform/tools/exec/runtime.d.ts.map +1 -1
- package/dist/_internal/platform/tools/exec/runtime.js +7 -1
- package/dist/_internal/platform/tools/exec/schema.d.ts +1 -0
- package/dist/_internal/platform/tools/exec/schema.d.ts.map +1 -1
- package/dist/_internal/platform/tools/exec/schema.js +1 -0
- package/dist/_internal/platform/tools/fetch/runtime.d.ts.map +1 -1
- package/dist/_internal/platform/tools/fetch/runtime.js +140 -19
- package/dist/_internal/platform/tools/fetch/schema.d.ts +1 -0
- package/dist/_internal/platform/tools/fetch/schema.d.ts.map +1 -1
- package/dist/_internal/platform/tools/fetch/schema.js +1 -0
- package/dist/_internal/platform/tools/find/executor.d.ts.map +1 -1
- package/dist/_internal/platform/tools/find/executor.js +7 -1
- package/dist/_internal/platform/tools/find/schema.d.ts.map +1 -1
- package/dist/_internal/platform/tools/find/schema.js +2 -0
- package/dist/_internal/platform/tools/read/index.d.ts.map +1 -1
- package/dist/_internal/platform/tools/read/index.js +7 -1
- package/dist/_internal/platform/tools/read/schema.d.ts +1 -0
- package/dist/_internal/platform/tools/read/schema.d.ts.map +1 -1
- package/dist/_internal/platform/tools/read/schema.js +1 -0
- package/dist/_internal/platform/tools/shared/process-manager.d.ts +2 -0
- package/dist/_internal/platform/tools/shared/process-manager.d.ts.map +1 -1
- package/dist/_internal/platform/tools/shared/process-manager.js +67 -5
- package/dist/_internal/platform/tools/write/index.d.ts.map +1 -1
- package/dist/_internal/platform/tools/write/index.js +3 -36
- package/dist/_internal/platform/utils/concurrency.d.ts +3 -0
- package/dist/_internal/platform/utils/concurrency.d.ts.map +1 -0
- package/dist/_internal/platform/utils/concurrency.js +17 -0
- package/dist/_internal/platform/utils/logger.d.ts.map +1 -1
- package/dist/_internal/platform/utils/logger.js +19 -1
- package/dist/_internal/platform/utils/request-body.d.ts +4 -0
- package/dist/_internal/platform/utils/request-body.d.ts.map +1 -0
- package/dist/_internal/platform/utils/request-body.js +45 -0
- package/dist/_internal/platform/version.js +1 -1
- package/dist/workers.d.ts +9 -0
- package/dist/workers.d.ts.map +1 -1
- package/dist/workers.js +67 -3
- package/package.json +2 -1
|
@@ -3,49 +3,7 @@ import { createDomainDispatch } from '../runtime/store/index.js';
|
|
|
3
3
|
import { emitControlPlaneAuthGranted, emitControlPlaneClientConnected, emitControlPlaneClientDisconnected, emitControlPlaneSubscriptionCreated, emitControlPlaneSubscriptionDropped, } from '../runtime/emitters/index.js';
|
|
4
4
|
import { renderControlPlaneGatewayWebUi } from './gateway-web-ui.js';
|
|
5
5
|
import { isFeatureGateEnabled, requireFeatureGate } from '../runtime/feature-flags/index.js';
|
|
6
|
-
|
|
7
|
-
'session',
|
|
8
|
-
'tasks',
|
|
9
|
-
'agents',
|
|
10
|
-
'automation',
|
|
11
|
-
'routes',
|
|
12
|
-
'control-plane',
|
|
13
|
-
'deliveries',
|
|
14
|
-
'surfaces',
|
|
15
|
-
'watchers',
|
|
16
|
-
'transport',
|
|
17
|
-
'ops',
|
|
18
|
-
'knowledge',
|
|
19
|
-
'providers',
|
|
20
|
-
'turn',
|
|
21
|
-
];
|
|
22
|
-
const DEFAULT_SERVER_CONFIG = {
|
|
23
|
-
enabled: false,
|
|
24
|
-
host: '127.0.0.1',
|
|
25
|
-
port: 3421,
|
|
26
|
-
streamingMode: 'sse',
|
|
27
|
-
sessionTtlMs: 12 * 60 * 60 * 1000,
|
|
28
|
-
};
|
|
29
|
-
function serializeEnvelope(envelope) {
|
|
30
|
-
return {
|
|
31
|
-
type: envelope.type,
|
|
32
|
-
timestamp: envelope.ts,
|
|
33
|
-
traceId: envelope.traceId,
|
|
34
|
-
sessionId: envelope.sessionId,
|
|
35
|
-
source: envelope.source,
|
|
36
|
-
payload: envelope.payload,
|
|
37
|
-
};
|
|
38
|
-
}
|
|
39
|
-
function toClientDescriptor(record) {
|
|
40
|
-
return {
|
|
41
|
-
id: record.id,
|
|
42
|
-
surface: record.kind,
|
|
43
|
-
label: record.label,
|
|
44
|
-
connectedAt: record.authenticatedAt ?? record.lastSeenAt ?? Date.now(),
|
|
45
|
-
lastSeenAt: record.lastSeenAt ?? Date.now(),
|
|
46
|
-
...(record.metadata.userId && typeof record.metadata.userId === 'string' ? { userId: record.metadata.userId } : {}),
|
|
47
|
-
};
|
|
48
|
-
}
|
|
6
|
+
import { DEFAULT_DOMAINS, DEFAULT_SERVER_CONFIG, canReplayEventToClient, hasReplayScope, normalizeRuntimeDomains, pruneDisconnectedClientRecords, serializeEnvelope, stripReplayScope, toClientDescriptor, } from './gateway-utils.js';
|
|
49
7
|
export class ControlPlaneGateway {
|
|
50
8
|
runtimeBus;
|
|
51
9
|
dispatch;
|
|
@@ -127,6 +85,7 @@ export class ControlPlaneGateway {
|
|
|
127
85
|
listClients() {
|
|
128
86
|
if (!this.isEnabled())
|
|
129
87
|
return [];
|
|
88
|
+
pruneDisconnectedClientRecords(this.clients);
|
|
130
89
|
return [...this.clients.values()]
|
|
131
90
|
.sort((a, b) => (b.lastSeenAt ?? 0) - (a.lastSeenAt ?? 0) || a.id.localeCompare(b.id))
|
|
132
91
|
.map(toClientDescriptor);
|
|
@@ -150,6 +109,7 @@ export class ControlPlaneGateway {
|
|
|
150
109
|
recentEvents: [],
|
|
151
110
|
};
|
|
152
111
|
}
|
|
112
|
+
pruneDisconnectedClientRecords(this.clients);
|
|
153
113
|
const active = [...this.clients.values()].filter((client) => client.connected);
|
|
154
114
|
return {
|
|
155
115
|
server: this.serverConfig,
|
|
@@ -174,7 +134,7 @@ export class ControlPlaneGateway {
|
|
|
174
134
|
listRecentEvents(limit = 100) {
|
|
175
135
|
if (!this.isEnabled())
|
|
176
136
|
return [];
|
|
177
|
-
return this.recentEvents.slice(0, Math.max(1, limit));
|
|
137
|
+
return this.recentEvents.slice(0, Math.max(1, limit)).map(stripReplayScope);
|
|
178
138
|
}
|
|
179
139
|
publishSurfaceMessage(input) {
|
|
180
140
|
this.requireEnabled('publish surface message');
|
|
@@ -187,15 +147,19 @@ export class ControlPlaneGateway {
|
|
|
187
147
|
if (this.recentMessages.length > 200) {
|
|
188
148
|
this.recentMessages.length = 200;
|
|
189
149
|
}
|
|
190
|
-
const record = this.rememberEvent('surface-message', message
|
|
150
|
+
const record = this.rememberEvent('surface-message', message, {
|
|
151
|
+
...(message.clientId ? { clientId: message.clientId } : {}),
|
|
152
|
+
...(message.routeId ? { routeId: message.routeId } : {}),
|
|
153
|
+
...(message.surfaceId ? { surfaceId: message.surfaceId } : {}),
|
|
154
|
+
});
|
|
191
155
|
for (const client of this.liveClients.values()) {
|
|
192
156
|
if (client.kind !== 'web')
|
|
193
157
|
continue;
|
|
194
158
|
if (message.clientId && client.clientId !== message.clientId)
|
|
195
159
|
continue;
|
|
196
|
-
if (message.routeId && client.routeId
|
|
160
|
+
if (message.routeId && client.routeId !== message.routeId)
|
|
197
161
|
continue;
|
|
198
|
-
if (message.surfaceId && client.surfaceId
|
|
162
|
+
if (message.surfaceId && client.surfaceId !== message.surfaceId)
|
|
199
163
|
continue;
|
|
200
164
|
client.send('surface-message', message, record.id);
|
|
201
165
|
}
|
|
@@ -204,15 +168,15 @@ export class ControlPlaneGateway {
|
|
|
204
168
|
publishEvent(event, payload, filter) {
|
|
205
169
|
if (!this.isEnabled())
|
|
206
170
|
return;
|
|
207
|
-
const record = this.rememberEvent(event, payload);
|
|
171
|
+
const record = this.rememberEvent(event, payload, filter);
|
|
208
172
|
for (const client of this.liveClients.values()) {
|
|
209
173
|
if (filter?.clientKind && client.kind !== filter.clientKind)
|
|
210
174
|
continue;
|
|
211
175
|
if (filter?.clientId && client.clientId !== filter.clientId)
|
|
212
176
|
continue;
|
|
213
|
-
if (filter?.routeId && client.routeId
|
|
177
|
+
if (filter?.routeId && client.routeId !== filter.routeId)
|
|
214
178
|
continue;
|
|
215
|
-
if (filter?.surfaceId && client.surfaceId
|
|
179
|
+
if (filter?.surfaceId && client.surfaceId !== filter.surfaceId)
|
|
216
180
|
continue;
|
|
217
181
|
client.send(event, payload, record.id);
|
|
218
182
|
}
|
|
@@ -267,7 +231,7 @@ export class ControlPlaneGateway {
|
|
|
267
231
|
if (!this.runtimeBus) {
|
|
268
232
|
throw new Error('Runtime event bus unavailable');
|
|
269
233
|
}
|
|
270
|
-
const selectedDomains = options.domains
|
|
234
|
+
const selectedDomains = normalizeRuntimeDomains(options.domains);
|
|
271
235
|
const clientId = options.clientId ?? `cp-${randomUUID().slice(0, 8)}`;
|
|
272
236
|
const label = options.label ?? `${options.clientKind ?? 'web'}:${clientId}`;
|
|
273
237
|
const now = Date.now();
|
|
@@ -344,7 +308,7 @@ export class ControlPlaneGateway {
|
|
|
344
308
|
}
|
|
345
309
|
this.subscribeWebSocketClient(clientId, selectedDomains);
|
|
346
310
|
send('ready', { clientId, domains: selectedDomains, transport: 'websocket' });
|
|
347
|
-
this.replayRecentTraffic(send);
|
|
311
|
+
this.replayRecentTraffic(send, { ...options, clientId, domains: selectedDomains });
|
|
348
312
|
return { clientId, domains: selectedDomains };
|
|
349
313
|
}
|
|
350
314
|
touchWebSocketClient(clientId, metadata = {}) {
|
|
@@ -470,6 +434,7 @@ export class ControlPlaneGateway {
|
|
|
470
434
|
lastSeenAt: Date.now(),
|
|
471
435
|
};
|
|
472
436
|
this.clients.set(clientId, disconnected);
|
|
437
|
+
pruneDisconnectedClientRecords(this.clients);
|
|
473
438
|
this.dispatch?.syncControlPlaneClient(disconnected, 'control-plane.gateway.ws-disconnect');
|
|
474
439
|
this.dispatch?.syncControlPlaneState({
|
|
475
440
|
enabled: true,
|
|
@@ -477,12 +442,14 @@ export class ControlPlaneGateway {
|
|
|
477
442
|
connectionState: [...this.clients.values()].some((client) => client.connected) ? 'connected' : 'disconnected',
|
|
478
443
|
}, 'control-plane.gateway.ws-disconnect');
|
|
479
444
|
}
|
|
480
|
-
replayRecentTraffic(send, sinceId) {
|
|
445
|
+
replayRecentTraffic(send, options, sinceId) {
|
|
481
446
|
const sinceIndex = sinceId ? this.recentEvents.findIndex((event) => event.id === sinceId) : -1;
|
|
482
447
|
const recentEvents = sinceIndex >= 0
|
|
483
448
|
? this.recentEvents.slice(0, sinceIndex).reverse()
|
|
484
|
-
: this.
|
|
449
|
+
: this.recentEvents.slice(0, 20).reverse();
|
|
485
450
|
for (const recentEvent of recentEvents) {
|
|
451
|
+
if (!canReplayEventToClient(recentEvent, options))
|
|
452
|
+
continue;
|
|
486
453
|
send(recentEvent.event, recentEvent.payload, recentEvent.id);
|
|
487
454
|
}
|
|
488
455
|
}
|
|
@@ -494,7 +461,7 @@ export class ControlPlaneGateway {
|
|
|
494
461
|
return Response.json({ error: 'Runtime event bus unavailable' }, { status: 503 });
|
|
495
462
|
}
|
|
496
463
|
const encoder = new TextEncoder();
|
|
497
|
-
const selectedDomains = options.domains
|
|
464
|
+
const selectedDomains = normalizeRuntimeDomains(options.domains);
|
|
498
465
|
const lastEventId = request.headers.get('last-event-id')?.trim() || undefined;
|
|
499
466
|
const clientId = options.clientId ?? `cp-${randomUUID().slice(0, 8)}`;
|
|
500
467
|
const label = options.label ?? `${options.clientKind ?? 'web'}:${clientId}`;
|
|
@@ -613,6 +580,7 @@ export class ControlPlaneGateway {
|
|
|
613
580
|
lastSeenAt: Date.now(),
|
|
614
581
|
};
|
|
615
582
|
this.clients.set(clientId, disconnected);
|
|
583
|
+
pruneDisconnectedClientRecords(this.clients);
|
|
616
584
|
this.dispatch?.syncControlPlaneClient(disconnected, 'control-plane.gateway.disconnect');
|
|
617
585
|
this.dispatch?.syncControlPlaneState({
|
|
618
586
|
enabled: true,
|
|
@@ -643,7 +611,7 @@ export class ControlPlaneGateway {
|
|
|
643
611
|
controller.close();
|
|
644
612
|
}, { once: true });
|
|
645
613
|
send('ready', { clientId, domains: selectedDomains });
|
|
646
|
-
this.replayRecentTraffic(send, lastEventId);
|
|
614
|
+
this.replayRecentTraffic(send, { ...options, clientId, domains: selectedDomains }, lastEventId);
|
|
647
615
|
},
|
|
648
616
|
cancel: () => {
|
|
649
617
|
teardown();
|
|
@@ -677,12 +645,13 @@ export class ControlPlaneGateway {
|
|
|
677
645
|
}, 'control-plane.gateway.event');
|
|
678
646
|
});
|
|
679
647
|
}
|
|
680
|
-
rememberEvent(event, payload) {
|
|
648
|
+
rememberEvent(event, payload, replayScope) {
|
|
681
649
|
const record = {
|
|
682
650
|
id: `cpe-${randomUUID().slice(0, 8)}`,
|
|
683
651
|
event,
|
|
684
652
|
createdAt: Date.now(),
|
|
685
653
|
payload,
|
|
654
|
+
...(replayScope && hasReplayScope(replayScope) ? { replayScope } : {}),
|
|
686
655
|
};
|
|
687
656
|
// O(1) circular ring buffer write — no array shifting.
|
|
688
657
|
this._recentEventsRing[this._recentEventsHead] = record;
|
|
@@ -695,9 +664,5 @@ export class ControlPlaneGateway {
|
|
|
695
664
|
return record;
|
|
696
665
|
}
|
|
697
666
|
}
|
|
698
|
-
// ---------------------------------------------------------------------------
|
|
699
667
|
// Test export — exposes DEFAULT_DOMAINS for regression tests.
|
|
700
|
-
// This export is intentional; the const itself is module-scoped so tests
|
|
701
|
-
// cannot otherwise verify its contents without runtime inspection.
|
|
702
|
-
// ---------------------------------------------------------------------------
|
|
703
668
|
export { DEFAULT_DOMAINS as DEFAULT_DOMAINS_TEST_EXPORT };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"method-catalog-runtime.d.ts","sourceRoot":"","sources":["../../../../src/_internal/platform/control-plane/method-catalog-runtime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"method-catalog-runtime.d.ts","sourceRoot":"","sources":["../../../../src/_internal/platform/control-plane/method-catalog-runtime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AA4C1E,eAAO,MAAM,sCAAsC,EAAE,SAAS,uBAAuB,EA+RpF,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { EMPTY_OBJECT_SCHEMA, STRING_SCHEMA, NUMBER_SCHEMA, objectSchema, listOutputSchema, entityOutputSchema, bodyEnvelopeSchema, methodDescriptor, runtimeEventId, } from './method-catalog-shared.js';
|
|
2
2
|
import { nullableSchema } from './operator-contract-schemas-shared.js';
|
|
3
|
-
import { CONTINUITY_SNAPSHOT_SCHEMA, DISTRIBUTED_NODE_HOST_CONTRACT_SCHEMA, HEALTH_SNAPSHOT_SCHEMA, INTELLIGENCE_SNAPSHOT_SCHEMA, MEMORY_DOCTOR_REPORT_SCHEMA, MEMORY_VECTOR_STATS_SCHEMA, PROVIDER_ACCOUNT_SNAPSHOT_SCHEMA, PROVIDER_RUNTIME_SNAPSHOT_SCHEMA, PROVIDER_USAGE_SNAPSHOT_SCHEMA, REMOTE_PAIR_APPROVAL_OUTPUT_SCHEMA, REMOTE_PAIR_REQUEST_OUTPUT_SCHEMA, REMOTE_PAIR_REQUESTS_OUTPUT_SCHEMA, REMOTE_PEERS_OUTPUT_SCHEMA, REMOTE_PAIR_REQUEST_ACTION_INPUT_SCHEMA, REMOTE_PEER_DISCONNECT_INPUT_SCHEMA, REMOTE_PEER_INVOKE_INPUT_SCHEMA, REMOTE_PEER_INVOKE_OUTPUT_SCHEMA, REMOTE_PEER_OUTPUT_SCHEMA, REMOTE_PEER_TOKEN_REVOKE_INPUT_SCHEMA, REMOTE_PEER_TOKEN_ROTATE_INPUT_SCHEMA, REMOTE_PEER_TOKEN_ROTATE_OUTPUT_SCHEMA, REMOTE_SNAPSHOT_SCHEMA, REMOTE_WORK_LIST_OUTPUT_SCHEMA, REMOTE_WORK_CANCEL_INPUT_SCHEMA, REMOTE_WORK_OUTPUT_SCHEMA, SETTINGS_SNAPSHOT_SCHEMA, WORKTREE_SNAPSHOT_SCHEMA, } from './operator-contract-schemas.js';
|
|
3
|
+
import { CONTINUITY_SNAPSHOT_SCHEMA, DISTRIBUTED_NODE_HOST_CONTRACT_SCHEMA, HEALTH_SNAPSHOT_SCHEMA, INTELLIGENCE_SNAPSHOT_SCHEMA, MEMORY_DOCTOR_REPORT_SCHEMA, MEMORY_VECTOR_STATS_SCHEMA, PROVIDER_ACCOUNT_SNAPSHOT_SCHEMA, PROVIDER_RUNTIME_SNAPSHOT_SCHEMA, PROVIDER_USAGE_SNAPSHOT_SCHEMA, REMOTE_PAIR_APPROVAL_OUTPUT_SCHEMA, REMOTE_PAIR_REQUEST_OUTPUT_SCHEMA, REMOTE_PAIR_REQUESTS_OUTPUT_SCHEMA, REMOTE_PEERS_OUTPUT_SCHEMA, REMOTE_PAIR_REQUEST_ACTION_INPUT_SCHEMA, REMOTE_PEER_DISCONNECT_INPUT_SCHEMA, REMOTE_PEER_INVOKE_INPUT_SCHEMA, REMOTE_PEER_INVOKE_OUTPUT_SCHEMA, REMOTE_PEER_OUTPUT_SCHEMA, REMOTE_PEER_TOKEN_REVOKE_INPUT_SCHEMA, REMOTE_PEER_TOKEN_ROTATE_INPUT_SCHEMA, REMOTE_PEER_TOKEN_ROTATE_OUTPUT_SCHEMA, REMOTE_SNAPSHOT_SCHEMA, REMOTE_WORK_LIST_OUTPUT_SCHEMA, REMOTE_WORK_CANCEL_INPUT_SCHEMA, REMOTE_WORK_OUTPUT_SCHEMA, SECURITY_SETTINGS_REPORT_SCHEMA, SETTINGS_SNAPSHOT_SCHEMA, WORKTREE_SNAPSHOT_SCHEMA, } from './operator-contract-schemas.js';
|
|
4
4
|
export const builtinGatewayRuntimeMethodDescriptors = [
|
|
5
5
|
methodDescriptor({
|
|
6
6
|
id: 'remote.snapshot',
|
|
@@ -191,6 +191,16 @@ export const builtinGatewayRuntimeMethodDescriptors = [
|
|
|
191
191
|
inputSchema: EMPTY_OBJECT_SCHEMA,
|
|
192
192
|
outputSchema: SETTINGS_SNAPSHOT_SCHEMA,
|
|
193
193
|
}),
|
|
194
|
+
methodDescriptor({
|
|
195
|
+
id: 'security.settings',
|
|
196
|
+
title: 'Security Settings Report',
|
|
197
|
+
description: 'Return security-relevant settings, defaults, current state, and enablement tradeoffs.',
|
|
198
|
+
category: 'settings',
|
|
199
|
+
scopes: ['read:settings'],
|
|
200
|
+
http: { method: 'GET', path: '/api/security-settings' },
|
|
201
|
+
inputSchema: EMPTY_OBJECT_SCHEMA,
|
|
202
|
+
outputSchema: SECURITY_SETTINGS_REPORT_SCHEMA,
|
|
203
|
+
}),
|
|
194
204
|
methodDescriptor({
|
|
195
205
|
id: 'continuity.snapshot',
|
|
196
206
|
title: 'Continuity Snapshot',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"operator-contract-schemas-admin.d.ts","sourceRoot":"","sources":["../../../../src/_internal/platform/control-plane/operator-contract-schemas-admin.ts"],"names":[],"mappings":"AAeA,eAAO,MAAM,sBAAsB,yBAGV,CAAC;AAQ1B,eAAO,MAAM,wBAAwB,yBAQ2F,CAAC;AAEjI,eAAO,MAAM,+BAA+B,yBAE7B,CAAC;AAEhB,eAAO,MAAM,wCAAwC,yBAEtC,CAAC;AAEhB,eAAO,MAAM,uCAAuC,yBAErC,CAAC;AAEhB,eAAO,MAAM,yCAAyC,yBAEvC,CAAC;AAEhB,eAAO,MAAM,wBAAwB,yBAIT,CAAC;AAE7B,eAAO,MAAM,qBAAqB,yBAMmB,CAAC;AAEtD,eAAO,MAAM,sBAAsB,yBAWG,CAAC;AAEvC,eAAO,MAAM,qBAAqB,yBAYyD,CAAC;AAE5F,eAAO,MAAM,wBAAwB,yBAIiB,CAAC;
|
|
1
|
+
{"version":3,"file":"operator-contract-schemas-admin.d.ts","sourceRoot":"","sources":["../../../../src/_internal/platform/control-plane/operator-contract-schemas-admin.ts"],"names":[],"mappings":"AAeA,eAAO,MAAM,sBAAsB,yBAGV,CAAC;AAQ1B,eAAO,MAAM,wBAAwB,yBAQ2F,CAAC;AAEjI,eAAO,MAAM,+BAA+B,yBAE7B,CAAC;AAEhB,eAAO,MAAM,wCAAwC,yBAEtC,CAAC;AAEhB,eAAO,MAAM,uCAAuC,yBAErC,CAAC;AAEhB,eAAO,MAAM,yCAAyC,yBAEvC,CAAC;AAEhB,eAAO,MAAM,wBAAwB,yBAIT,CAAC;AAE7B,eAAO,MAAM,qBAAqB,yBAMmB,CAAC;AAEtD,eAAO,MAAM,sBAAsB,yBAWG,CAAC;AAEvC,eAAO,MAAM,qBAAqB,yBAYyD,CAAC;AAE5F,eAAO,MAAM,wBAAwB,yBAIiB,CAAC;AAyGvD,eAAO,MAAM,0BAA0B,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAM9D,CAAC;AASF,eAAO,MAAM,kCAAkC,yBAGrB,CAAC;AAE3B,eAAO,MAAM,0CAA0C,yBAKhB,CAAC;AAExC,eAAO,MAAM,gCAAgC,yBAUA,CAAC;AAkB9C,eAAO,MAAM,kCAAkC,yBAoBA,CAAC;AAEhD,eAAO,MAAM,iCAAiC,yBAMD,CAAC;AAE9C,eAAO,MAAM,iCAAiC,yBAQoF,CAAC;AAUnI,eAAO,MAAM,gCAAgC,yBAQyD,CAAC;AAEvG,eAAO,MAAM,+BAA+B,yBAWgE,CAAC;AAuC7G,eAAO,MAAM,+BAA+B,yBASC,CAAC;AAE9C,eAAO,MAAM,qBAAqB,yBAwBiM,CAAC;AAcpO,eAAO,MAAM,qBAAqB,yBAiCiK,CAAC;AAEpM,eAAO,MAAM,sCAAsC,yBA6Bf,CAAC;AAErC,eAAO,MAAM,6BAA6B,yBAE9B,CAAC;AAEb,eAAO,MAAM,6BAA6B,yBAE9B,CAAC;AAEb,eAAO,MAAM,mCAAmC,yBAGvB,CAAC;AAE1B,eAAO,MAAM,oCAAoC,yBAKe,CAAC;AAEjE,eAAO,MAAM,mCAAmC,yBAErC,CAAC;AAEZ,eAAO,MAAM,gCAAgC,yBAQiC,CAAC;AAE/E,eAAO,MAAM,kCAAkC,yBAQI,CAAC;AAEpD,eAAO,MAAM,8BAA8B,yBAGvB,CAAC;AAErB,eAAO,MAAM,wBAAwB,yBASX,CAAC;AAE3B,eAAO,MAAM,sBAAsB,yBAEnB,CAAC;AAEjB,eAAO,MAAM,oBAAoB,yBAA4B,CAAC;AAE9D,eAAO,MAAM,qBAAqB,yBAKmC,CAAC;AAYtE,eAAO,MAAM,qBAAqB,yBAcwD,CAAC;AAE3F,eAAO,MAAM,0BAA0B,yBAEvB,CAAC;AAEjB,eAAO,MAAM,4BAA4B,yBAGM,CAAC;AAuChD,eAAO,MAAM,qBAAqB,yBAckG,CAAC"}
|
|
@@ -5,10 +5,10 @@ export const LOCAL_AUTH_USER_SCHEMA = objectSchema({
|
|
|
5
5
|
roles: STRING_LIST_SCHEMA,
|
|
6
6
|
}, ['username', 'roles']);
|
|
7
7
|
const LOCAL_AUTH_SESSION_SCHEMA = objectSchema({
|
|
8
|
-
|
|
8
|
+
tokenFingerprint: STRING_SCHEMA,
|
|
9
9
|
username: STRING_SCHEMA,
|
|
10
10
|
expiresAt: NUMBER_SCHEMA,
|
|
11
|
-
}, ['
|
|
11
|
+
}, ['tokenFingerprint', 'username', 'expiresAt']);
|
|
12
12
|
export const LOCAL_AUTH_STATUS_SCHEMA = objectSchema({
|
|
13
13
|
userStorePath: STRING_SCHEMA,
|
|
14
14
|
bootstrapCredentialPath: STRING_SCHEMA,
|
|
@@ -90,6 +90,7 @@ const AUTOMATION_SURFACE_KIND_SCHEMA = enumSchema([
|
|
|
90
90
|
'discord',
|
|
91
91
|
'ntfy',
|
|
92
92
|
'webhook',
|
|
93
|
+
'homeassistant',
|
|
93
94
|
'telegram',
|
|
94
95
|
'google-chat',
|
|
95
96
|
'signal',
|
|
@@ -3,6 +3,7 @@ export declare const CONTROL_AUTH_LOGIN_RESPONSE_SCHEMA: Record<string, unknown>
|
|
|
3
3
|
export declare const CONTROL_PLANE_CLIENT_DESCRIPTOR_SCHEMA: Record<string, unknown>;
|
|
4
4
|
export declare const CONTROL_PLANE_SURFACE_MESSAGE_SCHEMA: Record<string, unknown>;
|
|
5
5
|
export declare const SETTINGS_SNAPSHOT_SCHEMA: Record<string, unknown>;
|
|
6
|
+
export declare const SECURITY_SETTINGS_REPORT_SCHEMA: Record<string, unknown>;
|
|
6
7
|
export declare const CONTINUITY_SNAPSHOT_SCHEMA: Record<string, unknown>;
|
|
7
8
|
export declare const WORKTREE_SNAPSHOT_SCHEMA: Record<string, unknown>;
|
|
8
9
|
export declare const CONTROL_PLANE_SNAPSHOT_SCHEMA: Record<string, unknown>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"operator-contract-schemas-control.d.ts","sourceRoot":"","sources":["../../../../src/_internal/platform/control-plane/operator-contract-schemas-control.ts"],"names":[],"mappings":"AA4BA,eAAO,MAAM,iCAAiC,yBAGlB,CAAC;AAE7B,eAAO,MAAM,kCAAkC,yBAKQ,CAAC;AAExD,eAAO,MAAM,sCAAsC,yBAOQ,CAAC;AAE5D,eAAO,MAAM,oCAAoC,yBAYE,CAAC;AAsEpD,eAAO,MAAM,wBAAwB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAE5D,CAAC;AA+
|
|
1
|
+
{"version":3,"file":"operator-contract-schemas-control.d.ts","sourceRoot":"","sources":["../../../../src/_internal/platform/control-plane/operator-contract-schemas-control.ts"],"names":[],"mappings":"AA4BA,eAAO,MAAM,iCAAiC,yBAGlB,CAAC;AAE7B,eAAO,MAAM,kCAAkC,yBAKQ,CAAC;AAExD,eAAO,MAAM,sCAAsC,yBAOQ,CAAC;AAE5D,eAAO,MAAM,oCAAoC,yBAYE,CAAC;AAsEpD,eAAO,MAAM,wBAAwB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAE5D,CAAC;AA0BF,eAAO,MAAM,+BAA+B,yBAE5B,CAAC;AA+BjB,eAAO,MAAM,0BAA0B,yBAOkE,CAAC;AA0B1G,eAAO,MAAM,wBAAwB,yBAGX,CAAC;AAE3B,eAAO,MAAM,6BAA6B,yBAaqB,CAAC;AAEhE,eAAO,MAAM,sBAAsB,yBAQgE,CAAC"}
|
|
@@ -103,6 +103,32 @@ const SETTINGS_SNAPSHOT_AVAILABLE_SCHEMA = objectSchema({
|
|
|
103
103
|
export const SETTINGS_SNAPSHOT_SCHEMA = {
|
|
104
104
|
anyOf: [SETTINGS_SNAPSHOT_UNAVAILABLE_SCHEMA, SETTINGS_SNAPSHOT_AVAILABLE_SCHEMA],
|
|
105
105
|
};
|
|
106
|
+
const SECURITY_SETTING_REPORT_SCHEMA = objectSchema({
|
|
107
|
+
key: STRING_SCHEMA,
|
|
108
|
+
type: enumSchema(['feature-flag', 'configuration']),
|
|
109
|
+
defaultState: STRING_SCHEMA,
|
|
110
|
+
currentState: STRING_SCHEMA,
|
|
111
|
+
securityRelevant: BOOLEAN_SCHEMA,
|
|
112
|
+
summary: STRING_SCHEMA,
|
|
113
|
+
insecureWhen: STRING_SCHEMA,
|
|
114
|
+
enablementEffect: STRING_SCHEMA,
|
|
115
|
+
enablementRequirements: STRING_LIST_SCHEMA,
|
|
116
|
+
compatibilityNotes: STRING_LIST_SCHEMA,
|
|
117
|
+
}, [
|
|
118
|
+
'key',
|
|
119
|
+
'type',
|
|
120
|
+
'defaultState',
|
|
121
|
+
'currentState',
|
|
122
|
+
'securityRelevant',
|
|
123
|
+
'summary',
|
|
124
|
+
'insecureWhen',
|
|
125
|
+
'enablementEffect',
|
|
126
|
+
'enablementRequirements',
|
|
127
|
+
'compatibilityNotes',
|
|
128
|
+
]);
|
|
129
|
+
export const SECURITY_SETTINGS_REPORT_SCHEMA = objectSchema({
|
|
130
|
+
settings: arraySchema(SECURITY_SETTING_REPORT_SCHEMA),
|
|
131
|
+
}, ['settings']);
|
|
106
132
|
const SESSION_RETURN_CONTEXT_SCHEMA = objectSchema({
|
|
107
133
|
activityLabel: STRING_SCHEMA,
|
|
108
134
|
statusLabel: STRING_SCHEMA,
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import type { DaemonApiRouteHandlers } from './context.js';
|
|
2
|
-
export declare function dispatchOperatorRoutes(req: Request, handlers: Pick<DaemonApiRouteHandlers, 'getStatus' | 'getCurrentAuth' | 'getControlPlaneSnapshot' | 'getOperatorContract' | 'getControlPlaneWeb' | 'getControlPlaneRecentEvents' | 'getControlPlaneMessages' | 'getControlPlaneClients' | 'getTelemetrySnapshot' | 'getTelemetryEvents' | 'getTelemetryErrors' | 'getTelemetryTraces' | 'getTelemetryMetrics' | 'createTelemetryEventStream' | 'getTelemetryOtlpTraces' | 'getTelemetryOtlpLogs' | 'getTelemetryOtlpMetrics' | 'getGatewayMethods' | 'getGatewayEvents' | 'getGatewayMethod' | 'invokeGatewayMethod' | 'createControlPlaneEventStream' | 'getRoutesSnapshot' | 'getSurfaces' | 'getChannelAccounts' | 'getChannelSurfaceAccounts' | 'getChannelAccount' | 'postChannelAccountAction' | 'getChannelSetupSchema' | 'getChannelDoctor' | 'getChannelRepairActions' | 'getChannelLifecycle' | 'postChannelLifecycleMigrate' | 'getChannelCapabilities' | 'getChannelSurfaceCapabilities' | 'getChannelTools' | 'getChannelSurfaceTools' | 'getChannelAgentTools' | 'getChannelSurfaceAgentTools' | 'postChannelTool' | 'getChannelActions' | 'getChannelSurfaceActions' | 'postChannelAction' | 'postChannelResolveTarget' | 'postChannelAuthorize' | 'postChannelAllowlistResolve' | 'postChannelAllowlistEdit' | 'getChannelPolicies' | 'postChannelPolicy' | 'getChannelPolicyAudit' | 'getChannelStatus' | 'getChannelDirectory' | 'getWatchers' | 'postWatcher' | 'patchWatcher' | 'watcherAction' | 'deleteWatcher' | 'getServiceStatus' | 'installService' | 'startService' | 'stopService' | 'restartService' | 'uninstallService' | 'getRouteBindings' | 'postRouteBinding' | 'patchRouteBinding' | 'deleteRouteBinding' | 'getApprovals' | 'approvalAction' | 'getRemote' | 'getHealth' | 'getAccounts' | 'getProviders' | 'getProvider' | 'getProviderUsage' | 'getSettings' | 'getContinuity' | 'getWorktrees' | 'getIntelligence' | 'getLocalAuth' | 'postLocalAuthUser' | 'deleteLocalAuthUser' | 'postLocalAuthPassword' | 'deleteLocalAuthSession' | 'deleteBootstrapFile' | 'getPanels' | 'postPanelOpen' | 'getEvents' | 'getConfig' | 'postConfig' | 'getReview' | 'getIntegrationSession' | 'getIntegrationTasks' | 'getIntegrationAutomation' | 'getIntegrationSessions' | 'getAutomationHeartbeat' | 'postAutomationHeartbeat' | 'getMemoryDoctor' | 'getMemoryVectorStats' | 'postMemoryVectorRebuild' | 'postMemoryEmbeddingDefault' | 'getKnowledgeStatus' | 'getKnowledgeSources' | 'getKnowledgeNodes' | 'getKnowledgeIssues' | 'getKnowledgeItem' | 'getKnowledgeConnectors' | 'getKnowledgeConnector' | 'getKnowledgeConnectorDoctor' | 'getKnowledgeProjectionTargets' | 'getKnowledgeGraphqlSchema' | 'getKnowledgeExtractions' | 'getKnowledgeUsage' | 'getKnowledgeCandidates' | 'getKnowledgeCandidate' | 'getKnowledgeReports' | 'getKnowledgeReport' | 'getKnowledgeExtraction' | 'getKnowledgeSourceExtraction' | 'getKnowledgeJobs' | 'getKnowledgeJob' | 'getKnowledgeJobRuns' | 'getKnowledgeSchedules' | 'getKnowledgeSchedule' | 'postKnowledgeIngestUrl' | 'postKnowledgeIngestArtifact' | 'postKnowledgeImportBookmarks' | 'postKnowledgeImportUrls' | 'postKnowledgeIngestConnector' | 'postKnowledgeSearch' | 'postKnowledgePacket' | 'postKnowledgeDecideCandidate' | 'postKnowledgeRunJob' | 'postKnowledgeLint' | 'postKnowledgeReindex' | 'postKnowledgeSaveSchedule' | 'deleteKnowledgeSchedule' | 'postKnowledgeSetScheduleEnabled' | 'postKnowledgeRenderProjection' | 'postKnowledgeMaterializeProjection' | 'executeKnowledgeGraphql' | 'getVoiceStatus' | 'getVoiceProviders' | 'getVoiceVoices' | 'postVoiceTts' | 'postVoiceTtsStream' | 'postVoiceStt' | 'postVoiceRealtimeSession' | 'getWebSearchProviders' | 'postWebSearch' | 'getArtifacts' | 'postArtifact' | 'getArtifact' | 'getArtifactContent' | 'getMediaProviders' | 'postMediaAnalyze' | 'postMediaTransform' | 'postMediaGenerate' | 'getMultimodalStatus' | 'getMultimodalProviders' | 'postMultimodalAnalyze' | 'postMultimodalPacket' | 'postMultimodalWriteback' | 'getRemoteNodeHostContract'>): Promise<Response | null>;
|
|
2
|
+
export declare function dispatchOperatorRoutes(req: Request, handlers: Pick<DaemonApiRouteHandlers, 'getStatus' | 'getCurrentAuth' | 'getControlPlaneSnapshot' | 'getOperatorContract' | 'getControlPlaneWeb' | 'getControlPlaneRecentEvents' | 'getControlPlaneMessages' | 'getControlPlaneClients' | 'getTelemetrySnapshot' | 'getTelemetryEvents' | 'getTelemetryErrors' | 'getTelemetryTraces' | 'getTelemetryMetrics' | 'createTelemetryEventStream' | 'getTelemetryOtlpTraces' | 'getTelemetryOtlpLogs' | 'getTelemetryOtlpMetrics' | 'getGatewayMethods' | 'getGatewayEvents' | 'getGatewayMethod' | 'invokeGatewayMethod' | 'createControlPlaneEventStream' | 'getRoutesSnapshot' | 'getSurfaces' | 'getChannelAccounts' | 'getChannelSurfaceAccounts' | 'getChannelAccount' | 'postChannelAccountAction' | 'getChannelSetupSchema' | 'getChannelDoctor' | 'getChannelRepairActions' | 'getChannelLifecycle' | 'postChannelLifecycleMigrate' | 'getChannelCapabilities' | 'getChannelSurfaceCapabilities' | 'getChannelTools' | 'getChannelSurfaceTools' | 'getChannelAgentTools' | 'getChannelSurfaceAgentTools' | 'postChannelTool' | 'getChannelActions' | 'getChannelSurfaceActions' | 'postChannelAction' | 'postChannelResolveTarget' | 'postChannelAuthorize' | 'postChannelAllowlistResolve' | 'postChannelAllowlistEdit' | 'getChannelPolicies' | 'postChannelPolicy' | 'getChannelPolicyAudit' | 'getChannelStatus' | 'getChannelDirectory' | 'getWatchers' | 'postWatcher' | 'patchWatcher' | 'watcherAction' | 'deleteWatcher' | 'getServiceStatus' | 'installService' | 'startService' | 'stopService' | 'restartService' | 'uninstallService' | 'getRouteBindings' | 'postRouteBinding' | 'patchRouteBinding' | 'deleteRouteBinding' | 'getApprovals' | 'approvalAction' | 'getRemote' | 'getHealth' | 'getAccounts' | 'getProviders' | 'getProvider' | 'getProviderUsage' | 'getSettings' | 'getSecuritySettings' | 'getContinuity' | 'getWorktrees' | 'getIntelligence' | 'getLocalAuth' | 'postLocalAuthUser' | 'deleteLocalAuthUser' | 'postLocalAuthPassword' | 'deleteLocalAuthSession' | 'deleteBootstrapFile' | 'getPanels' | 'postPanelOpen' | 'getEvents' | 'getConfig' | 'postConfig' | 'getReview' | 'getIntegrationSession' | 'getIntegrationTasks' | 'getIntegrationAutomation' | 'getIntegrationSessions' | 'getAutomationHeartbeat' | 'postAutomationHeartbeat' | 'getMemoryDoctor' | 'getMemoryVectorStats' | 'postMemoryVectorRebuild' | 'postMemoryEmbeddingDefault' | 'getKnowledgeStatus' | 'getKnowledgeSources' | 'getKnowledgeNodes' | 'getKnowledgeIssues' | 'getKnowledgeItem' | 'getKnowledgeConnectors' | 'getKnowledgeConnector' | 'getKnowledgeConnectorDoctor' | 'getKnowledgeProjectionTargets' | 'getKnowledgeGraphqlSchema' | 'getKnowledgeExtractions' | 'getKnowledgeUsage' | 'getKnowledgeCandidates' | 'getKnowledgeCandidate' | 'getKnowledgeReports' | 'getKnowledgeReport' | 'getKnowledgeExtraction' | 'getKnowledgeSourceExtraction' | 'getKnowledgeJobs' | 'getKnowledgeJob' | 'getKnowledgeJobRuns' | 'getKnowledgeSchedules' | 'getKnowledgeSchedule' | 'postKnowledgeIngestUrl' | 'postKnowledgeIngestArtifact' | 'postKnowledgeImportBookmarks' | 'postKnowledgeImportUrls' | 'postKnowledgeIngestConnector' | 'postKnowledgeSearch' | 'postKnowledgePacket' | 'postKnowledgeDecideCandidate' | 'postKnowledgeRunJob' | 'postKnowledgeLint' | 'postKnowledgeReindex' | 'postKnowledgeSaveSchedule' | 'deleteKnowledgeSchedule' | 'postKnowledgeSetScheduleEnabled' | 'postKnowledgeRenderProjection' | 'postKnowledgeMaterializeProjection' | 'executeKnowledgeGraphql' | 'getVoiceStatus' | 'getVoiceProviders' | 'getVoiceVoices' | 'postVoiceTts' | 'postVoiceTtsStream' | 'postVoiceStt' | 'postVoiceRealtimeSession' | 'getWebSearchProviders' | 'postWebSearch' | 'getArtifacts' | 'postArtifact' | 'getArtifact' | 'getArtifactContent' | 'getMediaProviders' | 'postMediaAnalyze' | 'postMediaTransform' | 'postMediaGenerate' | 'getMultimodalStatus' | 'getMultimodalProviders' | 'postMultimodalAnalyze' | 'postMultimodalPacket' | 'postMultimodalWriteback' | 'getRemoteNodeHostContract'>): Promise<Response | null>;
|
|
3
3
|
//# sourceMappingURL=operator.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"operator.d.ts","sourceRoot":"","sources":["../../../../../src/_internal/platform/control-plane/routes/operator.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"operator.d.ts","sourceRoot":"","sources":["../../../../../src/_internal/platform/control-plane/routes/operator.ts"],"names":[],"mappings":"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"}
|
|
@@ -212,6 +212,8 @@ export async function dispatchOperatorRoutes(req, handlers) {
|
|
|
212
212
|
return handlers.getProvider(decodeURIComponent(providerMatch[1]));
|
|
213
213
|
if (pathname === '/api/settings' && method === 'GET')
|
|
214
214
|
return handlers.getSettings();
|
|
215
|
+
if (pathname === '/api/security-settings' && method === 'GET')
|
|
216
|
+
return handlers.getSecuritySettings();
|
|
215
217
|
if (pathname === '/api/continuity' && method === 'GET')
|
|
216
218
|
return handlers.getContinuity();
|
|
217
219
|
if (pathname === '/api/worktrees' && method === 'GET')
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import type { ArtifactAttachment } from '../artifacts/index.js';
|
|
5
5
|
export type ControlPlaneStreamingMode = 'sse' | 'websocket' | 'both';
|
|
6
|
-
export type ControlPlaneClientSurface = 'tui' | 'web' | 'slack' | 'discord' | 'ntfy' | 'webhook' | 'telegram' | 'google-chat' | 'signal' | 'whatsapp' | 'imessage' | 'msteams' | 'bluebubbles' | 'mattermost' | 'matrix' | 'service';
|
|
6
|
+
export type ControlPlaneClientSurface = 'tui' | 'web' | 'slack' | 'discord' | 'ntfy' | 'webhook' | 'homeassistant' | 'telegram' | 'google-chat' | 'signal' | 'whatsapp' | 'imessage' | 'msteams' | 'bluebubbles' | 'mattermost' | 'matrix' | 'service';
|
|
7
7
|
export interface ControlPlaneServerConfig {
|
|
8
8
|
enabled: boolean;
|
|
9
9
|
host: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/_internal/platform/control-plane/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAEhE,MAAM,MAAM,yBAAyB,GAAG,KAAK,GAAG,WAAW,GAAG,MAAM,CAAC;AACrE,MAAM,MAAM,yBAAyB,GACjC,KAAK,GACL,KAAK,GACL,OAAO,GACP,SAAS,GACT,MAAM,GACN,SAAS,GACT,UAAU,GACV,aAAa,GACb,QAAQ,GACR,UAAU,GACV,UAAU,GACV,SAAS,GACT,aAAa,GACb,YAAY,GACZ,QAAQ,GACR,SAAS,CAAC;AAEd,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,yBAAyB,CAAC;IACzC,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,4BAA4B;IAC3C,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,yBAAyB,CAAC;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,6BAA6B;IAC5C,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,0BAA0B;IACzC,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,yBAAyB,CAAC;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC;IAC9C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,SAAS,kBAAkB,EAAE,CAAC;IAC5C,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/_internal/platform/control-plane/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAEhE,MAAM,MAAM,yBAAyB,GAAG,KAAK,GAAG,WAAW,GAAG,MAAM,CAAC;AACrE,MAAM,MAAM,yBAAyB,GACjC,KAAK,GACL,KAAK,GACL,OAAO,GACP,SAAS,GACT,MAAM,GACN,SAAS,GACT,eAAe,GACf,UAAU,GACV,aAAa,GACb,QAAQ,GACR,UAAU,GACV,UAAU,GACV,SAAS,GACT,aAAa,GACb,YAAY,GACZ,QAAQ,GACR,SAAS,CAAC;AAEd,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,yBAAyB,CAAC;IACzC,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,4BAA4B;IAC3C,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,yBAAyB,CAAC;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,6BAA6B;IAC5C,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,0BAA0B;IACzC,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,yBAAyB,CAAC;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC;IAC9C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,SAAS,kBAAkB,EAAE,CAAC;IAC5C,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"control-plane.d.ts","sourceRoot":"","sources":["../../../../src/_internal/platform/daemon/control-plane.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAOhE,OAAO,KAAK,EAAE,mBAAmB,EAAuB,MAAM,2BAA2B,CAAC;AAC1F,OAAO,KAAK,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAC/F,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"control-plane.d.ts","sourceRoot":"","sources":["../../../../src/_internal/platform/daemon/control-plane.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { authenticateOperatorRequest, authenticateOperatorToken, extractOperatorAuthToken, isOperatorAdmin, } from '../security/http-auth.js';
|
|
2
|
+
import { isRuntimeEventDomain } from '../runtime/events/index.js';
|
|
2
3
|
import { extractForwardedClientIp } from '../runtime/network/index.js';
|
|
3
4
|
import { resolveGatewayPathTemplate } from './helpers.js';
|
|
4
5
|
import { summarizeError } from '../utils/error-display.js';
|
|
@@ -133,11 +134,13 @@ export class DaemonControlPlaneHelper {
|
|
|
133
134
|
}
|
|
134
135
|
const token = this.extractAuthToken(req);
|
|
135
136
|
const principal = resolveAuthenticatedPrincipal(req, this);
|
|
136
|
-
if (
|
|
137
|
+
if (!principal) {
|
|
137
138
|
return Response.json({ error: 'Unauthorized' }, { status: 401 });
|
|
138
139
|
}
|
|
139
140
|
const rawDomains = url.searchParams.get('domains');
|
|
140
|
-
const domains = (rawDomains
|
|
141
|
+
const domains = parseRuntimeDomains(rawDomains);
|
|
142
|
+
if (domains instanceof Response)
|
|
143
|
+
return domains;
|
|
141
144
|
const requestedKind = url.searchParams.get('clientKind');
|
|
142
145
|
const clientKind = requestedKind === 'tui'
|
|
143
146
|
|| requestedKind === 'web'
|
|
@@ -159,7 +162,7 @@ export class DaemonControlPlaneHelper {
|
|
|
159
162
|
domains,
|
|
160
163
|
clientKind,
|
|
161
164
|
remoteAddress: extractForwardedClientIp(req, this.trustProxyEnabled()),
|
|
162
|
-
authenticated:
|
|
165
|
+
authenticated: true,
|
|
163
166
|
},
|
|
164
167
|
});
|
|
165
168
|
return upgraded ? 'upgraded' : Response.json({ error: 'WebSocket upgrade failed' }, { status: 400 });
|
|
@@ -219,7 +222,12 @@ export class DaemonControlPlaneHelper {
|
|
|
219
222
|
...(Array.isArray(frame.capabilities) ? { capabilities: frame.capabilities.filter((value) => typeof value === 'string') } : {}),
|
|
220
223
|
});
|
|
221
224
|
if (Array.isArray(frame.domains)) {
|
|
222
|
-
|
|
225
|
+
const domains = normalizeFrameDomains(frame.domains);
|
|
226
|
+
if (domains instanceof Response) {
|
|
227
|
+
ws.send(JSON.stringify({ type: 'auth', ok: false, error: 'Invalid runtime event domain' }));
|
|
228
|
+
return;
|
|
229
|
+
}
|
|
230
|
+
this.context.controlPlaneGateway.subscribeWebSocketClient(clientId, domains);
|
|
223
231
|
}
|
|
224
232
|
ws.data.authToken = token;
|
|
225
233
|
ws.data.principalId = principal.principalId;
|
|
@@ -236,16 +244,24 @@ export class DaemonControlPlaneHelper {
|
|
|
236
244
|
return;
|
|
237
245
|
}
|
|
238
246
|
const domains = Array.isArray(frame.domains)
|
|
239
|
-
? frame.domains
|
|
247
|
+
? normalizeFrameDomains(frame.domains)
|
|
240
248
|
: [];
|
|
249
|
+
if (domains instanceof Response) {
|
|
250
|
+
ws.send(JSON.stringify({ type: 'error', error: 'Invalid runtime event domain' }));
|
|
251
|
+
return;
|
|
252
|
+
}
|
|
241
253
|
this.context.controlPlaneGateway.subscribeWebSocketClient(clientId, domains);
|
|
242
254
|
ws.send(JSON.stringify({ type: 'subscribed', clientId, domains }));
|
|
243
255
|
return;
|
|
244
256
|
}
|
|
245
257
|
if (frame.type === 'unsubscribe') {
|
|
246
258
|
const domains = Array.isArray(frame.domains)
|
|
247
|
-
? frame.domains
|
|
259
|
+
? normalizeFrameDomains(frame.domains)
|
|
248
260
|
: undefined;
|
|
261
|
+
if (domains instanceof Response) {
|
|
262
|
+
ws.send(JSON.stringify({ type: 'error', error: 'Invalid runtime event domain' }));
|
|
263
|
+
return;
|
|
264
|
+
}
|
|
249
265
|
this.context.controlPlaneGateway.unsubscribeWebSocketClient(clientId, domains);
|
|
250
266
|
ws.send(JSON.stringify({ type: 'unsubscribed', clientId, domains: domains ?? [] }));
|
|
251
267
|
return;
|
|
@@ -400,3 +416,31 @@ export class DaemonControlPlaneHelper {
|
|
|
400
416
|
});
|
|
401
417
|
}
|
|
402
418
|
}
|
|
419
|
+
function parseRuntimeDomains(rawDomains) {
|
|
420
|
+
if (!rawDomains)
|
|
421
|
+
return [];
|
|
422
|
+
return normalizeFrameDomains(rawDomains.split(',').map((value) => value.trim()).filter(Boolean));
|
|
423
|
+
}
|
|
424
|
+
function normalizeFrameDomains(values) {
|
|
425
|
+
const domains = [];
|
|
426
|
+
const invalid = [];
|
|
427
|
+
for (const value of values) {
|
|
428
|
+
if (typeof value !== 'string') {
|
|
429
|
+
invalid.push(String(value));
|
|
430
|
+
continue;
|
|
431
|
+
}
|
|
432
|
+
const trimmed = value.trim();
|
|
433
|
+
if (!isRuntimeEventDomain(trimmed)) {
|
|
434
|
+
invalid.push(trimmed);
|
|
435
|
+
continue;
|
|
436
|
+
}
|
|
437
|
+
domains.push(trimmed);
|
|
438
|
+
}
|
|
439
|
+
if (invalid.length > 0) {
|
|
440
|
+
return Response.json({
|
|
441
|
+
error: 'Invalid runtime event domain',
|
|
442
|
+
invalid,
|
|
443
|
+
}, { status: 400 });
|
|
444
|
+
}
|
|
445
|
+
return [...new Set(domains)];
|
|
446
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"facade-composition.d.ts","sourceRoot":"","sources":["../../../../src/_internal/platform/daemon/facade-composition.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAEvD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAkBrD,OAAO,KAAK,EAAE,oBAAoB,EAA0B,MAAM,wCAAwC,CAAC;AAI3G,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAEjE,OAAO,KAAK,EAAE,YAAY,EAAuB,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"facade-composition.d.ts","sourceRoot":"","sources":["../../../../src/_internal/platform/daemon/facade-composition.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAEvD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAkBrD,OAAO,KAAK,EAAE,oBAAoB,EAA0B,MAAM,wCAAwC,CAAC;AAI3G,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAEjE,OAAO,KAAK,EAAE,YAAY,EAAuB,MAAM,YAAY,CAAC;AAKpE,YAAY,EACV,2BAA2B,EAC3B,yBAAyB,EACzB,sCAAsC,GACvC,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EACV,2BAA2B,EAC3B,yBAAyB,EACzB,sCAAsC,EACvC,MAAM,mBAAmB,CAAC;AAI3B;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,8BAA8B,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,oBAAoB,CAoHvG;AAED,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,YAAY,EACpB,qBAAqB,CAAC,EAAE,aAAa,GACpC,2BAA2B,CA6I7B;AAED,wBAAgB,+BAA+B,CAC7C,OAAO,EAAE,sCAAsC,GAC9C,yBAAyB,CAuK3B;AAED,wBAAgB,kCAAkC,CAAC,OAAO,EAAE;IAC1D,QAAQ,CAAC,aAAa,EAAE,OAAO,2BAA2B,EAAE,mBAAmB,CAAC;IAChF,QAAQ,CAAC,aAAa,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,KAAK,OAAO,yBAAyB,EAAE,WAAW,GAAG,QAAQ,CAAC;IACzK,QAAQ,CAAC,4BAA4B,EAAE,CAAC,OAAO,EAAE,OAAO,kDAAkD,EAAE,sBAAsB,GAAG,SAAS,EAAE,KAAK,EAAE;QACrJ,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAC5B,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;QAClC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;KAC7B,KAAK,IAAI,CAAC;CACZ,GAAG,IAAI,CAsBP"}
|
|
@@ -19,6 +19,7 @@ import { getBaseModelId } from '../providers/registry-helpers.js';
|
|
|
19
19
|
import { CATALOG_PROVIDER_NAME_ALIASES } from '../providers/builtin-registry.js';
|
|
20
20
|
import { createRuntimeServices } from '../runtime/services.js';
|
|
21
21
|
import { PlatformServiceManager } from './service-manager.js';
|
|
22
|
+
import { PermissionManager, createPermissionConfigReader } from '../permissions/manager.js';
|
|
22
23
|
/**
|
|
23
24
|
* Creates the CompanionLLMProvider adapter that bridges the daemon's
|
|
24
25
|
* ProviderRegistry (chat-based) to the queue-driven async-generator interface
|
|
@@ -89,6 +90,7 @@ export function createCompanionProviderAdapter(providerRegistry) {
|
|
|
89
90
|
let resolve = null;
|
|
90
91
|
let done = false;
|
|
91
92
|
let streamError;
|
|
93
|
+
let streamedContent = '';
|
|
92
94
|
const push = (chunk) => {
|
|
93
95
|
queue.push(chunk);
|
|
94
96
|
resolve?.();
|
|
@@ -96,14 +98,37 @@ export function createCompanionProviderAdapter(providerRegistry) {
|
|
|
96
98
|
};
|
|
97
99
|
const chatPromise = provider.chat({
|
|
98
100
|
model: bareModelId,
|
|
99
|
-
messages: messages.map((m) =>
|
|
101
|
+
messages: messages.map((m) => {
|
|
102
|
+
if (m.role === 'tool') {
|
|
103
|
+
return {
|
|
104
|
+
role: 'tool',
|
|
105
|
+
callId: m.callId,
|
|
106
|
+
content: m.content,
|
|
107
|
+
...(m.name ? { name: m.name } : {}),
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
if (m.role === 'assistant') {
|
|
111
|
+
return {
|
|
112
|
+
role: 'assistant',
|
|
113
|
+
content: m.content,
|
|
114
|
+
...(m.toolCalls ? { toolCalls: m.toolCalls } : {}),
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
return { role: 'user', content: m.content };
|
|
118
|
+
}),
|
|
119
|
+
tools: options.tools && options.tools.length > 0 ? [...options.tools] : undefined,
|
|
100
120
|
systemPrompt: options.systemPrompt ?? undefined,
|
|
101
121
|
signal: options.abortSignal,
|
|
102
122
|
onDelta(delta) {
|
|
103
|
-
if (delta.content)
|
|
123
|
+
if (delta.content) {
|
|
124
|
+
streamedContent += delta.content;
|
|
104
125
|
push({ type: 'text_delta', delta: delta.content });
|
|
126
|
+
}
|
|
105
127
|
},
|
|
106
128
|
}).then((resp) => {
|
|
129
|
+
if (resp.content && streamedContent.length === 0) {
|
|
130
|
+
push({ type: 'text_delta', delta: resp.content });
|
|
131
|
+
}
|
|
107
132
|
if (resp.toolCalls?.length) {
|
|
108
133
|
for (const tc of resp.toolCalls) {
|
|
109
134
|
push({ type: 'tool_call', toolCallId: tc.id, toolName: tc.name, toolInput: tc.arguments });
|
|
@@ -199,6 +224,9 @@ export function resolveDaemonFacadeRuntime(config, fallbackConfigManager) {
|
|
|
199
224
|
persist: true,
|
|
200
225
|
// C-3: Wire the full ToolRegistry so LLM-emitted tool calls are executed.
|
|
201
226
|
toolRegistry: runtimeServices.agentOrchestrator.getToolRegistry(),
|
|
227
|
+
permissionManager: new PermissionManager(undefined, createPermissionConfigReader(resolvedConfigManager), runtimeServices.policyRuntimeState, runtimeServices.hookDispatcher, runtimeServices.featureFlags),
|
|
228
|
+
hookDispatcher: runtimeServices.hookDispatcher,
|
|
229
|
+
runtimeBus,
|
|
202
230
|
});
|
|
203
231
|
runtimeServices.approvalBroker.setPublisher(controlPlaneGateway);
|
|
204
232
|
runtimeServices.sessionBroker.setEventPublisher((event, payload) => {
|
|
@@ -117,7 +117,7 @@ export interface CreateDaemonFacadeCollaboratorsOptions {
|
|
|
117
117
|
}>;
|
|
118
118
|
readonly syncSpawnedAgentTask: (record: import('../tools/agent/index.js').AgentRecord, sessionId?: string) => void;
|
|
119
119
|
readonly syncFinishedAgentTask: (record: import('../tools/agent/index.js').AgentRecord) => void;
|
|
120
|
-
readonly surfaceDeliveryEnabled: (surface: 'slack' | 'discord' | 'ntfy' | 'webhook' | 'telegram' | 'google-chat' | 'signal' | 'whatsapp' | 'imessage' | 'msteams' | 'bluebubbles' | 'mattermost' | 'matrix') => boolean;
|
|
120
|
+
readonly surfaceDeliveryEnabled: (surface: 'slack' | 'discord' | 'ntfy' | 'webhook' | 'homeassistant' | 'telegram' | 'google-chat' | 'signal' | 'whatsapp' | 'imessage' | 'msteams' | 'bluebubbles' | 'mattermost' | 'matrix') => boolean;
|
|
121
121
|
readonly signWebhookPayload: (body: string, secret: string) => string;
|
|
122
122
|
readonly handleApprovalAction: (approvalId: string, action: 'claim' | 'approve' | 'deny' | 'cancel', req: Request) => Promise<Response>;
|
|
123
123
|
readonly tlsState: () => ResolvedInboundTlsContext | null;
|