Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
56 commits
Select commit Hold shift + click to select a range
96fe940
upd
dimaMachina Feb 4, 2026
c8fc0b8
upd
dimaMachina Feb 4, 2026
207666f
upd
dimaMachina Feb 4, 2026
6bef309
upd
dimaMachina Feb 4, 2026
f9a0c49
upd
dimaMachina Feb 4, 2026
d8821b8
upd
dimaMachina Feb 4, 2026
f5de369
upd
dimaMachina Feb 4, 2026
2232e41
typecheck is ok now
dimaMachina Feb 4, 2026
68471b6
wip custom headers dialog
dimaMachina Feb 4, 2026
e9d6af3
upddd
dimaMachina Feb 4, 2026
9a282d1
upddd
dimaMachina Feb 4, 2026
39ccf59
upddd
dimaMachina Feb 4, 2026
c572bd7
brand color
dimaMachina Feb 4, 2026
b68a294
upd
dimaMachina Feb 4, 2026
c1c46eb
validate on mount
dimaMachina Feb 4, 2026
7ec3606
polish
dimaMachina Feb 4, 2026
b703149
fix lint
dimaMachina Feb 4, 2026
1f39d29
format
dimaMachina Feb 4, 2026
3063376
review fixes
dimaMachina Feb 4, 2026
fdbe15d
feat(pr-review): add clickable links to inline comments in review sum…
nick-inkeep Feb 4, 2026
a736a90
Revert "fix(agents-core): remove refine call in resource id schema (#…
dimaMachina Feb 4, 2026
beb813c
fix: pin claude-code-action to SDK 0.2.25 to avoid AJV crash (#1716)
nick-inkeep Feb 4, 2026
f7c705c
bump zod to latest 4.3.6 and fix `.omit() cannot be used on object sc…
dimaMachina Feb 4, 2026
fc8e1d6
Version Packages (#1701)
github-actions[bot] Feb 4, 2026
96fbe28
feat: add Vercel production deployment workflow (#1679)
amikofalvy Feb 4, 2026
af84da3
remove cursor specific rules in favor or skills and agents.md (#1717)
amikofalvy Feb 4, 2026
0b4d47c
chore: trigger release for all packages (#1718)
amikofalvy Feb 5, 2026
0398815
Version Packages (#1719)
github-actions[bot] Feb 5, 2026
9cca3ea
updating release action (#1720)
amikofalvy Feb 5, 2026
11f869f
fix: add --scope flag to Vercel CLI commands in production workflow (…
amikofalvy Feb 5, 2026
c04dcda
fix: use staged production deployments in Vercel workflow (#1722)
amikofalvy Feb 5, 2026
756adf7
fix: add --archive=tgz to prevent CLI hanging during deploy (#1724)
amikofalvy Feb 5, 2026
eb3c969
fix: use repository variables instead of secrets for non-sensitive va…
amikofalvy Feb 5, 2026
8031b8e
fix: simplify Vercel workflow to use direct production deploy (#1725)
amikofalvy Feb 5, 2026
0f87f6a
fix: use secrets for VERCEL_ORG_ID (#1726)
amikofalvy Feb 5, 2026
372bab8
apply review
dimaMachina Feb 5, 2026
6f8f73d
Merge branch 'main' into prd-4917
dimaMachina Feb 5, 2026
45d6053
pnpm i
dimaMachina Feb 5, 2026
0f8b1d3
polish
dimaMachina Feb 5, 2026
1804941
Merge branch 'main' into prd-4917
dimaMachina Feb 5, 2026
67702a8
format
dimaMachina Feb 5, 2026
6eac16a
Rename convert-json-schema-to-zod.ts to convert-json-schema-to-zod.te…
dimaMachina Feb 5, 2026
0a1c828
add tests
dimaMachina Feb 5, 2026
8087665
wip tests
dimaMachina Feb 5, 2026
91b79a0
wip tests
dimaMachina Feb 5, 2026
2a071c1
wip tests
dimaMachina Feb 5, 2026
5f33745
upd
dimaMachina Feb 5, 2026
3a52f97
upd
dimaMachina Feb 5, 2026
f9a57a2
upd
dimaMachina Feb 5, 2026
9d9a440
upd
dimaMachina Feb 5, 2026
a29ccd5
polish error names
dimaMachina Feb 5, 2026
92e2946
upd
dimaMachina Feb 5, 2026
11260e1
Merge branch 'main' into prd-4917
dimaMachina Feb 5, 2026
b9452b8
move to __tests__
dimaMachina Feb 5, 2026
0a98b3f
format
dimaMachina Feb 5, 2026
95facf0
chore: add changeset for custom headers validation feature
github-actions[bot] Feb 5, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .changeset/custom-headers-validation.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
"@inkeep/agents-manage-ui": patch
"@inkeep/agents-core": patch
---

Add custom headers validation in playground chat. Users are now notified when custom headers are invalid or required based on the agent's headers schema configuration.
2 changes: 1 addition & 1 deletion agents-api/src/domains/run/agents/Agent.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import {
getLedgerArtifacts,
isGithubWorkAppTool,
JsonTransformer,
jsonSchemaToZod,
listTaskIdsByContextId,
MCPServerType,
type MCPToolConfig,
Expand Down Expand Up @@ -69,7 +70,6 @@ import { toolApprovalUiBus } from '../services/ToolApprovalUiBus';
import type { SandboxConfig } from '../types/executionContext';
import { generateToolId } from '../utils/agent-operations';
import { ArtifactCreateSchema, ArtifactReferenceSchema } from '../utils/artifact-component-schema';
import { jsonSchemaToZod } from '../utils/data-component-schema';
import { withJsonPostProcessing } from '../utils/json-postprocessor';
import { getCompressionConfigForModel } from '../utils/model-context-utils';
import type { StreamHelper } from '../utils/stream-helpers';
Expand Down
10 changes: 7 additions & 3 deletions agents-api/src/domains/run/agents/versions/v1/Phase1Config.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
import type { Artifact, McpTool } from '@inkeep/agents-core';
import { V1_BREAKDOWN_SCHEMA } from '@inkeep/agents-core';
import { convertZodToJsonSchema, isZodSchema } from '@inkeep/agents-core/utils/schema-conversion';
import {
type Artifact,
convertZodToJsonSchema,
isZodSchema,
type McpTool,
V1_BREAKDOWN_SCHEMA,
} from '@inkeep/agents-core';
import systemPromptTemplate from '../../../../../../templates/v1/phase1/system-prompt.xml?raw';
import thinkingPreparationTemplate from '../../../../../../templates/v1/phase1/thinking-preparation.xml?raw';
import toolTemplate from '../../../../../../templates/v1/phase1/tool.xml?raw';
Expand Down
10 changes: 5 additions & 5 deletions agents-api/src/domains/run/utils/artifact-component-schema.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import { z } from '@hono/zod-openapi';
import type {
ArtifactComponentApiInsert,
ArtifactComponentApiSelect,
DataComponentInsert,
import {
type ArtifactComponentApiInsert,
type ArtifactComponentApiSelect,
type DataComponentInsert,
jsonSchemaToZod,
} from '@inkeep/agents-core';
import { getLogger } from '../../../logger';
import { jsonSchemaToZod } from './data-component-schema';
import { SchemaProcessor } from './SchemaProcessor';
import type { ExtendedJsonSchema } from './schema-validation';

Expand Down
5 changes: 0 additions & 5 deletions agents-api/src/domains/run/utils/data-component-schema.ts

This file was deleted.

89 changes: 0 additions & 89 deletions agents-api/src/domains/run/utils/schema-validation.ts
Original file line number Diff line number Diff line change
@@ -1,29 +1,3 @@
import { z } from '@hono/zod-openapi';
import { convertZodToJsonSchemaWithPreview } from '@inkeep/agents-core/utils/schema-conversion';
import Ajv from 'ajv';
import { getLogger } from '../../../logger';

const logger = getLogger('SchemaValidation');
const ajv = new Ajv({ allErrors: true, strict: false });

// Cache for compiled AJV validators to improve performance
const validatorCache = new Map<string, any>();

/**
* Clear the validator cache to free memory
* Useful for testing or when memory usage becomes a concern
*/
export function clearValidatorCache(): void {
validatorCache.clear();
}

/**
* Get the current cache size for monitoring
*/
export function getValidatorCacheSize(): number {
return validatorCache.size;
}

/**
* Extended JSON Schema that includes preview field indicators
*/
Expand All @@ -41,69 +15,6 @@ export interface ExtendedJsonSchemaProperty {
[key: string]: any;
}

/**
* Validate that a schema is valid (either JSON Schema or Zod)
* Following the same pattern as context validation
*/
export function validateComponentSchema(
schema: any,
componentName: string
): {
isValid: boolean;
error?: string;
validatedSchema?: ExtendedJsonSchema;
} {
try {
// Check if it's a Zod schema
if (schema instanceof z.ZodType) {
// Convert Zod to JSON Schema with preview metadata
const jsonSchema = convertZodToJsonSchemaWithPreview(schema);
return {
isValid: true,
validatedSchema: jsonSchema as ExtendedJsonSchema,
};
}

// Check if it's a JSON Schema
if (!schema || typeof schema !== 'object' || Array.isArray(schema)) {
return {
isValid: false,
error: 'Schema must be a valid JSON Schema object or Zod schema',
};
}

// Create a cache key based on the schema content
const schemaKey = JSON.stringify(schema);

// Check if we already have a compiled validator for this schema
let validator = validatorCache.get(schemaKey);
if (!validator) {
// Compile and cache the validator
validator = ajv.compile(schema);
validatorCache.set(schemaKey, validator);
}

// If it compiled successfully, it's a valid JSON Schema
return {
isValid: true,
validatedSchema: schema as ExtendedJsonSchema,
};
} catch (error) {
logger.error(
{
componentName,
error: error instanceof Error ? error.message : 'Unknown error',
},
'Invalid component schema'
);

return {
isValid: false,
error: error instanceof Error ? error.message : 'Invalid JSON Schema',
};
}
}

/**
* Extract preview fields from a schema (fields marked with inPreview: true)
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -315,7 +315,7 @@ export const Agent: FC<AgentProps> = ({
};
clearSelection();
markUnsaved();
commandManager.execute(new AddNodeCommand(newNode as Node));
commandManager.execute(new AddNodeCommand(newNode));
// Wait for sidebar to open (350ms for CSS transition) then center the node
setTimeout(() => {
fitView({
Expand Down
3 changes: 2 additions & 1 deletion agents-manage-ui/src/app/layout.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import { ThemeProvider } from 'next-themes';
import { NuqsAdapter } from 'nuqs/adapters/next/app';
import { QueryProvider } from '@/components/providers/query-provider';
import { Toaster } from '@/components/ui/sonner';
import { INKEEP_BRAND_COLOR } from '@/constants/theme';
import { AuthClientProvider } from '@/contexts/auth-client';
import { PostHogProvider } from '@/contexts/posthog';
import { RuntimeConfigProvider } from '@/contexts/runtime-config';
Expand Down Expand Up @@ -44,7 +45,7 @@ export const metadata: Metadata = {
title: APP_NAME,
},
other: {
'msapplication-TileColor': '#69a3ff',
'msapplication-TileColor': INKEEP_BRAND_COLOR,
},
twitter: {
creator: process.env.METADATA_TWITTER_CREATOR || '@inkeep',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,7 @@ interface CollisionAlgorithmOptions {
margin?: number;
}

interface CollisionAlgorithm {
(nodes: Node[], options?: CollisionAlgorithmOptions): Node[];
}
type CollisionAlgorithm = (nodes: Node[], options?: CollisionAlgorithmOptions) => Node[];

interface Box {
x: number;
Expand Down
12 changes: 6 additions & 6 deletions agents-manage-ui/src/components/agent/copilot/copilot-chat.tsx
Original file line number Diff line number Diff line change
@@ -1,16 +1,17 @@
'use client';

import { InkeepSidebarChat } from '@inkeep/agents-ui';
import type { InkeepCallbackEvent } from '@inkeep/agents-ui/types';
import { Loader2, RefreshCw } from 'lucide-react';
import { useEffect, useState } from 'react';
import { toast } from 'sonner';
import { Button } from '@/components/ui/button';
import { INKEEP_BRAND_COLOR } from '@/constants/theme';
import { useCopilotContext } from '@/contexts/copilot';
import { useRuntimeConfig } from '@/contexts/runtime-config';
import { useCopilotToken } from '@/hooks/use-copilot-token';
import { useOAuthLogin } from '@/hooks/use-oauth-login';
import { sentry } from '@/lib/sentry';
import { css } from '@/lib/utils';
import { generateId } from '@/lib/utils/id-utils';
import { IkpMessage } from './message-parts/message';

Expand All @@ -21,7 +22,7 @@ interface CopilotChatProps {
refreshAgentGraph: (options?: { fetchTools?: boolean }) => Promise<void>;
}

const styleOverrides = `
const styleOverrides = css`
.ikp-markdown-code {
background-color: var(--ikp-color-gray-100);
color: var(--ikp-color-gray-900);
Expand Down Expand Up @@ -147,7 +148,7 @@ export function CopilotChat({ agentId, tenantId, projectId, refreshAgentGraph }:
}}
position="left"
baseSettings={{
onEvent: async (event: InkeepCallbackEvent) => {
async onEvent(event) {
if (event.eventName === 'user_message_submitted') {
setIsStreaming(true);
}
Expand All @@ -165,13 +166,12 @@ export function CopilotChat({ agentId, tenantId, projectId, refreshAgentGraph }:
});
}
},
primaryBrandColor: '#3784ff',
primaryBrandColor: INKEEP_BRAND_COLOR,
colorMode: {
sync: {
target: document.documentElement,
attributes: ['class'],
isDarkMode: (attributes: Record<string, string | null>) =>
!!attributes?.class?.includes('dark'),
isDarkMode: (attributes) => !!attributes?.class?.includes('dark'),
},
},
theme: {
Expand Down
Loading
Loading