@agimon-ai/po-template-advanced 0.0.0-alpha.97 → 0.0.0-alpha.99

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1432,16 +1432,20 @@ function sessionSections(workspaces, presentation, selectedHost = null) {
1432
1432
  data: workspace.sessions
1433
1433
  });
1434
1434
  }
1435
- return sections.flatMap((section) => section.workspace.kind === "session" ? [{
1436
- ...section,
1437
- showWorkspace: false
1438
- }] : section.members.map((workspace, index) => ({
1439
- key: workspace.id,
1440
- workspace,
1441
- members: section.members,
1442
- data: workspace.sessions,
1443
- showWorkspace: index === 0
1444
- })));
1435
+ return sections.flatMap((section) => {
1436
+ if (section.workspace.kind === "session") return [{
1437
+ ...section,
1438
+ showWorkspace: false
1439
+ }];
1440
+ const busy = section.members.filter((workspace) => workspace.sessions.length > 0);
1441
+ return (busy.length > 0 ? busy : section.members).map((workspace, index) => ({
1442
+ key: workspace.id,
1443
+ workspace,
1444
+ members: section.members,
1445
+ data: workspace.sessions,
1446
+ showWorkspace: index === 0
1447
+ }));
1448
+ });
1445
1449
  }
1446
1450
  /** The Sessions view over the shown workspaces, each row naming its workspace. */
