3216b634a3
⚠️ **AI-generated PR — not ready for review** ⚠️ cc @FelixMalfait --- ## Changes ### System prompt improvements - Explicit skill-before-tools workflow to prevent the model from calling tools without loading the matching skill first - Data efficiency guidance (default small limits, use filters) - Pluralized `load_skill` → `load_skills` for consistency with `load_tools` ### Token usage reduction - Output serialization layer: strips null/undefined/empty values from tool results - Lowered default `find_*` limit from 100 → 10, max from 1000 → 100 ### System object tool generation - System objects (calendar events, messages, etc.) now generate AI tools - Only workflow-related and favorite-related objects are excluded ### Context window display fix - **Bug**: UI compared cumulative tokens (sum of all turns) against single-request context window → showed 100% after a few turns - **Fix**: Track `conversationSize` (last step's `inputTokens`) which represents the actual conversation history size sent to the model - New `conversationSize` column on thread entity with migration ### Workspace AI instructions - Support for custom workspace-level AI instructions --------- Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com>
50 lines
1.2 KiB
TypeScript
50 lines
1.2 KiB
TypeScript
import { createState } from 'twenty-ui/utilities';
|
|
import {
|
|
type Application,
|
|
type Role,
|
|
type Workspace,
|
|
} from '~/generated/graphql';
|
|
|
|
export type CurrentWorkspace = Pick<
|
|
Workspace,
|
|
| 'id'
|
|
| 'inviteHash'
|
|
| 'logo'
|
|
| 'displayName'
|
|
| 'allowImpersonation'
|
|
| 'featureFlags'
|
|
| 'activationStatus'
|
|
| 'billingSubscriptions'
|
|
| 'billingEntitlements'
|
|
| 'currentBillingSubscription'
|
|
| 'workspaceMembersCount'
|
|
| 'isPublicInviteLinkEnabled'
|
|
| 'isGoogleAuthEnabled'
|
|
| 'isGoogleAuthBypassEnabled'
|
|
| 'isMicrosoftAuthEnabled'
|
|
| 'isMicrosoftAuthBypassEnabled'
|
|
| 'isPasswordAuthEnabled'
|
|
| 'isPasswordAuthBypassEnabled'
|
|
| 'isCustomDomainEnabled'
|
|
| 'hasValidEnterpriseKey'
|
|
| 'subdomain'
|
|
| 'customDomain'
|
|
| 'workspaceUrls'
|
|
| 'metadataVersion'
|
|
| 'isTwoFactorAuthenticationEnforced'
|
|
| 'trashRetentionDays'
|
|
| 'eventLogRetentionDays'
|
|
| 'fastModel'
|
|
| 'smartModel'
|
|
| 'aiAdditionalInstructions'
|
|
| 'editableProfileFields'
|
|
> & {
|
|
defaultRole?: Omit<Role, 'workspaceMembers' | 'agents' | 'apiKeys'> | null;
|
|
workspaceCustomApplication: Pick<Application, 'id'> | null;
|
|
};
|
|
|
|
export const currentWorkspaceState = createState<CurrentWorkspace | null>({
|
|
key: 'currentWorkspaceState',
|
|
defaultValue: null,
|
|
});
|