orca/src/shared/feature-interaction-catalog.ts

172 lines
6.4 KiB
TypeScript

export type FeatureInteractionId =
| 'workspace-board'
| 'workspace-agent-sessions'
| 'workspace-board-actions'
| 'cmd-j'
| 'cmd-j-workspace-open'
| 'cmd-j-browser-page-open'
| 'cmd-j-settings-open'
| 'cmd-j-quick-action'
| 'cmd-j-create-workspace'
| 'browser'
| 'browser-tab-created'
| 'tasks'
| 'github-tasks'
| 'gitlab-tasks'
| 'linear-tasks'
| 'jira-tasks'
| 'automations'
| 'automation-created'
| 'automation-run'
| 'browser-annotations'
| 'browser-annotations-sent-to-agent'
| 'browser-grab'
| 'markdown-file-created'
| 'workspace-creation'
| 'agent-browser-setup'
| 'agent-browser-use'
| 'agent-orchestration-setup'
| 'agent-orchestration'
| 'ephemeral-vm-setup'
| 'mobile-emulator-agent-setup'
| 'ai-commit-generation'
| 'ai-pr-generation'
| 'claude-account-switching'
| 'computer-use-setup'
| 'computer-use'
| 'codex-account-switching'
| 'cookie-import'
| 'floating-workspace'
| 'floating-workspace-hidden'
| 'mobile-pairing'
| 'notifications'
| 'ports'
| 'quick-commands'
| 'resource-manager'
| 'review-notes'
| 'ssh'
| 'terminal-pane-split'
| 'terminal-panes'
| 'terminal-tabs'
| 'tab-splits'
| 'usage-tracking'
| 'voice-dictation'
| 'workspace-cleanup'
export type FeatureInteractionDefinition = {
id: FeatureInteractionId
/** The product action that counts as "the user has interacted with this feature." */
interaction: string
}
// Why: these ids become persisted product state; changing them breaks
// feature-discovery interaction tracking.
export const FEATURE_INTERACTIONS = [
{ id: 'workspace-board', interaction: 'workspace board opened' },
{
id: 'workspace-agent-sessions',
interaction: 'workspace agent-session surface opened'
},
{
id: 'workspace-board-actions',
interaction: 'workspace board card, lane, density, or status action used'
},
{ id: 'cmd-j', interaction: 'Cmd+J palette opened' },
{ id: 'cmd-j-workspace-open', interaction: 'workspace opened from Cmd+J' },
{ id: 'cmd-j-browser-page-open', interaction: 'browser page opened from Cmd+J' },
{ id: 'cmd-j-settings-open', interaction: 'settings opened from Cmd+J' },
{ id: 'cmd-j-quick-action', interaction: 'quick action run from Cmd+J' },
{ id: 'cmd-j-create-workspace', interaction: 'workspace creation started from Cmd+J' },
{ id: 'browser', interaction: 'in-app browser opened' },
{ id: 'browser-tab-created', interaction: 'browser tab explicitly created' },
{ id: 'tasks', interaction: 'Tasks page opened' },
{ id: 'github-tasks', interaction: 'GitHub task item workflow used' },
{ id: 'gitlab-tasks', interaction: 'GitLab task item workflow used' },
{ id: 'linear-tasks', interaction: 'Linear task item workflow used' },
{ id: 'jira-tasks', interaction: 'Jira task item workflow used' },
{ id: 'automations', interaction: 'Automations page opened' },
{ id: 'automation-created', interaction: 'automation created' },
{ id: 'automation-run', interaction: 'automation run queued' },
{ id: 'browser-annotations', interaction: 'browser annotation added, copied, or cleared' },
{
id: 'browser-annotations-sent-to-agent',
interaction: 'browser annotations sent to an agent'
},
{ id: 'browser-grab', interaction: 'browser element grab or screenshot used' },
{ id: 'markdown-file-created', interaction: 'untitled markdown file explicitly created' },
{ id: 'workspace-creation', interaction: 'workspace creation flow opened' },
{ id: 'agent-browser-setup', interaction: 'Agent Browser Use setup enabled or opened' },
{ id: 'agent-browser-use', interaction: 'agent browser runtime method used' },
{ id: 'ephemeral-vm-setup', interaction: 'Ephemeral VMs setup opened or scaffold prompt copied' },
{
id: 'agent-orchestration-setup',
interaction: 'Agent Orchestration setup enabled or opened'
},
{ id: 'agent-orchestration', interaction: 'agent orchestration runtime method used' },
{
id: 'mobile-emulator-agent-setup',
interaction: 'Mobile Emulator agent CLI or skill setup opened'
},
{
id: 'ai-commit-generation',
interaction: 'AI commit message generation enabled or used'
},
{ id: 'ai-pr-generation', interaction: 'AI pull request generation used' },
{
id: 'claude-account-switching',
interaction: 'Claude managed account added, selected, reauthenticated, or removed'
},
{
id: 'computer-use-setup',
interaction: 'Computer Use setup or permission flow opened'
},
{ id: 'computer-use', interaction: 'computer-use runtime method used' },
{
id: 'codex-account-switching',
interaction: 'Codex managed account added, selected, reauthenticated, or removed'
},
{ id: 'cookie-import', interaction: 'browser cookies imported or cleared' },
{ id: 'floating-workspace', interaction: 'Floating Workspace opened or configured' },
{
id: 'floating-workspace-hidden',
interaction: 'Floating Workspace explicitly hidden or disabled'
},
{ id: 'mobile-pairing', interaction: 'mobile pairing enabled or QR code generated' },
{ id: 'notifications', interaction: 'desktop notifications enabled or tested' },
{ id: 'ports', interaction: 'Ports popover opened, configured, or port action used' },
{ id: 'quick-commands', interaction: 'terminal quick command created or edited' },
{ id: 'resource-manager', interaction: 'Resource Manager opened or configured' },
{ id: 'review-notes', interaction: 'review note added or sent to an agent' },
{
id: 'ssh',
interaction: 'SSH target added, imported, tested, connected, disconnected, or configured'
},
{
id: 'terminal-pane-split',
interaction: 'terminal pane split from the split-pane command'
},
{
id: 'terminal-panes',
interaction: 'terminal/editor/browser pane created, resized, or merged'
},
{
id: 'terminal-tabs',
interaction: 'workspace tab created, moved, reordered, pinned, renamed, recolored, or closed'
},
{ id: 'tab-splits', interaction: 'workspace tab split into another pane' },
{
id: 'usage-tracking',
interaction: 'Stats & Usage or provider usage details opened or configured'
},
{ id: 'voice-dictation', interaction: 'dictation session started' },
{
id: 'workspace-cleanup',
interaction: 'workspace disk space scan, review, or cleanup action used'
}
] as const satisfies readonly FeatureInteractionDefinition[]
export const FEATURE_INTERACTION_IDS = FEATURE_INTERACTIONS.map((feature) => feature.id) as [
FeatureInteractionId,
...FeatureInteractionId[]
]