1447
1451
  function sessionTimeline(sections) {
@@ -1 +1 @@
1
- {"version":3,"file":"native.mjs","names":["sessionTimeline","NativeTemplateSessionsActions","WebTemplateRailDirectoryListing","WebTemplateRailPendingSetup","WebTemplateRailSession","WebTemplateRailWorkspace","Button","CheckIcon","EditIcon","FolderIcon","fontOf","Input","Label","ListRow","PlusIcon","Sheet","SheetBody","SheetContent","SheetHeader","SheetTitle","TrashIcon","Spinner","Textarea","ReactNode","useEffect","useState","StyleSheet","createProblem","MAX_GROUPS","sessionGroupOptions","Item","label","hint","danger","disabled","onPress","Items","items","styles","list","map","item","index","pressed","divider","itemLabel","meta","SessionStep","SessionMenuSheet","session","actions","onGroups","onClose","step","setStep","draft","setDraft","busy","setBusy","error","setError","close","name","remove","result","removeSession","id","undefined","open","body","trim","renameSession","text","strong","resumeSession","restartBlocked","restarting","restartSession","WorkspaceMenuSheet","workspace","confirming","setConfirming","deleteWorkspace","mono","root","available","resumeInWorkspace","SessionGroupsActions","Required","Pick","SessionGroupsSheet","sessions","forId","setForId","value","setValue","query","setQuery","renaming","setRenaming","group","deleting","setDeleting","groups","rowCancel","run","work","Promise","done","typed","options","shown","filter","includes","canCreate","some","problem","length","toggle","create","renameConfirm","to","renameGroup","current","Set","deleteConfirm","deleteGroup","on","total","members","reach","String","edge","rowEdit","rowActions","join","check","setSessionGroups","SetupMenuSheet","target","removePendingSetup","sessionId","setup","NonNullable","SUGGESTION_DEBOUNCE_MS","TRAILING_SEPARATORS","folderName","path","trimmed","replace","slice","lastIndexOf","AddWorkspaceActions","FolderBrowser","start","listDirectory","onSelect","setTarget","listing","setListing","stale","then","parent","browserHead","inset","directories","directory","AdmissionRow","instructions","workspaceId","checked","AddWorkspaceView","rows","discovering","manual","canSubmit","onPathChange","onNameChange","onInstructionsChange","onBrowse","onToggle","onSubmit","folderContent","count","row","retry","next","field","pathRow","admissionPathInput","entry","added","unchecked","admissionRow","AddWorkspaceSheet","setName","nameEdited","setNameEdited","setPath","setInstructions","discoveryRevision","setDiscoveryRevision","browsing","setBrowsing","suggestions","setSuggestions","discovery","setDiscovery","searchDirectories","discoverWorkspaces","addDeclaredWorkspaces","supportsDiscovery","shownName","trimmedPath","timer","setTimeout","declarations","clearTimeout","found","changePath","revision","finish","submit","selected","results","names","updated","find","addWorkspace","startsWith","theme","sans","fontFamily","size","color","fontSize","lineHeight","gap","spacing","uni__dependencies","borderRadius","lg","borderWidth","borderColor","colors","overflow","minHeight","justifyContent","paddingHorizontal","paddingVertical","borderTopWidth","hairlineWidth","borderTopColor","flexDirection","alignItems","pathInput","flex","minWidth","borderBottomWidth","borderBottomColor","width","height","dim","flexShrink","flexGrow","paddingBottom","enabled","magenta","faint","backgroundColor","red","hi","fontWeight","medium","lineHeightRelaxed","base","semibold","sm","styles","NativeSessionView","NativeTemplateSessionsActions","NativeTemplateSessionsProps","WebTemplateRailPendingSetup","WebTemplateRailSession","WebTemplateRailWorkspace","ActivityIcon","AlertIcon","Badge","BranchIcon","Button","CheckIcon","ChevronDownIcon","ChevronRightIcon","CountBadge","DropdownMenu","DropdownMenuContent","DropdownMenuItem","DropdownMenuTrigger","EmptyState","FolderIcon","fontOf","ForkIcon","KebabIcon","HostTag","InfoStrip","ListRow","LiveDurationReading","MessageIcon","SectionLabel","Sheet","SheetContent","SheetHeader","SheetTitle","SheetBody","LiveDuration","MonitorIcon","PlusIcon","SlidersIcon","Spinner","UsersIcon","ReactNode","useCallback","useEffect","useMemo","useRef","useState","StyleSheet","sessionTimeline","timelineOf","AddWorkspaceSheet","SessionGroupsSheet","SessionMenuSheet","SetupMenuSheet","WorkspaceMenuSheet","NO_HOSTS","NonNullable","UNAVAILABLE_LABEL","MINUTE_MS","VIEWS","value","title","description","Icon","const","StatusTone","ageText","since","now","elapsed","Math","max","minutes","floor","text","String","nextMs","SessionAge","clock","styles","age","statusTone","status","startsWith","includes","IconButton","label","onPress","children","disabled","pressed","iconButton","iconPressed","SessionCard","session","onOpen","onMenu","onSetupMenu","hostLabel","stale","flat","workspaceName","id","setup","tone","name","markColor","active","waiting","waitingCount","awaitingInput","card","nested","cardPressed","cardActive","cardHead","cardText","nameRow","provenance","nameBadge","undefined","detailRow","statusRow","restarting","git","branchRow","branch","dirty","modified","profile","avatar","initials","groups","length","groupsRow","map","group","error","pendingSetups","setupHead","setupName","setupStatus","failed","recovery","WorkspaceHeader","workspace","actions","onWorkspaceMenu","onCreate","merged","quiet","canCreate","legacy","available","create","createSession","row","groupText","workspaceLink","quietName","groupName","groupHead","quietHead","OtherWorkspaces","count","open","afterList","onToggle","other","otherAfterList","expanded","otherHead","otherLabel","otherCount","sessionSections","workspaces","presentation","selectedHost","filter","hosts","some","visible","owner","hostForId","sections","key","members","data","item","kind","sessions","existing","find","section","push","flatMap","showWorkspace","index","ReturnType","SessionCreateMenu","onCreateWorkspace","onCreateSession","workspaceDisabled","sessionDisabled","defaultOpen","AdvancedSessions","openSession","openWorkspace","setHeaderAction","hostPresentation","otherWorkspacesOpen","setOtherWorkspacesOpen","sessionView","setSessionView","setSelectedHost","initialHostId","selected","idle","timeline","all","isIdle","every","member","localOtherOpen","setLocalOtherOpen","otherOpen","localView","setLocalView","view","viewing","setViewing","hostOf","host","choosing","setChoosing","chooseAction","setChooseAction","addHost","setAddHost","sessionMenu","setSessionMenu","workspaceMenu","setWorkspaceMenu","groupsFor","setGroupsFor","setupMenu","setSetupMenu","sessionId","adding","setAdding","addWorkspace","searchDirectories","listDirectory","addActions","addWorkspaceActions","canAdd","beginAdd","generalAction","createGeneralSession","current","canGeneral","beginGeneral","generalHost","createMenu","viewTitle","headerAction","titleActions","setSessionGroups","renameGroup","deleteGroup","removePendingSetup","groupActions","workspaceHeader","entry","sessionCard","sessionRow","listEmpty","listHeader","onRetry","screen","listContent","timelineLabel","sectionGap","lastActivityAt","hostGroup","hostRow","groupRoot","root","unavailable","noSessions","next","indexOf","hostGap","otherRow","onGroups","SessionViewSheet","onClose","onChoose","viewOptions","viewOption","viewOptionSelected","theme","sans","fontFamily","size","color","fontSize","lineHeight","flex","backgroundColor","colors","rail","uni__dependencies","content","padding","spacing","gap","paddingBottom","flexDirection","alignItems","paddingHorizontal","borderRadius","lg","borderWidth","borderColor","height","paddingTop","railHead","marginBottom","listRailHead","railTitle","hi","fontWeight","semibold","minWidth","minHeight","justifyContent","dim","mono","flexShrink","borderBottomWidth","maxWidth","red","marginTop","overflow","textAlign","panel","marginLeft","medium","empty","paddingVertical","borderStyle","border","emptyText","emptyButton","width","green","bg","flexWrap","columnGap","rowGap","yellow","md","marginVertical","timelineOf","templatePoTemplateAdvanced","templatePoTemplateAdvanced2","templatePoTemplateAdvanced3"],"sources":["../../src/extensions/(frontend)/template/_lib/sessionTimeline.ts","../../src/extensions/(frontend)/template/_lib/sessionGroups.ts","../../src/extensions/(frontend)/template/_components/AdvancedSessionMenus.native.tsx","../../src/extensions/(frontend)/template/_components/AdvancedSessions.native.tsx","../../src/extensions/(frontend)/template/_lib/nativeDefinition.native.ts","../../src/extensions/(frontend)/template/po-template-advanced.native.ts","../../src/extensions/workspaces/(frontend)/template/po-template-advanced.native.ts","../../src/extensions/workspaces/sessions/(frontend)/template/po-template-advanced.native.ts","../../generated/native.ts"],"sourcesContent":["import type { WebTemplateRailSession } from '@agimon-ai/po-core/web';\n\n/** A question, a pending approval, or background work blocks on the person. */\nconst needsYou = (session: WebTemplateRailSession): boolean => session.awaitingInput || (session.waitingCount ?? 0) > 0;\n\n/** The Sessions view: what waits on the person, then the rest, each newest change first; no time sorts last. */\nexport function sessionTimeline<T extends { session: WebTemplateRailSession }>(items: readonly T[]) {\n const sorted = [...items].sort((a, b) => (b.session.lastActivityAt ?? 0) - (a.session.lastActivityAt ?? 0));\n return [\n { key: 'needs', title: 'Needs you', data: sorted.filter(({ session }) => needsYou(session)) },\n { key: 'recent', title: 'Recent', data: sorted.filter(({ session }) => !needsYou(session)) },\n ].filter((section) => section.data.length > 0);\n}\n","import type { WebTemplateRailSession } from '@agimon-ai/po-core/web';\n\n/** Mirrors the server's limits so the groups editor can say no before a round trip. */\nexport const MAX_GROUPS = 8;\nexport const MAX_GROUP_LENGTH = 32;\n\nexport interface SessionGroupOption {\n name: string;\n /** Other sessions in the group; the edited session is left out, since its check says it. */\n members: readonly string[];\n}\n\n/** Every group some session uses, in rail order, with the other sessions in it. */\nexport function sessionGroupOptions(\n sessions: readonly WebTemplateRailSession[],\n editedId: string,\n extra: readonly string[] = [],\n): SessionGroupOption[] {\n const names = [...new Set([...sessions.flatMap((session) => session.groups ?? []), ...extra])];\n return names.map((name) => ({\n name,\n members: sessions\n .filter((session) => session.id !== editedId && session.groups?.includes(name) === true)\n .map((session) => session.name || 'Untitled'),\n }));\n}\n\n/** Why a typed name cannot become a group, or undefined when it can. */\nexport function createProblem(name: string, count: number): string | undefined {\n if (name.length > MAX_GROUP_LENGTH) return `group names are at most ${String(MAX_GROUP_LENGTH)} characters.`;\n if (count >= MAX_GROUPS) return `a session can belong to at most ${String(MAX_GROUPS)} groups.`;\n return undefined;\n}\n","import type {\n NativeTemplateSessionsActions,\n WebTemplateRailDirectoryListing,\n WebTemplateRailPendingSetup,\n WebTemplateRailSession,\n WebTemplateRailWorkspace,\n} from '@agimon-ai/po-core/native';\nimport {\n Button,\n CheckIcon,\n EditIcon,\n FolderIcon,\n fontOf,\n Input,\n Label,\n ListRow,\n PlusIcon,\n Sheet,\n SheetBody,\n SheetContent,\n SheetHeader,\n SheetTitle,\n TrashIcon,\n Spinner,\n Textarea,\n} from '@agimon-ai/po-native-components';\nimport type { ReactNode } from 'react';\nimport { useEffect, useState } from 'react';\nimport { Pressable, Text, View } from 'react-native';\nimport { StyleSheet } from 'react-native-unistyles';\n\nimport { createProblem, MAX_GROUPS, sessionGroupOptions } from '../_lib/sessionGroups';\n\ninterface Item {\n label: string;\n hint?: string;\n danger?: boolean;\n disabled?: boolean;\n onPress: () => void;\n}\n\nfunction Items({ items }: { items: readonly Item[] }) {\n return (\n <View style={styles.list}>\n {items.map((item, index) => (\n <Pressable\n key={item.label}\n accessibilityRole=\"button\"\n accessibilityState={{ disabled: item.disabled === true }}\n disabled={item.disabled}\n onPress={item.onPress}\n style={({ pressed }) => [styles.item, index > 0 && styles.divider, pressed && styles.pressed]}\n >\n <Text style={styles.itemLabel(item.danger === true, item.disabled === true)}>{item.label}</Text>\n {item.hint ? <Text style={styles.meta}>{item.hint}</Text> : null}\n </Pressable>\n ))}\n </View>\n );\n}\n\ntype SessionStep = 'menu' | 'rename' | 'confirm';\n\n/** A session card's ⋮: the cockpit's rename, groups, resume, restart and remove, with remove confirmed first. */\nexport function SessionMenuSheet({\n session,\n actions,\n onGroups,\n onClose,\n}: {\n session: WebTemplateRailSession | null;\n actions: NativeTemplateSessionsActions;\n /** Opens the groups sheet; absent when the phone app cannot change groups. */\n onGroups?: (session: WebTemplateRailSession) => void;\n onClose: () => void;\n}) {\n const [step, setStep] = useState<SessionStep>('menu');\n const [draft, setDraft] = useState('');\n const [busy, setBusy] = useState(false);\n const [error, setError] = useState('');\n const close = () => {\n if (busy) return;\n setStep('menu');\n setError('');\n onClose();\n };\n const name = session?.name || 'Untitled';\n const remove = async () => {\n if (session === null) return;\n setBusy(true);\n setError('');\n const result = await actions.removeSession(session.id);\n setBusy(false);\n if (result !== undefined) {\n setError(result.error);\n return;\n }\n setStep('menu');\n onClose();\n };\n return (\n <Sheet open={session !== null} onOpenChange={(open) => !open && close()}>\n <SheetContent>\n {session === null ? null : step === 'rename' ? (\n <>\n <SheetHeader>\n <SheetTitle>Rename session</SheetTitle>\n </SheetHeader>\n <SheetBody style={styles.body}>\n <Input value={draft} onChangeText={setDraft} autoFocus accessibilityLabel=\"Session name\" />\n <Button\n variant=\"primary\"\n size=\"lg\"\n disabled={draft.trim() === ''}\n onPress={() => {\n actions.renameSession(session.id, draft);\n close();\n }}\n >\n Rename\n </Button>\n </SheetBody>\n </>\n ) : step === 'confirm' ? (\n <>\n <SheetHeader>\n <SheetTitle>Remove session</SheetTitle>\n </SheetHeader>\n <SheetBody style={styles.body}>\n <Text style={styles.text}>\n This stops <Text style={styles.strong}>{name}</Text> and removes it from the list. Anything it is\n running ends now. You can restore it for 7 days.\n </Text>\n {error ? (\n <Text style={styles.error} accessibilityRole=\"alert\">\n {error}\n </Text>\n ) : null}\n <Button variant=\"danger\" size=\"lg\" loading={busy} loadingLabel=\"Removing\" onPress={() => void remove()}>\n Remove\n </Button>\n <Button variant=\"ghost\" size=\"lg\" disabled={busy} onPress={() => setStep('menu')}>\n Cancel\n </Button>\n </SheetBody>\n </>\n ) : (\n <>\n <SheetHeader>\n <SheetTitle numberOfLines={1}>{name}</SheetTitle>\n </SheetHeader>\n <SheetBody style={styles.body}>\n <Items\n items={[\n {\n label: 'Rename',\n onPress: () => {\n setDraft(session.name);\n setStep('rename');\n },\n },\n ...(onGroups\n ? [\n {\n label: 'Groups',\n hint: 'Sessions in a group can message each other',\n onPress: () => {\n close();\n onGroups(session);\n },\n },\n ]\n : []),\n {\n label: 'Resume',\n hint: 'Open an earlier conversation in this session',\n onPress: () => {\n close();\n actions.resumeSession(session.id);\n },\n },\n {\n label: 'Restart',\n hint: session.restartBlocked ? 'Not while a turn runs' : 'Reloads extensions',\n disabled: session.restarting || session.restartBlocked === true,\n onPress: () => {\n close();\n actions.restartSession(session.id);\n },\n },\n { label: 'Remove', danger: true, onPress: () => setStep('confirm') },\n ]}\n />\n </SheetBody>\n </>\n )}\n </SheetContent>\n </Sheet>\n );\n}\n\n/** A workspace's ⋮: resume a saved conversation here, or remove the workspace after confirming. */\nexport function WorkspaceMenuSheet({\n workspace,\n actions,\n onClose,\n}: {\n workspace: WebTemplateRailWorkspace | null;\n actions: NativeTemplateSessionsActions;\n onClose: () => void;\n}) {\n const [confirming, setConfirming] = useState(false);\n const [busy, setBusy] = useState(false);\n const [error, setError] = useState('');\n const close = () => {\n if (busy) return;\n setConfirming(false);\n setError('');\n onClose();\n };\n const remove = async () => {\n if (workspace === null) return;\n setBusy(true);\n setError('');\n const result = await actions.deleteWorkspace(workspace.id);\n setBusy(false);\n if (result !== undefined) {\n setError(result.error);\n return;\n }\n setConfirming(false);\n onClose();\n };\n return (\n <Sheet open={workspace !== null} onOpenChange={(open) => !open && close()}>\n <SheetContent>\n {workspace === null ? null : confirming ? (\n <>\n <SheetHeader>\n <SheetTitle>Remove workspace</SheetTitle>\n </SheetHeader>\n <SheetBody style={styles.body}>\n <Text style={styles.text}>\n This removes <Text style={styles.strong}>{workspace.name}</Text> and all its sessions from Po. Running\n work will stop. Files at <Text style={styles.mono}>{workspace.root}</Text> stay on disk.\n </Text>\n {error ? (\n <Text style={styles.error} accessibilityRole=\"alert\">\n {error}\n </Text>\n ) : null}\n <Button variant=\"danger\" size=\"lg\" loading={busy} loadingLabel=\"Removing\" onPress={() => void remove()}>\n Remove\n </Button>\n <Button variant=\"ghost\" size=\"lg\" disabled={busy} onPress={() => setConfirming(false)}>\n Cancel\n </Button>\n </SheetBody>\n </>\n ) : (\n <>\n <SheetHeader>\n <SheetTitle numberOfLines={1}>{workspace.name}</SheetTitle>\n </SheetHeader>\n <SheetBody style={styles.body}>\n <Items\n items={[\n {\n label: 'Resume session',\n disabled: !workspace.available,\n onPress: () => {\n close();\n actions.resumeInWorkspace(workspace.id);\n },\n },\n { label: 'Remove workspace', danger: true, onPress: () => setConfirming(true) },\n ]}\n />\n </SheetBody>\n </>\n )}\n </SheetContent>\n </Sheet>\n );\n}\n\nexport type SessionGroupsActions = Required<\n Pick<NativeTemplateSessionsActions, 'setSessionGroups' | 'renameGroup' | 'deleteGroup'>\n>;\n\n/**\n * The cockpit's groups dialog as a sheet. Rows check groups on and off and the typed name can\n * become a new one; rename and delete act on every session in the group at once, the checks wait for Save.\n */\nexport function SessionGroupsSheet({\n session,\n sessions,\n actions,\n onClose,\n}: {\n session: WebTemplateRailSession | null;\n /** Every listed session, which is where the known groups and their members come from. */\n sessions: readonly WebTemplateRailSession[];\n actions: SessionGroupsActions;\n onClose: () => void;\n}) {\n const [forId, setForId] = useState<string | null>(null);\n const [value, setValue] = useState<string[]>([]);\n const [query, setQuery] = useState('');\n const [renaming, setRenaming] = useState<{ group: string; draft: string }>();\n const [deleting, setDeleting] = useState<string>();\n const [error, setError] = useState('');\n const [busy, setBusy] = useState(false);\n // A new session starts from its own groups and a clean editor.\n if ((session?.id ?? null) !== forId) {\n setForId(session?.id ?? null);\n setValue([...(session?.groups ?? [])]);\n setQuery('');\n setRenaming(undefined);\n setDeleting(undefined);\n setError('');\n }\n const close = () => {\n if (!busy) onClose();\n };\n const rowCancel = () => {\n setRenaming(undefined);\n setDeleting(undefined);\n };\n const run = async (work: () => Promise<{ error: string } | undefined>, done: () => void) => {\n setBusy(true);\n setError('');\n const result = await work();\n setBusy(false);\n if (result === undefined) done();\n else setError(result.error);\n };\n const typed = query.trim();\n const options = session === null ? [] : sessionGroupOptions(sessions, session.id, value);\n const shown = options.filter((group) => group.name.includes(typed));\n const canCreate = typed !== '' && !options.some((group) => group.name === typed);\n const problem = canCreate ? createProblem(typed, value.length) : undefined;\n const toggle = (group: string) => {\n setError('');\n if (value.includes(group)) setValue(value.filter((name) => name !== group));\n else if (value.length >= MAX_GROUPS) setError(createProblem('', value.length) ?? '');\n else setValue([...value, group]);\n };\n const create = () => {\n if (!canCreate || problem !== undefined) return;\n setValue([...value, typed]);\n setQuery('');\n };\n const renameConfirm = () => {\n if (renaming === undefined) return;\n const to = renaming.draft.trim();\n if (to === '' || to === renaming.group) return rowCancel();\n void run(\n () => actions.renameGroup(renaming.group, to),\n () => {\n setValue((current) => [...new Set(current.map((name) => (name === renaming.group ? to : name)))]);\n rowCancel();\n },\n );\n };\n const deleteConfirm = () => {\n if (deleting === undefined) return;\n void run(\n () => actions.deleteGroup(deleting),\n () => {\n setValue((current) => current.filter((name) => name !== deleting));\n rowCancel();\n },\n );\n };\n\n return (\n <Sheet open={session !== null} onOpenChange={(open) => !open && close()}>\n <SheetContent>\n {session === null ? null : (\n <>\n <SheetHeader>\n <SheetTitle>Session groups</SheetTitle>\n </SheetHeader>\n <SheetBody style={styles.body}>\n <Text style={styles.meta}>Sessions that share a group can message each other.</Text>\n <Input\n value={query}\n onChangeText={setQuery}\n placeholder={value.length === 0 ? 'Find or create a group' : 'Add another'}\n autoCapitalize=\"none\"\n autoCorrect={false}\n returnKeyType=\"done\"\n onSubmitEditing={() => {\n if (canCreate) create();\n else if (shown[0] !== undefined) {\n toggle(shown[0].name);\n setQuery('');\n }\n }}\n accessibilityLabel=\"Find or create a group\"\n />\n {shown.length > 0 || canCreate ? (\n <View style={styles.list}>\n {shown.map((group, index) => {\n const on = value.includes(group.name);\n const total = group.members.length + (on ? 1 : 0);\n const reach = total === 1 ? 'its one session' : `all ${String(total)} sessions`;\n const edge = index > 0 && styles.divider;\n if (renaming?.group === group.name)\n return (\n <View key={group.name} style={[styles.rowEdit, edge]}>\n <Input\n value={renaming.draft}\n onChangeText={(draft) => setRenaming({ ...renaming, draft })}\n autoFocus\n autoCapitalize=\"none\"\n autoCorrect={false}\n onSubmitEditing={renameConfirm}\n accessibilityLabel={`Rename ${group.name}`}\n />\n <Text style={styles.meta}>Renames it on {reach}.</Text>\n <View style={styles.rowActions}>\n <Button variant=\"ghost\" size=\"sm\" disabled={busy} onPress={rowCancel}>\n Cancel\n </Button>\n <Button\n variant=\"outline\"\n size=\"sm\"\n disabled={renaming.draft.trim() === ''}\n loading={busy}\n loadingLabel=\"Renaming\"\n onPress={renameConfirm}\n >\n Rename\n </Button>\n </View>\n </View>\n );\n if (deleting === group.name)\n return (\n <View key={group.name} style={[styles.rowEdit, edge]}>\n <Text style={styles.text}>\n Remove <Text style={styles.strong}>{group.name}</Text> from {reach}? They can no longer\n message through it.\n </Text>\n <View style={styles.rowActions}>\n <Button variant=\"ghost\" size=\"sm\" disabled={busy} onPress={rowCancel}>\n Cancel\n </Button>\n <Button\n variant=\"danger\"\n size=\"sm\"\n loading={busy}\n loadingLabel=\"Deleting\"\n onPress={deleteConfirm}\n >\n Delete\n </Button>\n </View>\n </View>\n );\n return (\n <ListRow\n key={group.name}\n title={group.name}\n description={group.members.length === 0 ? 'No other sessions yet' : group.members.join(', ')}\n selected={on}\n leading={<View style={styles.check}>{on ? <CheckIcon size={16} color=\"green\" /> : null}</View>}\n trailing={\n <View style={styles.rowActions}>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n accessibilityLabel={`Rename ${group.name}`}\n onPress={() => {\n setDeleting(undefined);\n setRenaming({ group: group.name, draft: group.name });\n }}\n >\n <EditIcon size={16} color=\"dim\" />\n </Button>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n accessibilityLabel={`Delete ${group.name}`}\n onPress={() => {\n setRenaming(undefined);\n setDeleting(group.name);\n }}\n >\n <TrashIcon size={16} color=\"dim\" />\n </Button>\n </View>\n }\n disclosure={false}\n onPress={() => toggle(group.name)}\n style={edge}\n />\n );\n })}\n {canCreate ? (\n <ListRow\n title={\n <Text style={styles.create(problem === undefined)} numberOfLines={1}>\n Create group “{typed}”\n </Text>\n }\n description={problem === undefined ? undefined : <Text style={styles.error}>{problem}</Text>}\n leading={<PlusIcon size={16} color={problem === undefined ? 'magenta' : 'faint'} />}\n disabled={problem !== undefined}\n disclosure={false}\n onPress={create}\n style={shown.length > 0 && styles.divider}\n />\n ) : null}\n </View>\n ) : null}\n <Text style={styles.meta}>\n {value.length} of {MAX_GROUPS} groups\n </Text>\n {error ? (\n <Text style={styles.error} accessibilityRole=\"alert\">\n {error}\n </Text>\n ) : null}\n <Button\n variant=\"primary\"\n size=\"lg\"\n loading={busy && renaming === undefined && deleting === undefined}\n loadingLabel=\"Saving\"\n disabled={busy}\n onPress={() => void run(() => actions.setSessionGroups(session.id, value), onClose)}\n >\n Save\n </Button>\n </SheetBody>\n </>\n )}\n </SheetContent>\n </Sheet>\n );\n}\n\n/** A pending setup's ⋮: it has no runtime, so removing it is the only action, as in the cockpit. */\nexport function SetupMenuSheet({\n target,\n removePendingSetup,\n onClose,\n}: {\n target: { sessionId: string; setup: WebTemplateRailPendingSetup } | null;\n removePendingSetup: NonNullable<NativeTemplateSessionsActions['removePendingSetup']>;\n onClose: () => void;\n}) {\n const [busy, setBusy] = useState(false);\n const [error, setError] = useState('');\n const close = () => {\n if (busy) return;\n setError('');\n onClose();\n };\n const remove = async () => {\n if (target === null) return;\n setBusy(true);\n setError('');\n const result = await removePendingSetup(target.sessionId, target.setup.id);\n setBusy(false);\n if (result === undefined) onClose();\n else setError(result.error);\n };\n return (\n <Sheet open={target !== null} onOpenChange={(open) => !open && close()}>\n <SheetContent>\n {target === null ? null : (\n <>\n <SheetHeader>\n <SheetTitle numberOfLines={1}>{target.setup.name}</SheetTitle>\n </SheetHeader>\n <SheetBody style={styles.body}>\n <Items\n items={[\n {\n label: busy ? 'Removing…' : 'Remove setup',\n danger: true,\n disabled: busy,\n onPress: () => void remove(),\n },\n ]}\n />\n {error ? (\n <Text style={styles.error} accessibilityRole=\"alert\">\n {error}\n </Text>\n ) : null}\n </SheetBody>\n </>\n )}\n </SheetContent>\n </Sheet>\n );\n}\nconst SUGGESTION_DEBOUNCE_MS = 120;\nconst TRAILING_SEPARATORS = /\\/+$/u;\n\nfunction folderName(path: string): string {\n const trimmed = path.trim().replace(TRAILING_SEPARATORS, '');\n return trimmed.slice(trimmed.lastIndexOf('/') + 1) || trimmed;\n}\n\nexport type AddWorkspaceActions = Required<\n Pick<NativeTemplateSessionsActions, 'addWorkspace' | 'searchDirectories' | 'listDirectory'>\n> &\n Pick<NativeTemplateSessionsActions, 'discoverWorkspaces' | 'addDeclaredWorkspaces'>;\n\n/** The cockpit's folder browser, in place: up, into a child, or use the current folder. */\nfunction FolderBrowser({\n start,\n listDirectory,\n onSelect,\n}: {\n start?: string;\n listDirectory: AddWorkspaceActions['listDirectory'];\n onSelect: (path: string) => void;\n}) {\n const [target, setTarget] = useState(start);\n const [listing, setListing] = useState<WebTemplateRailDirectoryListing | null>(null);\n const [error, setError] = useState('');\n useEffect(() => {\n let stale = false;\n void listDirectory(target).then((result) => {\n if (stale) return;\n if ('error' in result) setError(result.error);\n else {\n setError('');\n setListing(result);\n }\n });\n return () => {\n stale = true;\n };\n }, [target, listDirectory]);\n const parent = listing?.parent;\n return (\n <View style={styles.list}>\n <View style={styles.browserHead}>\n <Text style={styles.path} numberOfLines={1} ellipsizeMode=\"head\">\n {listing?.path ?? 'Loading…'}\n </Text>\n <Button size=\"sm\" disabled={listing === null} onPress={() => listing !== null && onSelect(listing.path)}>\n Use this folder\n </Button>\n </View>\n {error ? (\n <Text style={[styles.error, styles.inset]} accessibilityRole=\"alert\">\n {error}\n </Text>\n ) : null}\n {parent === undefined ? null : (\n <ListRow title=\"Parent folder\" disclosure={false} onPress={() => setTarget(parent)} style={styles.divider} />\n )}\n {listing?.directories.length === 0 ? <Text style={[styles.meta, styles.inset]}>No folders here</Text> : null}\n {listing?.directories.map((directory) => (\n <ListRow\n key={directory}\n title={folderName(directory)}\n leading={<FolderIcon size={16} color=\"dim\" />}\n onPress={() => setTarget(directory)}\n style={styles.divider}\n />\n ))}\n </View>\n );\n}\n\nexport interface AdmissionRow {\n name: string;\n instructions?: string;\n workspaceId?: string;\n checked: boolean;\n error?: string;\n}\n\n/** The approved native composition, shared by the real sheet and deterministic stories. */\nexport function AddWorkspaceView({\n open,\n path,\n name,\n instructions,\n rows,\n discovering,\n error,\n busy,\n manual,\n canSubmit,\n onPathChange,\n onNameChange,\n onInstructionsChange,\n onBrowse,\n onToggle,\n onSubmit,\n onClose,\n folderContent,\n}: {\n open: boolean;\n path: string;\n name: string;\n instructions: string;\n rows: readonly AdmissionRow[];\n discovering: boolean;\n error: string;\n busy: boolean;\n manual: boolean;\n canSubmit: boolean;\n onPathChange: (path: string) => void;\n onNameChange: (name: string) => void;\n onInstructionsChange: (instructions: string) => void;\n onBrowse: () => void;\n onToggle: (name: string) => void;\n onSubmit: () => void;\n onClose: () => void;\n folderContent?: ReactNode;\n}) {\n const count = rows.filter((row) => row.checked && !row.workspaceId).length;\n const retry = rows.some((row) => row.error);\n return (\n <Sheet open={open} onOpenChange={(next) => !next && !busy && onClose()}>\n <SheetContent>\n <SheetHeader>\n <SheetTitle>Add workspace</SheetTitle>\n </SheetHeader>\n <SheetBody style={styles.body}>\n <View style={styles.field}>\n <Label>Folder</Label>\n <View style={styles.pathRow}>\n <Input\n value={path}\n onChangeText={onPathChange}\n disabled={busy}\n placeholder=\"~/workspace/my-project\"\n autoCapitalize=\"none\"\n autoCorrect={false}\n accessibilityLabel=\"Workspace folder\"\n style={styles.admissionPathInput}\n />\n <Button variant=\"outline\" disabled={busy} onPress={onBrowse}>\n Browse\n </Button>\n </View>\n </View>\n {folderContent}\n {discovering ? (\n <View style={styles.pathRow}>\n <Spinner label=\"Reading workspace declarations\" />\n <Text style={styles.meta}>Reading workspace declarations…</Text>\n </View>\n ) : null}\n {error ? (\n <Text accessibilityRole=\"alert\" style={styles.error}>\n {error}\n </Text>\n ) : null}\n {rows.length > 0 ? (\n <View style={styles.field}>\n <Label>Workspaces</Label>\n <Text style={styles.meta}>Declared in .po/config.yaml. Choose which to add.</Text>\n {rows.map((entry) => {\n const added = entry.workspaceId !== undefined;\n return (\n <View key={entry.name}>\n <Pressable\n accessibilityRole=\"checkbox\"\n accessibilityLabel={`${entry.name}${added ? ', Added' : ''}`}\n accessibilityHint={entry.instructions}\n accessibilityState={{ checked: entry.checked, disabled: added || busy }}\n disabled={added || busy}\n onPress={() => onToggle(entry.name)}\n >\n <ListRow\n title={entry.name}\n disclosure={false}\n description={\n <Text numberOfLines={1} style={styles.meta}>\n {entry.instructions}\n </Text>\n }\n leading={\n entry.checked ? <CheckIcon size={18} color=\"green\" /> : <View style={styles.unchecked} />\n }\n trailing={added ? <Text style={styles.meta}>Added</Text> : undefined}\n style={styles.admissionRow}\n />\n </Pressable>\n {entry.error ? (\n <Text accessibilityRole=\"alert\" style={styles.error}>\n {entry.error}\n </Text>\n ) : null}\n </View>\n );\n })}\n </View>\n ) : null}\n {manual ? (\n <>\n <View style={styles.field}>\n <Label>Name</Label>\n <Input\n value={name}\n onChangeText={onNameChange}\n disabled={busy}\n placeholder=\"my-project\"\n autoCapitalize=\"none\"\n autoCorrect={false}\n accessibilityLabel=\"Workspace name\"\n />\n </View>\n <View style={styles.field}>\n <Label>Instructions (optional)</Label>\n <Textarea\n rows={3}\n value={instructions}\n onChangeText={onInstructionsChange}\n disabled={busy}\n accessibilityLabel=\"Workspace instructions\"\n />\n <Text style={styles.meta}>For main sessions in this workspace.</Text>\n </View>\n {path.trim() === '' && name.trim() !== '' ? (\n <Text style={styles.meta}>\n Creates <Text style={styles.mono}>~/.po/workspace/{name.trim()}</Text>\n </Text>\n ) : null}\n </>\n ) : null}\n <Button\n variant=\"primary\"\n size=\"lg\"\n disabled={!canSubmit}\n loading={busy}\n loadingLabel=\"Adding\"\n onPress={onSubmit}\n >\n {rows.length > 0\n ? `${retry ? 'Retry' : 'Add'} ${count} workspace${count === 1 ? '' : 's'}`\n : 'Add workspace'}\n </Button>\n </SheetBody>\n </SheetContent>\n </Sheet>\n );\n}\n\n/** Discovery is optional so fetched templates still work with older phone providers. */\nexport function AddWorkspaceSheet({\n open,\n actions,\n onClose,\n}: {\n open: boolean;\n actions: AddWorkspaceActions;\n onClose: () => void;\n}) {\n const [name, setName] = useState('');\n const [nameEdited, setNameEdited] = useState(false);\n const [path, setPath] = useState('');\n const [instructions, setInstructions] = useState('');\n const [discoveryRevision, setDiscoveryRevision] = useState(0);\n const [browsing, setBrowsing] = useState(false);\n const [suggestions, setSuggestions] = useState<readonly string[]>([]);\n const [busy, setBusy] = useState(false);\n const [error, setError] = useState('');\n const [discovery, setDiscovery] = useState<{ path: string; root: string; rows: AdmissionRow[]; error: string }>();\n const { searchDirectories, discoverWorkspaces, addDeclaredWorkspaces } = actions;\n const supportsDiscovery = discoverWorkspaces !== undefined && addDeclaredWorkspaces !== undefined;\n const shownName = nameEdited ? name : folderName(path);\n const trimmedPath = path.trim().replace(TRAILING_SEPARATORS, '') || (path.trim() === '' ? '' : '/');\n const current = discovery?.path === trimmedPath ? discovery : undefined;\n const discovering = supportsDiscovery && trimmedPath !== '' && current === undefined;\n const rows = current?.rows ?? [];\n const manual = !discovering && !current?.error && rows.length === 0;\n const canSubmit =\n !busy &&\n !discovering &&\n !current?.error &&\n (rows.length > 0\n ? rows.some((row) => row.checked && !row.workspaceId)\n : trimmedPath !== '' || shownName.trim() !== '');\n\n useEffect(() => {\n if (!open || !supportsDiscovery || trimmedPath === '' || discoverWorkspaces === undefined) return;\n let stale = false;\n const timer = setTimeout(() => {\n void discoverWorkspaces(trimmedPath).then(\n (result) => {\n if (stale) return;\n setDiscovery({\n path: trimmedPath,\n root: 'root' in result ? result.root : trimmedPath,\n rows: 'declarations' in result ? result.declarations.map((row) => ({ ...row, checked: true })) : [],\n error: 'error' in result ? result.error : '',\n });\n },\n () => {\n if (!stale)\n setDiscovery({\n path: trimmedPath,\n root: trimmedPath,\n rows: [],\n error: 'Could not read workspace declarations. Choose the folder again to retry.',\n });\n },\n );\n }, SUGGESTION_DEBOUNCE_MS);\n return () => {\n stale = true;\n clearTimeout(timer);\n };\n }, [open, trimmedPath, supportsDiscovery, discoverWorkspaces, discoveryRevision]);\n\n useEffect(() => {\n if (!open || path.trim() === '') return;\n let stale = false;\n const timer = setTimeout(async () => {\n const found = await searchDirectories(path.trim());\n if (!stale) setSuggestions(found.filter((directory) => directory !== path.trim()));\n }, SUGGESTION_DEBOUNCE_MS);\n return () => {\n stale = true;\n clearTimeout(timer);\n };\n }, [open, path, searchDirectories]);\n\n const changePath = (next: string) => {\n setPath(next);\n setDiscovery(undefined);\n setSuggestions([]);\n setError('');\n setDiscoveryRevision((revision) => revision + 1);\n };\n const finish = () => {\n setName('');\n setNameEdited(false);\n setPath('');\n setInstructions('');\n setBrowsing(false);\n setSuggestions([]);\n setError('');\n setDiscovery(undefined);\n onClose();\n };\n const submit = async () => {\n if (!canSubmit) return;\n setBusy(true);\n setError('');\n try {\n if (rows.length > 0 && addDeclaredWorkspaces !== undefined && current !== undefined) {\n const selected = rows.filter((row) => row.checked && !row.workspaceId);\n const { results } = await addDeclaredWorkspaces({ path: current.root, names: selected.map((row) => row.name) });\n const updated = rows.map((row) => {\n if (!selected.includes(row)) return row;\n const result = results.find((entry) => entry.name === row.name);\n return {\n ...row,\n workspaceId: result?.workspaceId,\n error: result?.error ?? (result?.workspaceId ? undefined : 'Could not add this workspace. Try again.'),\n };\n });\n setDiscovery({ ...current, rows: updated });\n if (updated.some((row) => row.checked && !row.workspaceId)) return;\n } else {\n const result = await actions.addWorkspace({\n name: shownName.trim(),\n ...(trimmedPath === '' ? {} : { path: trimmedPath }),\n ...(instructions === '' ? {} : { instructions }),\n });\n if (result !== undefined) {\n setError(result.error);\n return;\n }\n }\n finish();\n } catch {\n setError('Could not add the workspace. Try again.');\n } finally {\n setBusy(false);\n }\n };\n return (\n <AddWorkspaceView\n open={open}\n path={path}\n name={shownName}\n instructions={instructions}\n rows={rows}\n discovering={discovering}\n error={current?.error || error}\n busy={busy}\n manual={manual}\n canSubmit={canSubmit}\n onPathChange={changePath}\n onNameChange={(next) => {\n setNameEdited(true);\n setName(next);\n }}\n onInstructionsChange={setInstructions}\n onBrowse={() => setBrowsing((value) => !value)}\n onToggle={(name) =>\n current &&\n setDiscovery({\n ...current,\n rows: rows.map((row) => (row.name === name && !row.workspaceId ? { ...row, checked: !row.checked } : row)),\n })\n }\n onSubmit={() => void submit()}\n onClose={finish}\n folderContent={\n busy ? null : browsing ? (\n <FolderBrowser\n {...(trimmedPath.startsWith('/') ? { start: trimmedPath } : {})}\n listDirectory={actions.listDirectory}\n onSelect={(selected) => {\n changePath(selected);\n setBrowsing(false);\n }}\n />\n ) : suggestions.length > 0 ? (\n <View style={styles.list} accessibilityLabel=\"Matching folders\">\n {suggestions.map((directory, index) => (\n <ListRow\n key={directory}\n title={\n <Text style={styles.path} numberOfLines={1} ellipsizeMode=\"head\">\n {directory}\n </Text>\n }\n disclosure={false}\n onPress={() => changePath(`${directory}/`)}\n style={index > 0 && styles.divider}\n />\n ))}\n </View>\n ) : null\n }\n />\n );\n}\nconst styles = StyleSheet.create((theme) => {\n const sans = fontOf(theme.fontFamily.sans);\n const text = (size: 'sm' | 'base', color: string) => ({\n fontFamily: sans,\n fontSize: theme.fontSize[size],\n lineHeight: theme.lineHeight[size],\n color,\n });\n return {\n body: { gap: theme.spacing(3) },\n list: {\n borderRadius: theme.borderRadius.lg,\n borderWidth: 1,\n borderColor: theme.colors['border-soft'],\n overflow: 'hidden',\n },\n item: {\n minHeight: 48,\n justifyContent: 'center',\n gap: 2,\n paddingHorizontal: theme.spacing(4),\n paddingVertical: theme.spacing(2.5),\n },\n divider: { borderTopWidth: StyleSheet.hairlineWidth, borderTopColor: theme.colors['border-soft'] },\n field: { gap: theme.spacing(1.5) },\n pathRow: { flexDirection: 'row', alignItems: 'center', gap: theme.spacing(2) },\n pathInput: { flex: 1, minWidth: 0 },\n admissionPathInput: { flex: 1, minWidth: 0, fontFamily: fontOf(theme.fontFamily.mono) },\n admissionRow: {\n minHeight: 44,\n borderBottomWidth: StyleSheet.hairlineWidth,\n borderBottomColor: theme.colors['border-soft'],\n },\n unchecked: { width: 18, height: 18, borderWidth: 1, borderColor: theme.colors.dim },\n browserHead: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: theme.spacing(2),\n paddingHorizontal: theme.spacing(4),\n paddingVertical: theme.spacing(2),\n },\n path: { ...text('sm', theme.colors.dim), fontFamily: fontOf(theme.fontFamily.mono), flexShrink: 1, flexGrow: 1 },\n inset: { paddingHorizontal: theme.spacing(4), paddingBottom: theme.spacing(2) },\n rowEdit: { gap: theme.spacing(2), paddingHorizontal: theme.spacing(4), paddingVertical: theme.spacing(3) },\n rowActions: { flexDirection: 'row', alignItems: 'center', justifyContent: 'flex-end', gap: theme.spacing(1) },\n check: { width: 16, alignItems: 'center' },\n // Creating a group is the person's own naming, so it reads rose like the group chips.\n create: (enabled: boolean) => text('base', enabled ? theme.colors.magenta : theme.colors.faint),\n pressed: { backgroundColor: theme.colors['tint-green'] },\n itemLabel: (danger: boolean, disabled: boolean) => ({\n ...text('base', disabled ? theme.colors.faint : danger ? theme.colors.red : theme.colors.hi),\n fontWeight: theme.fontWeight.medium,\n }),\n meta: text('sm', theme.colors.dim),\n text: { ...text('base', theme.colors.text), lineHeight: theme.lineHeightRelaxed.base },\n strong: { fontWeight: theme.fontWeight.semibold, color: theme.colors.hi },\n mono: { fontFamily: fontOf(theme.fontFamily.mono), color: theme.colors.hi },\n error: { ...text('sm', theme.colors.red), lineHeight: theme.lineHeightRelaxed.sm },\n };\n});\n","import type {\n NativeSessionView,\n NativeTemplateSessionsActions,\n NativeTemplateSessionsProps,\n WebTemplateRailPendingSetup,\n WebTemplateRailSession,\n WebTemplateRailWorkspace,\n} from '@agimon-ai/po-core/native';\nimport {\n ActivityIcon,\n AlertIcon,\n Badge,\n BranchIcon,\n Button,\n CheckIcon,\n ChevronDownIcon,\n ChevronRightIcon,\n CountBadge,\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n EmptyState,\n FolderIcon,\n fontOf,\n ForkIcon,\n KebabIcon,\n HostTag,\n InfoStrip,\n ListRow,\n type LiveDurationReading,\n MessageIcon,\n SectionLabel,\n Sheet,\n SheetContent,\n SheetHeader,\n SheetTitle,\n SheetBody,\n LiveDuration,\n MonitorIcon,\n PlusIcon,\n SlidersIcon,\n Spinner,\n UsersIcon,\n} from '@agimon-ai/po-native-components';\nimport { type ReactNode, useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { Pressable, SectionList, Text, View } from 'react-native';\nimport { StyleSheet } from 'react-native-unistyles';\n\nimport { sessionTimeline as timelineOf } from '../_lib/sessionTimeline';\nimport {\n AddWorkspaceSheet,\n SessionGroupsSheet,\n SessionMenuSheet,\n SetupMenuSheet,\n WorkspaceMenuSheet,\n} from './AdvancedSessionMenus.native';\n\nconst NO_HOSTS: NonNullable<NativeTemplateSessionsProps['hostPresentation']>['hosts'] = [];\nconst UNAVAILABLE_LABEL = ' · Unavailable';\nconst MINUTE_MS = 60_000;\nconst VIEWS = [\n { value: 'workspaces', title: 'Workspaces', description: 'Sessions grouped by workspace', Icon: FolderIcon },\n { value: 'sessions', title: 'Sessions', description: 'Needs you first, then latest change', Icon: MessageIcon },\n] as const;\n\ntype StatusTone = 'failed' | 'running' | 'quiet';\n\n/** How long ago a session last moved: \"<1m\", \"12m\", \"3h\", \"2d\". */\nexport function ageText(since: number, now: number): LiveDurationReading {\n const elapsed = Math.max(0, now - since);\n const minutes = Math.floor(elapsed / MINUTE_MS);\n const text =\n minutes < 1\n ? '<1m'\n : minutes < 60\n ? `${String(minutes)}m`\n : minutes < 1440\n ? `${String(Math.floor(minutes / 60))}h`\n : `${String(Math.floor(minutes / 1440))}d`;\n return { text, nextMs: MINUTE_MS - (elapsed % MINUTE_MS) };\n}\n\nfunction SessionAge({ since }: { since: number }) {\n const clock = useCallback((now: number) => ageText(since, now), [since]);\n return <LiveDuration clock={clock} style={styles.age} />;\n}\n\n/** The same reading of the status line as the cockpit card. */\nfunction statusTone(status: string): StatusTone {\n if (status.startsWith('failed') || status.includes(' failed')) return 'failed';\n if (status.startsWith('running')) return 'running';\n return 'quiet';\n}\n\n/** A 44 point icon target, as the cockpit's ghost icon buttons. */\nfunction IconButton({\n label,\n onPress,\n children,\n disabled = false,\n}: {\n label: string;\n onPress: () => void;\n children: ReactNode;\n disabled?: boolean;\n}) {\n return (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={label}\n accessibilityState={{ disabled }}\n disabled={disabled}\n hitSlop={6}\n onPress={onPress}\n style={({ pressed }) => [styles.iconButton, pressed && styles.iconPressed]}\n >\n {children}\n </Pressable>\n );\n}\n\nfunction SessionCard({\n session,\n onOpen,\n onMenu,\n onSetupMenu,\n hostLabel,\n stale = false,\n flat = false,\n workspaceName,\n age,\n}: {\n session: WebTemplateRailSession;\n hostLabel?: string;\n stale?: boolean;\n /** In the Sessions view a child sits in time order, not under its parent, so it loses the indent. */\n flat?: boolean;\n /** Opens the branch line, since the Sessions view has no workspace headings. */\n workspaceName?: string;\n /** Epoch ms of the last change, shown as an ageing \"12m\" beside the name. */\n age?: number;\n onOpen: (id: string) => void;\n onMenu: (session: WebTemplateRailSession) => void;\n /** Absent when the phone app cannot remove a setup, so the panel shows no menu. */\n onSetupMenu?: (setup: WebTemplateRailPendingSetup) => void;\n}) {\n const tone = stale ? 'quiet' : statusTone(session.status);\n const name = session.name || 'Untitled';\n const markColor = session.active ? 'green' : 'faint';\n // A host without the count still marks a waiting card as one.\n const waiting = stale ? 0 : (session.waitingCount ?? (session.awaitingInput ? 1 : 0));\n return (\n <>\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={waiting > 0 ? `Open ${name}, ${String(waiting)} waiting for you` : `Open ${name}`}\n disabled={stale}\n accessibilityState={{ disabled: stale }}\n onPress={() => onOpen(session.id)}\n style={({ pressed }) => [\n styles.card,\n session.nested && !flat && styles.nested,\n pressed && styles.cardPressed,\n !stale && session.active && styles.cardActive,\n ]}\n >\n <View style={styles.cardHead}>\n <View style={styles.cardText}>\n <View style={styles.nameRow}>\n {/* The cockpit card's provenance mark: a workflow pulse, or a fork for any other child. */}\n {session.nested && session.provenance === 'workflow-session' ? (\n <ActivityIcon size={13} color={markColor} accessibilityLabel=\"workflow session\" />\n ) : session.nested && session.provenance ? (\n <ForkIcon\n size={13}\n color={markColor}\n accessibilityLabel={\n session.provenance === 'worktree' ? 'automatic per-conversation worktree' : session.provenance\n }\n />\n ) : null}\n <Text style={styles.name} numberOfLines={2}>\n {name}\n </Text>\n {/* The rose count of things waiting on the person follows the name. */}\n <CountBadge count={waiting} style={styles.nameBadge} />\n {age === undefined ? null : <SessionAge since={age} />}\n </View>\n {/* The avatar trails the detail lines, so every card keeps one text edge with or without it. */}\n <View style={styles.detailRow}>\n <View style={styles.statusRow}>\n {stale ? null : session.restarting ? (\n <Spinner size=\"small\" color=\"dim\" label=\"Restarting\" />\n ) : tone === 'running' ? (\n <Spinner size=\"small\" color=\"yellow\" />\n ) : tone === 'failed' ? (\n <AlertIcon size={12} color=\"red\" />\n ) : null}\n {!stale && session.clock ? (\n <LiveDuration style={styles.status(tone)} label={session.clock.label} since={session.clock.since} />\n ) : (\n <Text style={styles.status(tone)} numberOfLines={1}>\n {stale ? 'Last known' : session.status}\n </Text>\n )}\n {/* The branch closes the status line, so a card stays two lines tall. */}\n {session.git || workspaceName ? (\n <View style={styles.branchRow}>\n {workspaceName ? (\n <Text style={styles.branch} numberOfLines={1}>\n {workspaceName}\n </Text>\n ) : null}\n {session.git ? (\n <>\n <BranchIcon size={13} color=\"dim\" />\n <Text style={styles.branch} numberOfLines={1}>\n {session.git.branch}\n </Text>\n {session.git.dirty ? <Text style={styles.modified}>modified</Text> : null}\n </>\n ) : null}\n </View>\n ) : null}\n </View>\n {session.profile ? (\n <View style={styles.avatar} accessibilityLabel={session.profile.label}>\n <Text style={styles.initials}>{session.profile.initials}</Text>\n </View>\n ) : null}\n </View>\n </View>\n {!stale ? (\n <IconButton label={`${name} actions`} onPress={() => onMenu(session)}>\n <KebabIcon size={16} color=\"dim\" />\n </IconButton>\n ) : null}\n </View>\n {hostLabel ? <HostTag label={hostLabel} /> : null}\n {session.groups !== undefined && session.groups.length > 0 ? (\n <View style={styles.groupsRow} accessibilityLabel=\"groups\">\n <UsersIcon size={13} color=\"dim\" />\n <View style={styles.groups}>\n {session.groups.map((group) => (\n <Badge key={group} tone=\"magenta\" size=\"xs\">\n {group}\n </Badge>\n ))}\n </View>\n </View>\n ) : null}\n {session.error ? (\n <Text style={styles.error} numberOfLines={3}>\n {session.error}\n </Text>\n ) : null}\n </Pressable>\n {/* A pending reservation has no runtime, so it sits outside the card and never opens the session. */}\n {session.pendingSetups.map((setup) => (\n <View key={setup.id} style={styles.setup}>\n <View style={styles.setupHead}>\n <Text style={[styles.name, styles.setupName]} numberOfLines={1}>\n {setup.name}\n </Text>\n {!stale && onSetupMenu ? (\n <IconButton label={`${setup.name} setup actions`} onPress={() => onSetupMenu(setup)}>\n <KebabIcon size={16} color=\"dim\" />\n </IconButton>\n ) : null}\n </View>\n <Text style={styles.setupStatus(setup.failed)}>{setup.status}</Text>\n {setup.recovery ? (\n <Text style={styles.recovery} accessibilityRole={setup.failed ? 'alert' : undefined}>\n {setup.recovery}\n </Text>\n ) : null}\n </View>\n ))}\n </>\n );\n}\n\nfunction WorkspaceHeader({\n workspace,\n actions,\n onWorkspaceMenu,\n onCreate,\n onOpen,\n merged = false,\n stale = false,\n quiet = false,\n}: {\n workspace: WebTemplateRailWorkspace;\n actions: NativeTemplateSessionsActions;\n onCreate?: () => void;\n onOpen?: () => void;\n merged?: boolean;\n stale?: boolean;\n /** A compact row for a workspace without sessions. */\n quiet?: boolean;\n onWorkspaceMenu: (workspace: WebTemplateRailWorkspace) => void;\n}) {\n const canCreate = !workspace.legacy && workspace.available && (!stale || merged);\n const create = onCreate ?? (() => actions.createSession(workspace.id));\n const row = (\n <>\n <FolderIcon size={16} color=\"dim\" />\n <Pressable\n style={[styles.groupText, styles.workspaceLink]}\n accessibilityRole={onOpen ? 'button' : 'header'}\n accessibilityLabel={onOpen ? `Open ${workspace.name} workspace` : workspace.name}\n disabled={!onOpen}\n onPress={onOpen}\n >\n <Text style={quiet ? styles.quietName : styles.groupName} numberOfLines={1}>\n {workspace.name}\n </Text>\n </Pressable>\n {workspace.legacy ? null : (\n <>\n {canCreate ? (\n <IconButton label={`New session in ${workspace.name}`} onPress={create}>\n <PlusIcon size={18} color=\"dim\" />\n </IconButton>\n ) : null}\n {!stale || merged ? (\n <IconButton label={`${workspace.name} actions`} onPress={() => onWorkspaceMenu(workspace)}>\n <KebabIcon size={16} color=\"dim\" />\n </IconButton>\n ) : null}\n </>\n )}\n </>\n );\n return (\n <View style={styles.group}>\n <View style={[styles.groupHead, quiet && styles.quietHead]} accessibilityRole=\"header\">\n {row}\n </View>\n </View>\n );\n}\n\n/** Workspaces without sessions, folded into one quiet group below the list. */\nfunction OtherWorkspaces({\n count,\n open,\n afterList,\n onToggle,\n children,\n}: {\n count: number;\n open: boolean;\n afterList: boolean;\n onToggle: () => void;\n children: ReactNode;\n}) {\n return (\n <View style={[styles.other, afterList && styles.otherAfterList]}>\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={`Other workspaces, ${String(count)} without sessions`}\n accessibilityState={{ expanded: open }}\n onPress={onToggle}\n style={({ pressed }) => [styles.otherHead, pressed && styles.iconPressed]}\n >\n {open ? <ChevronDownIcon size={16} color=\"dim\" /> : <ChevronRightIcon size={16} color=\"dim\" />}\n <Text style={styles.otherLabel}>Other workspaces</Text>\n <Text style={styles.otherCount}>{count}</Text>\n </Pressable>\n {open ? children : null}\n </View>\n );\n}\n\n/** Display grouping never rewrites workspace or session identity. */\nexport function sessionSections(\n workspaces: readonly WebTemplateRailWorkspace[],\n presentation?: NativeTemplateSessionsProps['hostPresentation'],\n selectedHost: string | null = null,\n) {\n const filter = presentation?.hosts.some(({ id }) => id === selectedHost) ? selectedHost : null;\n const visible = workspaces.filter((workspace) => {\n const owner = presentation?.hostForId[workspace.id];\n if (owner && !presentation?.hosts.some(({ id }) => id === owner)) return false;\n return filter === null || owner === filter;\n });\n const sections: {\n key: string;\n workspace: WebTemplateRailWorkspace;\n members: WebTemplateRailWorkspace[];\n data: readonly WebTemplateRailSession[];\n }[] = [];\n for (const workspace of [\n ...visible.filter((item) => item.kind === 'session'),\n ...visible.filter((item) => item.kind !== 'session'),\n ]) {\n if (workspace.kind === 'session' && workspace.sessions.length === 0) continue;\n const existing =\n workspace.kind === 'session'\n ? sections.find((section) => section.workspace.kind === 'session')\n : presentation && presentation.hosts.length > 1 && !workspace.legacy\n ? sections.find(\n (section) =>\n section.workspace.kind !== 'session' &&\n !section.workspace.legacy &&\n section.workspace.name === workspace.name,\n )\n : undefined;\n if (existing) {\n existing.members.push(workspace);\n existing.data = [...existing.data, ...workspace.sessions];\n existing.workspace = { ...existing.workspace, available: existing.workspace.available || workspace.available };\n } else sections.push({ key: workspace.id, workspace, members: [workspace], data: workspace.sessions });\n }\n return sections.flatMap((section) =>\n section.workspace.kind === 'session'\n ? [{ ...section, showWorkspace: false }]\n : section.members.map((workspace, index) => ({\n key: workspace.id,\n workspace,\n members: section.members,\n data: workspace.sessions,\n showWorkspace: index === 0,\n })),\n );\n}\n\n/** The Sessions view over the shown workspaces, each row naming its workspace. */\nexport function sessionTimeline(sections: ReturnType<typeof sessionSections>) {\n return timelineOf(\n sections.flatMap((section) =>\n section.data.map((session) => ({\n session,\n workspaceName: section.workspace.kind === 'session' ? undefined : section.workspace.name,\n })),\n ),\n );\n}\nexport function SessionCreateMenu({\n onCreateWorkspace,\n onCreateSession,\n workspaceDisabled = false,\n sessionDisabled = false,\n defaultOpen = false,\n}: {\n onCreateWorkspace?: () => void;\n onCreateSession?: () => void;\n workspaceDisabled?: boolean;\n sessionDisabled?: boolean;\n defaultOpen?: boolean;\n}) {\n return (\n <DropdownMenu defaultOpen={defaultOpen}>\n <DropdownMenuTrigger variant=\"ghost\" size=\"icon\" accessibilityLabel=\"Create workspace or session\">\n <PlusIcon size={18} color=\"dim\" />\n </DropdownMenuTrigger>\n <DropdownMenuContent>\n {onCreateWorkspace ? (\n <DropdownMenuItem disabled={workspaceDisabled} onSelect={onCreateWorkspace}>\n Create workspace\n </DropdownMenuItem>\n ) : null}\n {onCreateSession ? (\n <DropdownMenuItem disabled={sessionDisabled} onSelect={onCreateSession}>\n Create session\n </DropdownMenuItem>\n ) : null}\n </DropdownMenuContent>\n </DropdownMenu>\n );\n}\n\n/** The cockpit's workspace groups, with quiet computer subgroups in the All hosts view. */\nexport function AdvancedSessions({\n workspaces,\n openSession,\n openWorkspace,\n actions,\n setHeaderAction,\n hostPresentation,\n otherWorkspacesOpen,\n setOtherWorkspacesOpen,\n sessionView,\n setSessionView,\n}: NativeTemplateSessionsProps) {\n const [selectedHost, setSelectedHost] = useState<string | null>(hostPresentation?.initialHostId ?? null);\n const selected = hostPresentation?.hosts.some(({ id }) => id === selectedHost) ? selectedHost : null;\n if (selectedHost !== selected) setSelectedHost(selected);\n const { sections, idle, timeline } = useMemo(() => {\n const all = sessionSections(workspaces, hostPresentation, selected);\n // A heading whose every computer has no session folds into one quiet group below the list.\n const isIdle = (section: (typeof all)[number]) =>\n section.workspace.kind !== 'session' && section.members.every((member) => member.sessions.length === 0);\n return {\n sections: all.filter((section) => !isIdle(section)),\n idle: all.filter((section) => section.showWorkspace && isIdle(section)),\n timeline: sessionTimeline(all),\n };\n }, [workspaces, hostPresentation, selected]);\n // An older phone app keeps no choice, so the group remembers it for this screen only.\n const [localOtherOpen, setLocalOtherOpen] = useState(false);\n const otherOpen = otherWorkspacesOpen ?? localOtherOpen;\n const [localView, setLocalView] = useState<NativeSessionView>('workspaces');\n const view = sessionView ?? localView;\n const [viewing, setViewing] = useState(false);\n const hosts = hostPresentation?.hosts ?? NO_HOSTS;\n const hostOf = (id: string) => hosts.find((host) => host.id === hostPresentation?.hostForId[id]);\n const stale = (id: string) => hostPresentation !== undefined && hostOf(id)?.status !== 'connected';\n const [choosing, setChoosing] = useState<readonly WebTemplateRailWorkspace[] | 'add' | 'general' | null>(null);\n const [chooseAction, setChooseAction] = useState<'create' | 'menu' | 'open'>('create');\n const [addHost, setAddHost] = useState<string | null>(null);\n const [sessionMenu, setSessionMenu] = useState<string | null>(null);\n const [workspaceMenu, setWorkspaceMenu] = useState<string | null>(null);\n const [groupsFor, setGroupsFor] = useState<string | null>(null);\n const [setupMenu, setSetupMenu] = useState<{ sessionId: string; setup: WebTemplateRailPendingSetup } | null>(null);\n const [adding, setAdding] = useState(false);\n const { addWorkspace, searchDirectories, listDirectory } = actions;\n const addActions =\n hosts.length > 0\n ? hosts.find(({ id }) => id === addHost)?.addWorkspaceActions\n : addWorkspace && searchDirectories && listDirectory\n ? { addWorkspace, searchDirectories, listDirectory }\n : undefined;\n const canAdd =\n hosts.length > 0 ? hosts.some((host) => host.addWorkspaceActions !== undefined) : addActions !== undefined;\n const beginAdd = useCallback(() => {\n if (hosts.length > 1) {\n setChoosing('add');\n return;\n }\n if (hosts.length === 1) {\n if (hosts[0]!.status !== 'connected') return;\n setAddHost(hosts[0]!.id);\n }\n setAdding(true);\n }, [hosts]);\n const generalAction = useRef(actions.createGeneralSession);\n useEffect(() => {\n generalAction.current = actions.createGeneralSession;\n }, [actions.createGeneralSession]);\n const canGeneral =\n hosts.length > 0\n ? hosts.some((host) => host.createGeneralSession !== undefined)\n : actions.createGeneralSession !== undefined;\n const beginGeneral = useCallback(() => {\n const host = hosts.find((host) => host.id === selected) ?? (hosts.length === 1 ? hosts[0] : undefined);\n if (host) {\n if (host.status === 'connected') host.createGeneralSession?.();\n } else if (hosts.length > 1) setChoosing('general');\n else generalAction.current?.();\n }, [hosts, selected]);\n const workspaceDisabled = hosts.length === 1 && hosts[0]!.status !== 'connected';\n const generalHost = hosts.find((host) => host.id === selected) ?? (hosts.length === 1 ? hosts[0] : undefined);\n const sessionDisabled =\n generalHost !== undefined && (generalHost.status !== 'connected' || generalHost.createGeneralSession === undefined);\n const createMenu = useMemo(\n () => (\n <SessionCreateMenu\n onCreateWorkspace={canAdd ? beginAdd : undefined}\n onCreateSession={canGeneral ? beginGeneral : undefined}\n workspaceDisabled={workspaceDisabled}\n sessionDisabled={sessionDisabled}\n />\n ),\n [canAdd, canGeneral, beginAdd, beginGeneral, workspaceDisabled, sessionDisabled],\n );\n const viewTitle = VIEWS.find(({ value }) => value === view)!.title;\n const headerAction = useMemo(\n () => (\n <View style={styles.titleActions}>\n <IconButton label={`View: ${viewTitle}`} onPress={() => setViewing(true)}>\n <SlidersIcon size={18} color=\"dim\" />\n </IconButton>\n {canGeneral || canAdd ? createMenu : null}\n </View>\n ),\n [viewTitle, canGeneral, canAdd, createMenu],\n );\n // The app owns the title, including when the list is empty.\n useEffect(() => {\n if (!setHeaderAction) return;\n setHeaderAction(headerAction);\n return () => setHeaderAction(null);\n }, [setHeaderAction, headerAction]);\n const sessions = workspaces.flatMap((workspace) => workspace.sessions).filter((session) => !stale(session.id));\n const { setSessionGroups, renameGroup, deleteGroup, removePendingSetup } = actions;\n // Older phone apps lack these, so their entries stay hidden rather than failing on tap.\n const groupActions =\n setSessionGroups && renameGroup && deleteGroup ? { setSessionGroups, renameGroup, deleteGroup } : undefined;\n const workspaceHeader = (section: (typeof sections)[number], quiet = false) => (\n <WorkspaceHeader\n workspace={{ ...section.workspace, available: section.members.some((member) => member.available) }}\n actions={actions}\n onOpen={\n openWorkspace && !section.workspace.legacy\n ? () => {\n const members = workspaces.filter((entry) => !entry.legacy && entry.name === section.workspace.name);\n if (hosts.length > 1 && members.length > 1) {\n setChooseAction('open');\n setChoosing(members);\n } else openWorkspace(section.workspace.id);\n }\n : undefined\n }\n onWorkspaceMenu={(entry) => {\n const members = workspaces.filter((workspace) => !workspace.legacy && workspace.name === entry.name);\n if (hosts.length > 1 && members.length > 1) {\n setChooseAction('menu');\n setChoosing(members);\n } else if (!stale(entry.id)) setWorkspaceMenu(entry.id);\n }}\n stale={stale(section.workspace.id)}\n merged={section.members.length > 1}\n quiet={quiet}\n onCreate={() => {\n // Always choose for a merged heading, even while viewing a filtered computer.\n const members = workspaces.filter((entry) => !entry.legacy && entry.name === section.workspace.name);\n if (hosts.length > 1 && members.length > 1) {\n setChooseAction('create');\n setChoosing(members);\n } else if (!stale(section.workspace.id)) actions.createSession(section.workspace.id);\n }}\n />\n );\n const sessionCard = (\n session: WebTemplateRailSession,\n hostLabel: string | undefined,\n flat?: { workspaceName?: string; age?: number },\n ) => (\n <View style={styles.sessionRow}>\n <SessionCard\n session={session}\n stale={stale(session.id)}\n hostLabel={hostLabel}\n {...(flat ? { flat: true, ...flat } : {})}\n onOpen={openSession}\n onMenu={(entry) => setSessionMenu(entry.id)}\n {...(removePendingSetup\n ? {\n onSetupMenu: (setup: WebTemplateRailPendingSetup) => setSetupMenu({ sessionId: session.id, setup }),\n }\n : {})}\n />\n </View>\n );\n const listEmpty = (\n <EmptyState\n title={selected ? 'No sessions on this computer.' : 'No sessions yet.'}\n description={\n canGeneral\n ? 'Start a session to work with Po. No workspace needed.'\n : 'Add a workspace to start working with Po.'\n }\n />\n );\n const listHeader = (\n <View style={styles.listHeader}>\n {/* The phone's host drawer picks the computer; the list only honours its initial choice. */}\n {hosts\n .filter((host) => host.status !== 'connected' && (selected === null || selected === host.id))\n .map((host) => (\n <InfoStrip\n key={host.id}\n message={\n host.status === 'update_required'\n ? `${host.label} needs an app update. Sessions are read-only.`\n : `${host.label} is offline. Showing last known sessions.`\n }\n actionLabel=\"Retry\"\n onAction={host.onRetry}\n />\n ))}\n {setHeaderAction ? null : headerAction}\n </View>\n );\n return (\n <>\n {view === 'sessions' ? (\n <SectionList\n style={styles.screen}\n contentContainerStyle={styles.listContent}\n contentInsetAdjustmentBehavior=\"automatic\"\n sections={timeline}\n keyExtractor={({ session }) => session.id}\n stickySectionHeadersEnabled={false}\n initialNumToRender={12}\n maxToRenderPerBatch={12}\n windowSize={5}\n renderSectionHeader={({ section }) => (\n <SectionLabel style={styles.timelineLabel}>{section.title}</SectionLabel>\n )}\n renderSectionFooter={({ section }) =>\n section === timeline[timeline.length - 1] ? null : <View style={styles.sectionGap} />\n }\n renderItem={({ item, section }) =>\n sessionCard(\n item.session,\n hosts.length > 1 && selected === null ? hostOf(item.session.id)?.label : undefined,\n {\n ...(item.workspaceName === undefined ? {} : { workspaceName: item.workspaceName }),\n // A waiting card shows its rose count instead.\n ...(section.key === 'recent' && item.session.lastActivityAt !== undefined\n ? { age: item.session.lastActivityAt }\n : {}),\n },\n )\n }\n ListEmptyComponent={listEmpty}\n ListHeaderComponent={listHeader}\n />\n ) : (\n <SectionList\n style={styles.screen}\n contentContainerStyle={styles.listContent}\n contentInsetAdjustmentBehavior=\"automatic\"\n sections={sections}\n keyExtractor={(session) => session.id}\n stickySectionHeadersEnabled={false}\n initialNumToRender={12}\n maxToRenderPerBatch={12}\n windowSize={5}\n renderSectionHeader={({ section }) =>\n section.workspace.kind === 'session' ? null : (\n <>\n {section.showWorkspace ? workspaceHeader(section) : null}\n <View style={styles.hostGroup}>\n {/* One quiet row names the computer and path once, above its sessions. */}\n <View style={styles.hostRow} accessibilityRole=\"header\">\n {hosts.length > 1 && selected === null && hostOf(section.workspace.id) ? (\n <>\n <MonitorIcon size={14} color=\"dim\" />\n <Text style={styles.hostLabel} numberOfLines={1}>\n {hostOf(section.workspace.id)!.label} ·\n </Text>\n </>\n ) : null}\n <Text style={styles.groupRoot} numberOfLines={1} ellipsizeMode=\"middle\">\n {section.workspace.root}\n </Text>\n </View>\n {!section.workspace.available ? <Text style={styles.unavailable}>Workspace unavailable</Text> : null}\n {section.data.length === 0 ? (\n <Text style={styles.noSessions}>No sessions yet. Start or resume one.</Text>\n ) : null}\n </View>\n </>\n )\n }\n renderSectionFooter={({ section }) => {\n const next = sections[sections.indexOf(section) + 1];\n // A computer subgroup sits closer to its siblings than the next workspace does.\n return (\n <View style={next === undefined ? undefined : next.showWorkspace ? styles.sectionGap : styles.hostGap} />\n );\n }}\n renderItem={({ item: session, section }) =>\n sessionCard(\n session,\n section.workspace.kind === 'session' && hosts.length > 1 && selected === null\n ? hostOf(session.id)?.label\n : undefined,\n )\n }\n ListFooterComponent={\n idle.length > 0 ? (\n <OtherWorkspaces\n count={idle.length}\n open={otherOpen}\n afterList={sections.length > 0}\n onToggle={() => {\n setLocalOtherOpen(!otherOpen);\n setOtherWorkspacesOpen?.(!otherOpen);\n }}\n >\n {idle.map((section) => (\n <View key={section.key} style={styles.otherRow}>\n {workspaceHeader(section, true)}\n {!section.members.some((member) => member.available) ? (\n <Text style={styles.unavailable}>Workspace unavailable</Text>\n ) : null}\n </View>\n ))}\n </OtherWorkspaces>\n ) : undefined\n }\n ListEmptyComponent={listEmpty}\n ListHeaderComponent={listHeader}\n />\n )}\n <SessionMenuSheet\n session={sessions.find((session) => session.id === sessionMenu) ?? null}\n actions={actions}\n {...(groupActions ? { onGroups: (session: WebTemplateRailSession) => setGroupsFor(session.id) } : {})}\n onClose={() => setSessionMenu(null)}\n />\n <WorkspaceMenuSheet\n workspace={workspaces.find((workspace) => workspace.id === workspaceMenu && !stale(workspace.id)) ?? null}\n actions={actions}\n onClose={() => setWorkspaceMenu(null)}\n />\n {groupActions ? (\n <SessionGroupsSheet\n session={sessions.find((session) => session.id === groupsFor) ?? null}\n sessions={sessions}\n actions={groupActions}\n onClose={() => setGroupsFor(null)}\n />\n ) : null}\n {removePendingSetup ? (\n <SetupMenuSheet target={setupMenu} removePendingSetup={removePendingSetup} onClose={() => setSetupMenu(null)} />\n ) : null}\n {addActions && (hosts.length === 0 || hosts.find(({ id }) => id === addHost)?.status === 'connected') ? (\n <AddWorkspaceSheet\n open={adding}\n actions={addActions}\n onClose={() => {\n setAdding(false);\n setAddHost(null);\n }}\n />\n ) : null}\n <Sheet\n open={choosing !== null}\n onOpenChange={(open) => {\n if (!open) setChoosing(null);\n }}\n >\n <SheetContent>\n <SheetHeader>\n <SheetTitle>Which computer?</SheetTitle>\n </SheetHeader>\n <SheetBody>\n {choosing === 'general'\n ? hosts.map((host) => (\n <Button\n key={host.id}\n variant=\"ghost\"\n disabled={host.status !== 'connected' || !host.createGeneralSession}\n onPress={() => {\n setChoosing(null);\n host.createGeneralSession?.();\n }}\n >\n {host.label}\n {host.status !== 'connected' ? UNAVAILABLE_LABEL : ''}\n </Button>\n ))\n : choosing === 'add'\n ? hosts.map((host) => (\n <Button\n key={host.id}\n variant=\"ghost\"\n disabled={host.status !== 'connected' || !host.addWorkspaceActions}\n onPress={() => {\n setAddHost(host.id);\n setChoosing(null);\n setAdding(true);\n }}\n >\n {host.label}\n {host.status !== 'connected' ? UNAVAILABLE_LABEL : ''}\n </Button>\n ))\n : choosing?.map((workspace) => (\n <Button\n key={workspace.id}\n variant=\"ghost\"\n disabled={chooseAction !== 'open' && (stale(workspace.id) || !workspace.available)}\n onPress={() => {\n setChoosing(null);\n if (chooseAction === 'open') openWorkspace?.(workspace.id);\n else if (chooseAction === 'menu') setWorkspaceMenu(workspace.id);\n else actions.createSession(workspace.id);\n }}\n >\n {hostOf(workspace.id)?.label ?? workspace.name} · {workspace.root}\n {stale(workspace.id) ? UNAVAILABLE_LABEL : ''}\n </Button>\n ))}\n </SheetBody>\n </SheetContent>\n </Sheet>\n <SessionViewSheet\n open={viewing}\n view={view}\n onClose={() => setViewing(false)}\n onChoose={(value) => {\n setLocalView(value);\n setSessionView?.(value);\n setViewing(false);\n }}\n />\n </>\n );\n}\n\n/** The View sheet: how the Sessions screen lists its sessions. */\nexport function SessionViewSheet({\n open,\n view,\n onClose,\n onChoose,\n}: {\n open: boolean;\n view: NativeSessionView;\n onClose: () => void;\n onChoose: (view: NativeSessionView) => void;\n}) {\n return (\n <Sheet\n open={open}\n onOpenChange={(next) => {\n if (!next) onClose();\n }}\n >\n <SheetContent>\n <SheetHeader>\n <SheetTitle>View</SheetTitle>\n </SheetHeader>\n <SheetBody>\n <View style={styles.viewOptions}>\n {VIEWS.map(({ value, title, description, Icon }) => (\n <ListRow\n key={value}\n title={title}\n description={description}\n leading={<Icon size={20} color={value === view ? 'green' : 'dim'} />}\n trailing={value === view ? <CheckIcon size={18} color=\"green\" /> : null}\n selected={value === view}\n disclosure={false}\n style={[styles.viewOption, value === view && styles.viewOptionSelected]}\n onPress={() => onChoose(value)}\n />\n ))}\n </View>\n </SheetBody>\n </SheetContent>\n </Sheet>\n );\n}\n\nconst styles = StyleSheet.create((theme) => {\n const sans = fontOf(theme.fontFamily.sans);\n const text = (size: 'xs' | 'sm' | 'base' | 'lg', color: string) => ({\n fontFamily: sans,\n fontSize: theme.fontSize[size],\n lineHeight: theme.lineHeight[size],\n color,\n });\n return {\n // The cockpit's rail surface: this screen is the phone's rail.\n screen: { flex: 1, backgroundColor: theme.colors.rail },\n content: { padding: theme.spacing(4), gap: theme.spacing(6) },\n listContent: { padding: theme.spacing(4) },\n listHeader: { gap: theme.spacing(3), paddingBottom: theme.spacing(4) },\n titleActions: { flexDirection: 'row', alignItems: 'center' },\n timelineLabel: { paddingHorizontal: theme.spacing(1), paddingBottom: theme.spacing(1) },\n viewOptions: { gap: theme.spacing(2) },\n viewOption: { borderRadius: theme.borderRadius.lg, borderWidth: 1, borderColor: theme.colors['border-soft'] },\n viewOptionSelected: { borderColor: theme.colors['edge-green'] },\n sectionGap: { height: theme.spacing(6) },\n sessionRow: { gap: theme.spacing(1), paddingTop: theme.spacing(1) },\n group: { gap: theme.spacing(1) },\n // The content gap already spaces the heading from the first group, so it pulls up into it.\n railHead: {\n flexDirection: 'row',\n alignItems: 'center',\n paddingHorizontal: theme.spacing(1),\n marginBottom: -theme.spacing(4),\n },\n listRailHead: { marginBottom: theme.spacing(2) },\n railTitle: { ...text('lg', theme.colors.hi), fontWeight: theme.fontWeight.semibold, flex: 1 },\n groupHead: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: theme.spacing(2),\n paddingHorizontal: theme.spacing(1),\n paddingBottom: theme.spacing(2),\n },\n groupText: { flex: 1, minWidth: 0 },\n workspaceLink: { minHeight: 44, justifyContent: 'center' },\n groupName: { ...text('lg', theme.colors.hi), fontWeight: theme.fontWeight.semibold },\n groupRoot: { ...text('sm', theme.colors.dim), fontFamily: fontOf(theme.fontFamily.mono), flexShrink: 1 },\n hostGroup: { gap: theme.spacing(1), paddingHorizontal: theme.spacing(1), paddingBottom: theme.spacing(1) },\n hostGap: { height: theme.spacing(3) },\n hostRow: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: theme.spacing(1.5),\n paddingBottom: theme.spacing(2),\n borderBottomWidth: 1,\n borderColor: theme.colors['border-soft'],\n },\n // The host name keeps its room; the path gives way first.\n hostLabel: { ...text('sm', theme.colors.dim), flexShrink: 0, maxWidth: '60%' },\n noSessions: {\n ...text('sm', theme.colors.dim),\n paddingHorizontal: theme.spacing(1),\n paddingBottom: theme.spacing(2),\n },\n unavailable: { ...text('sm', theme.colors.red), paddingHorizontal: theme.spacing(1) },\n // Workspaces without sessions, folded below the list into one quiet row.\n other: { gap: theme.spacing(1) },\n otherAfterList: { marginTop: theme.spacing(6) },\n otherHead: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: theme.spacing(2),\n minHeight: 44,\n paddingHorizontal: theme.spacing(1),\n borderRadius: theme.borderRadius.lg,\n },\n otherLabel: { ...text('lg', theme.colors.hi), fontWeight: theme.fontWeight.semibold, flex: 1 },\n // A neutral count, apart from the rose counts of things waiting on the person.\n otherCount: {\n ...text('xs', theme.colors.dim),\n minWidth: 22,\n paddingHorizontal: theme.spacing(1.5),\n borderRadius: 11,\n overflow: 'hidden',\n textAlign: 'center',\n backgroundColor: theme.colors.panel,\n },\n otherRow: { marginLeft: theme.spacing(4) },\n quietHead: { paddingBottom: 0 },\n quietName: { ...text('base', theme.colors.hi), fontWeight: theme.fontWeight.medium },\n // The cockpit's dashed empty card.\n empty: {\n gap: theme.spacing(3),\n paddingHorizontal: theme.spacing(4),\n paddingVertical: theme.spacing(5),\n borderRadius: theme.borderRadius.lg,\n borderWidth: 1,\n borderStyle: 'dashed',\n borderColor: theme.colors.border,\n },\n emptyText: text('sm', theme.colors.dim),\n emptyButton: { justifyContent: 'flex-start', backgroundColor: theme.colors.panel },\n card: {\n gap: theme.spacing(2),\n padding: theme.spacing(3),\n borderRadius: theme.borderRadius.lg,\n borderWidth: 1,\n // Flat like the cockpit card: no fill or edge until pressed or active.\n borderColor: 'transparent',\n },\n cardPressed: { backgroundColor: theme.colors.panel },\n cardActive: { backgroundColor: theme.colors['tint-green'], borderColor: theme.colors['edge-green'] },\n nested: { marginLeft: theme.spacing(5) },\n iconButton: {\n width: 44,\n height: 44,\n borderRadius: theme.borderRadius.lg,\n alignItems: 'center',\n justifyContent: 'center',\n },\n iconPressed: { backgroundColor: theme.colors.panel },\n cardHead: { flexDirection: 'row', alignItems: 'flex-start', gap: theme.spacing(2.5) },\n avatar: {\n // Small enough to share the status line, so the card stays two lines tall.\n width: 24,\n height: 24,\n borderRadius: 12,\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: theme.colors['tint-green'],\n },\n initials: { ...text('xs', theme.colors.green), fontWeight: theme.fontWeight.semibold },\n nameBadge: { borderColor: theme.colors.bg },\n cardText: { flex: 1, minWidth: 0, gap: theme.spacing(1) },\n nameRow: { flexDirection: 'row', alignItems: 'center', gap: theme.spacing(1.5) },\n name: { ...text('base', theme.colors.hi), fontWeight: theme.fontWeight.semibold, flexShrink: 1 },\n detailRow: { flexDirection: 'row', alignItems: 'center', gap: theme.spacing(2) },\n // On a narrow phone the branch wraps under the status rather than being cut.\n statusRow: {\n flex: 1,\n minWidth: 0,\n flexDirection: 'row',\n flexWrap: 'wrap',\n alignItems: 'center',\n columnGap: theme.spacing(1.5),\n rowGap: 2,\n },\n status: (tone: StatusTone) => ({\n ...text('sm', tone === 'failed' ? theme.colors.red : tone === 'running' ? theme.colors.yellow : theme.colors.dim),\n flexShrink: 1,\n }),\n branchRow: { flexDirection: 'row', alignItems: 'center', gap: theme.spacing(1) },\n branch: { ...text('sm', theme.colors.dim), fontFamily: fontOf(theme.fontFamily.mono), flexShrink: 1 },\n modified: text('sm', theme.colors.yellow),\n age: { ...text('xs', theme.colors.dim), marginLeft: 'auto' },\n groupsRow: { flexDirection: 'row', alignItems: 'flex-start', gap: theme.spacing(1.5) },\n groups: { flex: 1, flexDirection: 'row', flexWrap: 'wrap', gap: theme.spacing(1) },\n // The cockpit's pending setup panel: indented, soft edge, panel fill.\n setup: {\n gap: theme.spacing(1),\n marginLeft: theme.spacing(4),\n padding: theme.spacing(3),\n borderRadius: theme.borderRadius.md,\n borderWidth: 1,\n borderColor: theme.colors['border-soft'],\n backgroundColor: theme.colors.panel,\n },\n setupStatus: (failed: boolean) => text('sm', failed ? theme.colors.red : theme.colors.dim),\n // The kebab's 44 point target sits inside the panel's padding rather than growing the row.\n setupHead: { flexDirection: 'row', alignItems: 'center', gap: theme.spacing(2), marginVertical: -theme.spacing(2) },\n setupName: { flex: 1 },\n recovery: text('sm', theme.colors.dim),\n error: text('sm', theme.colors.red),\n };\n});\n","import type { NativeTemplateFile } from '@agimon-ai/po-core/native';\n\nimport { AdvancedSessions } from '../_components/AdvancedSessions.native';\n\n/** The phone half of Advanced. Screens it leaves out stay the app's own. */\nexport const advancedNativeTemplate = {\n label: 'Advanced',\n description: 'Workspace-grouped session cards, matching the cockpit rail.',\n contractVersion: 1,\n screens: { sessions: AdvancedSessions },\n} satisfies NativeTemplateFile;\n","import { defineNativeTemplate } from '@agimon-ai/po-core/native';\n\nimport { advancedNativeTemplate } from '../../(frontend)/template/_lib/nativeDefinition.native';\n\nexport default defineNativeTemplate(advancedNativeTemplate);\n","import { defineNativeTemplate } from '@agimon-ai/po-core/native';\n\nimport { advancedNativeTemplate } from '../../../(frontend)/template/_lib/nativeDefinition.native';\n\nexport default defineNativeTemplate(advancedNativeTemplate);\n","import { defineNativeTemplate } from '@agimon-ai/po-core/native';\n\nimport { advancedNativeTemplate } from '../../../../(frontend)/template/_lib/nativeDefinition.native';\n\nexport default defineNativeTemplate(advancedNativeTemplate);\n","// Generated by @agimon-ai/po-build. Do not edit by hand.\nimport { defineNativePlugin, type WebPluginContributions } from '@agimon-ai/po-core/native';\n\nimport templatePoTemplateAdvanced from '../src/extensions/(frontend)/template/po-template-advanced.native';\nimport templatePoTemplateAdvanced2 from '../src/extensions/workspaces/(frontend)/template/po-template-advanced.native';\nimport templatePoTemplateAdvanced3 from '../src/extensions/workspaces/sessions/(frontend)/template/po-template-advanced.native';\n\nconst via = <T>(identity: Record<string, unknown>, value: unknown): T =>\n (value === undefined ? undefined : { ...identity, ...(value as object) }) as T;\n\nexport const nativePlugin = defineNativePlugin({\n id: 'template-advanced',\n global: {\n get nativeTemplates(): WebPluginContributions['nativeTemplates'] { return [via({ id: 'po-template-advanced' }, templatePoTemplateAdvanced)]; },\n },\n workspace: {\n get nativeTemplates(): WebPluginContributions['nativeTemplates'] { return [via({ id: 'po-template-advanced' }, templatePoTemplateAdvanced2)]; },\n },\n session: {\n get nativeTemplates(): WebPluginContributions['nativeTemplates'] { return [via({ id: 'po-template-advanced' }, templatePoTemplateAdvanced3)]; },\n },\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"native.mjs","names":["sessionTimeline","NativeTemplateSessionsActions","WebTemplateRailDirectoryListing","WebTemplateRailPendingSetup","WebTemplateRailSession","WebTemplateRailWorkspace","Button","CheckIcon","EditIcon","FolderIcon","fontOf","Input","Label","ListRow","PlusIcon","Sheet","SheetBody","SheetContent","SheetHeader","SheetTitle","TrashIcon","Spinner","Textarea","ReactNode","useEffect","useState","StyleSheet","createProblem","MAX_GROUPS","sessionGroupOptions","Item","label","hint","danger","disabled","onPress","Items","items","styles","list","map","item","index","pressed","divider","itemLabel","meta","SessionStep","SessionMenuSheet","session","actions","onGroups","onClose","step","setStep","draft","setDraft","busy","setBusy","error","setError","close","name","remove","result","removeSession","id","undefined","open","body","trim","renameSession","text","strong","resumeSession","restartBlocked","restarting","restartSession","WorkspaceMenuSheet","workspace","confirming","setConfirming","deleteWorkspace","mono","root","available","resumeInWorkspace","SessionGroupsActions","Required","Pick","SessionGroupsSheet","sessions","forId","setForId","value","setValue","query","setQuery","renaming","setRenaming","group","deleting","setDeleting","groups","rowCancel","run","work","Promise","done","typed","options","shown","filter","includes","canCreate","some","problem","length","toggle","create","renameConfirm","to","renameGroup","current","Set","deleteConfirm","deleteGroup","on","total","members","reach","String","edge","rowEdit","rowActions","join","check","setSessionGroups","SetupMenuSheet","target","removePendingSetup","sessionId","setup","NonNullable","SUGGESTION_DEBOUNCE_MS","TRAILING_SEPARATORS","folderName","path","trimmed","replace","slice","lastIndexOf","AddWorkspaceActions","FolderBrowser","start","listDirectory","onSelect","setTarget","listing","setListing","stale","then","parent","browserHead","inset","directories","directory","AdmissionRow","instructions","workspaceId","checked","AddWorkspaceView","rows","discovering","manual","canSubmit","onPathChange","onNameChange","onInstructionsChange","onBrowse","onToggle","onSubmit","folderContent","count","row","retry","next","field","pathRow","admissionPathInput","entry","added","unchecked","admissionRow","AddWorkspaceSheet","setName","nameEdited","setNameEdited","setPath","setInstructions","discoveryRevision","setDiscoveryRevision","browsing","setBrowsing","suggestions","setSuggestions","discovery","setDiscovery","searchDirectories","discoverWorkspaces","addDeclaredWorkspaces","supportsDiscovery","shownName","trimmedPath","timer","setTimeout","declarations","clearTimeout","found","changePath","revision","finish","submit","selected","results","names","updated","find","addWorkspace","startsWith","theme","sans","fontFamily","size","color","fontSize","lineHeight","gap","spacing","uni__dependencies","borderRadius","lg","borderWidth","borderColor","colors","overflow","minHeight","justifyContent","paddingHorizontal","paddingVertical","borderTopWidth","hairlineWidth","borderTopColor","flexDirection","alignItems","pathInput","flex","minWidth","borderBottomWidth","borderBottomColor","width","height","dim","flexShrink","flexGrow","paddingBottom","enabled","magenta","faint","backgroundColor","red","hi","fontWeight","medium","lineHeightRelaxed","base","semibold","sm","styles","NativeSessionView","NativeTemplateSessionsActions","NativeTemplateSessionsProps","WebTemplateRailPendingSetup","WebTemplateRailSession","WebTemplateRailWorkspace","ActivityIcon","AlertIcon","Badge","BranchIcon","Button","CheckIcon","ChevronDownIcon","ChevronRightIcon","CountBadge","DropdownMenu","DropdownMenuContent","DropdownMenuItem","DropdownMenuTrigger","EmptyState","FolderIcon","fontOf","ForkIcon","KebabIcon","HostTag","InfoStrip","ListRow","LiveDurationReading","MessageIcon","SectionLabel","Sheet","SheetContent","SheetHeader","SheetTitle","SheetBody","LiveDuration","MonitorIcon","PlusIcon","SlidersIcon","Spinner","UsersIcon","ReactNode","useCallback","useEffect","useMemo","useRef","useState","StyleSheet","sessionTimeline","timelineOf","AddWorkspaceSheet","SessionGroupsSheet","SessionMenuSheet","SetupMenuSheet","WorkspaceMenuSheet","NO_HOSTS","NonNullable","UNAVAILABLE_LABEL","MINUTE_MS","VIEWS","value","title","description","Icon","const","StatusTone","ageText","since","now","elapsed","Math","max","minutes","floor","text","String","nextMs","SessionAge","clock","styles","age","statusTone","status","startsWith","includes","IconButton","label","onPress","children","disabled","pressed","iconButton","iconPressed","SessionCard","session","onOpen","onMenu","onSetupMenu","hostLabel","stale","flat","workspaceName","id","setup","tone","name","markColor","active","waiting","waitingCount","awaitingInput","card","nested","cardPressed","cardActive","cardHead","cardText","nameRow","provenance","nameBadge","undefined","detailRow","statusRow","restarting","git","branchRow","branch","dirty","modified","profile","avatar","initials","groups","length","groupsRow","map","group","error","pendingSetups","setupHead","setupName","setupStatus","failed","recovery","WorkspaceHeader","workspace","actions","onWorkspaceMenu","onCreate","merged","quiet","canCreate","legacy","available","create","createSession","row","groupText","workspaceLink","quietName","groupName","groupHead","quietHead","OtherWorkspaces","count","open","afterList","onToggle","other","otherAfterList","expanded","otherHead","otherLabel","otherCount","sessionSections","workspaces","presentation","selectedHost","filter","hosts","some","visible","owner","hostForId","sections","key","members","data","item","kind","sessions","existing","find","section","push","flatMap","showWorkspace","busy","index","ReturnType","SessionCreateMenu","onCreateWorkspace","onCreateSession","workspaceDisabled","sessionDisabled","defaultOpen","AdvancedSessions","openSession","openWorkspace","setHeaderAction","hostPresentation","otherWorkspacesOpen","setOtherWorkspacesOpen","sessionView","setSessionView","setSelectedHost","initialHostId","selected","idle","timeline","all","isIdle","every","member","localOtherOpen","setLocalOtherOpen","otherOpen","localView","setLocalView","view","viewing","setViewing","hostOf","host","choosing","setChoosing","chooseAction","setChooseAction","addHost","setAddHost","sessionMenu","setSessionMenu","workspaceMenu","setWorkspaceMenu","groupsFor","setGroupsFor","setupMenu","setSetupMenu","sessionId","adding","setAdding","addWorkspace","searchDirectories","listDirectory","addActions","addWorkspaceActions","canAdd","beginAdd","generalAction","createGeneralSession","current","canGeneral","beginGeneral","generalHost","createMenu","viewTitle","headerAction","titleActions","setSessionGroups","renameGroup","deleteGroup","removePendingSetup","groupActions","workspaceHeader","entry","sessionCard","sessionRow","listEmpty","listHeader","onRetry","screen","listContent","timelineLabel","sectionGap","lastActivityAt","hostGroup","hostRow","groupRoot","root","unavailable","noSessions","next","indexOf","hostGap","otherRow","onGroups","SessionViewSheet","onClose","onChoose","viewOptions","viewOption","viewOptionSelected","theme","sans","fontFamily","size","color","fontSize","lineHeight","flex","backgroundColor","colors","rail","uni__dependencies","content","padding","spacing","gap","paddingBottom","flexDirection","alignItems","paddingHorizontal","borderRadius","lg","borderWidth","borderColor","height","paddingTop","railHead","marginBottom","listRailHead","railTitle","hi","fontWeight","semibold","minWidth","minHeight","justifyContent","dim","mono","flexShrink","borderBottomWidth","maxWidth","red","marginTop","overflow","textAlign","panel","marginLeft","medium","empty","paddingVertical","borderStyle","border","emptyText","emptyButton","width","green","bg","flexWrap","columnGap","rowGap","yellow","md","marginVertical","timelineOf","templatePoTemplateAdvanced","templatePoTemplateAdvanced2","templatePoTemplateAdvanced3"],"sources":["../../src/extensions/(frontend)/template/_lib/sessionTimeline.ts","../../src/extensions/(frontend)/template/_lib/sessionGroups.ts","../../src/extensions/(frontend)/template/_components/AdvancedSessionMenus.native.tsx","../../src/extensions/(frontend)/template/_components/AdvancedSessions.native.tsx","../../src/extensions/(frontend)/template/_lib/nativeDefinition.native.ts","../../src/extensions/(frontend)/template/po-template-advanced.native.ts","../../src/extensions/workspaces/(frontend)/template/po-template-advanced.native.ts","../../src/extensions/workspaces/sessions/(frontend)/template/po-template-advanced.native.ts","../../generated/native.ts"],"sourcesContent":["import type { WebTemplateRailSession } from '@agimon-ai/po-core/web';\n\n/** A question, a pending approval, or background work blocks on the person. */\nconst needsYou = (session: WebTemplateRailSession): boolean => session.awaitingInput || (session.waitingCount ?? 0) > 0;\n\n/** The Sessions view: what waits on the person, then the rest, each newest change first; no time sorts last. */\nexport function sessionTimeline<T extends { session: WebTemplateRailSession }>(items: readonly T[]) {\n const sorted = [...items].sort((a, b) => (b.session.lastActivityAt ?? 0) - (a.session.lastActivityAt ?? 0));\n return [\n { key: 'needs', title: 'Needs you', data: sorted.filter(({ session }) => needsYou(session)) },\n { key: 'recent', title: 'Recent', data: sorted.filter(({ session }) => !needsYou(session)) },\n ].filter((section) => section.data.length > 0);\n}\n","import type { WebTemplateRailSession } from '@agimon-ai/po-core/web';\n\n/** Mirrors the server's limits so the groups editor can say no before a round trip. */\nexport const MAX_GROUPS = 8;\nexport const MAX_GROUP_LENGTH = 32;\n\nexport interface SessionGroupOption {\n name: string;\n /** Other sessions in the group; the edited session is left out, since its check says it. */\n members: readonly string[];\n}\n\n/** Every group some session uses, in rail order, with the other sessions in it. */\nexport function sessionGroupOptions(\n sessions: readonly WebTemplateRailSession[],\n editedId: string,\n extra: readonly string[] = [],\n): SessionGroupOption[] {\n const names = [...new Set([...sessions.flatMap((session) => session.groups ?? []), ...extra])];\n return names.map((name) => ({\n name,\n members: sessions\n .filter((session) => session.id !== editedId && session.groups?.includes(name) === true)\n .map((session) => session.name || 'Untitled'),\n }));\n}\n\n/** Why a typed name cannot become a group, or undefined when it can. */\nexport function createProblem(name: string, count: number): string | undefined {\n if (name.length > MAX_GROUP_LENGTH) return `group names are at most ${String(MAX_GROUP_LENGTH)} characters.`;\n if (count >= MAX_GROUPS) return `a session can belong to at most ${String(MAX_GROUPS)} groups.`;\n return undefined;\n}\n","import type {\n NativeTemplateSessionsActions,\n WebTemplateRailDirectoryListing,\n WebTemplateRailPendingSetup,\n WebTemplateRailSession,\n WebTemplateRailWorkspace,\n} from '@agimon-ai/po-core/native';\nimport {\n Button,\n CheckIcon,\n EditIcon,\n FolderIcon,\n fontOf,\n Input,\n Label,\n ListRow,\n PlusIcon,\n Sheet,\n SheetBody,\n SheetContent,\n SheetHeader,\n SheetTitle,\n TrashIcon,\n Spinner,\n Textarea,\n} from '@agimon-ai/po-native-components';\nimport type { ReactNode } from 'react';\nimport { useEffect, useState } from 'react';\nimport { Pressable, Text, View } from 'react-native';\nimport { StyleSheet } from 'react-native-unistyles';\n\nimport { createProblem, MAX_GROUPS, sessionGroupOptions } from '../_lib/sessionGroups';\n\ninterface Item {\n label: string;\n hint?: string;\n danger?: boolean;\n disabled?: boolean;\n onPress: () => void;\n}\n\nfunction Items({ items }: { items: readonly Item[] }) {\n return (\n <View style={styles.list}>\n {items.map((item, index) => (\n <Pressable\n key={item.label}\n accessibilityRole=\"button\"\n accessibilityState={{ disabled: item.disabled === true }}\n disabled={item.disabled}\n onPress={item.onPress}\n style={({ pressed }) => [styles.item, index > 0 && styles.divider, pressed && styles.pressed]}\n >\n <Text style={styles.itemLabel(item.danger === true, item.disabled === true)}>{item.label}</Text>\n {item.hint ? <Text style={styles.meta}>{item.hint}</Text> : null}\n </Pressable>\n ))}\n </View>\n );\n}\n\ntype SessionStep = 'menu' | 'rename' | 'confirm';\n\n/** A session card's ⋮: the cockpit's rename, groups, resume, restart and remove, with remove confirmed first. */\nexport function SessionMenuSheet({\n session,\n actions,\n onGroups,\n onClose,\n}: {\n session: WebTemplateRailSession | null;\n actions: NativeTemplateSessionsActions;\n /** Opens the groups sheet; absent when the phone app cannot change groups. */\n onGroups?: (session: WebTemplateRailSession) => void;\n onClose: () => void;\n}) {\n const [step, setStep] = useState<SessionStep>('menu');\n const [draft, setDraft] = useState('');\n const [busy, setBusy] = useState(false);\n const [error, setError] = useState('');\n const close = () => {\n if (busy) return;\n setStep('menu');\n setError('');\n onClose();\n };\n const name = session?.name || 'Untitled';\n const remove = async () => {\n if (session === null) return;\n setBusy(true);\n setError('');\n const result = await actions.removeSession(session.id);\n setBusy(false);\n if (result !== undefined) {\n setError(result.error);\n return;\n }\n setStep('menu');\n onClose();\n };\n return (\n <Sheet open={session !== null} onOpenChange={(open) => !open && close()}>\n <SheetContent>\n {session === null ? null : step === 'rename' ? (\n <>\n <SheetHeader>\n <SheetTitle>Rename session</SheetTitle>\n </SheetHeader>\n <SheetBody style={styles.body}>\n <Input value={draft} onChangeText={setDraft} autoFocus accessibilityLabel=\"Session name\" />\n <Button\n variant=\"primary\"\n size=\"lg\"\n disabled={draft.trim() === ''}\n onPress={() => {\n actions.renameSession(session.id, draft);\n close();\n }}\n >\n Rename\n </Button>\n </SheetBody>\n </>\n ) : step === 'confirm' ? (\n <>\n <SheetHeader>\n <SheetTitle>Remove session</SheetTitle>\n </SheetHeader>\n <SheetBody style={styles.body}>\n <Text style={styles.text}>\n This stops <Text style={styles.strong}>{name}</Text> and removes it from the list. Anything it is\n running ends now. You can restore it for 7 days.\n </Text>\n {error ? (\n <Text style={styles.error} accessibilityRole=\"alert\">\n {error}\n </Text>\n ) : null}\n <Button variant=\"danger\" size=\"lg\" loading={busy} loadingLabel=\"Removing\" onPress={() => void remove()}>\n Remove\n </Button>\n <Button variant=\"ghost\" size=\"lg\" disabled={busy} onPress={() => setStep('menu')}>\n Cancel\n </Button>\n </SheetBody>\n </>\n ) : (\n <>\n <SheetHeader>\n <SheetTitle numberOfLines={1}>{name}</SheetTitle>\n </SheetHeader>\n <SheetBody style={styles.body}>\n <Items\n items={[\n {\n label: 'Rename',\n onPress: () => {\n setDraft(session.name);\n setStep('rename');\n },\n },\n ...(onGroups\n ? [\n {\n label: 'Groups',\n hint: 'Sessions in a group can message each other',\n onPress: () => {\n close();\n onGroups(session);\n },\n },\n ]\n : []),\n {\n label: 'Resume',\n hint: 'Open an earlier conversation in this session',\n onPress: () => {\n close();\n actions.resumeSession(session.id);\n },\n },\n {\n label: 'Restart',\n hint: session.restartBlocked ? 'Not while a turn runs' : 'Reloads extensions',\n disabled: session.restarting || session.restartBlocked === true,\n onPress: () => {\n close();\n actions.restartSession(session.id);\n },\n },\n { label: 'Remove', danger: true, onPress: () => setStep('confirm') },\n ]}\n />\n </SheetBody>\n </>\n )}\n </SheetContent>\n </Sheet>\n );\n}\n\n/** A workspace's ⋮: resume a saved conversation here, or remove the workspace after confirming. */\nexport function WorkspaceMenuSheet({\n workspace,\n actions,\n onClose,\n}: {\n workspace: WebTemplateRailWorkspace | null;\n actions: NativeTemplateSessionsActions;\n onClose: () => void;\n}) {\n const [confirming, setConfirming] = useState(false);\n const [busy, setBusy] = useState(false);\n const [error, setError] = useState('');\n const close = () => {\n if (busy) return;\n setConfirming(false);\n setError('');\n onClose();\n };\n const remove = async () => {\n if (workspace === null) return;\n setBusy(true);\n setError('');\n const result = await actions.deleteWorkspace(workspace.id);\n setBusy(false);\n if (result !== undefined) {\n setError(result.error);\n return;\n }\n setConfirming(false);\n onClose();\n };\n return (\n <Sheet open={workspace !== null} onOpenChange={(open) => !open && close()}>\n <SheetContent>\n {workspace === null ? null : confirming ? (\n <>\n <SheetHeader>\n <SheetTitle>Remove workspace</SheetTitle>\n </SheetHeader>\n <SheetBody style={styles.body}>\n <Text style={styles.text}>\n This removes <Text style={styles.strong}>{workspace.name}</Text> and all its sessions from Po. Running\n work will stop. Files at <Text style={styles.mono}>{workspace.root}</Text> stay on disk.\n </Text>\n {error ? (\n <Text style={styles.error} accessibilityRole=\"alert\">\n {error}\n </Text>\n ) : null}\n <Button variant=\"danger\" size=\"lg\" loading={busy} loadingLabel=\"Removing\" onPress={() => void remove()}>\n Remove\n </Button>\n <Button variant=\"ghost\" size=\"lg\" disabled={busy} onPress={() => setConfirming(false)}>\n Cancel\n </Button>\n </SheetBody>\n </>\n ) : (\n <>\n <SheetHeader>\n <SheetTitle numberOfLines={1}>{workspace.name}</SheetTitle>\n </SheetHeader>\n <SheetBody style={styles.body}>\n <Items\n items={[\n {\n label: 'Resume session',\n disabled: !workspace.available,\n onPress: () => {\n close();\n actions.resumeInWorkspace(workspace.id);\n },\n },\n { label: 'Remove workspace', danger: true, onPress: () => setConfirming(true) },\n ]}\n />\n </SheetBody>\n </>\n )}\n </SheetContent>\n </Sheet>\n );\n}\n\nexport type SessionGroupsActions = Required<\n Pick<NativeTemplateSessionsActions, 'setSessionGroups' | 'renameGroup' | 'deleteGroup'>\n>;\n\n/**\n * The cockpit's groups dialog as a sheet. Rows check groups on and off and the typed name can\n * become a new one; rename and delete act on every session in the group at once, the checks wait for Save.\n */\nexport function SessionGroupsSheet({\n session,\n sessions,\n actions,\n onClose,\n}: {\n session: WebTemplateRailSession | null;\n /** Every listed session, which is where the known groups and their members come from. */\n sessions: readonly WebTemplateRailSession[];\n actions: SessionGroupsActions;\n onClose: () => void;\n}) {\n const [forId, setForId] = useState<string | null>(null);\n const [value, setValue] = useState<string[]>([]);\n const [query, setQuery] = useState('');\n const [renaming, setRenaming] = useState<{ group: string; draft: string }>();\n const [deleting, setDeleting] = useState<string>();\n const [error, setError] = useState('');\n const [busy, setBusy] = useState(false);\n // A new session starts from its own groups and a clean editor.\n if ((session?.id ?? null) !== forId) {\n setForId(session?.id ?? null);\n setValue([...(session?.groups ?? [])]);\n setQuery('');\n setRenaming(undefined);\n setDeleting(undefined);\n setError('');\n }\n const close = () => {\n if (!busy) onClose();\n };\n const rowCancel = () => {\n setRenaming(undefined);\n setDeleting(undefined);\n };\n const run = async (work: () => Promise<{ error: string } | undefined>, done: () => void) => {\n setBusy(true);\n setError('');\n const result = await work();\n setBusy(false);\n if (result === undefined) done();\n else setError(result.error);\n };\n const typed = query.trim();\n const options = session === null ? [] : sessionGroupOptions(sessions, session.id, value);\n const shown = options.filter((group) => group.name.includes(typed));\n const canCreate = typed !== '' && !options.some((group) => group.name === typed);\n const problem = canCreate ? createProblem(typed, value.length) : undefined;\n const toggle = (group: string) => {\n setError('');\n if (value.includes(group)) setValue(value.filter((name) => name !== group));\n else if (value.length >= MAX_GROUPS) setError(createProblem('', value.length) ?? '');\n else setValue([...value, group]);\n };\n const create = () => {\n if (!canCreate || problem !== undefined) return;\n setValue([...value, typed]);\n setQuery('');\n };\n const renameConfirm = () => {\n if (renaming === undefined) return;\n const to = renaming.draft.trim();\n if (to === '' || to === renaming.group) return rowCancel();\n void run(\n () => actions.renameGroup(renaming.group, to),\n () => {\n setValue((current) => [...new Set(current.map((name) => (name === renaming.group ? to : name)))]);\n rowCancel();\n },\n );\n };\n const deleteConfirm = () => {\n if (deleting === undefined) return;\n void run(\n () => actions.deleteGroup(deleting),\n () => {\n setValue((current) => current.filter((name) => name !== deleting));\n rowCancel();\n },\n );\n };\n\n return (\n <Sheet open={session !== null} onOpenChange={(open) => !open && close()}>\n <SheetContent>\n {session === null ? null : (\n <>\n <SheetHeader>\n <SheetTitle>Session groups</SheetTitle>\n </SheetHeader>\n <SheetBody style={styles.body}>\n <Text style={styles.meta}>Sessions that share a group can message each other.</Text>\n <Input\n value={query}\n onChangeText={setQuery}\n placeholder={value.length === 0 ? 'Find or create a group' : 'Add another'}\n autoCapitalize=\"none\"\n autoCorrect={false}\n returnKeyType=\"done\"\n onSubmitEditing={() => {\n if (canCreate) create();\n else if (shown[0] !== undefined) {\n toggle(shown[0].name);\n setQuery('');\n }\n }}\n accessibilityLabel=\"Find or create a group\"\n />\n {shown.length > 0 || canCreate ? (\n <View style={styles.list}>\n {shown.map((group, index) => {\n const on = value.includes(group.name);\n const total = group.members.length + (on ? 1 : 0);\n const reach = total === 1 ? 'its one session' : `all ${String(total)} sessions`;\n const edge = index > 0 && styles.divider;\n if (renaming?.group === group.name)\n return (\n <View key={group.name} style={[styles.rowEdit, edge]}>\n <Input\n value={renaming.draft}\n onChangeText={(draft) => setRenaming({ ...renaming, draft })}\n autoFocus\n autoCapitalize=\"none\"\n autoCorrect={false}\n onSubmitEditing={renameConfirm}\n accessibilityLabel={`Rename ${group.name}`}\n />\n <Text style={styles.meta}>Renames it on {reach}.</Text>\n <View style={styles.rowActions}>\n <Button variant=\"ghost\" size=\"sm\" disabled={busy} onPress={rowCancel}>\n Cancel\n </Button>\n <Button\n variant=\"outline\"\n size=\"sm\"\n disabled={renaming.draft.trim() === ''}\n loading={busy}\n loadingLabel=\"Renaming\"\n onPress={renameConfirm}\n >\n Rename\n </Button>\n </View>\n </View>\n );\n if (deleting === group.name)\n return (\n <View key={group.name} style={[styles.rowEdit, edge]}>\n <Text style={styles.text}>\n Remove <Text style={styles.strong}>{group.name}</Text> from {reach}? They can no longer\n message through it.\n </Text>\n <View style={styles.rowActions}>\n <Button variant=\"ghost\" size=\"sm\" disabled={busy} onPress={rowCancel}>\n Cancel\n </Button>\n <Button\n variant=\"danger\"\n size=\"sm\"\n loading={busy}\n loadingLabel=\"Deleting\"\n onPress={deleteConfirm}\n >\n Delete\n </Button>\n </View>\n </View>\n );\n return (\n <ListRow\n key={group.name}\n title={group.name}\n description={group.members.length === 0 ? 'No other sessions yet' : group.members.join(', ')}\n selected={on}\n leading={<View style={styles.check}>{on ? <CheckIcon size={16} color=\"green\" /> : null}</View>}\n trailing={\n <View style={styles.rowActions}>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n accessibilityLabel={`Rename ${group.name}`}\n onPress={() => {\n setDeleting(undefined);\n setRenaming({ group: group.name, draft: group.name });\n }}\n >\n <EditIcon size={16} color=\"dim\" />\n </Button>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n accessibilityLabel={`Delete ${group.name}`}\n onPress={() => {\n setRenaming(undefined);\n setDeleting(group.name);\n }}\n >\n <TrashIcon size={16} color=\"dim\" />\n </Button>\n </View>\n }\n disclosure={false}\n onPress={() => toggle(group.name)}\n style={edge}\n />\n );\n })}\n {canCreate ? (\n <ListRow\n title={\n <Text style={styles.create(problem === undefined)} numberOfLines={1}>\n Create group “{typed}”\n </Text>\n }\n description={problem === undefined ? undefined : <Text style={styles.error}>{problem}</Text>}\n leading={<PlusIcon size={16} color={problem === undefined ? 'magenta' : 'faint'} />}\n disabled={problem !== undefined}\n disclosure={false}\n onPress={create}\n style={shown.length > 0 && styles.divider}\n />\n ) : null}\n </View>\n ) : null}\n <Text style={styles.meta}>\n {value.length} of {MAX_GROUPS} groups\n </Text>\n {error ? (\n <Text style={styles.error} accessibilityRole=\"alert\">\n {error}\n </Text>\n ) : null}\n <Button\n variant=\"primary\"\n size=\"lg\"\n loading={busy && renaming === undefined && deleting === undefined}\n loadingLabel=\"Saving\"\n disabled={busy}\n onPress={() => void run(() => actions.setSessionGroups(session.id, value), onClose)}\n >\n Save\n </Button>\n </SheetBody>\n </>\n )}\n </SheetContent>\n </Sheet>\n );\n}\n\n/** A pending setup's ⋮: it has no runtime, so removing it is the only action, as in the cockpit. */\nexport function SetupMenuSheet({\n target,\n removePendingSetup,\n onClose,\n}: {\n target: { sessionId: string; setup: WebTemplateRailPendingSetup } | null;\n removePendingSetup: NonNullable<NativeTemplateSessionsActions['removePendingSetup']>;\n onClose: () => void;\n}) {\n const [busy, setBusy] = useState(false);\n const [error, setError] = useState('');\n const close = () => {\n if (busy) return;\n setError('');\n onClose();\n };\n const remove = async () => {\n if (target === null) return;\n setBusy(true);\n setError('');\n const result = await removePendingSetup(target.sessionId, target.setup.id);\n setBusy(false);\n if (result === undefined) onClose();\n else setError(result.error);\n };\n return (\n <Sheet open={target !== null} onOpenChange={(open) => !open && close()}>\n <SheetContent>\n {target === null ? null : (\n <>\n <SheetHeader>\n <SheetTitle numberOfLines={1}>{target.setup.name}</SheetTitle>\n </SheetHeader>\n <SheetBody style={styles.body}>\n <Items\n items={[\n {\n label: busy ? 'Removing…' : 'Remove setup',\n danger: true,\n disabled: busy,\n onPress: () => void remove(),\n },\n ]}\n />\n {error ? (\n <Text style={styles.error} accessibilityRole=\"alert\">\n {error}\n </Text>\n ) : null}\n </SheetBody>\n </>\n )}\n </SheetContent>\n </Sheet>\n );\n}\nconst SUGGESTION_DEBOUNCE_MS = 120;\nconst TRAILING_SEPARATORS = /\\/+$/u;\n\nfunction folderName(path: string): string {\n const trimmed = path.trim().replace(TRAILING_SEPARATORS, '');\n return trimmed.slice(trimmed.lastIndexOf('/') + 1) || trimmed;\n}\n\nexport type AddWorkspaceActions = Required<\n Pick<NativeTemplateSessionsActions, 'addWorkspace' | 'searchDirectories' | 'listDirectory'>\n> &\n Pick<NativeTemplateSessionsActions, 'discoverWorkspaces' | 'addDeclaredWorkspaces'>;\n\n/** The cockpit's folder browser, in place: up, into a child, or use the current folder. */\nfunction FolderBrowser({\n start,\n listDirectory,\n onSelect,\n}: {\n start?: string;\n listDirectory: AddWorkspaceActions['listDirectory'];\n onSelect: (path: string) => void;\n}) {\n const [target, setTarget] = useState(start);\n const [listing, setListing] = useState<WebTemplateRailDirectoryListing | null>(null);\n const [error, setError] = useState('');\n useEffect(() => {\n let stale = false;\n void listDirectory(target).then((result) => {\n if (stale) return;\n if ('error' in result) setError(result.error);\n else {\n setError('');\n setListing(result);\n }\n });\n return () => {\n stale = true;\n };\n }, [target, listDirectory]);\n const parent = listing?.parent;\n return (\n <View style={styles.list}>\n <View style={styles.browserHead}>\n <Text style={styles.path} numberOfLines={1} ellipsizeMode=\"head\">\n {listing?.path ?? 'Loading…'}\n </Text>\n <Button size=\"sm\" disabled={listing === null} onPress={() => listing !== null && onSelect(listing.path)}>\n Use this folder\n </Button>\n </View>\n {error ? (\n <Text style={[styles.error, styles.inset]} accessibilityRole=\"alert\">\n {error}\n </Text>\n ) : null}\n {parent === undefined ? null : (\n <ListRow title=\"Parent folder\" disclosure={false} onPress={() => setTarget(parent)} style={styles.divider} />\n )}\n {listing?.directories.length === 0 ? <Text style={[styles.meta, styles.inset]}>No folders here</Text> : null}\n {listing?.directories.map((directory) => (\n <ListRow\n key={directory}\n title={folderName(directory)}\n leading={<FolderIcon size={16} color=\"dim\" />}\n onPress={() => setTarget(directory)}\n style={styles.divider}\n />\n ))}\n </View>\n );\n}\n\nexport interface AdmissionRow {\n name: string;\n instructions?: string;\n workspaceId?: string;\n checked: boolean;\n error?: string;\n}\n\n/** The approved native composition, shared by the real sheet and deterministic stories. */\nexport function AddWorkspaceView({\n open,\n path,\n name,\n instructions,\n rows,\n discovering,\n error,\n busy,\n manual,\n canSubmit,\n onPathChange,\n onNameChange,\n onInstructionsChange,\n onBrowse,\n onToggle,\n onSubmit,\n onClose,\n folderContent,\n}: {\n open: boolean;\n path: string;\n name: string;\n instructions: string;\n rows: readonly AdmissionRow[];\n discovering: boolean;\n error: string;\n busy: boolean;\n manual: boolean;\n canSubmit: boolean;\n onPathChange: (path: string) => void;\n onNameChange: (name: string) => void;\n onInstructionsChange: (instructions: string) => void;\n onBrowse: () => void;\n onToggle: (name: string) => void;\n onSubmit: () => void;\n onClose: () => void;\n folderContent?: ReactNode;\n}) {\n const count = rows.filter((row) => row.checked && !row.workspaceId).length;\n const retry = rows.some((row) => row.error);\n return (\n <Sheet open={open} onOpenChange={(next) => !next && !busy && onClose()}>\n <SheetContent>\n <SheetHeader>\n <SheetTitle>Add workspace</SheetTitle>\n </SheetHeader>\n <SheetBody style={styles.body}>\n <View style={styles.field}>\n <Label>Folder</Label>\n <View style={styles.pathRow}>\n <Input\n value={path}\n onChangeText={onPathChange}\n disabled={busy}\n placeholder=\"~/workspace/my-project\"\n autoCapitalize=\"none\"\n autoCorrect={false}\n accessibilityLabel=\"Workspace folder\"\n style={styles.admissionPathInput}\n />\n <Button variant=\"outline\" disabled={busy} onPress={onBrowse}>\n Browse\n </Button>\n </View>\n </View>\n {folderContent}\n {discovering ? (\n <View style={styles.pathRow}>\n <Spinner label=\"Reading workspace declarations\" />\n <Text style={styles.meta}>Reading workspace declarations…</Text>\n </View>\n ) : null}\n {error ? (\n <Text accessibilityRole=\"alert\" style={styles.error}>\n {error}\n </Text>\n ) : null}\n {rows.length > 0 ? (\n <View style={styles.field}>\n <Label>Workspaces</Label>\n <Text style={styles.meta}>Declared in .po/config.yaml. Choose which to add.</Text>\n {rows.map((entry) => {\n const added = entry.workspaceId !== undefined;\n return (\n <View key={entry.name}>\n <Pressable\n accessibilityRole=\"checkbox\"\n accessibilityLabel={`${entry.name}${added ? ', Added' : ''}`}\n accessibilityHint={entry.instructions}\n accessibilityState={{ checked: entry.checked, disabled: added || busy }}\n disabled={added || busy}\n onPress={() => onToggle(entry.name)}\n >\n <ListRow\n title={entry.name}\n disclosure={false}\n description={\n <Text numberOfLines={1} style={styles.meta}>\n {entry.instructions}\n </Text>\n }\n leading={\n entry.checked ? <CheckIcon size={18} color=\"green\" /> : <View style={styles.unchecked} />\n }\n trailing={added ? <Text style={styles.meta}>Added</Text> : undefined}\n style={styles.admissionRow}\n />\n </Pressable>\n {entry.error ? (\n <Text accessibilityRole=\"alert\" style={styles.error}>\n {entry.error}\n </Text>\n ) : null}\n </View>\n );\n })}\n </View>\n ) : null}\n {manual ? (\n <>\n <View style={styles.field}>\n <Label>Name</Label>\n <Input\n value={name}\n onChangeText={onNameChange}\n disabled={busy}\n placeholder=\"my-project\"\n autoCapitalize=\"none\"\n autoCorrect={false}\n accessibilityLabel=\"Workspace name\"\n />\n </View>\n <View style={styles.field}>\n <Label>Instructions (optional)</Label>\n <Textarea\n rows={3}\n value={instructions}\n onChangeText={onInstructionsChange}\n disabled={busy}\n accessibilityLabel=\"Workspace instructions\"\n />\n <Text style={styles.meta}>For main sessions in this workspace.</Text>\n </View>\n {path.trim() === '' && name.trim() !== '' ? (\n <Text style={styles.meta}>\n Creates <Text style={styles.mono}>~/.po/workspace/{name.trim()}</Text>\n </Text>\n ) : null}\n </>\n ) : null}\n <Button\n variant=\"primary\"\n size=\"lg\"\n disabled={!canSubmit}\n loading={busy}\n loadingLabel=\"Adding\"\n onPress={onSubmit}\n >\n {rows.length > 0\n ? `${retry ? 'Retry' : 'Add'} ${count} workspace${count === 1 ? '' : 's'}`\n : 'Add workspace'}\n </Button>\n </SheetBody>\n </SheetContent>\n </Sheet>\n );\n}\n\n/** Discovery is optional so fetched templates still work with older phone providers. */\nexport function AddWorkspaceSheet({\n open,\n actions,\n onClose,\n}: {\n open: boolean;\n actions: AddWorkspaceActions;\n onClose: () => void;\n}) {\n const [name, setName] = useState('');\n const [nameEdited, setNameEdited] = useState(false);\n const [path, setPath] = useState('');\n const [instructions, setInstructions] = useState('');\n const [discoveryRevision, setDiscoveryRevision] = useState(0);\n const [browsing, setBrowsing] = useState(false);\n const [suggestions, setSuggestions] = useState<readonly string[]>([]);\n const [busy, setBusy] = useState(false);\n const [error, setError] = useState('');\n const [discovery, setDiscovery] = useState<{ path: string; root: string; rows: AdmissionRow[]; error: string }>();\n const { searchDirectories, discoverWorkspaces, addDeclaredWorkspaces } = actions;\n const supportsDiscovery = discoverWorkspaces !== undefined && addDeclaredWorkspaces !== undefined;\n const shownName = nameEdited ? name : folderName(path);\n const trimmedPath = path.trim().replace(TRAILING_SEPARATORS, '') || (path.trim() === '' ? '' : '/');\n const current = discovery?.path === trimmedPath ? discovery : undefined;\n const discovering = supportsDiscovery && trimmedPath !== '' && current === undefined;\n const rows = current?.rows ?? [];\n const manual = !discovering && !current?.error && rows.length === 0;\n const canSubmit =\n !busy &&\n !discovering &&\n !current?.error &&\n (rows.length > 0\n ? rows.some((row) => row.checked && !row.workspaceId)\n : trimmedPath !== '' || shownName.trim() !== '');\n\n useEffect(() => {\n if (!open || !supportsDiscovery || trimmedPath === '' || discoverWorkspaces === undefined) return;\n let stale = false;\n const timer = setTimeout(() => {\n void discoverWorkspaces(trimmedPath).then(\n (result) => {\n if (stale) return;\n setDiscovery({\n path: trimmedPath,\n root: 'root' in result ? result.root : trimmedPath,\n rows: 'declarations' in result ? result.declarations.map((row) => ({ ...row, checked: true })) : [],\n error: 'error' in result ? result.error : '',\n });\n },\n () => {\n if (!stale)\n setDiscovery({\n path: trimmedPath,\n root: trimmedPath,\n rows: [],\n error: 'Could not read workspace declarations. Choose the folder again to retry.',\n });\n },\n );\n }, SUGGESTION_DEBOUNCE_MS);\n return () => {\n stale = true;\n clearTimeout(timer);\n };\n }, [open, trimmedPath, supportsDiscovery, discoverWorkspaces, discoveryRevision]);\n\n useEffect(() => {\n if (!open || path.trim() === '') return;\n let stale = false;\n const timer = setTimeout(async () => {\n const found = await searchDirectories(path.trim());\n if (!stale) setSuggestions(found.filter((directory) => directory !== path.trim()));\n }, SUGGESTION_DEBOUNCE_MS);\n return () => {\n stale = true;\n clearTimeout(timer);\n };\n }, [open, path, searchDirectories]);\n\n const changePath = (next: string) => {\n setPath(next);\n setDiscovery(undefined);\n setSuggestions([]);\n setError('');\n setDiscoveryRevision((revision) => revision + 1);\n };\n const finish = () => {\n setName('');\n setNameEdited(false);\n setPath('');\n setInstructions('');\n setBrowsing(false);\n setSuggestions([]);\n setError('');\n setDiscovery(undefined);\n onClose();\n };\n const submit = async () => {\n if (!canSubmit) return;\n setBusy(true);\n setError('');\n try {\n if (rows.length > 0 && addDeclaredWorkspaces !== undefined && current !== undefined) {\n const selected = rows.filter((row) => row.checked && !row.workspaceId);\n const { results } = await addDeclaredWorkspaces({ path: current.root, names: selected.map((row) => row.name) });\n const updated = rows.map((row) => {\n if (!selected.includes(row)) return row;\n const result = results.find((entry) => entry.name === row.name);\n return {\n ...row,\n workspaceId: result?.workspaceId,\n error: result?.error ?? (result?.workspaceId ? undefined : 'Could not add this workspace. Try again.'),\n };\n });\n setDiscovery({ ...current, rows: updated });\n if (updated.some((row) => row.checked && !row.workspaceId)) return;\n } else {\n const result = await actions.addWorkspace({\n name: shownName.trim(),\n ...(trimmedPath === '' ? {} : { path: trimmedPath }),\n ...(instructions === '' ? {} : { instructions }),\n });\n if (result !== undefined) {\n setError(result.error);\n return;\n }\n }\n finish();\n } catch {\n setError('Could not add the workspace. Try again.');\n } finally {\n setBusy(false);\n }\n };\n return (\n <AddWorkspaceView\n open={open}\n path={path}\n name={shownName}\n instructions={instructions}\n rows={rows}\n discovering={discovering}\n error={current?.error || error}\n busy={busy}\n manual={manual}\n canSubmit={canSubmit}\n onPathChange={changePath}\n onNameChange={(next) => {\n setNameEdited(true);\n setName(next);\n }}\n onInstructionsChange={setInstructions}\n onBrowse={() => setBrowsing((value) => !value)}\n onToggle={(name) =>\n current &&\n setDiscovery({\n ...current,\n rows: rows.map((row) => (row.name === name && !row.workspaceId ? { ...row, checked: !row.checked } : row)),\n })\n }\n onSubmit={() => void submit()}\n onClose={finish}\n folderContent={\n busy ? null : browsing ? (\n <FolderBrowser\n {...(trimmedPath.startsWith('/') ? { start: trimmedPath } : {})}\n listDirectory={actions.listDirectory}\n onSelect={(selected) => {\n changePath(selected);\n setBrowsing(false);\n }}\n />\n ) : suggestions.length > 0 ? (\n <View style={styles.list} accessibilityLabel=\"Matching folders\">\n {suggestions.map((directory, index) => (\n <ListRow\n key={directory}\n title={\n <Text style={styles.path} numberOfLines={1} ellipsizeMode=\"head\">\n {directory}\n </Text>\n }\n disclosure={false}\n onPress={() => changePath(`${directory}/`)}\n style={index > 0 && styles.divider}\n />\n ))}\n </View>\n ) : null\n }\n />\n );\n}\nconst styles = StyleSheet.create((theme) => {\n const sans = fontOf(theme.fontFamily.sans);\n const text = (size: 'sm' | 'base', color: string) => ({\n fontFamily: sans,\n fontSize: theme.fontSize[size],\n lineHeight: theme.lineHeight[size],\n color,\n });\n return {\n body: { gap: theme.spacing(3) },\n list: {\n borderRadius: theme.borderRadius.lg,\n borderWidth: 1,\n borderColor: theme.colors['border-soft'],\n overflow: 'hidden',\n },\n item: {\n minHeight: 48,\n justifyContent: 'center',\n gap: 2,\n paddingHorizontal: theme.spacing(4),\n paddingVertical: theme.spacing(2.5),\n },\n divider: { borderTopWidth: StyleSheet.hairlineWidth, borderTopColor: theme.colors['border-soft'] },\n field: { gap: theme.spacing(1.5) },\n pathRow: { flexDirection: 'row', alignItems: 'center', gap: theme.spacing(2) },\n pathInput: { flex: 1, minWidth: 0 },\n admissionPathInput: { flex: 1, minWidth: 0, fontFamily: fontOf(theme.fontFamily.mono) },\n admissionRow: {\n minHeight: 44,\n borderBottomWidth: StyleSheet.hairlineWidth,\n borderBottomColor: theme.colors['border-soft'],\n },\n unchecked: { width: 18, height: 18, borderWidth: 1, borderColor: theme.colors.dim },\n browserHead: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: theme.spacing(2),\n paddingHorizontal: theme.spacing(4),\n paddingVertical: theme.spacing(2),\n },\n path: { ...text('sm', theme.colors.dim), fontFamily: fontOf(theme.fontFamily.mono), flexShrink: 1, flexGrow: 1 },\n inset: { paddingHorizontal: theme.spacing(4), paddingBottom: theme.spacing(2) },\n rowEdit: { gap: theme.spacing(2), paddingHorizontal: theme.spacing(4), paddingVertical: theme.spacing(3) },\n rowActions: { flexDirection: 'row', alignItems: 'center', justifyContent: 'flex-end', gap: theme.spacing(1) },\n check: { width: 16, alignItems: 'center' },\n // Creating a group is the person's own naming, so it reads rose like the group chips.\n create: (enabled: boolean) => text('base', enabled ? theme.colors.magenta : theme.colors.faint),\n pressed: { backgroundColor: theme.colors['tint-green'] },\n itemLabel: (danger: boolean, disabled: boolean) => ({\n ...text('base', disabled ? theme.colors.faint : danger ? theme.colors.red : theme.colors.hi),\n fontWeight: theme.fontWeight.medium,\n }),\n meta: text('sm', theme.colors.dim),\n text: { ...text('base', theme.colors.text), lineHeight: theme.lineHeightRelaxed.base },\n strong: { fontWeight: theme.fontWeight.semibold, color: theme.colors.hi },\n mono: { fontFamily: fontOf(theme.fontFamily.mono), color: theme.colors.hi },\n error: { ...text('sm', theme.colors.red), lineHeight: theme.lineHeightRelaxed.sm },\n };\n});\n","import type {\n NativeSessionView,\n NativeTemplateSessionsActions,\n NativeTemplateSessionsProps,\n WebTemplateRailPendingSetup,\n WebTemplateRailSession,\n WebTemplateRailWorkspace,\n} from '@agimon-ai/po-core/native';\nimport {\n ActivityIcon,\n AlertIcon,\n Badge,\n BranchIcon,\n Button,\n CheckIcon,\n ChevronDownIcon,\n ChevronRightIcon,\n CountBadge,\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n EmptyState,\n FolderIcon,\n fontOf,\n ForkIcon,\n KebabIcon,\n HostTag,\n InfoStrip,\n ListRow,\n type LiveDurationReading,\n MessageIcon,\n SectionLabel,\n Sheet,\n SheetContent,\n SheetHeader,\n SheetTitle,\n SheetBody,\n LiveDuration,\n MonitorIcon,\n PlusIcon,\n SlidersIcon,\n Spinner,\n UsersIcon,\n} from '@agimon-ai/po-native-components';\nimport { type ReactNode, useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { Pressable, SectionList, Text, View } from 'react-native';\nimport { StyleSheet } from 'react-native-unistyles';\n\nimport { sessionTimeline as timelineOf } from '../_lib/sessionTimeline';\nimport {\n AddWorkspaceSheet,\n SessionGroupsSheet,\n SessionMenuSheet,\n SetupMenuSheet,\n WorkspaceMenuSheet,\n} from './AdvancedSessionMenus.native';\n\nconst NO_HOSTS: NonNullable<NativeTemplateSessionsProps['hostPresentation']>['hosts'] = [];\nconst UNAVAILABLE_LABEL = ' · Unavailable';\nconst MINUTE_MS = 60_000;\nconst VIEWS = [\n { value: 'workspaces', title: 'Workspaces', description: 'Sessions grouped by workspace', Icon: FolderIcon },\n { value: 'sessions', title: 'Sessions', description: 'Needs you first, then latest change', Icon: MessageIcon },\n] as const;\n\ntype StatusTone = 'failed' | 'running' | 'quiet';\n\n/** How long ago a session last moved: \"<1m\", \"12m\", \"3h\", \"2d\". */\nexport function ageText(since: number, now: number): LiveDurationReading {\n const elapsed = Math.max(0, now - since);\n const minutes = Math.floor(elapsed / MINUTE_MS);\n const text =\n minutes < 1\n ? '<1m'\n : minutes < 60\n ? `${String(minutes)}m`\n : minutes < 1440\n ? `${String(Math.floor(minutes / 60))}h`\n : `${String(Math.floor(minutes / 1440))}d`;\n return { text, nextMs: MINUTE_MS - (elapsed % MINUTE_MS) };\n}\n\nfunction SessionAge({ since }: { since: number }) {\n const clock = useCallback((now: number) => ageText(since, now), [since]);\n return <LiveDuration clock={clock} style={styles.age} />;\n}\n\n/** The same reading of the status line as the cockpit card. */\nfunction statusTone(status: string): StatusTone {\n if (status.startsWith('failed') || status.includes(' failed')) return 'failed';\n if (status.startsWith('running')) return 'running';\n return 'quiet';\n}\n\n/** A 44 point icon target, as the cockpit's ghost icon buttons. */\nfunction IconButton({\n label,\n onPress,\n children,\n disabled = false,\n}: {\n label: string;\n onPress: () => void;\n children: ReactNode;\n disabled?: boolean;\n}) {\n return (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={label}\n accessibilityState={{ disabled }}\n disabled={disabled}\n hitSlop={6}\n onPress={onPress}\n style={({ pressed }) => [styles.iconButton, pressed && styles.iconPressed]}\n >\n {children}\n </Pressable>\n );\n}\n\nfunction SessionCard({\n session,\n onOpen,\n onMenu,\n onSetupMenu,\n hostLabel,\n stale = false,\n flat = false,\n workspaceName,\n age,\n}: {\n session: WebTemplateRailSession;\n hostLabel?: string;\n stale?: boolean;\n /** In the Sessions view a child sits in time order, not under its parent, so it loses the indent. */\n flat?: boolean;\n /** Opens the branch line, since the Sessions view has no workspace headings. */\n workspaceName?: string;\n /** Epoch ms of the last change, shown as an ageing \"12m\" beside the name. */\n age?: number;\n onOpen: (id: string) => void;\n onMenu: (session: WebTemplateRailSession) => void;\n /** Absent when the phone app cannot remove a setup, so the panel shows no menu. */\n onSetupMenu?: (setup: WebTemplateRailPendingSetup) => void;\n}) {\n const tone = stale ? 'quiet' : statusTone(session.status);\n const name = session.name || 'Untitled';\n const markColor = session.active ? 'green' : 'faint';\n // A host without the count still marks a waiting card as one.\n const waiting = stale ? 0 : (session.waitingCount ?? (session.awaitingInput ? 1 : 0));\n return (\n <>\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={waiting > 0 ? `Open ${name}, ${String(waiting)} waiting for you` : `Open ${name}`}\n disabled={stale}\n accessibilityState={{ disabled: stale }}\n onPress={() => onOpen(session.id)}\n style={({ pressed }) => [\n styles.card,\n session.nested && !flat && styles.nested,\n pressed && styles.cardPressed,\n !stale && session.active && styles.cardActive,\n ]}\n >\n <View style={styles.cardHead}>\n <View style={styles.cardText}>\n <View style={styles.nameRow}>\n {/* The cockpit card's provenance mark: a workflow pulse, or a fork for any other child. */}\n {session.nested && session.provenance === 'workflow-session' ? (\n <ActivityIcon size={13} color={markColor} accessibilityLabel=\"workflow session\" />\n ) : session.nested && session.provenance ? (\n <ForkIcon\n size={13}\n color={markColor}\n accessibilityLabel={\n session.provenance === 'worktree' ? 'automatic per-conversation worktree' : session.provenance\n }\n />\n ) : null}\n <Text style={styles.name} numberOfLines={2}>\n {name}\n </Text>\n {/* The rose count of things waiting on the person follows the name. */}\n <CountBadge count={waiting} style={styles.nameBadge} />\n {age === undefined ? null : <SessionAge since={age} />}\n </View>\n {/* The avatar trails the detail lines, so every card keeps one text edge with or without it. */}\n <View style={styles.detailRow}>\n <View style={styles.statusRow}>\n {stale ? null : session.restarting ? (\n <Spinner size=\"small\" color=\"dim\" label=\"Restarting\" />\n ) : tone === 'running' ? (\n <Spinner size=\"small\" color=\"yellow\" />\n ) : tone === 'failed' ? (\n <AlertIcon size={12} color=\"red\" />\n ) : null}\n {!stale && session.clock ? (\n <LiveDuration style={styles.status(tone)} label={session.clock.label} since={session.clock.since} />\n ) : (\n <Text style={styles.status(tone)} numberOfLines={1}>\n {stale ? 'Last known' : session.status}\n </Text>\n )}\n {/* The branch closes the status line, so a card stays two lines tall. */}\n {session.git || workspaceName ? (\n <View style={styles.branchRow}>\n {workspaceName ? (\n <Text style={styles.branch} numberOfLines={1}>\n {workspaceName}\n </Text>\n ) : null}\n {session.git ? (\n <>\n <BranchIcon size={13} color=\"dim\" />\n <Text style={styles.branch} numberOfLines={1}>\n {session.git.branch}\n </Text>\n {session.git.dirty ? <Text style={styles.modified}>modified</Text> : null}\n </>\n ) : null}\n </View>\n ) : null}\n </View>\n {session.profile ? (\n <View style={styles.avatar} accessibilityLabel={session.profile.label}>\n <Text style={styles.initials}>{session.profile.initials}</Text>\n </View>\n ) : null}\n </View>\n </View>\n {!stale ? (\n <IconButton label={`${name} actions`} onPress={() => onMenu(session)}>\n <KebabIcon size={16} color=\"dim\" />\n </IconButton>\n ) : null}\n </View>\n {hostLabel ? <HostTag label={hostLabel} /> : null}\n {session.groups !== undefined && session.groups.length > 0 ? (\n <View style={styles.groupsRow} accessibilityLabel=\"groups\">\n <UsersIcon size={13} color=\"dim\" />\n <View style={styles.groups}>\n {session.groups.map((group) => (\n <Badge key={group} tone=\"magenta\" size=\"xs\">\n {group}\n </Badge>\n ))}\n </View>\n </View>\n ) : null}\n {session.error ? (\n <Text style={styles.error} numberOfLines={3}>\n {session.error}\n </Text>\n ) : null}\n </Pressable>\n {/* A pending reservation has no runtime, so it sits outside the card and never opens the session. */}\n {session.pendingSetups.map((setup) => (\n <View key={setup.id} style={styles.setup}>\n <View style={styles.setupHead}>\n <Text style={[styles.name, styles.setupName]} numberOfLines={1}>\n {setup.name}\n </Text>\n {!stale && onSetupMenu ? (\n <IconButton label={`${setup.name} setup actions`} onPress={() => onSetupMenu(setup)}>\n <KebabIcon size={16} color=\"dim\" />\n </IconButton>\n ) : null}\n </View>\n <Text style={styles.setupStatus(setup.failed)}>{setup.status}</Text>\n {setup.recovery ? (\n <Text style={styles.recovery} accessibilityRole={setup.failed ? 'alert' : undefined}>\n {setup.recovery}\n </Text>\n ) : null}\n </View>\n ))}\n </>\n );\n}\n\nfunction WorkspaceHeader({\n workspace,\n actions,\n onWorkspaceMenu,\n onCreate,\n onOpen,\n merged = false,\n stale = false,\n quiet = false,\n}: {\n workspace: WebTemplateRailWorkspace;\n actions: NativeTemplateSessionsActions;\n onCreate?: () => void;\n onOpen?: () => void;\n merged?: boolean;\n stale?: boolean;\n /** A compact row for a workspace without sessions. */\n quiet?: boolean;\n onWorkspaceMenu: (workspace: WebTemplateRailWorkspace) => void;\n}) {\n const canCreate = !workspace.legacy && workspace.available && (!stale || merged);\n const create = onCreate ?? (() => actions.createSession(workspace.id));\n const row = (\n <>\n <FolderIcon size={16} color=\"dim\" />\n <Pressable\n style={[styles.groupText, styles.workspaceLink]}\n accessibilityRole={onOpen ? 'button' : 'header'}\n accessibilityLabel={onOpen ? `Open ${workspace.name} workspace` : workspace.name}\n disabled={!onOpen}\n onPress={onOpen}\n >\n <Text style={quiet ? styles.quietName : styles.groupName} numberOfLines={1}>\n {workspace.name}\n </Text>\n </Pressable>\n {workspace.legacy ? null : (\n <>\n {canCreate ? (\n <IconButton label={`New session in ${workspace.name}`} onPress={create}>\n <PlusIcon size={18} color=\"dim\" />\n </IconButton>\n ) : null}\n {!stale || merged ? (\n <IconButton label={`${workspace.name} actions`} onPress={() => onWorkspaceMenu(workspace)}>\n <KebabIcon size={16} color=\"dim\" />\n </IconButton>\n ) : null}\n </>\n )}\n </>\n );\n return (\n <View style={styles.group}>\n <View style={[styles.groupHead, quiet && styles.quietHead]} accessibilityRole=\"header\">\n {row}\n </View>\n </View>\n );\n}\n\n/** Workspaces without sessions, folded into one quiet group below the list. */\nfunction OtherWorkspaces({\n count,\n open,\n afterList,\n onToggle,\n children,\n}: {\n count: number;\n open: boolean;\n afterList: boolean;\n onToggle: () => void;\n children: ReactNode;\n}) {\n return (\n <View style={[styles.other, afterList && styles.otherAfterList]}>\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={`Other workspaces, ${String(count)} without sessions`}\n accessibilityState={{ expanded: open }}\n onPress={onToggle}\n style={({ pressed }) => [styles.otherHead, pressed && styles.iconPressed]}\n >\n {open ? <ChevronDownIcon size={16} color=\"dim\" /> : <ChevronRightIcon size={16} color=\"dim\" />}\n <Text style={styles.otherLabel}>Other workspaces</Text>\n <Text style={styles.otherCount}>{count}</Text>\n </Pressable>\n {open ? children : null}\n </View>\n );\n}\n\n/** Display grouping never rewrites workspace or session identity. */\nexport function sessionSections(\n workspaces: readonly WebTemplateRailWorkspace[],\n presentation?: NativeTemplateSessionsProps['hostPresentation'],\n selectedHost: string | null = null,\n) {\n const filter = presentation?.hosts.some(({ id }) => id === selectedHost) ? selectedHost : null;\n const visible = workspaces.filter((workspace) => {\n const owner = presentation?.hostForId[workspace.id];\n if (owner && !presentation?.hosts.some(({ id }) => id === owner)) return false;\n return filter === null || owner === filter;\n });\n const sections: {\n key: string;\n workspace: WebTemplateRailWorkspace;\n members: WebTemplateRailWorkspace[];\n data: readonly WebTemplateRailSession[];\n }[] = [];\n for (const workspace of [\n ...visible.filter((item) => item.kind === 'session'),\n ...visible.filter((item) => item.kind !== 'session'),\n ]) {\n if (workspace.kind === 'session' && workspace.sessions.length === 0) continue;\n const existing =\n workspace.kind === 'session'\n ? sections.find((section) => section.workspace.kind === 'session')\n : presentation && presentation.hosts.length > 1 && !workspace.legacy\n ? sections.find(\n (section) =>\n section.workspace.kind !== 'session' &&\n !section.workspace.legacy &&\n section.workspace.name === workspace.name,\n )\n : undefined;\n if (existing) {\n existing.members.push(workspace);\n existing.data = [...existing.data, ...workspace.sessions];\n existing.workspace = { ...existing.workspace, available: existing.workspace.available || workspace.available };\n } else sections.push({ key: workspace.id, workspace, members: [workspace], data: workspace.sessions });\n }\n return sections.flatMap((section) => {\n if (section.workspace.kind === 'session') return [{ ...section, showWorkspace: false }];\n // Like a single computer, an empty computer stays out of the list; the heading still offers every member.\n const busy = section.members.filter((workspace) => workspace.sessions.length > 0);\n return (busy.length > 0 ? busy : section.members).map((workspace, index) => ({\n key: workspace.id,\n workspace,\n members: section.members,\n data: workspace.sessions,\n showWorkspace: index === 0,\n }));\n });\n}\n\n/** The Sessions view over the shown workspaces, each row naming its workspace. */\nexport function sessionTimeline(sections: ReturnType<typeof sessionSections>) {\n return timelineOf(\n sections.flatMap((section) =>\n section.data.map((session) => ({\n session,\n workspaceName: section.workspace.kind === 'session' ? undefined : section.workspace.name,\n })),\n ),\n );\n}\nexport function SessionCreateMenu({\n onCreateWorkspace,\n onCreateSession,\n workspaceDisabled = false,\n sessionDisabled = false,\n defaultOpen = false,\n}: {\n onCreateWorkspace?: () => void;\n onCreateSession?: () => void;\n workspaceDisabled?: boolean;\n sessionDisabled?: boolean;\n defaultOpen?: boolean;\n}) {\n return (\n <DropdownMenu defaultOpen={defaultOpen}>\n <DropdownMenuTrigger variant=\"ghost\" size=\"icon\" accessibilityLabel=\"Create workspace or session\">\n <PlusIcon size={18} color=\"dim\" />\n </DropdownMenuTrigger>\n <DropdownMenuContent>\n {onCreateWorkspace ? (\n <DropdownMenuItem disabled={workspaceDisabled} onSelect={onCreateWorkspace}>\n Create workspace\n </DropdownMenuItem>\n ) : null}\n {onCreateSession ? (\n <DropdownMenuItem disabled={sessionDisabled} onSelect={onCreateSession}>\n Create session\n </DropdownMenuItem>\n ) : null}\n </DropdownMenuContent>\n </DropdownMenu>\n );\n}\n\n/** The cockpit's workspace groups, with quiet computer subgroups in the All hosts view. */\nexport function AdvancedSessions({\n workspaces,\n openSession,\n openWorkspace,\n actions,\n setHeaderAction,\n hostPresentation,\n otherWorkspacesOpen,\n setOtherWorkspacesOpen,\n sessionView,\n setSessionView,\n}: NativeTemplateSessionsProps) {\n const [selectedHost, setSelectedHost] = useState<string | null>(hostPresentation?.initialHostId ?? null);\n const selected = hostPresentation?.hosts.some(({ id }) => id === selectedHost) ? selectedHost : null;\n if (selectedHost !== selected) setSelectedHost(selected);\n const { sections, idle, timeline } = useMemo(() => {\n const all = sessionSections(workspaces, hostPresentation, selected);\n // A heading whose every computer has no session folds into one quiet group below the list.\n const isIdle = (section: (typeof all)[number]) =>\n section.workspace.kind !== 'session' && section.members.every((member) => member.sessions.length === 0);\n return {\n sections: all.filter((section) => !isIdle(section)),\n idle: all.filter((section) => section.showWorkspace && isIdle(section)),\n timeline: sessionTimeline(all),\n };\n }, [workspaces, hostPresentation, selected]);\n // An older phone app keeps no choice, so the group remembers it for this screen only.\n const [localOtherOpen, setLocalOtherOpen] = useState(false);\n const otherOpen = otherWorkspacesOpen ?? localOtherOpen;\n const [localView, setLocalView] = useState<NativeSessionView>('workspaces');\n const view = sessionView ?? localView;\n const [viewing, setViewing] = useState(false);\n const hosts = hostPresentation?.hosts ?? NO_HOSTS;\n const hostOf = (id: string) => hosts.find((host) => host.id === hostPresentation?.hostForId[id]);\n const stale = (id: string) => hostPresentation !== undefined && hostOf(id)?.status !== 'connected';\n const [choosing, setChoosing] = useState<readonly WebTemplateRailWorkspace[] | 'add' | 'general' | null>(null);\n const [chooseAction, setChooseAction] = useState<'create' | 'menu' | 'open'>('create');\n const [addHost, setAddHost] = useState<string | null>(null);\n const [sessionMenu, setSessionMenu] = useState<string | null>(null);\n const [workspaceMenu, setWorkspaceMenu] = useState<string | null>(null);\n const [groupsFor, setGroupsFor] = useState<string | null>(null);\n const [setupMenu, setSetupMenu] = useState<{ sessionId: string; setup: WebTemplateRailPendingSetup } | null>(null);\n const [adding, setAdding] = useState(false);\n const { addWorkspace, searchDirectories, listDirectory } = actions;\n const addActions =\n hosts.length > 0\n ? hosts.find(({ id }) => id === addHost)?.addWorkspaceActions\n : addWorkspace && searchDirectories && listDirectory\n ? { addWorkspace, searchDirectories, listDirectory }\n : undefined;\n const canAdd =\n hosts.length > 0 ? hosts.some((host) => host.addWorkspaceActions !== undefined) : addActions !== undefined;\n const beginAdd = useCallback(() => {\n if (hosts.length > 1) {\n setChoosing('add');\n return;\n }\n if (hosts.length === 1) {\n if (hosts[0]!.status !== 'connected') return;\n setAddHost(hosts[0]!.id);\n }\n setAdding(true);\n }, [hosts]);\n const generalAction = useRef(actions.createGeneralSession);\n useEffect(() => {\n generalAction.current = actions.createGeneralSession;\n }, [actions.createGeneralSession]);\n const canGeneral =\n hosts.length > 0\n ? hosts.some((host) => host.createGeneralSession !== undefined)\n : actions.createGeneralSession !== undefined;\n const beginGeneral = useCallback(() => {\n const host = hosts.find((host) => host.id === selected) ?? (hosts.length === 1 ? hosts[0] : undefined);\n if (host) {\n if (host.status === 'connected') host.createGeneralSession?.();\n } else if (hosts.length > 1) setChoosing('general');\n else generalAction.current?.();\n }, [hosts, selected]);\n const workspaceDisabled = hosts.length === 1 && hosts[0]!.status !== 'connected';\n const generalHost = hosts.find((host) => host.id === selected) ?? (hosts.length === 1 ? hosts[0] : undefined);\n const sessionDisabled =\n generalHost !== undefined && (generalHost.status !== 'connected' || generalHost.createGeneralSession === undefined);\n const createMenu = useMemo(\n () => (\n <SessionCreateMenu\n onCreateWorkspace={canAdd ? beginAdd : undefined}\n onCreateSession={canGeneral ? beginGeneral : undefined}\n workspaceDisabled={workspaceDisabled}\n sessionDisabled={sessionDisabled}\n />\n ),\n [canAdd, canGeneral, beginAdd, beginGeneral, workspaceDisabled, sessionDisabled],\n );\n const viewTitle = VIEWS.find(({ value }) => value === view)!.title;\n const headerAction = useMemo(\n () => (\n <View style={styles.titleActions}>\n <IconButton label={`View: ${viewTitle}`} onPress={() => setViewing(true)}>\n <SlidersIcon size={18} color=\"dim\" />\n </IconButton>\n {canGeneral || canAdd ? createMenu : null}\n </View>\n ),\n [viewTitle, canGeneral, canAdd, createMenu],\n );\n // The app owns the title, including when the list is empty.\n useEffect(() => {\n if (!setHeaderAction) return;\n setHeaderAction(headerAction);\n return () => setHeaderAction(null);\n }, [setHeaderAction, headerAction]);\n const sessions = workspaces.flatMap((workspace) => workspace.sessions).filter((session) => !stale(session.id));\n const { setSessionGroups, renameGroup, deleteGroup, removePendingSetup } = actions;\n // Older phone apps lack these, so their entries stay hidden rather than failing on tap.\n const groupActions =\n setSessionGroups && renameGroup && deleteGroup ? { setSessionGroups, renameGroup, deleteGroup } : undefined;\n const workspaceHeader = (section: (typeof sections)[number], quiet = false) => (\n <WorkspaceHeader\n workspace={{ ...section.workspace, available: section.members.some((member) => member.available) }}\n actions={actions}\n onOpen={\n openWorkspace && !section.workspace.legacy\n ? () => {\n const members = workspaces.filter((entry) => !entry.legacy && entry.name === section.workspace.name);\n if (hosts.length > 1 && members.length > 1) {\n setChooseAction('open');\n setChoosing(members);\n } else openWorkspace(section.workspace.id);\n }\n : undefined\n }\n onWorkspaceMenu={(entry) => {\n const members = workspaces.filter((workspace) => !workspace.legacy && workspace.name === entry.name);\n if (hosts.length > 1 && members.length > 1) {\n setChooseAction('menu');\n setChoosing(members);\n } else if (!stale(entry.id)) setWorkspaceMenu(entry.id);\n }}\n stale={stale(section.workspace.id)}\n merged={section.members.length > 1}\n quiet={quiet}\n onCreate={() => {\n // Always choose for a merged heading, even while viewing a filtered computer.\n const members = workspaces.filter((entry) => !entry.legacy && entry.name === section.workspace.name);\n if (hosts.length > 1 && members.length > 1) {\n setChooseAction('create');\n setChoosing(members);\n } else if (!stale(section.workspace.id)) actions.createSession(section.workspace.id);\n }}\n />\n );\n const sessionCard = (\n session: WebTemplateRailSession,\n hostLabel: string | undefined,\n flat?: { workspaceName?: string; age?: number },\n ) => (\n <View style={styles.sessionRow}>\n <SessionCard\n session={session}\n stale={stale(session.id)}\n hostLabel={hostLabel}\n {...(flat ? { flat: true, ...flat } : {})}\n onOpen={openSession}\n onMenu={(entry) => setSessionMenu(entry.id)}\n {...(removePendingSetup\n ? {\n onSetupMenu: (setup: WebTemplateRailPendingSetup) => setSetupMenu({ sessionId: session.id, setup }),\n }\n : {})}\n />\n </View>\n );\n const listEmpty = (\n <EmptyState\n title={selected ? 'No sessions on this computer.' : 'No sessions yet.'}\n description={\n canGeneral\n ? 'Start a session to work with Po. No workspace needed.'\n : 'Add a workspace to start working with Po.'\n }\n />\n );\n const listHeader = (\n <View style={styles.listHeader}>\n {/* The phone's host drawer picks the computer; the list only honours its initial choice. */}\n {hosts\n .filter((host) => host.status !== 'connected' && (selected === null || selected === host.id))\n .map((host) => (\n <InfoStrip\n key={host.id}\n message={\n host.status === 'update_required'\n ? `${host.label} needs an app update. Sessions are read-only.`\n : `${host.label} is offline. Showing last known sessions.`\n }\n actionLabel=\"Retry\"\n onAction={host.onRetry}\n />\n ))}\n {setHeaderAction ? null : headerAction}\n </View>\n );\n return (\n <>\n {view === 'sessions' ? (\n <SectionList\n style={styles.screen}\n contentContainerStyle={styles.listContent}\n contentInsetAdjustmentBehavior=\"automatic\"\n sections={timeline}\n keyExtractor={({ session }) => session.id}\n stickySectionHeadersEnabled={false}\n initialNumToRender={12}\n maxToRenderPerBatch={12}\n windowSize={5}\n renderSectionHeader={({ section }) => (\n <SectionLabel style={styles.timelineLabel}>{section.title}</SectionLabel>\n )}\n renderSectionFooter={({ section }) =>\n section === timeline[timeline.length - 1] ? null : <View style={styles.sectionGap} />\n }\n renderItem={({ item, section }) =>\n sessionCard(\n item.session,\n hosts.length > 1 && selected === null ? hostOf(item.session.id)?.label : undefined,\n {\n ...(item.workspaceName === undefined ? {} : { workspaceName: item.workspaceName }),\n // A waiting card shows its rose count instead.\n ...(section.key === 'recent' && item.session.lastActivityAt !== undefined\n ? { age: item.session.lastActivityAt }\n : {}),\n },\n )\n }\n ListEmptyComponent={listEmpty}\n ListHeaderComponent={listHeader}\n />\n ) : (\n <SectionList\n style={styles.screen}\n contentContainerStyle={styles.listContent}\n contentInsetAdjustmentBehavior=\"automatic\"\n sections={sections}\n keyExtractor={(session) => session.id}\n stickySectionHeadersEnabled={false}\n initialNumToRender={12}\n maxToRenderPerBatch={12}\n windowSize={5}\n renderSectionHeader={({ section }) =>\n section.workspace.kind === 'session' ? null : (\n <>\n {section.showWorkspace ? workspaceHeader(section) : null}\n <View style={styles.hostGroup}>\n {/* One quiet row names the computer and path once, above its sessions. */}\n <View style={styles.hostRow} accessibilityRole=\"header\">\n {hosts.length > 1 && selected === null && hostOf(section.workspace.id) ? (\n <>\n <MonitorIcon size={14} color=\"dim\" />\n <Text style={styles.hostLabel} numberOfLines={1}>\n {hostOf(section.workspace.id)!.label} ·\n </Text>\n </>\n ) : null}\n <Text style={styles.groupRoot} numberOfLines={1} ellipsizeMode=\"middle\">\n {section.workspace.root}\n </Text>\n </View>\n {!section.workspace.available ? <Text style={styles.unavailable}>Workspace unavailable</Text> : null}\n {section.data.length === 0 ? (\n <Text style={styles.noSessions}>No sessions yet. Start or resume one.</Text>\n ) : null}\n </View>\n </>\n )\n }\n renderSectionFooter={({ section }) => {\n const next = sections[sections.indexOf(section) + 1];\n // A computer subgroup sits closer to its siblings than the next workspace does.\n return (\n <View style={next === undefined ? undefined : next.showWorkspace ? styles.sectionGap : styles.hostGap} />\n );\n }}\n renderItem={({ item: session, section }) =>\n sessionCard(\n session,\n section.workspace.kind === 'session' && hosts.length > 1 && selected === null\n ? hostOf(session.id)?.label\n : undefined,\n )\n }\n ListFooterComponent={\n idle.length > 0 ? (\n <OtherWorkspaces\n count={idle.length}\n open={otherOpen}\n afterList={sections.length > 0}\n onToggle={() => {\n setLocalOtherOpen(!otherOpen);\n setOtherWorkspacesOpen?.(!otherOpen);\n }}\n >\n {idle.map((section) => (\n <View key={section.key} style={styles.otherRow}>\n {workspaceHeader(section, true)}\n {!section.members.some((member) => member.available) ? (\n <Text style={styles.unavailable}>Workspace unavailable</Text>\n ) : null}\n </View>\n ))}\n </OtherWorkspaces>\n ) : undefined\n }\n ListEmptyComponent={listEmpty}\n ListHeaderComponent={listHeader}\n />\n )}\n <SessionMenuSheet\n session={sessions.find((session) => session.id === sessionMenu) ?? null}\n actions={actions}\n {...(groupActions ? { onGroups: (session: WebTemplateRailSession) => setGroupsFor(session.id) } : {})}\n onClose={() => setSessionMenu(null)}\n />\n <WorkspaceMenuSheet\n workspace={workspaces.find((workspace) => workspace.id === workspaceMenu && !stale(workspace.id)) ?? null}\n actions={actions}\n onClose={() => setWorkspaceMenu(null)}\n />\n {groupActions ? (\n <SessionGroupsSheet\n session={sessions.find((session) => session.id === groupsFor) ?? null}\n sessions={sessions}\n actions={groupActions}\n onClose={() => setGroupsFor(null)}\n />\n ) : null}\n {removePendingSetup ? (\n <SetupMenuSheet target={setupMenu} removePendingSetup={removePendingSetup} onClose={() => setSetupMenu(null)} />\n ) : null}\n {addActions && (hosts.length === 0 || hosts.find(({ id }) => id === addHost)?.status === 'connected') ? (\n <AddWorkspaceSheet\n open={adding}\n actions={addActions}\n onClose={() => {\n setAdding(false);\n setAddHost(null);\n }}\n />\n ) : null}\n <Sheet\n open={choosing !== null}\n onOpenChange={(open) => {\n if (!open) setChoosing(null);\n }}\n >\n <SheetContent>\n <SheetHeader>\n <SheetTitle>Which computer?</SheetTitle>\n </SheetHeader>\n <SheetBody>\n {choosing === 'general'\n ? hosts.map((host) => (\n <Button\n key={host.id}\n variant=\"ghost\"\n disabled={host.status !== 'connected' || !host.createGeneralSession}\n onPress={() => {\n setChoosing(null);\n host.createGeneralSession?.();\n }}\n >\n {host.label}\n {host.status !== 'connected' ? UNAVAILABLE_LABEL : ''}\n </Button>\n ))\n : choosing === 'add'\n ? hosts.map((host) => (\n <Button\n key={host.id}\n variant=\"ghost\"\n disabled={host.status !== 'connected' || !host.addWorkspaceActions}\n onPress={() => {\n setAddHost(host.id);\n setChoosing(null);\n setAdding(true);\n }}\n >\n {host.label}\n {host.status !== 'connected' ? UNAVAILABLE_LABEL : ''}\n </Button>\n ))\n : choosing?.map((workspace) => (\n <Button\n key={workspace.id}\n variant=\"ghost\"\n disabled={chooseAction !== 'open' && (stale(workspace.id) || !workspace.available)}\n onPress={() => {\n setChoosing(null);\n if (chooseAction === 'open') openWorkspace?.(workspace.id);\n else if (chooseAction === 'menu') setWorkspaceMenu(workspace.id);\n else actions.createSession(workspace.id);\n }}\n >\n {hostOf(workspace.id)?.label ?? workspace.name} · {workspace.root}\n {stale(workspace.id) ? UNAVAILABLE_LABEL : ''}\n </Button>\n ))}\n </SheetBody>\n </SheetContent>\n </Sheet>\n <SessionViewSheet\n open={viewing}\n view={view}\n onClose={() => setViewing(false)}\n onChoose={(value) => {\n setLocalView(value);\n setSessionView?.(value);\n setViewing(false);\n }}\n />\n </>\n );\n}\n\n/** The View sheet: how the Sessions screen lists its sessions. */\nexport function SessionViewSheet({\n open,\n view,\n onClose,\n onChoose,\n}: {\n open: boolean;\n view: NativeSessionView;\n onClose: () => void;\n onChoose: (view: NativeSessionView) => void;\n}) {\n return (\n <Sheet\n open={open}\n onOpenChange={(next) => {\n if (!next) onClose();\n }}\n >\n <SheetContent>\n <SheetHeader>\n <SheetTitle>View</SheetTitle>\n </SheetHeader>\n <SheetBody>\n <View style={styles.viewOptions}>\n {VIEWS.map(({ value, title, description, Icon }) => (\n <ListRow\n key={value}\n title={title}\n description={description}\n leading={<Icon size={20} color={value === view ? 'green' : 'dim'} />}\n trailing={value === view ? <CheckIcon size={18} color=\"green\" /> : null}\n selected={value === view}\n disclosure={false}\n style={[styles.viewOption, value === view && styles.viewOptionSelected]}\n onPress={() => onChoose(value)}\n />\n ))}\n </View>\n </SheetBody>\n </SheetContent>\n </Sheet>\n );\n}\n\nconst styles = StyleSheet.create((theme) => {\n const sans = fontOf(theme.fontFamily.sans);\n const text = (size: 'xs' | 'sm' | 'base' | 'lg', color: string) => ({\n fontFamily: sans,\n fontSize: theme.fontSize[size],\n lineHeight: theme.lineHeight[size],\n color,\n });\n return {\n // The cockpit's rail surface: this screen is the phone's rail.\n screen: { flex: 1, backgroundColor: theme.colors.rail },\n content: { padding: theme.spacing(4), gap: theme.spacing(6) },\n listContent: { padding: theme.spacing(4) },\n listHeader: { gap: theme.spacing(3), paddingBottom: theme.spacing(4) },\n titleActions: { flexDirection: 'row', alignItems: 'center' },\n timelineLabel: { paddingHorizontal: theme.spacing(1), paddingBottom: theme.spacing(1) },\n viewOptions: { gap: theme.spacing(2) },\n viewOption: { borderRadius: theme.borderRadius.lg, borderWidth: 1, borderColor: theme.colors['border-soft'] },\n viewOptionSelected: { borderColor: theme.colors['edge-green'] },\n sectionGap: { height: theme.spacing(6) },\n sessionRow: { gap: theme.spacing(1), paddingTop: theme.spacing(1) },\n group: { gap: theme.spacing(1) },\n // The content gap already spaces the heading from the first group, so it pulls up into it.\n railHead: {\n flexDirection: 'row',\n alignItems: 'center',\n paddingHorizontal: theme.spacing(1),\n marginBottom: -theme.spacing(4),\n },\n listRailHead: { marginBottom: theme.spacing(2) },\n railTitle: { ...text('lg', theme.colors.hi), fontWeight: theme.fontWeight.semibold, flex: 1 },\n groupHead: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: theme.spacing(2),\n paddingHorizontal: theme.spacing(1),\n paddingBottom: theme.spacing(2),\n },\n groupText: { flex: 1, minWidth: 0 },\n workspaceLink: { minHeight: 44, justifyContent: 'center' },\n groupName: { ...text('lg', theme.colors.hi), fontWeight: theme.fontWeight.semibold },\n groupRoot: { ...text('sm', theme.colors.dim), fontFamily: fontOf(theme.fontFamily.mono), flexShrink: 1 },\n hostGroup: { gap: theme.spacing(1), paddingHorizontal: theme.spacing(1), paddingBottom: theme.spacing(1) },\n hostGap: { height: theme.spacing(3) },\n hostRow: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: theme.spacing(1.5),\n paddingBottom: theme.spacing(2),\n borderBottomWidth: 1,\n borderColor: theme.colors['border-soft'],\n },\n // The host name keeps its room; the path gives way first.\n hostLabel: { ...text('sm', theme.colors.dim), flexShrink: 0, maxWidth: '60%' },\n noSessions: {\n ...text('sm', theme.colors.dim),\n paddingHorizontal: theme.spacing(1),\n paddingBottom: theme.spacing(2),\n },\n unavailable: { ...text('sm', theme.colors.red), paddingHorizontal: theme.spacing(1) },\n // Workspaces without sessions, folded below the list into one quiet row.\n other: { gap: theme.spacing(1) },\n otherAfterList: { marginTop: theme.spacing(6) },\n otherHead: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: theme.spacing(2),\n minHeight: 44,\n paddingHorizontal: theme.spacing(1),\n borderRadius: theme.borderRadius.lg,\n },\n otherLabel: { ...text('lg', theme.colors.hi), fontWeight: theme.fontWeight.semibold, flex: 1 },\n // A neutral count, apart from the rose counts of things waiting on the person.\n otherCount: {\n ...text('xs', theme.colors.dim),\n minWidth: 22,\n paddingHorizontal: theme.spacing(1.5),\n borderRadius: 11,\n overflow: 'hidden',\n textAlign: 'center',\n backgroundColor: theme.colors.panel,\n },\n otherRow: { marginLeft: theme.spacing(4) },\n quietHead: { paddingBottom: 0 },\n quietName: { ...text('base', theme.colors.hi), fontWeight: theme.fontWeight.medium },\n // The cockpit's dashed empty card.\n empty: {\n gap: theme.spacing(3),\n paddingHorizontal: theme.spacing(4),\n paddingVertical: theme.spacing(5),\n borderRadius: theme.borderRadius.lg,\n borderWidth: 1,\n borderStyle: 'dashed',\n borderColor: theme.colors.border,\n },\n emptyText: text('sm', theme.colors.dim),\n emptyButton: { justifyContent: 'flex-start', backgroundColor: theme.colors.panel },\n card: {\n gap: theme.spacing(2),\n padding: theme.spacing(3),\n borderRadius: theme.borderRadius.lg,\n borderWidth: 1,\n // Flat like the cockpit card: no fill or edge until pressed or active.\n borderColor: 'transparent',\n },\n cardPressed: { backgroundColor: theme.colors.panel },\n cardActive: { backgroundColor: theme.colors['tint-green'], borderColor: theme.colors['edge-green'] },\n nested: { marginLeft: theme.spacing(5) },\n iconButton: {\n width: 44,\n height: 44,\n borderRadius: theme.borderRadius.lg,\n alignItems: 'center',\n justifyContent: 'center',\n },\n iconPressed: { backgroundColor: theme.colors.panel },\n cardHead: { flexDirection: 'row', alignItems: 'flex-start', gap: theme.spacing(2.5) },\n avatar: {\n // Small enough to share the status line, so the card stays two lines tall.\n width: 24,\n height: 24,\n borderRadius: 12,\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: theme.colors['tint-green'],\n },\n initials: { ...text('xs', theme.colors.green), fontWeight: theme.fontWeight.semibold },\n nameBadge: { borderColor: theme.colors.bg },\n cardText: { flex: 1, minWidth: 0, gap: theme.spacing(1) },\n nameRow: { flexDirection: 'row', alignItems: 'center', gap: theme.spacing(1.5) },\n name: { ...text('base', theme.colors.hi), fontWeight: theme.fontWeight.semibold, flexShrink: 1 },\n detailRow: { flexDirection: 'row', alignItems: 'center', gap: theme.spacing(2) },\n // On a narrow phone the branch wraps under the status rather than being cut.\n statusRow: {\n flex: 1,\n minWidth: 0,\n flexDirection: 'row',\n flexWrap: 'wrap',\n alignItems: 'center',\n columnGap: theme.spacing(1.5),\n rowGap: 2,\n },\n status: (tone: StatusTone) => ({\n ...text('sm', tone === 'failed' ? theme.colors.red : tone === 'running' ? theme.colors.yellow : theme.colors.dim),\n flexShrink: 1,\n }),\n branchRow: { flexDirection: 'row', alignItems: 'center', gap: theme.spacing(1) },\n branch: { ...text('sm', theme.colors.dim), fontFamily: fontOf(theme.fontFamily.mono), flexShrink: 1 },\n modified: text('sm', theme.colors.yellow),\n age: { ...text('xs', theme.colors.dim), marginLeft: 'auto' },\n groupsRow: { flexDirection: 'row', alignItems: 'flex-start', gap: theme.spacing(1.5) },\n groups: { flex: 1, flexDirection: 'row', flexWrap: 'wrap', gap: theme.spacing(1) },\n // The cockpit's pending setup panel: indented, soft edge, panel fill.\n setup: {\n gap: theme.spacing(1),\n marginLeft: theme.spacing(4),\n padding: theme.spacing(3),\n borderRadius: theme.borderRadius.md,\n borderWidth: 1,\n borderColor: theme.colors['border-soft'],\n backgroundColor: theme.colors.panel,\n },\n setupStatus: (failed: boolean) => text('sm', failed ? theme.colors.red : theme.colors.dim),\n // The kebab's 44 point target sits inside the panel's padding rather than growing the row.\n setupHead: { flexDirection: 'row', alignItems: 'center', gap: theme.spacing(2), marginVertical: -theme.spacing(2) },\n setupName: { flex: 1 },\n recovery: text('sm', theme.colors.dim),\n error: text('sm', theme.colors.red),\n };\n});\n","import type { NativeTemplateFile } from '@agimon-ai/po-core/native';\n\nimport { AdvancedSessions } from '../_components/AdvancedSessions.native';\n\n/** The phone half of Advanced. Screens it leaves out stay the app's own. */\nexport const advancedNativeTemplate = {\n label: 'Advanced',\n description: 'Workspace-grouped session cards, matching the cockpit rail.',\n contractVersion: 1,\n screens: { sessions: AdvancedSessions },\n} satisfies NativeTemplateFile;\n","import { defineNativeTemplate } from '@agimon-ai/po-core/native';\n\nimport { advancedNativeTemplate } from '../../(frontend)/template/_lib/nativeDefinition.native';\n\nexport default defineNativeTemplate(advancedNativeTemplate);\n","import { defineNativeTemplate } from '@agimon-ai/po-core/native';\n\nimport { advancedNativeTemplate } from '../../../(frontend)/template/_lib/nativeDefinition.native';\n\nexport default defineNativeTemplate(advancedNativeTemplate);\n","import { defineNativeTemplate } from '@agimon-ai/po-core/native';\n\nimport { advancedNativeTemplate } from '../../../../(frontend)/template/_lib/nativeDefinition.native';\n\nexport default defineNativeTemplate(advancedNativeTemplate);\n","// Generated by @agimon-ai/po-build. Do not edit by hand.\nimport { defineNativePlugin, type WebPluginContributions } from '@agimon-ai/po-core/native';\n\nimport templatePoTemplateAdvanced from '../src/extensions/(frontend)/template/po-template-advanced.native';\nimport templatePoTemplateAdvanced2 from '../src/extensions/workspaces/(frontend)/template/po-template-advanced.native';\nimport templatePoTemplateAdvanced3 from '../src/extensions/workspaces/sessions/(frontend)/template/po-template-advanced.native';\n\nconst via = <T>(identity: Record<string, unknown>, value: unknown): T =>\n (value === undefined ? undefined : { ...identity, ...(value as object) }) as T;\n\nexport const nativePlugin = defineNativePlugin({\n id: 'template-advanced',\n global: {\n get nativeTemplates(): WebPluginContributions['nativeTemplates'] { return [via({ id: 'po-template-advanced' }, templatePoTemplateAdvanced)]; },\n },\n workspace: {\n get nativeTemplates(): WebPluginContributions['nativeTemplates'] { return [via({ id: 'po-template-advanced' }, templatePoTemplateAdvanced2)]; },\n },\n session: {\n get nativeTemplates(): WebPluginContributions['nativeTemplates'] { return [via({ id: 'po-template-advanced' }, templatePoTemplateAdvanced3)]; },\n },\n});\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agimon-ai/po-template-advanced",
3
- "version": "0.0.0-alpha.97",
3
+ "version": "0.0.0-alpha.99",
4
4
  "description": "Advanced multi-panel template for the Po web client.",
5
5
  "keywords": [
6
6
  "ai",
@@ -54,16 +54,16 @@
54
54
  "access": "public"
55
55
  },
56
56
  "dependencies": {
57
- "@agimon-ai/po-core": "0.0.0-alpha.97",
58
- "@agimon-ai/po-web-components": "0.0.0-alpha.97",
59
- "@agimon-ai/po-web-dashboard": "0.0.0-alpha.97",
57
+ "@agimon-ai/po-core": "0.0.0-alpha.99",
58
+ "@agimon-ai/po-web-components": "0.0.0-alpha.99",
59
+ "@agimon-ai/po-web-dashboard": "0.0.0-alpha.99",
60
60
  "@tanstack/react-router": "1.170.45",
61
61
  "@tanstack/react-store": "0.11.2"
62
62
  },
63
63
  "devDependencies": {
64
- "@agimon-ai/po-build": "0.0.0-alpha.97",
65
- "@agimon-ai/po-native-components": "0.0.0-alpha.97",
66
- "@agimon-ai/vibe-lint-plugin-po-extension": "0.0.0-alpha.97",
64
+ "@agimon-ai/po-build": "0.0.0-alpha.99",
65
+ "@agimon-ai/po-native-components": "0.0.0-alpha.99",
66
+ "@agimon-ai/vibe-lint-plugin-po-extension": "0.0.0-alpha.99",
67
67
  "@babel/core": "7.29.7",
68
68
  "@earendil-works/pi-coding-agent": "1.4.0",
69
69
  "@types/node": "26.6.5",