├── .changeset ├── README.md └── config.json ├── .dumirc.ts ├── .github └── workflows │ ├── deploy-portal-docs.yml │ ├── docker-publish.yml │ ├── npm-publish.yml │ ├── prepare-publish.yml │ └── publish-desktop-app.yml ├── .gitignore ├── .node-version ├── .npmrc ├── .prettierrc.cjs ├── Dockerfile ├── LICENSE ├── PUBLISH.md ├── README.md ├── README.zh-CN.md ├── SECURITY.md ├── docs ├── interactive │ ├── .gitignore │ ├── .npmrc │ ├── CHANGELOG.md │ ├── README.md │ ├── components │ │ ├── Header │ │ │ └── index.tsx │ │ ├── Home │ │ │ └── index.tsx │ │ ├── Hooks │ │ │ ├── index.tsx │ │ │ ├── useTheme.tsx │ │ │ └── useUrl.tsx │ │ └── Tools │ │ │ └── index.tsx │ ├── next.config.js │ ├── package.json │ ├── pages │ │ ├── _app.mdx │ │ ├── _meta.json │ │ ├── index.mdx │ │ ├── interactive │ │ │ ├── _meta.json │ │ │ ├── client_apis.md │ │ │ ├── client_apis │ │ │ │ ├── _meta.json │ │ │ │ ├── gsctl.md │ │ │ │ ├── java_client.md │ │ │ │ └── python_client.md │ │ │ ├── configuration.md │ │ │ ├── data_import │ │ │ │ ├── _meta.json │ │ │ │ ├── data_import.md │ │ │ │ ├── data_model.md │ │ │ │ └── import_csv.md │ │ │ ├── deployment.md │ │ │ ├── development │ │ │ │ ├── _meta.json │ │ │ │ ├── cpp_procedure.md │ │ │ │ └── dev_and_test.md │ │ │ ├── getting_started.md │ │ │ ├── glossary.md │ │ │ ├── installation.md │ │ │ ├── query_manual │ │ │ │ ├── _meta.json │ │ │ │ └── cypher_manual.md │ │ │ ├── stored_procedures.md │ │ │ └── visualization │ │ │ │ ├── _meta.json │ │ │ │ ├── create_graph.md │ │ │ │ ├── data_exploration.md │ │ │ │ ├── data_modeling.md │ │ │ │ ├── data_querying.md │ │ │ │ ├── image.png │ │ │ │ ├── introduction.md │ │ │ │ └── visual_importing.md │ │ ├── portal │ │ │ ├── _meta.json │ │ │ ├── manual │ │ │ │ ├── _meta.json │ │ │ │ ├── connection.md │ │ │ │ ├── create_graph.md │ │ │ │ ├── importing.md │ │ │ │ ├── installation.md │ │ │ │ ├── modeling.md │ │ │ │ ├── overview.md │ │ │ │ ├── querying.md │ │ │ │ └── querying │ │ │ │ │ ├── _meta.json │ │ │ │ │ ├── connection.md │ │ │ │ │ ├── draw_pattern.md │ │ │ │ │ ├── gpt.md │ │ │ │ │ ├── graph_view.md │ │ │ │ │ ├── history.md │ │ │ │ │ ├── inspect_properties.md │ │ │ │ │ ├── recommand.mdx │ │ │ │ │ ├── save.md │ │ │ │ │ ├── setting_style.md │ │ │ │ │ └── table_view.md │ │ │ └── visualization │ │ │ │ ├── _meta.json │ │ │ │ ├── inspect-data.md │ │ │ │ └── search.md │ │ └── solution │ │ │ ├── _meta.json │ │ │ ├── knowledge.mdx │ │ │ └── risk_detection.mdx │ ├── public │ │ └── visualization │ │ │ ├── coordinator-settings.png │ │ │ ├── create_graph_draft_list.png │ │ │ ├── create_graph_inputname.png │ │ │ ├── create_graph_modeling.png │ │ │ ├── importing │ │ │ ├── goto_job.png │ │ │ ├── load_data.png │ │ │ ├── test_query.png │ │ │ ├── upload_end.png │ │ │ ├── upload_start.png │ │ │ └── via_config.png │ │ │ ├── modeling.png │ │ │ ├── modeling │ │ │ ├── add_property.png │ │ │ ├── add_vertex.png │ │ │ ├── add_vertex_1.png │ │ │ ├── add_vertex_edit.png │ │ │ ├── auto_parse_1.png │ │ │ ├── auto_parse_2.png │ │ │ ├── auto_parse_3.png │ │ │ ├── delete_property.png │ │ │ ├── drag_end.png │ │ │ ├── drag_other_edge.png │ │ │ ├── drag_other_edge_end.png │ │ │ ├── drag_start.png │ │ │ ├── hover_node.png │ │ │ ├── list.png │ │ │ ├── save-modeling.png │ │ │ ├── save_model.png │ │ │ ├── vaild.png │ │ │ └── via_config.png │ │ │ ├── query.png │ │ │ └── querying │ │ │ ├── connect.png │ │ │ ├── entry.png │ │ │ ├── query_default.png │ │ │ └── query_recommend.png │ ├── theme.config.tsx │ └── tsconfig.json └── portal │ ├── explore-welcome.png │ ├── explore.png │ ├── importing.png │ ├── modeling-parse.png │ ├── modeling.png │ └── query.png ├── examples ├── graphy │ ├── .fatherrc.js │ ├── .gitignore │ ├── .npmrc │ ├── .prettierrc.cjs │ ├── CHANGELOG.md │ ├── README.md │ ├── docs │ │ └── image │ │ │ └── home.png │ ├── index.html │ ├── package.json │ ├── src │ │ ├── app.tsx │ │ ├── index.tsx │ │ ├── kuzu-driver │ │ │ └── index.tsx │ │ ├── locales │ │ │ ├── en-US.ts │ │ │ ├── index.tsx │ │ │ └── zh-CN.ts │ │ └── pages │ │ │ ├── components │ │ │ ├── Container │ │ │ │ └── index.tsx │ │ │ ├── CreateHeaderPortal │ │ │ │ └── index.tsx │ │ │ ├── GraphList │ │ │ │ └── index.tsx │ │ │ ├── GraphSchema │ │ │ │ └── index.tsx │ │ │ └── index.tsx │ │ │ ├── const.tsx │ │ │ ├── dataset │ │ │ ├── cluster │ │ │ │ ├── components │ │ │ │ │ ├── Cluster │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── FetchCluster │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── FetchGraph │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── FilterCluster │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── Summarize │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── Workflow │ │ │ │ │ │ └── index.tsx │ │ │ │ │ └── index.tsx │ │ │ │ ├── graph.tsx │ │ │ │ └── index.tsx │ │ │ ├── create │ │ │ │ └── index.tsx │ │ │ ├── embed │ │ │ │ ├── graph.tsx │ │ │ │ ├── import-schema.tsx │ │ │ │ ├── index.tsx │ │ │ │ ├── parse-schema.tsx │ │ │ │ ├── right-side.tsx │ │ │ │ ├── save.tsx │ │ │ │ ├── transform.tsx │ │ │ │ └── view.tsx │ │ │ ├── extract │ │ │ │ ├── index.tsx │ │ │ │ └── setting.tsx │ │ │ ├── list │ │ │ │ ├── action.tsx │ │ │ │ ├── index.tsx │ │ │ │ ├── item.tsx │ │ │ │ └── steps.tsx │ │ │ ├── service.ts │ │ │ └── typing.tsx │ │ │ ├── explore │ │ │ ├── index.tsx │ │ │ ├── paper-reading │ │ │ │ ├── components │ │ │ │ │ ├── FetchGraph │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── PaperInfo │ │ │ │ │ │ ├── Authors │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ ├── Icons │ │ │ │ │ │ │ ├── BookMark.tsx │ │ │ │ │ │ │ ├── Doi.tsx │ │ │ │ │ │ │ ├── Pubmed.tsx │ │ │ │ │ │ │ └── pdf.tsx │ │ │ │ │ │ ├── Insight │ │ │ │ │ │ │ ├── FindPath.tsx │ │ │ │ │ │ │ ├── RelatedWork.tsx │ │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ │ └── utils.tsx │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── PaperList │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ └── useHover.tsx │ │ │ │ │ ├── Report │ │ │ │ │ │ ├── GeneratePdf.tsx │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── Searchbar │ │ │ │ │ │ ├── index.css │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── Statistics │ │ │ │ │ │ ├── Chart.tsx │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── registerServices.tsx │ │ │ │ ├── index.tsx │ │ │ │ └── locales │ │ │ │ │ ├── en-US.ts │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── zh-CN.ts │ │ │ └── services │ │ │ │ ├── graphscope.tsx │ │ │ │ └── kuzu.tsx │ │ │ └── index.tsx │ ├── tsconfig.json │ └── vite.config.ts └── mcp-portal │ ├── package.json │ ├── src │ ├── helpers.ts │ ├── index.ts │ ├── resource │ │ └── index.ts │ ├── sse.ts │ └── tools │ │ └── index.ts │ └── tsconfig.json ├── package.json ├── packages ├── studio-components │ ├── .fatherrc.js │ ├── CHANGELOG.md │ ├── README.md │ ├── ai-coding-prompt.md │ ├── package.json │ ├── src │ │ ├── CollapseCard │ │ │ ├── index.en-US.md │ │ │ ├── index.md │ │ │ └── index.tsx │ │ ├── CreatePortal │ │ │ └── index.tsx │ │ ├── EditableText │ │ │ ├── index.en-US.md │ │ │ ├── index.md │ │ │ └── index.tsx │ │ ├── EmptyCanvas │ │ │ ├── image.tsx │ │ │ ├── index.en-US.md │ │ │ ├── index.md │ │ │ └── index.tsx │ │ ├── EngineFeature │ │ │ ├── global.d.ts │ │ │ └── index.tsx │ │ ├── FullScreen │ │ │ ├── index.en-US.md │ │ │ ├── index.md │ │ │ └── index.tsx │ │ ├── GlobalSpin │ │ │ └── index.tsx │ │ ├── HomePage │ │ │ ├── Features │ │ │ │ └── index.tsx │ │ │ ├── Header │ │ │ │ └── index.tsx │ │ │ ├── Hero │ │ │ │ ├── WithVideo.tsx │ │ │ │ └── index.tsx │ │ │ ├── Hooks │ │ │ │ ├── index.tsx │ │ │ │ ├── useDynamicStyle.tsx │ │ │ │ ├── useEnv.tsx │ │ │ │ ├── useIsMobile.tsx │ │ │ │ ├── useLocale.tsx │ │ │ │ └── useTheme.tsx │ │ │ ├── Installation │ │ │ │ └── index.tsx │ │ │ ├── LightArea │ │ │ │ └── index.tsx │ │ │ ├── WhyChoose │ │ │ │ └── index.tsx │ │ │ ├── demo.tsx │ │ │ └── index.tsx │ │ ├── Icons │ │ │ ├── AddNode.tsx │ │ │ ├── Arrow.tsx │ │ │ ├── Cluster.tsx │ │ │ ├── Database.tsx │ │ │ ├── Explorer.tsx │ │ │ ├── File.tsx │ │ │ ├── FileExport.tsx │ │ │ ├── FileYaml.tsx │ │ │ ├── Graph2D.tsx │ │ │ ├── Graph3D.tsx │ │ │ ├── Lasso.tsx │ │ │ ├── Lock.tsx │ │ │ ├── Model.tsx │ │ │ ├── Punctuation.tsx │ │ │ ├── Qps.tsx │ │ │ ├── Sidebar.tsx │ │ │ ├── Trash.tsx │ │ │ ├── Unlock.tsx │ │ │ ├── ZoomFit.tsx │ │ │ ├── index.en-US.md │ │ │ ├── index.tsx │ │ │ ├── index.zh-CN.md │ │ │ ├── loader │ │ │ │ └── index.tsx │ │ │ └── primary-key.tsx │ │ ├── Illustration │ │ │ ├── Charts.tsx │ │ │ ├── DesignSchema.tsx │ │ │ ├── Experiment.tsx │ │ │ ├── Explore.tsx │ │ │ ├── Extension.tsx │ │ │ ├── FunArrow.tsx │ │ │ ├── Job.tsx │ │ │ ├── Loading.tsx │ │ │ ├── Next.tsx │ │ │ ├── NotFound.tsx │ │ │ ├── Process.tsx │ │ │ ├── Programming.tsx │ │ │ ├── Settings.tsx │ │ │ ├── Success.tsx │ │ │ ├── Upload.tsx │ │ │ ├── Welcome.tsx │ │ │ ├── index.en-US.md │ │ │ ├── index.md │ │ │ └── index.tsx │ │ ├── ImportFiles │ │ │ ├── index.md │ │ │ ├── index.tsx │ │ │ ├── mapping-header.tsx │ │ │ ├── mapping.tsx │ │ │ └── update-file.tsx │ │ ├── Importor │ │ │ └── index.zh-CN.md │ │ ├── Logo │ │ │ ├── index.md │ │ │ └── index.tsx │ │ ├── MultipleInstance │ │ │ ├── index.tsx │ │ │ └── useMultipleInstance.tsx │ │ ├── PropertiesList │ │ │ ├── Controller.tsx │ │ │ ├── EditName.tsx │ │ │ ├── MapFromFileTable.tsx │ │ │ ├── MappingFields.tsx │ │ │ ├── SelectType.tsx │ │ │ ├── const.ts │ │ │ ├── index.en-US.md │ │ │ ├── index.tsx │ │ │ ├── index.zh-CN.md │ │ │ ├── typing.ts │ │ │ └── utils.ts │ │ ├── Provider │ │ │ ├── const.ts │ │ │ ├── getThemeConfig.tsx │ │ │ ├── index.md │ │ │ ├── index.tsx │ │ │ ├── useCustomToken.tsx │ │ │ └── useThemeConfigProvider.tsx │ │ ├── ResizablePanel │ │ │ ├── ResizeHandle.tsx │ │ │ ├── index.en-US.md │ │ │ ├── index.md │ │ │ └── index.tsx │ │ ├── ResultConfig │ │ │ ├── README │ │ │ └── index.tsx │ │ ├── Section │ │ │ ├── index.tsx │ │ │ └── useSection.tsx │ │ ├── SegmentedTabs │ │ │ ├── index.en-US.md │ │ │ ├── index.md │ │ │ └── index.tsx │ │ ├── SideTabs │ │ │ ├── index.md │ │ │ └── index.tsx │ │ ├── Slot │ │ │ └── index.tsx │ │ ├── SplitSection │ │ │ └── index.tsx │ │ ├── TableCard │ │ │ ├── index.md │ │ │ └── index.tsx │ │ ├── Toolbar │ │ │ ├── index.en-US.md │ │ │ ├── index.md │ │ │ └── index.tsx │ │ ├── TypingText │ │ │ ├── index.en-US.md │ │ │ ├── index.md │ │ │ └── index.tsx │ │ ├── Utils │ │ │ ├── expand.ts │ │ │ ├── index.md │ │ │ ├── index.tsx │ │ │ ├── inferredGraphFields.tsx │ │ │ ├── inferredSchema.tsx │ │ │ ├── parseCSV.ts │ │ │ ├── parseJSON.ts │ │ │ ├── schema.ts │ │ │ ├── transSchema.tsx │ │ │ └── work.ts │ │ ├── hooks │ │ │ ├── useDynamicStyle.tsx │ │ │ └── useHistory.tsx │ │ ├── index.en-US.md │ │ ├── index.tsx │ │ ├── index.zh-CN.md │ │ └── layout │ │ │ ├── collapsed.tsx │ │ │ ├── header.tsx │ │ │ ├── index.md │ │ │ ├── index.tsx │ │ │ └── sidebar.tsx │ └── tsconfig.json ├── studio-draw-pattern │ ├── .fatherrc.ts │ ├── .gitignore │ ├── CHANGELOG.md │ ├── README.md │ ├── docs │ │ └── Interaction.md │ ├── index.html │ ├── package.json │ ├── public │ │ └── structure.png │ ├── src │ │ ├── App.tsx │ │ ├── components │ │ │ ├── Canvas │ │ │ │ ├── PopoverContent.tsx │ │ │ │ └── index.tsx │ │ │ ├── DrawPattern.tsx │ │ │ └── QuickStart │ │ │ │ ├── Preview.tsx │ │ │ │ ├── QuickStartItem.tsx │ │ │ │ └── index.tsx │ │ ├── data.ts │ │ ├── hooks │ │ │ ├── cypher │ │ │ │ ├── useDecodeCypher.ts │ │ │ │ └── useEncodeCypher.ts │ │ │ ├── generateRelation │ │ │ │ └── useGenerateRelation.ts │ │ │ ├── generateTemplate │ │ │ │ └── useGenerateTemplate.ts │ │ │ └── transform │ │ │ │ └── useTransform.ts │ │ ├── index.ts │ │ ├── main.tsx │ │ ├── stores │ │ │ ├── useEdgeStore.ts │ │ │ ├── useGraphStore.ts │ │ │ ├── useNodeStore.ts │ │ │ └── usePropertiesStore.ts │ │ ├── types │ │ │ ├── GPE.d.ts │ │ │ ├── edge.d.ts │ │ │ ├── node.d.ts │ │ │ ├── property.d.ts │ │ │ └── variable.d.ts │ │ └── utils │ │ │ ├── encode.ts │ │ │ └── index.ts │ ├── test │ │ ├── case.ts │ │ └── utils │ │ │ ├── encodeEdges.test.ts │ │ │ ├── encodeNodes.test.ts │ │ │ ├── encodeProperties.test.ts │ │ │ ├── generateMATCH.test.ts │ │ │ ├── generateWHERE.test.ts │ │ │ └── test.ts │ ├── tsconfig.json │ └── vite.config.ts ├── studio-driver │ ├── .fatherrc.js │ ├── .npmignore │ ├── CHANGELOG.md │ ├── README.md │ ├── package.json │ ├── src │ │ ├── cypher-driver.ts │ │ ├── gremlin-driver.ts │ │ ├── index.ts │ │ ├── kuzu-wasm-driver-official.ts │ │ ├── kuzu-wasm-driver.ts │ │ ├── queryGraph.tsx │ │ └── utils.tsx │ └── tsconfig.json ├── studio-explore │ ├── .fatherrc.js │ ├── .gitignore │ ├── CHANGELOG.md │ ├── README.md │ ├── index.html │ ├── package.json │ ├── src │ │ ├── app.tsx │ │ ├── components │ │ │ ├── ChartView │ │ │ │ ├── BarChart.tsx │ │ │ │ ├── PieChart.tsx │ │ │ │ └── index.tsx │ │ │ ├── ClusterAnalysis │ │ │ │ ├── ClusterByAlgo.tsx │ │ │ │ ├── ClusterByEndpoint.tsx │ │ │ │ ├── ClusterByField.tsx │ │ │ │ ├── PropertyField.tsx │ │ │ │ └── index.tsx │ │ │ ├── Connection │ │ │ │ ├── import-from-csv │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── web-worker.tsx │ │ │ │ ├── import-into-kuzu │ │ │ │ │ ├── index.tsx │ │ │ │ │ ├── kuzu-wasm.tsx │ │ │ │ │ └── transform.tsx │ │ │ │ └── index.tsx │ │ │ ├── Copilot │ │ │ │ ├── RunAI │ │ │ │ │ └── index.tsx │ │ │ │ ├── dialog │ │ │ │ │ └── assistant-icon.tsx │ │ │ │ ├── index.tsx │ │ │ │ ├── message.tsx │ │ │ │ ├── query.tsx │ │ │ │ ├── setting.tsx │ │ │ │ ├── useController.ts │ │ │ │ └── utils │ │ │ │ │ ├── extractTextWithPlaceholders.ts │ │ │ │ │ ├── message.ts │ │ │ │ │ └── prompt.ts │ │ │ ├── CypherQuery │ │ │ │ └── index.tsx │ │ │ ├── FetchGraph │ │ │ │ └── index.tsx │ │ │ ├── FloatContainer │ │ │ │ └── index.tsx │ │ │ ├── FloatTabs │ │ │ │ ├── index.tsx │ │ │ │ └── useResizeWidth.tsx │ │ │ ├── FloatToolbar │ │ │ │ └── index.tsx │ │ │ ├── Next │ │ │ │ ├── Neighbors │ │ │ │ │ ├── TableView.tsx │ │ │ │ │ ├── getTableData.tsx │ │ │ │ │ └── index.tsx │ │ │ │ └── index.tsx │ │ │ ├── Overview │ │ │ │ ├── Lables │ │ │ │ │ └── index.tsx │ │ │ │ ├── Properties │ │ │ │ │ ├── ChartView.tsx │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── utils.tsx │ │ │ │ ├── TotalCounts │ │ │ │ │ └── index.tsx │ │ │ │ └── index.tsx │ │ │ ├── Placeholder │ │ │ │ └── index.tsx │ │ │ ├── Report │ │ │ │ ├── AddNodes.tsx │ │ │ │ ├── AdjustSchema.tsx │ │ │ │ ├── Intention.tsx │ │ │ │ ├── Mock │ │ │ │ │ ├── challenge │ │ │ │ │ │ ├── infer.txt │ │ │ │ │ │ ├── intention.json │ │ │ │ │ │ ├── mindmap.json │ │ │ │ │ │ ├── report.bib │ │ │ │ │ │ └── report.md │ │ │ │ │ ├── experiment │ │ │ │ │ │ ├── infer.txt │ │ │ │ │ │ ├── mindmap.json │ │ │ │ │ │ ├── report.bib │ │ │ │ │ │ └── report.md │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── topic │ │ │ │ │ │ ├── infer.txt │ │ │ │ │ │ ├── mindmap.json │ │ │ │ │ │ ├── report.bib │ │ │ │ │ │ └── report.md │ │ │ │ ├── Summary.tsx │ │ │ │ ├── Text.tsx │ │ │ │ ├── Think │ │ │ │ │ └── index.tsx │ │ │ │ ├── Write.tsx │ │ │ │ ├── const.tsx │ │ │ │ ├── index.tsx │ │ │ │ └── utils.tsx │ │ │ ├── Searchbar │ │ │ │ ├── CascaderSearch.tsx │ │ │ │ ├── PropertyChart.tsx │ │ │ │ ├── PropertyChartSetting.tsx │ │ │ │ ├── css.tsx │ │ │ │ ├── index.tsx │ │ │ │ └── utils.tsx │ │ │ ├── Setting │ │ │ │ └── index.tsx │ │ │ ├── Statistics │ │ │ │ ├── Properties │ │ │ │ │ ├── ChartView.tsx │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── utils.tsx │ │ │ │ ├── index.tsx │ │ │ │ └── utils.tsx │ │ │ ├── TableView │ │ │ │ ├── AdjustColumns.tsx │ │ │ │ ├── SaveSelected.tsx │ │ │ │ ├── SelectAll.tsx │ │ │ │ ├── getTableData.tsx │ │ │ │ └── index.tsx │ │ │ ├── ToggleButton │ │ │ │ └── index.tsx │ │ │ └── index.tsx │ │ ├── demo.tsx │ │ ├── index.tsx │ │ ├── locales │ │ │ ├── en-US.ts │ │ │ ├── index.tsx │ │ │ └── zh-CN.ts │ │ └── services │ │ │ ├── cypher │ │ │ ├── index.tsx │ │ │ ├── queryCommonNeighbor.tsx │ │ │ ├── queryGraphData.tsx │ │ │ ├── queryGraphSchema.tsx │ │ │ ├── queryNeighbor.tsx │ │ │ ├── queryNeighborStatics.tsx │ │ │ ├── queryPropertyStatics.tsx │ │ │ ├── querySavedStatements.tsx │ │ │ ├── querySearch.tsx │ │ │ ├── queryStatement.tsx │ │ │ └── queryStatistics.tsx │ │ │ ├── gremlin │ │ │ └── index.tsx │ │ │ ├── index.tsx │ │ │ └── utils.tsx │ ├── tsconfig.json │ └── vite.config.ts ├── studio-graph-editor │ ├── .fatherrc.js │ ├── CHANGELOG.md │ ├── README.md │ ├── index.html │ ├── index.tsx │ ├── package.json │ ├── src │ │ ├── button-controller │ │ │ ├── add-node.tsx │ │ │ ├── clear-canvas.tsx │ │ │ ├── export-image.tsx │ │ │ └── index.tsx │ │ ├── canvas │ │ │ ├── index.tsx │ │ │ ├── reactflowStyle.ts │ │ │ ├── useContext.ts │ │ │ └── useInteractive.ts │ │ ├── elements │ │ │ ├── arrow-marker │ │ │ │ └── index.tsx │ │ │ ├── connection-line │ │ │ │ └── index.tsx │ │ │ ├── edge-types │ │ │ │ ├── graph-edge.tsx │ │ │ │ ├── index.ts │ │ │ │ ├── label.tsx │ │ │ │ ├── loop-edge.tsx │ │ │ │ ├── table-edge.tsx │ │ │ │ ├── useStyle.ts │ │ │ │ └── utils.ts │ │ │ ├── forceLayout.tsx │ │ │ ├── index.ts │ │ │ ├── middle-component │ │ │ │ └── lazy-load.tsx │ │ │ ├── node-types │ │ │ │ ├── arrow.tsx │ │ │ │ ├── graph-node.tsx │ │ │ │ ├── index.ts │ │ │ │ └── table-node.tsx │ │ │ ├── processEdges.tsx │ │ │ └── utils.tsx │ │ ├── index.tsx │ │ ├── locales │ │ │ ├── en-US.ts │ │ │ ├── index.tsx │ │ │ └── zh-CN.ts │ │ ├── store │ │ │ └── index.ts │ │ └── types │ │ │ ├── edge.ts │ │ │ ├── node.ts │ │ │ ├── other.ts │ │ │ └── store.ts │ ├── tsconfig.json │ └── vite.config.ts ├── studio-graph │ ├── .fatherrc.js │ ├── CHANGELOG.md │ ├── README.md │ ├── docs │ │ ├── const.ts │ │ ├── data.zh-CN.md │ │ ├── images │ │ │ ├── global-store.png │ │ │ └── icons.png │ │ ├── index.zh-CN.md │ │ ├── layout.zh-CN.md │ │ ├── online.zh-CN.md │ │ ├── performance-1.zh-CN.md │ │ ├── performance-2.zh-CN.md │ │ ├── performance-3.zh-CN.md │ │ ├── provider.zh-CN.md │ │ ├── quick.zh-CN.md │ │ └── style.zh-CN.md │ ├── index.html │ ├── package.json │ ├── src │ │ ├── components │ │ │ ├── BasicContainer │ │ │ │ └── index.tsx │ │ │ ├── BasicInteraction │ │ │ │ ├── index.tsx │ │ │ │ ├── useEdgeClick.ts │ │ │ │ ├── useFoucs.tsx │ │ │ │ ├── useNodeClick.ts │ │ │ │ └── useNodeHover.ts │ │ │ ├── Brush │ │ │ │ └── index.tsx │ │ │ ├── Canvas │ │ │ │ └── index.tsx │ │ │ ├── ClearCanvas │ │ │ │ └── index.tsx │ │ │ ├── ClearStatus │ │ │ │ └── index.tsx │ │ │ ├── ContextMenu │ │ │ │ ├── CommonNeighbor │ │ │ │ │ └── index.tsx │ │ │ │ ├── DeleteLeafNodes │ │ │ │ │ └── index.tsx │ │ │ │ ├── DeleteNode │ │ │ │ │ └── index.tsx │ │ │ │ ├── NeighborQuery │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── utils.tsx │ │ │ │ └── index.tsx │ │ │ ├── CurvatureLinks │ │ │ │ └── index.tsx │ │ │ ├── DagreMode │ │ │ │ └── index.tsx │ │ │ ├── Export │ │ │ │ └── index.tsx │ │ │ ├── FixedMode │ │ │ │ └── index.tsx │ │ │ ├── HoverMenu │ │ │ │ └── index.tsx │ │ │ ├── LayoutSetting │ │ │ │ ├── Params.tsx │ │ │ │ └── index.tsx │ │ │ ├── LayoutSwitch │ │ │ │ └── index.tsx │ │ │ ├── LoadCSV │ │ │ │ └── index.tsx │ │ │ ├── Loading │ │ │ │ └── index.tsx │ │ │ ├── Prepare │ │ │ │ └── index.tsx │ │ │ ├── PropertiesPanel │ │ │ │ ├── PropertiesTable.tsx │ │ │ │ ├── PropertyInfo.tsx │ │ │ │ ├── index.tsx │ │ │ │ └── utils.tsx │ │ │ ├── PropertiesTable │ │ │ │ ├── getTableData.tsx │ │ │ │ └── index.tsx │ │ │ ├── RunCluster │ │ │ │ └── index.tsx │ │ │ ├── SchemaView │ │ │ │ ├── index.tsx │ │ │ │ └── setStyle.tsx │ │ │ ├── SliderFilter │ │ │ │ └── index.tsx │ │ │ ├── StyleSetting │ │ │ │ ├── Advanced.tsx │ │ │ │ ├── index.tsx │ │ │ │ └── legend │ │ │ │ │ ├── content.tsx │ │ │ │ │ └── index.tsx │ │ │ ├── SwitchEngine │ │ │ │ └── index.tsx │ │ │ ├── Toolbar │ │ │ │ └── index.tsx │ │ │ ├── ZoomFit │ │ │ │ └── index.tsx │ │ │ ├── ZoomStatus │ │ │ │ └── index.tsx │ │ │ └── index.tsx │ │ ├── graph │ │ │ ├── const.tsx │ │ │ ├── custom-combo │ │ │ │ ├── render.tsx │ │ │ │ ├── useComboEvent.tsx │ │ │ │ └── utils.ts │ │ │ ├── custom-edge │ │ │ │ └── index.tsx │ │ │ ├── custom-icons │ │ │ │ ├── index.tsx │ │ │ │ └── loader.ts │ │ │ ├── custom-node │ │ │ │ ├── draw.tsx │ │ │ │ └── index.tsx │ │ │ ├── hooks │ │ │ │ ├── index.tsx │ │ │ │ ├── layout │ │ │ │ │ └── useForceCombo.tsx │ │ │ │ ├── useApis.tsx │ │ │ │ ├── useCombos.tsx │ │ │ │ ├── useDataAndLayout.tsx │ │ │ │ ├── useEdgeStyle.tsx │ │ │ │ ├── useInit.tsx │ │ │ │ └── useNodeStyle.tsx │ │ │ ├── index.tsx │ │ │ ├── layout │ │ │ │ ├── circle-pack.tsx │ │ │ │ ├── dagre.tsx │ │ │ │ └── index.tsx │ │ │ ├── types.ts │ │ │ ├── useContext.tsx │ │ │ └── utils │ │ │ │ ├── get.tsx │ │ │ │ ├── getDataMap.tsx │ │ │ │ ├── getSourceTarget.tsx │ │ │ │ ├── getStyleConfig.tsx │ │ │ │ ├── handleStatus.tsx │ │ │ │ ├── handleStyle.tsx │ │ │ │ ├── hexToRgba.tsx │ │ │ │ └── index.tsx │ │ ├── index.tsx │ │ ├── locales │ │ │ ├── en-US.ts │ │ │ ├── index.tsx │ │ │ └── zh-CN.ts │ │ └── spec │ │ │ ├── const.tsx │ │ │ └── index.tsx │ ├── tsconfig.json │ └── vite.config.ts ├── studio-importor │ ├── .fatherrc.js │ ├── CHANGELOG.md │ ├── README.md │ ├── package.json │ ├── src │ │ ├── app │ │ │ ├── button-controller │ │ │ │ ├── add-node.tsx │ │ │ │ ├── clear-canvas.tsx │ │ │ │ ├── export-image.tsx │ │ │ │ ├── import-and-export-config.tsx │ │ │ │ ├── index.tsx │ │ │ │ ├── left-button.tsx │ │ │ │ ├── parse-csv.tsx │ │ │ │ └── right-button.tsx │ │ │ ├── const.ts │ │ │ ├── elements │ │ │ │ ├── arrow-marker │ │ │ │ │ └── index.tsx │ │ │ │ ├── connection-line │ │ │ │ │ └── index.tsx │ │ │ │ ├── edge-types │ │ │ │ │ ├── graph-edge.tsx │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── label.tsx │ │ │ │ │ ├── loop-edge.tsx │ │ │ │ │ ├── table-edge.tsx │ │ │ │ │ ├── useStyle.ts │ │ │ │ │ └── utils.ts │ │ │ │ ├── forceLayout.tsx │ │ │ │ ├── index.ts │ │ │ │ ├── node-types │ │ │ │ │ ├── arrow.tsx │ │ │ │ │ ├── graph-node.tsx │ │ │ │ │ ├── index.ts │ │ │ │ │ └── table-node.tsx │ │ │ │ └── processEdges.tsx │ │ │ ├── graph-canvas │ │ │ │ ├── CustomControls.tsx │ │ │ │ ├── index.tsx │ │ │ │ └── useInteractive.ts │ │ │ ├── import-schema │ │ │ │ ├── import-from-csv │ │ │ │ │ ├── index.tsx │ │ │ │ │ ├── transform.tsx │ │ │ │ │ └── web-worker.tsx │ │ │ │ ├── import-from-sql │ │ │ │ │ ├── code-editor.tsx │ │ │ │ │ ├── index.tsx │ │ │ │ │ ├── ldbc.ts │ │ │ │ │ └── parse-ddl.tsx │ │ │ │ └── import-from-yaml │ │ │ │ │ └── index.tsx │ │ │ ├── index.md │ │ │ ├── index.tsx │ │ │ ├── mode-switch │ │ │ │ └── index.tsx │ │ │ ├── properties-editor │ │ │ │ ├── index.tsx │ │ │ │ ├── properties-schema │ │ │ │ │ ├── bind │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ └── services.tsx │ │ │ │ │ ├── delete │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── index.tsx │ │ │ │ │ ├── load-now │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ └── services.tsx │ │ │ │ │ ├── load-schedule │ │ │ │ │ │ ├── drawer.tsx │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ └── services.tsx │ │ │ │ │ ├── location │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ ├── progress.tsx │ │ │ │ │ │ └── useChange.tsx │ │ │ │ │ ├── odps │ │ │ │ │ │ ├── global.d.ts │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ └── useChange.tsx │ │ │ │ │ ├── save │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── source-target.tsx │ │ │ │ │ ├── useModel.ts │ │ │ │ │ ├── validate-info.tsx │ │ │ │ │ └── warn-icon.tsx │ │ │ │ └── scroll-container.tsx │ │ │ ├── style.tsx │ │ │ ├── typing.tsx │ │ │ ├── useContext.ts │ │ │ └── utils │ │ │ │ ├── importing.tsx │ │ │ │ ├── index.ts │ │ │ │ └── modeling.tsx │ │ ├── global.d.ts │ │ ├── index.tsx │ │ ├── locales │ │ │ ├── en-US.ts │ │ │ ├── index.tsx │ │ │ └── zh-CN.ts │ │ └── sdk │ │ │ └── index.tsx │ └── tsconfig.json ├── studio-query │ ├── .fatherrc.js │ ├── CHANGELOG.md │ ├── README.md │ ├── package.json │ ├── src │ │ ├── app │ │ │ ├── container.tsx │ │ │ ├── content │ │ │ │ ├── empty.tsx │ │ │ │ ├── header.tsx │ │ │ │ ├── image.tsx │ │ │ │ ├── index.tsx │ │ │ │ ├── loading.tsx │ │ │ │ ├── toggle-button.tsx │ │ │ │ └── welcome.tsx │ │ │ ├── context.tsx │ │ │ ├── index.md │ │ │ ├── index.tsx │ │ │ ├── sidebar │ │ │ │ ├── gpt-statements │ │ │ │ │ ├── dialog │ │ │ │ │ │ └── assistant-icon.tsx │ │ │ │ │ ├── index.tsx │ │ │ │ │ ├── message.tsx │ │ │ │ │ ├── setting.tsx │ │ │ │ │ ├── useController.ts │ │ │ │ │ └── utils │ │ │ │ │ │ ├── extractTextWithPlaceholders.ts │ │ │ │ │ │ ├── message.ts │ │ │ │ │ │ └── prompt.ts │ │ │ │ ├── history-statements │ │ │ │ │ └── index.tsx │ │ │ │ ├── index.tsx │ │ │ │ ├── recommended-statements │ │ │ │ │ └── index.tsx │ │ │ │ ├── saved-statements │ │ │ │ │ └── index.tsx │ │ │ │ ├── section.tsx │ │ │ │ ├── statement-list │ │ │ │ │ ├── index.css │ │ │ │ │ └── index.tsx │ │ │ │ └── store-procedure │ │ │ │ │ └── index.tsx │ │ │ └── utils.tsx │ │ ├── components │ │ │ ├── basic-languages-gremlin │ │ │ │ ├── gremlin.contribution.ts │ │ │ │ └── index.ts │ │ │ ├── connect-endpoint │ │ │ │ └── index.tsx │ │ │ ├── cypher-editor │ │ │ │ └── index.tsx │ │ │ ├── draw-pattern-modal │ │ │ │ └── index.tsx │ │ │ └── query-graph │ │ │ │ ├── cypher-services │ │ │ │ ├── index.tsx │ │ │ │ └── queryNeighbor.tsx │ │ │ │ ├── gremlin-services │ │ │ │ ├── index.tsx │ │ │ │ └── queryNeighbor.tsx │ │ │ │ ├── index.tsx │ │ │ │ └── queryStatement.tsx │ │ ├── index.tsx │ │ ├── locales │ │ │ ├── en-US.ts │ │ │ ├── index.tsx │ │ │ └── zh-CN.ts │ │ ├── sdk │ │ │ ├── index.tsx │ │ │ └── query-statement │ │ │ │ └── index.tsx │ │ └── statement │ │ │ ├── editor │ │ │ ├── index.tsx │ │ │ └── save.tsx │ │ │ ├── index.md │ │ │ ├── index.tsx │ │ │ ├── result │ │ │ ├── RawTable │ │ │ │ ├── groot-table.tsx │ │ │ │ ├── interanctive-expand.tsx │ │ │ │ ├── interanctive-table.tsx │ │ │ │ ├── json-show.tsx │ │ │ │ └── typing.ts │ │ │ ├── chart.tsx │ │ │ ├── graph.tsx │ │ │ ├── index.tsx │ │ │ ├── json.tsx │ │ │ ├── raw.tsx │ │ │ └── table.tsx │ │ │ └── typing.ts │ └── tsconfig.json ├── studio-server │ ├── .fatherrc.js │ ├── CHANGELOG.md │ ├── openapi_coordinator.yaml │ ├── openapitools.json │ ├── package.json │ ├── tsconfig.json │ └── typescript-axios │ │ ├── .gitignore │ │ ├── .npmignore │ │ ├── .openapi-generator-ignore │ │ ├── .openapi-generator │ │ ├── FILES │ │ └── VERSION │ │ ├── api.ts │ │ ├── base.ts │ │ ├── common.ts │ │ ├── configuration.ts │ │ ├── git_push.sh │ │ └── index.ts ├── studio-website │ ├── .fatherrc.ts │ ├── .npmrc │ ├── CHANGELOG.md │ ├── README.md │ ├── index.html │ ├── package.json │ ├── server │ │ ├── .npmrc │ │ ├── index.js │ │ └── package.json │ ├── src-tauri │ │ ├── .gitignore │ │ ├── Cargo.lock │ │ ├── Cargo.toml │ │ ├── app-icon.png │ │ ├── build.rs │ │ ├── capabilities │ │ │ └── default.json │ │ ├── icons │ │ │ ├── 128x128.png │ │ │ ├── 128x128@2x.png │ │ │ ├── 32x32.png │ │ │ ├── 64x64.png │ │ │ ├── Square107x107Logo.png │ │ │ ├── Square142x142Logo.png │ │ │ ├── Square150x150Logo.png │ │ │ ├── Square284x284Logo.png │ │ │ ├── Square30x30Logo.png │ │ │ ├── Square310x310Logo.png │ │ │ ├── Square44x44Logo.png │ │ │ ├── Square71x71Logo.png │ │ │ ├── Square89x89Logo.png │ │ │ ├── StoreLogo.png │ │ │ ├── android │ │ │ │ ├── mipmap-hdpi │ │ │ │ │ ├── ic_launcher.png │ │ │ │ │ ├── ic_launcher_foreground.png │ │ │ │ │ └── ic_launcher_round.png │ │ │ │ ├── mipmap-mdpi │ │ │ │ │ ├── ic_launcher.png │ │ │ │ │ ├── ic_launcher_foreground.png │ │ │ │ │ └── ic_launcher_round.png │ │ │ │ ├── mipmap-xhdpi │ │ │ │ │ ├── ic_launcher.png │ │ │ │ │ ├── ic_launcher_foreground.png │ │ │ │ │ └── ic_launcher_round.png │ │ │ │ ├── mipmap-xxhdpi │ │ │ │ │ ├── ic_launcher.png │ │ │ │ │ ├── ic_launcher_foreground.png │ │ │ │ │ └── ic_launcher_round.png │ │ │ │ └── mipmap-xxxhdpi │ │ │ │ │ ├── ic_launcher.png │ │ │ │ │ ├── ic_launcher_foreground.png │ │ │ │ │ └── ic_launcher_round.png │ │ │ ├── icon.icns │ │ │ ├── icon.ico │ │ │ ├── icon.png │ │ │ └── ios │ │ │ │ ├── AppIcon-20x20@1x.png │ │ │ │ ├── AppIcon-20x20@2x-1.png │ │ │ │ ├── AppIcon-20x20@2x.png │ │ │ │ ├── AppIcon-20x20@3x.png │ │ │ │ ├── AppIcon-29x29@1x.png │ │ │ │ ├── AppIcon-29x29@2x-1.png │ │ │ │ ├── AppIcon-29x29@2x.png │ │ │ │ ├── AppIcon-29x29@3x.png │ │ │ │ ├── AppIcon-40x40@1x.png │ │ │ │ ├── AppIcon-40x40@2x-1.png │ │ │ │ ├── AppIcon-40x40@2x.png │ │ │ │ ├── AppIcon-40x40@3x.png │ │ │ │ ├── AppIcon-512@2x.png │ │ │ │ ├── AppIcon-60x60@2x.png │ │ │ │ ├── AppIcon-60x60@3x.png │ │ │ │ ├── AppIcon-76x76@1x.png │ │ │ │ ├── AppIcon-76x76@2x.png │ │ │ │ └── AppIcon-83.5x83.5@2x.png │ │ ├── src │ │ │ ├── lib.rs │ │ │ └── main.rs │ │ └── tauri.conf.json │ ├── src │ │ ├── app.tsx │ │ ├── components │ │ │ ├── feature-case │ │ │ │ └── index.tsx │ │ │ ├── groot-case │ │ │ │ └── index.tsx │ │ │ ├── icons │ │ │ │ ├── bell.tsx │ │ │ │ ├── book.tsx │ │ │ │ ├── circle-pause.tsx │ │ │ │ ├── coins.tsx │ │ │ │ ├── diagram-project.tsx │ │ │ │ ├── file-arrow-up.tsx │ │ │ │ ├── file-export.tsx │ │ │ │ ├── file-import.tsx │ │ │ │ ├── gauge-high.tsx │ │ │ │ ├── github.tsx │ │ │ │ ├── image.tsx │ │ │ │ ├── list-check.tsx │ │ │ │ ├── magnifying-glass.tsx │ │ │ │ ├── play.tsx │ │ │ │ ├── primary-key.tsx │ │ │ │ ├── puzzle-piece.tsx │ │ │ │ ├── result.tsx │ │ │ │ ├── rotate-right.tsx │ │ │ │ ├── safari.tsx │ │ │ │ └── trash.tsx │ │ │ ├── instance-card │ │ │ │ └── index.tsx │ │ │ ├── locale-switch │ │ │ │ └── index.tsx │ │ │ ├── logo │ │ │ │ └── index.tsx │ │ │ ├── section │ │ │ │ └── index.tsx │ │ │ ├── select-cards │ │ │ │ └── index.tsx │ │ │ ├── setting-parcel │ │ │ │ └── index.tsx │ │ │ └── utils │ │ │ │ ├── getDataFields.tsx │ │ │ │ ├── handleServer.tsx │ │ │ │ ├── index.tsx │ │ │ │ ├── localStorage.ts │ │ │ │ ├── schema-groot.tsx │ │ │ │ └── schema.tsx │ │ ├── global.d.ts │ │ ├── hooks │ │ │ ├── index.tsx │ │ │ └── useHistory.tsx │ │ ├── index.tsx │ │ ├── layouts │ │ │ ├── SvgEnToZh.tsx │ │ │ ├── SvgZhToEn.tsx │ │ │ ├── const.tsx │ │ │ ├── index.tsx │ │ │ ├── select-graph.tsx │ │ │ ├── services.tsx │ │ │ └── useContext.ts │ │ ├── locales │ │ │ ├── en-US.ts │ │ │ ├── index.ts │ │ │ └── zh-CN.ts │ │ ├── pages │ │ │ ├── explore │ │ │ │ ├── index.tsx │ │ │ │ └── slot.tsx │ │ │ ├── extension │ │ │ │ ├── create-plugins.tsx │ │ │ │ ├── index.tsx │ │ │ │ ├── left-side.tsx │ │ │ │ ├── plugins.tsx │ │ │ │ ├── right-side.tsx │ │ │ │ ├── service.tsx │ │ │ │ └── upload-files.tsx │ │ │ ├── importing │ │ │ │ ├── data-bind.tsx │ │ │ │ ├── data-load.tsx │ │ │ │ ├── download-load-config.tsx │ │ │ │ ├── empty-mapping-case.tsx │ │ │ │ ├── empty-model-case.tsx │ │ │ │ ├── index.tsx │ │ │ │ ├── services.tsx │ │ │ │ ├── start-importing.tsx │ │ │ │ └── start-load.tsx │ │ │ ├── index.tsx │ │ │ ├── instance │ │ │ │ ├── create │ │ │ │ │ ├── choose-enginetype.tsx │ │ │ │ │ └── index.tsx │ │ │ │ ├── graph-view │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── transform.tsx │ │ │ │ ├── index.tsx │ │ │ │ └── lists │ │ │ │ │ ├── create-graph.tsx │ │ │ │ │ ├── empty.tsx │ │ │ │ │ ├── index.tsx │ │ │ │ │ ├── instance-card.tsx │ │ │ │ │ ├── interactive-case.tsx │ │ │ │ │ ├── server-not-available.tsx │ │ │ │ │ └── service.tsx │ │ │ ├── job │ │ │ │ ├── circle-animation.tsx │ │ │ │ ├── index.tsx │ │ │ │ ├── job-action.tsx │ │ │ │ ├── job-detail.tsx │ │ │ │ ├── job-header.tsx │ │ │ │ ├── job-list.tsx │ │ │ │ ├── job-search.tsx │ │ │ │ ├── service.tsx │ │ │ │ └── useStore.tsx │ │ │ ├── modeling │ │ │ │ ├── index.tsx │ │ │ │ ├── save-modeling.tsx │ │ │ │ └── services.tsx │ │ │ ├── overview │ │ │ │ └── index.tsx │ │ │ ├── query │ │ │ │ ├── app.tsx │ │ │ │ ├── index.tsx │ │ │ │ ├── loading-progress.tsx │ │ │ │ ├── no-endpoint-case.tsx │ │ │ │ ├── services.tsx │ │ │ │ ├── stopped-service-case.tsx │ │ │ │ ├── utils │ │ │ │ │ └── schema.tsx │ │ │ │ └── versions │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── service.tsx │ │ │ ├── setting │ │ │ │ ├── International.tsx │ │ │ │ ├── coordinator.tsx │ │ │ │ ├── index.tsx │ │ │ │ ├── interact-theme.tsx │ │ │ │ ├── plugins │ │ │ │ │ ├── explore.tsx │ │ │ │ │ └── graphy.tsx │ │ │ │ ├── primary-color │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── select-color.tsx │ │ │ │ ├── query-setting.tsx │ │ │ │ └── rounded-corner.tsx │ │ │ └── utils.ts │ │ └── slots │ │ │ └── index.tsx │ ├── tsconfig.json │ └── vite.config.ts └── use-zustand │ ├── .fatherrc.js │ ├── .npmrc │ ├── CHANGELOG.md │ ├── index.html │ ├── package.json │ ├── src │ ├── demo │ │ ├── A.tsx │ │ ├── B.tsx │ │ ├── C.tsx │ │ ├── index.tsx │ │ └── useContext.tsx │ ├── global.d.ts │ └── index.tsx │ ├── tsconfig.json │ └── vite.config.ts ├── pnpm-lock.yaml ├── pnpm-workspace.yaml ├── python ├── graphy │ ├── README.md │ ├── __init__.py │ ├── apps │ │ ├── __init__.py │ │ ├── demo_app.py │ │ ├── paper_reading │ │ │ ├── __init__.py │ │ │ ├── paper_navigate_edge.py │ │ │ ├── paper_reading_nodes.py │ │ │ └── survey_paper_reading.py │ │ └── text_generator.py │ ├── config │ │ ├── __init__.py │ │ ├── cluster.json │ │ ├── workflow.json │ │ ├── workflow_inspector.json │ │ ├── workflow_navigator.json │ │ └── workflow_pubmed.json │ ├── db │ │ ├── __init__.py │ │ └── base_store.py │ ├── extractor │ │ ├── __init__.py │ │ ├── paper_extractor.py │ │ ├── pdf_content_index.py │ │ ├── pdf_extractor.py │ │ └── resume_extractor.py │ ├── graph │ │ ├── __init__.py │ │ ├── base_graph.py │ │ ├── edges │ │ │ ├── __init__.py │ │ │ └── base_edge.py │ │ ├── nodes │ │ │ ├── __init__.py │ │ │ ├── base_node.py │ │ │ ├── chain_node.py │ │ │ ├── dag_node.py │ │ │ └── pdf_extract_node.py │ │ └── types.py │ ├── graph_builder.py │ ├── memory │ │ ├── __init__.py │ │ ├── llm_memory.py │ │ ├── memory_block.py │ │ ├── persist_store.py │ │ └── search_unit.py │ ├── models │ │ ├── __init__.py │ │ ├── embedding_model.py │ │ └── model_context_size.py │ ├── paper_scrapper.py │ ├── prompts │ │ ├── __init__.py │ │ ├── paper_reading_prompts.py │ │ └── related_work_prompts.py │ ├── requirements.txt │ ├── resource │ │ ├── _graph │ │ │ ├── Background.csv │ │ │ ├── Challenge.csv │ │ │ ├── Contribution.csv │ │ │ ├── Experiment.csv │ │ │ ├── Paper.csv │ │ │ ├── Paper_Has_Background.csv │ │ │ ├── Paper_Has_Challenge.csv │ │ │ ├── Paper_Has_Contribution.csv │ │ │ ├── Paper_Has_Experiment.csv │ │ │ ├── Paper_Has_Solution.csv │ │ │ ├── Reference.csv │ │ │ ├── Solution.csv │ │ │ └── schema.json │ │ ├── figs │ │ │ ├── connect_graph_db.png │ │ │ ├── create_graph.png │ │ │ ├── data_bind.png │ │ │ ├── data_import.png │ │ │ ├── data_load.png │ │ │ ├── data_load_check.png │ │ │ ├── data_model_check.png │ │ │ ├── enable_explore.png │ │ │ ├── generate_report.png │ │ │ ├── graphy.png │ │ │ ├── graphy_arch.png │ │ │ ├── list_graphs.png │ │ │ ├── load_to_interactive.png │ │ │ ├── load_to_wasm_db.png │ │ │ ├── next_query.png │ │ │ ├── scenario_explore.png │ │ │ ├── scenario_report.png │ │ │ ├── tutorials │ │ │ │ ├── 1_upload_data.gif │ │ │ │ ├── 2_paper_selector.gif │ │ │ │ ├── 3_report_prompt.gif │ │ │ │ ├── 4_generate_mindmap.gif │ │ │ │ ├── 5_generate_report.gif │ │ │ │ ├── 6_download_report.gif │ │ │ │ ├── arbitrary_match.gif │ │ │ │ ├── next_select.gif │ │ │ │ ├── select_histogram.gif │ │ │ │ └── show_attr_histogram.gif │ │ │ └── workflow.png │ │ ├── graphy_raw_data │ │ │ ├── a_context-integrated_transformer-based_neural_network_forauctio │ │ │ │ ├── Background.json │ │ │ │ ├── Challenge.json │ │ │ │ ├── Contribution.json │ │ │ │ ├── Experiment.json │ │ │ │ ├── Paper.json │ │ │ │ ├── Solution.json │ │ │ │ ├── _DONE.json │ │ │ │ ├── query_Background.txt │ │ │ │ ├── query_Challenge.txt │ │ │ │ ├── query_Contribution.txt │ │ │ │ ├── query_Experiment.txt │ │ │ │ └── query_Solution.txt │ │ │ ├── a_contextual_combinatorial_bandit_approach_to_negotiation │ │ │ │ ├── Background.json │ │ │ │ ├── Challenge.json │ │ │ │ ├── Contribution.json │ │ │ │ ├── Experiment.json │ │ │ │ ├── Paper.json │ │ │ │ ├── Solution.json │ │ │ │ ├── _DONE.json │ │ │ │ ├── query_Background.txt │ │ │ │ ├── query_Challenge.txt │ │ │ │ ├── query_Contribution.txt │ │ │ │ ├── query_Experiment.txt │ │ │ │ └── query_Solution.txt │ │ │ ├── a_coupled_flow_approach_to_imitation_learning │ │ │ │ ├── Background.json │ │ │ │ ├── Challenge.json │ │ │ │ ├── Contribution.json │ │ │ │ ├── Experiment.json │ │ │ │ ├── Paper.json │ │ │ │ ├── Solution.json │ │ │ │ ├── _DONE.json │ │ │ │ ├── query_Background.txt │ │ │ │ ├── query_Challenge.txt │ │ │ │ ├── query_Contribution.txt │ │ │ │ ├── query_Experiment.txt │ │ │ │ └── query_Solution.txt │ │ │ ├── a_decoder-only_foundation_model_for_time-seriesforecasting │ │ │ │ ├── Background.json │ │ │ │ ├── Challenge.json │ │ │ │ ├── Contribution.json │ │ │ │ ├── Experiment.json │ │ │ │ ├── Paper.json │ │ │ │ ├── Solution.json │ │ │ │ ├── _DONE.json │ │ │ │ ├── query_Background.txt │ │ │ │ ├── query_Challenge.txt │ │ │ │ ├── query_Contribution.txt │ │ │ │ ├── query_Experiment.txt │ │ │ │ └── query_Solution.txt │ │ │ ├── a_deep_reinforcement_learning_approach_to_concurrent_bilateral │ │ │ │ ├── Background.json │ │ │ │ ├── Challenge.json │ │ │ │ ├── Contribution.json │ │ │ │ ├── Experiment.json │ │ │ │ ├── Paper.json │ │ │ │ ├── Solution.json │ │ │ │ ├── _DONE.json │ │ │ │ ├── _Edges.json │ │ │ │ ├── query_Background.txt │ │ │ │ ├── query_Challenge.txt │ │ │ │ ├── query_Contribution.txt │ │ │ │ ├── query_Experiment.txt │ │ │ │ └── query_Solution.txt │ │ │ ├── challenging_common_assumptions_in_convexreinforcement_learning │ │ │ │ ├── Background.json │ │ │ │ ├── Challenge.json │ │ │ │ ├── Contribution.json │ │ │ │ ├── Experiment.json │ │ │ │ ├── Paper.json │ │ │ │ ├── Solution.json │ │ │ │ ├── _DONE.json │ │ │ │ ├── _Edges.json │ │ │ │ ├── query_Background.txt │ │ │ │ ├── query_Challenge.txt │ │ │ │ ├── query_Contribution.txt │ │ │ │ ├── query_Experiment.txt │ │ │ │ └── query_Solution.txt │ │ │ ├── conditional_time_series_forecasting_with_convolutional_neural │ │ │ │ ├── Background.json │ │ │ │ ├── Challenge.json │ │ │ │ ├── Contribution.json │ │ │ │ ├── Experiment.json │ │ │ │ ├── Paper.json │ │ │ │ ├── Solution.json │ │ │ │ ├── _DONE.json │ │ │ │ ├── _Edges.json │ │ │ │ ├── query_Background.txt │ │ │ │ ├── query_Challenge.txt │ │ │ │ ├── query_Contribution.txt │ │ │ │ ├── query_Experiment.txt │ │ │ │ └── query_Solution.txt │ │ │ ├── density_estimation_using_real_nvp │ │ │ │ ├── Background.json │ │ │ │ ├── Challenge.json │ │ │ │ ├── Contribution.json │ │ │ │ ├── Experiment.json │ │ │ │ ├── Paper.json │ │ │ │ ├── Solution.json │ │ │ │ ├── _DONE.json │ │ │ │ ├── _Edges.json │ │ │ │ ├── query_Background.txt │ │ │ │ ├── query_Challenge.txt │ │ │ │ ├── query_Contribution.txt │ │ │ │ ├── query_Experiment.txt │ │ │ │ └── query_Solution.txt │ │ │ ├── ef_cient_exploration_via_state_marginal_matching │ │ │ │ ├── Background.json │ │ │ │ ├── Challenge.json │ │ │ │ ├── Contribution.json │ │ │ │ ├── Experiment.json │ │ │ │ ├── Paper.json │ │ │ │ ├── Solution.json │ │ │ │ ├── _DONE.json │ │ │ │ ├── _Edges.json │ │ │ │ ├── query_Background.txt │ │ │ │ ├── query_Challenge.txt │ │ │ │ ├── query_Contribution.txt │ │ │ │ ├── query_Experiment.txt │ │ │ │ └── query_Solution.txt │ │ │ ├── neural_spline_flows │ │ │ │ ├── Background.json │ │ │ │ ├── Challenge.json │ │ │ │ ├── Contribution.json │ │ │ │ ├── Experiment.json │ │ │ │ ├── Paper.json │ │ │ │ ├── Solution.json │ │ │ │ ├── _DONE.json │ │ │ │ ├── _Edges.json │ │ │ │ ├── query_Background.txt │ │ │ │ ├── query_Challenge.txt │ │ │ │ ├── query_Contribution.txt │ │ │ │ ├── query_Experiment.txt │ │ │ │ └── query_Solution.txt │ │ │ ├── primal_wasserstein_imitation_learning │ │ │ │ ├── Background.json │ │ │ │ ├── Challenge.json │ │ │ │ ├── Contribution.json │ │ │ │ ├── Experiment.json │ │ │ │ ├── Paper.json │ │ │ │ ├── Solution.json │ │ │ │ ├── _DONE.json │ │ │ │ ├── _Edges.json │ │ │ │ ├── query_Background.txt │ │ │ │ ├── query_Challenge.txt │ │ │ │ ├── query_Contribution.txt │ │ │ │ ├── query_Experiment.txt │ │ │ │ └── query_Solution.txt │ │ │ └── why_normalizing_flows_fail_to_detectout-of-distribution_data │ │ │ │ ├── Background.json │ │ │ │ ├── Challenge.json │ │ │ │ ├── Contribution.json │ │ │ │ ├── Experiment.json │ │ │ │ ├── Paper.json │ │ │ │ ├── Solution.json │ │ │ │ ├── _DONE.json │ │ │ │ ├── _Edges.json │ │ │ │ ├── query_Background.txt │ │ │ │ ├── query_Challenge.txt │ │ │ │ ├── query_Contribution.txt │ │ │ │ ├── query_Experiment.txt │ │ │ │ └── query_Solution.txt │ │ ├── gt_files │ │ │ ├── educational_background.txt │ │ │ ├── last_name.txt │ │ │ ├── resume_section_title.txt │ │ │ └── section_title_gt.txt │ │ ├── samples │ │ │ ├── case.pdf │ │ │ ├── graphrag.pdf │ │ │ ├── graphrag.zip │ │ │ ├── huge-sigmod21.pdf │ │ │ ├── import_to_interactive.py │ │ │ ├── relgo-sigmod25.pdf │ │ │ ├── relgo_graph.zip │ │ │ └── relgo_related_work.zip │ │ └── tutorials │ │ │ ├── build_network.md │ │ │ └── related_work.md │ ├── tests │ │ ├── app │ │ │ ├── demo_app_test.py │ │ │ └── related_work_test.py │ │ ├── common │ │ │ ├── build_graph_test.py │ │ │ ├── fix_json_test.py │ │ │ └── persist_store_test.py │ │ ├── nlp │ │ │ ├── cluster_test.py │ │ │ ├── extract_paper_test.py │ │ │ ├── extract_reference_test.py │ │ │ ├── get_paper_bib_test.py │ │ │ └── llm_config_test.py │ │ └── workflow │ │ │ ├── graph_test.py │ │ │ ├── inspector_navigator_test.py │ │ │ └── paper_inspector_test.py │ ├── utils │ │ ├── __init__.py │ │ ├── arxiv_fetcher.py │ │ ├── bib_search.py │ │ ├── cryptography.py │ │ ├── data_extractor.py │ │ ├── json_parser.py │ │ ├── paper_expansion.py │ │ ├── paper_struct.py │ │ ├── profiler.py │ │ ├── pubmed_fetcher.py │ │ ├── scholar_fetcher.py │ │ ├── string_similarity.py │ │ ├── text_clustering.py │ │ └── timer.py │ └── workflow │ │ ├── __init__.py │ │ ├── base_workflow.py │ │ ├── executor.py │ │ ├── multiproc_executor.py │ │ └── ray_executor.py └── gs-visual-tool │ ├── .gitignore │ ├── README.md │ ├── demo │ ├── gradio_demo.py │ ├── jupyter_demo.ipynb │ └── web_demo.py │ ├── docs │ └── home.png │ ├── gs_visual_tool │ ├── __init__.py │ ├── environment_detection.py │ ├── render.py │ ├── run.py │ ├── server.py │ └── template │ │ ├── index.html │ │ ├── modeling.html │ │ └── querying.html │ └── pyproject.toml ├── turbo.json ├── vercel.json └── webpack.config.js /.changeset/README.md: -------------------------------------------------------------------------------- 1 | # Changesets 2 | 3 | Hello and welcome! This folder has been automatically generated by `@changesets/cli`, a build tool that works 4 | with multi-package repos, or single-package repos to help you version and publish your code. You can 5 | find the full documentation for it [in our repository](https://github.com/changesets/changesets) 6 | 7 | We have a quick list of common questions to get you started engaging with this project in 8 | [our documentation](https://github.com/changesets/changesets/blob/main/docs/common-questions.md) 9 | -------------------------------------------------------------------------------- /.changeset/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://unpkg.com/@changesets/config@3.0.2/schema.json", 3 | "changelog": "@changesets/cli/changelog", 4 | "commit": false, 5 | "fixed": [], 6 | "linked": [], 7 | "access": "restricted", 8 | "baseBranch": "main", 9 | "updateInternalDependencies": "patch", 10 | "ignore": [] 11 | } 12 | -------------------------------------------------------------------------------- /.node-version: -------------------------------------------------------------------------------- 1 | 18.19.1 -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | # 修改仓库镜像(中国镜像) 2 | registry=https://registry.npmmirror.com 3 | # pnpm 4 | auto-install-peers=true 5 | git-checks=false -------------------------------------------------------------------------------- /.prettierrc.cjs: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | semi: true, 3 | trailingComma: 'all', 4 | singleQuote: true, 5 | printWidth: 120, 6 | arrowParens: 'avoid', 7 | }; 8 | -------------------------------------------------------------------------------- /PUBLISH.md: -------------------------------------------------------------------------------- 1 | This project uses Changesets to manage version releases. The release process is as follows: 2 | 3 | 1. Complete the relevant development work. 4 | 2. Create a branch from `main` (name it as you like). 5 | 3. Run `pnpm changeset` and follow the prompts to provide the required information. 6 | 4. Run `pnpm run version` to generate the version number. 7 | 5. Open a pull request on GitHub to merge your branch into `main`, and add the `publish` tag. 8 | 6. Once the branch is merged, GitHub Actions will automatically trigger and publish the package to npm. 9 | -------------------------------------------------------------------------------- /SECURITY.md: -------------------------------------------------------------------------------- 1 | # Security Policy 2 | 3 | ## Supported Versions 4 | 5 | Use this section to tell people about which versions of your project are 6 | currently being supported with security updates. 7 | 8 | ### V1.x 9 | 10 | | dependence | Version | 11 | | ---------- | ------- | 12 | | node | 16.x | 13 | | pnpm | 7.x | 14 | | react | 17.x | 15 | | umi | 3.x | 16 | | father | 4.x | 17 | | webpack | 5.x | 18 | 19 | ## Reporting a Vulnerability 20 | 21 | Use this section to tell people how to report a vulnerability. 22 | 23 | Tell them where to go, how often they can expect to get an update on a 24 | reported vulnerability, what to expect if the vulnerability is accepted or 25 | declined, etc. 26 | -------------------------------------------------------------------------------- /docs/interactive/.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | 8 | # testing 9 | /coverage 10 | 11 | # next.js 12 | /.next/ 13 | /out/ 14 | 15 | # production 16 | /build 17 | 18 | # misc 19 | .DS_Store 20 | *.pem 21 | .vscode 22 | 23 | # debug 24 | npm-debug.log* 25 | yarn-debug.log* 26 | yarn-error.log* 27 | .pnpm-debug.log* 28 | 29 | # local env files 30 | .env*.local 31 | 32 | # vercel 33 | .vercel 34 | 35 | # typescript 36 | *.tsbuildinfo 37 | next-env.d.ts 38 | -------------------------------------------------------------------------------- /docs/interactive/.npmrc: -------------------------------------------------------------------------------- 1 | # 修改仓库镜像(中国镜像) 2 | registry=https://registry.npmmirror.com 3 | # pnpm 4 | auto-install-peers=true 5 | git-checks=false -------------------------------------------------------------------------------- /docs/interactive/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # @graphscope/docs-interactive 2 | 3 | ## 0.1.1 4 | 5 | ### Patch Changes 6 | 7 | - Updated dependencies 8 | - @graphscope/studio-components@0.1.19 9 | -------------------------------------------------------------------------------- /docs/interactive/README.md: -------------------------------------------------------------------------------- 1 | # GraphScope Interactive documentation 2 | 3 | ## Installation 4 | 5 | ``` 6 | npm install 7 | 8 | npm run dev 9 | ``` 10 | -------------------------------------------------------------------------------- /docs/interactive/components/Hooks/index.tsx: -------------------------------------------------------------------------------- 1 | export { useTheme } from './useTheme'; 2 | -------------------------------------------------------------------------------- /docs/interactive/pages/_app.mdx: -------------------------------------------------------------------------------- 1 | 2 | import React, { useEffect } from 'react'; 3 | import { useImageTheme } from '../components/Hooks/useUrl' 4 | export default function ReadingNotes({ Component, pageProps }) { 5 | useImageTheme() 6 | return ; 7 | } 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /docs/interactive/pages/_meta.json: -------------------------------------------------------------------------------- 1 | { 2 | "index": { 3 | "type": "page", 4 | "title": "GraphScope GIE", 5 | "display": "hidden", 6 | "theme": { 7 | "layout": "raw" 8 | } 9 | }, 10 | "interactive": { 11 | "title": "Documentation", 12 | "type": "page" 13 | }, 14 | "portal": { 15 | "title": "Portal[TEMP]", 16 | "type": "page", 17 | "display": "hidden" 18 | }, 19 | "solution": { 20 | "title": "Solution", 21 | "type": "menu", 22 | "items": { 23 | "knowledge": { 24 | "title": "Knowledge Graph", 25 | "type": "page" 26 | }, 27 | "risk_detection": { 28 | "title": "Risk Detection", 29 | "type": "page" 30 | } 31 | } 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /docs/interactive/pages/index.mdx: -------------------------------------------------------------------------------- 1 | import Home from "../components/Home"; 2 | 3 | 4 | -------------------------------------------------------------------------------- /docs/interactive/pages/interactive/_meta.json: -------------------------------------------------------------------------------- 1 | { 2 | "installation": "Installation", 3 | "getting_started": "Getting Started", 4 | "data_import": "Data Import", 5 | "visualization": "Visualize graphs", 6 | "query_manual": "Query Manual", 7 | "client_apis": "Client APIs", 8 | "configuration": "Engine Configuration", 9 | "stored_procedures": "Stored Procedures", 10 | "deployment": "Deployment Guide", 11 | "development": "Development Guide" 12 | } 13 | -------------------------------------------------------------------------------- /docs/interactive/pages/interactive/client_apis.md: -------------------------------------------------------------------------------- 1 | # Client APIs 2 | TODO 3 | -------------------------------------------------------------------------------- /docs/interactive/pages/interactive/client_apis/_meta.json: -------------------------------------------------------------------------------- 1 | { 2 | "gsctl": "CLI Tool: gsctl", 3 | "python_client": "Python Client", 4 | "java_client": "Java Client" 5 | } 6 | -------------------------------------------------------------------------------- /docs/interactive/pages/interactive/client_apis/gsctl.md: -------------------------------------------------------------------------------- 1 | # TODO 2 | -------------------------------------------------------------------------------- /docs/interactive/pages/interactive/data_import/_meta.json: -------------------------------------------------------------------------------- 1 | { 2 | "import_csv": "Import CSV", 3 | "data_import": "Data Import Configuration", 4 | "data_model": "Data Model Specification" 5 | } 6 | -------------------------------------------------------------------------------- /docs/interactive/pages/interactive/deployment.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraphScope/portal/1b4ac33114012315053bba8b3d96fe73fb7241d6/docs/interactive/pages/interactive/deployment.md -------------------------------------------------------------------------------- /docs/interactive/pages/interactive/development/_meta.json: -------------------------------------------------------------------------------- 1 | { 2 | "dev_and_test": "Dev and Test", 3 | "cpp_procedure": "C++ Stored Procedure", 4 | "Python SDK": { 5 | "title:": "Python SDK", 6 | "href": "https://graphscope.io/docs/latest/flex/interactive/development/python/python_sdk" 7 | }, 8 | "Java SDK": { 9 | "title:": "Java SDK", 10 | "href": "https://graphscope.io/docs/latest/flex/interactive/development/java/java_sdk" 11 | }, 12 | "RESTful APIs": { 13 | "title:": "RESTful APIs", 14 | "href": "https://graphscope.io/docs/latest/flex/interactive/development/restful_api" 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /docs/interactive/pages/interactive/query_manual/_meta.json: -------------------------------------------------------------------------------- 1 | { 2 | "cypher_manual": "Cypher Manual" 3 | } 4 | -------------------------------------------------------------------------------- /docs/interactive/pages/interactive/query_manual/cypher_manual.md: -------------------------------------------------------------------------------- 1 | # Cypher Manuel 2 | TODO 3 | -------------------------------------------------------------------------------- /docs/interactive/pages/interactive/visualization/_meta.json: -------------------------------------------------------------------------------- 1 | { 2 | "introduction": "Introduction", 3 | "create_graph": "Create Graph", 4 | "data_modeling": "Visual Modeling", 5 | "visual_importing": "Visual Importing", 6 | "data_querying": "Visual Querying", 7 | "data_exploration": "Visual Exploration" 8 | } 9 | -------------------------------------------------------------------------------- /docs/interactive/pages/interactive/visualization/data_exploration.md: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /docs/interactive/pages/interactive/visualization/data_querying.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Visual Graph Querying 3 | --- 4 | 5 | ## Visual Graph Querying 6 | 7 | GraphScope Portal's Data Querying module features a robust editor with Cypher/Gremlin syntax autocompletion, highlighting, and version control. Users can save queries, review history, get schema-driven recommendations, and leverage LLM-powered natural language queries. Results are dynamically visualized in graphs, tables, and other rich formats. 8 | 9 | 10 | -------------------------------------------------------------------------------- /docs/interactive/pages/interactive/visualization/image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraphScope/portal/1b4ac33114012315053bba8b3d96fe73fb7241d6/docs/interactive/pages/interactive/visualization/image.png -------------------------------------------------------------------------------- /docs/interactive/pages/portal/_meta.json: -------------------------------------------------------------------------------- 1 | { 2 | "manual": "User Manual", 3 | 4 | "visualization": "Graph Visualization", 5 | "-- Themes": { 6 | "type": "separator", 7 | "title": "Developer Tools" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /docs/interactive/pages/portal/manual/_meta.json: -------------------------------------------------------------------------------- 1 | { 2 | "overview": "Overview", 3 | "installation": "Installation", 4 | "connection": "Connection", 5 | "create_graph": "Create Graph", 6 | "modeling": "Modeling", 7 | "importing": "Importing", 8 | "querying": "Querying" 9 | } 10 | -------------------------------------------------------------------------------- /docs/interactive/pages/portal/manual/create_graph.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraphScope/portal/1b4ac33114012315053bba8b3d96fe73fb7241d6/docs/interactive/pages/portal/manual/create_graph.md -------------------------------------------------------------------------------- /docs/interactive/pages/portal/manual/importing.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraphScope/portal/1b4ac33114012315053bba8b3d96fe73fb7241d6/docs/interactive/pages/portal/manual/importing.md -------------------------------------------------------------------------------- /docs/interactive/pages/portal/manual/installation.md: -------------------------------------------------------------------------------- 1 | ## Installation with docker 2 | 3 | ```bash 4 | # Pull the image 5 | docker pull ghcr.io/graphscope/portal:latest 6 | ``` 7 | 8 | ## Installation with source code 9 | 10 | ```bash 11 | # Compile front-end assets 12 | npm run ci 13 | # Start the server 14 | cd packages/studio-website/server 15 | npm run dev -- --port=8888 --coordinator= --cypher_endpoint= 16 | ``` 17 | -------------------------------------------------------------------------------- /docs/interactive/pages/portal/manual/modeling.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraphScope/portal/1b4ac33114012315053bba8b3d96fe73fb7241d6/docs/interactive/pages/portal/manual/modeling.md -------------------------------------------------------------------------------- /docs/interactive/pages/portal/manual/overview.md: -------------------------------------------------------------------------------- 1 | # Overview 2 | 3 | GraphScope Portal is a user-friendly web interface that simplifies managing graph data with GraphScope. It offers one-stop access to data modeling, importing, querying, and monitoring, catering to both Interactive and Insight engines within the GraphScope Flex architecture. 4 | 5 | ## A Solid Foundation 6 | 7 | ## Key Features 8 | 9 | ## Development tools 10 | -------------------------------------------------------------------------------- /docs/interactive/pages/portal/manual/querying.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraphScope/portal/1b4ac33114012315053bba8b3d96fe73fb7241d6/docs/interactive/pages/portal/manual/querying.md -------------------------------------------------------------------------------- /docs/interactive/pages/portal/manual/querying/_meta.json: -------------------------------------------------------------------------------- 1 | { 2 | "connection": "Connection", 3 | "recommand": "Recommand Statements", 4 | "history": "History Statements", 5 | "save": "Save Statements", 6 | "gpt": "Query with OpenAI", 7 | "table_view": "Table View", 8 | "graph_view": "Graph View", 9 | "setting_style": "Setting Display Style", 10 | "inspect_properties": "Inspect Properties", 11 | "draw_pattern": "Query by Drawing Pattern" 12 | } 13 | -------------------------------------------------------------------------------- /docs/interactive/pages/portal/manual/querying/connection.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraphScope/portal/1b4ac33114012315053bba8b3d96fe73fb7241d6/docs/interactive/pages/portal/manual/querying/connection.md -------------------------------------------------------------------------------- /docs/interactive/pages/portal/manual/querying/draw_pattern.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraphScope/portal/1b4ac33114012315053bba8b3d96fe73fb7241d6/docs/interactive/pages/portal/manual/querying/draw_pattern.md -------------------------------------------------------------------------------- /docs/interactive/pages/portal/manual/querying/gpt.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraphScope/portal/1b4ac33114012315053bba8b3d96fe73fb7241d6/docs/interactive/pages/portal/manual/querying/gpt.md -------------------------------------------------------------------------------- /docs/interactive/pages/portal/manual/querying/graph_view.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraphScope/portal/1b4ac33114012315053bba8b3d96fe73fb7241d6/docs/interactive/pages/portal/manual/querying/graph_view.md -------------------------------------------------------------------------------- /docs/interactive/pages/portal/manual/querying/history.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraphScope/portal/1b4ac33114012315053bba8b3d96fe73fb7241d6/docs/interactive/pages/portal/manual/querying/history.md -------------------------------------------------------------------------------- /docs/interactive/pages/portal/manual/querying/inspect_properties.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraphScope/portal/1b4ac33114012315053bba8b3d96fe73fb7241d6/docs/interactive/pages/portal/manual/querying/inspect_properties.md -------------------------------------------------------------------------------- /docs/interactive/pages/portal/manual/querying/recommand.mdx: -------------------------------------------------------------------------------- 1 | ## Query Methods 2 | 3 | In addition to writing Cypher or Gremlin statements by hand, we also offer a variety of query methods: recommended queries, historical queries, saved queries, and GPT queries. 4 | 5 | ### Recommand query 6 | 7 | 8 | 9 | ### History query 10 | -------------------------------------------------------------------------------- /docs/interactive/pages/portal/manual/querying/save.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraphScope/portal/1b4ac33114012315053bba8b3d96fe73fb7241d6/docs/interactive/pages/portal/manual/querying/save.md -------------------------------------------------------------------------------- /docs/interactive/pages/portal/manual/querying/setting_style.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraphScope/portal/1b4ac33114012315053bba8b3d96fe73fb7241d6/docs/interactive/pages/portal/manual/querying/setting_style.md -------------------------------------------------------------------------------- /docs/interactive/pages/portal/manual/querying/table_view.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraphScope/portal/1b4ac33114012315053bba8b3d96fe73fb7241d6/docs/interactive/pages/portal/manual/querying/table_view.md -------------------------------------------------------------------------------- /docs/interactive/pages/portal/visualization/_meta.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /docs/interactive/pages/portal/visualization/inspect-data.md: -------------------------------------------------------------------------------- 1 | # Inspect data 2 | 3 | In order to view the different properties of a node, we click on it. Information immediately appears on the right side of the screen. 4 | 5 | ## Inspect data of a multiple selection 6 | 7 | When you select multiple nodes or edges, the right panel will present their detailed properties in a table format for easy viewing. 8 | -------------------------------------------------------------------------------- /docs/interactive/pages/portal/visualization/search.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraphScope/portal/1b4ac33114012315053bba8b3d96fe73fb7241d6/docs/interactive/pages/portal/visualization/search.md -------------------------------------------------------------------------------- /docs/interactive/pages/solution/_meta.json: -------------------------------------------------------------------------------- 1 | { 2 | "knowledge": { 3 | "title": "Knowledge Graph", 4 | "type": "page", 5 | "theme": { 6 | "layout": "full" 7 | } 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /docs/interactive/pages/solution/knowledge.mdx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraphScope/portal/1b4ac33114012315053bba8b3d96fe73fb7241d6/docs/interactive/pages/solution/knowledge.mdx -------------------------------------------------------------------------------- /docs/interactive/pages/solution/risk_detection.mdx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraphScope/portal/1b4ac33114012315053bba8b3d96fe73fb7241d6/docs/interactive/pages/solution/risk_detection.mdx -------------------------------------------------------------------------------- /docs/interactive/public/visualization/coordinator-settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraphScope/portal/1b4ac33114012315053bba8b3d96fe73fb7241d6/docs/interactive/public/visualization/coordinator-settings.png -------------------------------------------------------------------------------- /docs/interactive/public/visualization/create_graph_draft_list.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraphScope/portal/1b4ac33114012315053bba8b3d96fe73fb7241d6/docs/interactive/public/visualization/create_graph_draft_list.png -------------------------------------------------------------------------------- /docs/interactive/public/visualization/create_graph_inputname.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraphScope/portal/1b4ac33114012315053bba8b3d96fe73fb7241d6/docs/interactive/public/visualization/create_graph_inputname.png -------------------------------------------------------------------------------- /docs/interactive/public/visualization/create_graph_modeling.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraphScope/portal/1b4ac33114012315053bba8b3d96fe73fb7241d6/docs/interactive/public/visualization/create_graph_modeling.png -------------------------------------------------------------------------------- /docs/interactive/public/visualization/importing/goto_job.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraphScope/portal/1b4ac33114012315053bba8b3d96fe73fb7241d6/docs/interactive/public/visualization/importing/goto_job.png -------------------------------------------------------------------------------- /docs/interactive/public/visualization/importing/load_data.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraphScope/portal/1b4ac33114012315053bba8b3d96fe73fb7241d6/docs/interactive/public/visualization/importing/load_data.png -------------------------------------------------------------------------------- /docs/interactive/public/visualization/importing/test_query.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraphScope/portal/1b4ac33114012315053bba8b3d96fe73fb7241d6/docs/interactive/public/visualization/importing/test_query.png -------------------------------------------------------------------------------- /docs/interactive/public/visualization/importing/upload_end.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraphScope/portal/1b4ac33114012315053bba8b3d96fe73fb7241d6/docs/interactive/public/visualization/importing/upload_end.png -------------------------------------------------------------------------------- /docs/interactive/public/visualization/importing/upload_start.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraphScope/portal/1b4ac33114012315053bba8b3d96fe73fb7241d6/docs/interactive/public/visualization/importing/upload_start.png -------------------------------------------------------------------------------- /docs/interactive/public/visualization/importing/via_config.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraphScope/portal/1b4ac33114012315053bba8b3d96fe73fb7241d6/docs/interactive/public/visualization/importing/via_config.png -------------------------------------------------------------------------------- /docs/interactive/public/visualization/modeling.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraphScope/portal/1b4ac33114012315053bba8b3d96fe73fb7241d6/docs/interactive/public/visualization/modeling.png -------------------------------------------------------------------------------- /docs/interactive/public/visualization/modeling/add_property.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraphScope/portal/1b4ac33114012315053bba8b3d96fe73fb7241d6/docs/interactive/public/visualization/modeling/add_property.png -------------------------------------------------------------------------------- /docs/interactive/public/visualization/modeling/add_vertex.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraphScope/portal/1b4ac33114012315053bba8b3d96fe73fb7241d6/docs/interactive/public/visualization/modeling/add_vertex.png -------------------------------------------------------------------------------- /docs/interactive/public/visualization/modeling/add_vertex_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraphScope/portal/1b4ac33114012315053bba8b3d96fe73fb7241d6/docs/interactive/public/visualization/modeling/add_vertex_1.png -------------------------------------------------------------------------------- /docs/interactive/public/visualization/modeling/add_vertex_edit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraphScope/portal/1b4ac33114012315053bba8b3d96fe73fb7241d6/docs/interactive/public/visualization/modeling/add_vertex_edit.png -------------------------------------------------------------------------------- /docs/interactive/public/visualization/modeling/auto_parse_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraphScope/portal/1b4ac33114012315053bba8b3d96fe73fb7241d6/docs/interactive/public/visualization/modeling/auto_parse_1.png -------------------------------------------------------------------------------- /docs/interactive/public/visualization/modeling/auto_parse_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraphScope/portal/1b4ac33114012315053bba8b3d96fe73fb7241d6/docs/interactive/public/visualization/modeling/auto_parse_2.png -------------------------------------------------------------------------------- /docs/interactive/public/visualization/modeling/auto_parse_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraphScope/portal/1b4ac33114012315053bba8b3d96fe73fb7241d6/docs/interactive/public/visualization/modeling/auto_parse_3.png -------------------------------------------------------------------------------- /docs/interactive/public/visualization/modeling/delete_property.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraphScope/portal/1b4ac33114012315053bba8b3d96fe73fb7241d6/docs/interactive/public/visualization/modeling/delete_property.png -------------------------------------------------------------------------------- /docs/interactive/public/visualization/modeling/drag_end.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraphScope/portal/1b4ac33114012315053bba8b3d96fe73fb7241d6/docs/interactive/public/visualization/modeling/drag_end.png -------------------------------------------------------------------------------- /docs/interactive/public/visualization/modeling/drag_other_edge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraphScope/portal/1b4ac33114012315053bba8b3d96fe73fb7241d6/docs/interactive/public/visualization/modeling/drag_other_edge.png -------------------------------------------------------------------------------- /docs/interactive/public/visualization/modeling/drag_other_edge_end.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraphScope/portal/1b4ac33114012315053bba8b3d96fe73fb7241d6/docs/interactive/public/visualization/modeling/drag_other_edge_end.png -------------------------------------------------------------------------------- /docs/interactive/public/visualization/modeling/drag_start.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraphScope/portal/1b4ac33114012315053bba8b3d96fe73fb7241d6/docs/interactive/public/visualization/modeling/drag_start.png -------------------------------------------------------------------------------- /docs/interactive/public/visualization/modeling/hover_node.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraphScope/portal/1b4ac33114012315053bba8b3d96fe73fb7241d6/docs/interactive/public/visualization/modeling/hover_node.png -------------------------------------------------------------------------------- /docs/interactive/public/visualization/modeling/list.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraphScope/portal/1b4ac33114012315053bba8b3d96fe73fb7241d6/docs/interactive/public/visualization/modeling/list.png -------------------------------------------------------------------------------- /docs/interactive/public/visualization/modeling/save-modeling.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraphScope/portal/1b4ac33114012315053bba8b3d96fe73fb7241d6/docs/interactive/public/visualization/modeling/save-modeling.png -------------------------------------------------------------------------------- /docs/interactive/public/visualization/modeling/save_model.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraphScope/portal/1b4ac33114012315053bba8b3d96fe73fb7241d6/docs/interactive/public/visualization/modeling/save_model.png -------------------------------------------------------------------------------- /docs/interactive/public/visualization/modeling/vaild.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraphScope/portal/1b4ac33114012315053bba8b3d96fe73fb7241d6/docs/interactive/public/visualization/modeling/vaild.png -------------------------------------------------------------------------------- /docs/interactive/public/visualization/modeling/via_config.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraphScope/portal/1b4ac33114012315053bba8b3d96fe73fb7241d6/docs/interactive/public/visualization/modeling/via_config.png -------------------------------------------------------------------------------- /docs/interactive/public/visualization/query.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraphScope/portal/1b4ac33114012315053bba8b3d96fe73fb7241d6/docs/interactive/public/visualization/query.png -------------------------------------------------------------------------------- /docs/interactive/public/visualization/querying/connect.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraphScope/portal/1b4ac33114012315053bba8b3d96fe73fb7241d6/docs/interactive/public/visualization/querying/connect.png -------------------------------------------------------------------------------- /docs/interactive/public/visualization/querying/entry.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraphScope/portal/1b4ac33114012315053bba8b3d96fe73fb7241d6/docs/interactive/public/visualization/querying/entry.png -------------------------------------------------------------------------------- /docs/interactive/public/visualization/querying/query_default.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraphScope/portal/1b4ac33114012315053bba8b3d96fe73fb7241d6/docs/interactive/public/visualization/querying/query_default.png -------------------------------------------------------------------------------- /docs/interactive/public/visualization/querying/query_recommend.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraphScope/portal/1b4ac33114012315053bba8b3d96fe73fb7241d6/docs/interactive/public/visualization/querying/query_recommend.png -------------------------------------------------------------------------------- /docs/interactive/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es5", 4 | "lib": ["dom", "dom.iterable", "esnext"], 5 | "allowJs": true, 6 | "skipLibCheck": true, 7 | "strict": true, 8 | "forceConsistentCasingInFileNames": true, 9 | "noEmit": true, 10 | "esModuleInterop": true, 11 | "module": "esnext", 12 | "moduleResolution": "node", 13 | "resolveJsonModule": true, 14 | "isolatedModules": true, 15 | "jsx": "preserve", 16 | "incremental": true 17 | }, 18 | "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"], 19 | "exclude": ["node_modules"] 20 | } 21 | -------------------------------------------------------------------------------- /docs/portal/explore-welcome.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraphScope/portal/1b4ac33114012315053bba8b3d96fe73fb7241d6/docs/portal/explore-welcome.png -------------------------------------------------------------------------------- /docs/portal/explore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraphScope/portal/1b4ac33114012315053bba8b3d96fe73fb7241d6/docs/portal/explore.png -------------------------------------------------------------------------------- /docs/portal/importing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraphScope/portal/1b4ac33114012315053bba8b3d96fe73fb7241d6/docs/portal/importing.png -------------------------------------------------------------------------------- /docs/portal/modeling-parse.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraphScope/portal/1b4ac33114012315053bba8b3d96fe73fb7241d6/docs/portal/modeling-parse.png -------------------------------------------------------------------------------- /docs/portal/modeling.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraphScope/portal/1b4ac33114012315053bba8b3d96fe73fb7241d6/docs/portal/modeling.png -------------------------------------------------------------------------------- /docs/portal/query.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraphScope/portal/1b4ac33114012315053bba8b3d96fe73fb7241d6/docs/portal/query.png -------------------------------------------------------------------------------- /examples/graphy/.fatherrc.js: -------------------------------------------------------------------------------- 1 | export default { 2 | esm: { output: 'es' }, 3 | cjs: { output: 'lib' }, 4 | }; 5 | -------------------------------------------------------------------------------- /examples/graphy/.gitignore: -------------------------------------------------------------------------------- 1 | 2 | node_modules 3 | **/node_modules 4 | backend/node_modules 5 | backend/csv 6 | 7 | package-lock.json -------------------------------------------------------------------------------- /examples/graphy/.npmrc: -------------------------------------------------------------------------------- 1 | # registry=https://registry.npmjs.com/ 2 | 3 | # 修改仓库镜像(中国镜像) 4 | registry=https://registry.npmmirror.com -------------------------------------------------------------------------------- /examples/graphy/.prettierrc.cjs: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | semi: true, 3 | trailingComma: 'all', 4 | singleQuote: true, 5 | printWidth: 120, 6 | arrowParens: 'avoid', 7 | }; 8 | -------------------------------------------------------------------------------- /examples/graphy/README.md: -------------------------------------------------------------------------------- 1 | ## Graphy Website 2 | 3 | ## Quick Start 4 | 5 | ### Perpare 6 | 7 | - install node.js : https://nodejs.org/en 8 | - install pnpm : https://pnpm.io/installation#using-npm `npm install -g pnpm` 9 | 10 | ### Install Dependencies 11 | 12 | ```bash 13 | pnpm install 14 | ``` 15 | 16 | ### Run Website 17 | 18 | ```bash 19 | npm run start 20 | ``` 21 | 22 | visit http://localhost:8000/dataset/ 23 | 24 | ![home page](./docs/image/home.png) 25 | -------------------------------------------------------------------------------- /examples/graphy/docs/image/home.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraphScope/portal/1b4ac33114012315053bba8b3d96fe73fb7241d6/examples/graphy/docs/image/home.png -------------------------------------------------------------------------------- /examples/graphy/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Graphy your data 7 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /examples/graphy/src/index.tsx: -------------------------------------------------------------------------------- 1 | import GraphyApp from './pages'; 2 | export { default as locales } from './locales'; 3 | export { default as ROUTES } from './pages'; 4 | export { SIDE_MENU } from './pages/const'; 5 | export { KuzuDriver } from './kuzu-driver/index'; 6 | export { getDriver, useKuzuGraph, createKuzuGraph } from './pages/dataset/service'; 7 | export default GraphyApp; 8 | -------------------------------------------------------------------------------- /examples/graphy/src/locales/en-US.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | Upload: 'Upload', 3 | Dataset: 'Dataset', 4 | Explore: 'Explore', 5 | Apps: 'Apps', 6 | Graphy: 'Graphy', 7 | }; 8 | -------------------------------------------------------------------------------- /examples/graphy/src/locales/index.tsx: -------------------------------------------------------------------------------- 1 | import enUS from './en-US'; 2 | import zhCN from './zh-CN'; 3 | export default { 4 | 'en-US': enUS, 5 | 'zh-CN': zhCN, 6 | }; 7 | -------------------------------------------------------------------------------- /examples/graphy/src/locales/zh-CN.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | Upload: '上传', 3 | Dataset: '数据集', 4 | Explore: '图查询', 5 | Apps: '应用商城', 6 | Graphy: 'Graphy', 7 | }; 8 | -------------------------------------------------------------------------------- /examples/graphy/src/pages/components/CreateHeaderPortal/index.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react'; 2 | import ReactDOM from 'react-dom'; 3 | const CreateHeaderPortal = ({ children }) => { 4 | return ReactDOM.createPortal(children, document.getElementById('header-breadcrumb') as HTMLElement); 5 | }; 6 | 7 | export default CreateHeaderPortal; 8 | -------------------------------------------------------------------------------- /examples/graphy/src/pages/components/GraphSchema/index.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react'; 2 | 3 | interface ISchemaGraphProps { 4 | data: any | null; 5 | } 6 | 7 | const SchemaGraph: React.FunctionComponent = props => { 8 | const { data } = props; 9 | if (data) { 10 | return
graph
; 11 | } 12 | return
no data
; 13 | }; 14 | 15 | export default SchemaGraph; 16 | -------------------------------------------------------------------------------- /examples/graphy/src/pages/components/index.tsx: -------------------------------------------------------------------------------- 1 | export { default as CreateHeaderPortal } from './CreateHeaderPortal'; 2 | export { default as GraphList } from './GraphList'; 3 | export { default as GraphSchema } from './GraphSchema'; 4 | export { default as Container } from './Container'; 5 | -------------------------------------------------------------------------------- /examples/graphy/src/pages/const.tsx: -------------------------------------------------------------------------------- 1 | import React, { useState } from 'react'; 2 | import { FormattedMessage } from 'react-intl'; 3 | import { SettingFilled, FilePdfOutlined, DeploymentUnitOutlined, AppstoreOutlined } from '@ant-design/icons'; 4 | 5 | import { MenuProps } from 'antd'; 6 | 7 | export const SIDE_MENU: MenuProps['items'] = [ 8 | { 9 | label: , 10 | key: '/dataset', 11 | icon: , 12 | }, 13 | ]; 14 | 15 | export const STATUS_MAP = { 16 | Running: { 17 | color: 'green', 18 | }, 19 | Stopped: { 20 | color: 'red', 21 | }, 22 | Draft: { 23 | color: '#ddd', 24 | }, 25 | }; 26 | -------------------------------------------------------------------------------- /examples/graphy/src/pages/dataset/cluster/components/index.tsx: -------------------------------------------------------------------------------- 1 | export { default as Cluster } from './Cluster'; 2 | export { default as Workflow } from './Workflow'; 3 | export { default as Summarize } from './Summarize'; 4 | export { default as FetchGraph } from './FetchGraph'; 5 | export { default as FilterCluster } from './FilterCluster'; 6 | export { default as FetchCluster } from './FetchCluster'; 7 | -------------------------------------------------------------------------------- /examples/graphy/src/pages/dataset/cluster/index.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react'; 2 | import ClusterGraph from './graph'; 3 | 4 | import { Container } from '../../components'; 5 | 6 | interface ICreateProps {} 7 | 8 | const ExtractSetting: React.FunctionComponent = props => { 9 | return ( 10 | dataset, 14 | }, 15 | { 16 | title: 'cluster entity', 17 | }, 18 | ]} 19 | > 20 | 21 | 22 | ); 23 | }; 24 | 25 | export default ExtractSetting; 26 | -------------------------------------------------------------------------------- /examples/graphy/src/pages/dataset/embed/index.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react'; 2 | import { Container } from '../../components'; 3 | import Graph from './graph'; 4 | interface IModelingProps {} 5 | 6 | const EmbedSchema: React.FunctionComponent = props => { 7 | return ( 8 |
9 | dataset, 13 | }, 14 | { 15 | title: 'embed schema', 16 | }, 17 | ]} 18 | > 19 | 20 | 21 |
22 | ); 23 | }; 24 | 25 | export default EmbedSchema; 26 | -------------------------------------------------------------------------------- /examples/graphy/src/pages/dataset/embed/transform.tsx: -------------------------------------------------------------------------------- 1 | import { Utils } from '@graphscope/studio-components'; 2 | export const transformDataToSchema = data => { 3 | const { nodes = [], edges = [] } = data || {}; 4 | const _nodes = nodes.map(item => { 5 | return { 6 | id: item.name, 7 | type: 'graph-node', 8 | data: { 9 | label: item.name, 10 | ...item, 11 | }, 12 | position: { 13 | x: 0, 14 | y: 0, 15 | }, 16 | }; 17 | }); 18 | const _edges = edges.map(item => { 19 | return { 20 | id: item.name || Utils.uuid(), 21 | type: 'graph-edge', 22 | source: item.source, 23 | target: item.target, 24 | data: { 25 | label: item.name, 26 | ...item, 27 | }, 28 | }; 29 | }); 30 | return { 31 | nodes: _nodes, 32 | edges: _edges, 33 | }; 34 | }; 35 | -------------------------------------------------------------------------------- /examples/graphy/src/pages/dataset/extract/index.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react'; 2 | 3 | import { Container } from '../../components'; 4 | 5 | import ExtractForm from './setting'; 6 | 7 | interface ICreateProps {} 8 | 9 | const ExtractSetting: React.FunctionComponent = props => { 10 | return ( 11 | dataset, 15 | }, 16 | { 17 | title: 'extract', 18 | }, 19 | ]} 20 | > 21 | 22 | 23 | ); 24 | }; 25 | 26 | export default ExtractSetting; 27 | -------------------------------------------------------------------------------- /examples/graphy/src/pages/dataset/typing.tsx: -------------------------------------------------------------------------------- 1 | export interface IDataset { 2 | id: string; 3 | entity: IEntity[]; 4 | extract: {}; 5 | schema: { 6 | nodes: { 7 | id: string; 8 | label: string; 9 | prompt: string; 10 | }[]; 11 | edges: { 12 | id: string; 13 | label: string; 14 | source: string; 15 | target: string; 16 | prompt?: string; 17 | }[]; 18 | }; 19 | status: 'initialized' | 'waiting_workflow_config' | 'waiting_extract' | 'extracting'; 20 | refreshList?: () => any; 21 | } 22 | 23 | export interface IEntity { 24 | id: string; 25 | name: string; 26 | value: number; 27 | cost: number; 28 | summarized: boolean; 29 | count?: number; 30 | } 31 | -------------------------------------------------------------------------------- /examples/graphy/src/pages/explore/paper-reading/components/Searchbar/index.css: -------------------------------------------------------------------------------- 1 | .search-list-item { 2 | cursor: pointer; 3 | } 4 | 5 | .search-list-item:hover { 6 | background-color: #fafafa; 7 | cursor: pointer; 8 | } -------------------------------------------------------------------------------- /examples/graphy/src/pages/explore/paper-reading/components/index.tsx: -------------------------------------------------------------------------------- 1 | import Searchbar from './Searchbar'; 2 | import PaperList from './PaperList'; 3 | import FetchGraph from './FetchGraph'; 4 | import PaperInfo from './PaperInfo'; 5 | import Report from './Report'; 6 | import Statistics from './Statistics'; 7 | export { Searchbar, PaperList, FetchGraph, PaperInfo, Report, Statistics }; 8 | -------------------------------------------------------------------------------- /examples/graphy/src/pages/explore/paper-reading/locales/en-US.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | /** sidebar */ 3 | 'Style Setting': 'Style Setting', 4 | 'Vertex Labels': 'Vertex Labels', 5 | 'Edge Labels': 'Edge Labels', 6 | }; 7 | -------------------------------------------------------------------------------- /examples/graphy/src/pages/explore/paper-reading/locales/index.tsx: -------------------------------------------------------------------------------- 1 | import enUS from './en-US'; 2 | import zhCN from './zh-CN'; 3 | export default { 4 | 'en-US': enUS, 5 | 'zh-CN': zhCN, 6 | }; 7 | -------------------------------------------------------------------------------- /examples/graphy/src/pages/explore/paper-reading/locales/zh-CN.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | 'Style Setting': 'Style Setting', 3 | 'Vertex Labels': 'Vertex Labels', 4 | 'Edge Labels': 'Edge Labels', 5 | }; 6 | -------------------------------------------------------------------------------- /examples/graphy/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "allowSyntheticDefaultImports": true, 4 | "allowJs": true, 5 | "declaration": true, 6 | "target": "es2015", 7 | "moduleResolution": "node", 8 | "jsx": "react", 9 | "resolveJsonModule": true, 10 | "strict": true, 11 | "noImplicitAny": false, 12 | "lib": ["dom", "esnext"], 13 | "module": "esnext", 14 | "esModuleInterop": true, 15 | "skipLibCheck": true, 16 | "isolatedModules": false 17 | }, 18 | "include": ["src/**/*"], 19 | "exclude": ["node_modules"] 20 | } 21 | -------------------------------------------------------------------------------- /examples/mcp-portal/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "mcp-portal", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1", 8 | "prestart": "tsc", 9 | "start": "node build/sse.js" 10 | }, 11 | "dependencies": { 12 | "@graphscope/studio-driver": "workspace:*", 13 | "@modelcontextprotocol/sdk": "^1.6.0", 14 | "@zodios/core": "^10.9.6", 15 | "express": "^4.21.2", 16 | "zod": "^3.24.2" 17 | }, 18 | "devDependencies": { 19 | "@types/express": "^5.0.0", 20 | "@types/node": "^22.13.5", 21 | "typescript": "^5.7.3" 22 | }, 23 | "keywords": [], 24 | "author": "", 25 | "license": "ISC", 26 | "publishConfig": { 27 | "access": "public", 28 | "registry": "https://registry.npmjs.org/" 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /examples/mcp-portal/src/resource/index.ts: -------------------------------------------------------------------------------- 1 | import { getDriver } from "../helpers"; 2 | const schema = { 3 | name: "graph-schema", 4 | uri: "schema://main", 5 | execute: async (uri: URL) => { 6 | const driver = getDriver(); 7 | try { 8 | const result = await driver.query("call gs.procedure.meta.schema()"); 9 | const { schema } = result.table[0]; 10 | 11 | return { 12 | contents: [ 13 | { 14 | uri: uri.href, 15 | text: schema, 16 | }, 17 | ], 18 | }; 19 | } catch (error: any) { 20 | return { 21 | contents: [ 22 | { 23 | uri: uri.href, 24 | text: `xxxx: ${error.message}`, 25 | }, 26 | ], 27 | }; 28 | } 29 | }, 30 | }; 31 | 32 | export default { schema }; 33 | -------------------------------------------------------------------------------- /examples/mcp-portal/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ES2022", 4 | "module": "Node16", 5 | "moduleResolution": "Node16", 6 | "outDir": "./build", 7 | "rootDir": "./src", 8 | "strict": true, 9 | "esModuleInterop": true, 10 | "skipLibCheck": true, 11 | "forceConsistentCasingInFileNames": true 12 | }, 13 | "include": ["src/**/*"], 14 | "exclude": ["node_modules"] 15 | } 16 | -------------------------------------------------------------------------------- /packages/studio-components/.fatherrc.js: -------------------------------------------------------------------------------- 1 | export default { 2 | esm: { output: 'es' }, 3 | cjs: { output: 'lib' }, 4 | }; 5 | -------------------------------------------------------------------------------- /packages/studio-components/README.md: -------------------------------------------------------------------------------- 1 | ```jsx 2 | /** 3 | * inline: true 4 | */ 5 | import Home from './src/HomePage/demo.tsx'; 6 | export default () => { 7 | return ; 8 | }; 9 | ``` 10 | -------------------------------------------------------------------------------- /packages/studio-components/src/CreatePortal/index.tsx: -------------------------------------------------------------------------------- 1 | import ReactDOM from 'react-dom'; 2 | 3 | interface IAppProps { 4 | children: React.ReactNode; 5 | /** 需要传送的 DOM ID */ 6 | targetId: string; 7 | } 8 | 9 | const CreatePortal: React.FunctionComponent = ({ children, targetId }) => { 10 | return ReactDOM.createPortal(children, document.getElementById(targetId) as HTMLElement); 11 | }; 12 | 13 | export default CreatePortal; 14 | -------------------------------------------------------------------------------- /packages/studio-components/src/EngineFeature/global.d.ts: -------------------------------------------------------------------------------- 1 | interface Window { 2 | GS_ENGINE_TYPE: 'groot' | 'interactive' | 'gart'; 3 | COORDINATOR_URL: string; 4 | } 5 | -------------------------------------------------------------------------------- /packages/studio-components/src/GlobalSpin/index.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react'; 2 | import { Flex, Spin } from 'antd'; 3 | interface IGlobalSpinProps {} 4 | 5 | const GlobalSpin: React.FunctionComponent = props => { 6 | return ( 7 | 19 | 20 | 21 | ); 22 | }; 23 | 24 | export default GlobalSpin; 25 | -------------------------------------------------------------------------------- /packages/studio-components/src/HomePage/Hooks/index.tsx: -------------------------------------------------------------------------------- 1 | export { useDynamicStyle } from './useDynamicStyle'; 2 | export { useIsMobile } from './useIsMobile'; 3 | export { useTheme } from './useTheme'; 4 | export { useLocale } from './useLocale'; 5 | export { EnvProvider, useEnv } from './useEnv'; 6 | -------------------------------------------------------------------------------- /packages/studio-components/src/HomePage/Hooks/useEnv.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { useTheme } from './useTheme'; 3 | import { useIsMobile } from './useIsMobile'; 4 | const EnvContext = React.createContext({ 5 | isMobile: false, 6 | isDark: false, 7 | }); 8 | 9 | export const EnvProvider = props => { 10 | const isMobile = useIsMobile(); 11 | const currentMode = useTheme(); 12 | const isDark = currentMode === 'darkAlgorithm'; 13 | console.log('currentMode', currentMode, 'isDark', isDark); 14 | 15 | return ( 16 | 22 | {props.children} 23 | 24 | ); 25 | }; 26 | export const useEnv = () => { 27 | return React.useContext(EnvContext); 28 | }; 29 | -------------------------------------------------------------------------------- /packages/studio-components/src/HomePage/Hooks/useIsMobile.tsx: -------------------------------------------------------------------------------- 1 | import { useState, useEffect } from 'react'; 2 | 3 | export const useIsMobile = () => { 4 | const [isMobile, setIsMobile] = useState(false); 5 | 6 | useEffect(() => { 7 | const mediaQuery = window.matchMedia('(max-width: 768px)'); 8 | const handleMediaChange = (e: any) => { 9 | setIsMobile(e.matches); 10 | }; 11 | 12 | setIsMobile(mediaQuery.matches); 13 | mediaQuery.addEventListener('change', handleMediaChange); 14 | return () => { 15 | mediaQuery.removeEventListener('change', handleMediaChange); 16 | }; 17 | }, []); 18 | 19 | return isMobile; 20 | }; 21 | -------------------------------------------------------------------------------- /packages/studio-components/src/Icons/Qps.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react'; 2 | import { theme } from 'antd'; 3 | interface IQpsProps { 4 | style?: React.CSSProperties; 5 | } 6 | 7 | const Qps: React.FunctionComponent = props => { 8 | const { style = {} } = props; 9 | const { token } = theme.useToken(); 10 | const { fontSize = 16, color = token.colorText } = style; 11 | return ( 12 | 13 | 17 | 18 | ); 19 | }; 20 | 21 | export default Qps; 22 | -------------------------------------------------------------------------------- /packages/studio-components/src/Illustration/NotFound.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraphScope/portal/1b4ac33114012315053bba8b3d96fe73fb7241d6/packages/studio-components/src/Illustration/NotFound.tsx -------------------------------------------------------------------------------- /packages/studio-components/src/ImportFiles/index.md: -------------------------------------------------------------------------------- 1 | ```jsx 2 | import React, { useState, useRef } from 'react'; 3 | import { ImportFiles, Button, message } from '@graphscope/studio-components'; 4 | 5 | export default () => { 6 | const onSubmit = params => { 7 | message(params); 8 | }; 9 | return ( 10 |
11 | 19 | {params => { 20 | return ( 21 | <> 22 | 25 | 26 | ); 27 | }} 28 | 29 |
30 | ); 31 | }; 32 | ``` 33 | -------------------------------------------------------------------------------- /packages/studio-components/src/Logo/index.md: -------------------------------------------------------------------------------- 1 | ```jsx 2 | import React, { useState } from 'react'; 3 | import { Space } from 'antd'; 4 | import { Logo, LogoText, LogoImage } from '@graphscope/studio-components'; 5 | 6 | export default () => { 7 | return ( 8 |
9 | 10 | 11 | 12 |
13 | ); 14 | }; 15 | ``` 16 | -------------------------------------------------------------------------------- /packages/studio-components/src/MultipleInstance/index.tsx: -------------------------------------------------------------------------------- 1 | import React, { useMemo } from 'react'; 2 | import { IdContext } from './useMultipleInstance'; 3 | const MultipleInstance = props => { 4 | const { children } = props; 5 | const SDK_ID = useMemo(() => { 6 | if (!props.id) { 7 | const defaultId = `${Math.random().toString(36).substr(2)}`; 8 | console.info( 9 | `%c ⚠️: The id prop is missing in the component. A default SDK_ID: ${defaultId} is generated for managing multiple instances.`, 10 | 'color:green', 11 | ); 12 | return defaultId; 13 | } 14 | return props.id; 15 | }, []); 16 | 17 | return {children}; 18 | }; 19 | 20 | export default MultipleInstance; 21 | -------------------------------------------------------------------------------- /packages/studio-components/src/MultipleInstance/useMultipleInstance.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | export const IdContext = React.createContext<{ id: string }>({ 4 | id: '', 5 | }); 6 | 7 | export const StoreMap = new Map(); 8 | 9 | export const getProxyStoreById = (ContextId: string, initialStore: any) => { 10 | if (ContextId) { 11 | const prevStore = StoreMap.get(ContextId); 12 | if (!prevStore) { 13 | /** 考虑SDK多实例的场景 */ 14 | StoreMap.set(ContextId, initialStore); 15 | } 16 | } 17 | 18 | return StoreMap.get(ContextId); 19 | }; 20 | 21 | export const useMultipleInstance = initialStore => { 22 | const { id } = React.useContext(IdContext); 23 | const currentStore = getProxyStoreById(id, initialStore); 24 | return { 25 | id, 26 | currentStore, 27 | }; 28 | }; 29 | -------------------------------------------------------------------------------- /packages/studio-components/src/PropertiesList/SelectType.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react'; 2 | import { Select } from 'antd'; 3 | interface ISelectTypeProps { 4 | value: string; 5 | disabled?: boolean; 6 | options: { label: string; value: string }[]; 7 | onChange: (value: string) => void; 8 | } 9 | const SelectType: React.FunctionComponent = props => { 10 | const { onChange, options, disabled } = props; 11 | const [value, setValue] = React.useState(props.value); 12 | 13 | return ( 14 | 25 | ); 26 | }; 27 | 28 | export default SelectType; 29 | -------------------------------------------------------------------------------- /packages/studio-components/src/PropertiesList/index.en-US.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraphScope/portal/1b4ac33114012315053bba8b3d96fe73fb7241d6/packages/studio-components/src/PropertiesList/index.en-US.md -------------------------------------------------------------------------------- /packages/studio-components/src/PropertiesList/typing.ts: -------------------------------------------------------------------------------- 1 | export interface Property { 2 | /** 属性名 */ 3 | name: string; 4 | /** 唯一标识 */ 5 | key?: string; 6 | /** 数据字段 */ 7 | token?: any; 8 | /** 索引 */ 9 | index?: number; 10 | /** name 是否可以修改 */ 11 | disable?: boolean; 12 | /** 属性类型 */ 13 | type?: string; 14 | /** 是否是主键 */ 15 | primaryKey?: boolean; 16 | } 17 | export interface Option { 18 | label: string; 19 | value: string; 20 | disabled?: boolean; 21 | } 22 | -------------------------------------------------------------------------------- /packages/studio-components/src/Provider/const.ts: -------------------------------------------------------------------------------- 1 | /** components 基础配置 */ 2 | export const components = { 3 | Menu: { 4 | itemBg: 'rgba(255, 255, 255, 0)', 5 | subMenuItemBg: 'rgba(255, 255, 255, 0)', 6 | iconMarginInlineEnd: 14, 7 | itemMarginInline: 4, 8 | iconSize: 14, 9 | collapsedWidth: 50, 10 | itemActiveBg: '#eaeaea', 11 | }, 12 | Typography: { 13 | titleMarginBottom: '0.2em', 14 | titleMarginTop: '0.8em', 15 | }, 16 | Table: { 17 | cellPaddingBlock: 4, // 单元格纵向内间距 18 | cellPaddingInline: 8, //单元格横向内间距(默认大尺寸) 19 | }, 20 | Pagination: { 21 | itemSize: 20, 22 | }, 23 | Result: { 24 | iconFontSize: 62, 25 | titleFontSize: 20, 26 | colorError: '#00000073', 27 | }, 28 | }; 29 | 30 | /** token 基础配置 */ 31 | export const token = { 32 | colorBorder: 'red', 33 | colorBgBase: '#fff', 34 | }; 35 | -------------------------------------------------------------------------------- /packages/studio-components/src/ResultConfig/README: -------------------------------------------------------------------------------- 1 | # Result 2 | 3 | ## 结果页图形文案 4 | 5 | ```js 6 | /** 7 | * 文案展示 8 | * subTitle: React.ReactNode; 9 | * 图案右上角图标 10 | *rightSVG: React.ReactNode 11 | */ 12 | import ResultConfig from './index.tsx'; 13 | // 图案右上角 svg 图标 14 | const rightSVG = ( 15 | <> 16 | 17 | 18 | 19 | 20 | 21 | 22 | ); 23 | export default () => { 24 | return 文案展示} rightSVG={rightSVG} />; 25 | }; 26 | ``` 27 | -------------------------------------------------------------------------------- /packages/studio-components/src/Section/useSection.tsx: -------------------------------------------------------------------------------- 1 | import { createContext, useContext } from 'react'; 2 | 3 | export interface ISectionContext { 4 | collapsed: { 5 | leftSide: boolean; 6 | rightSide: boolean; 7 | }; 8 | 9 | toggleLeftSide: (value?: boolean) => void; 10 | toggleRightSide: (value?: boolean) => void; 11 | } 12 | export const SectionContext = createContext({ 13 | collapsed: { 14 | leftSide: true, 15 | rightSide: true, 16 | }, 17 | toggleRightSide: () => {}, 18 | toggleLeftSide: () => {}, 19 | }); 20 | 21 | export const SectionProvider = SectionContext.Provider; 22 | 23 | export const useSection = () => { 24 | const context = useContext(SectionContext); 25 | 26 | if (context === undefined || Object.keys(context).length === 0) { 27 | throw new Error(`useContext must be used within a SectionProvider`); 28 | } 29 | return context; 30 | }; 31 | -------------------------------------------------------------------------------- /packages/studio-components/src/SideTabs/index.md: -------------------------------------------------------------------------------- 1 | # SideTabs 2 | 3 | ```jsx 4 | import React, { useState } from 'react'; 5 | import { Space } from 'antd'; 6 | import { SideTabs } from '@graphscope/studio-components'; 7 | const Tab1 = () => { 8 | return
Tab-1 components
; 9 | }; 10 | const Tab2 = () => { 11 | return
Tab-2 components
; 12 | }; 13 | const Tab3 = () => { 14 | return
Tab-3 components
; 15 | }; 16 | export default () => { 17 | const items = [ 18 | { 19 | key: 'Tab-1', 20 | children: , 21 | label: 'Tab-1', 22 | }, 23 | { 24 | key: 'Tab-2', 25 | children: , 26 | label: 'Tab-2', 27 | }, 28 | { 29 | key: 'Tab-3', 30 | children: , 31 | label: 'Tab-3', 32 | }, 33 | ]; 34 | return ( 35 |
36 | 37 |
38 | ); 39 | }; 40 | ``` 41 | -------------------------------------------------------------------------------- /packages/studio-components/src/Slot/index.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | export interface ISlotProps { 3 | id?: string; 4 | } 5 | 6 | const Placeholder = () => { 7 | return
; 8 | }; 9 | const Slot = (props: ISlotProps) => { 10 | const { id } = props; 11 | if (id && process.env.NODE_ENV === 'production') { 12 | try { 13 | //@ts-ignore 14 | const Component = window.GS_STUDIO_SLOTS[id]; 15 | return ; 16 | } catch (error) { 17 | return ; 18 | } 19 | } 20 | return ; 21 | }; 22 | 23 | export default Slot; 24 | -------------------------------------------------------------------------------- /packages/studio-components/src/TableCard/index.md: -------------------------------------------------------------------------------- 1 | # TableCard 2 | 3 | ```jsx 4 | import React, { useState } from 'react'; 5 | import { Space } from 'antd'; 6 | import { TableCard } from '@graphscope/studio-components'; 7 | 8 | export default () => { 9 | const data = { 10 | label: 'table-1', 11 | properties: [{}], 12 | }; 13 | return ( 14 |
15 | 16 |
17 | ); 18 | }; 19 | ``` 20 | -------------------------------------------------------------------------------- /packages/studio-components/src/hooks/useHistory.tsx: -------------------------------------------------------------------------------- 1 | import { useNavigate } from 'react-router-dom'; 2 | export const useHistory = () => { 3 | const navigate = useNavigate(); 4 | const history = { 5 | push: navigate, 6 | }; 7 | return history; 8 | }; 9 | -------------------------------------------------------------------------------- /packages/studio-components/src/layout/header.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react'; 2 | import { theme } from 'antd'; 3 | const { useToken } = theme; 4 | 5 | interface IHeaderProps { 6 | children: React.ReactNode; 7 | style: React.CSSProperties; 8 | } 9 | 10 | const Header: React.FunctionComponent = props => { 11 | const { children, style } = props; 12 | const { token } = useToken(); 13 | 14 | return ( 15 |
16 | {children} 17 |
18 | ); 19 | }; 20 | 21 | export default Header; 22 | -------------------------------------------------------------------------------- /packages/studio-components/src/layout/index.md: -------------------------------------------------------------------------------- 1 | # Layout 2 | 3 | ```jsx 4 | import { Layout, Icons, StudioProvider } from '@graphscope/studio-components'; 5 | 6 | export default () => { 7 | const sideMenu = [ 8 | { 9 | label: 'home', 10 | key: '/home', 11 | icon: , 12 | }, 13 | ]; 14 | return ( 15 |
16 | 17 |
18 | ); 19 | }; 20 | ``` 21 | -------------------------------------------------------------------------------- /packages/studio-components/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "allowSyntheticDefaultImports": true, 4 | "allowJs": true, 5 | "declaration": true, 6 | "target": "es2018", 7 | "moduleResolution": "node", 8 | "jsx": "react", 9 | "resolveJsonModule": true, 10 | "strict": true, 11 | "noImplicitAny": false, 12 | "lib": ["dom", "esnext"], 13 | "module": "esnext", 14 | "esModuleInterop": true, 15 | "skipLibCheck": true, 16 | "isolatedModules": false 17 | }, 18 | "include": ["src/**/*"], 19 | "exclude": ["node_modules"] 20 | } 21 | -------------------------------------------------------------------------------- /packages/studio-draw-pattern/.fatherrc.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from "father"; 2 | 3 | export default defineConfig({ 4 | esm: { 5 | input: "src", 6 | output: "./dist/esm", 7 | transformer: "swc", 8 | }, 9 | }); 10 | -------------------------------------------------------------------------------- /packages/studio-draw-pattern/.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules 2 | /dist 3 | .DS_Store 4 | -------------------------------------------------------------------------------- /packages/studio-draw-pattern/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Vite + React + TS 8 | 9 | 10 |
11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /packages/studio-draw-pattern/public/structure.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraphScope/portal/1b4ac33114012315053bba8b3d96fe73fb7241d6/packages/studio-draw-pattern/public/structure.png -------------------------------------------------------------------------------- /packages/studio-draw-pattern/src/App.tsx: -------------------------------------------------------------------------------- 1 | import { DrawPattern } from '.'; 2 | import { defaultEdges, defaultNodes } from './data'; 3 | 4 | 5 | function App() { 6 | return ( 7 |
8 | 15 |
16 | ); 17 | } 18 | 19 | export default App; 20 | -------------------------------------------------------------------------------- /packages/studio-draw-pattern/src/hooks/cypher/useDecodeCypher.ts: -------------------------------------------------------------------------------- 1 | import { GPE } from '../../types/GPE'; 2 | 3 | // 目前 GPE 只设计 model.json 4 | export const useDecodeCypher = (cypherWord: string): GPE => { 5 | return { 6 | nodes: [], 7 | edges: [], 8 | variabels: [], 9 | }; 10 | }; 11 | -------------------------------------------------------------------------------- /packages/studio-draw-pattern/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './components/DrawPattern'; 2 | export * from './hooks/cypher/useDecodeCypher'; 3 | export * from './hooks/cypher/useEncodeCypher'; 4 | -------------------------------------------------------------------------------- /packages/studio-draw-pattern/src/main.tsx: -------------------------------------------------------------------------------- 1 | import { createRoot } from 'react-dom/client'; 2 | import App from './App'; 3 | import { StrictMode } from 'react'; 4 | // import './index.css' 5 | 6 | createRoot(document.getElementById('root')!).render( 7 | 8 | 9 | , 10 | ); 11 | -------------------------------------------------------------------------------- /packages/studio-draw-pattern/src/types/GPE.d.ts: -------------------------------------------------------------------------------- 1 | import { Edge } from './edge'; 2 | import { Node } from './node'; 3 | import { Variable } from './variable'; 4 | 5 | export interface GPE { 6 | nodes: Node[]; 7 | edges: Edge[]; 8 | variabels: Variable[]; 9 | } 10 | -------------------------------------------------------------------------------- /packages/studio-draw-pattern/src/types/edge.d.ts: -------------------------------------------------------------------------------- 1 | import { IEdgeData, ISchemaEdge } from '@graphscope/studio-graph-editor'; 2 | import { Property } from './property'; 3 | 4 | export interface EdgeData extends ISchemaEdge { 5 | variable?: string; 6 | data?: IEdgeData; 7 | } 8 | export interface Edge { 9 | id: string; 10 | label?: string; 11 | targetNode?: string; 12 | sourceNode?: string; 13 | statement?: string; 14 | isErgodic?: boolean; 15 | variable?: string; 16 | propertiesId?: string; 17 | } 18 | -------------------------------------------------------------------------------- /packages/studio-draw-pattern/src/types/node.d.ts: -------------------------------------------------------------------------------- 1 | import { ISchemaNode } from '@graphscope/studio-graph-editor'; 2 | import type { Property } from './property'; 3 | 4 | export interface NodeData extends ISchemaNode { 5 | variable?: string; 6 | } 7 | 8 | export interface Node { 9 | id: string; 10 | label?: string; 11 | inRelations?: Set; 12 | outRelations?: Set; 13 | statement?: string; 14 | isErgodic?: boolean; 15 | variable?: string; 16 | propertiesId?: string; 17 | } 18 | -------------------------------------------------------------------------------- /packages/studio-draw-pattern/src/types/property.d.ts: -------------------------------------------------------------------------------- 1 | export interface Property { 2 | name: string; 3 | value: string | number; 4 | type?: string; 5 | compare: string; 6 | id: string; 7 | statement?: string; 8 | } 9 | 10 | export interface PropertySet { 11 | belongId: string; 12 | belongType: 'node' | 'edge'; 13 | data: Property[]; 14 | } 15 | -------------------------------------------------------------------------------- /packages/studio-draw-pattern/src/types/variable.d.ts: -------------------------------------------------------------------------------- 1 | export interface Variable { 2 | id: string; 3 | name: string; 4 | belongType: string; 5 | belongKey: string; 6 | } 7 | -------------------------------------------------------------------------------- /packages/studio-draw-pattern/test/utils/test.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraphScope/portal/1b4ac33114012315053bba8b3d96fe73fb7241d6/packages/studio-draw-pattern/test/utils/test.ts -------------------------------------------------------------------------------- /packages/studio-draw-pattern/vite.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'vite'; 2 | import react from '@vitejs/plugin-react'; 3 | 4 | // https://vitejs.dev/config/ 5 | export default defineConfig({ 6 | plugins: [react()], 7 | }); 8 | -------------------------------------------------------------------------------- /packages/studio-driver/.fatherrc.js: -------------------------------------------------------------------------------- 1 | export default { 2 | esm: { output: 'es' }, 3 | cjs: { output: 'lib' }, 4 | }; 5 | -------------------------------------------------------------------------------- /packages/studio-driver/.npmignore: -------------------------------------------------------------------------------- 1 | src 2 | node_modules -------------------------------------------------------------------------------- /packages/studio-driver/src/index.ts: -------------------------------------------------------------------------------- 1 | import CypherDriver from './cypher-driver'; 2 | import GremlinDriver from './gremlin-driver'; 3 | import { queryGraph, cancelGraph, getDriver } from './queryGraph'; 4 | import { KuzuDriver } from './kuzu-wasm-driver-official'; 5 | 6 | 7 | export { CypherDriver, GremlinDriver, KuzuDriver, queryGraph, cancelGraph, getDriver }; 8 | export type { QueryParams } from './queryGraph'; 9 | -------------------------------------------------------------------------------- /packages/studio-driver/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "allowSyntheticDefaultImports": true, 4 | "allowJs": true, 5 | "declaration": true, 6 | "target": "es2018", 7 | "moduleResolution": "node", 8 | "jsx": "react", 9 | "resolveJsonModule": true, 10 | "strict": true, 11 | "noImplicitAny": false, 12 | "lib": ["dom", "esnext"], 13 | "module": "esnext", 14 | "esModuleInterop": true, 15 | "skipLibCheck": true, 16 | "isolatedModules": false 17 | }, 18 | "include": ["src/**/*"], 19 | "exclude": ["node_modules"] 20 | } 21 | -------------------------------------------------------------------------------- /packages/studio-explore/.fatherrc.js: -------------------------------------------------------------------------------- 1 | export default { 2 | esm: { output: 'es' }, 3 | cjs: { output: 'lib' }, 4 | }; 5 | -------------------------------------------------------------------------------- /packages/studio-explore/.gitignore: -------------------------------------------------------------------------------- 1 | 2 | node_modules 3 | **/node_modules 4 | backend/node_modules 5 | backend/csv 6 | 7 | package-lock.json -------------------------------------------------------------------------------- /packages/studio-explore/README.md: -------------------------------------------------------------------------------- 1 | # GraphScope Studio Explore 2 | -------------------------------------------------------------------------------- /packages/studio-explore/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Explore 7 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /packages/studio-explore/src/components/ChartView/index.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react'; 2 | import ColumnChart from './BarChart'; 3 | import PieChart from './PieChart'; 4 | interface IChartViewProps { 5 | data: Record; 6 | xField: string; 7 | yField: string; 8 | type?: 'pie' | 'bar'; 9 | style?: React.CSSProperties; 10 | onClick?: (data: any) => void; 11 | options?: Record; 12 | } 13 | 14 | const ChartView: React.FunctionComponent = props => { 15 | const { type = 'bar' } = props; 16 | if (type === 'pie') { 17 | return ; 18 | } 19 | return ; 20 | }; 21 | 22 | export default ChartView; 23 | -------------------------------------------------------------------------------- /packages/studio-explore/src/components/ClusterAnalysis/PropertyField.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react'; 2 | 3 | interface IPropertyFieldProps {} 4 | 5 | const PropertyField: React.FunctionComponent = props => { 6 | return
; 7 | }; 8 | 9 | export default PropertyField; 10 | -------------------------------------------------------------------------------- /packages/studio-explore/src/components/Copilot/useController.ts: -------------------------------------------------------------------------------- 1 | import { useRef } from 'react'; 2 | 3 | export const useController = () => { 4 | const controller = useRef(new AbortController()); 5 | 6 | if (controller.current.signal.aborted) { 7 | controller.current = new AbortController(); 8 | } 9 | 10 | return controller.current; 11 | }; 12 | -------------------------------------------------------------------------------- /packages/studio-explore/src/components/Copilot/utils/message.ts: -------------------------------------------------------------------------------- 1 | interface Base { 2 | status?: 'pending' | 'success' | 'cancel'; 3 | role?: 'system' | 'assistant' | 'user'; 4 | content?: string; 5 | timestamp?: number; 6 | reserved?: boolean; 7 | } 8 | 9 | export class Message implements Base { 10 | status: 'pending' | 'success' | 'cancel'; 11 | 12 | role: 'system' | 'assistant' | 'user'; 13 | 14 | content: string; 15 | 16 | timestamp: number; 17 | 18 | reserved: boolean; 19 | 20 | constructor(props: Partial) { 21 | this.status = props.status || 'pending'; 22 | this.role = props.role || 'user'; 23 | this.content = props.content || ''; 24 | this.timestamp = props.timestamp || Date.now(); 25 | this.reserved = props.reserved || false; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /packages/studio-explore/src/components/FloatToolbar/index.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react'; 2 | import { Toolbar, useContext } from '@graphscope/studio-graph'; 3 | interface IFloatToolbarProps { 4 | children: React.ReactNode; 5 | } 6 | 7 | const FloatToolbar: React.FunctionComponent = props => { 8 | const { children } = props; 9 | const { store } = useContext(); 10 | const { selectNodes, selectEdges } = store; 11 | const isSelect = selectNodes.length > 0 || selectEdges.length > 0; 12 | 13 | const right = isSelect ? '296px' : '12px'; 14 | return ( 15 | 25 | {children} 26 | 27 | ); 28 | }; 29 | 30 | export default FloatToolbar; 31 | -------------------------------------------------------------------------------- /packages/studio-explore/src/components/Next/Neighbors/getTableData.tsx: -------------------------------------------------------------------------------- 1 | import type { NodeData } from '@graphscope/studio-graph'; 2 | export const getTable = (data: NodeData[]) => { 3 | const columns = new Map(); 4 | columns.set('id', { 5 | title: 'id', 6 | dataIndex: 'id', 7 | key: 'id', 8 | }); 9 | columns.set('label', { 10 | title: 'label', 11 | dataIndex: 'label', 12 | key: 'label', 13 | }); 14 | const dataSource = data.map(item => { 15 | const { id, properties = {}, label } = item; 16 | Object.keys(properties).forEach(key => { 17 | columns.set(key, { 18 | title: key, 19 | dataIndex: key, 20 | key, 21 | }); 22 | }); 23 | return { 24 | key: id, 25 | id, 26 | label, 27 | ...properties, 28 | }; 29 | }); 30 | 31 | return { 32 | dataSource, 33 | columns: Array.from(columns.values()), 34 | }; 35 | }; 36 | -------------------------------------------------------------------------------- /packages/studio-explore/src/components/Next/index.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react'; 2 | import { Divider, Flex, Typography } from 'antd'; 3 | import Neighbors from './Neighbors'; 4 | 5 | interface NextProps {} 6 | 7 | const Next: React.FunctionComponent = props => { 8 | return ; 9 | }; 10 | 11 | export default Next; 12 | -------------------------------------------------------------------------------- /packages/studio-explore/src/components/Overview/Lables/index.tsx: -------------------------------------------------------------------------------- 1 | import React, { useEffect, useState } from 'react'; 2 | 3 | import { useContext, IQueryStatement, SchemaView, type GraphData } from '@graphscope/studio-graph'; 4 | 5 | import { Flex, Typography } from 'antd'; 6 | interface ILabelsProps {} 7 | 8 | const Labels: React.FunctionComponent = props => { 9 | return ( 10 | 11 | 12 | Labels Statistics 13 | 14 | 15 | 16 | ); 17 | }; 18 | 19 | export default Labels; 20 | -------------------------------------------------------------------------------- /packages/studio-explore/src/components/Overview/index.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react'; 2 | import { Flex, Divider } from 'antd'; 3 | import Properties from './Properties'; 4 | import TotalCounts from './TotalCounts'; 5 | import Labels from './Lables'; 6 | interface IUploadProps { 7 | children?: React.ReactNode; 8 | } 9 | 10 | const Statistics: React.FunctionComponent = props => { 11 | return ( 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | ); 20 | }; 21 | 22 | export default Statistics; 23 | -------------------------------------------------------------------------------- /packages/studio-explore/src/components/Report/Mock/index.tsx: -------------------------------------------------------------------------------- 1 | const MOCK = { 2 | enable: false, 3 | sleep: ms => new Promise(resolve => setTimeout(resolve, ms)), 4 | bib: async () => { 5 | const url = new URL('./challenge/report.bib', import.meta.url).href; 6 | return fetch(url).then(response => response.text()); 7 | }, 8 | report: async () => { 9 | const url = new URL('./challenge/report.md', import.meta.url).href; 10 | return fetch(url).then(response => response.text()); 11 | }, 12 | mindmap: async () => { 13 | const url = new URL('./challenge/mindmap.json', import.meta.url).href; 14 | return fetch(url).then(response => response.json()); 15 | }, 16 | intention: async () => { 17 | const url = new URL('./challenge/intention.json', import.meta.url).href; 18 | return fetch(url).then(response => response.json()); 19 | }, 20 | }; 21 | 22 | export default MOCK; 23 | -------------------------------------------------------------------------------- /packages/studio-explore/src/components/Report/Mock/topic/infer.txt: -------------------------------------------------------------------------------- 1 | According to the selected paper, category these papers with their topics and write a related work report.  2 | 3 | User intention 4 | The user wants to categorize papers based on their topics and generate a related work report. This involves identifying the topic of the selected paper and then finding other papers that share the same or similar topics. 5 | Execute Plan 6 | Identify the topic of the selected paper.; Retrieve papers that have the same or similar topics.; Extract relevant information from these papers, such as title, authors, year, and summary.; Generate a related work report summarizing the findings. 7 | Required data 8 | Please first ensure that the current canvas contains these types of nodes and edges. You can manually adjust the set of node properties passed to the LLM. 9 | Paper 10 | id title authors year summary primary_category Topic -------------------------------------------------------------------------------- /packages/studio-explore/src/components/Searchbar/css.tsx: -------------------------------------------------------------------------------- 1 | export default ` 2 | .search-list-item { 3 | cursor: pointer; 4 | } 5 | 6 | .search-list-item:hover { 7 | background-color: #fafafa; 8 | cursor: pointer; 9 | } 10 | `; 11 | -------------------------------------------------------------------------------- /packages/studio-explore/src/components/Statistics/index.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react'; 2 | import { Flex, Divider } from 'antd'; 3 | import Properties from './Properties'; 4 | 5 | interface IUploadProps { 6 | children?: React.ReactNode; 7 | } 8 | interface IFilterOptions { 9 | id: string; 10 | property: string; 11 | chartType: 'HISTOGRAM' | 'SELECT' | 'PIE' | 'WORDCLOUD' | 'NONE' | 'DATE' | 'COLUMN'; 12 | chartData?: Map; 13 | } 14 | const Statistics: React.FunctionComponent = props => { 15 | return ( 16 | 17 | 18 | 19 | ); 20 | }; 21 | 22 | export default Statistics; 23 | -------------------------------------------------------------------------------- /packages/studio-explore/src/components/TableView/getTableData.tsx: -------------------------------------------------------------------------------- 1 | import type { NodeData } from '@graphscope/studio-graph'; 2 | export const getTable = (data: NodeData[]) => { 3 | const columns = new Map(); 4 | columns.set('id', { 5 | title: 'id', 6 | dataIndex: 'id', 7 | key: 'id', 8 | }); 9 | columns.set('label', { 10 | title: 'label', 11 | dataIndex: 'label', 12 | key: 'label', 13 | }); 14 | const dataSource = data.map(item => { 15 | const { id, properties = {}, label } = item; 16 | Object.keys(properties).forEach(key => { 17 | columns.set(key, { 18 | title: key, 19 | dataIndex: key, 20 | key, 21 | }); 22 | }); 23 | return { 24 | key: id, 25 | id, 26 | label, 27 | ...properties, 28 | }; 29 | }); 30 | 31 | return { 32 | dataSource, 33 | columns: Array.from(columns.values()), 34 | }; 35 | }; 36 | -------------------------------------------------------------------------------- /packages/studio-explore/src/components/index.tsx: -------------------------------------------------------------------------------- 1 | export { default as Connection } from './Connection'; 2 | export { default as FetchGraph } from './FetchGraph'; 3 | export { default as Searchbar } from './Searchbar'; 4 | 5 | export { default as ClusterAnalysis } from './ClusterAnalysis'; 6 | export { default as Next } from './Next'; 7 | 8 | export { default as Statistics } from './Statistics'; 9 | export { default as Overview } from './Overview'; 10 | export { default as FloatTabs } from './FloatTabs'; 11 | export { default as Placeholder } from './Placeholder'; 12 | export { default as CypherQuery } from './CypherQuery'; 13 | export { default as Copilot } from './Copilot'; 14 | export { default as RunAI } from './Copilot/RunAI'; 15 | export { default as FloatToolbar } from './FloatToolbar'; 16 | export { default as Report } from './Report'; 17 | -------------------------------------------------------------------------------- /packages/studio-explore/src/demo.tsx: -------------------------------------------------------------------------------- 1 | import Explore from './app'; 2 | import React from 'react'; 3 | import ReactDOM from 'react-dom/client'; 4 | 5 | const root = ReactDOM.createRoot(document.getElementById('root') as HTMLElement); 6 | 7 | root.render(); 8 | 9 | export default Explore; 10 | -------------------------------------------------------------------------------- /packages/studio-explore/src/index.tsx: -------------------------------------------------------------------------------- 1 | import Explore from './app'; 2 | 3 | export default Explore; 4 | -------------------------------------------------------------------------------- /packages/studio-explore/src/locales/index.tsx: -------------------------------------------------------------------------------- 1 | import enUS from './en-US'; 2 | import zhCN from './zh-CN'; 3 | export default { 4 | 'en-US': enUS, 5 | 'zh-CN': zhCN, 6 | }; 7 | -------------------------------------------------------------------------------- /packages/studio-explore/src/locales/zh-CN.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | 'Toggle Right Side': '展开右侧面板', 3 | 4 | /** copilot */ 5 | 'Privacy Security Notice': '隐私安全说明', 6 | Setting: '设置', 7 | 'query.app.sidebar.gpt.setting.security': 8 | '为了提高生成Cypher查询语句的质量,我们将使用您的图数据模式作为ChatGPT的提示。您的数据将被严格保密,仅用于此目的。此外,请注意我们的OpenAI API密钥仅存在于您的浏览器本地,以增加安全性。', 9 | 'API key is only stored locally in your browser': 'API key 仅保存在您浏览器本地', 10 | 'query.copilot.welcome': '您好!我是 GraphScope 查询助理,您有任何关于 Cypher 或者 Gremlin 查询的问题都可以随时问我', 11 | 'recommend 5 interesting query statements': '帮我推荐5个有意思的查询', 12 | 'query any subgraph': '查询任意一个子图', 13 | 'insight the statistical distribution of vertex labels in the graph': '帮我分析图中节点类型的分布情况', 14 | }; 15 | -------------------------------------------------------------------------------- /packages/studio-explore/src/services/cypher/queryCommonNeighbor.tsx: -------------------------------------------------------------------------------- 1 | import type { IQueryCommonNeighbor } from '@graphscope/studio-graph'; 2 | import { queryStatement } from './queryStatement'; 3 | export const queryCommonNeighbor: IQueryCommonNeighbor['query'] = async selectIds => { 4 | const data = { 5 | nodes: [], 6 | edges: [], 7 | }; 8 | return data; 9 | }; 10 | -------------------------------------------------------------------------------- /packages/studio-explore/src/services/cypher/queryGraphData.tsx: -------------------------------------------------------------------------------- 1 | import type { IQueryGraphData } from '../../components/FetchGraph/index'; 2 | export const queryGraphData: IQueryGraphData['query'] = async () => { 3 | try { 4 | // const data = await queryStatement('Match a return a limit 100'); 5 | // return data; 6 | return { 7 | nodes: [], 8 | edges: [], 9 | }; 10 | } catch (error) { 11 | console.log('error', error); 12 | return { 13 | nodes: [], 14 | edges: [], 15 | }; 16 | } 17 | }; 18 | -------------------------------------------------------------------------------- /packages/studio-explore/src/services/cypher/queryNeighborStatics.tsx: -------------------------------------------------------------------------------- 1 | import { queryStatement } from './queryStatement'; 2 | export const queryNeighborStatics = async (property: string, selectIds: string[]) => { 3 | if (property === 'label') { 4 | const data = await queryStatement(`MATCH(a)-[b]-(c) 5 | where elementId(a) IN [${selectIds}] 6 | WITH c, labels(c) as label 7 | return label, COUNT(*) as counts 8 | ORDER BY counts DESC 9 | `); 10 | 11 | return data.table; 12 | } 13 | const data = await queryStatement(` 14 | MATCH(a)-[b]-(c) 15 | where a.${property} IS NOT NULL 16 | AND elementId(a) IN [${selectIds}] 17 | return c.${property},COUNT(c.${property}) as counts 18 | `); 19 | return data.table; 20 | }; 21 | -------------------------------------------------------------------------------- /packages/studio-explore/src/services/cypher/queryPropertyStatics.tsx: -------------------------------------------------------------------------------- 1 | import { queryStatement } from './queryStatement'; 2 | import { Utils } from '@graphscope/studio-components'; 3 | export const queryPropertyStatics = async (property: string, label?: string) => { 4 | const statistical_keys = (Utils.storage.get('exploration_chart_statistical_keys') as string[]) || []; 5 | 6 | if (!statistical_keys.includes(property)) { 7 | return []; 8 | } 9 | 10 | let matchScript = `MATCH(a)`; 11 | 12 | if (label) { 13 | matchScript = `MATCH(a:${label})`; 14 | } 15 | const data = await queryStatement(` 16 | ${matchScript} where a.${property} IS NOT NULL 17 | WITH a.${property} AS ${property} 18 | return ${property},COUNT(${property}) as counts 19 | `); 20 | 21 | return data.table; 22 | }; 23 | -------------------------------------------------------------------------------- /packages/studio-explore/src/services/cypher/querySavedStatements.tsx: -------------------------------------------------------------------------------- 1 | import localforage from 'localforage'; 2 | 3 | const DB_QUERY_SAVED = localforage.createInstance({ 4 | name: 'DB_QUERY_SAVED', 5 | }); 6 | export const querySavedStaments = async () => { 7 | const result: any[] = []; 8 | await DB_QUERY_SAVED.iterate(item => { 9 | if (item) { 10 | result.push(item); 11 | } 12 | }); 13 | return result; 14 | }; 15 | -------------------------------------------------------------------------------- /packages/studio-explore/src/services/gremlin/index.tsx: -------------------------------------------------------------------------------- 1 | export default {}; 2 | -------------------------------------------------------------------------------- /packages/studio-explore/src/services/index.tsx: -------------------------------------------------------------------------------- 1 | import CypherServices from './cypher'; 2 | import GremlinServices from './gremlin'; 3 | import { Utils } from '@graphscope/studio-components'; 4 | export default { 5 | gremlin: GremlinServices, 6 | cypher: CypherServices, 7 | }; 8 | 9 | export const getDefaultServices = () => { 10 | const query_language = Utils.storage.get('query_language'); 11 | if (query_language === 'gremlin') { 12 | return GremlinServices; 13 | } 14 | return CypherServices; 15 | }; 16 | -------------------------------------------------------------------------------- /packages/studio-explore/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "allowSyntheticDefaultImports": true, 4 | "allowJs": true, 5 | "declaration": true, 6 | "target": "es2018", 7 | "moduleResolution": "node", 8 | "jsx": "react", 9 | "resolveJsonModule": true, 10 | "strict": true, 11 | "noImplicitAny": false, 12 | "lib": ["dom", "esnext"], 13 | "module": "esnext", 14 | "esModuleInterop": true, 15 | "skipLibCheck": true, 16 | "isolatedModules": false 17 | }, 18 | "include": ["src/**/*"], 19 | "exclude": ["node_modules"] 20 | } 21 | -------------------------------------------------------------------------------- /packages/studio-graph-editor/.fatherrc.js: -------------------------------------------------------------------------------- 1 | export default { 2 | esm: { output: 'es' }, 3 | cjs: { output: 'lib' }, 4 | }; 5 | -------------------------------------------------------------------------------- /packages/studio-graph-editor/README.md: -------------------------------------------------------------------------------- 1 | # Studio Graph Editor 2 | 3 | - warning: 目前还没有对 `Table-Node` 进行 `API` 支持。 -------------------------------------------------------------------------------- /packages/studio-graph-editor/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Studio Graph Editor 7 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /packages/studio-graph-editor/index.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react'; 2 | import { Graph } from './src/index'; 3 | import { createRoot } from 'react-dom/client'; 4 | 5 | interface IAppProps {} 6 | 7 | const DrawGraph: React.FunctionComponent = props => { 8 | return ( 9 |
10 | 11 |
12 | ); 13 | }; 14 | 15 | // ReactDOM.render(, document.getElementById('root') as HTMLElement); 16 | createRoot(document.getElementById('root')!).render(); 17 | -------------------------------------------------------------------------------- /packages/studio-graph-editor/src/button-controller/index.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { Toolbar } from '@graphscope/studio-components'; 3 | import ClearCanvas from './clear-canvas'; 4 | import AddNode from './add-node'; 5 | 6 | import ExportImage from './export-image'; 7 | import { useGraphContext } from '..'; 8 | 9 | interface IButtonControllerProps {} 10 | 11 | const ButtonController: React.FunctionComponent = props => { 12 | const { controlElements } = useGraphContext(); 13 | return ( 14 | <> 15 | 16 | 17 | 18 | 19 | {controlElements} 20 | 21 | 22 | ); 23 | }; 24 | 25 | export default React.memo(ButtonController); 26 | -------------------------------------------------------------------------------- /packages/studio-graph-editor/src/elements/connection-line/index.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | export default ({ fromX, fromY, toX, toY }) => { 4 | return ( 5 | 6 | 14 | 24 | 25 | ); 26 | }; 27 | -------------------------------------------------------------------------------- /packages/studio-graph-editor/src/elements/edge-types/index.ts: -------------------------------------------------------------------------------- 1 | import type { EdgeTypes } from 'reactflow'; 2 | import TableEdge from './table-edge'; 3 | import GraphEdge from './graph-edge'; 4 | export const edgeTypes = { 5 | 'table-edge': TableEdge, 6 | 'graph-edge': GraphEdge, 7 | } satisfies EdgeTypes; 8 | -------------------------------------------------------------------------------- /packages/studio-graph-editor/src/elements/edge-types/useStyle.ts: -------------------------------------------------------------------------------- 1 | import { useContext } from '../../canvas/useContext'; 2 | import { useStudioProvier } from '@graphscope/studio-components'; 3 | export const usePathStyle = (id: string) => { 4 | const { store } = useContext(); 5 | const { currentId, theme } = store; 6 | const isSelected = id === currentId; 7 | const { isLight } = useStudioProvier(); 8 | const getStyle = () => { 9 | if (!isLight) { 10 | return isSelected ? theme.primaryColor : '#d7d7d7'; 11 | } 12 | return isSelected ? theme.primaryColor : '#000'; 13 | }; 14 | return { 15 | isSelected, 16 | markerEnd: isSelected ? 'url(#arrow-selected)' : 'url(#arrow)', 17 | style: { stroke: getStyle(), strokeWidth: isSelected ? '2px' : '1px' }, 18 | }; 19 | }; 20 | -------------------------------------------------------------------------------- /packages/studio-graph-editor/src/elements/node-types/arrow.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | export default ({ style }) => { 3 | return ( 4 | 5 | 6 | 7 | ); 8 | }; 9 | -------------------------------------------------------------------------------- /packages/studio-graph-editor/src/elements/node-types/index.ts: -------------------------------------------------------------------------------- 1 | import type { NodeTypes } from 'reactflow'; 2 | import TableNode from './table-node'; 3 | import GraphNode from './graph-node'; 4 | export const nodeTypes = { 5 | // Add any of your custom nodes here! 6 | 'table-node': TableNode, 7 | 'graph-node': GraphNode, 8 | } satisfies NodeTypes; 9 | -------------------------------------------------------------------------------- /packages/studio-graph-editor/src/locales/en-US.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | 'Start sketching a model, a vertex label is a named grouping or categorization of nodes within the graph dataset': 3 | 'Start sketching a model, a vertex label is a named grouping or categorization of nodes within the graph dataset', 4 | 'Create new vertex': 'Create new vertex', 5 | }; 6 | -------------------------------------------------------------------------------- /packages/studio-graph-editor/src/locales/index.tsx: -------------------------------------------------------------------------------- 1 | import enUS from './en-US'; 2 | import zhCN from './zh-CN'; 3 | export default { 4 | 'en-US': enUS, 5 | 'zh-CN': zhCN, 6 | }; 7 | -------------------------------------------------------------------------------- /packages/studio-graph-editor/src/locales/zh-CN.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | 'Start sketching a model, a vertex label is a named grouping or categorization of nodes within the graph dataset': 3 | '开始绘制模型吧,顶点标签是图数据集中节点的命名分组或分类', 4 | 'Create new vertex': '创建节点', 5 | }; 6 | -------------------------------------------------------------------------------- /packages/studio-graph-editor/src/types/edge.ts: -------------------------------------------------------------------------------- 1 | import type { Property } from '@graphscope/studio-components'; 2 | import type { Edge } from 'reactflow'; 3 | 4 | export interface IEdgeData { 5 | label: string; 6 | /** 禁用:saved / binded / xxxx */ 7 | disabled?: boolean; 8 | /** 是否保存在服务端 */ 9 | saved?: boolean; 10 | properties?: Property[]; 11 | source_vertex_fields?: Property; 12 | target_vertex_fields?: Property; 13 | dataFields?: string[]; 14 | delimiter?: string; 15 | datatype?: 'csv' | 'odps'; 16 | filelocation?: string; 17 | _extra?: { 18 | type?: string; 19 | offset?: string; 20 | isLoop: boolean; 21 | isRevert?: boolean; 22 | isPoly?: boolean; 23 | index?: number; 24 | count?: number; 25 | }; 26 | [key: string]: any; 27 | } 28 | 29 | export type ISchemaEdge = Edge & { data: IEdgeData }; 30 | -------------------------------------------------------------------------------- /packages/studio-graph-editor/src/types/node.ts: -------------------------------------------------------------------------------- 1 | import type { Property } from '@graphscope/studio-components'; 2 | import type { Node } from 'reactflow'; 3 | 4 | export interface INodeData { 5 | label: string; 6 | disabled?: boolean; 7 | properties?: Property[]; 8 | dataFields?: string[]; 9 | delimiter?: string; 10 | datatype?: 'csv' | 'odps'; 11 | filelocation?: string; 12 | [key: string]: any; 13 | } 14 | 15 | export type ISchemaNode = Node; 16 | -------------------------------------------------------------------------------- /packages/studio-graph-editor/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "allowSyntheticDefaultImports": true, 4 | "allowJs": true, 5 | "declaration": true, 6 | "target": "es2018", 7 | "moduleResolution": "node", 8 | "emitDeclarationOnly": true, // Only emit type declarations 9 | "outDir": "./dist", // Output directory for .d.ts files 10 | "rootDir": "./src", // Root directory of your source files 11 | "jsx": "react", 12 | "resolveJsonModule": true, 13 | "strict": true, 14 | "noImplicitAny": false, 15 | "lib": ["dom", "esnext"], 16 | "module": "esnext", 17 | "esModuleInterop": true, 18 | "skipLibCheck": true, 19 | "isolatedModules": false 20 | }, 21 | "include": ["src/**/*"], 22 | "exclude": ["node_modules", "dist"] 23 | } 24 | -------------------------------------------------------------------------------- /packages/studio-graph/.fatherrc.js: -------------------------------------------------------------------------------- 1 | export default { 2 | esm: { output: 'es' }, 3 | cjs: { output: 'lib' }, 4 | }; 5 | -------------------------------------------------------------------------------- /packages/studio-graph/README.md: -------------------------------------------------------------------------------- 1 | # GraphScope Components 2 | -------------------------------------------------------------------------------- /packages/studio-graph/docs/const.ts: -------------------------------------------------------------------------------- 1 | export const data = { 2 | nodes: [ 3 | { 4 | id: 'id-1', 5 | properties: { 6 | name: 'first node', 7 | age: 18, 8 | cluster: 'c0', 9 | }, 10 | }, 11 | { 12 | id: 'id-2', 13 | properties: { 14 | cluster: 'c1', 15 | }, 16 | }, 17 | ], 18 | edges: [ 19 | { 20 | source: 'id-1', 21 | target: 'id-2', 22 | id: 'e1', 23 | properties: { 24 | weight: 0.8, 25 | desc: 'weight_0.8', 26 | }, 27 | }, 28 | ], 29 | }; 30 | 31 | export const schema = { 32 | nodes: [], 33 | edges: [], 34 | }; 35 | -------------------------------------------------------------------------------- /packages/studio-graph/docs/images/global-store.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraphScope/portal/1b4ac33114012315053bba8b3d96fe73fb7241d6/packages/studio-graph/docs/images/global-store.png -------------------------------------------------------------------------------- /packages/studio-graph/docs/images/icons.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraphScope/portal/1b4ac33114012315053bba8b3d96fe73fb7241d6/packages/studio-graph/docs/images/icons.png -------------------------------------------------------------------------------- /packages/studio-graph/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Explore 7 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /packages/studio-graph/src/components/BasicInteraction/index.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react'; 2 | import useNodeClick from './useNodeClick'; 3 | import useEdgeClick from './useEdgeClick'; 4 | import useNodeHover from './useNodeHover'; 5 | import useComboEvent from '../../graph/custom-combo/useComboEvent'; 6 | import { useFoucs } from './useFoucs'; 7 | interface IBasicInteractionProps {} 8 | 9 | const BasicInteraction: React.FunctionComponent = props => { 10 | useNodeClick(); 11 | useNodeHover(); 12 | useEdgeClick(); 13 | useComboEvent(); 14 | useFoucs(); 15 | 16 | return null; 17 | }; 18 | 19 | export default BasicInteraction; 20 | -------------------------------------------------------------------------------- /packages/studio-graph/src/components/Canvas/index.tsx: -------------------------------------------------------------------------------- 1 | import Canvas from '../../graph'; 2 | export default Canvas; 3 | -------------------------------------------------------------------------------- /packages/studio-graph/src/components/Loading/index.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react'; 2 | import { Spin } from 'antd'; 3 | import { useContext } from '../../'; 4 | 5 | interface ILoadingProps {} 6 | 7 | const Loading: React.FunctionComponent = props => { 8 | const { store } = useContext(); 9 | const { isLoading } = store; 10 | if (isLoading) { 11 | return ( 12 |
25 | 26 |
27 | ); 28 | } 29 | return null; 30 | }; 31 | 32 | export default Loading; 33 | -------------------------------------------------------------------------------- /packages/studio-graph/src/components/PropertiesTable/getTableData.tsx: -------------------------------------------------------------------------------- 1 | import type { NodeData } from '../../graph/types'; 2 | export const getTable = (data: NodeData[]) => { 3 | const columns = new Map(); 4 | columns.set('id', { 5 | title: 'id', 6 | dataIndex: 'id', 7 | key: 'id', 8 | }); 9 | columns.set('label', { 10 | title: 'label', 11 | dataIndex: 'label', 12 | key: 'label', 13 | }); 14 | const dataSource = data.map(item => { 15 | const { id, properties = {}, label } = item; 16 | Object.keys(properties).forEach(key => { 17 | columns.set(key, { 18 | title: key, 19 | dataIndex: key, 20 | key, 21 | }); 22 | }); 23 | return { 24 | key: id, 25 | id, 26 | label, 27 | ...properties, 28 | }; 29 | }); 30 | 31 | return { 32 | dataSource, 33 | columns: Array.from(columns.values()), 34 | }; 35 | }; 36 | -------------------------------------------------------------------------------- /packages/studio-graph/src/components/Toolbar/index.tsx: -------------------------------------------------------------------------------- 1 | import { Toolbar } from '@graphscope/studio-components'; 2 | 3 | export default Toolbar; 4 | -------------------------------------------------------------------------------- /packages/studio-graph/src/graph/custom-icons/index.tsx: -------------------------------------------------------------------------------- 1 | //see: https://www.iconfont.cn/ 2 | 3 | const builtinIconFontId = 'font_4775957_1pdhxz37nss'; 4 | import { loadFontJson, loadUnicodeFont } from './loader'; 5 | 6 | export let icons: Record = {}; 7 | export const registerIcons = async (id: string = builtinIconFontId) => { 8 | const { glyphs } = await loadFontJson(id); 9 | await loadUnicodeFont(builtinIconFontId); 10 | icons = glyphs.reduce((acc, curr) => { 11 | return { 12 | ...acc, 13 | [curr.name]: String.fromCodePoint(curr.unicode_decimal), 14 | }; 15 | }, {}); 16 | return icons; 17 | }; 18 | -------------------------------------------------------------------------------- /packages/studio-graph/src/graph/hooks/index.tsx: -------------------------------------------------------------------------------- 1 | export { useEdgeStyle } from './useEdgeStyle'; 2 | export { useNodeStyle } from './useNodeStyle'; 3 | export { useInit } from './useInit'; 4 | export { useCombos } from './useCombos'; 5 | export { useDataAndLayout } from './useDataAndLayout'; 6 | -------------------------------------------------------------------------------- /packages/studio-graph/src/graph/hooks/useCombos.tsx: -------------------------------------------------------------------------------- 1 | import { useContext } from '../useContext'; 2 | import { useEffect } from 'react'; 3 | import { ForceGraphInstance } from '../types'; 4 | import { renderCombo } from '../custom-combo/render'; 5 | export const useCombos = () => { 6 | const { store } = useContext(); 7 | const { graph, combos } = store; 8 | 9 | useEffect(() => { 10 | if (graph) { 11 | if (combos.length === 0) { 12 | /** 关闭聚类 */ 13 | if ((graph as ForceGraphInstance).onRenderFramePost) { 14 | (graph as ForceGraphInstance).onRenderFramePost(() => {}); 15 | } 16 | } else { 17 | /** 数据驱动,开启聚类 */ 18 | renderCombo(graph as ForceGraphInstance, combos); 19 | } 20 | } 21 | }, [combos, graph]); 22 | }; 23 | -------------------------------------------------------------------------------- /packages/studio-graph/src/graph/index.tsx: -------------------------------------------------------------------------------- 1 | import React, { CSSProperties } from 'react'; 2 | 3 | import { useNodeStyle, useEdgeStyle, useInit, useCombos, useDataAndLayout } from './hooks'; 4 | import { theme } from 'antd'; 5 | const Canvas = props => { 6 | const { containerRef, id } = useInit(); 7 | useNodeStyle(); 8 | useEdgeStyle(); 9 | useDataAndLayout(); 10 | useCombos(); 11 | const { token } = theme.useToken(); 12 | 13 | const containerStyle: CSSProperties = { 14 | position: 'relative', 15 | height: '100%', 16 | width: '100%', 17 | background: token.colorBgBase, 18 | }; 19 | return
; 20 | }; 21 | 22 | export default Canvas; 23 | -------------------------------------------------------------------------------- /packages/studio-graph/src/graph/layout/index.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraphScope/portal/1b4ac33114012315053bba8b3d96fe73fb7241d6/packages/studio-graph/src/graph/layout/index.tsx -------------------------------------------------------------------------------- /packages/studio-graph/src/graph/utils/get.tsx: -------------------------------------------------------------------------------- 1 | export function get(obj, path) { 2 | if (obj == null || typeof path !== 'string') return undefined; 3 | 4 | let keys = 0, 5 | key = '', 6 | len = path.length, 7 | result = obj; 8 | 9 | while (keys < len) { 10 | const char = path[keys]; 11 | if (char === '.') { 12 | result = result[key]; 13 | if (result == null) return undefined; 14 | key = ''; 15 | } else { 16 | key += char; 17 | } 18 | keys++; 19 | } 20 | 21 | return result[key]; 22 | } 23 | -------------------------------------------------------------------------------- /packages/studio-graph/src/graph/utils/getSourceTarget.tsx: -------------------------------------------------------------------------------- 1 | import type { EdgeData } from '../types'; 2 | export const getSourceId = (source: EdgeData['source']) => { 3 | return typeof source === 'string' ? source : source.id; 4 | }; 5 | export const getTargetId = (target: EdgeData['target']) => { 6 | return typeof target === 'string' ? target : target.id; 7 | }; 8 | export const getSourceTarget = (edge: EdgeData) => { 9 | return { 10 | source: getSourceId(edge.source), 11 | target: getTargetId(edge.target), 12 | }; 13 | }; 14 | 15 | export function processLinks(links) { 16 | return links.map(link => { 17 | return { 18 | id: link.id, 19 | label: link.label, 20 | source: typeof link.source === 'string' ? link.source : link.source.id, 21 | target: typeof link.target === 'string' ? link.target : link.target.id, 22 | properties: link.properties, 23 | }; 24 | }); 25 | } 26 | -------------------------------------------------------------------------------- /packages/studio-graph/src/graph/utils/handleStatus.tsx: -------------------------------------------------------------------------------- 1 | import { EdgeStatus, NodeStatus } from '../types'; 2 | 3 | export const handleStatus = (item, runtimeStatus): NodeStatus | EdgeStatus => { 4 | const { id, label, __status } = item; 5 | /** 用户手动指定的样式,优先级第一 */ 6 | /** 按照label 划分群组的样式,优先级第二 */ 7 | /** 后台数据初始化就添加的样式,优先级第三 */ 8 | return runtimeStatus[id] || runtimeStatus[label] || __status || {}; 9 | }; 10 | -------------------------------------------------------------------------------- /packages/studio-graph/src/graph/utils/hexToRgba.tsx: -------------------------------------------------------------------------------- 1 | export function hexToRgba(hex, opacity) { 2 | // 移除十六进制颜色值中的井号(#) 3 | hex = hex.replace('#', ''); 4 | 5 | // 扩展短十六进制颜色代码 6 | if (hex.length === 3) { 7 | hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2]; 8 | } 9 | 10 | // 检查扩展后的十六进制颜色值是否是完整的6位 11 | if (hex.length !== 6) { 12 | return 'transparent'; 13 | } 14 | 15 | // 将十六进制颜色值转换为rgb数组 16 | let r = parseInt(hex.slice(0, 2), 16); 17 | let g = parseInt(hex.slice(2, 4), 16); 18 | let b = parseInt(hex.slice(4, 6), 16); 19 | 20 | // 返回rgba格式的颜色值 21 | return 'rgba(' + r + ',' + g + ',' + b + ',' + opacity + ')'; 22 | } 23 | -------------------------------------------------------------------------------- /packages/studio-graph/src/graph/utils/index.tsx: -------------------------------------------------------------------------------- 1 | export { handleEdgeStyle, handleNodeStyle } from './handleStyle'; 2 | export { getDataMap } from './getDataMap'; 3 | export { handleStatus } from './handleStatus'; 4 | export { getStyleConfig } from './getStyleConfig'; 5 | export { getSourceId, getSourceTarget, getTargetId, processLinks } from './getSourceTarget'; 6 | export { get } from './get'; 7 | export { hexToRgba } from './hexToRgba'; 8 | -------------------------------------------------------------------------------- /packages/studio-graph/src/index.tsx: -------------------------------------------------------------------------------- 1 | export { default as locales } from './locales'; 2 | 3 | export * from './components'; 4 | export * from './graph/types'; 5 | 6 | export { useContext, GraphProvider } from './graph/useContext'; 7 | export { getDataMap, getStyleConfig, processLinks } from './graph/utils'; 8 | export { registerIcons } from './graph/custom-icons'; 9 | export { useApis } from './graph/hooks/useApis'; 10 | -------------------------------------------------------------------------------- /packages/studio-graph/src/locales/en-US.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | 'Select nodes by box selection': 'Select nodes by box selection', 3 | 'Switch graph view dimensions': 'Switch graph view dimensions', 4 | 'Zoom to fitview': 'Zoom to fitview', 5 | Fullscreen: 'Fullscreen', 6 | 'Toggle Right Side': 'Toggle Right Side', 7 | 'Caption Status': 'Caption Status', 8 | 'Clustering layout': 'Clustering layout', 9 | 'Export graph json': 'Export graph json', 10 | 'Edge Properties': 'Edge Properties', 11 | 'Vertex Properties': 'Vertex Properties', 12 | 'File type': 'File type', 13 | 'Vertex Labels': 'Vertex Labels', 14 | 'Edge Labels': 'Edge Labels', 15 | }; 16 | -------------------------------------------------------------------------------- /packages/studio-graph/src/locales/index.tsx: -------------------------------------------------------------------------------- 1 | import enUS from './en-US'; 2 | import zhCN from './zh-CN'; 3 | export default { 4 | 'en-US': enUS, 5 | 'zh-CN': zhCN, 6 | }; 7 | -------------------------------------------------------------------------------- /packages/studio-graph/src/locales/zh-CN.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | 'Select nodes by box selection': '通过框选选择节点', 3 | 'Switch graph view dimensions': '切换图表视图维度', 4 | 'Zoom to fitview': '缩放适当视图', 5 | Fullscreen: '全屏', 6 | 'Toggle Right Side': '切换右侧', 7 | 'Caption Status': '是否展示标签', 8 | 'Clustering layout': '聚类布局', 9 | 'Export graph json': '导出 JSON 数据', 10 | 'Edge Properties': '边属性信息', 11 | 'Vertex Properties': '点属性信息', 12 | 'File type': '文件类型', 13 | 'Vertex Labels': '点类型', 14 | 'Edge Labels': '边类型', 15 | }; 16 | -------------------------------------------------------------------------------- /packages/studio-graph/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "allowSyntheticDefaultImports": true, 4 | "allowJs": true, 5 | "declaration": true, 6 | "target": "es2018", 7 | "moduleResolution": "node", 8 | "jsx": "react", 9 | "resolveJsonModule": true, 10 | "strict": true, 11 | "noImplicitAny": false, 12 | "lib": ["dom", "esnext"], 13 | "module": "esnext", 14 | "esModuleInterop": true, 15 | "skipLibCheck": true, 16 | "isolatedModules": false 17 | }, 18 | "include": ["src/**/*", "docs/index.tsx"], 19 | "exclude": ["node_modules"] 20 | } 21 | -------------------------------------------------------------------------------- /packages/studio-graph/vite.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'vite'; 2 | import react from '@vitejs/plugin-react'; 3 | 4 | export default defineConfig({ 5 | root: './', 6 | 7 | build: { 8 | outDir: './dist', 9 | rollupOptions: {}, 10 | }, 11 | 12 | optimizeDeps: { 13 | exclude: ['@kuzu/kuzu-wasm'], 14 | }, 15 | 16 | plugins: [react()], 17 | }); 18 | -------------------------------------------------------------------------------- /packages/studio-importor/.fatherrc.js: -------------------------------------------------------------------------------- 1 | export default { 2 | esm: { output: 'es' }, 3 | cjs: { output: 'lib' }, 4 | }; 5 | -------------------------------------------------------------------------------- /packages/studio-importor/README.md: -------------------------------------------------------------------------------- 1 | # GraphScope Studio Importor 2 | -------------------------------------------------------------------------------- /packages/studio-importor/src/app/button-controller/right-button.tsx: -------------------------------------------------------------------------------- 1 | import { Button } from 'antd'; 2 | import * as React from 'react'; 3 | import { Icons, useSection } from '@graphscope/studio-components'; 4 | interface IRightButtonProps {} 5 | 6 | const RightButton: React.FunctionComponent = props => { 7 | const { toggleRightSide } = useSection(); 8 | 9 | return ( 10 | 26 |

{name}

27 | {children} 28 | 29 | ); 30 | }; 31 | 32 | export default A; 33 | -------------------------------------------------------------------------------- /packages/use-zustand/src/demo/B.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react'; 2 | import { useContext } from './useContext'; 3 | 4 | interface IAProps { 5 | children: React.ReactNode; 6 | } 7 | 8 | const B: React.FunctionComponent = props => { 9 | const { children } = props; 10 | const { store, updateStore } = useContext(); 11 | const { name } = store; 12 | console.log('render.....B', name); 13 | return ( 14 |
20 | B{children} 21 |
22 | ); 23 | }; 24 | 25 | export default B; 26 | -------------------------------------------------------------------------------- /packages/use-zustand/src/demo/useContext.tsx: -------------------------------------------------------------------------------- 1 | import { useContext as useZustandContext } from '../index'; 2 | export interface IStore { 3 | count: number; 4 | name: string; 5 | } 6 | export const initialStore: IStore = { 7 | count: 0, 8 | name: 'hello', 9 | }; 10 | export const useContext = () => useZustandContext(); 11 | -------------------------------------------------------------------------------- /packages/use-zustand/src/global.d.ts: -------------------------------------------------------------------------------- 1 | import { StoreApi, UseBoundStore } from 'zustand'; 2 | import { IStore } from '.'; 3 | 4 | declare global { 5 | interface Window { 6 | GLOBAL_INITIAL_STORE_MAP: Map; 7 | GLOBAL_USE_STORE_MAP: Map>>>; 8 | } 9 | } 10 | 11 | export {}; 12 | -------------------------------------------------------------------------------- /packages/use-zustand/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "allowSyntheticDefaultImports": true, 4 | "allowJs": true, 5 | "declaration": true, 6 | "target": "es2018", 7 | "moduleResolution": "node", 8 | "jsx": "react", 9 | "resolveJsonModule": true, 10 | "strict": true, 11 | "noImplicitAny": false, 12 | "lib": ["dom", "esnext"], 13 | "module": "esnext", 14 | "esModuleInterop": true, 15 | "skipLibCheck": true, 16 | "isolatedModules": false 17 | }, 18 | "include": ["src/**/*"], 19 | "exclude": ["node_modules"] 20 | } 21 | -------------------------------------------------------------------------------- /packages/use-zustand/vite.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from "vite"; 2 | import react from "@vitejs/plugin-react"; 3 | export default defineConfig({ 4 | root: "./", 5 | server: { 6 | host: "0.0.0.0", 7 | 8 | open: "/", 9 | }, 10 | build: { 11 | outDir: "./dist", 12 | }, 13 | plugins: [react()], 14 | }); 15 | -------------------------------------------------------------------------------- /pnpm-workspace.yaml: -------------------------------------------------------------------------------- 1 | packages: 2 | - 'packages/*' 3 | - 'examples/*' 4 | - 'docs/*' 5 | packageExtensions: 6 | '*': 7 | dependencies: 8 | react: 18.2.0 9 | react-dom: 18.2.0 10 | -------------------------------------------------------------------------------- /python/graphy/__init__.py: -------------------------------------------------------------------------------- 1 | """ 2 | __init__.py file for the grag package. 3 | """ 4 | -------------------------------------------------------------------------------- /python/graphy/apps/__init__.py: -------------------------------------------------------------------------------- 1 | """ 2 | __init__.py for the apps package 3 | """ 4 | 5 | from apps.demo_app import DemoApp 6 | 7 | __all__ = ["DemoApp"] 8 | -------------------------------------------------------------------------------- /python/graphy/apps/paper_reading/__init__.py: -------------------------------------------------------------------------------- 1 | """ 2 | __init__.py for the paper_reading apps package 3 | """ 4 | 5 | from .paper_navigate_edge import ( 6 | PaperNavigateEdge, 7 | PaperNavigateArxivEdge, 8 | PaperNavigateScholarEdge, 9 | ) 10 | from .paper_reading_nodes import PaperInspector 11 | from .survey_paper_reading import SurveyPaperReading 12 | 13 | __all__ = [ 14 | "PaperNavigateEdge", 15 | "PaperNavigateArxivEdge", 16 | "PaperNavigateScholarEdge", 17 | "PaperInspector", 18 | "SurveyPaperReading", 19 | ] 20 | -------------------------------------------------------------------------------- /python/graphy/config/__init__.py: -------------------------------------------------------------------------------- 1 | """ 2 | __init__.py for the config package 3 | """ 4 | 5 | # config.py 6 | import os 7 | import sys 8 | 9 | # Get the path of the system's temporary directory 10 | work_dir = os.path.curdir 11 | 12 | # Some global parameters 13 | WF_STATE_CACHE_KEY = "caches" 14 | WF_STATE_MEMORY_KEY = "memory_manager" 15 | WF_STATE_EXTRACTOR_KEY = "pdf_extractor" 16 | WF_STATE_PROGRESS_KEY = "progress" 17 | WF_DATA_DIR = os.path.join(work_dir, "graphyourdata") 18 | WF_OUTPUT_DIR = os.path.join(WF_DATA_DIR, "output") 19 | WF_VECTDB_DIR = os.path.join(WF_DATA_DIR, "vectdb") 20 | WF_UPLOADS_DIR = os.path.join(WF_DATA_DIR, "uploads") 21 | WF_DOWNLOADS_DIR = os.path.join(WF_DATA_DIR, "downloads") 22 | WF_IMAGE_DIR = os.path.join(WF_DATA_DIR, "img_store") 23 | WF_WEBDATA_DIR = os.path.join(WF_DATA_DIR, "webdata") 24 | -------------------------------------------------------------------------------- /python/graphy/config/workflow_navigator.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "test_paper_navigator", 3 | "graph": { 4 | "inspectors": [ 5 | { 6 | "name": "PaperInspector", 7 | "graph": { 8 | "nodes": [ 9 | { 10 | "name": "Paper" 11 | } 12 | ], 13 | "edges": [] 14 | } 15 | } 16 | ], 17 | "navigators": [ 18 | { 19 | "name": "Reference", 20 | "source": "PaperInspector", 21 | "target": "PaperInspector", 22 | "method": "arxiv", 23 | "args": { 24 | "max_thread_num": 12, 25 | "ref_mode": "skip" 26 | } 27 | } 28 | ] 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /python/graphy/db/__init__.py: -------------------------------------------------------------------------------- 1 | """ 2 | __init__.py for db package 3 | """ 4 | 5 | from .base_store import PersistentStore, JsonFileStore 6 | 7 | __all__ = ["PersistentStore", "JsonFileStore"] 8 | -------------------------------------------------------------------------------- /python/graphy/extractor/__init__.py: -------------------------------------------------------------------------------- 1 | """ 2 | __init__.py for the extractor package 3 | """ 4 | 5 | from .pdf_extractor import PDFExtractor 6 | from .paper_extractor import PaperExtractor 7 | from .resume_extractor import ResumeExtractor 8 | from .pdf_content_index import RectangleInfo, PDFRectangle, PDFContentIndex 9 | 10 | 11 | __all__ = [ 12 | "PDFExtractor", 13 | "PaperExtractor", 14 | "ResumeExtractor", 15 | "RectangleInfo", 16 | "PDFRectangle", 17 | "PDFContentIndex", 18 | ] 19 | -------------------------------------------------------------------------------- /python/graphy/graph/__init__.py: -------------------------------------------------------------------------------- 1 | """ 2 | __init__.py for the graph package 3 | """ 4 | 5 | from .base_graph import BaseGraph 6 | 7 | __all__ = ["BaseGraph"] 8 | -------------------------------------------------------------------------------- /python/graphy/graph/edges/__init__.py: -------------------------------------------------------------------------------- 1 | """ 2 | __init__.py for the graph package 3 | """ 4 | 5 | from .base_edge import AbstractEdge, BaseEdge, EdgeType 6 | 7 | __all__ = ["AbstractEdge", "BaseEdge", "EdgeType"] 8 | -------------------------------------------------------------------------------- /python/graphy/graph/nodes/__init__.py: -------------------------------------------------------------------------------- 1 | """ 2 | __init__.py for the graph package 3 | """ 4 | 5 | from .base_node import ( 6 | BaseNode, 7 | ExpansionNode, 8 | NodeType, 9 | NodeCache, 10 | ) 11 | from .chain_node import BaseChainNode, MemoryChainNode 12 | from .pdf_extract_node import PDFExtractNode 13 | 14 | 15 | __all__ = [ 16 | "BaseNode", 17 | "ExpansionNode", 18 | "BaseChainNode", 19 | "MemoryChainNode", 20 | "NodeType", 21 | "NodeCache", 22 | "PDFExtractNode", 23 | "PaperInspector", 24 | ] 25 | -------------------------------------------------------------------------------- /python/graphy/graph/types.py: -------------------------------------------------------------------------------- 1 | from typing import Dict, Any, TypeAlias, Generator 2 | 3 | DataType: TypeAlias = Dict[str, Any] 4 | DataGenerator: TypeAlias = Generator[DataType, None, None] 5 | -------------------------------------------------------------------------------- /python/graphy/prompts/__init__.py: -------------------------------------------------------------------------------- 1 | """ 2 | __init__.py for the prompts package 3 | """ 4 | 5 | from .paper_reading_prompts import TEMPLATE_ACADEMIC_RESPONSE 6 | 7 | __all__ = ["TEMPLATE_ACADEMIC_RESPONSE"] 8 | -------------------------------------------------------------------------------- /python/graphy/resource/_graph/Paper_Has_Background.csv: -------------------------------------------------------------------------------- 1 | source|target 2 | 2202.01511v3|dafaeaff-9ce6-59af-8ffb-b6136efaf754 3 | 2001.11785v2|50291aaa-dc80-53d3-b464-326584db4683 4 | 2407.00567v1|0934c7d4-1883-5643-879a-13c038d2fb9a 5 | -1452618514829550696|58e2889b-2ca3-591d-a644-d5a744517f6b 6 | neural2019durkan|046398ae-22b8-5e21-afb8-49d26efd2917 7 | 2006.04678v2|ca926ac4-81b7-553b-af26-f2bb495aec84 8 | 2305.00303v1|110bc106-52eb-5866-b254-1bae13bc575b 9 | 1703.04691v5|7fb8e8ef-73af-5aea-9eef-48b32409194f 10 | 1906.05274v3|2f3087be-5334-5674-b4df-55558f5223ff 11 | 2006.08545v1|6b534ab8-5163-5422-86fb-09d8d96bd800 12 | -199099092534379852|7f60bb00-8ae6-5ced-99e9-fe87475e454c 13 | -------------------------------------------------------------------------------- /python/graphy/resource/_graph/Reference.csv: -------------------------------------------------------------------------------- 1 | source|target 2 | 2305.00303v1|1605.08803v3 3 | 2305.00303v1|2202.01511v3 4 | 2407.00567v1|2001.11785v2 5 | 2305.00303v1|neural2019durkan 6 | 2305.00303v1|2006.04678v2 7 | -199099092534379852|1703.04691v5 8 | 2305.00303v1|1906.05274v3 9 | 2305.00303v1|2006.08545v1 10 | -------------------------------------------------------------------------------- /python/graphy/resource/figs/connect_graph_db.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraphScope/portal/1b4ac33114012315053bba8b3d96fe73fb7241d6/python/graphy/resource/figs/connect_graph_db.png -------------------------------------------------------------------------------- /python/graphy/resource/figs/create_graph.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraphScope/portal/1b4ac33114012315053bba8b3d96fe73fb7241d6/python/graphy/resource/figs/create_graph.png -------------------------------------------------------------------------------- /python/graphy/resource/figs/data_bind.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraphScope/portal/1b4ac33114012315053bba8b3d96fe73fb7241d6/python/graphy/resource/figs/data_bind.png -------------------------------------------------------------------------------- /python/graphy/resource/figs/data_import.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraphScope/portal/1b4ac33114012315053bba8b3d96fe73fb7241d6/python/graphy/resource/figs/data_import.png -------------------------------------------------------------------------------- /python/graphy/resource/figs/data_load.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraphScope/portal/1b4ac33114012315053bba8b3d96fe73fb7241d6/python/graphy/resource/figs/data_load.png -------------------------------------------------------------------------------- /python/graphy/resource/figs/data_load_check.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraphScope/portal/1b4ac33114012315053bba8b3d96fe73fb7241d6/python/graphy/resource/figs/data_load_check.png -------------------------------------------------------------------------------- /python/graphy/resource/figs/data_model_check.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraphScope/portal/1b4ac33114012315053bba8b3d96fe73fb7241d6/python/graphy/resource/figs/data_model_check.png -------------------------------------------------------------------------------- /python/graphy/resource/figs/enable_explore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraphScope/portal/1b4ac33114012315053bba8b3d96fe73fb7241d6/python/graphy/resource/figs/enable_explore.png -------------------------------------------------------------------------------- /python/graphy/resource/figs/generate_report.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraphScope/portal/1b4ac33114012315053bba8b3d96fe73fb7241d6/python/graphy/resource/figs/generate_report.png -------------------------------------------------------------------------------- /python/graphy/resource/figs/graphy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraphScope/portal/1b4ac33114012315053bba8b3d96fe73fb7241d6/python/graphy/resource/figs/graphy.png -------------------------------------------------------------------------------- /python/graphy/resource/figs/graphy_arch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraphScope/portal/1b4ac33114012315053bba8b3d96fe73fb7241d6/python/graphy/resource/figs/graphy_arch.png -------------------------------------------------------------------------------- /python/graphy/resource/figs/list_graphs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraphScope/portal/1b4ac33114012315053bba8b3d96fe73fb7241d6/python/graphy/resource/figs/list_graphs.png -------------------------------------------------------------------------------- /python/graphy/resource/figs/load_to_interactive.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraphScope/portal/1b4ac33114012315053bba8b3d96fe73fb7241d6/python/graphy/resource/figs/load_to_interactive.png -------------------------------------------------------------------------------- /python/graphy/resource/figs/load_to_wasm_db.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraphScope/portal/1b4ac33114012315053bba8b3d96fe73fb7241d6/python/graphy/resource/figs/load_to_wasm_db.png -------------------------------------------------------------------------------- /python/graphy/resource/figs/next_query.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraphScope/portal/1b4ac33114012315053bba8b3d96fe73fb7241d6/python/graphy/resource/figs/next_query.png -------------------------------------------------------------------------------- /python/graphy/resource/figs/scenario_explore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraphScope/portal/1b4ac33114012315053bba8b3d96fe73fb7241d6/python/graphy/resource/figs/scenario_explore.png -------------------------------------------------------------------------------- /python/graphy/resource/figs/scenario_report.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraphScope/portal/1b4ac33114012315053bba8b3d96fe73fb7241d6/python/graphy/resource/figs/scenario_report.png -------------------------------------------------------------------------------- /python/graphy/resource/figs/tutorials/1_upload_data.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraphScope/portal/1b4ac33114012315053bba8b3d96fe73fb7241d6/python/graphy/resource/figs/tutorials/1_upload_data.gif -------------------------------------------------------------------------------- /python/graphy/resource/figs/tutorials/2_paper_selector.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraphScope/portal/1b4ac33114012315053bba8b3d96fe73fb7241d6/python/graphy/resource/figs/tutorials/2_paper_selector.gif -------------------------------------------------------------------------------- /python/graphy/resource/figs/tutorials/3_report_prompt.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraphScope/portal/1b4ac33114012315053bba8b3d96fe73fb7241d6/python/graphy/resource/figs/tutorials/3_report_prompt.gif -------------------------------------------------------------------------------- /python/graphy/resource/figs/tutorials/4_generate_mindmap.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraphScope/portal/1b4ac33114012315053bba8b3d96fe73fb7241d6/python/graphy/resource/figs/tutorials/4_generate_mindmap.gif -------------------------------------------------------------------------------- /python/graphy/resource/figs/tutorials/5_generate_report.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraphScope/portal/1b4ac33114012315053bba8b3d96fe73fb7241d6/python/graphy/resource/figs/tutorials/5_generate_report.gif -------------------------------------------------------------------------------- /python/graphy/resource/figs/tutorials/6_download_report.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraphScope/portal/1b4ac33114012315053bba8b3d96fe73fb7241d6/python/graphy/resource/figs/tutorials/6_download_report.gif -------------------------------------------------------------------------------- /python/graphy/resource/figs/tutorials/arbitrary_match.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraphScope/portal/1b4ac33114012315053bba8b3d96fe73fb7241d6/python/graphy/resource/figs/tutorials/arbitrary_match.gif -------------------------------------------------------------------------------- /python/graphy/resource/figs/tutorials/next_select.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraphScope/portal/1b4ac33114012315053bba8b3d96fe73fb7241d6/python/graphy/resource/figs/tutorials/next_select.gif -------------------------------------------------------------------------------- /python/graphy/resource/figs/tutorials/select_histogram.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraphScope/portal/1b4ac33114012315053bba8b3d96fe73fb7241d6/python/graphy/resource/figs/tutorials/select_histogram.gif -------------------------------------------------------------------------------- /python/graphy/resource/figs/tutorials/show_attr_histogram.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraphScope/portal/1b4ac33114012315053bba8b3d96fe73fb7241d6/python/graphy/resource/figs/tutorials/show_attr_histogram.gif -------------------------------------------------------------------------------- /python/graphy/resource/figs/workflow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraphScope/portal/1b4ac33114012315053bba8b3d96fe73fb7241d6/python/graphy/resource/figs/workflow.png -------------------------------------------------------------------------------- /python/graphy/resource/graphy_raw_data/a_context-integrated_transformer-based_neural_network_forauctio/_DONE.json: -------------------------------------------------------------------------------- 1 | { 2 | "done": true 3 | } -------------------------------------------------------------------------------- /python/graphy/resource/graphy_raw_data/a_contextual_combinatorial_bandit_approach_to_negotiation/_DONE.json: -------------------------------------------------------------------------------- 1 | { 2 | "done": true 3 | } -------------------------------------------------------------------------------- /python/graphy/resource/graphy_raw_data/a_coupled_flow_approach_to_imitation_learning/_DONE.json: -------------------------------------------------------------------------------- 1 | { 2 | "done": true 3 | } -------------------------------------------------------------------------------- /python/graphy/resource/graphy_raw_data/a_decoder-only_foundation_model_for_time-seriesforecasting/_DONE.json: -------------------------------------------------------------------------------- 1 | { 2 | "done": true 3 | } -------------------------------------------------------------------------------- /python/graphy/resource/graphy_raw_data/a_deep_reinforcement_learning_approach_to_concurrent_bilateral/_DONE.json: -------------------------------------------------------------------------------- 1 | { 2 | "done": true 3 | } -------------------------------------------------------------------------------- /python/graphy/resource/graphy_raw_data/a_deep_reinforcement_learning_approach_to_concurrent_bilateral/_Edges.json: -------------------------------------------------------------------------------- 1 | { 2 | "Reference": [ 3 | "2407.00567v1|2001.11785v2" 4 | ] 5 | } -------------------------------------------------------------------------------- /python/graphy/resource/graphy_raw_data/challenging_common_assumptions_in_convexreinforcement_learning/_DONE.json: -------------------------------------------------------------------------------- 1 | { 2 | "done": true 3 | } -------------------------------------------------------------------------------- /python/graphy/resource/graphy_raw_data/challenging_common_assumptions_in_convexreinforcement_learning/_Edges.json: -------------------------------------------------------------------------------- 1 | { 2 | "Reference": [ 3 | "2305.00303v1|2202.01511v3" 4 | ] 5 | } -------------------------------------------------------------------------------- /python/graphy/resource/graphy_raw_data/conditional_time_series_forecasting_with_convolutional_neural/_DONE.json: -------------------------------------------------------------------------------- 1 | { 2 | "done": true 3 | } -------------------------------------------------------------------------------- /python/graphy/resource/graphy_raw_data/conditional_time_series_forecasting_with_convolutional_neural/_Edges.json: -------------------------------------------------------------------------------- 1 | { 2 | "Reference": [ 3 | "-199099092534379852|1703.04691v5" 4 | ] 5 | } -------------------------------------------------------------------------------- /python/graphy/resource/graphy_raw_data/density_estimation_using_real_nvp/_DONE.json: -------------------------------------------------------------------------------- 1 | { 2 | "done": true 3 | } -------------------------------------------------------------------------------- /python/graphy/resource/graphy_raw_data/density_estimation_using_real_nvp/_Edges.json: -------------------------------------------------------------------------------- 1 | { 2 | "Reference": [ 3 | "2305.00303v1|1605.08803v3" 4 | ] 5 | } -------------------------------------------------------------------------------- /python/graphy/resource/graphy_raw_data/ef_cient_exploration_via_state_marginal_matching/_DONE.json: -------------------------------------------------------------------------------- 1 | { 2 | "done": true 3 | } -------------------------------------------------------------------------------- /python/graphy/resource/graphy_raw_data/ef_cient_exploration_via_state_marginal_matching/_Edges.json: -------------------------------------------------------------------------------- 1 | { 2 | "Reference": [ 3 | "2305.00303v1|1906.05274v3" 4 | ] 5 | } -------------------------------------------------------------------------------- /python/graphy/resource/graphy_raw_data/neural_spline_flows/_DONE.json: -------------------------------------------------------------------------------- 1 | { 2 | "done": true 3 | } -------------------------------------------------------------------------------- /python/graphy/resource/graphy_raw_data/neural_spline_flows/_Edges.json: -------------------------------------------------------------------------------- 1 | { 2 | "Reference": [ 3 | "2305.00303v1|neural2019durkan" 4 | ] 5 | } -------------------------------------------------------------------------------- /python/graphy/resource/graphy_raw_data/primal_wasserstein_imitation_learning/_DONE.json: -------------------------------------------------------------------------------- 1 | { 2 | "done": true 3 | } -------------------------------------------------------------------------------- /python/graphy/resource/graphy_raw_data/primal_wasserstein_imitation_learning/_Edges.json: -------------------------------------------------------------------------------- 1 | { 2 | "Reference": [ 3 | "2305.00303v1|2006.04678v2" 4 | ] 5 | } -------------------------------------------------------------------------------- /python/graphy/resource/graphy_raw_data/why_normalizing_flows_fail_to_detectout-of-distribution_data/_DONE.json: -------------------------------------------------------------------------------- 1 | { 2 | "done": true 3 | } -------------------------------------------------------------------------------- /python/graphy/resource/graphy_raw_data/why_normalizing_flows_fail_to_detectout-of-distribution_data/_Edges.json: -------------------------------------------------------------------------------- 1 | { 2 | "Reference": [ 3 | "2305.00303v1|2006.08545v1" 4 | ] 5 | } -------------------------------------------------------------------------------- /python/graphy/resource/gt_files/educational_background.txt: -------------------------------------------------------------------------------- 1 | EMBA 2 | MBA 3 | MPA 4 | 专升本 5 | 专科 6 | 中专 7 | 中技 8 | 初中 9 | 博士 10 | 博士后 11 | 本科 12 | 硕士 13 | 职高 14 | 高中 -------------------------------------------------------------------------------- /python/graphy/resource/gt_files/section_title_gt.txt: -------------------------------------------------------------------------------- 1 | introduction 2 | conclusion 3 | conclusions -------------------------------------------------------------------------------- /python/graphy/resource/samples/case.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraphScope/portal/1b4ac33114012315053bba8b3d96fe73fb7241d6/python/graphy/resource/samples/case.pdf -------------------------------------------------------------------------------- /python/graphy/resource/samples/graphrag.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraphScope/portal/1b4ac33114012315053bba8b3d96fe73fb7241d6/python/graphy/resource/samples/graphrag.pdf -------------------------------------------------------------------------------- /python/graphy/resource/samples/graphrag.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraphScope/portal/1b4ac33114012315053bba8b3d96fe73fb7241d6/python/graphy/resource/samples/graphrag.zip -------------------------------------------------------------------------------- /python/graphy/resource/samples/huge-sigmod21.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraphScope/portal/1b4ac33114012315053bba8b3d96fe73fb7241d6/python/graphy/resource/samples/huge-sigmod21.pdf -------------------------------------------------------------------------------- /python/graphy/resource/samples/relgo-sigmod25.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraphScope/portal/1b4ac33114012315053bba8b3d96fe73fb7241d6/python/graphy/resource/samples/relgo-sigmod25.pdf -------------------------------------------------------------------------------- /python/graphy/resource/samples/relgo_graph.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraphScope/portal/1b4ac33114012315053bba8b3d96fe73fb7241d6/python/graphy/resource/samples/relgo_graph.zip -------------------------------------------------------------------------------- /python/graphy/resource/samples/relgo_related_work.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraphScope/portal/1b4ac33114012315053bba8b3d96fe73fb7241d6/python/graphy/resource/samples/relgo_related_work.zip -------------------------------------------------------------------------------- /python/graphy/workflow/__init__.py: -------------------------------------------------------------------------------- 1 | """ 2 | __init__.py for the workflow package 3 | """ 4 | 5 | from .base_workflow import BaseWorkflow 6 | from .executor import ThreadPoolWorkflowExecutor 7 | 8 | __all__ = [ 9 | "BaseWorkflow", 10 | "SurveyPaperReading", 11 | "ThreadPoolWorkflowExecutor", 12 | ] 13 | -------------------------------------------------------------------------------- /python/gs-visual-tool/.gitignore: -------------------------------------------------------------------------------- 1 | .venv 2 | 3 | # Ignore Python cache directories 4 | __pycache__/ 5 | .ipynb_checkpoints/ 6 | poetry.lock 7 | *.egg-info -------------------------------------------------------------------------------- /python/gs-visual-tool/README.md: -------------------------------------------------------------------------------- 1 | ## Introduction 2 | 3 | `gs-visua-tool` is a Python tool based on the GraphScope portal. You can specify the query endpoint to perform interactive queries and display graph visualizations. 4 | 5 | ![home](./docs/home.png) 6 | 7 | ## Quick Start 8 | 9 | - install 10 | 11 | ```bash 12 | pip install gs-visual-tool 13 | ``` 14 | 15 | - `python index.py` 16 | 17 | ```python 18 | # index.py 19 | import gs_visual_tool 20 | gs_visual_tool.querying() 21 | ``` 22 | 23 | - visit: http://127.0.0.1:9999 24 | 25 | ## Development 26 | 27 | - install deps 28 | 29 | ```bash 30 | python -m venv .venv 31 | source .venv/bin/activate 32 | pip install -e . 33 | ``` 34 | 35 | - run demo 36 | 37 | ```bash 38 | python demo/app.py 39 | ``` 40 | 41 | ## Deployment 42 | 43 | ```bash 44 | pip install build 45 | python -m build 46 | twine upload dist/* 47 | ``` 48 | -------------------------------------------------------------------------------- /python/gs-visual-tool/demo/gradio_demo.py: -------------------------------------------------------------------------------- 1 | import gradio as gr 2 | import gs_visual_tool 3 | 4 | with gr.Blocks() as demo: 5 | modeling_html = gs_visual_tool.get_html("querying") 6 | gr.HTML(modeling_html) 7 | 8 | app = demo.launch() 9 | -------------------------------------------------------------------------------- /python/gs-visual-tool/demo/web_demo.py: -------------------------------------------------------------------------------- 1 | import gs_visual_tool 2 | 3 | gs_visual_tool.querying() -------------------------------------------------------------------------------- /python/gs-visual-tool/docs/home.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GraphScope/portal/1b4ac33114012315053bba8b3d96fe73fb7241d6/python/gs-visual-tool/docs/home.png -------------------------------------------------------------------------------- /python/gs-visual-tool/gs_visual_tool/__init__.py: -------------------------------------------------------------------------------- 1 | __version__ = "0.1.0" 2 | 3 | from .environment_detection import detect_environment 4 | from .run import modeling, querying 5 | from .render import get_html 6 | 7 | __all__ = ["__version__", detect_environment, run, get_html, querying, modeling] 8 | -------------------------------------------------------------------------------- /python/gs-visual-tool/gs_visual_tool/run.py: -------------------------------------------------------------------------------- 1 | import os 2 | from .render import render, get_html 3 | 4 | 5 | def modeling(): 6 | template_content = get_html("modeling") 7 | render(template_content) 8 | 9 | 10 | def querying(): 11 | template_content = get_html("querying") 12 | render(template_content) 13 | -------------------------------------------------------------------------------- /python/gs-visual-tool/gs_visual_tool/server.py: -------------------------------------------------------------------------------- 1 | import os 2 | from flask import Flask, Response 3 | 4 | 5 | def serve(html_content): 6 | app = Flask(__name__) 7 | 8 | @app.route("/") 9 | def home(): 10 | return Response(html_content, mimetype="text/html") 11 | 12 | app.run(debug=True, port=9999) 13 | -------------------------------------------------------------------------------- /python/gs-visual-tool/gs_visual_tool/template/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Document 7 | 8 | 9 | 10 |
11 |

