{{ config.companyName }}

{{ config.appName }}

Preparing your environment ...

NetSuite Connection Required

{{ authError }}

{{ config.companyName }}

{{ config.appName }}

Secure by Design

OAuth PKCE authentication connects directly to your NetSuite account with no credentials stored in the application. Your data visibility is governed entirely by your assigned NetSuite role.

Ask in Plain English

Query live NetSuite data, analyse trends, and surface actionable insights using natural language. No SuiteQL knowledge required — the assistant handles the complexity behind every question.

Deep NetSuite Expertise

Pre-loaded with curated knowledge of NetSuite CRM, sales, manufacturing, and executive reporting. Domain-specific intelligence applies best-practice context to every response.

Tailored to Your Business

Extend the assistant with custom prompt files specific to your processes, terminology, and workflows. Deploy company expertise as a governed knowledge base available to every user.

{{ config.companyName }}

{{ config.appName }}

Session: {{ sessionId ? sessionId.substring(0, 8) + '...' : 'Loading...' }}
NetSuite: {{ netsuiteAuth.accountId }} Not Connected
AI: {{ aiProvider.type }} / {{ aiProvider.model }} Not Configured
Tokens: {{ sessionInputTokens.toLocaleString() }} in / {{ sessionOutputTokens.toLocaleString() }} out ~${{ sessionCostUsd.toFixed(4) }}
Hello {{ netsuiteAuth.currentUser.firstName }}
Conversation

Welcome to {{ config.appName }}

{{ netsuiteAuth.isAuthenticated ? 'Start a conversation or use the prompt library' : 'Please login' }}

You
{{ msg.content }}
{{ formatTime(msg.timestamp) }}
{{ config.agentName }}
{{ item }}
{{ statusMessage || 'Processing...' }}
Completed
{{ msg.introText }}
{{ msg.toolsUsed.join(', ') }}
{{ formatTime(msg.timestamp) }}
{{ statusMessage || 'Agent is thinking...' }}
Try: "Find contact john@example.com" or "Create a contact for Sarah Smith at sarah@company.com"
Last action: {{ lastResponse.action }}
{{ messages.length }} messages in conversation
Rendered Output
{{ cell.type === 'chart' ? cell.chartConfig.title : cell.type }}

{{ config.labels?.settings || 'Settings' }}

Provider: {{ aiProvider.name || aiProvider.type || 'Not configured' }}

Current Model: {{ aiProvider.model || 'Not selected' }}

Choose the AI model for processing requests

Provider and API keys are configured via the config/providers.json file on the server.

{{ config.labels?.conversations || 'Conversations' }}
No conversations yet
{{ conv.title }}
{{ formatConvDate(conv.updatedAt) }} {{ conv.messageCount }} msgs
{{ isEditMode ? 'Edit Item' : (showAddForm ? 'Add Entry' : (config.labels?.promptLibrary || 'Prompt Library')) }}
This feature is enabled but no entries have been defined.
{{ item.label }} {{ item.tier }}
{{ promptLibrarySuccessMessage }}
No groups exist — add a group first.
{{ promptLibraryFormErrors.groupId }}
{{ promptLibraryForm.tier || 'user' }}
{{ promptLibraryFormErrors.label }}
{{ promptLibraryFormErrors.prompt }}
Oops!
{{ errorMessage }}

Fill in parameters

Save Conversation to Prompt Library

{{ saveToPromptModal.error }}
{{ saveToPromptModal.success }}