@arcgis/portal-components 5.2.0-next.6 → 5.2.0-next.60
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/cdn/23EOLRF6.js +2 -0
- package/dist/cdn/25BWGJFT.js +2 -0
- package/dist/cdn/2GBRZSEC.js +2 -0
- package/dist/cdn/2YEGKG66.js +2 -0
- package/dist/cdn/3527GI5O.js +2 -0
- package/dist/cdn/3LBJM7GA.js +2 -0
- package/dist/cdn/{GQFWFZXP.js → 3OBIA66A.js} +1 -1
- package/dist/cdn/3Y33UPZ6.js +2 -0
- package/dist/cdn/44XITKIX.js +2 -0
- package/dist/cdn/456GBBRQ.js +2 -0
- package/dist/cdn/4QA4AYHJ.js +3 -0
- package/dist/cdn/{QNUYUNEY.js → 52B4FWCM.js} +1 -1
- package/dist/cdn/55FL7WQV.js +2 -0
- package/dist/cdn/5DE3XVTY.js +2 -0
- package/dist/cdn/5KDFY5KE.js +2 -0
- package/dist/cdn/5VMPZXL3.js +2 -0
- package/dist/cdn/{7WZHZP6U.js → 63THOLAY.js} +9 -3
- package/dist/cdn/6LMJGR6F.js +2 -0
- package/dist/cdn/744FUP4K.js +2 -0
- package/dist/cdn/7NVVHX75.js +2 -0
- package/dist/cdn/{LQ3DMZ3K.js → 7ZXEX3LI.js} +1 -1
- package/dist/cdn/AEZFDUSX.js +2 -0
- package/dist/cdn/AT2DLVEF.js +2 -0
- package/dist/cdn/{DKBTJJMW.js → C7ZFXRPS.js} +1 -1
- package/dist/cdn/CFBSBZSS.js +2 -0
- package/dist/cdn/CG6FLLXZ.js +2 -0
- package/dist/cdn/DALGPO36.js +2 -0
- package/dist/cdn/DUKSWZKG.js +2 -0
- package/dist/cdn/E6MGDW3D.js +2 -0
- package/dist/cdn/EB4XGKGD.js +2 -0
- package/dist/cdn/EE7XFMJG.js +2 -0
- package/dist/cdn/F3PB42AG.js +2 -0
- package/dist/cdn/FF24VDOG.js +65 -0
- package/dist/cdn/FGJNEKPQ.js +2 -0
- package/dist/cdn/G2NXASJO.js +2 -0
- package/dist/cdn/GBW3NV7Y.js +2 -0
- package/dist/cdn/HEA66RTI.js +2 -0
- package/dist/cdn/IJ3CLFAU.js +22 -0
- package/dist/cdn/IQFYKVRG.js +2 -0
- package/dist/cdn/IXATTQKO.js +2 -0
- package/dist/cdn/IZOGASBD.js +451 -0
- package/dist/cdn/JPHGWARN.js +2 -0
- package/dist/cdn/JUNNQTQU.js +2 -0
- package/dist/cdn/{3PAHY5KA.js → KNRJ3WXR.js} +1 -1
- package/dist/cdn/KTTTBLZ6.js +2 -0
- package/dist/cdn/{F6V7MLPY.js → L6KBBJEC.js} +1 -1
- package/dist/cdn/M7T6DKL2.js +2 -0
- package/dist/cdn/MNU537SB.js +2 -0
- package/dist/cdn/NITKS6KJ.js +2 -0
- package/dist/cdn/NMAP3FYP.js +2 -0
- package/dist/cdn/NYFFDBSL.js +2 -0
- package/dist/cdn/OBBYT2AV.js +2 -0
- package/dist/cdn/{WOZDQW3S.js → OECTWB22.js} +1 -1
- package/dist/cdn/{53MSUMA3.js → OT4PZJNB.js} +17 -1
- package/dist/cdn/PMCTFA5D.js +2 -0
- package/dist/cdn/PP7GTURX.js +2 -0
- package/dist/cdn/Q7SDLUZ6.js +2 -0
- package/dist/cdn/QE4CNVDQ.js +34 -0
- package/dist/cdn/{AQWTJKUH.js → QKCV7CY2.js} +10 -8
- package/dist/cdn/QQ432AB6.js +2 -0
- package/dist/cdn/QS3GXAIH.js +2 -0
- package/dist/cdn/R2CAXYXG.js +619 -0
- package/dist/cdn/SKUPHVNO.js +2 -0
- package/dist/cdn/SLTFLCVR.js +99 -0
- package/dist/cdn/{ZTHTFEYA.js → SVRIKNKJ.js} +1 -1
- package/dist/cdn/{LAFNDBTQ.js → SWAVECPM.js} +1 -1
- package/dist/cdn/TAB5C3RK.js +2 -0
- package/dist/cdn/THRK2DGY.js +2 -0
- package/dist/cdn/{DXCPWJU4.js → TKCE4WYE.js} +1 -1
- package/dist/cdn/TNLGQ7HL.js +2 -0
- package/dist/cdn/{DHHSKOUY.js → TSTTPCWU.js} +1 -1
- package/dist/cdn/U5B2LAPJ.js +2 -0
- package/dist/cdn/UDTQ7U6L.js +2 -0
- package/dist/cdn/UL2NWFFH.js +2 -0
- package/dist/cdn/UZCHLKLO.js +2 -0
- package/dist/cdn/UZLQALHY.js +2 -0
- package/dist/cdn/{RR4BIAPA.js → V4EYW3O6.js} +1 -1
- package/dist/cdn/V4IAC7WR.js +2 -0
- package/dist/cdn/VD6VGWCQ.js +2 -0
- package/dist/cdn/VLHHC25R.js +2 -0
- package/dist/cdn/VMQIDO4Z.js +2 -0
- package/dist/cdn/VRCB4BN4.js +2 -0
- package/dist/cdn/{74XFARCV.js → VW7DSKPH.js} +1 -1
- package/dist/cdn/W2SYL7IJ.js +71 -0
- package/dist/cdn/{W6PSG4GX.js → W4FGRGLV.js} +10 -5
- package/dist/cdn/{SYJSVUUR.js → W4SAWMXS.js} +1 -1
- package/dist/cdn/WBZLQZYR.js +134 -0
- package/dist/cdn/WWMB4NWC.js +2 -0
- package/dist/cdn/XCJPHHX2.js +2 -0
- package/dist/cdn/XEK22IDA.js +2 -0
- package/dist/cdn/XHFAXT2P.js +2 -0
- package/dist/cdn/XMUR4HRH.js +2 -0
- package/dist/cdn/XX4U6IRN.js +2 -0
- package/dist/cdn/Y3RUZTB3.js +2 -0
- package/dist/cdn/Y7FCEDRU.js +2 -0
- package/dist/cdn/YIU7GBUN.js +2 -0
- package/dist/cdn/YVKSTDL6.js +2 -0
- package/dist/cdn/ZOEF7HBV.js +2 -0
- package/dist/cdn/{GT26WGJS.js → ZV4GLQQG.js} +1 -1
- package/dist/cdn/assets/portal-account-switcher/t9n/messages.en.json +1 -0
- package/dist/cdn/assets/portal-ai-assistant/t9n/messages.en.json +1 -1
- package/dist/cdn/assets/portal-browser/t9n/messages.en.json +1 -0
- package/dist/cdn/assets/portal-group-badges/t9n/messages.en.json +1 -0
- package/dist/cdn/assets/portal-group-browser/t9n/messages.en.json +1 -0
- package/dist/cdn/assets/portal-group-card/t9n/messages.en.json +1 -0
- package/dist/cdn/assets/portal-item-type/icons/parquetfeaturelayer16.svg +1 -0
- package/dist/cdn/assets/portal-item-type/icons/parquetfeaturelayer32.svg +1 -0
- package/dist/cdn/assets/portal-item-type/icons/storymapframe16.svg +1 -0
- package/dist/cdn/assets/portal-item-type/icons/storymapframe32.svg +1 -0
- package/dist/cdn/assets/portal-item-type/t9n/messages.en.json +1 -1
- package/dist/cdn/assets/portal-navigation/apps/api-for-python.avif +0 -0
- package/dist/cdn/assets/portal-navigation/apps/appstudio.avif +0 -0
- package/dist/cdn/assets/portal-navigation/apps/arcade.avif +0 -0
- package/dist/cdn/assets/portal-navigation/apps/arcgis-360-vr.avif +0 -0
- package/dist/cdn/assets/portal-navigation/apps/arcgis-earth.avif +0 -0
- package/dist/cdn/assets/portal-navigation/apps/arcgis-enterprise.avif +0 -0
- package/dist/cdn/assets/portal-navigation/apps/arcgis-experience-builder.avif +0 -0
- package/dist/cdn/assets/portal-navigation/apps/arcgis-geoanalytics.avif +0 -0
- package/dist/cdn/assets/portal-navigation/apps/arcgis-hub.avif +0 -0
- package/dist/cdn/assets/portal-navigation/apps/arcgis-online.avif +0 -0
- package/dist/cdn/assets/portal-navigation/apps/arcgis-pro.avif +0 -0
- package/dist/cdn/assets/portal-navigation/apps/arcgis-reality-studio.avif +0 -0
- package/dist/cdn/assets/portal-navigation/apps/arcgis-urban.avif +0 -0
- package/dist/cdn/assets/portal-navigation/apps/blank.avif +0 -0
- package/dist/cdn/assets/portal-navigation/apps/business-analyst.avif +0 -0
- package/dist/cdn/assets/portal-navigation/apps/city-engine.avif +0 -0
- package/dist/cdn/assets/portal-navigation/apps/collector.avif +0 -0
- package/dist/cdn/assets/portal-navigation/apps/community-analyst.avif +0 -0
- package/dist/cdn/assets/portal-navigation/apps/configurable-apps.avif +0 -0
- package/dist/cdn/assets/portal-navigation/apps/dashboards-beta.avif +0 -0
- package/dist/cdn/assets/portal-navigation/apps/dashboards-classic.avif +0 -0
- package/dist/cdn/assets/portal-navigation/apps/data-pipelines.avif +0 -0
- package/dist/cdn/assets/portal-navigation/apps/deeplearningstudio.avif +0 -0
- package/dist/cdn/assets/portal-navigation/apps/demographics.avif +0 -0
- package/dist/cdn/assets/portal-navigation/apps/drone2map.avif +0 -0
- package/dist/cdn/assets/portal-navigation/apps/esri-events.avif +0 -0
- package/dist/cdn/assets/portal-navigation/apps/essential-apps.avif +0 -0
- package/dist/cdn/assets/portal-navigation/apps/excalibur.avif +0 -0
- package/dist/cdn/assets/portal-navigation/apps/explorer.avif +0 -0
- package/dist/cdn/assets/portal-navigation/apps/field-apps.avif +0 -0
- package/dist/cdn/assets/portal-navigation/apps/fieldmaps-beta.avif +0 -0
- package/dist/cdn/assets/portal-navigation/apps/fieldmaps-ea.avif +0 -0
- package/dist/cdn/assets/portal-navigation/apps/fieldmaps.avif +0 -0
- package/dist/cdn/assets/portal-navigation/apps/generic-app.avif +0 -0
- package/dist/cdn/assets/portal-navigation/apps/geobim.avif +0 -0
- package/dist/cdn/assets/portal-navigation/apps/geoplanner.avif +0 -0
- package/dist/cdn/assets/portal-navigation/apps/grid-view-9.avif +0 -0
- package/dist/cdn/assets/portal-navigation/apps/indoor.avif +0 -0
- package/dist/cdn/assets/portal-navigation/apps/indoors.avif +0 -0
- package/dist/cdn/assets/portal-navigation/apps/insights.avif +0 -0
- package/dist/cdn/assets/portal-navigation/apps/instant-apps.avif +0 -0
- package/dist/cdn/assets/portal-navigation/apps/ips.avif +0 -0
- package/dist/cdn/assets/portal-navigation/apps/knowledge-studio.avif +0 -0
- package/dist/cdn/assets/portal-navigation/apps/living-atlas.avif +0 -0
- package/dist/cdn/assets/portal-navigation/apps/location-platform.avif +0 -0
- package/dist/cdn/assets/portal-navigation/apps/map-maker.avif +0 -0
- package/dist/cdn/assets/portal-navigation/apps/map-viewer-beta.avif +0 -0
- package/dist/cdn/assets/portal-navigation/apps/map-viewer-classic.avif +0 -0
- package/dist/cdn/assets/portal-navigation/apps/map-viewer.avif +0 -0
- package/dist/cdn/assets/portal-navigation/apps/maps-adobe-cloud.avif +0 -0
- package/dist/cdn/assets/portal-navigation/apps/maps-for-office.avif +0 -0
- package/dist/cdn/assets/portal-navigation/apps/maps-for-power-bi.avif +0 -0
- package/dist/cdn/assets/portal-navigation/apps/maps-for-sharepoint.avif +0 -0
- package/dist/cdn/assets/portal-navigation/apps/marketplace.avif +0 -0
- package/dist/cdn/assets/portal-navigation/apps/mission.avif +0 -0
- package/dist/cdn/assets/portal-navigation/apps/monitor.avif +0 -0
- package/dist/cdn/assets/portal-navigation/apps/navigator.avif +0 -0
- package/dist/cdn/assets/portal-navigation/apps/notebook.avif +0 -0
- package/dist/cdn/assets/portal-navigation/apps/office-apps.avif +0 -0
- package/dist/cdn/assets/portal-navigation/apps/open-data.avif +0 -0
- package/dist/cdn/assets/portal-navigation/apps/operations-dashboard.avif +0 -0
- package/dist/cdn/assets/portal-navigation/apps/ortho-maker.avif +0 -0
- package/dist/cdn/assets/portal-navigation/apps/pro-extension.avif +0 -0
- package/dist/cdn/assets/portal-navigation/apps/quick-capture.avif +0 -0
- package/dist/cdn/assets/portal-navigation/apps/redistricting.avif +0 -0
- package/dist/cdn/assets/portal-navigation/apps/runtime.avif +0 -0
- package/dist/cdn/assets/portal-navigation/apps/scene-viewer.avif +0 -0
- package/dist/cdn/assets/portal-navigation/apps/sites.avif +0 -0
- package/dist/cdn/assets/portal-navigation/apps/solutions.avif +0 -0
- package/dist/cdn/assets/portal-navigation/apps/story-maps.avif +0 -0
- package/dist/cdn/assets/portal-navigation/apps/streetmap-premium.avif +0 -0
- package/dist/cdn/assets/portal-navigation/apps/survey123.avif +0 -0
- package/dist/cdn/assets/portal-navigation/apps/svg-app-circle.svg +1 -0
- package/dist/cdn/assets/portal-navigation/apps/svg-app-icon.svg +1 -0
- package/dist/cdn/assets/portal-navigation/apps/track-viewer.avif +0 -0
- package/dist/cdn/assets/portal-navigation/apps/user-type-extension-online.avif +0 -0
- package/dist/cdn/assets/portal-navigation/apps/user-type-extension.avif +0 -0
- package/dist/cdn/assets/portal-navigation/apps/vector-tile-style-editor.avif +0 -0
- package/dist/cdn/assets/portal-navigation/apps/velocity.avif +0 -0
- package/dist/cdn/assets/portal-navigation/apps/web-app-builder.avif +0 -0
- package/dist/cdn/assets/portal-navigation/apps/web-editor.avif +0 -0
- package/dist/cdn/assets/portal-navigation/apps/web-mapping.avif +0 -0
- package/dist/cdn/assets/portal-navigation/apps/workflow-manager-beta.avif +0 -0
- package/dist/cdn/assets/portal-navigation/apps/workflow-manager.avif +0 -0
- package/dist/cdn/assets/portal-navigation/apps/workforce.avif +0 -0
- package/dist/cdn/assets/portal-navigation/product-logos/advanced-editing-user-type-extension-glyph-32.svg +1 -0
- package/dist/cdn/assets/portal-navigation/product-logos/arc-hydro-glyph-32.svg +1 -0
- package/dist/cdn/assets/portal-navigation/product-logos/arcgis-360-vr-glyph-32.svg +1 -0
- package/dist/cdn/assets/portal-navigation/product-logos/arcgis-api-for-python-glyph-32.svg +1 -0
- package/dist/cdn/assets/portal-navigation/product-logos/arcgis-appstudio-glyph-32.svg +1 -0
- package/dist/cdn/assets/portal-navigation/product-logos/arcgis-arcade-expression-language-glyph-32.svg +1 -0
- package/dist/cdn/assets/portal-navigation/product-logos/arcgis-business-analyst-glyph-32.svg +1 -0
- package/dist/cdn/assets/portal-navigation/product-logos/arcgis-cityengine-glyph-32.svg +1 -0
- package/dist/cdn/assets/portal-navigation/product-logos/arcgis-collector-glyph-32.svg +1 -0
- package/dist/cdn/assets/portal-navigation/product-logos/arcgis-community-analyst-glyph-32.svg +1 -0
- package/dist/cdn/assets/portal-navigation/product-logos/arcgis-connectors-for-power-automate-glyph-32.svg +1 -0
- package/dist/cdn/assets/portal-navigation/product-logos/arcgis-dashboards-glyph-32.svg +1 -0
- package/dist/cdn/assets/portal-navigation/product-logos/arcgis-data-interoperability-glyph-32.svg +1 -0
- package/dist/cdn/assets/portal-navigation/product-logos/arcgis-data-pipelines-glyph-32.svg +1 -0
- package/dist/cdn/assets/portal-navigation/product-logos/arcgis-data-reviewer-glyph-32.svg +1 -0
- package/dist/cdn/assets/portal-navigation/product-logos/arcgis-deep-learning-studio-glyph-32.svg +1 -0
- package/dist/cdn/assets/portal-navigation/product-logos/arcgis-drone2map-glyph-32.svg +1 -0
- package/dist/cdn/assets/portal-navigation/product-logos/arcgis-earth-glyph-32.svg +1 -0
- package/dist/cdn/assets/portal-navigation/product-logos/arcgis-enterprise-glyph-32.svg +1 -0
- package/dist/cdn/assets/portal-navigation/product-logos/arcgis-excalibur-glyph-32.svg +1 -0
- package/dist/cdn/assets/portal-navigation/product-logos/arcgis-excalibur-gray-glyph-32.svg +1 -0
- package/dist/cdn/assets/portal-navigation/product-logos/arcgis-experience-builder-glyph-32.svg +1 -0
- package/dist/cdn/assets/portal-navigation/product-logos/arcgis-explorer-glyph-32.svg +1 -0
- package/dist/cdn/assets/portal-navigation/product-logos/arcgis-field-maps-designer-ea-glyph-32.svg +1 -0
- package/dist/cdn/assets/portal-navigation/product-logos/arcgis-field-maps-glyph-32.svg +1 -0
- package/dist/cdn/assets/portal-navigation/product-logos/arcgis-flight-glyph-32.svg +1 -0
- package/dist/cdn/assets/portal-navigation/product-logos/arcgis-for-autocad-glyph-32.svg +1 -0
- package/dist/cdn/assets/portal-navigation/product-logos/arcgis-for-autodesk-forma-glyph-32.svg +1 -0
- package/dist/cdn/assets/portal-navigation/product-logos/arcgis-for-developers-glyph-32.svg +1 -0
- package/dist/cdn/assets/portal-navigation/product-logos/arcgis-for-excel-glyph-32.svg +1 -0
- package/dist/cdn/assets/portal-navigation/product-logos/arcgis-for-microsoft-365-glyph-32.svg +1 -0
- package/dist/cdn/assets/portal-navigation/product-logos/arcgis-for-power-apps-glyph-32.svg +1 -0
- package/dist/cdn/assets/portal-navigation/product-logos/arcgis-for-teams-glyph-32.svg +1 -0
- package/dist/cdn/assets/portal-navigation/product-logos/arcgis-geoanalytics-engine-glyph-32.svg +1 -0
- package/dist/cdn/assets/portal-navigation/product-logos/arcgis-geobim-glyph-32.svg +1 -0
- package/dist/cdn/assets/portal-navigation/product-logos/arcgis-geoplanner-glyph-32.svg +1 -0
- package/dist/cdn/assets/portal-navigation/product-logos/arcgis-hub-glyph-32.svg +1 -0
- package/dist/cdn/assets/portal-navigation/product-logos/arcgis-image-glyph-32.svg +1 -0
- package/dist/cdn/assets/portal-navigation/product-logos/arcgis-indoors-glyph-32.svg +1 -0
- package/dist/cdn/assets/portal-navigation/product-logos/arcgis-insights-glyph-32.svg +1 -0
- package/dist/cdn/assets/portal-navigation/product-logos/arcgis-instant-apps-glyph-32.svg +1 -0
- package/dist/cdn/assets/portal-navigation/product-logos/arcgis-knowledge-glyph-32.svg +1 -0
- package/dist/cdn/assets/portal-navigation/product-logos/arcgis-living-atlas-of-the-world-glyph-32.svg +1 -0
- package/dist/cdn/assets/portal-navigation/product-logos/arcgis-location-platform-glyph-32.svg +1 -0
- package/dist/cdn/assets/portal-navigation/product-logos/arcgis-logo-glyph-32.svg +76 -0
- package/dist/cdn/assets/portal-navigation/product-logos/arcgis-maps-for-adobe-creative-cloud-glyph-32.svg +1 -0
- package/dist/cdn/assets/portal-navigation/product-logos/arcgis-maps-for-power-bi-glyph-32.svg +1 -0
- package/dist/cdn/assets/portal-navigation/product-logos/arcgis-maps-for-sharepoint-glyph-32.svg +1 -0
- package/dist/cdn/assets/portal-navigation/product-logos/arcgis-maps-sdk-for-javascript-glyph-32.svg +1 -0
- package/dist/cdn/assets/portal-navigation/product-logos/arcgis-maps-sdks-for-game-engines-glyph-32.svg +1 -0
- package/dist/cdn/assets/portal-navigation/product-logos/arcgis-maps-sdks-for-native-apps-glyph-32.svg +1 -0
- package/dist/cdn/assets/portal-navigation/product-logos/arcgis-maritime-glyph-32.svg +1 -0
- package/dist/cdn/assets/portal-navigation/product-logos/arcgis-marketplace-glyph-32.svg +1 -0
- package/dist/cdn/assets/portal-navigation/product-logos/arcgis-mission-glyph-32.svg +1 -0
- package/dist/cdn/assets/portal-navigation/product-logos/arcgis-monitor-glyph-32.svg +1 -0
- package/dist/cdn/assets/portal-navigation/product-logos/arcgis-monitor-white-glyph-32.svg +1 -0
- package/dist/cdn/assets/portal-navigation/product-logos/arcgis-navigator-glyph-32.svg +1 -0
- package/dist/cdn/assets/portal-navigation/product-logos/arcgis-notebooks-glyph-32.svg +1 -0
- package/dist/cdn/assets/portal-navigation/product-logos/arcgis-online-glyph-32.svg +1 -0
- package/dist/cdn/assets/portal-navigation/product-logos/arcgis-open-data-glyph-32.svg +1 -0
- package/dist/cdn/assets/portal-navigation/product-logos/arcgis-open-source-apps-glyph-32.svg +1 -0
- package/dist/cdn/assets/portal-navigation/product-logos/arcgis-ortho-maker-glyph-32.svg +1 -0
- package/dist/cdn/assets/portal-navigation/product-logos/arcgis-parcel-fabric-glyph-32.svg +1 -0
- package/dist/cdn/assets/portal-navigation/product-logos/arcgis-pipeline-referencing-glyph-32.svg +1 -0
- package/dist/cdn/assets/portal-navigation/product-logos/arcgis-pro-for-intelligence-glyph-32.svg +1 -0
- package/dist/cdn/assets/portal-navigation/product-logos/arcgis-pro-glyph-32.svg +1 -0
- package/dist/cdn/assets/portal-navigation/product-logos/arcgis-quickcapture-glyph-32.svg +1 -0
- package/dist/cdn/assets/portal-navigation/product-logos/arcgis-reality-studio-glyph-32.svg +1 -0
- package/dist/cdn/assets/portal-navigation/product-logos/arcgis-roads-and-highways-glyph-32.svg +1 -0
- package/dist/cdn/assets/portal-navigation/product-logos/arcgis-sites-glyph-32.svg +1 -0
- package/dist/cdn/assets/portal-navigation/product-logos/arcgis-solutions-glyph-32.svg +1 -0
- package/dist/cdn/assets/portal-navigation/product-logos/arcgis-storymaps-glyph-32.svg +1 -0
- package/dist/cdn/assets/portal-navigation/product-logos/arcgis-streetmap-premium-glyph-32.svg +1 -0
- package/dist/cdn/assets/portal-navigation/product-logos/arcgis-survey123-connect-glyph-32.svg +1 -0
- package/dist/cdn/assets/portal-navigation/product-logos/arcgis-survey123-glyph-32.svg +1 -0
- package/dist/cdn/assets/portal-navigation/product-logos/arcgis-tracker-glyph-32.svg +1 -0
- package/dist/cdn/assets/portal-navigation/product-logos/arcgis-urban-glyph-32.svg +1 -0
- package/dist/cdn/assets/portal-navigation/product-logos/arcgis-utility-network-management-glyph-32.svg +1 -0
- package/dist/cdn/assets/portal-navigation/product-logos/arcgis-velocity-glyph-32.svg +6 -0
- package/dist/cdn/assets/portal-navigation/product-logos/arcgis-web-appbuilder-glyph-32.svg +1 -0
- package/dist/cdn/assets/portal-navigation/product-logos/arcgis-web-editor-glyph-32.svg +1 -0
- package/dist/cdn/assets/portal-navigation/product-logos/arcgis-workflow-manager-glyph-32.svg +1 -0
- package/dist/cdn/assets/portal-navigation/product-logos/arcgis-workforce-glyph-32.svg +1 -0
- package/dist/cdn/assets/portal-navigation/product-logos/arcgis-world-geocoder-glyph-32.svg +1 -0
- package/dist/cdn/assets/portal-navigation/product-logos/calcite-design-system-glyph-32.svg +1 -0
- package/dist/cdn/assets/portal-navigation/product-logos/esri-community-glyph-32.svg +1 -0
- package/dist/cdn/assets/portal-navigation/product-logos/esri-demographics-glyph-32.svg +1 -0
- package/dist/cdn/assets/portal-navigation/product-logos/esri-events-glyph-32.svg +1 -0
- package/dist/cdn/assets/portal-navigation/product-logos/esri-offline-documentation-center--glyph-32.svg +1 -0
- package/dist/cdn/assets/portal-navigation/product-logos/esri-redistricting-glyph-32.svg +1 -0
- package/dist/cdn/assets/portal-navigation/product-logos/esri-reports-glyph-32.svg +1 -0
- package/dist/cdn/assets/portal-navigation/product-logos/esri-support-glyph-32.svg +1 -0
- package/dist/cdn/assets/portal-navigation/product-logos/map-viewer-glyph-32.svg +1 -0
- package/dist/cdn/assets/portal-navigation/product-logos/sceneviewer-glyph-32.svg +1 -0
- package/dist/cdn/assets/portal-navigation/product-logos/site-scan-for-arcgis-glyph-32.svg +1 -0
- package/dist/cdn/assets/portal-navigation/product-logos/site-scan-for-arcgis-le-glyph-32.svg +1 -0
- package/dist/cdn/assets/portal-navigation/product-logos/vector-tile-style-editor-glyph-32.svg +1 -0
- package/dist/cdn/assets/portal-navigation/product-logos/xr-viewer-glyph-32.svg +1 -0
- package/dist/cdn/assets/portal-navigation/t9n/messages.en.json +1 -0
- package/dist/cdn/index.js +1 -1
- package/dist/cdn/main.css +1 -1
- package/dist/chunks/dom.js +41 -0
- package/dist/chunks/fieldAddDelete.js +1 -1
- package/dist/chunks/functionalities.js +6 -4
- package/dist/chunks/groups.js +13 -35
- package/dist/chunks/groups2.js +11 -0
- package/dist/chunks/icons.js +11 -0
- package/dist/chunks/item.js +15 -15
- package/dist/chunks/item2.js +34 -0
- package/dist/chunks/loadClassificationData.js +19 -19
- package/dist/chunks/portal-account-switcher.js +6 -0
- package/dist/chunks/portal-browser.js +223 -0
- package/dist/chunks/portal.js +91 -8
- package/dist/chunks/portal2.js +59 -0
- package/dist/chunks/query.js +159 -0
- package/dist/chunks/request.js +87 -0
- package/dist/chunks/requests.js +92 -44
- package/dist/chunks/store.js +14 -0
- package/dist/chunks/string.js +36 -0
- package/dist/chunks/thumbnail.js +189 -0
- package/dist/chunks/ui.js +9 -0
- package/dist/chunks/url.js +17 -0
- package/dist/chunks/user.js +99 -4
- package/dist/chunks/user2.js +13 -107
- package/dist/chunks/utils.js +649 -0
- package/dist/components/arcgis-portal-account-switcher/customElement.d.ts +98 -0
- package/dist/components/arcgis-portal-account-switcher/customElement.js +364 -0
- package/dist/components/arcgis-portal-account-switcher/index.d.ts +1 -0
- package/dist/components/arcgis-portal-account-switcher/index.js +11 -0
- package/dist/components/arcgis-portal-account-switcher-accounts/customElement.d.ts +100 -0
- package/dist/components/arcgis-portal-account-switcher-accounts/customElement.js +31 -0
- package/dist/components/arcgis-portal-account-switcher-accounts/index.d.ts +1 -0
- package/dist/components/arcgis-portal-account-switcher-accounts/index.js +5 -0
- package/dist/components/arcgis-portal-account-switcher-list/customElement.d.ts +104 -0
- package/dist/components/arcgis-portal-account-switcher-list/customElement.js +51 -0
- package/dist/components/arcgis-portal-account-switcher-list/index.d.ts +1 -0
- package/dist/components/arcgis-portal-account-switcher-list/index.js +7 -0
- package/dist/components/arcgis-portal-ai-assistant/agents/types.d.ts +24 -3
- package/dist/components/arcgis-portal-ai-assistant/customElement.d.ts +28 -2
- package/dist/components/arcgis-portal-ai-assistant/customElement.js +1002 -523
- package/dist/components/arcgis-portal-browser/customElement.d.ts +243 -0
- package/dist/components/arcgis-portal-browser/customElement.js +19 -0
- package/dist/components/arcgis-portal-browser/index.d.ts +1 -0
- package/dist/components/arcgis-portal-browser/index.js +6 -0
- package/dist/components/arcgis-portal-browser/utils/store.d.ts +31 -0
- package/dist/components/arcgis-portal-browser/utils/types.d.ts +24 -0
- package/dist/components/arcgis-portal-browser-actions/customElement.d.ts +185 -0
- package/dist/components/arcgis-portal-browser-actions/customElement.js +73 -0
- package/dist/components/arcgis-portal-browser-actions/index.d.ts +1 -0
- package/dist/components/arcgis-portal-browser-actions/index.js +6 -0
- package/dist/components/arcgis-portal-browser-actions/types.d.ts +9 -0
- package/dist/components/arcgis-portal-browser-filter/customElement.d.ts +226 -0
- package/dist/components/arcgis-portal-browser-filter/customElement.js +32 -0
- package/dist/components/arcgis-portal-browser-filter/index.d.ts +1 -0
- package/dist/components/arcgis-portal-browser-filter/index.js +4 -0
- package/dist/components/arcgis-portal-browser-filter-date/customElement.d.ts +233 -0
- package/dist/components/arcgis-portal-browser-filter-date/customElement.js +118 -0
- package/dist/components/arcgis-portal-browser-filter-date/index.d.ts +1 -0
- package/dist/components/arcgis-portal-browser-filter-date/index.js +5 -0
- package/dist/components/arcgis-portal-browser-filter-status/customElement.d.ts +193 -0
- package/dist/components/arcgis-portal-browser-filter-status/customElement.js +56 -0
- package/dist/components/arcgis-portal-browser-filter-status/index.d.ts +1 -0
- package/dist/components/arcgis-portal-browser-filter-status/index.js +5 -0
- package/dist/components/arcgis-portal-browser-filters/customElement.d.ts +7 -0
- package/dist/components/arcgis-portal-browser-filters/customElement.js +29 -0
- package/dist/components/arcgis-portal-browser-filters/index.d.ts +1 -0
- package/dist/components/arcgis-portal-browser-filters/index.js +2 -0
- package/dist/components/arcgis-portal-browser-pagination/customElement.d.ts +194 -0
- package/dist/components/arcgis-portal-browser-pagination/customElement.js +49 -0
- package/dist/components/arcgis-portal-browser-pagination/index.d.ts +1 -0
- package/dist/components/arcgis-portal-browser-pagination/index.js +2 -0
- package/dist/components/arcgis-portal-browser-search/customElement.d.ts +195 -0
- package/dist/components/arcgis-portal-browser-search/customElement.js +62 -0
- package/dist/components/arcgis-portal-browser-search/index.d.ts +1 -0
- package/dist/components/arcgis-portal-browser-search/index.js +3 -0
- package/dist/components/arcgis-portal-browser-sort/customElement.d.ts +196 -0
- package/dist/components/arcgis-portal-browser-sort/customElement.js +93 -0
- package/dist/components/arcgis-portal-browser-sort/index.d.ts +1 -0
- package/dist/components/arcgis-portal-browser-sort/index.js +9 -0
- package/dist/components/arcgis-portal-browser-sort/utils.d.ts +3 -0
- package/dist/components/arcgis-portal-browser-top-bar/customElement.d.ts +190 -0
- package/dist/components/arcgis-portal-browser-top-bar/customElement.js +50 -0
- package/dist/components/arcgis-portal-browser-top-bar/index.d.ts +1 -0
- package/dist/components/arcgis-portal-browser-top-bar/index.js +3 -0
- package/dist/components/arcgis-portal-browser-view/customElement.d.ts +21 -0
- package/dist/components/arcgis-portal-browser-view/customElement.js +30 -0
- package/dist/components/arcgis-portal-browser-view/index.d.ts +1 -0
- package/dist/components/arcgis-portal-browser-view/index.js +5 -0
- package/dist/components/arcgis-portal-classification-config/customElement.js +1 -1
- package/dist/components/arcgis-portal-classification-favorite/customElement.js +1 -1
- package/dist/components/arcgis-portal-group-badges/customElement.d.ts +101 -0
- package/dist/components/arcgis-portal-group-badges/customElement.js +51 -0
- package/dist/components/arcgis-portal-group-badges/index.d.ts +1 -0
- package/dist/components/arcgis-portal-group-badges/index.js +3 -0
- package/dist/components/arcgis-portal-group-badges/types.d.ts +3 -0
- package/dist/components/arcgis-portal-group-browser/customElement.d.ts +301 -0
- package/dist/components/arcgis-portal-group-browser/customElement.js +494 -0
- package/dist/components/arcgis-portal-group-browser/index.d.ts +1 -0
- package/dist/components/arcgis-portal-group-browser/index.js +6 -0
- package/dist/components/arcgis-portal-group-browser/types.d.ts +193 -0
- package/dist/components/arcgis-portal-group-browser-preview/customElement.d.ts +225 -0
- package/dist/components/arcgis-portal-group-browser-preview/customElement.js +150 -0
- package/dist/components/arcgis-portal-group-browser-preview/index.d.ts +1 -0
- package/dist/components/arcgis-portal-group-browser-preview/index.js +12 -0
- package/dist/components/arcgis-portal-group-browser-preview-card/customElement.d.ts +82 -0
- package/dist/components/arcgis-portal-group-browser-preview-card/customElement.js +92 -0
- package/dist/components/arcgis-portal-group-browser-preview-card/index.d.ts +1 -0
- package/dist/components/arcgis-portal-group-browser-preview-card/index.js +6 -0
- package/dist/components/arcgis-portal-group-card/customElement.d.ts +169 -0
- package/dist/components/arcgis-portal-group-card/customElement.js +163 -0
- package/dist/components/arcgis-portal-group-card/index.d.ts +1 -0
- package/dist/components/arcgis-portal-group-card/index.js +8 -0
- package/dist/components/arcgis-portal-group-thumbnail/customElement.d.ts +32 -0
- package/dist/components/arcgis-portal-group-thumbnail/customElement.js +153 -0
- package/dist/components/arcgis-portal-group-thumbnail/index.d.ts +1 -0
- package/dist/components/arcgis-portal-group-thumbnail/index.js +3 -0
- package/dist/components/arcgis-portal-info-banner/customElement.d.ts +14 -0
- package/dist/components/arcgis-portal-info-banner/customElement.js +31 -0
- package/dist/components/arcgis-portal-info-banner/index.d.ts +1 -0
- package/dist/components/arcgis-portal-info-banner/index.js +1 -0
- package/dist/components/arcgis-portal-item-type/customElement.d.ts +3 -1
- package/dist/components/arcgis-portal-item-type/customElement.js +22 -651
- package/dist/components/arcgis-portal-mentionable-text-area/customElement.js +40 -38
- package/dist/components/arcgis-portal-navigation/customElement.d.ts +521 -0
- package/dist/components/arcgis-portal-navigation/customElement.js +1847 -0
- package/dist/components/arcgis-portal-navigation/index.d.ts +1 -0
- package/dist/components/arcgis-portal-navigation/index.js +32 -0
- package/dist/components/arcgis-portal-navigation/types.d.ts +44 -0
- package/dist/components/arcgis-portal-replacement-item-redirect/customElement.js +70 -255
- package/dist/components/arcgis-portal-user-avatar/customElement.js +2 -2
- package/dist/components/arcgis-portal-user-popup/customElement.d.ts +5 -2
- package/dist/components/arcgis-portal-user-popup/customElement.js +81 -106
- package/dist/components/arcgis-portal-voice-input/customElement.d.ts +1 -1
- package/dist/components/portal-group-browser-filters/customElement.js +104 -0
- package/dist/components/portal-group-browser-filters/index.js +8 -0
- package/dist/components/portal-group-browser-pagination/customElement.js +13 -0
- package/dist/components/portal-group-browser-pagination/index.js +2 -0
- package/dist/components/portal-group-browser-sort/customElement.js +16 -0
- package/dist/components/portal-group-browser-sort/index.js +2 -0
- package/dist/docs/api.json +1 -1
- package/dist/docs/docs.json +1 -1
- package/dist/docs/vscode.html-custom-data.json +1 -1
- package/dist/docs/web-types.json +1 -1
- package/dist/index.d.ts +192 -2
- package/dist/loader.js +26 -4
- package/dist/types/app-switcher.d.ts +71 -0
- package/dist/types/group.d.ts +14 -16
- package/dist/types/item.d.ts +76 -1
- package/dist/types/lumina.d.ts +152 -1
- package/dist/types/portal.d.ts +6 -0
- package/dist/types/preact.d.ts +174 -1
- package/dist/types/react.d.ts +196 -1
- package/dist/types/search.d.ts +30 -0
- package/dist/types/stencil.d.ts +152 -1
- package/dist/types/user.d.ts +16 -3
- package/package.json +10 -11
- package/dist/cdn/35SKVD6F.js +0 -2
- package/dist/cdn/5VSDGPHH.js +0 -2
- package/dist/cdn/72N3KAXN.js +0 -2
- package/dist/cdn/ANPXRYLV.js +0 -5
- package/dist/cdn/B7633S2A.js +0 -422
- package/dist/cdn/BEHLBKKM.js +0 -2
- package/dist/cdn/EVDOPN3G.js +0 -54
- package/dist/cdn/G47ZZQYL.js +0 -2
- package/dist/cdn/G6QT6MYP.js +0 -65
- package/dist/cdn/GAHILDQF.js +0 -45
- package/dist/cdn/GHQ3ZW4U.js +0 -2
- package/dist/cdn/JNRN6DTV.js +0 -2
- package/dist/cdn/K3HS2LQ7.js +0 -2
- package/dist/cdn/KEKBRUUC.js +0 -2
- package/dist/cdn/L3BQK62N.js +0 -2
- package/dist/cdn/MX3F5ZCL.js +0 -2
- package/dist/cdn/O3KBWLGU.js +0 -2
- package/dist/cdn/OQDPULPD.js +0 -2
- package/dist/cdn/RNLVNDGG.js +0 -2
- package/dist/cdn/T25WZ6OL.js +0 -516
- package/dist/cdn/TMYTUOSS.js +0 -2
- package/dist/cdn/UPEVTVNZ.js +0 -2
- package/dist/cdn/V2EOXGK2.js +0 -2
- package/dist/cdn/X5NBQPTM.js +0 -2
- package/dist/cdn/YG5YYL6X.js +0 -2
- package/dist/cdn/YIMNOUTF.js +0 -2
- package/dist/cdn/YL7PGYWC.js +0 -5
- package/dist/cdn/YMPTDKT6.js +0 -2
- package/dist/cdn/YVJRXWM3.js +0 -3
|
@@ -1,264 +1,82 @@
|
|
|
1
1
|
/* COPYRIGHT Esri - https://js.arcgis.com/5.2/LICENSE.txt */
|
|
2
|
-
import { c as
|
|
3
|
-
import { LitElement as
|
|
4
|
-
import { css as
|
|
5
|
-
import { createRef as
|
|
6
|
-
import { u as
|
|
7
|
-
import { a as
|
|
8
|
-
import {
|
|
9
|
-
import { sendTraceMessage as g, invokeStructuredPrompt as
|
|
2
|
+
import { c as pt } from "../../chunks/runtime.js";
|
|
3
|
+
import { LitElement as dt, createEvent as mt } from "@arcgis/lumina";
|
|
4
|
+
import { css as gt, render as ht, html as M } from "lit";
|
|
5
|
+
import { createRef as T, ref as A } from "lit/directives/ref.js";
|
|
6
|
+
import { u as ft } from "../../chunks/useT9n.js";
|
|
7
|
+
import { a as C, t as yt, b as wt } from "../../chunks/functionalities.js";
|
|
8
|
+
import { NodeInterrupt as _, Annotation as y, StateGraph as N, START as P, END as w } from "@langchain/langgraph/web";
|
|
9
|
+
import { sendTraceMessage as g, invokeStructuredPrompt as v, sendUXSuggestion as E, createAgentRuntimeStateWithSharedState as k, createChatModel as D } from "@arcgis/ai-components/utils/index.js";
|
|
10
10
|
import n from "zod";
|
|
11
|
-
import {
|
|
12
|
-
import
|
|
13
|
-
import
|
|
14
|
-
import {
|
|
15
|
-
import
|
|
16
|
-
import
|
|
17
|
-
import {
|
|
18
|
-
const
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
if (typeof a == "string")
|
|
25
|
-
return a;
|
|
26
|
-
if (Array.isArray(a))
|
|
27
|
-
return a.map(
|
|
28
|
-
(r) => typeof r == "string" ? r : "text" in r && typeof r.text == "string" ? r.text : ""
|
|
29
|
-
).join(" ").trim();
|
|
30
|
-
}
|
|
31
|
-
return "";
|
|
32
|
-
}, pt = () => ({ latestItemId: null, memory: {} }), N = (s) => {
|
|
33
|
-
const t = s?.agentExecutionContext.sharedState.portalItemAnalyticsSummaryMemory?.value;
|
|
34
|
-
return t ? { latestItemId: t.latestItemId, memory: t.memory } : pt();
|
|
35
|
-
}, gt = n.object({
|
|
36
|
-
intent: n.enum(["summarize", "followUp", "clarify"]),
|
|
37
|
-
itemId: n.string().default(""),
|
|
38
|
-
question: n.string().default("")
|
|
39
|
-
}), ht = n.object({ summary: n.string(), followUpQuestions: n.array(n.string()).default([]) }), ft = n.object({ answer: n.string(), isRelevant: n.boolean() }), yt = async (s, t) => {
|
|
40
|
-
await g({ text: "Answering follow-up...", agentName: "analytics" }, t);
|
|
41
|
-
const e = N(s), a = s.analyticsItemId ?? e.latestItemId, r = a ? e.memory[a] : void 0, l = s.analyticsQuestion || x(s.agentExecutionContext.messages);
|
|
42
|
-
return r ? {
|
|
43
|
-
status: "success",
|
|
44
|
-
outputMessage: (await b({
|
|
45
|
-
promptText: bt,
|
|
46
|
-
schema: ft,
|
|
47
|
-
modelTier: "default",
|
|
48
|
-
inputVariables: {
|
|
49
|
-
summary: r.summary,
|
|
50
|
-
question: l,
|
|
51
|
-
fullContext: JSON.stringify(r.fullContext)
|
|
52
|
-
}
|
|
53
|
-
})).answer
|
|
54
|
-
} : {
|
|
55
|
-
status: "success",
|
|
56
|
-
outputMessage: "I don't have enough information yet. Please ask me to summarize the item first using summarize item <item id>."
|
|
57
|
-
};
|
|
58
|
-
}, bt = `
|
|
59
|
-
You answer follow-up questions about an ArcGIS item.
|
|
60
|
-
|
|
61
|
-
Ground your answer in the provided item context.
|
|
62
|
-
If the answer is not available from the provided context, state that clearly and suggest what to check next.
|
|
63
|
-
|
|
64
|
-
Response rules:
|
|
65
|
-
- Reply in concise markdown.
|
|
66
|
-
- Keep the answer focused on the follow-up question.
|
|
67
|
-
- Do not include internal identifiers.
|
|
68
|
-
- Mark isRelevant=false when the question is not about this item or cannot be grounded in this item context.
|
|
69
|
-
|
|
70
|
-
Item summary:
|
|
71
|
-
{summary}
|
|
72
|
-
|
|
73
|
-
Item full context
|
|
74
|
-
{fullContext}
|
|
75
|
-
|
|
76
|
-
Question:
|
|
77
|
-
{question}
|
|
78
|
-
`;
|
|
79
|
-
function I(s) {
|
|
80
|
-
const { portal: t, user: e } = s ?? {};
|
|
81
|
-
if (!s || !t || !e)
|
|
11
|
+
import { a as bt, c as vt, q as It } from "../../chunks/groups.js";
|
|
12
|
+
import xt from "@arcgis/core/identity/IdentityManager.js";
|
|
13
|
+
import F from "@arcgis/core/request.js";
|
|
14
|
+
import { ChatPromptTemplate as U } from "@langchain/core/prompts";
|
|
15
|
+
import { tool as Y } from "@langchain/core/tools";
|
|
16
|
+
import { s as St, a as Mt } from "../../chunks/item2.js";
|
|
17
|
+
import { g as Gt, e as Tt, i as At, c as Ct, a as Nt } from "../../chunks/groups2.js";
|
|
18
|
+
const H = (a) => {
|
|
19
|
+
const { portal: t, user: e } = a ?? {};
|
|
20
|
+
return !!a && !!t && !!e;
|
|
21
|
+
};
|
|
22
|
+
function I(a) {
|
|
23
|
+
if (!H(a))
|
|
82
24
|
throw new Error("Invalid context: PortalAssistantContext with portal and user is required.");
|
|
83
25
|
}
|
|
84
|
-
const
|
|
85
|
-
|
|
86
|
-
const e = s.trim();
|
|
87
|
-
if (!e)
|
|
88
|
-
return null;
|
|
89
|
-
const a = t?.configurable?.context;
|
|
90
|
-
I(a);
|
|
91
|
-
const { result: r, error: l } = await nt(a.portal, e, { num: 1 });
|
|
92
|
-
return l && console.error("Error searching for portal item by title:", l), r?.results[0]?.id || null;
|
|
93
|
-
},
|
|
94
|
-
{
|
|
95
|
-
name: "resolvePortalItemIdByTitle",
|
|
96
|
-
description: 'Resolves an ArcGIS Portal item title to the best-match item id. Use this when a user references an item by title (including hash mentions like #title or #"title with spaces") instead of an explicit item id.',
|
|
97
|
-
schema: n.object({
|
|
98
|
-
itemTitle: n.string().describe("The portal item title to resolve to an item id.")
|
|
99
|
-
})
|
|
100
|
-
}
|
|
101
|
-
), It = async (s, t) => {
|
|
102
|
-
await g({ text: "Analyzing intent...", agentName: "analytics" }, t);
|
|
103
|
-
const e = x(s.agentExecutionContext.messages), a = !!N(s).latestItemId, r = await L.fromTemplate(wt).format({
|
|
104
|
-
userMessage: e,
|
|
105
|
-
hasSummaryContext: String(a)
|
|
106
|
-
}), c = await Q({
|
|
107
|
-
model: await F({ modelTier: "fast" }),
|
|
108
|
-
tools: [W],
|
|
109
|
-
systemPrompt: r,
|
|
110
|
-
responseFormat: gt,
|
|
111
|
-
checkpointer: !0
|
|
112
|
-
}).invoke({ messages: s.agentExecutionContext.messages }, t), { intent: i, itemId: o, question: u } = c.structuredResponse, m = i === "clarify" || i === "summarize" && !o || i === "followUp" && !u;
|
|
113
|
-
return {
|
|
114
|
-
agentExecutionContext: { ...s.agentExecutionContext },
|
|
115
|
-
analyticsIntent: m ? "clarify" : i,
|
|
116
|
-
analyticsItemId: o || null,
|
|
117
|
-
analyticsQuestion: u || "",
|
|
118
|
-
status: "success",
|
|
119
|
-
outputMessage: m ? 'Please clarify with summarize item <item id>, summarize item #<title>, or summarize item #"<title with spaces>".' : ""
|
|
120
|
-
};
|
|
121
|
-
}, wt = `
|
|
122
|
-
Classify the user analytics request.
|
|
26
|
+
const Pt = `
|
|
27
|
+
Write a concise, friendly success message for adding members to a group.
|
|
123
28
|
|
|
124
29
|
Rules:
|
|
125
|
-
-
|
|
126
|
-
-
|
|
127
|
-
-
|
|
128
|
-
-
|
|
129
|
-
-
|
|
130
|
-
- If request references item title (for example #title, #"title with spaces", or plain quoted title), call resolvePortalItemIdByTitle and set itemId to the returned value.
|
|
131
|
-
- Never return item titles in output fields.
|
|
132
|
-
- If intent is "followUp", set question to the user's full question/request text.
|
|
133
|
-
- If intent is "summarize", set question="".
|
|
134
|
-
- When user asks to show/list/explain fields, schema, attributes, columns, or layer details, classify as "followUp" unless they explicitly request a summary.
|
|
135
|
-
- If hasSummaryContext is true, prefer "followUp" for detail-oriented requests that do not explicitly ask to summarize.
|
|
136
|
-
|
|
137
|
-
Examples:
|
|
138
|
-
- "Summarize item 0123456789abcdef0123456789abcdef" => summarize, itemId="0123456789abcdef0123456789abcdef"
|
|
139
|
-
- "Summarize item #california" => summarize, call resolvePortalItemIdByTitle("california") and set itemId to tool result
|
|
140
|
-
- "Summarize item #"california farmland"" => summarize, call resolvePortalItemIdByTitle("california farmland") and set itemId to tool result
|
|
141
|
-
- "Show the layer's available fields" => followUp
|
|
142
|
-
- "List attributes and explain what status means" => followUp
|
|
143
|
-
- "What fields are available?" with hasSummaryContext=true => followUp
|
|
144
|
-
- "Give me an overview of item 0123456789abcdef0123456789abcdef" => summarize
|
|
30
|
+
- Keep it to 1-2 short sentences.
|
|
31
|
+
- Use plain text only.
|
|
32
|
+
- If there is no notAddedMembers, confirm that all requested members were added successfully.
|
|
33
|
+
- If there are notAddedMembers, acknowledge that some members could not be added and list the added and not added members separately then mention why based on the context
|
|
34
|
+
- Make sure to bold the usernames
|
|
145
35
|
|
|
146
|
-
|
|
147
|
-
{
|
|
36
|
+
Added members:
|
|
37
|
+
{addedMembers}
|
|
148
38
|
|
|
149
|
-
|
|
150
|
-
{
|
|
151
|
-
`,
|
|
152
|
-
const e = s.analyticsItemId;
|
|
153
|
-
if (!e)
|
|
154
|
-
return {
|
|
155
|
-
status: "success",
|
|
156
|
-
outputMessage: 'Please clarify with summarize item <item id>, summarize item #<title>, or summarize item #"<title with spaces>".'
|
|
157
|
-
};
|
|
158
|
-
await g({ text: `Summarizing item ${e}...`, agentName: "analytics" }, t);
|
|
159
|
-
const a = t?.configurable?.context;
|
|
160
|
-
I(a);
|
|
161
|
-
const { portal: r, user: l } = a, { result: c, error: i } = await it(l, r, e);
|
|
162
|
-
if (i || !c)
|
|
163
|
-
return await g({ text: "Failed to get item context for summarization", agentName: "analytics" }, t), {
|
|
164
|
-
status: "success",
|
|
165
|
-
outputMessage: "Unable to retrieve item context for summarization."
|
|
166
|
-
};
|
|
167
|
-
const { context: o } = c, u = await b({
|
|
168
|
-
promptText: vt,
|
|
169
|
-
schema: ht,
|
|
170
|
-
modelTier: "default",
|
|
171
|
-
inputVariables: { context: JSON.stringify(o) }
|
|
172
|
-
}), { followUpQuestions: d, summary: p } = u, m = N(s), f = {
|
|
173
|
-
latestItemId: e,
|
|
174
|
-
memory: {
|
|
175
|
-
...m.memory,
|
|
176
|
-
[e]: { summary: p, followUpQuestions: d, fullContext: o }
|
|
177
|
-
}
|
|
178
|
-
};
|
|
179
|
-
return d.length && await B({ type: "suggested-prompts", data: { prompts: d } }, t), {
|
|
180
|
-
status: "success",
|
|
181
|
-
outputMessage: p,
|
|
182
|
-
sharedStatePatch: { portalItemAnalyticsSummaryMemory: { value: f } }
|
|
183
|
-
};
|
|
184
|
-
}, vt = `
|
|
185
|
-
You are a item summary tool for ArcGIS. Your job is to summarize an item's info based on the provided context.
|
|
186
|
-
Summary rules:
|
|
187
|
-
- The summary should be concise markdown, make sure to format the output nicely so it's easy to read.
|
|
188
|
-
- Target length: 80-150 words.
|
|
189
|
-
- Provide one short descriptive paragraph.
|
|
190
|
-
- Also propose 3 concise follow-up questions grounded in the item summary.
|
|
191
|
-
- Keep follow-up questions specific and actionable.
|
|
192
|
-
Follow-up questions rules:
|
|
193
|
-
- These questions should be in the format of a prompt that the user can click on.
|
|
194
|
-
- Make sure the questions are relevant to the item summary and that you can answer based solely on the provided context.
|
|
195
|
-
Do not include internal identifiers.
|
|
196
|
-
If the user asks for a detailed summary, you may expand the response up to 300 words.
|
|
197
|
-
Item context:
|
|
198
|
-
{context}
|
|
199
|
-
`, C = (s, t) => t ?? s, O = h.Root({
|
|
200
|
-
...E(),
|
|
201
|
-
// States shared only across nodes in the graph, not between invocations
|
|
202
|
-
analyticsIntent: h({
|
|
203
|
-
reducer: C,
|
|
204
|
-
default: () => "clarify"
|
|
205
|
-
}),
|
|
206
|
-
analyticsItemId: h({
|
|
207
|
-
reducer: C,
|
|
208
|
-
default: () => null
|
|
209
|
-
}),
|
|
210
|
-
analyticsQuestion: h({
|
|
211
|
-
reducer: C,
|
|
212
|
-
default: () => ""
|
|
213
|
-
})
|
|
214
|
-
}), St = () => new $(O).addNode("detectAnalyticsIntent", It).addNode("summarizePortalItem", xt).addNode("answerAnalyticsFollowUp", yt).addEdge(G, "detectAnalyticsIntent").addConditionalEdges("detectAnalyticsIntent", (t) => t.analyticsIntent === "summarize" ? "summarizePortalItem" : t.analyticsIntent === "followUp" ? "answerAnalyticsFollowUp" : y).addEdge("summarizePortalItem", y).addEdge("answerAnalyticsFollowUp", y), Mt = String.raw`- **portal-item-analytics** - Portal item analytics assistant:
|
|
215
|
-
- summarizes ArcGIS portal items from item context
|
|
216
|
-
- suggests follow-up prompts grounded in the item
|
|
217
|
-
`, Tt = {
|
|
218
|
-
id: "portal-item-analytics",
|
|
219
|
-
name: "Portal Item Analytics",
|
|
220
|
-
description: Mt,
|
|
221
|
-
createGraph: St,
|
|
222
|
-
workspace: O
|
|
223
|
-
}, Pt = (s) => s.map((t) => `"${t}"`).join(", "), At = n.object({
|
|
39
|
+
Not added members:
|
|
40
|
+
{notAddedMembers}
|
|
41
|
+
`, kt = (a) => a.map((t) => `"${t}"`).join(", "), qt = n.object({
|
|
224
42
|
successMessage: n.string().default("")
|
|
225
|
-
}),
|
|
226
|
-
if (
|
|
43
|
+
}), V = "portal-group-creation", j = "approveAddMembers", zt = async (a, t) => {
|
|
44
|
+
if (a.intentParams.intent !== "addMembers")
|
|
227
45
|
return {
|
|
228
46
|
status: "success",
|
|
229
47
|
outputMessage: "Use @mention usernames for the members you want to add."
|
|
230
48
|
};
|
|
231
|
-
const e =
|
|
49
|
+
const e = a.agentExecutionContext.sharedState.createdGroupId?.value;
|
|
232
50
|
if (!e)
|
|
233
51
|
return {
|
|
234
52
|
status: "success",
|
|
235
53
|
outputMessage: "Create a group first, then add members using @mention usernames."
|
|
236
54
|
};
|
|
237
|
-
const
|
|
238
|
-
if (!
|
|
55
|
+
const s = a.intentParams.memberInfo.memberIdentifiers.map((d) => d.trim()).filter(Boolean);
|
|
56
|
+
if (!s.length)
|
|
239
57
|
return {
|
|
240
58
|
status: "success",
|
|
241
59
|
outputMessage: "Use @mention usernames for the members you want to add."
|
|
242
60
|
};
|
|
243
61
|
const l = `The following member(s) will be added to the newly created group:
|
|
244
62
|
|
|
245
|
-
${
|
|
63
|
+
${s.map((d) => `- **@${d}**`).join(`
|
|
246
64
|
`)}
|
|
247
65
|
|
|
248
66
|
Do you want to continue?`, { hitlResponse: c } = t?.configurable ?? {};
|
|
249
|
-
if (c?.agentId !==
|
|
250
|
-
const
|
|
251
|
-
agentId:
|
|
252
|
-
id:
|
|
67
|
+
if (c?.agentId !== V || c.id !== j) {
|
|
68
|
+
const d = {
|
|
69
|
+
agentId: V,
|
|
70
|
+
id: j,
|
|
253
71
|
kind: "booleanChoice",
|
|
254
72
|
message: l,
|
|
255
73
|
metadata: {
|
|
256
74
|
action: "addMembers",
|
|
257
75
|
groupId: e,
|
|
258
|
-
members: [...
|
|
76
|
+
members: [...s]
|
|
259
77
|
}
|
|
260
78
|
};
|
|
261
|
-
throw new
|
|
79
|
+
throw new _(d);
|
|
262
80
|
}
|
|
263
81
|
if (c.payload !== !0)
|
|
264
82
|
return {
|
|
@@ -266,83 +84,94 @@ Do you want to continue?`, { hitlResponse: c } = t?.configurable ?? {};
|
|
|
266
84
|
outputMessage: "Okay, I cancelled adding members to the group."
|
|
267
85
|
};
|
|
268
86
|
await g(
|
|
269
|
-
{ text: `Adding members ${
|
|
87
|
+
{ text: `Adding members ${kt(s)}...`, agentName: "group-creation" },
|
|
270
88
|
t
|
|
271
89
|
);
|
|
272
90
|
const i = t?.configurable?.context;
|
|
273
91
|
I(i);
|
|
274
|
-
const { result:
|
|
275
|
-
if (
|
|
92
|
+
const { result: u, error: r } = await bt(i.portal, e, s);
|
|
93
|
+
if (r || !u)
|
|
276
94
|
return {
|
|
277
95
|
status: "success",
|
|
278
96
|
outputMessage: "I could not add members to that group. Please confirm group access and user accounts, then try again."
|
|
279
97
|
};
|
|
280
|
-
const { addedUsernames:
|
|
98
|
+
const { addedUsernames: p, notAddedUsers: m } = u;
|
|
281
99
|
try {
|
|
282
|
-
const
|
|
283
|
-
promptText:
|
|
284
|
-
schema:
|
|
100
|
+
const h = (await v({
|
|
101
|
+
promptText: Pt,
|
|
102
|
+
schema: qt,
|
|
285
103
|
modelTier: "fast",
|
|
286
104
|
inputVariables: {
|
|
287
|
-
addedMembers:
|
|
105
|
+
addedMembers: p.join(", "),
|
|
288
106
|
notAddedMembers: JSON.stringify(
|
|
289
|
-
|
|
107
|
+
m.map((f) => ({ username: f.username, reason: f.error.message }))
|
|
290
108
|
)
|
|
291
109
|
}
|
|
292
110
|
})).successMessage;
|
|
293
|
-
if (
|
|
294
|
-
return { status: "success", outputMessage:
|
|
295
|
-
} catch (
|
|
296
|
-
console.error("Error generating add-members success message:",
|
|
111
|
+
if (h)
|
|
112
|
+
return { status: "success", outputMessage: h };
|
|
113
|
+
} catch (d) {
|
|
114
|
+
console.error("Error generating add-members success message:", d);
|
|
297
115
|
}
|
|
298
116
|
return {};
|
|
299
117
|
}, $t = `
|
|
300
|
-
Write a concise, friendly success message
|
|
118
|
+
Write a concise, friendly success message after creating a portal group.
|
|
119
|
+
|
|
120
|
+
Rules:
|
|
121
|
+
- Mention that the group was created successfully.
|
|
122
|
+
- Mention that the user can add members by using @mention usernames.
|
|
123
|
+
- Keep it to 1-2 short sentences.
|
|
124
|
+
- Make sure to bold the group title in the message.
|
|
125
|
+
|
|
126
|
+
Group title:
|
|
127
|
+
{groupTitle}
|
|
128
|
+
`, Et = `
|
|
129
|
+
Write a concise, friendly failure message after an attempt to create a portal group.
|
|
301
130
|
|
|
302
131
|
Rules:
|
|
303
132
|
- Keep it to 1-2 short sentences.
|
|
304
133
|
- Use plain text only.
|
|
305
|
-
-
|
|
306
|
-
-
|
|
307
|
-
-
|
|
134
|
+
- Mention that group creation failed.
|
|
135
|
+
- Include the failure reason in user-friendly language.
|
|
136
|
+
- End with a clear next step the user can try.
|
|
308
137
|
|
|
309
|
-
|
|
310
|
-
{
|
|
138
|
+
Group title:
|
|
139
|
+
{groupTitle}
|
|
311
140
|
|
|
312
|
-
|
|
313
|
-
{
|
|
314
|
-
`,
|
|
141
|
+
Failure reason:
|
|
142
|
+
{failureReason}
|
|
143
|
+
`, L = "portal-group-creation", B = "approveCreateGroup", Dt = n.object({
|
|
315
144
|
successMessage: n.string().default("")
|
|
316
|
-
}),
|
|
145
|
+
}), Ut = n.object({
|
|
317
146
|
failureMessage: n.string().default("")
|
|
318
|
-
}),
|
|
319
|
-
if (
|
|
147
|
+
}), Rt = async (a, t) => {
|
|
148
|
+
if (a.intentParams.intent !== "create")
|
|
320
149
|
return {
|
|
321
150
|
status: "success",
|
|
322
151
|
outputMessage: "Tell me the group title you want to use."
|
|
323
152
|
};
|
|
324
|
-
const e =
|
|
153
|
+
const e = a.intentParams.title.trim();
|
|
325
154
|
if (!e)
|
|
326
155
|
return {
|
|
327
156
|
status: "success",
|
|
328
157
|
outputMessage: "What title would you like for the new group?"
|
|
329
158
|
};
|
|
330
|
-
const
|
|
331
|
-
if (
|
|
332
|
-
const
|
|
333
|
-
agentId:
|
|
334
|
-
id:
|
|
159
|
+
const s = `A group with the title **${e}** will be created. Do you want to continue?`, { hitlResponse: o } = t?.configurable;
|
|
160
|
+
if (o?.agentId !== L || o.id !== B) {
|
|
161
|
+
const r = {
|
|
162
|
+
agentId: L,
|
|
163
|
+
id: B,
|
|
335
164
|
kind: "booleanChoice",
|
|
336
|
-
message:
|
|
165
|
+
message: s,
|
|
337
166
|
metadata: {
|
|
338
167
|
action: "createGroup",
|
|
339
168
|
title: e,
|
|
340
169
|
access: "private"
|
|
341
170
|
}
|
|
342
171
|
};
|
|
343
|
-
throw new
|
|
172
|
+
throw new _(r);
|
|
344
173
|
}
|
|
345
|
-
if (
|
|
174
|
+
if (o.payload !== !0)
|
|
346
175
|
return {
|
|
347
176
|
status: "success",
|
|
348
177
|
outputMessage: `Okay, I cancelled creating **${e}**.`
|
|
@@ -350,101 +179,71 @@ Not added members:
|
|
|
350
179
|
await g({ text: `Creating group "${e}"...`, agentName: "group-creation" }, t);
|
|
351
180
|
const l = t?.configurable?.context;
|
|
352
181
|
I(l);
|
|
353
|
-
const { result: c, error: i } = await
|
|
182
|
+
const { result: c, error: i } = await vt(l.portal, {
|
|
354
183
|
title: e,
|
|
355
184
|
access: "private"
|
|
356
185
|
});
|
|
357
186
|
if (i || !c) {
|
|
358
|
-
const
|
|
187
|
+
const r = i?.message?.trim() || "No additional details were provided.";
|
|
359
188
|
try {
|
|
360
|
-
const
|
|
361
|
-
promptText:
|
|
362
|
-
schema:
|
|
189
|
+
const m = (await v({
|
|
190
|
+
promptText: Et,
|
|
191
|
+
schema: Ut,
|
|
363
192
|
modelTier: "fast",
|
|
364
193
|
inputVariables: {
|
|
365
194
|
groupTitle: e,
|
|
366
|
-
failureReason:
|
|
195
|
+
failureReason: r
|
|
367
196
|
}
|
|
368
197
|
})).failureMessage.trim();
|
|
369
|
-
if (
|
|
198
|
+
if (m)
|
|
370
199
|
return {
|
|
371
200
|
status: "success",
|
|
372
|
-
outputMessage:
|
|
201
|
+
outputMessage: m
|
|
373
202
|
};
|
|
374
|
-
} catch (
|
|
375
|
-
console.error("Error generating create-group failure message:",
|
|
203
|
+
} catch (p) {
|
|
204
|
+
console.error("Error generating create-group failure message:", p);
|
|
376
205
|
}
|
|
377
206
|
return {
|
|
378
207
|
status: "success",
|
|
379
208
|
outputMessage: "I could not create that group. Please confirm your permissions and try again with the group title."
|
|
380
209
|
};
|
|
381
210
|
}
|
|
382
|
-
const
|
|
211
|
+
const u = c.id;
|
|
383
212
|
try {
|
|
384
|
-
const
|
|
385
|
-
promptText:
|
|
386
|
-
schema:
|
|
213
|
+
const p = (await v({
|
|
214
|
+
promptText: $t,
|
|
215
|
+
schema: Dt,
|
|
387
216
|
modelTier: "fast",
|
|
388
217
|
inputVariables: {
|
|
389
218
|
groupTitle: e
|
|
390
219
|
}
|
|
391
220
|
})).successMessage.trim();
|
|
392
|
-
if (
|
|
221
|
+
if (p)
|
|
393
222
|
return {
|
|
394
223
|
status: "success",
|
|
395
|
-
outputMessage:
|
|
396
|
-
sharedStatePatch: { createdGroupId: { value:
|
|
397
|
-
createdGroupId:
|
|
224
|
+
outputMessage: p,
|
|
225
|
+
sharedStatePatch: { createdGroupId: { value: u } },
|
|
226
|
+
createdGroupId: u
|
|
398
227
|
};
|
|
399
|
-
} catch (
|
|
400
|
-
console.error("Error generating create-group success message:",
|
|
228
|
+
} catch (r) {
|
|
229
|
+
console.error("Error generating create-group success message:", r);
|
|
401
230
|
}
|
|
402
231
|
return {};
|
|
403
|
-
},
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
- Keep it to 1-2 short sentences.
|
|
419
|
-
- Use plain text only.
|
|
420
|
-
- Mention that group creation failed.
|
|
421
|
-
- Include the failure reason in user-friendly language.
|
|
422
|
-
- End with a clear next step the user can try.
|
|
423
|
-
|
|
424
|
-
Group title:
|
|
425
|
-
{groupTitle}
|
|
426
|
-
|
|
427
|
-
Failure reason:
|
|
428
|
-
{failureReason}
|
|
429
|
-
`, Dt = n.object({
|
|
430
|
-
intent: n.enum(["clarify", "create", "addMembers"]).default("clarify"),
|
|
431
|
-
title: n.string().default(""),
|
|
432
|
-
memberIdentifiers: n.array(n.string()).default([]),
|
|
433
|
-
clarifyMessage: n.string().default("")
|
|
434
|
-
}), Rt = async (s, t) => {
|
|
435
|
-
await g({ text: "Thinking about groups...", agentName: "group-creation" }, t);
|
|
436
|
-
const e = x(s.agentExecutionContext.messages).trim(), a = await b({
|
|
437
|
-
promptText: Ut,
|
|
438
|
-
schema: Dt,
|
|
439
|
-
modelTier: "default",
|
|
440
|
-
inputVariables: { userMessage: e }
|
|
441
|
-
}), r = a.title.trim(), l = a.memberIdentifiers.filter(Boolean), c = a.clarifyMessage.trim(), i = a.intent === "create" && !!r, o = a.intent === "addMembers" && l.length > 0;
|
|
442
|
-
return {
|
|
443
|
-
intentParams: i ? { intent: "create", title: r } : o ? { intent: "addMembers", memberInfo: { memberIdentifiers: l } } : { intent: "clarify" },
|
|
444
|
-
status: "success",
|
|
445
|
-
outputMessage: !i && !o ? c : ""
|
|
446
|
-
};
|
|
447
|
-
}, Ut = `
|
|
232
|
+
}, x = (a) => {
|
|
233
|
+
for (let t = a.length - 1; t >= 0; t -= 1) {
|
|
234
|
+
const e = a[t];
|
|
235
|
+
if (e.type !== "human")
|
|
236
|
+
continue;
|
|
237
|
+
const s = e.content;
|
|
238
|
+
if (typeof s == "string")
|
|
239
|
+
return s;
|
|
240
|
+
if (Array.isArray(s))
|
|
241
|
+
return s.map(
|
|
242
|
+
(o) => typeof o == "string" ? o : "text" in o && typeof o.text == "string" ? o.text : ""
|
|
243
|
+
).join(" ").trim();
|
|
244
|
+
}
|
|
245
|
+
return "";
|
|
246
|
+
}, Ot = `
|
|
448
247
|
You classify whether a user is asking to create a new ArcGIS Portal group or add members to an existing group.
|
|
449
248
|
|
|
450
249
|
Rules:
|
|
@@ -470,13 +269,43 @@ Examples:
|
|
|
470
269
|
|
|
471
270
|
User message:
|
|
472
271
|
{userMessage}
|
|
473
|
-
`,
|
|
474
|
-
n.
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
n.
|
|
478
|
-
|
|
479
|
-
})
|
|
272
|
+
`, Ft = n.object({
|
|
273
|
+
intent: n.enum(["clarify", "create", "addMembers"]).default("clarify"),
|
|
274
|
+
title: n.string().default(""),
|
|
275
|
+
memberIdentifiers: n.array(n.string()).default([]),
|
|
276
|
+
clarifyMessage: n.string().default("")
|
|
277
|
+
}), Vt = async (a, t) => {
|
|
278
|
+
await g({ text: "Thinking about groups...", agentName: "group-creation" }, t);
|
|
279
|
+
const e = x(a.agentExecutionContext.messages).trim(), s = await v({
|
|
280
|
+
promptText: Ot,
|
|
281
|
+
schema: Ft,
|
|
282
|
+
modelTier: "default",
|
|
283
|
+
inputVariables: { userMessage: e }
|
|
284
|
+
}), o = s.title.trim(), l = s.memberIdentifiers.filter(Boolean), c = s.clarifyMessage.trim(), i = s.intent === "create" && !!o, u = s.intent === "addMembers" && l.length > 0;
|
|
285
|
+
return {
|
|
286
|
+
intentParams: i ? { intent: "create", title: o } : u ? { intent: "addMembers", memberInfo: { memberIdentifiers: l } } : { intent: "clarify" },
|
|
287
|
+
status: "success",
|
|
288
|
+
outputMessage: !i && !u ? c : ""
|
|
289
|
+
};
|
|
290
|
+
}, jt = n.enum([
|
|
291
|
+
"portal-content",
|
|
292
|
+
"portal-content-favorites",
|
|
293
|
+
"portal-content-group",
|
|
294
|
+
"portal-content-living-atlas",
|
|
295
|
+
"portal-content-organization",
|
|
296
|
+
"portal-gallery",
|
|
297
|
+
"portal-groups",
|
|
298
|
+
"portal-groups-featured",
|
|
299
|
+
"portal-groups-my",
|
|
300
|
+
"portal-groups-organization",
|
|
301
|
+
"portal-map-viewer",
|
|
302
|
+
"portal-notebooks",
|
|
303
|
+
"portal-scene-viewer",
|
|
304
|
+
"portal-settings-security"
|
|
305
|
+
]), Lt = n.object({
|
|
306
|
+
destinationType: jt
|
|
307
|
+
}), Bt = n.union([
|
|
308
|
+
Lt,
|
|
480
309
|
n.object({
|
|
481
310
|
destinationType: n.literal("portal-item"),
|
|
482
311
|
itemId: n.string().trim().min(1)
|
|
@@ -485,173 +314,179 @@ User message:
|
|
|
485
314
|
destinationType: n.literal("portal-group"),
|
|
486
315
|
groupId: n.string().trim().min(1)
|
|
487
316
|
})
|
|
488
|
-
])
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
const e = s.createdGroupId ?? s.agentExecutionContext.sharedState.createdGroupId?.value;
|
|
497
|
-
return e ? (await g({ text: "Preparing navigation...", agentName: "group-creation" }, t), await J({ destinationType: "portal-group", groupId: e }, t), {}) : {};
|
|
498
|
-
}, z = (s, t) => t ?? s, Y = h.Root({
|
|
499
|
-
...E(),
|
|
317
|
+
]), X = "portal-navigation", R = async (a, t) => {
|
|
318
|
+
const e = t?.configurable?.context;
|
|
319
|
+
!H(e) || !e.navigationTargetMap?.[a.destinationType] || await E({ type: X, data: { ...a } }, t);
|
|
320
|
+
}, Qt = async (a, t) => {
|
|
321
|
+
const e = a.createdGroupId ?? a.agentExecutionContext.sharedState.createdGroupId?.value;
|
|
322
|
+
return e ? (await g({ text: "Preparing navigation...", agentName: "group-creation" }, t), await R({ destinationType: "portal-group", groupId: e }, t), {}) : {};
|
|
323
|
+
}, Q = (a, t) => t ?? a, Z = y.Root({
|
|
324
|
+
...k(),
|
|
500
325
|
// * Shared state between nodes (but not persisted to the agent execution context)
|
|
501
326
|
/** Parameters related to the user's intent for group creation actions */
|
|
502
|
-
intentParams:
|
|
327
|
+
intentParams: y({ reducer: Q, default: () => ({ intent: "clarify" }) }),
|
|
503
328
|
/** The ID of the group that was created
|
|
504
329
|
* even though we already have this in the shared state
|
|
505
330
|
* we still need it here to also share between nodes
|
|
506
331
|
*/
|
|
507
|
-
createdGroupId:
|
|
508
|
-
}),
|
|
332
|
+
createdGroupId: y({ reducer: Q, default: () => "" })
|
|
333
|
+
}), Kt = () => new N(Z).addNode("detectGroupCreationIntent", Vt).addNode("createPortalGroup", Rt).addNode("addMembersToPortalGroup", zt).addNode("suggestCreatedGroupNavigation", Qt).addEdge(P, "detectGroupCreationIntent").addConditionalEdges("detectGroupCreationIntent", (t) => {
|
|
509
334
|
switch (t.intentParams.intent) {
|
|
510
335
|
case "create":
|
|
511
336
|
return "createPortalGroup";
|
|
512
337
|
case "addMembers":
|
|
513
338
|
return "addMembersToPortalGroup";
|
|
514
339
|
default:
|
|
515
|
-
return
|
|
340
|
+
return w;
|
|
516
341
|
}
|
|
517
|
-
}).addEdge("createPortalGroup", "suggestCreatedGroupNavigation").addEdge("addMembersToPortalGroup", "suggestCreatedGroupNavigation").addEdge("suggestCreatedGroupNavigation",
|
|
342
|
+
}).addEdge("createPortalGroup", "suggestCreatedGroupNavigation").addEdge("addMembersToPortalGroup", "suggestCreatedGroupNavigation").addEdge("suggestCreatedGroupNavigation", w), Jt = String.raw`- **portal-group-creation** - Portal group creation assistant:
|
|
518
343
|
- creates a new ArcGIS Portal group for the signed-in user
|
|
519
344
|
- adds users to the newly created group using @mention usernames
|
|
520
|
-
`,
|
|
345
|
+
`, Wt = {
|
|
521
346
|
id: "portal-group-creation",
|
|
522
347
|
name: "Portal Group Creation",
|
|
523
|
-
description:
|
|
524
|
-
createGraph:
|
|
525
|
-
workspace:
|
|
526
|
-
},
|
|
527
|
-
const t =
|
|
348
|
+
description: Jt,
|
|
349
|
+
createGraph: Kt,
|
|
350
|
+
workspace: Z
|
|
351
|
+
}, tt = "portalDocAssistantMemory", _t = () => ({ conversationId: "" }), Yt = (a) => {
|
|
352
|
+
const t = a?.[tt]?.value;
|
|
528
353
|
if (!t || typeof t != "object")
|
|
529
|
-
return
|
|
354
|
+
return _t();
|
|
530
355
|
const e = t;
|
|
531
356
|
return {
|
|
532
357
|
conversationId: typeof e.conversationId == "string" ? e.conversationId : ""
|
|
533
358
|
};
|
|
534
|
-
},
|
|
535
|
-
[
|
|
536
|
-
})
|
|
537
|
-
|
|
538
|
-
|
|
359
|
+
}, Ht = (a) => ({
|
|
360
|
+
[tt]: { value: a }
|
|
361
|
+
}), Xt = {
|
|
362
|
+
pipeline: {
|
|
363
|
+
follow_up: { allow: !1 }
|
|
364
|
+
}
|
|
365
|
+
};
|
|
366
|
+
function Zt(a) {
|
|
367
|
+
return {
|
|
368
|
+
kind: "DocAIAssistantRequest",
|
|
369
|
+
filters: {
|
|
370
|
+
...Xt,
|
|
371
|
+
persona: { persona: a }
|
|
372
|
+
}
|
|
373
|
+
};
|
|
374
|
+
}
|
|
375
|
+
async function te({
|
|
376
|
+
portal: a,
|
|
539
377
|
question: t,
|
|
540
378
|
persona: e,
|
|
541
|
-
previousConversationId:
|
|
542
|
-
signal:
|
|
379
|
+
previousConversationId: s,
|
|
380
|
+
signal: o,
|
|
543
381
|
skillId: l
|
|
544
382
|
}) {
|
|
545
383
|
l ??= "doc_ai_assistant";
|
|
546
|
-
const i = await
|
|
547
|
-
portal:
|
|
384
|
+
const c = Zt(e), i = await ee({
|
|
385
|
+
portal: a,
|
|
548
386
|
skillId: l,
|
|
549
387
|
message: t,
|
|
550
|
-
options: { context:
|
|
551
|
-
kind: "DocAIAssistantRequest",
|
|
552
|
-
filters: { persona: { persona: e } }
|
|
553
|
-
}, previousConversationId: a, signal: r }
|
|
388
|
+
options: { context: c, previousConversationId: s, signal: o }
|
|
554
389
|
});
|
|
555
390
|
return {
|
|
556
|
-
reply:
|
|
391
|
+
reply: ae(i, l),
|
|
557
392
|
conversationId: i[0]?.conversationId ?? ""
|
|
558
393
|
};
|
|
559
394
|
}
|
|
560
|
-
async function
|
|
561
|
-
portal:
|
|
395
|
+
async function ee({
|
|
396
|
+
portal: a,
|
|
562
397
|
skillId: t,
|
|
563
398
|
message: e,
|
|
564
|
-
options:
|
|
399
|
+
options: s
|
|
565
400
|
}) {
|
|
566
|
-
const l = `${
|
|
401
|
+
const l = `${a.helperServices.aiAssistantServices.url}/skills/${t}/chat`, c = {
|
|
567
402
|
"Content-Type": "application/json",
|
|
568
|
-
token:
|
|
569
|
-
}, i = await
|
|
403
|
+
token: xt.findCredential(a.url)?.token ?? ""
|
|
404
|
+
}, i = await F(l, {
|
|
570
405
|
method: "post",
|
|
571
406
|
body: JSON.stringify({
|
|
572
407
|
message: e,
|
|
573
|
-
context:
|
|
574
|
-
conversationId:
|
|
408
|
+
context: s.context,
|
|
409
|
+
conversationId: s.previousConversationId
|
|
575
410
|
}),
|
|
576
411
|
headers: c,
|
|
577
|
-
signal:
|
|
412
|
+
signal: s.signal
|
|
578
413
|
});
|
|
579
414
|
if (i.httpStatus !== 200)
|
|
580
415
|
throw new Error(`Doc assistant chat failed (${i.httpStatus})`, {
|
|
581
416
|
cause: i.data
|
|
582
417
|
});
|
|
583
|
-
const
|
|
584
|
-
if (!
|
|
418
|
+
const u = i.data, r = [u], { conversationId: p, inquiryId: m } = u, d = async (h, f) => {
|
|
419
|
+
if (!f)
|
|
585
420
|
return;
|
|
586
|
-
await
|
|
587
|
-
const
|
|
421
|
+
await yt(500);
|
|
422
|
+
const b = await F(l, {
|
|
588
423
|
method: "post",
|
|
589
|
-
body: JSON.stringify({ conversationId:
|
|
424
|
+
body: JSON.stringify({ conversationId: p, inquiryId: m, ackSequenceNumber: h }),
|
|
590
425
|
headers: c,
|
|
591
|
-
signal:
|
|
426
|
+
signal: s.signal
|
|
592
427
|
});
|
|
593
|
-
if (
|
|
594
|
-
throw new Error(`Doc assistant poll failed (${
|
|
595
|
-
cause:
|
|
428
|
+
if (b.httpStatus !== 200)
|
|
429
|
+
throw new Error(`Doc assistant poll failed (${b.httpStatus})`, {
|
|
430
|
+
cause: b.data
|
|
596
431
|
});
|
|
597
|
-
const
|
|
598
|
-
|
|
432
|
+
const S = b.data;
|
|
433
|
+
r.push(S), await d(S.sequenceNumber, S.hasMore);
|
|
599
434
|
};
|
|
600
|
-
return
|
|
435
|
+
return u.hasMore && await d(u.sequenceNumber, u.hasMore), r;
|
|
601
436
|
}
|
|
602
|
-
function
|
|
437
|
+
function ae(a, t) {
|
|
603
438
|
switch (t) {
|
|
604
439
|
case "doc_chat":
|
|
605
|
-
return
|
|
440
|
+
return a.find((e) => e.message != null)?.message ?? "";
|
|
606
441
|
case "doc_ai_assistant":
|
|
607
|
-
for (let e =
|
|
608
|
-
const
|
|
609
|
-
if (
|
|
610
|
-
const
|
|
611
|
-
if (
|
|
612
|
-
return
|
|
442
|
+
for (let e = a.length - 1; e >= 0; e -= 1) {
|
|
443
|
+
const s = a[e];
|
|
444
|
+
if (s.context?.kind === "DocAIAssistantContext") {
|
|
445
|
+
const o = s.context.results?.[0]?.reply;
|
|
446
|
+
if (o)
|
|
447
|
+
return o;
|
|
613
448
|
}
|
|
614
449
|
}
|
|
615
450
|
return "";
|
|
616
451
|
default:
|
|
617
|
-
return
|
|
452
|
+
return C(t);
|
|
618
453
|
}
|
|
619
454
|
}
|
|
620
|
-
const
|
|
455
|
+
const se = async (a, t) => {
|
|
621
456
|
await g({ text: "Asking documentation assistant...", agentName: "doc-assistant" }, t);
|
|
622
|
-
const e = x(
|
|
457
|
+
const e = x(a.agentExecutionContext.messages).trim();
|
|
623
458
|
if (!e)
|
|
624
459
|
return {
|
|
625
460
|
status: "success",
|
|
626
461
|
outputMessage: "Please share your question and I can help with ArcGIS and Portal documentation."
|
|
627
462
|
};
|
|
628
|
-
const
|
|
629
|
-
I(
|
|
630
|
-
const
|
|
631
|
-
portal:
|
|
463
|
+
const s = t?.configurable?.context;
|
|
464
|
+
I(s);
|
|
465
|
+
const o = Yt(a.agentExecutionContext.sharedState), { reply: l, conversationId: c } = await te({
|
|
466
|
+
portal: s.portal,
|
|
632
467
|
question: e,
|
|
633
|
-
previousConversationId:
|
|
468
|
+
previousConversationId: o.conversationId || void 0,
|
|
634
469
|
skillId: "doc_ai_assistant",
|
|
635
|
-
persona: "
|
|
470
|
+
persona: "doc-online"
|
|
636
471
|
});
|
|
637
472
|
return {
|
|
638
473
|
status: "success",
|
|
639
474
|
outputMessage: l.trim() || "I could not retrieve a response from the documentation assistant.",
|
|
640
|
-
sharedStatePatch:
|
|
641
|
-
conversationId: c ||
|
|
475
|
+
sharedStatePatch: Ht({
|
|
476
|
+
conversationId: c || o.conversationId
|
|
642
477
|
})
|
|
643
478
|
};
|
|
644
|
-
},
|
|
645
|
-
async ({ groupTitle:
|
|
646
|
-
const e =
|
|
479
|
+
}, et = Y(
|
|
480
|
+
async ({ groupTitle: a }, t) => {
|
|
481
|
+
const e = a.trim();
|
|
647
482
|
if (!e)
|
|
648
483
|
return null;
|
|
649
|
-
const
|
|
650
|
-
I(
|
|
484
|
+
const s = t?.configurable?.context;
|
|
485
|
+
I(s);
|
|
651
486
|
try {
|
|
652
|
-
return (await
|
|
653
|
-
} catch (
|
|
654
|
-
return console.error("Error searching for portal group by title:",
|
|
487
|
+
return (await It(s.portal, { query: `title:${e}`, num: 1 }))?.results[0]?.id || null;
|
|
488
|
+
} catch (o) {
|
|
489
|
+
return console.error("Error searching for portal group by title:", o), null;
|
|
655
490
|
}
|
|
656
491
|
},
|
|
657
492
|
{
|
|
@@ -661,41 +496,193 @@ const Yt = async (s, t) => {
|
|
|
661
496
|
groupTitle: n.string().describe("The portal group title to resolve to a group id.")
|
|
662
497
|
})
|
|
663
498
|
}
|
|
664
|
-
),
|
|
499
|
+
), at = Y(
|
|
500
|
+
async ({ itemTitle: a }, t) => {
|
|
501
|
+
const e = a.trim();
|
|
502
|
+
if (!e)
|
|
503
|
+
return null;
|
|
504
|
+
const s = t?.configurable?.context;
|
|
505
|
+
I(s);
|
|
506
|
+
const { result: o, error: l } = await St(s.portal, e, { num: 1 });
|
|
507
|
+
return l && console.error("Error searching for portal item by title:", l), o?.results[0]?.id || null;
|
|
508
|
+
},
|
|
509
|
+
{
|
|
510
|
+
name: "resolvePortalItemIdByTitle",
|
|
511
|
+
description: 'Resolves an ArcGIS Portal item title to the best-match item id. Use this when a user references an item by title (including hash mentions like #title or #"title with spaces") instead of an explicit item id.',
|
|
512
|
+
schema: n.object({
|
|
513
|
+
itemTitle: n.string().describe("The portal item title to resolve to an item id.")
|
|
514
|
+
})
|
|
515
|
+
}
|
|
516
|
+
);
|
|
517
|
+
function G(a, t = "#") {
|
|
518
|
+
const e = a.match(new RegExp(`\\${t}"([^"]+)"`, "u"));
|
|
519
|
+
if (e?.[1])
|
|
520
|
+
return e[1].trim();
|
|
521
|
+
const s = a.match(new RegExp(`\\${t}([^\\s"']+)`, "u"));
|
|
522
|
+
return s?.[1] ? s[1].trim() : null;
|
|
523
|
+
}
|
|
524
|
+
const st = {
|
|
525
|
+
"portal-content": {
|
|
526
|
+
description: "The main content page of the portal.",
|
|
527
|
+
hints: ["My content", "Content"],
|
|
528
|
+
scope: "root"
|
|
529
|
+
},
|
|
530
|
+
"portal-content-favorites": {
|
|
531
|
+
description: "The My favorites view under Content in the portal.",
|
|
532
|
+
hints: ["My favorites", "Favorites", "Content favorites"],
|
|
533
|
+
scope: "collection"
|
|
534
|
+
},
|
|
535
|
+
"portal-content-group": {
|
|
536
|
+
description: "The My groups view under Content in the portal.",
|
|
537
|
+
hints: ["Content my groups", "My groups content", "Group content"],
|
|
538
|
+
scope: "collection"
|
|
539
|
+
},
|
|
540
|
+
"portal-content-living-atlas": {
|
|
541
|
+
description: "The Living Atlas view under Content in the portal.",
|
|
542
|
+
hints: ["Living Atlas", "Content Living Atlas"],
|
|
543
|
+
scope: "collection"
|
|
544
|
+
},
|
|
545
|
+
"portal-content-organization": {
|
|
546
|
+
description: "The My organization view under Content in the portal.",
|
|
547
|
+
hints: ["My organization content", "Organization content", "Content organization"],
|
|
548
|
+
scope: "collection"
|
|
549
|
+
},
|
|
550
|
+
"portal-gallery": {
|
|
551
|
+
description: "The gallery page of the portal.",
|
|
552
|
+
hints: ["Gallery", "Featured content", "Maps and apps"],
|
|
553
|
+
scope: "collection"
|
|
554
|
+
},
|
|
555
|
+
"portal-group": {
|
|
556
|
+
description: "A specific group page in the portal.",
|
|
557
|
+
hints: ["Group", "group page"],
|
|
558
|
+
scope: "entity"
|
|
559
|
+
},
|
|
560
|
+
"portal-groups": {
|
|
561
|
+
description: "The groups listing page of the portal.",
|
|
562
|
+
hints: ["My groups", "Groups"],
|
|
563
|
+
scope: "collection"
|
|
564
|
+
},
|
|
565
|
+
"portal-groups-featured": {
|
|
566
|
+
description: "The Featured groups view under Groups in the portal.",
|
|
567
|
+
hints: ["Featured groups", "Groups featured"],
|
|
568
|
+
scope: "collection"
|
|
569
|
+
},
|
|
570
|
+
"portal-groups-my": {
|
|
571
|
+
description: "The My groups view under Groups in the portal.",
|
|
572
|
+
hints: ["My groups", "Groups my"],
|
|
573
|
+
scope: "collection"
|
|
574
|
+
},
|
|
575
|
+
"portal-groups-organization": {
|
|
576
|
+
description: "The My organization's groups view under Groups in the portal.",
|
|
577
|
+
hints: ["Organization's groups", "My organization's groups", "Groups organization"],
|
|
578
|
+
scope: "collection"
|
|
579
|
+
},
|
|
580
|
+
"portal-item": {
|
|
581
|
+
description: "A specific item page in the portal.",
|
|
582
|
+
hints: ["Item", "item page"],
|
|
583
|
+
scope: "entity"
|
|
584
|
+
},
|
|
585
|
+
"portal-map-viewer": {
|
|
586
|
+
description: "The Map Viewer app of the portal.",
|
|
587
|
+
hints: ["Map Viewer", "Map", "Open map"],
|
|
588
|
+
scope: "entity"
|
|
589
|
+
},
|
|
590
|
+
"portal-notebooks": {
|
|
591
|
+
description: "The Notebooks home page of the portal.",
|
|
592
|
+
hints: ["Notebooks", "Notebook home", "My notebooks"],
|
|
593
|
+
scope: "collection"
|
|
594
|
+
},
|
|
595
|
+
"portal-scene-viewer": {
|
|
596
|
+
description: "The Scene Viewer app of the portal.",
|
|
597
|
+
hints: ["Scene Viewer", "Scene", "3D scene"],
|
|
598
|
+
scope: "entity"
|
|
599
|
+
},
|
|
600
|
+
"portal-settings-security": {
|
|
601
|
+
description: "The Organization > Settings > Security page of the portal.",
|
|
602
|
+
hints: ["Organization settings", "Security", "Organization > Settings > Security"],
|
|
603
|
+
scope: "entity"
|
|
604
|
+
}
|
|
605
|
+
}, oe = wt(st), re = Object.entries(st).map(
|
|
606
|
+
([a, { description: t, hints: e, scope: s }]) => ` - ${a}: ${t} (scope: ${s}; hints: ${e.join(", ")})`
|
|
607
|
+
).join(`
|
|
608
|
+
`), ne = `
|
|
609
|
+
You decide whether the assistant response should include a navigation action to ArcGIS Portal.
|
|
610
|
+
|
|
611
|
+
Given the user question and assistant response:
|
|
612
|
+
- Decide if a navigation action would help the user complete the task.
|
|
613
|
+
- If yes, choose one destination type:
|
|
614
|
+
${re}
|
|
615
|
+
|
|
616
|
+
Rules:
|
|
617
|
+
- Only suggest navigation when you are highly confident the destination will help complete the user's task.
|
|
618
|
+
- If confidence is below 0.85, set shouldSuggestNavigation=false and destinationType=none.
|
|
619
|
+
- If there is no clear destination from the allowed types, set shouldSuggestNavigation=false and destinationType=none.
|
|
620
|
+
- If no navigation is useful, set shouldSuggestNavigation=false and destinationType=none.
|
|
621
|
+
- Prefer the most specific destination that is clearly supported by the question and response.
|
|
622
|
+
- Use entity-level destinations over collection/root destinations when both could apply and the entity target is explicit.
|
|
623
|
+
- Use collection/root destinations only for generic browsing intent with no specific entity target.
|
|
624
|
+
- If a chosen destination requires parameters, include all required parameters.
|
|
625
|
+
- If required parameters are missing or uncertain, set shouldSuggestNavigation=false and destinationType=none.
|
|
626
|
+
- Do not invent required parameters.
|
|
627
|
+
- Always include a confidence score from 0 to 1 in the output.
|
|
628
|
+
- Confidence means confidence that a navigation suggestion should be shown to the user.
|
|
629
|
+
- If shouldSuggestNavigation=false or destinationType=none, confidence must be <= 0.5.
|
|
630
|
+
- Use confidence >= 0.85 only when shouldSuggestNavigation=true and destinationType is not none.
|
|
631
|
+
|
|
632
|
+
User question:
|
|
633
|
+
{question}
|
|
634
|
+
|
|
635
|
+
Assistant response:
|
|
636
|
+
{response}
|
|
637
|
+
`, K = n.object({
|
|
665
638
|
shouldSuggestNavigation: n.boolean().default(!1),
|
|
666
|
-
destinationType: n.enum(["none",
|
|
639
|
+
destinationType: n.enum(["none", ...oe]).default("none"),
|
|
667
640
|
itemId: n.string().default(""),
|
|
668
|
-
groupId: n.string().default("")
|
|
669
|
-
|
|
641
|
+
groupId: n.string().default(""),
|
|
642
|
+
confidence: n.number().min(0).max(1).default(0)
|
|
643
|
+
}), ie = async (a, t) => {
|
|
670
644
|
await g({ text: "Extracting navigation intent...", agentName: "doc-assistant" }, t);
|
|
671
|
-
const e =
|
|
645
|
+
const e = a.outputMessage.trim();
|
|
672
646
|
if (!e)
|
|
673
647
|
return {};
|
|
674
|
-
const
|
|
675
|
-
question:
|
|
648
|
+
const s = x(a.agentExecutionContext.messages).trim(), o = await U.fromTemplate(ne).format({
|
|
649
|
+
question: s,
|
|
676
650
|
response: e
|
|
677
|
-
}), c = await
|
|
678
|
-
model: await F({ modelTier: "default" }),
|
|
679
|
-
tools: [W, Ht],
|
|
680
|
-
systemPrompt: r,
|
|
681
|
-
responseFormat: j,
|
|
682
|
-
checkpointer: !0
|
|
683
|
-
}).invoke({ messages: s.agentExecutionContext.messages }, t), i = j.parse(c.structuredResponse ?? {});
|
|
651
|
+
}), c = (await D({ modelTier: "fast" })).withStructuredOutput(K), i = K.parse(await c.invoke(o));
|
|
684
652
|
if (!i.shouldSuggestNavigation || i.destinationType === "none")
|
|
685
653
|
return {};
|
|
686
|
-
|
|
687
|
-
|
|
654
|
+
if (i.destinationType === "portal-item" && !i.itemId) {
|
|
655
|
+
const r = G(s, "#");
|
|
656
|
+
r && (i.itemId = await at.invoke({ itemTitle: r }, t) ?? "");
|
|
657
|
+
}
|
|
658
|
+
if (i.destinationType === "portal-group" && !i.groupId) {
|
|
659
|
+
const r = G(s, "$") ?? G(s, "#");
|
|
660
|
+
r && (i.groupId = await et.invoke({ groupTitle: r }, t) ?? "");
|
|
661
|
+
}
|
|
662
|
+
const u = le(i);
|
|
663
|
+
return u ? (await R(u, t), {}) : {};
|
|
688
664
|
};
|
|
689
|
-
function
|
|
690
|
-
destinationType:
|
|
665
|
+
function le({
|
|
666
|
+
destinationType: a,
|
|
691
667
|
itemId: t,
|
|
692
668
|
groupId: e
|
|
693
669
|
}) {
|
|
694
|
-
switch (
|
|
670
|
+
switch (a) {
|
|
695
671
|
case "portal-content":
|
|
696
|
-
|
|
672
|
+
case "portal-content-favorites":
|
|
673
|
+
case "portal-content-group":
|
|
674
|
+
case "portal-content-living-atlas":
|
|
675
|
+
case "portal-content-organization":
|
|
676
|
+
case "portal-gallery":
|
|
697
677
|
case "portal-groups":
|
|
698
|
-
|
|
678
|
+
case "portal-groups-featured":
|
|
679
|
+
case "portal-groups-my":
|
|
680
|
+
case "portal-groups-organization":
|
|
681
|
+
case "portal-map-viewer":
|
|
682
|
+
case "portal-notebooks":
|
|
683
|
+
case "portal-scene-viewer":
|
|
684
|
+
case "portal-settings-security":
|
|
685
|
+
return { destinationType: a };
|
|
699
686
|
case "portal-item":
|
|
700
687
|
return t ? { destinationType: "portal-item", itemId: t } : null;
|
|
701
688
|
case "portal-group":
|
|
@@ -703,152 +690,644 @@ function Zt({
|
|
|
703
690
|
case "none":
|
|
704
691
|
return null;
|
|
705
692
|
default:
|
|
706
|
-
return
|
|
693
|
+
return C(a);
|
|
707
694
|
}
|
|
708
695
|
}
|
|
709
|
-
const
|
|
710
|
-
|
|
696
|
+
const ot = y.Root({
|
|
697
|
+
...k()
|
|
698
|
+
}), ue = () => new N(ot).addNode("answerDocQuestion", se).addNode("extractNavigationIntent", ie).addEdge(P, "answerDocQuestion").addEdge("answerDocQuestion", "extractNavigationIntent").addEdge("extractNavigationIntent", w), ce = String.raw`- **portal-doc-assistant** - General ArcGIS documentation and Portal help assistant:
|
|
699
|
+
- answers general ArcGIS, Portal, Enterprise, and JavaScript SDK questions
|
|
700
|
+
- acts as a fallback when specialized agents are not applicable
|
|
701
|
+
`, pe = {
|
|
702
|
+
id: "portal-doc-assistant",
|
|
703
|
+
name: "Portal Doc Assistant",
|
|
704
|
+
description: ce,
|
|
705
|
+
createGraph: ue,
|
|
706
|
+
workspace: ot
|
|
707
|
+
}, de = () => ({ latestGroupId: null, memory: {} }), q = (a) => {
|
|
708
|
+
const t = a?.agentExecutionContext.sharedState.portalGroupSummaryMemory?.value;
|
|
709
|
+
return t ? { latestGroupId: t.latestGroupId, memory: t.memory } : de();
|
|
710
|
+
}, rt = `
|
|
711
|
+
Shared markdown formatting rules:
|
|
712
|
+
- Use clear markdown headings (##) to separate sections.
|
|
713
|
+
- Use concise bullet points for lists of facts, counts, or signals.
|
|
714
|
+
- Emphasize key metrics with bold labels (for example: **Recent items:** 4).
|
|
715
|
+
- Keep wording direct and analytical; avoid filler language but make sure the language is friendly.
|
|
716
|
+
- Do not include raw internal IDs unless explicitly requested.
|
|
717
|
+
`, me = `
|
|
718
|
+
You answer follow-up questions about ArcGIS group analytics.
|
|
711
719
|
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
720
|
+
${rt}
|
|
721
|
+
|
|
722
|
+
Ground your answer in the provided group analytics summary and context.
|
|
723
|
+
If the answer is not available from the provided context, state that clearly and suggest what to check next.
|
|
724
|
+
|
|
725
|
+
Response rules:
|
|
726
|
+
- Reply in concise markdown with this section structure:
|
|
727
|
+
1) ## Answer
|
|
728
|
+
2) ## Evidence
|
|
729
|
+
3) ## Gaps (only when data is missing)
|
|
730
|
+
- Keep the answer focused on the follow-up question.
|
|
731
|
+
- Do not include internal identifiers.
|
|
732
|
+
- Mark isRelevant=false when the question is not about this group or cannot be grounded in this group context.
|
|
733
|
+
|
|
734
|
+
Group analytics summary:
|
|
735
|
+
{summary}
|
|
736
|
+
|
|
737
|
+
Group full context:
|
|
738
|
+
{fullContext}
|
|
739
|
+
|
|
740
|
+
Question:
|
|
741
|
+
{question}
|
|
742
|
+
`, ge = async (a, t) => {
|
|
743
|
+
await g({ text: "Answering group follow-up...", agentName: "group-analytics" }, t);
|
|
744
|
+
const e = q(a), s = a.groupSummaryGroupId ?? e.latestGroupId, o = s ? e.memory[s] : void 0, l = a.groupSummaryQuestion || x(a.agentExecutionContext.messages);
|
|
745
|
+
return o ? {
|
|
746
|
+
status: "success",
|
|
747
|
+
outputMessage: (await v({
|
|
748
|
+
promptText: me,
|
|
749
|
+
schema: he,
|
|
750
|
+
modelTier: "default",
|
|
751
|
+
inputVariables: {
|
|
752
|
+
summary: o.summary,
|
|
753
|
+
question: l,
|
|
754
|
+
fullContext: JSON.stringify(o.fullContext)
|
|
755
|
+
}
|
|
756
|
+
})).answer
|
|
757
|
+
} : {
|
|
758
|
+
status: "success",
|
|
759
|
+
outputMessage: "I do not have group analytics context yet. Ask me to analyze a group first with analyze group <group id>."
|
|
760
|
+
};
|
|
761
|
+
}, he = n.object({
|
|
762
|
+
answer: n.string(),
|
|
763
|
+
isRelevant: n.boolean()
|
|
764
|
+
}), fe = `
|
|
765
|
+
Classify the user's request for ArcGIS Portal group analytics.
|
|
719
766
|
|
|
720
767
|
Rules:
|
|
721
|
-
-
|
|
722
|
-
-
|
|
723
|
-
-
|
|
724
|
-
-
|
|
725
|
-
-
|
|
726
|
-
-
|
|
768
|
+
- intent="summarize" only when the user explicitly asks to summarize, analyze, overview, or recap a group.
|
|
769
|
+
- intent="followUp" for follow-up questions about a previously analyzed group.
|
|
770
|
+
- intent="navigation" when the user asks to open, go to, navigate to, or view the group page.
|
|
771
|
+
- intent="clarify" when intent or required group target is missing.
|
|
772
|
+
- groupId must be the final resolved group id.
|
|
773
|
+
- If request has explicit group id, set groupId directly.
|
|
774
|
+
- If request references group title (for example $title, $"title with spaces", or plain quoted group title), call resolvePortalGroupIdByTitle and set groupId to the tool result.
|
|
775
|
+
- Never return group titles in output fields.
|
|
776
|
+
- If intent is "followUp", set question to the user's full question/request text.
|
|
777
|
+
- If intent is "navigation", set question="".
|
|
778
|
+
- If intent is "summarize", set question="".
|
|
779
|
+
- If intent is "navigation" and no group is specified, leave groupId empty so the system can navigate to the groups listing page.
|
|
780
|
+
- If hasAnalyticsContext is true and the user asks about the same group context without an explicit summarize/analyze command, prefer "followUp".
|
|
727
781
|
|
|
728
|
-
|
|
782
|
+
Examples:
|
|
783
|
+
- "Analyze group 0123456789abcdef0123456789abcdef" => summarize, groupId="0123456789abcdef0123456789abcdef"
|
|
784
|
+
- "Analyze group $living atlas" => summarize, call resolvePortalGroupIdByTitle("living atlas") and set groupId to tool result
|
|
785
|
+
- "Analyze group $"living atlas basemaps"" => summarize, call resolvePortalGroupIdByTitle("living atlas basemaps") and set groupId to tool result
|
|
786
|
+
- "Is this group active?" with hasAnalyticsContext=true => followUp
|
|
787
|
+
|
|
788
|
+
hasAnalyticsContext:
|
|
789
|
+
{hasAnalyticsContext}
|
|
790
|
+
|
|
791
|
+
User message:
|
|
792
|
+
{userMessage}
|
|
793
|
+
`, ye = async (a, t) => {
|
|
794
|
+
await g({ text: "Analyzing group-analytics intent...", agentName: "group-analytics" }, t);
|
|
795
|
+
const e = x(a.agentExecutionContext.messages), s = !!q(a).latestGroupId, o = await U.fromTemplate(fe).format({
|
|
796
|
+
userMessage: e,
|
|
797
|
+
hasAnalyticsContext: String(s)
|
|
798
|
+
}), c = (await D({ modelTier: "fast" })).withStructuredOutput(J), i = J.parse(await c.invoke(o));
|
|
799
|
+
let u = i.groupId;
|
|
800
|
+
if ((i.intent === "summarize" || i.intent === "navigation") && !u) {
|
|
801
|
+
const f = G(e, "$");
|
|
802
|
+
f && (u = await et.invoke({ groupTitle: f }, t) ?? "");
|
|
803
|
+
}
|
|
804
|
+
const { intent: r, question: p } = i, m = r === "summarize" && !u, d = r === "followUp" && !(p ?? "").trim(), h = r === "clarify" || m || d;
|
|
805
|
+
return {
|
|
806
|
+
groupSummaryIntent: h ? "clarify" : r,
|
|
807
|
+
groupSummaryGroupId: u || null,
|
|
808
|
+
groupSummaryQuestion: p || "",
|
|
809
|
+
status: "success",
|
|
810
|
+
outputMessage: h ? "Please clarify with a group id or title" : ""
|
|
811
|
+
};
|
|
812
|
+
}, J = n.object({
|
|
813
|
+
intent: n.enum(["summarize", "followUp", "navigation", "clarify"]),
|
|
814
|
+
groupId: n.string().default(""),
|
|
815
|
+
question: n.string().default("")
|
|
816
|
+
}), we = async (a, t) => {
|
|
817
|
+
const e = q(a), s = a.groupSummaryGroupId ?? e.latestGroupId;
|
|
818
|
+
return await g({ text: "Preparing navigation...", agentName: "group-analytics" }, t), await R(
|
|
819
|
+
s ? { destinationType: "portal-group", groupId: s } : { destinationType: "portal-groups" },
|
|
820
|
+
t
|
|
821
|
+
), { status: "success" };
|
|
822
|
+
};
|
|
823
|
+
function nt({ timestamp: a, now: t, windowMs: e }) {
|
|
824
|
+
return a ? t - a <= e : !1;
|
|
825
|
+
}
|
|
826
|
+
const be = 720 * 60 * 60 * 1e3;
|
|
827
|
+
function ve(a) {
|
|
828
|
+
const t = Gt(a);
|
|
829
|
+
return {
|
|
830
|
+
id: a.id ?? "",
|
|
831
|
+
title: a.title ?? "",
|
|
832
|
+
description: a.description ?? "",
|
|
833
|
+
snippet: a.snippet ?? "",
|
|
834
|
+
access: a.access ?? null,
|
|
835
|
+
owner: a.owner ?? "",
|
|
836
|
+
tags: a.tags ?? [],
|
|
837
|
+
created: a.created?.getTime(),
|
|
838
|
+
modified: a.modified?.getTime(),
|
|
839
|
+
isInvitationOnly: a.isInvitationOnly,
|
|
840
|
+
sourceSignals: {
|
|
841
|
+
capabilities: Nt(a),
|
|
842
|
+
membershipAccess: Ct(a),
|
|
843
|
+
isOpenData: At(a),
|
|
844
|
+
isDistributedCollaborationGroup: Tt(a),
|
|
845
|
+
orgId: t.orgId,
|
|
846
|
+
hiddenMembers: t.hiddenMembers,
|
|
847
|
+
isViewOnly: t.isViewOnly,
|
|
848
|
+
isReadOnly: t.isReadOnly,
|
|
849
|
+
leavingDisallowed: t.leavingDisallowed
|
|
850
|
+
}
|
|
851
|
+
};
|
|
852
|
+
}
|
|
853
|
+
async function Ie(a) {
|
|
854
|
+
const t = { owner: a.owner ?? "", admins: [], users: [] };
|
|
855
|
+
try {
|
|
856
|
+
return await a.fetchMembers();
|
|
857
|
+
} catch (e) {
|
|
858
|
+
return console.warn("Unable to fetch group members for analytics context", e), t;
|
|
859
|
+
}
|
|
860
|
+
}
|
|
861
|
+
function xe(a) {
|
|
862
|
+
return a.map((t) => ({
|
|
863
|
+
id: t.id ?? "",
|
|
864
|
+
title: t.title ?? "Untitled",
|
|
865
|
+
type: t.type ?? "Unknown",
|
|
866
|
+
owner: t.owner ?? "",
|
|
867
|
+
created: t.created?.getTime(),
|
|
868
|
+
modified: t.modified?.getTime()
|
|
869
|
+
}));
|
|
870
|
+
}
|
|
871
|
+
function Se(a, t) {
|
|
872
|
+
return a.filter(
|
|
873
|
+
(e) => e.modified ? nt({ timestamp: e.modified, now: t, windowMs: be }) : !1
|
|
874
|
+
);
|
|
875
|
+
}
|
|
876
|
+
function Me(a) {
|
|
877
|
+
const t = /* @__PURE__ */ new Map();
|
|
878
|
+
for (const e of a)
|
|
879
|
+
t.set(e.type, (t.get(e.type) ?? 0) + 1);
|
|
880
|
+
return [...t.entries()].sort((e, s) => s[1] - e[1] || e[0].localeCompare(s[0])).slice(0, 6).map(([e, s]) => ({ type: e, count: s }));
|
|
881
|
+
}
|
|
882
|
+
async function Ge(a) {
|
|
883
|
+
const t = await a.queryItems({ num: 20, sortField: "modified", sortOrder: "desc" }), e = xe(t.results), s = Date.now();
|
|
884
|
+
return {
|
|
885
|
+
total: t.total,
|
|
886
|
+
topItems: e,
|
|
887
|
+
recentlyModifiedItems: Se(e, s),
|
|
888
|
+
topItemTypes: Me(e)
|
|
889
|
+
};
|
|
890
|
+
}
|
|
891
|
+
async function Te(a, t) {
|
|
892
|
+
if (!t)
|
|
893
|
+
return { error: { code: "missingGroupId", message: "Group id is required." } };
|
|
894
|
+
try {
|
|
895
|
+
const s = (await a.queryGroups({ query: `id:${t}`, num: 1 })).results[0];
|
|
896
|
+
if (!s)
|
|
897
|
+
return { error: { code: "groupNotFound", message: `No group found for id: ${t}` } };
|
|
898
|
+
const o = ve(s), l = await Ie(s), c = await Ge(s);
|
|
899
|
+
return { result: { group: o, members: l, items: c } };
|
|
900
|
+
} catch (e) {
|
|
901
|
+
return console.error("Error fetching portal group analytics context:", e), { error: { code: "unhandledError" } };
|
|
902
|
+
}
|
|
903
|
+
}
|
|
904
|
+
const Ae = `
|
|
905
|
+
You summarize ArcGIS Portal groups based on structured context and deterministic activity signals.
|
|
906
|
+
|
|
907
|
+
${rt}
|
|
908
|
+
|
|
909
|
+
Output format requirements:
|
|
910
|
+
- Return concise markdown with clear sections in this order:
|
|
911
|
+
1) Overview
|
|
912
|
+
2) Activity
|
|
913
|
+
3) Members
|
|
914
|
+
4) Content Theme
|
|
915
|
+
5) Contribution Model
|
|
916
|
+
6) Unknowns / Data Gaps
|
|
917
|
+
- Keep total response about 180-280 words unless the user asked for extra detail.
|
|
918
|
+
- Avoid internal-only implementation details and do not expose raw IDs unless user explicitly asks.
|
|
919
|
+
|
|
920
|
+
Reasoning rules:
|
|
921
|
+
- Use deterministicSignals as the source of truth for active/recent status.
|
|
922
|
+
- If group description/snippet are empty, infer purpose from tags, item title patterns, and item type distribution.
|
|
923
|
+
- For members, report owner/admin/user counts when available; if unavailable due to permission scope, explicitly say so.
|
|
924
|
+
- For contribution model, use membershipAccess, capabilities, and sourceJSON flags to characterize collaboration vs distribution behavior.
|
|
925
|
+
- Be explicit when signals are heuristic or unavailable.
|
|
926
|
+
|
|
927
|
+
Follow-up prompt rules:
|
|
928
|
+
- Generate exactly 3 follow-up prompts.
|
|
929
|
+
- Write them as direct first-person user chat prompts that can be clicked and sent as-is.
|
|
930
|
+
- Do not write meta-questions such as "Would you like..." or "Do you want me to...".
|
|
931
|
+
- Keep each prompt short, specific, and actionable.
|
|
932
|
+
- Every prompt must be answerable using only the provided group context and deterministic signals.
|
|
933
|
+
- Do not require external data, navigation, or additional fetches.
|
|
934
|
+
- Tailor each prompt to this specific group's available signals (content mix, activity, members, and contribution model).
|
|
935
|
+
- Avoid repeating phrasing from prior prompts or using generic template wording.
|
|
936
|
+
- If a signal is unavailable (for example members), do not ask follow-ups that depend on that missing signal.
|
|
937
|
+
|
|
938
|
+
Group context:
|
|
939
|
+
{context}
|
|
940
|
+
|
|
941
|
+
Deterministic signals:
|
|
942
|
+
{deterministicSignals}
|
|
943
|
+
`, Ce = 2160 * 60 * 60 * 1e3, Ne = async (a, t) => {
|
|
944
|
+
const e = a.groupSummaryGroupId;
|
|
945
|
+
if (!e)
|
|
946
|
+
return {
|
|
947
|
+
status: "success",
|
|
948
|
+
outputMessage: 'Please clarify with analyze group <group id>, analyze group $<title>, or analyze group $"<title with spaces>".'
|
|
949
|
+
};
|
|
950
|
+
await g({ text: `Analyzing group ${e}...`, agentName: "group-analytics" }, t);
|
|
951
|
+
const s = t?.configurable?.context;
|
|
952
|
+
I(s);
|
|
953
|
+
const { result: o, error: l } = await Te(s.portal, e);
|
|
954
|
+
if (l || !o)
|
|
955
|
+
return await g({ text: "Failed to fetch group context", agentName: "group-analytics" }, t), {
|
|
956
|
+
status: "success",
|
|
957
|
+
outputMessage: "Unable to retrieve group context for analytics."
|
|
958
|
+
};
|
|
959
|
+
const { group: c, items: i } = o, u = Date.now(), r = c.modified, p = r ? nt({ timestamp: r, now: u, windowMs: Ce }) : !1, m = i.recentlyModifiedItems.length, d = m > 0, h = p || d, f = await v({
|
|
960
|
+
promptText: Ae,
|
|
961
|
+
schema: Pe,
|
|
962
|
+
modelTier: "default",
|
|
963
|
+
inputVariables: {
|
|
964
|
+
context: JSON.stringify(o),
|
|
965
|
+
deterministicSignals: JSON.stringify({
|
|
966
|
+
isGroupActive: h,
|
|
967
|
+
isGroupRecentlyModified: p,
|
|
968
|
+
hasRecentlyAddedOrUpdatedContent: d,
|
|
969
|
+
recentItemCount: m
|
|
970
|
+
})
|
|
971
|
+
}
|
|
972
|
+
}), { followUpQuestions: b, summary: S } = f, ut = q(a), ct = {
|
|
973
|
+
latestGroupId: e,
|
|
974
|
+
memory: {
|
|
975
|
+
...ut.memory,
|
|
976
|
+
[e]: { summary: S, followUpQuestions: b, fullContext: o }
|
|
977
|
+
}
|
|
978
|
+
};
|
|
979
|
+
return b.length && await E({ type: "suggested-prompts", data: { prompts: b } }, t), {
|
|
980
|
+
status: "success",
|
|
981
|
+
outputMessage: S,
|
|
982
|
+
sharedStatePatch: { portalGroupSummaryMemory: { value: ct } }
|
|
983
|
+
};
|
|
984
|
+
}, Pe = n.object({
|
|
985
|
+
summary: n.string(),
|
|
986
|
+
followUpQuestions: n.array(n.string()).default([])
|
|
987
|
+
}), z = (a, t) => t ?? a, it = y.Root({
|
|
988
|
+
...k(),
|
|
989
|
+
groupSummaryIntent: y({
|
|
990
|
+
reducer: z,
|
|
991
|
+
default: () => "clarify"
|
|
992
|
+
}),
|
|
993
|
+
groupSummaryGroupId: y({
|
|
994
|
+
reducer: z,
|
|
995
|
+
default: () => null
|
|
996
|
+
}),
|
|
997
|
+
groupSummaryQuestion: y({
|
|
998
|
+
reducer: z,
|
|
999
|
+
default: () => ""
|
|
1000
|
+
})
|
|
1001
|
+
}), ke = () => new N(it).addNode("detectGroupSummaryIntent", ye).addNode("summarizePortalGroup", Ne).addNode("answerGroupSummaryFollowUp", ge).addNode("suggestGroupSummaryNavigation", we).addEdge(P, "detectGroupSummaryIntent").addConditionalEdges("detectGroupSummaryIntent", (t) => t.groupSummaryIntent === "summarize" ? "summarizePortalGroup" : t.groupSummaryIntent === "followUp" ? "answerGroupSummaryFollowUp" : t.groupSummaryIntent === "navigation" ? "suggestGroupSummaryNavigation" : w).addEdge("summarizePortalGroup", w).addEdge("answerGroupSummaryFollowUp", w).addEdge("suggestGroupSummaryNavigation", w), qe = String.raw`- **portal-group-analytics** - Portal group analytics assistant:
|
|
1002
|
+
- summarizes ArcGIS portal groups from group context and sourceJSON details
|
|
1003
|
+
- answers follow-up questions grounded in the summarized group
|
|
1004
|
+
- suggests navigation to groups when relevant
|
|
1005
|
+
`, ze = {
|
|
1006
|
+
id: "portal-group-analytics",
|
|
1007
|
+
name: "Portal Group Analytics",
|
|
1008
|
+
description: qe,
|
|
1009
|
+
createGraph: ke,
|
|
1010
|
+
workspace: it
|
|
1011
|
+
}, $e = () => ({ latestItemId: null, memory: {} }), O = (a) => {
|
|
1012
|
+
const t = a?.agentExecutionContext.sharedState.portalItemAnalyticsSummaryMemory?.value;
|
|
1013
|
+
return t ? { latestItemId: t.latestItemId, memory: t.memory } : $e();
|
|
1014
|
+
}, W = n.object({
|
|
1015
|
+
intent: n.enum(["summarize", "followUp", "clarify"]),
|
|
1016
|
+
itemId: n.string().default(""),
|
|
1017
|
+
question: n.string().default("")
|
|
1018
|
+
}), Ee = n.object({ summary: n.string(), followUpQuestions: n.array(n.string()).default([]) }), De = n.object({ answer: n.string(), isRelevant: n.boolean() }), Ue = `
|
|
1019
|
+
You answer follow-up questions about an ArcGIS item.
|
|
1020
|
+
|
|
1021
|
+
Ground your answer in the provided item context.
|
|
1022
|
+
If the answer is not available from the provided context, state that clearly and suggest what to check next.
|
|
1023
|
+
|
|
1024
|
+
Response rules:
|
|
1025
|
+
- Reply in concise markdown.
|
|
1026
|
+
- Keep the answer focused on the follow-up question.
|
|
1027
|
+
- Do not include internal identifiers.
|
|
1028
|
+
- Mark isRelevant=false when the question is not about this item or cannot be grounded in this item context.
|
|
1029
|
+
|
|
1030
|
+
Item summary:
|
|
1031
|
+
{summary}
|
|
1032
|
+
|
|
1033
|
+
Item full context
|
|
1034
|
+
{fullContext}
|
|
1035
|
+
|
|
1036
|
+
Question:
|
|
729
1037
|
{question}
|
|
1038
|
+
`, Re = async (a, t) => {
|
|
1039
|
+
await g({ text: "Answering follow-up...", agentName: "analytics" }, t);
|
|
1040
|
+
const e = O(a), s = a.analyticsItemId ?? e.latestItemId, o = s ? e.memory[s] : void 0, l = a.analyticsQuestion || x(a.agentExecutionContext.messages);
|
|
1041
|
+
return o ? {
|
|
1042
|
+
status: "success",
|
|
1043
|
+
outputMessage: (await v({
|
|
1044
|
+
promptText: Ue,
|
|
1045
|
+
schema: De,
|
|
1046
|
+
modelTier: "default",
|
|
1047
|
+
inputVariables: {
|
|
1048
|
+
summary: o.summary,
|
|
1049
|
+
question: l,
|
|
1050
|
+
fullContext: JSON.stringify(o.fullContext)
|
|
1051
|
+
}
|
|
1052
|
+
})).answer
|
|
1053
|
+
} : {
|
|
1054
|
+
status: "success",
|
|
1055
|
+
outputMessage: "I don't have enough information yet. Please ask me to summarize the item first using summarize item <item id>."
|
|
1056
|
+
};
|
|
1057
|
+
}, Oe = `
|
|
1058
|
+
Classify the user analytics request.
|
|
730
1059
|
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
1060
|
+
Rules:
|
|
1061
|
+
- intent="summarize" only when the user explicitly asks to summarize/overview/recap an item.
|
|
1062
|
+
- intent="followUp" for analytical questions about item details, including schema/fields/attributes/layers.
|
|
1063
|
+
- intent="clarify" when neither summarize nor follow-up intent is clear.
|
|
1064
|
+
- itemId must be the final resolved item id.
|
|
1065
|
+
- If request has explicit item id, set itemId directly.
|
|
1066
|
+
- If request references item title (for example #title, #"title with spaces", or plain quoted title), call resolvePortalItemIdByTitle and set itemId to the returned value.
|
|
1067
|
+
- Never return item titles in output fields.
|
|
1068
|
+
- If intent is "followUp", set question to the user's full question/request text.
|
|
1069
|
+
- If intent is "summarize", set question="".
|
|
1070
|
+
- When user asks to show/list/explain fields, schema, attributes, columns, or layer details, classify as "followUp" unless they explicitly request a summary.
|
|
1071
|
+
- If hasSummaryContext is true, prefer "followUp" for detail-oriented requests that do not explicitly ask to summarize.
|
|
1072
|
+
|
|
1073
|
+
Examples:
|
|
1074
|
+
- "Summarize item 0123456789abcdef0123456789abcdef" => summarize, itemId="0123456789abcdef0123456789abcdef"
|
|
1075
|
+
- "Summarize item #california" => summarize, call resolvePortalItemIdByTitle("california") and set itemId to tool result
|
|
1076
|
+
- "Summarize item #"california farmland"" => summarize, call resolvePortalItemIdByTitle("california farmland") and set itemId to tool result
|
|
1077
|
+
- "Show the layer's available fields" => followUp
|
|
1078
|
+
- "List attributes and explain what status means" => followUp
|
|
1079
|
+
- "What fields are available?" with hasSummaryContext=true => followUp
|
|
1080
|
+
- "Give me an overview of item 0123456789abcdef0123456789abcdef" => summarize
|
|
1081
|
+
|
|
1082
|
+
hasSummaryContext:
|
|
1083
|
+
{hasSummaryContext}
|
|
1084
|
+
|
|
1085
|
+
User message:
|
|
1086
|
+
{userMessage}
|
|
1087
|
+
`, Fe = async (a, t) => {
|
|
1088
|
+
await g({ text: "Analyzing intent...", agentName: "analytics" }, t);
|
|
1089
|
+
const e = x(a.agentExecutionContext.messages), s = !!O(a).latestItemId, o = await U.fromTemplate(Oe).format({
|
|
1090
|
+
userMessage: e,
|
|
1091
|
+
hasSummaryContext: String(s)
|
|
1092
|
+
}), c = (await D({ modelTier: "fast" })).withStructuredOutput(W), i = W.parse(await c.invoke(o));
|
|
1093
|
+
let u = i.itemId;
|
|
1094
|
+
if (i.intent === "summarize" && !u) {
|
|
1095
|
+
const f = G(e, "#");
|
|
1096
|
+
f && (u = await at.invoke({ itemTitle: f }, t) ?? "");
|
|
1097
|
+
}
|
|
1098
|
+
const { intent: r, question: p } = i, h = r === "clarify" || r === "summarize" && !u || r === "followUp" && !p;
|
|
1099
|
+
return {
|
|
1100
|
+
agentExecutionContext: { ...a.agentExecutionContext },
|
|
1101
|
+
analyticsIntent: h ? "clarify" : r,
|
|
1102
|
+
analyticsItemId: u || null,
|
|
1103
|
+
analyticsQuestion: p || "",
|
|
1104
|
+
status: "success",
|
|
1105
|
+
outputMessage: h ? 'Please clarify with summarize item <item id>, summarize item #<title>, or summarize item #"<title with spaces>".' : ""
|
|
1106
|
+
};
|
|
1107
|
+
}, Ve = `
|
|
1108
|
+
You are a item summary tool for ArcGIS. Your job is to summarize an item's info based on the provided context.
|
|
1109
|
+
Summary rules:
|
|
1110
|
+
- The summary should be concise markdown, make sure to format the output nicely so it's easy to read.
|
|
1111
|
+
- Target length: 80-150 words.
|
|
1112
|
+
- Provide one short descriptive paragraph.
|
|
1113
|
+
- Also propose 3 concise follow-up questions grounded in the item summary.
|
|
1114
|
+
- Keep follow-up questions specific and actionable.
|
|
1115
|
+
Follow-up questions rules:
|
|
1116
|
+
- These questions should be in the format of a prompt that the user can click on.
|
|
1117
|
+
- Make sure the questions are relevant to the item summary and that you can answer based solely on the provided context.
|
|
1118
|
+
Do not include internal identifiers.
|
|
1119
|
+
If the user asks for a detailed summary, you may expand the response up to 300 words.
|
|
1120
|
+
Item context:
|
|
1121
|
+
{context}
|
|
1122
|
+
`, je = async (a, t) => {
|
|
1123
|
+
const e = a.analyticsItemId;
|
|
1124
|
+
if (!e)
|
|
1125
|
+
return {
|
|
1126
|
+
status: "success",
|
|
1127
|
+
outputMessage: 'Please clarify with summarize item <item id>, summarize item #<title>, or summarize item #"<title with spaces>".'
|
|
1128
|
+
};
|
|
1129
|
+
await g({ text: `Summarizing item ${e}...`, agentName: "analytics" }, t);
|
|
1130
|
+
const s = t?.configurable?.context;
|
|
1131
|
+
I(s);
|
|
1132
|
+
const { portal: o, user: l } = s, { result: c, error: i } = await Mt(l, o, e);
|
|
1133
|
+
if (i || !c)
|
|
1134
|
+
return await g({ text: "Failed to get item context for summarization", agentName: "analytics" }, t), {
|
|
1135
|
+
status: "success",
|
|
1136
|
+
outputMessage: "Unable to retrieve item context for summarization."
|
|
1137
|
+
};
|
|
1138
|
+
const { context: u } = c, r = await v({
|
|
1139
|
+
promptText: Ve,
|
|
1140
|
+
schema: Ee,
|
|
1141
|
+
modelTier: "default",
|
|
1142
|
+
inputVariables: { context: JSON.stringify(u) }
|
|
1143
|
+
}), { followUpQuestions: p, summary: m } = r, d = O(a), h = {
|
|
1144
|
+
latestItemId: e,
|
|
1145
|
+
memory: {
|
|
1146
|
+
...d.memory,
|
|
1147
|
+
[e]: { summary: m, followUpQuestions: p, fullContext: u }
|
|
1148
|
+
}
|
|
1149
|
+
};
|
|
1150
|
+
return p.length && await E({ type: "suggested-prompts", data: { prompts: p } }, t), {
|
|
1151
|
+
status: "success",
|
|
1152
|
+
outputMessage: m,
|
|
1153
|
+
sharedStatePatch: { portalItemAnalyticsSummaryMemory: { value: h } }
|
|
1154
|
+
};
|
|
1155
|
+
}, $ = (a, t) => t ?? a, lt = y.Root({
|
|
1156
|
+
...k(),
|
|
1157
|
+
// States shared only across nodes in the graph, not between invocations
|
|
1158
|
+
analyticsIntent: y({
|
|
1159
|
+
reducer: $,
|
|
1160
|
+
default: () => "clarify"
|
|
1161
|
+
}),
|
|
1162
|
+
analyticsItemId: y({
|
|
1163
|
+
reducer: $,
|
|
1164
|
+
default: () => null
|
|
1165
|
+
}),
|
|
1166
|
+
analyticsQuestion: y({
|
|
1167
|
+
reducer: $,
|
|
1168
|
+
default: () => ""
|
|
1169
|
+
})
|
|
1170
|
+
}), Le = () => new N(lt).addNode("detectAnalyticsIntent", Fe).addNode("summarizePortalItem", je).addNode("answerAnalyticsFollowUp", Re).addEdge(P, "detectAnalyticsIntent").addConditionalEdges("detectAnalyticsIntent", (t) => t.analyticsIntent === "summarize" ? "summarizePortalItem" : t.analyticsIntent === "followUp" ? "answerAnalyticsFollowUp" : w).addEdge("summarizePortalItem", w).addEdge("answerAnalyticsFollowUp", w), Be = String.raw`- **portal-item-analytics** - Portal item analytics assistant:
|
|
1171
|
+
- answers questions about one specific ArcGIS portal item when item context is present
|
|
1172
|
+
- summarizes item details, metadata, and context grounded in that item
|
|
1173
|
+
- suggests follow-up prompts grounded in the same item
|
|
1174
|
+
- use for item-specific requests, not for gallery browsing, featured content, or opening Map Viewer
|
|
1175
|
+
`, Qe = {
|
|
1176
|
+
id: "portal-item-analytics",
|
|
1177
|
+
name: "Portal Item Analytics",
|
|
1178
|
+
description: Be,
|
|
1179
|
+
createGraph: Le,
|
|
1180
|
+
workspace: lt
|
|
1181
|
+
}, Ke = gt`:host{height:100%;border-width:1px;border-style:solid;border-color:var(--calcite-color-border-3);display:block;width:100%;--tw-shadow: 0 1px 6px -1px rgba(0, 0, 0, .16), 0 1px 2px -1px rgba(0, 0, 0, .08);--tw-shadow-colored: 0 1px 6px -1px var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.chat-entry{display:flex;flex-direction:column;gap:.75rem;width:100%}.chat-actions{display:flex;justify-content:flex-end;gap:.5rem}.header-actions{display:flex;gap:.5rem;padding-inline-start:.75rem}.navigation-block{display:flex;flex-direction:column;align-items:stretch;gap:.35rem;margin-top:.5rem}.navigation-button{width:100%;margin-block:.25rem}.navigation-block-description{font-size:.75rem;color:var(--calcite-color-text-3)}`;
|
|
1182
|
+
function Je(a, t) {
|
|
1183
|
+
if (!t)
|
|
1184
|
+
return;
|
|
1185
|
+
const { destinationType: e } = a;
|
|
746
1186
|
switch (e) {
|
|
747
1187
|
case "portal-content":
|
|
748
|
-
|
|
1188
|
+
case "portal-content-favorites":
|
|
1189
|
+
case "portal-content-group":
|
|
1190
|
+
case "portal-content-living-atlas":
|
|
1191
|
+
case "portal-content-organization":
|
|
1192
|
+
case "portal-gallery":
|
|
749
1193
|
case "portal-groups":
|
|
750
|
-
|
|
1194
|
+
case "portal-groups-featured":
|
|
1195
|
+
case "portal-groups-my":
|
|
1196
|
+
case "portal-groups-organization":
|
|
1197
|
+
case "portal-map-viewer":
|
|
1198
|
+
case "portal-notebooks":
|
|
1199
|
+
case "portal-scene-viewer":
|
|
1200
|
+
case "portal-settings-security":
|
|
1201
|
+
return t[e];
|
|
751
1202
|
case "portal-item":
|
|
752
|
-
return
|
|
1203
|
+
return t[e]?.(a.itemId);
|
|
753
1204
|
case "portal-group":
|
|
754
|
-
return
|
|
1205
|
+
return t[e]?.(a.groupId);
|
|
755
1206
|
default:
|
|
756
|
-
return
|
|
1207
|
+
return C(e);
|
|
757
1208
|
}
|
|
758
|
-
}
|
|
759
|
-
|
|
1209
|
+
}
|
|
1210
|
+
function We(a) {
|
|
1211
|
+
const t = Bt.safeParse(a);
|
|
1212
|
+
return t.success ? t.data : void 0;
|
|
1213
|
+
}
|
|
1214
|
+
class _e extends dt {
|
|
760
1215
|
constructor() {
|
|
761
|
-
super(...arguments), this.t9n =
|
|
762
|
-
const e = t.detail,
|
|
763
|
-
if (!
|
|
1216
|
+
super(...arguments), this.t9n = ft({ blocking: !0 }), this.assistantEl = T(), this.formEl = T(), this.voiceInputEl = T(), this.inputEl = T(), this.navigationSlotElements = /* @__PURE__ */ new Map(), this.handleSlottableRequest = (t) => {
|
|
1217
|
+
const e = t.detail, s = e.data?.block;
|
|
1218
|
+
if (!s)
|
|
764
1219
|
return;
|
|
765
|
-
const
|
|
766
|
-
|
|
767
|
-
}, this.inputText = "", this.showVoiceInput = !0, this.isListening = !1, this.isVoiceInputDisabled = !1, this.interrupt = null, this.autoDestroyDisabled = !1, this.defaultClosed = !1, this.arcgisPortalNavigationRequest =
|
|
1220
|
+
const o = this.getNavigationAction(s);
|
|
1221
|
+
o && this.upsertNavigationSlotElement(e.slotName, o);
|
|
1222
|
+
}, this.inputText = "", this.showVoiceInput = !0, this.isListening = !1, this.isVoiceInputDisabled = !1, this.interrupt = null, this.autoDestroyDisabled = !1, this.defaultClosed = !1, this.arcgisPortalNavigationRequest = mt();
|
|
768
1223
|
}
|
|
769
1224
|
static {
|
|
770
|
-
this.properties = { inputText: 16, showVoiceInput: 16, isListening: 16, isVoiceInputDisabled: 16, interrupt: 16, autoDestroyDisabled: 5, portal: 0, user: 0, config: 0, defaultClosed: 5 };
|
|
1225
|
+
this.properties = { inputText: 16, showVoiceInput: 16, isListening: 16, isVoiceInputDisabled: 16, interrupt: 16, autoDestroyDisabled: 5, portal: 0, user: 0, config: 0, navigationTargetMap: 0, defaultClosed: 5 };
|
|
771
1226
|
}
|
|
772
1227
|
static {
|
|
773
|
-
this.styles =
|
|
1228
|
+
this.styles = Ke;
|
|
774
1229
|
}
|
|
775
1230
|
getNavigationAction(t) {
|
|
776
|
-
if (t?.type !==
|
|
1231
|
+
if (t?.type !== X)
|
|
777
1232
|
return;
|
|
778
|
-
const e =
|
|
1233
|
+
const e = We(t.data);
|
|
779
1234
|
if (!e)
|
|
780
1235
|
return;
|
|
781
|
-
const
|
|
782
|
-
if (
|
|
783
|
-
return { href:
|
|
1236
|
+
const s = Je(e, this.navigationTargetMap);
|
|
1237
|
+
if (s)
|
|
1238
|
+
return { href: s, targetDetail: e, label: this.getNavigationText(e.destinationType) };
|
|
784
1239
|
}
|
|
785
1240
|
upsertNavigationSlotElement(t, e) {
|
|
786
|
-
const
|
|
787
|
-
if (!
|
|
1241
|
+
const s = this.assistantEl.value;
|
|
1242
|
+
if (!s)
|
|
788
1243
|
return;
|
|
789
|
-
let
|
|
790
|
-
|
|
1244
|
+
let o = this.navigationSlotElements.get(t);
|
|
1245
|
+
o || (o = document.createElement("div"), o.slot = t, this.navigationSlotElements.set(t, o), s.append(o)), ht(M`<div><calcite-button class="navigation-button" appearance=outline width=full .href=${e.href} icon-end=launch @click=${(l) => {
|
|
791
1246
|
l.preventDefault(), this.arcgisPortalNavigationRequest.emit({
|
|
792
1247
|
href: e.href,
|
|
793
1248
|
targetDetail: e.targetDetail
|
|
794
1249
|
});
|
|
795
|
-
}}>${e.label}</calcite-button>${e.description ?
|
|
1250
|
+
}}>${e.label}</calcite-button>${e.description ? M`<div class="navigation-block-description">${e.description}</div>` : null}</div>`, o);
|
|
796
1251
|
}
|
|
797
1252
|
getNavigationText(t) {
|
|
798
1253
|
const e = this.t9n.navigation;
|
|
799
1254
|
switch (t) {
|
|
800
1255
|
case "portal-content":
|
|
801
1256
|
return e.openContent;
|
|
1257
|
+
case "portal-content-favorites":
|
|
1258
|
+
return e.openContentFavorites;
|
|
1259
|
+
case "portal-content-group":
|
|
1260
|
+
return e.openContentGroup;
|
|
1261
|
+
case "portal-content-living-atlas":
|
|
1262
|
+
return e.openContentLivingAtlas;
|
|
1263
|
+
case "portal-content-organization":
|
|
1264
|
+
return e.openContentOrganization;
|
|
1265
|
+
case "portal-gallery":
|
|
1266
|
+
return e.openGallery;
|
|
802
1267
|
case "portal-groups":
|
|
803
1268
|
return e.openGroups;
|
|
1269
|
+
case "portal-groups-featured":
|
|
1270
|
+
return e.openGroupsFeatured;
|
|
1271
|
+
case "portal-groups-my":
|
|
1272
|
+
return e.openGroupsMy;
|
|
1273
|
+
case "portal-groups-organization":
|
|
1274
|
+
return e.openGroupsOrganization;
|
|
1275
|
+
case "portal-map-viewer":
|
|
1276
|
+
return e.openMapViewer;
|
|
1277
|
+
case "portal-notebooks":
|
|
1278
|
+
return e.openNotebooks;
|
|
1279
|
+
case "portal-scene-viewer":
|
|
1280
|
+
return e.openSceneViewer;
|
|
1281
|
+
case "portal-settings-security":
|
|
1282
|
+
return e.openOrganizationSettingsSecurity;
|
|
804
1283
|
case "portal-item":
|
|
805
1284
|
return e.openItem;
|
|
806
1285
|
case "portal-group":
|
|
807
1286
|
return e.openGroup;
|
|
808
1287
|
default:
|
|
809
|
-
return
|
|
1288
|
+
return C(t);
|
|
810
1289
|
}
|
|
811
1290
|
}
|
|
812
1291
|
render() {
|
|
813
|
-
const { t9n: t, inputText: e, portal:
|
|
814
|
-
return
|
|
815
|
-
this.interrupt =
|
|
1292
|
+
const { t9n: t, inputText: e, portal: s, user: o, navigationTargetMap: l, showVoiceInput: c, isListening: i, isVoiceInputDisabled: u } = this;
|
|
1293
|
+
return M`<arcgis-assistant log-enabled keep-suggested-prompts .heading=${t.heading} .entryMessage=${t.entryMessage} @arcgisSlottableRequest=${this.handleSlottableRequest} @arcgisInterrupt=${({ detail: r }) => {
|
|
1294
|
+
this.interrupt = r;
|
|
816
1295
|
}} @arcgisInterruptCancel=${() => {
|
|
817
1296
|
this.interrupt = null;
|
|
818
1297
|
}} @arcgisInterruptSubmit=${() => {
|
|
819
1298
|
this.interrupt = null;
|
|
820
|
-
}} @arcgisPromptSelect=${({ detail:
|
|
821
|
-
this.inputText =
|
|
1299
|
+
}} @arcgisPromptSelect=${({ detail: r }) => {
|
|
1300
|
+
this.inputText = r.prompt, requestAnimationFrame(() => {
|
|
822
1301
|
this.inputEl.value?.focusTextArea();
|
|
823
1302
|
});
|
|
824
|
-
}} ${
|
|
825
|
-
|
|
826
|
-
const
|
|
827
|
-
|
|
828
|
-
}} ${
|
|
829
|
-
|
|
830
|
-
}} @arcgisUserMentionableTextAreaChange=${({ detail:
|
|
831
|
-
this.inputText =
|
|
832
|
-
}} ${
|
|
1303
|
+
}} ${A(this.assistantEl)}><div slot=header-actions-start class="header-actions"><calcite-icon icon=effects></calcite-icon></div><form slot=chat-entry class="chat-entry" @submit=${(r) => {
|
|
1304
|
+
r.preventDefault();
|
|
1305
|
+
const p = e.trim();
|
|
1306
|
+
p && (this.assistantEl.value?.submitMessage(p), this.inputText = "");
|
|
1307
|
+
}} ${A(this.formEl)}><arcgis-portal-mentionable-text-area .portal=${s} .user=${o} rows=3 .popoverListLabel=${t.mentionEntities} .placeholder=${t.placeholder} .value=${e} @arcgisUserMentionableTextAreaKeyDown=${({ detail: r }) => {
|
|
1308
|
+
r.key === "Enter" && !r.shiftKey && (r.preventDefault(), this.formEl.value?.requestSubmit());
|
|
1309
|
+
}} @arcgisUserMentionableTextAreaChange=${({ detail: r }) => {
|
|
1310
|
+
this.inputText = r ?? "";
|
|
1311
|
+
}} ${A(this.inputEl)}></arcgis-portal-mentionable-text-area><div class="chat-actions"><arcgis-portal-voice-input @arcgisVoiceInputStart=${() => {
|
|
833
1312
|
this.isListening = !0, this.isVoiceInputDisabled = !1;
|
|
834
1313
|
}} @arcgisVoiceInputStop=${() => {
|
|
835
1314
|
this.isListening = !1, this.isVoiceInputDisabled = !1;
|
|
836
|
-
}} @arcgisVoiceInputError=${(
|
|
837
|
-
|
|
838
|
-
}} @arcgisVoiceInputInterimTranscription=${(
|
|
839
|
-
this.inputText =
|
|
840
|
-
}} ${
|
|
1315
|
+
}} @arcgisVoiceInputError=${(r) => {
|
|
1316
|
+
r.detail.errorCode === "not-supported" && (this.showVoiceInput = !1);
|
|
1317
|
+
}} @arcgisVoiceInputInterimTranscription=${(r) => {
|
|
1318
|
+
this.inputText = r.detail.text;
|
|
1319
|
+
}} ${A(this.voiceInputEl)}></arcgis-portal-voice-input>${c && M`<calcite-button icon-start=microphone .label=${t.voiceInput} round .disabled=${u} .appearance=${i ? "solid" : "outline-fill"} @click=${async () => {
|
|
841
1320
|
this.isVoiceInputDisabled = !0;
|
|
842
|
-
const
|
|
843
|
-
|
|
844
|
-
}}></calcite-button>` || ""}<calcite-button type=submit icon-start=send round .disabled=${!e.trim()} .label=${t.send}>${t.send}</calcite-button></div></form><arcgis-assistant-agent .agent=${
|
|
845
|
-
this.assistantEl.value?.submitInterrupt(
|
|
1321
|
+
const r = this.voiceInputEl.value;
|
|
1322
|
+
i ? await r?.stopListening() : await r?.startListening();
|
|
1323
|
+
}}></calcite-button>` || ""}<calcite-button type=submit icon-start=send round .disabled=${!e.trim()} .label=${t.send}>${t.send}</calcite-button></div></form><arcgis-assistant-agent .agent=${Qe} .context=${{ portal: s, user: o, navigationTargetMap: l }}></arcgis-assistant-agent><arcgis-assistant-agent .agent=${Wt} .context=${{ portal: s, user: o, navigationTargetMap: l }}></arcgis-assistant-agent><arcgis-assistant-agent .agent=${pe} .context=${{ portal: s, user: o, navigationTargetMap: l }}></arcgis-assistant-agent><arcgis-assistant-agent .agent=${ze} .context=${{ portal: s, user: o, navigationTargetMap: l }}></arcgis-assistant-agent>${this.interrupt && M`<arcgis-portal-ai-assistant-interrupt slot=interrupt .type=${this.interrupt.type} .message=${this.interrupt.message} .options=${this.interrupt.options} @arcgisSubmit=${({ detail: r }) => {
|
|
1324
|
+
this.assistantEl.value?.submitInterrupt(r);
|
|
846
1325
|
}} @arcgisCancel=${() => {
|
|
847
1326
|
this.assistantEl.value?.cancelInterrupt();
|
|
848
1327
|
}}></arcgis-portal-ai-assistant-interrupt>` || ""}</arcgis-assistant>`;
|
|
849
1328
|
}
|
|
850
1329
|
}
|
|
851
|
-
|
|
1330
|
+
pt("arcgis-portal-ai-assistant", _e);
|
|
852
1331
|
export {
|
|
853
|
-
|
|
1332
|
+
_e as ArcgisPortalAiAssistant
|
|
854
1333
|
};
|