modeling

12 | 13 | 14 | -------------------------------------------------------------------------------- /python/gs-visual-tool/pyproject.toml: -------------------------------------------------------------------------------- 1 | 2 | [build-system] 3 | requires = ["setuptools", "wheel"] 4 | build-backend = "setuptools.build_meta" 5 | 6 | [project] 7 | name = "gs-visual-tool" # 包的名称,可以包含连字符 8 | version = "0.1.1" 9 | description = "A tool for visualizing data with GraphScope Engine" 10 | authors = [ 11 | { name="pomelo-nwu", email="czynwu@outlook.com" } 12 | ] 13 | readme = "README.md" 14 | license = { file = "LICENSE" } 15 | 16 | classifiers = [ 17 | "Programming Language :: Python :: 3", 18 | "License :: OSI Approved :: MIT License", 19 | ] 20 | dependencies = [ 21 | "ipython>=8.27.0", 22 | "flask>=3.0.3" 23 | ] 24 | 25 | [tool.setuptools] 26 | packages = ["gs_visual_tool"] # 指定包目录,使用下划线 27 | include-package-data = true 28 | 29 | [tool.setuptools.package-data] 30 | gs_visual_tool = ["template/*.html"] 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /turbo.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://turbo.build/schema.json", 3 | "pipeline": { 4 | "build": { 5 | "dependsOn": ["^build"], 6 | "outputs": ["es/**", "lib/**"] 7 | }, 8 | "start": { 9 | "dependsOn": ["^start"], 10 | "outputs": ["es/**", "lib/**"] 11 | }, 12 | "sync": { 13 | "dependsOn": ["^sync"] 14 | } 15 | }, 16 | "globalDependencies": [".prettierrc.js"] 17 | } 18 | -------------------------------------------------------------------------------- /vercel.json: -------------------------------------------------------------------------------- 1 | { 2 | "buildCommand": "npm run build:portal", 3 | "framework": null, 4 | "headers": [ 5 | { 6 | "source": "/(.*)", 7 | "headers": [ 8 | { "key": "Cross-Origin-Opener-Policy", "value": "same-origin" }, 9 | { "key": "Cross-Origin-Embedder-Policy", "value": "require-corp" } 10 | ] 11 | } 12 | ], 13 | "rewrites": [{ "source": "/(.*)", "destination": "/index.html" }] 14 | } 15 | --------------------------------------------------------------------------------