orca/src/shared/feature-wall-workflows.ts

86 lines
2.6 KiB
TypeScript

import {
FEATURE_WALL_TILES,
isFeatureWallMediaTile,
type FeatureWallMediaTile,
type FeatureWallMediaTileId
} from './feature-wall-tiles'
export type FeatureWallWorkflowId =
| 'tasks'
| 'workspaces'
| 'agents-orchestration'
| 'workbench'
| 'review'
export type FeatureWallWorkflow = {
id: FeatureWallWorkflowId
title: string
meta: string
lede: string
primaryTileId: FeatureWallMediaTileId
relatedTileIds: readonly FeatureWallMediaTileId[]
docsUrl: string
}
export const FEATURE_WALL_WORKFLOWS: readonly FeatureWallWorkflow[] = [
{
id: 'workspaces',
title: 'Workspaces',
meta: 'Isolated work · Context kept together',
lede: 'Orca splits each task into an isolated workspace so agents can run in parallel.',
primaryTileId: 'tile-01',
relatedTileIds: ['tile-10'],
docsUrl: 'https://www.onorca.dev/docs/model/worktrees'
},
{
id: 'tasks',
title: 'Tasks',
meta: 'GitHub · Linear',
lede: 'Start work directly from GitHub or Linear.',
primaryTileId: 'tile-03',
relatedTileIds: [],
docsUrl: 'https://www.onorca.dev/docs/review/linear'
},
{
id: 'agents-orchestration',
title: 'Agents',
meta: 'Agents · Usage · Orca CLI',
lede: 'Run several agents at once, track their progress, and let automation drive Orca when it helps.',
primaryTileId: 'tile-04',
relatedTileIds: ['tile-11', 'tile-09'],
docsUrl: 'https://www.onorca.dev/docs/agents/supported'
},
{
id: 'workbench',
title: 'Workbench',
meta: 'Terminal · Editor · Browser · Files',
lede: 'Bring your terminal setup into Orca, then split panes to keep servers, tests, logs, and agents running side by side.',
primaryTileId: 'tile-02',
relatedTileIds: ['tile-07', 'tile-05', 'tile-12'],
docsUrl: 'https://www.onorca.dev/docs/terminal'
},
{
id: 'review',
title: 'Code Review',
meta: 'Diffs · Comments · PRs',
lede: 'Review what changed, leave focused feedback, and send it back to the agent.',
primaryTileId: 'tile-08',
relatedTileIds: [],
docsUrl: 'https://www.onorca.dev/docs/review/annotate-ai-diff'
}
] as const
export const FEATURE_WALL_WORKFLOW_IDS = FEATURE_WALL_WORKFLOWS.map(
(w) => w.id
) as readonly FeatureWallWorkflowId[]
const TILE_BY_ID = new Map(
FEATURE_WALL_TILES.filter(isFeatureWallMediaTile).map((tile) => [tile.id, tile])
)
export function getFeatureWallMediaTile(id: FeatureWallMediaTileId): FeatureWallMediaTile | null {
return TILE_BY_ID.get(id) ?? null
}
export const DEFAULT_FEATURE_WALL_WORKFLOW_ID: FeatureWallWorkflowId = 'workspaces'