@opengeni/core 0.21.10 → 0.28.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/access/index.d.ts +1 -1
- package/dist/application/new-session-drafts.d.ts +1 -1
- package/dist/application/session-commands.d.ts +2 -2
- package/dist/billing/limits.d.ts +1 -1
- package/dist/canonical-human-identities.d.ts +12 -0
- package/dist/canonical-human-identities.js +23 -0
- package/dist/canonical-human-identities.js.map +1 -0
- package/dist/chunk-6WKPWE5S.js +2380 -0
- package/dist/chunk-6WKPWE5S.js.map +1 -0
- package/dist/chunk-IBOEYG6N.js +34 -0
- package/dist/chunk-IBOEYG6N.js.map +1 -0
- package/dist/chunk-JJU6I5XD.js +2713 -0
- package/dist/chunk-JJU6I5XD.js.map +1 -0
- package/dist/chunk-NYPMQ7NO.js +2270 -0
- package/dist/chunk-NYPMQ7NO.js.map +1 -0
- package/dist/dependencies.d.ts +30 -6
- package/dist/domain/capabilities.d.ts +28 -3
- package/dist/domain/company-profile-durable-learning-adapter.d.ts +39 -0
- package/dist/domain/conversation-integrations.d.ts +225 -0
- package/dist/domain/durable-learning-slack-publication.d.ts +72 -0
- package/dist/domain/editable-artifacts/agent-application.d.ts +192 -0
- package/dist/domain/editable-artifacts/durable-export-postgres.d.ts +4 -0
- package/dist/domain/editable-artifacts/durable-export.d.ts +212 -0
- package/dist/domain/editable-artifacts/errors.d.ts +47 -0
- package/dist/domain/editable-artifacts/hash.d.ts +11 -0
- package/dist/domain/editable-artifacts/in-memory.d.ts +99 -0
- package/dist/domain/editable-artifacts/index.d.ts +14 -0
- package/dist/domain/editable-artifacts/ports.d.ts +341 -0
- package/dist/domain/editable-artifacts/postgres-adapters.d.ts +13 -0
- package/dist/domain/editable-artifacts/service.d.ts +105 -0
- package/dist/domain/editable-artifacts/snapshot-compaction.d.ts +44 -0
- package/dist/domain/editable-artifacts/snapshot-verifier-genesis.d.ts +50 -0
- package/dist/domain/editable-artifacts/snapshot-verifier-materialization.d.ts +21 -0
- package/dist/domain/editable-artifacts/snapshot-verifier.d.ts +118 -0
- package/dist/domain/editable-artifacts/types.d.ts +410 -0
- package/dist/domain/fiken.d.ts +35 -0
- package/dist/domain/memory-slack-delivery.d.ts +19 -0
- package/dist/domain/packs.d.ts +29 -1
- package/dist/domain/personal-connection-delegations.d.ts +9 -1
- package/dist/domain/scheduled-tasks.d.ts +2 -2
- package/dist/domain/session-tool-policy.d.ts +2 -2
- package/dist/domain/sessions.d.ts +24 -8
- package/dist/domain/skill-imports.d.ts +32 -0
- package/dist/domain/slack-publication-secret-safety.d.ts +8 -0
- package/dist/domain/timeline-annotations.d.ts +5 -0
- package/dist/domain/video-generation-capabilities.d.ts +10 -0
- package/dist/domain/video-generation.d.ts +47 -0
- package/dist/editable-artifact-live/application.d.ts +69 -0
- package/dist/editable-artifact-live/errors.d.ts +1 -0
- package/dist/editable-artifact-live/index.d.ts +8 -0
- package/dist/editable-artifact-live/outbox-dispatcher.d.ts +162 -0
- package/dist/editable-artifact-live/ports.d.ts +100 -0
- package/dist/editable-artifact-live/server.d.ts +71 -0
- package/dist/editable-artifact-live/ticket.d.ts +40 -0
- package/dist/editable-artifact-live/types.d.ts +213 -0
- package/dist/editable-artifact-live/wire.d.ts +34 -0
- package/dist/editable-artifact-live.d.ts +2 -0
- package/dist/editable-artifact-live.js +58 -0
- package/dist/editable-artifact-live.js.map +1 -0
- package/dist/editable-artifacts.d.ts +2 -0
- package/dist/editable-artifacts.js +179 -0
- package/dist/editable-artifacts.js.map +1 -0
- package/dist/index.d.ts +37 -26
- package/dist/index.js +4145 -959
- package/dist/index.js.map +1 -1
- package/dist/managed-session.d.ts +6 -2
- package/dist/rigs/index.d.ts +1 -1
- package/dist/rigs/provider-images.d.ts +31 -0
- package/dist/sandbox/fleet.d.ts +8 -5
- package/dist/sandbox/routing.d.ts +1 -0
- package/dist/session-authorization.d.ts +4 -2
- package/dist/transcription.d.ts +5 -0
- package/dist/workflow-wake-contract.d.ts +7 -0
- package/package.json +22 -10
- package/src/access/index.ts +14 -2
- package/src/application/new-session-drafts.ts +2 -0
- package/src/application/session-commands.ts +188 -107
- package/src/canonical-human-identities.ts +27 -0
- package/src/dependencies.ts +34 -2
- package/src/domain/capabilities.ts +729 -408
- package/src/domain/company-profile-durable-learning-adapter.ts +221 -0
- package/src/domain/conversation-integrations.ts +1238 -0
- package/src/domain/durable-learning-slack-publication.ts +202 -0
- package/src/domain/editable-artifacts/agent-application.ts +687 -0
- package/src/domain/editable-artifacts/durable-export-postgres.ts +139 -0
- package/src/domain/editable-artifacts/durable-export.ts +734 -0
- package/src/domain/editable-artifacts/errors.ts +115 -0
- package/src/domain/editable-artifacts/hash.ts +131 -0
- package/src/domain/editable-artifacts/in-memory.ts +1662 -0
- package/src/domain/editable-artifacts/index.ts +14 -0
- package/src/domain/editable-artifacts/ports.ts +462 -0
- package/src/domain/editable-artifacts/postgres-adapters.ts +49 -0
- package/src/domain/editable-artifacts/service.ts +2402 -0
- package/src/domain/editable-artifacts/snapshot-compaction.ts +246 -0
- package/src/domain/editable-artifacts/snapshot-verifier-genesis.ts +235 -0
- package/src/domain/editable-artifacts/snapshot-verifier-materialization.ts +74 -0
- package/src/domain/editable-artifacts/snapshot-verifier.ts +687 -0
- package/src/domain/editable-artifacts/types.ts +835 -0
- package/src/domain/fiken.ts +88 -0
- package/src/domain/insights.ts +163 -50
- package/src/domain/memory-slack-delivery.ts +204 -0
- package/src/domain/memory-slack-publication.ts +5 -2
- package/src/domain/packs.ts +266 -5
- package/src/domain/personal-connection-delegations.ts +97 -6
- package/src/domain/scheduled-tasks.ts +171 -29
- package/src/domain/session-tool-policy.ts +8 -2
- package/src/domain/sessions.ts +395 -148
- package/src/domain/skill-imports.ts +350 -0
- package/src/domain/slack-publication-secret-safety.ts +42 -0
- package/src/domain/timeline-annotations.ts +204 -0
- package/src/domain/video-generation-capabilities.ts +104 -0
- package/src/domain/video-generation.ts +249 -0
- package/src/editable-artifact-live/application.ts +182 -0
- package/src/editable-artifact-live/errors.ts +4 -0
- package/src/editable-artifact-live/index.ts +8 -0
- package/src/editable-artifact-live/outbox-dispatcher.ts +916 -0
- package/src/editable-artifact-live/ports.ts +139 -0
- package/src/editable-artifact-live/server.ts +1707 -0
- package/src/editable-artifact-live/ticket.ts +217 -0
- package/src/editable-artifact-live/types.ts +286 -0
- package/src/editable-artifact-live/wire.ts +95 -0
- package/src/editable-artifact-live.ts +2 -0
- package/src/editable-artifacts.ts +2 -0
- package/src/index.ts +15 -0
- package/src/managed-session.ts +19 -2
- package/src/rigs/index.ts +26 -19
- package/src/rigs/provider-images.ts +110 -0
- package/src/sandbox/fleet.ts +72 -66
- package/src/sandbox/routing.ts +6 -3
- package/src/session-authorization.ts +187 -52
- package/src/transcription.ts +5 -0
- package/src/workflow-wake-contract.ts +8 -0
|
@@ -2,6 +2,7 @@ import type { Settings } from "@opengeni/config";
|
|
|
2
2
|
import type {
|
|
3
3
|
AccessGrant,
|
|
4
4
|
McpPersonalConnectionDelegation,
|
|
5
|
+
KnowledgeSourceSyncAction,
|
|
5
6
|
ScheduledTask,
|
|
6
7
|
ScheduledTaskAgentConfig,
|
|
7
8
|
Session,
|
|
@@ -9,18 +10,24 @@ import type {
|
|
|
9
10
|
SessionAuthorizationSurface,
|
|
10
11
|
CreateScheduledTaskRequest as CreateScheduledTaskPayload,
|
|
11
12
|
UpdateScheduledTaskRequest as UpdateScheduledTaskPayload,
|
|
13
|
+
XaiProviderAccountAuthoritySnapshotV1,
|
|
12
14
|
} from "@opengeni/contracts";
|
|
13
15
|
import { OPENGENI_SLACK_BOT_SESSION_METADATA_KEY } from "@opengeni/contracts";
|
|
14
16
|
import {
|
|
15
17
|
createScheduledTask,
|
|
16
18
|
deleteScheduledTask,
|
|
19
|
+
getConnectionMetadata,
|
|
20
|
+
getKnowledgeSourceForSyncAuthority,
|
|
17
21
|
getNestedAgentDepthDeploymentPolicy,
|
|
18
22
|
getRig,
|
|
19
23
|
getScheduledTask,
|
|
20
24
|
getScheduledTaskPersonalConnectionDelegations,
|
|
25
|
+
getSessionTurnXaiProviderAccountAuthoritySnapshot,
|
|
21
26
|
getSession,
|
|
22
27
|
requireWorkspace,
|
|
28
|
+
scopedKnowledgeScopeKey,
|
|
23
29
|
updateScheduledTask,
|
|
30
|
+
resolveXaiProviderAccountAuthoritySnapshotForAcceptance,
|
|
24
31
|
type Database,
|
|
25
32
|
type UpdateScheduledTaskInput,
|
|
26
33
|
} from "@opengeni/db";
|
|
@@ -94,24 +101,39 @@ export async function createValidatedScheduledTask(input: {
|
|
|
94
101
|
sessionAuthorization?: SessionAuthorizationPort | null | undefined;
|
|
95
102
|
authorizationSurface?: SessionAuthorizationSurface | undefined;
|
|
96
103
|
}): Promise<ScheduledTask> {
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
104
|
+
// API parsing fills this default, but pack installers and older internal
|
|
105
|
+
// callers can still invoke the shared validator with the pre-action shape.
|
|
106
|
+
const action = input.payload.action ?? ({ kind: "agent_turn" } as const);
|
|
107
|
+
const knowledgeAction = action.kind === "knowledge_source_sync" ? action : null;
|
|
108
|
+
if (knowledgeAction) {
|
|
109
|
+
await validateKnowledgeSourceSyncAction({
|
|
110
|
+
db: input.db,
|
|
111
|
+
grant: input.grant,
|
|
112
|
+
action: knowledgeAction,
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
const agentConfig = knowledgeAction
|
|
116
|
+
? input.payload.agentConfig
|
|
117
|
+
: await validateScheduledTaskAgentConfig({
|
|
118
|
+
...input,
|
|
119
|
+
workspaceId: input.grant.workspaceId,
|
|
120
|
+
});
|
|
101
121
|
const id = crypto.randomUUID();
|
|
102
122
|
validateScheduledTaskSchedule(input.payload.schedule);
|
|
103
|
-
const target =
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
123
|
+
const target = knowledgeAction
|
|
124
|
+
? null
|
|
125
|
+
: await validateScheduledTaskTarget({
|
|
126
|
+
db: input.db,
|
|
127
|
+
sessionAuthorization: input.sessionAuthorization,
|
|
128
|
+
authorizationSurface: input.authorizationSurface,
|
|
129
|
+
grant: input.grant,
|
|
130
|
+
targetSessionId: input.payload.targetSessionId,
|
|
131
|
+
runMode: input.payload.runMode,
|
|
132
|
+
variableSetId: input.payload.variableSetId,
|
|
133
|
+
rigId: input.payload.rigId,
|
|
134
|
+
agentConfig,
|
|
135
|
+
});
|
|
136
|
+
if (!knowledgeAction && input.payload.variableSetId) {
|
|
115
137
|
await validateVariableSetAttachment(
|
|
116
138
|
{ settings: input.settings, db: input.db },
|
|
117
139
|
input.grant,
|
|
@@ -124,22 +146,36 @@ export async function createValidatedScheduledTask(input: {
|
|
|
124
146
|
// (at dispatch), so validate only that the id names a rig in the workspace —
|
|
125
147
|
// NOT that it has an active version now (that is a fire-time concern). RLS
|
|
126
148
|
// makes a cross-workspace id indistinguishable from missing → both 422.
|
|
127
|
-
if (input.payload.rigId) {
|
|
149
|
+
if (!knowledgeAction && input.payload.rigId) {
|
|
128
150
|
await requireScheduledTaskRig(input.db, input.grant.workspaceId, input.payload.rigId);
|
|
129
151
|
}
|
|
130
|
-
const
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
152
|
+
const personalConnectionDelegations = knowledgeAction
|
|
153
|
+
? []
|
|
154
|
+
: await freezePersonalConnectionDelegations({
|
|
155
|
+
db: input.db,
|
|
156
|
+
workspaceId: input.grant.workspaceId,
|
|
157
|
+
settings: await settingsWithEnabledCapabilityMcpServers(
|
|
158
|
+
input.db,
|
|
159
|
+
input.grant.workspaceId,
|
|
160
|
+
input.settings,
|
|
161
|
+
{ subjectId: input.grant.subjectId },
|
|
162
|
+
),
|
|
163
|
+
tools: [...agentConfig.tools, { kind: "mcp", id: "opengeni" }],
|
|
164
|
+
source: personalConnectionDelegationSourceForGrant(input.grant),
|
|
165
|
+
});
|
|
142
166
|
const creationInitiator = creationInitiatorForGrant(input.grant);
|
|
167
|
+
const xaiProviderAccountAuthoritySnapshot: XaiProviderAccountAuthoritySnapshotV1 =
|
|
168
|
+
creationInitiator.actor
|
|
169
|
+
? await getSessionTurnXaiProviderAccountAuthoritySnapshot(
|
|
170
|
+
input.db,
|
|
171
|
+
input.grant.workspaceId,
|
|
172
|
+
creationInitiator.actor.sessionId,
|
|
173
|
+
creationInitiator.actor.turnId,
|
|
174
|
+
)
|
|
175
|
+
: await resolveXaiProviderAccountAuthoritySnapshotForAcceptance(input.db, {
|
|
176
|
+
workspaceId: input.grant.workspaceId,
|
|
177
|
+
subjectId: input.grant.subjectId,
|
|
178
|
+
});
|
|
143
179
|
return await createScheduledTask(input.db, {
|
|
144
180
|
id,
|
|
145
181
|
accountId: input.grant.accountId,
|
|
@@ -150,11 +186,13 @@ export async function createValidatedScheduledTask(input: {
|
|
|
150
186
|
temporalScheduleId: scheduledTaskTemporalScheduleId(id),
|
|
151
187
|
runMode: input.payload.runMode,
|
|
152
188
|
overlapPolicy: input.payload.overlapPolicy,
|
|
189
|
+
action,
|
|
153
190
|
agentConfig,
|
|
154
191
|
...(creationInitiator.initiator ? { createdBy: creationInitiator.initiator } : {}),
|
|
155
192
|
...(creationInitiator.context ? { createdByContext: creationInitiator.context } : {}),
|
|
156
193
|
createdByActor: creationInitiator.actor ?? null,
|
|
157
194
|
personalConnectionDelegations,
|
|
195
|
+
xaiProviderAccountAuthoritySnapshot,
|
|
158
196
|
targetSessionId: target?.id ?? null,
|
|
159
197
|
variableSetId: input.payload.variableSetId ?? null,
|
|
160
198
|
rigId: input.payload.rigId ?? null,
|
|
@@ -301,6 +339,50 @@ export async function validatedScheduledTaskUpdate(input: {
|
|
|
301
339
|
authorizationSurface?: SessionAuthorizationSurface | undefined;
|
|
302
340
|
}): Promise<UpdateScheduledTaskInput> {
|
|
303
341
|
const update: UpdateScheduledTaskInput = {};
|
|
342
|
+
const existingKnowledge = input.existing.action.kind === "knowledge_source_sync";
|
|
343
|
+
if (input.payload.action && input.payload.action.kind !== input.existing.action.kind) {
|
|
344
|
+
throw new HTTPException(409, {
|
|
345
|
+
message: "scheduled task action kind is immutable; create a new schedule",
|
|
346
|
+
});
|
|
347
|
+
}
|
|
348
|
+
if (existingKnowledge) {
|
|
349
|
+
if (
|
|
350
|
+
input.payload.agentConfig !== undefined ||
|
|
351
|
+
input.payload.runMode !== undefined ||
|
|
352
|
+
input.payload.targetSessionId !== undefined ||
|
|
353
|
+
input.payload.variableSetId !== undefined ||
|
|
354
|
+
input.payload.rigId !== undefined
|
|
355
|
+
) {
|
|
356
|
+
throw new HTTPException(422, {
|
|
357
|
+
message: "knowledge source schedules do not accept agent/session configuration",
|
|
358
|
+
});
|
|
359
|
+
}
|
|
360
|
+
if (input.payload.overlapPolicy === "allow_concurrent") {
|
|
361
|
+
throw new HTTPException(422, {
|
|
362
|
+
message: "knowledge source schedules require skip or buffer_one overlap",
|
|
363
|
+
});
|
|
364
|
+
}
|
|
365
|
+
if (input.payload.action?.kind === "knowledge_source_sync") {
|
|
366
|
+
await validateKnowledgeSourceSyncAction({
|
|
367
|
+
db: input.db,
|
|
368
|
+
grant: input.grant,
|
|
369
|
+
action: input.payload.action,
|
|
370
|
+
});
|
|
371
|
+
update.action = input.payload.action;
|
|
372
|
+
}
|
|
373
|
+
if (input.payload.name !== undefined)
|
|
374
|
+
update.name = trimmedScheduledTaskName(input.payload.name);
|
|
375
|
+
if (input.payload.status !== undefined) update.status = input.payload.status;
|
|
376
|
+
if (input.payload.schedule !== undefined) {
|
|
377
|
+
validateScheduledTaskSchedule(input.payload.schedule);
|
|
378
|
+
update.schedule = input.payload.schedule;
|
|
379
|
+
}
|
|
380
|
+
if (input.payload.overlapPolicy !== undefined) {
|
|
381
|
+
update.overlapPolicy = input.payload.overlapPolicy;
|
|
382
|
+
}
|
|
383
|
+
if (input.payload.metadata !== undefined) update.metadata = input.payload.metadata;
|
|
384
|
+
return update;
|
|
385
|
+
}
|
|
304
386
|
const existingTarget = input.existing.targetSessionId;
|
|
305
387
|
const nextRunMode = input.payload.runMode ?? input.existing.runMode;
|
|
306
388
|
const nextTargetSessionId =
|
|
@@ -412,6 +494,7 @@ export async function validatedScheduledTaskUpdate(input: {
|
|
|
412
494
|
input.db,
|
|
413
495
|
input.existing.workspaceId,
|
|
414
496
|
input.settings,
|
|
497
|
+
{ subjectId: input.grant.subjectId },
|
|
415
498
|
);
|
|
416
499
|
const personalConnectionDelegations = await freezePersonalConnectionDelegations({
|
|
417
500
|
db: input.db,
|
|
@@ -517,6 +600,7 @@ export async function restoreScheduledTask(
|
|
|
517
600
|
schedule: task.schedule,
|
|
518
601
|
runMode: task.runMode,
|
|
519
602
|
overlapPolicy: task.overlapPolicy,
|
|
603
|
+
action: task.action,
|
|
520
604
|
agentConfig: task.agentConfig,
|
|
521
605
|
personalConnectionDelegations: previous.personalConnectionDelegations,
|
|
522
606
|
...(task.runMode === "existing_session"
|
|
@@ -528,6 +612,63 @@ export async function restoreScheduledTask(
|
|
|
528
612
|
});
|
|
529
613
|
}
|
|
530
614
|
|
|
615
|
+
async function validateKnowledgeSourceSyncAction(input: {
|
|
616
|
+
db: Database;
|
|
617
|
+
grant: AccessGrant;
|
|
618
|
+
action: KnowledgeSourceSyncAction;
|
|
619
|
+
}): Promise<void> {
|
|
620
|
+
if (input.action.initiatingSubjectId !== input.grant.subjectId) {
|
|
621
|
+
throw new HTTPException(403, {
|
|
622
|
+
message: "knowledge source sync must preserve the exact initiating subject",
|
|
623
|
+
});
|
|
624
|
+
}
|
|
625
|
+
if (input.action.connection.ownerSubjectId !== input.grant.subjectId) {
|
|
626
|
+
throw new HTTPException(403, {
|
|
627
|
+
message: "knowledge source connection must belong to the initiating subject",
|
|
628
|
+
});
|
|
629
|
+
}
|
|
630
|
+
const resolved = await getKnowledgeSourceForSyncAuthority(input.db, {
|
|
631
|
+
accountId: input.grant.accountId,
|
|
632
|
+
workspaceId: input.grant.workspaceId,
|
|
633
|
+
sourceId: input.action.sourceId,
|
|
634
|
+
initiatingSubjectId: input.grant.subjectId,
|
|
635
|
+
});
|
|
636
|
+
if (!resolved || resolved.source.lifecycleState !== "active") {
|
|
637
|
+
throw new HTTPException(404, { message: "knowledge source not found" });
|
|
638
|
+
}
|
|
639
|
+
if (
|
|
640
|
+
resolved.source.syncGeneration !== input.action.sourceGeneration ||
|
|
641
|
+
resolved.source.lifecycleGeneration !== input.action.sourceLifecycleGeneration ||
|
|
642
|
+
scopedKnowledgeScopeKey(resolved.source.scope) !==
|
|
643
|
+
scopedKnowledgeScopeKey(input.action.destination)
|
|
644
|
+
) {
|
|
645
|
+
throw new HTTPException(409, {
|
|
646
|
+
message: "knowledge source authority or generation changed",
|
|
647
|
+
});
|
|
648
|
+
}
|
|
649
|
+
const connection = await getConnectionMetadata(
|
|
650
|
+
input.db,
|
|
651
|
+
input.grant.workspaceId,
|
|
652
|
+
input.action.connection.connectionId,
|
|
653
|
+
input.grant.subjectId,
|
|
654
|
+
);
|
|
655
|
+
if (
|
|
656
|
+
!connection ||
|
|
657
|
+
connection.accountId !== input.grant.accountId ||
|
|
658
|
+
connection.workspaceId !== input.grant.workspaceId ||
|
|
659
|
+
connection.subjectId !== input.action.connection.ownerSubjectId ||
|
|
660
|
+
connection.version !== input.action.connection.connectionVersion ||
|
|
661
|
+
connection.providerDomain.toLowerCase() !==
|
|
662
|
+
input.action.connection.providerDomain.toLowerCase() ||
|
|
663
|
+
connection.kind !== input.action.connection.kind ||
|
|
664
|
+
connection.status !== "active"
|
|
665
|
+
) {
|
|
666
|
+
throw new HTTPException(409, {
|
|
667
|
+
message: "knowledge source connection authority changed or requires reconnect",
|
|
668
|
+
});
|
|
669
|
+
}
|
|
670
|
+
}
|
|
671
|
+
|
|
531
672
|
export class ScheduledTaskSyncError extends Error {
|
|
532
673
|
readonly persistenceRestored: boolean;
|
|
533
674
|
|
|
@@ -647,6 +788,7 @@ async function validateScheduledTaskAgentConfig(input: {
|
|
|
647
788
|
input.db,
|
|
648
789
|
input.workspaceId,
|
|
649
790
|
input.settings,
|
|
791
|
+
{ subjectId: input.grant.subjectId },
|
|
650
792
|
);
|
|
651
793
|
const requestedTools = validateToolRefs(input.payload.agentConfig.tools ?? [], runtimeSettings);
|
|
652
794
|
// A task whose creator did not choose tools gets the workspace's enabled
|
|
@@ -169,8 +169,11 @@ export async function workspaceSessionToolPolicyServerIds(
|
|
|
169
169
|
db: Database,
|
|
170
170
|
workspaceId: string,
|
|
171
171
|
settings: Settings,
|
|
172
|
+
subjectId?: string,
|
|
172
173
|
): Promise<string[]> {
|
|
173
|
-
const runtimeSettings = await settingsWithEnabledCapabilityMcpServers(db, workspaceId, settings
|
|
174
|
+
const runtimeSettings = await settingsWithEnabledCapabilityMcpServers(db, workspaceId, settings, {
|
|
175
|
+
...(subjectId ? { subjectId } : {}),
|
|
176
|
+
});
|
|
174
177
|
return sortedIds(runtimeSettings.mcpServers.map((server) => server.id));
|
|
175
178
|
}
|
|
176
179
|
|
|
@@ -179,8 +182,11 @@ export async function workspaceSessionToolPolicyDefaultServerIds(
|
|
|
179
182
|
db: Database,
|
|
180
183
|
workspaceId: string,
|
|
181
184
|
settings: Settings,
|
|
185
|
+
subjectId?: string,
|
|
182
186
|
): Promise<string[]> {
|
|
183
|
-
const runtimeSettings = await settingsWithEnabledCapabilityMcpServers(db, workspaceId, settings
|
|
187
|
+
const runtimeSettings = await settingsWithEnabledCapabilityMcpServers(db, workspaceId, settings, {
|
|
188
|
+
...(subjectId ? { subjectId } : {}),
|
|
189
|
+
});
|
|
184
190
|
return defaultSessionMcpServerIds(runtimeSettings.mcpServers);
|
|
185
191
|
}
|
|
186
192
|
|