Merge data navigator and manipulator agents (#15761)

Merge data manipulator and navigator agents
This commit is contained in:
Félix Malfait
2025-11-13 15:25:52 +01:00
committed by GitHub
parent 9bbe0e7f8e
commit f6ed1e8295
14 changed files with 161 additions and 104 deletions
@@ -169,7 +169,7 @@ export class AgentExecutionService implements AgentExecutionContext {
}
}
private async getContextForSystemPrompt(
async getContextForSystemPrompt(
workspace: WorkspaceEntity,
recordIdsByObjectMetadataNameSingular: RecordIdsByObjectMetadataNameSingularType,
userWorkspaceId: string,
@@ -164,6 +164,7 @@ export class AgentStreamingService {
state: 'routed',
debug: {
routingTimeMs: routingTime,
contextBuildTimeMs: timings.contextBuildTimeMs,
agentExecutionStartTimeMs: Date.now() - startTime,
selectedAgentId: agent.id,
selectedAgentLabel: agent.label,
@@ -0,0 +1,39 @@
import { isWorkflowRelatedObject } from 'src/engine/metadata-modules/agent/utils/is-workflow-related-object.util';
import { type ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity';
import { STANDARD_OBJECT_IDS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-object-ids';
describe('isWorkflowRelatedObject', () => {
it('should return true for workflow-related objects', () => {
expect(
isWorkflowRelatedObject({
standardId: STANDARD_OBJECT_IDS.workflow,
} as ObjectMetadataEntity),
).toBe(true);
expect(
isWorkflowRelatedObject({
standardId: STANDARD_OBJECT_IDS.workflowRun,
} as ObjectMetadataEntity),
).toBe(true);
expect(
isWorkflowRelatedObject({
standardId: STANDARD_OBJECT_IDS.workflowVersion,
} as ObjectMetadataEntity),
).toBe(true);
});
it('should return false for non-workflow objects', () => {
expect(
isWorkflowRelatedObject({
standardId: STANDARD_OBJECT_IDS.person,
} as ObjectMetadataEntity),
).toBe(false);
expect(
isWorkflowRelatedObject({
standardId: null,
} as ObjectMetadataEntity),
).toBe(false);
});
});
@@ -0,0 +1,21 @@
import { type ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity';
import { STANDARD_OBJECT_IDS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-object-ids';
// All workflow-related standard object IDs that should be filtered out from agent access
const WORKFLOW_STANDARD_OBJECT_IDS = [
STANDARD_OBJECT_IDS.workflow,
STANDARD_OBJECT_IDS.workflowRun,
STANDARD_OBJECT_IDS.workflowVersion,
STANDARD_OBJECT_IDS.workflowAutomatedTrigger,
] as const;
export const isWorkflowRelatedObject = (
objectMetadata: ObjectMetadataEntity,
): boolean => {
return (
objectMetadata.standardId !== null &&
WORKFLOW_STANDARD_OBJECT_IDS.includes(
objectMetadata.standardId as (typeof WORKFLOW_STANDARD_OBJECT_IDS)[number],
)
);
};
@@ -1,14 +1,21 @@
import { type ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity';
import { STANDARD_OBJECT_IDS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-object-ids';
const WORKFLOW_OBJECT_NAMES = ['workflowVersion', 'workflowRun'];
// All workflow-related standard object IDs that should be filtered out from agent access
const WORKFLOW_STANDARD_OBJECT_IDS = [
STANDARD_OBJECT_IDS.workflow,
STANDARD_OBJECT_IDS.workflowRun,
STANDARD_OBJECT_IDS.workflowVersion,
STANDARD_OBJECT_IDS.workflowAutomatedTrigger,
] as const;
export const isWorkflowRunObject = (
export const isWorkflowRelatedObject = (
objectMetadata: ObjectMetadataEntity,
): boolean => {
if (objectMetadata.standardId) {
return objectMetadata.standardId === STANDARD_OBJECT_IDS.workflowRun;
}
return WORKFLOW_OBJECT_NAMES.includes(objectMetadata.nameSingular);
return (
objectMetadata.standardId !== null &&
WORKFLOW_STANDARD_OBJECT_IDS.includes(
objectMetadata.standardId as (typeof WORKFLOW_STANDARD_OBJECT_IDS)[number],
)
);
};