mirror of
https://github.com/stablyai/orca.git
synced 2026-10-08 08:02:32 +00:00
* Add native chat skill and command picker with host-aware discovery Adds a unified, keyboard-first skill and command picker to native chat that: - Uses agent-native invocation syntax (slash for Claude/OpenClaude/Grok, dollar for Codex) - Discovers skills only on the pane's execution host (local, WSL, SSH-unavailable, or runtime) - Groups or separates commands and skills per agent configuration - Deduplicates by canonical path but preserves visibility through all contributing roots - Handles IME composition, loading states, and errors without claiming PTY-level control - Records picker telemetry (open, item accepted, send classification, discovery outcomes) - Extends shared agent profiles to define per-agent skill grammars and source ownership * Remove obsolete reference and design documentation Clean up stale design specs, implementation plans, and investigation notes from docs/reference/. These documents predate the current implementation and are no longer actively maintained or referenced by the codebase. * Extract shared skill discovery utilities and add skill invocation envelo - Move skill comparison and source classification to shared module for native/WSL reuse - Extract display text sanitization to prevent control/zero-width character spoofing - Add native-chat command envelope parser and surfacer for skill invocations - Extend discovery timeout backstop to account for WSL metadata read sequence * Localize skill picker UI for Spanish, Japanese, Korean, Chinese Translate skill picker UI strings including commands, skills, loading states, error messages, and scope labels for the new skill picker feature across four language locales. * Fix skill picker bugs and improve code robustness - Fix i18n plural handling: rename `count` to `sourceCount` to prevent unintended plural-key resolution in localized strings - Fix skill discovery array mutations: copy `root.providers` to prevent bugs during dedup merge - Fix image attachments being silently dropped when message text starts with /skill or agent prefix - Extract `quoteBashString` utility for WSL command code reuse across builders - Add line-separator safety characters (0x2028/0x2029) to skill display filter - Remove stale doc reference links and clarify inline comments * Add reference docs for git compatibility and headless Linux server setup Track previously untracked operational guides in `docs/reference/` that explain Git binary compatibility requirements across host types and how to run `orca serve` on headless Linux. Update AGENTS.md and README.md to link to these references.
172 lines
6.4 KiB
TypeScript
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[]
|
|
]
|