// Sample data for the Atlas agent canvas example. Shared by all three ports. Coordinates are CSS px relative to the hub centre.
export const org = { name: " Acme Labs " , initials: " AL " , user: " Sam " } ;
{ id: " atlas " , label: " Atlas " },
{ id: " tasks " , label: " Tasks " },
{ id: " company " , label: " Company " },
{ id: " library " , label: " Library " },
export type TabId = ( typeof tabs)[ number ][ " id " ];
export const composerPlaceholder = " Ask Atlas anything about your company... " ;
export const atlasAgent = {
// ---------------------------------------------------------------- pixel art (own drawing, rects only)
const plantColors : Record < string , string > = {
b: " color-mix(in srgb, var(--warning) 35%, var(--background)) " ,
d: " color-mix(in srgb, var(--success) 60%, var(--background)) " ,
export type Rect = { x : number ; y : number ; w : number ; h : number ; c : string };
function rowsToRects ( rows : string [] ) : Rect [] {
rows . forEach ( ( row , y ) => {
[ ... row] . forEach ( ( ch , x ) => {
const c = plantColors[ch];
if (c) out . push ({ x , y , w: 1 , h: 1 , c });
rects: rowsToRects (plantRows) ,
export const plantHead = {
rects: rowsToRects (plantRows . slice ( 0 , 9 ))
. map ( ( r ) => ( { ... r , x: r . x - 2 } ))
. filter ( ( r ) => r . x >= 0 && r . x < 11 ) ,
/** Deterministic pixel skyline used for the library covers (own scenes, no external art). */
function scene ( seed : number , sky : [ string , string ], accent : string ) : Rect [] {
s = (s * 1664525 + 1013904223 ) >>> 0 ;
{ x: 0 , y: 0 , w: 80 , h: 30 , c: sky[ 0 ] } ,
{ x: 0 , y: 30 , w: 80 , h: 30 , c: sky[ 1 ] } ,
for ( let i = 0 ; i < 3 ; i ++ )
x: Math . floor ( rnd () * 60 ) ,
y: 6 + Math . floor ( rnd () * 14 ) ,
w: 12 + Math . floor ( rnd () * 10 ) ,
c: " color-mix(in srgb, var(--foreground) 70%, var(--card)) " ,
const w = 8 + Math . floor ( rnd () * 8 );
const h = 14 + Math . floor ( rnd () * 26 );
c: " color-mix(in srgb, var(--background) 80%, var(--card)) " ,
for ( let wy = 60 - h + 3 ; wy < 57 ; wy += 5 )
for ( let wx = x + 2 ; wx < x + w - 2 ; wx += 4 )
if ( rnd () > 0.45 ) out . push ({ x: wx , y: wy , w: 2 , h: 2 , c: accent });
// ---------------------------------------------------------------- canvas graph
export type Tile = { x : number ; y : number };
/** token colour of the agent glyph / tint */
/** solid tint of the plate (color-mix into --card) or null for the neutral label plate */
/** dashed elbow from the node to the plate */
plate : { x : number ; y : number ; w : number ; h : number };
/** engineering: the plate is a card holding a 3x2 grid */
const tint = ( c : string ) => ` color-mix(in srgb, ${ c } 16%, var(--card)) ` ;
const pink = " color-mix(in srgb, var(--chart-5) 55%, var(--chart-4)) " ;
const orange = " color-mix(in srgb, var(--chart-5) 50%, var(--chart-3)) " ;
const teal = " color-mix(in srgb, var(--chart-1) 55%, var(--chart-2)) " ;
export const TILE = { w: 44 , h: 32 } ;
export const depts : Dept [] = [
plate: { x: - 63 , y: - 318 , w: 126 , h: 28 },
path: ` M ${ D } - ${ D } H297 L340 -197 ` ,
plate: { x: 275 , y: - 229 , w: 128 , h: 32 },
plate: { x: 448 , y: - 14 , w: 130 , h: 28 },
path: ` M ${ D } ${ D } H297 L340 198 ` ,
plate: { x: 277 , y: 199 , w: 126 , h: 30 },
tint: tint ( " var(--chart-2) " ),
plate: { x: - 65 , y: 288 , w: 131 , h: 94 },
tint: tint ( " var(--chart-4) " ),
path: ` M- ${ D } ${ D } H-297 L-340 197 ` ,
plate: { x: - 405 , y: 197 , w: 130 , h: 32 },
tint: tint ( " var(--chart-5) " ),
plate: { x: - 572 , y: - 16 , w: 127 , h: 32 },
tint: tint ( " var(--chart-1) " ),
path: ` M- ${ D } - ${ D } H-297 L-340 -197 ` ,
plate: { x: - 403 , y: - 229 , w: 128 , h: 32 },
// ---------------------------------------------------------------- panel
name: " Draft landing copy " ,
status: " running " as const ,
export const suggested = [
" Build marketing website " ,
" Got it. I'll break that down into tasks, hand them to the right department agents and report back here as soon as the first draft is ready. " ;
export type StackIcon = " domain " | " email " | " revenue " | " hosting " ;
note: " Connect your customer-facing domain " ,
{ icon: " email " , title: " Email " , note: " Configure your email domain " },
{ icon: " revenue " , title: " Revenue " , note: " Connect billing " },
{ icon: " hosting " , title: " Hosting " , note: " Deployment provider " },
] as { icon : StackIcon ; title : string ; note : string } [] ,
{ title: " App " , note: " App, source, and deployment links. " },
title: " Marketing Website " ,
note: " Website, source, and deployment links. " ,
note: " Design department agent. " ,
note: " Engineering department agent. " ,
note: " Marketing department agent. " ,
note: " Sales department agent. " ,
note: " Operations department agent. " ,
title: " Bring over context from other tools " ,
body: " Copy a prompt that turns old chats, decisions, and working preferences into import-ready Markdown. " ,
{ id: " general " , name: " General " , files: 2 , kind: " grid " },
" color-mix(in srgb, var(--chart-2) 45%, var(--card)) " ,
" color-mix(in srgb, var(--chart-2) 22%, var(--card)) " ,
" color-mix(in srgb, var(--chart-1) 40%, var(--card)) " ,
" color-mix(in srgb, var(--chart-2) 25%, var(--card)) " ,
" color-mix(in srgb, var(--chart-4) 45%, var(--card)) " ,
" color-mix(in srgb, var(--chart-5) 30%, var(--card)) " ,
" color-mix(in srgb, var(--chart-4) 35%, var(--card)) " ,
" color-mix(in srgb, var(--chart-2) 30%, var(--card)) " ,
" color-mix(in srgb, var(--chart-3) 35%, var(--card)) " ,
" color-mix(in srgb, var(--chart-5) 25%, var(--card)) " ,
export type ChatMessage = {
from : " user " | " assistant " ;
// ---------------------------------------------------------------- overlays, menus and thread (shared content)
{ id: " domains " , label: " Domains " , icon: " globe " },
{ id: " skills " , label: " Skills " , icon: " lightbulb " },
{ id: " integrations " , label: " Integrations " , icon: " plug " },
{ id: " referrals " , label: " Referrals " , icon: " gift " },
{ id: " database " , label: " Database " , icon: " database " },
{ id: " billing " , label: " Billing & Usage " , icon: " coins " },
{ id: " shortcuts " , label: " Keyboard Shortcuts " , icon: " keyboard " },
{ id: " docs " , label: " Docs " , icon: " book " },
{ id: " community " , label: " Join community " , icon: " users " },
{ id: " support " , label: " Support Request " , icon: " lifebuoy " },
{ id: " new-company " , label: " Create new company " , icon: " plus " },
export const paletteCommands : {
{ id: " create-task " , label: " Create task " , icon: " plus " , keys: [ " C " ] },
{ id: " roadmap " , label: " Open roadmap " , icon: " map " , keys: [ " ⌘ " , " ⌥ " , " R " ] },
label: " View archived tasks " ,
export const paletteDepartments = [
export const paletteWorkspaces = [ " App " , " Marketing Website " ];
export const palettePlaceholder =
" Search files, tasks, workspaces, or @ a department... " ;
export const shortcutList : { label : string ; keys : string [] } [] = [
{ label: " Open command palette " , keys: [ " ⌘ " , " K " ] },
{ label: " Create task " , keys: [ " C " ] },
{ label: " Open settings " , keys: [ " ⌘ " , " ⌥ " , " S " ] },
{ label: " Go to overview " , keys: [ " ⌘ " , " ⌥ " , " O " ] },
{ label: " Open roadmap " , keys: [ " ⌘ " , " ⌥ " , " R " ] },
{ label: " Pan the canvas " , keys: [ " Drag " ] },
export const roadmapStages = [
{ title: " Incorporate " , note: " Entity, bank account and domain " },
{ title: " Build " , note: " First app and landing page " },
{ title: " Launch " , note: " Outreach, content and first customers " },
export const composerMenu : {
{ id: " attach " , label: " Attach files " , icon: " paperclip " },
{ id: " plan " , label: " Turn on plan mode " , icon: " listChecks " },
{ id: " clear " , label: " Clear chat " , icon: " trash " },
status : " running " | " done " ;
" Here is where Acme Labs stands today: the brand basics are in place, and two areas can move first. " ,
" Brand and positioning, so every page and post sounds the same. " ,
" Go-to-market, so your first customers hear from you this week. " ,
" Want me to take one of them on now? " ,
question: " Hey Atlas, what should I do next? " ,
" Based on what we have set up so far for Acme Labs, these are the areas you can start on next. " ,
title: " Build your first app or landing page " ,
title: " Incorporate your company " ,
color: " color-mix(in srgb, var(--chart-5) 50%, var(--chart-3)) " ,
title: " Start reaching out to potential customers " ,
title: " Open the company roadmap " ,