Files

343 lines
15 KiB
JSON

{
"summary": {
"filesScanned": 120,
"elementsParsed": 10219,
"vstackUses": 1425,
"hstackUses": 853
},
"sections": [
{
"title": "Layout idiom census — exact VStack/HStack/Card/Grid/Section configs (≥ 3 uses, ≥ 2 files)",
"rows": [
{
"signature": "VStack(gap=1)",
"count": 464,
"files": 34,
"filesList": "src/features/artifacts/ArtifactViewer.tsx, src/features/auth/pages/ProfileSettingsPage.tsx, src/features/dispatch/ProjectDispatch.tsx, src/features/organizations/containers/InvitationContainer.tsx, src/features/organizations/containers/OrganizationSettingsContainer.tsx … (+29 more)",
"example": "src/features/artifacts/ArtifactViewer.tsx:194"
},
{
"signature": "VStack(gap=0)",
"count": 360,
"files": 34,
"filesList": "src/features/artifacts/ArtifactViewer.tsx, src/features/auth/containers/UserProfileMenu.tsx, src/features/auth/pages/ProfileSettingsPage.tsx, src/features/dispatch/IntegrationCard.tsx, src/features/organizations/components/MemberTable.tsx … (+29 more)",
"example": "src/features/artifacts/ArtifactViewer.tsx:174"
},
{
"signature": "HStack(gap=2,vAlign=center)",
"count": 204,
"files": 26,
"filesList": "src/features/artifacts/ArtifactViewer.tsx, src/features/conversations/WorkspaceToolsPanel.tsx, src/features/playbooks/PlaybookDiagram.tsx, src/features/tasks/TaskKanbanBoard.tsx, src/pages/AgentDetails.tsx … (+21 more)",
"example": "src/features/artifacts/ArtifactViewer.tsx:166"
},
{
"signature": "Card(padding=4)",
"count": 160,
"files": 16,
"filesList": "src/features/dispatch/IntegrationCard.tsx, src/pages/AgentPluginDetails.tsx, src/pages/AgentPlugins.tsx, src/pages/ConnectorDetails.tsx, src/pages/Connectors.tsx … (+11 more)",
"example": "src/features/dispatch/IntegrationCard.tsx:40"
},
{
"signature": "StackItem(size=fill)",
"count": 150,
"files": 20,
"filesList": "src/features/artifacts/ArtifactViewer.tsx, src/features/conversations/WorkspaceToolsPanel.tsx, src/features/dispatch/IntegrationCard.tsx, src/features/playbooks/PlaybookDiagram.tsx, src/features/playbooks/PlaybookFlow.tsx … (+15 more)",
"example": "src/features/artifacts/ArtifactViewer.tsx:173"
},
{
"signature": "HStack(gap=3,vAlign=center)",
"count": 138,
"files": 33,
"filesList": "src/features/artifacts/ArtifactViewer.tsx, src/features/auth/components/AuthLayout.tsx, src/features/dispatch/IntegrationCard.tsx, src/features/organizations/components/MemberTable.tsx, src/features/organizations/containers/OrganizationInvitationsContainer.tsx … (+28 more)",
"example": "src/features/artifacts/ArtifactViewer.tsx:370"
},
{
"signature": "VStack(gap=3)",
"count": 128,
"files": 30,
"filesList": "src/features/artifacts/ArtifactViewer.tsx, src/features/dispatch/IntegrationCard.tsx, src/features/organizations/pages/OrganizationCreatePage.tsx, src/features/playbooks/PlaybookDiagram.tsx, src/features/playbooks/PlaybookFlow.tsx … (+25 more)",
"example": "src/features/artifacts/ArtifactViewer.tsx:193"
},
{
"signature": "VStack(gap=4)",
"count": 114,
"files": 19,
"filesList": "src/features/auth/pages/LoginPage.tsx, src/features/auth/pages/SignupPage.tsx, src/features/organizations/components/OrganizationForm.tsx, src/pages/AgentDetails.tsx, src/pages/AgentPlugins.tsx … (+14 more)",
"example": "src/features/auth/pages/LoginPage.tsx:115"
},
{
"signature": "VStack(gap=2)",
"count": 96,
"files": 20,
"filesList": "src/features/agent-backends/AcpLaunchInstructions.tsx, src/features/artifacts/ArtifactViewer.tsx, src/features/auth/components/AuthLayout.tsx, src/features/auth/containers/UserProfileMenu.tsx, src/features/dispatch/IntegrationCard.tsx … (+15 more)",
"example": "src/features/agent-backends/AcpLaunchInstructions.tsx:31"
},
{
"signature": "Grid(columns=expr,gap=4)",
"count": 93,
"files": 22,
"filesList": "src/features/auth/pages/ProfileSettingsPage.tsx, src/features/auth/pages/SignupPage.tsx, src/pages/AgentDetails.tsx, src/pages/AgentPluginDetails.tsx, src/pages/AgentPlugins.tsx … (+17 more)",
"example": "src/features/auth/pages/ProfileSettingsPage.tsx:129"
}
],
"total": 81
},
{
"title": "Repeated JSX structure fingerprints (≥ 3 occurrences, ≥ 2 files)",
"rows": [
{
"signature": "Text(color:s,type:s)[#t1]",
"count": 1255,
"files": 47,
"filesList": "src/features/agent-backends/AcpLaunchInstructions.tsx, src/features/artifacts/ArtifactViewer.tsx, src/features/auth/components/AuthLayout.tsx, src/features/auth/pages/ProfileSettingsPage.tsx, src/features/conversations/WorkspaceToolsPanel.tsx … (+42 more)",
"example": "src/features/agent-backends/AcpLaunchInstructions.tsx:24"
},
{
"signature": "Heading(level:s)[#t1]",
"count": 837,
"files": 42,
"filesList": "src/features/artifacts/ArtifactViewer.tsx, src/features/auth/pages/ProfileSettingsPage.tsx, src/features/dispatch/ProjectDispatch.tsx, src/features/organizations/containers/InvitationContainer.tsx, src/features/organizations/containers/OrganizationInvitationsContainer.tsx … (+37 more)",
"example": "src/features/artifacts/ArtifactViewer.tsx:156"
},
{
"signature": "Icon(color:s,icon:s,size:s)[]",
"count": 347,
"files": 40,
"filesList": "src/features/artifacts/ArtifactViewer.tsx, src/features/auth/containers/UserProfileMenu.tsx, src/features/conversations/WorkspaceToolsPanel.tsx, src/features/dispatch/IntegrationCard.tsx, src/features/dispatch/ProjectDispatch.tsx … (+35 more)",
"example": "src/features/artifacts/ArtifactViewer.tsx:126"
},
{
"signature": "Text(type:s,weight:s)[#t1]",
"count": 314,
"files": 31,
"filesList": "src/features/artifacts/ArtifactViewer.tsx, src/features/auth/pages/ProfileSettingsPage.tsx, src/features/conversations/WorkspaceToolsPanel.tsx, src/features/dispatch/IntegrationCard.tsx, src/features/organizations/containers/OrganizationSettingsContainer.tsx … (+26 more)",
"example": "src/features/artifacts/ArtifactViewer.tsx:175"
},
{
"signature": "Badge(label:s,variant:s)[]",
"count": 256,
"files": 37,
"filesList": "src/features/artifacts/ArtifactViewer.tsx, src/features/dispatch/IntegrationCard.tsx, src/features/dispatch/ProjectDispatch.tsx, src/features/git-providers/GitProviderSelector.tsx, src/features/organizations/components/InvitationTable.tsx … (+32 more)",
"example": "src/features/artifacts/ArtifactViewer.tsx:387"
},
{
"signature": "VStack(gap:s)[Heading(level:s)[#t1];Text(color:s,type:s)[#t1]]",
"count": 218,
"files": 28,
"filesList": "src/features/auth/pages/ProfileSettingsPage.tsx, src/features/dispatch/ProjectDispatch.tsx, src/features/organizations/containers/OrganizationSettingsContainer.tsx, src/pages/AgentDetails.tsx, src/pages/AgentPluginDetails.tsx … (+23 more)",
"example": "src/features/auth/pages/ProfileSettingsPage.tsx:93"
},
{
"signature": "Text(type:s)[#t1]",
"count": 182,
"files": 25,
"filesList": "src/features/artifacts/ArtifactViewer.tsx, src/features/auth/containers/UserProfileMenu.tsx, src/features/dispatch/IntegrationCard.tsx, src/features/organizations/pages/OrganizationCreatePage.tsx, src/features/playbooks/PlaybookFlow.tsx … (+20 more)",
"example": "src/features/artifacts/ArtifactViewer.tsx:267"
},
{
"signature": "Icon(icon:s,size:s)[]",
"count": 170,
"files": 47,
"filesList": "src/features/artifacts/ArtifactViewer.tsx, src/features/auth/containers/UserProfileMenu.tsx, src/features/auth/pages/LoginPage.tsx, src/features/auth/pages/SignupPage.tsx, src/features/connectors/EnvironmentLabels.tsx … (+42 more)",
"example": "src/features/artifacts/ArtifactViewer.tsx:244"
},
{
"signature": "Button(label:s,onClick:s,variant:s)[]",
"count": 149,
"files": 28,
"filesList": "src/features/conversations/WorkspaceToolsPanel.tsx, src/features/dispatch/ProjectDispatch.tsx, src/features/organizations/containers/InvitationContainer.tsx, src/features/organizations/containers/OrganizationInvitationsContainer.tsx, src/features/organizations/containers/OrganizationPeopleContainer.tsx … (+23 more)",
"example": "src/features/conversations/WorkspaceToolsPanel.tsx:224"
},
{
"signature": "VStack(gap:s)[Text(color:s,type:s)[#t1];Heading(level:s)[#t1];Text(color:s,type:s)[#t1]]",
"count": 136,
"files": 13,
"filesList": "src/pages/AgentPluginDetails.tsx, src/pages/AgentPlugins.tsx, src/pages/ConnectorDetails.tsx, src/pages/Connectors.tsx, src/pages/GitProviderDetails.tsx … (+8 more)",
"example": "src/pages/AgentPluginDetails.tsx:235"
}
],
"total": 220
},
{
"title": "Known hand-rolled idioms — extraction candidates",
"rows": [
{
"idiom": "Label+description pair (VStack gap=0: Text + supporting Text)",
"key": "labelPair",
"count": 64,
"files": 18,
"examples": [
"src/features/artifacts/ArtifactViewer.tsx:174",
"src/features/auth/containers/UserProfileMenu.tsx:88",
"src/features/auth/pages/ProfileSettingsPage.tsx:108"
]
},
{
"idiom": "Section header (VStack gap=0: Heading + supporting Text)",
"key": "sectionHeader",
"count": 163,
"files": 25,
"examples": [
"src/features/organizations/containers/InvitationContainer.tsx:184",
"src/features/playbooks/PlaybookDiagram.tsx:105",
"src/features/playbooks/PlaybookFlow.tsx:35"
]
},
{
"idiom": "Stat card (Card padding>=3 > VStack gap=1: 2 supporting Texts + Heading)",
"key": "statCard",
"count": 138,
"files": 13,
"examples": [
"src/pages/AgentPluginDetails.tsx:234",
"src/pages/AgentPlugins.tsx:240",
"src/pages/ConnectorDetails.tsx:175"
]
},
{
"idiom": "Icon + text row (HStack vAlign=center: Icon + VStack)",
"key": "iconTextRow",
"count": 54,
"files": 14,
"examples": [
"src/pages/AgentPluginDetails.tsx:123",
"src/pages/AgentPlugins.tsx:124",
"src/pages/GitProviderDetails.tsx:111"
]
},
{
"idiom": "Form action row (HStack gap=2: 2+ Buttons)",
"key": "formActions",
"count": 43,
"files": 13,
"examples": [
"src/features/artifacts/ArtifactViewer.tsx:216",
"src/pages/AgentDetails.tsx:806",
"src/pages/Agents.tsx:783"
]
},
{
"idiom": "Wizard progress (HStack wrap=wrap of Badge+Text steps)",
"key": "wizardProgress",
"count": 0,
"files": 0,
"examples": []
}
],
"total": 6
},
{
"title": "Most similar page pairs (Jaccard over structure fingerprints)",
"rows": [
{
"pair": "src/pages/GitProviders.tsx ↔ src/pages/Integrations.tsx",
"jaccard": "0.76",
"shared": 22
},
{
"pair": "src/pages/NewIntegration.tsx ↔ src/pages/NewIssueProvider.tsx",
"jaccard": "0.58",
"shared": 38
},
{
"pair": "src/pages/NewGitProvider.tsx ↔ src/pages/NewIssueProvider.tsx",
"jaccard": "0.57",
"shared": 37
},
{
"pair": "src/pages/GitProviderDetails.tsx ↔ src/pages/IntegrationDetails.tsx",
"jaccard": "0.54",
"shared": 40
},
{
"pair": "src/pages/NewGitProvider.tsx ↔ src/pages/NewIntegration.tsx",
"jaccard": "0.54",
"shared": 36
},
{
"pair": "src/pages/Integrations.tsx ↔ src/pages/IssueProviders.tsx",
"jaccard": "0.47",
"shared": 18
},
{
"pair": "src/pages/Integrations.tsx ↔ src/pages/Playbooks.tsx",
"jaccard": "0.47",
"shared": 18
},
{
"pair": "src/pages/GitProviders.tsx ↔ src/pages/IssueProviders.tsx",
"jaccard": "0.46",
"shared": 18
},
{
"pair": "src/features/organizations/containers/OrganizationInvitationsContainer.tsx ↔ src/features/organizations/containers/OrganizationPeopleContainer.tsx",
"jaccard": "0.43",
"shared": 12
},
{
"pair": "src/pages/GitProviders.tsx ↔ src/pages/Playbooks.tsx",
"jaccard": "0.42",
"shared": 17
}
],
"total": 22
},
{
"title": "Most co-imported @astryxdesign/core modules (signals composite components to extract)",
"rows": [
{
"modules": "/Layout|@astryxdesign/core/Text",
"count": 46,
"files": 46
},
{
"modules": "/Icon|@astryxdesign/core/Layout",
"count": 45,
"files": 45
},
{
"modules": "/Button|@astryxdesign/core/Layout",
"count": 43,
"files": 43
},
{
"modules": "/Icon|@astryxdesign/core/Text",
"count": 42,
"files": 42
},
{
"modules": "/Button|@astryxdesign/core/Text",
"count": 39,
"files": 39
},
{
"modules": "/Button|@astryxdesign/core/Icon",
"count": 38,
"files": 38
},
{
"modules": "/Badge|@astryxdesign/core/Icon",
"count": 33,
"files": 33
},
{
"modules": "/Badge|@astryxdesign/core/Layout",
"count": 33,
"files": 33
},
{
"modules": "/Badge|@astryxdesign/core/Text",
"count": 32,
"files": 32
},
{
"modules": "/Card|@astryxdesign/core/Layout",
"count": 30,
"files": 30
}
],
"total": 211
}
]
}