@esri/solutions-components 5.1.0-next.167 → 5.1.0-next.168

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.
@@ -0,0 +1,2 @@
1
+ /* COPYRIGHT Esri - https://js.arcgis.com/5.1/LICENSE.txt */
2
+ import{a as _}from"./DIBK4RSG.js";import"./QMAV4UTN.js";import"./Y2AUIXNK.js";import{b as y}from"./HIPZRG2Q.js";import{F as g,G as b,H as f,J as w,h as m,i as l,q as o,u as p}from"./T3EPRHTT.js";import"./EXBEKVP5.js";export default $arcgis.t(([c])=>{var v=m`@layer{:host{display:block}.hide-editor-toolbar .esri-editor__panel-toolbar,.display-none{display:none!important}.esri-editor__panel-content{padding-block:10px!important}.notice-msg{padding:10px;width:calc(100% - 20px)}}`,h=class extends f{constructor(){super(...arguments),this.customizeSubmit=!1,this.enableSnapping=!1,this.showGuidingMsg=!0,this._editorLoading=!1,this._translations=_({name:"create-related-feature",blocking:!0}),this._addingAttachment=!1,this._editor=g(),this._isSubmitBtnClicked=!1,this.success=o(),this.fail=o(),this.isActionPending=o(),this.formReady=o(),this._onEditorPropertyChange=()=>{let t=this._editor.value;t&&(c.watch(()=>t.state,e=>{e==="adding-attachment"||e==="editing-attachment"?(this._addingAttachment=!0,this.isActionPending.emit(!0)):this._addingAttachment&&(this.isActionPending.emit(!1),this._addingAttachment=!1)}),c.watch(()=>t.activeWorkflow?.formViewModel?.status,e=>{e==="loaded"&&this.formReady.emit()}))}}static{this.properties={customizeSubmit:5,enableSnapping:5,mapView:0,selectedFeature:0,showGuidingMsg:5,table:0,_editorLoading:16,_translations:16}}static{this.styles=v}static{this.shadowRootOptions=p}async submit(){this._editor.value?.activeWorkflow&&(this._isSubmitBtnClicked=!0,this._editor.value.activeWorkflow?.formViewModel?.submit())}render(){let t=this._editorLoading?"":"display-none";return l`${this.showGuidingMsg&&l`<calcite-notice class="notice-msg" icon=lightbulb kind=success open><div slot=message>${this._translations.provideDetailsMsg}</div></calcite-notice>`||""}<calcite-loader class=${w(t)} .label=${this._translations.loading} scale=s></calcite-loader>${this.mapView&&this._getEditor()||""}`}disconnectedCallback(){super.disconnectedCallback(),this._editor.value&&this._editor.value.destroy()}_getEditor(){return l`<arcgis-editor .view=${this.mapView} hide-edit-features-section .hideSettingsMenu=${!this.enableSnapping} hide-sketch .hideSnappingControlsElementsEnabledToggle=${!this.enableSnapping} @arcgisReady=${this._startCreate} @arcgisPropertyChange=${this._onEditorPropertyChange} ${b(this._editor)}></arcgis-editor>`}async _startCreate(){let t=this.selectedFeature?.layer,e=this.table;if(t.relationships&&e?.relationships&&this.selectedFeature&&e.templates){let s=t.relationships[0],i=e.relationships.find(r=>t.layerId===r.relatedTableId),a=Number(this.selectedFeature.getObjectId());if(!Number.isNaN(a)&&i){let r=(await t.queryFeatures({objectIds:[a],outFields:[t.objectIdField,s.keyField]})).features[0],n=e.templates[0],d={attributeOverrides:this.makeAttributesForRelatedFeature(r,s,i),layer:e,template:n};await this._editor.value?.startCreateFeaturesWorkflowAtFeatureCreation(d),await this.hideEditorsElements();let u=this._editor.value?.activeWorkflow?.formViewModel;u&&this._editor.value?.activeWorkflow?.formViewModel?.addHandles(u.on("submit",this.submitted.bind(this)))}}}async hideEditorsElements(){this.customizeSubmit&&(await this.timeout(700),this.el.querySelector("arcgis-editor")?.shadowRoot?.querySelectorAll("calcite-flow-item")?.forEach(t=>{let e=t.shadowRoot?.querySelector("calcite-panel")?.shadowRoot?.querySelector("article");e?.querySelector("header")?.setAttribute("style","display: none"),e?.querySelector("footer")?.setAttribute("style","display: none")}))}makeAttributesForRelatedFeature(t,e,s){let i=e.keyField,a;t.attributes.hasOwnProperty(i)?a=t.getAttribute(i):t.attributes.hasOwnProperty(i.toLowerCase())?a=t.getAttribute(i.toLowerCase()):t.attributes.hasOwnProperty(i.toUpperCase())&&(a=t.getAttribute(i.toUpperCase()));let r=s.keyField,n=this.table?.fields.find(d=>d.name.toLocaleLowerCase()===r.toLocaleLowerCase());if(n)return r=n.name,{[r]:a}}async submitted(t){if(t.results[0]?.invalidFields.length||t.results[0]?.invalidAttachmentElementIds.length){this._isSubmitBtnClicked=!1;return}if(this._isSubmitBtnClicked){this._isSubmitBtnClicked=!1;try{if(this._editor.value?.activeWorkflow){await this._editor.value.activeWorkflow.commit();let e=this._editor.value.activeWorkflow.data?.viewModel?.failures;if(e?.length){e.some(s=>{if(s.error)throw s.error});return}}}catch(e){this.fail.emit(e);return}this.success.emit()}}async timeout(t){return await new Promise(e=>setTimeout(e,t))}};y("create-related-feature",h);return h},"core/reactiveUtils")
@@ -328,7 +328,7 @@ Description: {description}`,sJ=w.object({schemaVersion:w.literal(kA),modified:w.
328
328
  Available prompts:
329
329
  ${Object.keys(t).join(`
330
330
  `)}`);return await r[1]()}function _i(t){return t?.configurable?.context?.translations}function Up(t){if(typeof window>"u"||t.length<=1)return;let e=t.map(n=>n.solution.id),r=t.map(n=>n.solution.title);window.dispatchEvent(new CustomEvent("searchTermSet",{detail:{scope:"all-solutions",searchTerm:""}})),window.dispatchEvent(new CustomEvent("solutionMatchesFromAssistant",{detail:{solutionIds:e,solutionTitles:r},bubbles:!0,composed:!0})),window.dispatchEvent(new CustomEvent("navTabSelected",{detail:{tabType:"all-solutions"}}))}function qp(t){if(typeof window>"u"||!t)return;let e=new CustomEvent("solutionIDFromAssistant",{detail:t,bubbles:!0,composed:!0});window.dispatchEvent(e)}var jA=w.object({needsContext:w.boolean().describe("True when the explorer query requires added context from prior turns."),rewrittenQuery:w.string().min(1).describe("The final query to send to doc AI. Keep original query if no context is needed.")}),jp=t=>t?.signal?.aborted??!1,Bp=Object.assign({"./prompts/solutions_explorer_description.md":()=>import("./AS6VINEU.js").then(t=>t.default),"./prompts/transformQuery.md":()=>import("./MFVXFKKM.js").then(t=>t.default)});function zA(t){return t.replace(/<sup>\[\[(\d+)\]\]\(([^)]+)\)<\/sup>/g,'<sup><a href="$2">&#91;$1&#93;</a></sup>')}function UA(t){return t.replace(/!\[([^\]]*)\]\(([^)]+)\)/g,(e,r,n)=>`<img src="${n}" alt="${r}" style="width: 100%;">`)}function qA(t,e){let r=[];return(e?.configurable?.context?.configContext.allCards??[]).forEach(n=>{let o=n.title;if(!o)return;let s=new RegExp(`(?<![\\p{L}\\p{N}])${o}(?![\\p{L}\\p{N}])`,"giu"),i=!1;t=t.replace(s,(a,c,l)=>{let u=l.slice(0,c);return/<img[^>]*alt\s*=\s*["'][^"']*$/i.test(u)?a:(i=!0,`<a href="" target="solutionId:${n.deployCommonId}">${o}</a>`)}),i&&r.push({solution:{title:n.title,id:n.deployCommonId,snippet:n.snippet,description:n.description},score:100})}),{source:t,allMatches:r}}function BA(t){return t&&t.helperServices.aiAssistantServices?`${t.helperServices.aiAssistantServices.url}/skills/doc_ai_assistant/chat`:null}function Kp(t){return t&&t.helperServices.aiAssistantServices?`${t.helperServices.aiAssistantServices.url}/skills/doc_ai_assistant/api/pre-chat`:null}async function _l(t,e,r){let n=await fetch(e,{method:"POST",headers:{"Content-Type":"application/json",token:r},body:JSON.stringify(t)});if(!n.ok)throw new Error(`HTTP ${n.status} calling ${e}`);return n.json()}var KA=t=>new Promise(e=>setTimeout(e,t));async function WA(t,e){let r=t.agentExecutionContext.userRequest,n=e?.configurable?.context?.lastTurnAgent,o=t.agentExecutionContext.messages??[];if(!n||o.length<=1||n==="explorer")return r;try{let s=await be(Bp,"transformQuery"),i=await kt({promptText:s,modelTier:"advanced",temperature:0,schema:jA,messages:o.slice(-11),inputVariables:{query:r,lastTurnAgent:n}});if(i.needsContext&&i.rewrittenQuery.trim())return console.debug(`Rephrased query from "${r}" to "${i.rewrittenQuery.trim()}"`),i.rewrittenQuery.trim()}catch{}return r}var HA=S.Root({...ii(),solutionResponse:S({reducer:(t,e)=>e??null,default:()=>null}),documentSkillUrl:S({reducer:(t,e)=>e??null,default:()=>null}),conversationId:S({reducer:(t,e)=>e??t,default:()=>null})}),VA=()=>new fe(HA).addNode("initializeAgent",JA).addNode("askSolutionsQuestions",GA).addEdge(me,"initializeAgent").addEdge("initializeAgent","askSolutionsQuestions").addEdge("askSolutionsQuestions",K),Wp=async(t,e,r,n)=>{if(!t)return;let o=Kp(t);if(!o)return;let s={context:{kind:"DocAIAssistantRequest",filters:{products:"ArcGIS Solutions",persona:{persona:"apps-solutions"},pipeline:{translation:{allow:!0,language:r,use_llm:!1}}}}};n&&(s.conversationId=n),_l(s,o,e??"")},GA=async(t,e)=>{if(jp(e))return{};let r=_i(e),n=t.documentSkillUrl,o=[],s=await WA(t,e);await Pe({text:r.agentProgress.explorerAgentSearching},e);let i=await _l({message:s,conversationId:e?.configurable?.context?.convoId??void 0,context:{kind:"DocAIAssistantRequest",filters:{products:"ArcGIS Solutions",persona:{persona:"apps-solutions"},pipeline:{translation:{allow:!0,language:e?.configurable?.context?.configContext.locale??"en",use_llm:!1}}}}},n,e?.configurable?.context?.token??"");i.conversationId&&e?.configurable?.context?.setConversationId&&e.configurable.context.setConversationId(i.conversationId);let a={message:i.message,conversationId:i.conversationId,hasMore:i.hasMore,ackSequenceNumber:i.sequenceNumber,inquiryId:i.inquiryId},c="",l=async u=>{let m=u.context?.results?.[0]?.reply??"";if(m!==""){let h=zA(m),b=UA(h),A=qA(b,e);c=A.source,o=[...o,...A.allMatches.filter(E=>!o.some(y=>y.solution.id===E.solution.id))]}let f=u.context?.results?.[0]?.status?.currentStatusStep;if(f){let h="";f===1?h=r.agentProgress.explorerAgentReading:f===2?h=r.agentProgress.explorerAgentReviewing:f===3&&(h=r.agentProgress.explorerAgentPreparing),await Pe({text:h},e)}};for(await l(i);a.hasMore;){if(jp(e))return{};await KA(500),i=await _l({conversationId:a.conversationId,ackSequenceNumber:a.ackSequenceNumber,inquiryId:a.inquiryId},n,e?.configurable?.context?.token??""),a={message:i.message,conversationId:i.conversationId,hasMore:i.hasMore,ackSequenceNumber:i.sequenceNumber,inquiryId:i.inquiryId},await l(i)}return Kp(e?.configurable?.context.portal)&&Wp(e?.configurable?.context.portal,e?.configurable?.context.token??"",e?.configurable?.context.configContext.locale??"en",a.conversationId),o.length&&(o.length===1?qp(o[0].solution.id):Up(o)),{outputMessage:c,summary:c,status:"success",solutionResponse:a,conversationId:a.conversationId}},JA=async(t,e)=>{let r=null;return t.documentSkillUrl===null&&e?.configurable?.context?.portal&&(r=BA(e.configurable.context.portal)),{documentSkillUrl:r}};await be(Bp,"solutions_explorer_description");var Hp=t=>{if(t&&Array.isArray(t.id)&&t.id.length>0)return t.id[t.id.length-1].replace("Message","").toLowerCase();if(t&&typeof t._getType=="function")try{return t._getType()}catch{return"human"}return"human"},ZA=t=>{let e=Hp(t);if(t&&t.kwargs)return{role:e,...t.kwargs};if(t&&typeof t=="object"){let r={role:e,content:typeof t.content=="string"?t.content:String(t.content||"")};return t.id&&(r.id=t.id),t.name&&(r.name=t.name),t.additional_kwargs&&(r.additional_kwargs=t.additional_kwargs),t.response_metadata&&(r.response_metadata=t.response_metadata),r}return{role:"human",content:String(t)}},QA=t=>Hp(t)==="human",YA=(t,e=3)=>t.filter(r=>QA(r)).slice(-e).map(ZA),XA=(t,e=" ")=>YA(t).map(r=>r.content).join(e).trim(),ex={understandingRequest:"Understanding your request...",selectTemplatePrompt:"This use case could be supported in a few different ways. Choose the option that best matches what you want to accomplish.",searchingExistingSolutions:"Searching for existing solutions...",existingSolutionMatch:"I found one or more existing solutions that match your use case. These are ready-to-use solutions that may already meet your needs and can be deployed now. Do you want to continue building your own solution?",continueBuildingYes:"Yes, I want to build a new solution",continueBuildingNo:"No, I\u2019ll review existing solutions",continueBuildingDeclined:"Sounds good. We can focus on existing solutions. Let me know if I can help answer any questions or provide more details.",creatingDesign:"Generating solution design...",updatingDesign:"Updating solution design...",applyChangeFailed:"I wasn't able to apply that change. The design was not modified. Please try rephrasing your request.",createDesignFailed:"I wasn't able to create a solution design from that request. Please try rephrasing and try again.",discardMessage:"Are you sure you want to discard your solution?",discardForNewSolution:"I can help you build a new solution, but I will need to discard your current solution design. Do you want to continue?"},tx={builderMessages:ex},yi=class t{constructor(e,r,n=!0){this.isValid=!0,this.issues=[],this.fieldNameRegistry=null,this.response=e,this.template=r,this.newDesign=n,this.validate()}static{this.INVALID_NAME_CHARS=/[><~`$^+=|]/gu}static{this.NAME_MAX_LENGTH=250}static{this.DESCRIPTION_MAX_LENGTH=2048}static{this.SERVICE_NAME_MAX_LENGTH=100}static{this.FIELD_NAME_MAX_LENGTH=31}validate(){this.compareModels(),this.validateResponse()}compareModels(){this._compareStrings(),this._compareItems(),this._compareFeatureLayers()}validateResponse(){this._validateSolutionProps(),this._validateItems(),this._validateFeatureLayer()}_compareStrings(){let e=new Set(this.response.solution.strings.map(n=>n.key)),r=new Map(this.template.solution.strings.map(n=>[n.key,n]));[...r.keys()].every(n=>e.has(n))||(this.newDesign?this._reconcileStringKeys():this._logIssue("String keys in llm response do not match the template."));for(let n of this.response.solution.strings){if(n.value)continue;let o=r.get(n.key)?.value;this.newDesign&&o?(n.value=o,this._logAutoFix(`String key '${n.key}' had no value. Auto-fixed by restoring the template value.`)):this._logIssue(`String key '${n.key}' has no value in the design. It must be populated.`)}}_reconcileStringKeys(){let e=new Set(this.response.solution.strings.map(r=>r.key));for(let r of this.template.solution.strings)e.has(r.key)||(this.response.solution.strings.push({...r}),this._logAutoFix(`String key '${r.key}' was missing from the design. Auto-fixed by re-adding it from the template.`))}_compareItems(){let e=new Set(this.template.items.map(n=>n.id)),r=new Set(this.response.items.map(n=>n.id));e.size===r.size&&[...e].every(n=>r.has(n))||(this.newDesign?this._reconcileItems():this._logIssue("Item IDs in design do not match the template."))}_reconcileItems(){let e=new Set(this.template.items.map(i=>i.id)),r=new Set(this.response.items.map(i=>i.id)),n=[...r].filter(i=>!e.has(i)),o=[...e].filter(i=>!r.has(i));if(e.size===r.size&&n.length===1&&o.length===1){let i=n[0],a=o[0],c=this.response.items.find(l=>l.id===i);if(c){c.id=a,this._logAutoFix(`Item id '${i}' did not match the template id '${a}'. Auto-fixed in place.`);return}}n.length&&(this.response.items=this.response.items.filter(i=>e.has(i.id)),this._logAutoFix(`Removed items not present in the template: ${n.join(", ")}.`));let s=this.template.items.filter(i=>!r.has(i.id));if(s.length){this.response.items=[...s.map(i=>({...i})),...this.response.items];for(let i of s)this._logAutoFix(`Item '${i.id}' was missing from the design. Auto-fixed by adding it from the template.`)}}_compareFeatureLayers(){let e=this.template.featureLayer,r=this.response.featureLayer;if(e.itemId!==r.itemId){let n=r.itemId;r.itemId=e.itemId,this._logAutoFix(`Feature Layer itemId '${n}' did not match the template. Auto-fixed to '${e.itemId}'.`)}if(!e.addLayers){let n=new Set(e.layers.map(s=>s.id)),o=new Set(r.layers.map(s=>s.id));if(!(n.size===o.size&&[...n].every(s=>o.has(s))))this._logIssue(`Feature Layer '${e.itemId}' had its layer ids altered.`);else for(let s of e.layers){if(s.type){let a=r.layers.find(c=>c.id===s.id);if(a&&a.type!==s.type)if(this.newDesign){let c=a.type;a.type=s.type,this._logAutoFix(`Layer '${s.id}' type '${c}' is immutable. Auto-fixed back to template type '${s.type}'.`)}else this._logIssue(`Layer '${s.id}' type '${a.type}' does not match template type '${s.type}'. This layer type is immutable.`)}let i=r.layers.find(a=>a.id===s.id);i&&this._validateRequiredFields(i,s)}}}_validateRequiredFields(e,r){let n=new Map(e.requiredFields.map(o=>[o.name.toLowerCase(),o]));for(let o of r.requiredFields){let s=n.get(o.name.toLowerCase());if(!s){this.newDesign?(e.requiredFields.push({...o}),this._logAutoFix(`Layer '${e.name}' was missing required field '${o.name}'. Auto-fixed by re-adding it from the template.`)):this._logIssue(`Layer '${e.name}' is missing required field '${o.name}'.`);continue}this._enforceRequiredFieldImmutability(e,s,o)}}_enforceRequiredFieldImmutability(e,r,n){let o=[];if(r.type!==n.type&&o.push("type"),(r.length??null)!==(n.length??null)&&o.push("length"),this._choiceListsEqual(r.choiceList,n.choiceList)||o.push("choiceList"),!o.length)return;let s=o.length===1?"property":"properties";this.newDesign?(r.type=n.type,r.length=n.length,r.choiceList=Array.isArray(n.choiceList)?[...n.choiceList]:n.choiceList??null,this._logAutoFix(`Layer '${e.name}' required field '${n.name}' changed immutable ${s} (${o.join(", ")}). Auto-fixed by reverting to the template.`)):this._logIssue(`Layer '${e.name}' required field '${n.name}' changed immutable ${s} (${o.join(", ")}). These cannot be modified.`)}_choiceListsEqual(e,r){let n=Array.isArray(e)?e:null,o=Array.isArray(r)?r:null;if(n===null&&o===null)return!0;if(n===null||o===null)return!1;let s=new Set(n),i=new Set(o);return s.size===i.size&&[...s].every(a=>i.has(a))}_validateSolutionProps(){let e=this.response.solution.title??"",r=this.response.solution.description,n=/[/\\]/u.test(e),o=this.newDesign?e.replace(/[/\\]/gu,""):e;this.newDesign&&o!==e?(this.response.solution.title=o,this._logAutoFix("Solution title contained forward or back slashes. Auto-fixed by removing them.")):!this.newDesign&&n&&this._logIssue("Solution title contains forbidden forward or back slashes.");let s=rs(o);if(s.isValid||this._tryFixName(s.errorType,o,i=>{this.response.solution.title=i},"Solution title","Solution Title")||this._logIssue(`Solution title is invalid (${s.errorType}).`),r){let i=ns(r,t.DESCRIPTION_MAX_LENGTH,!0);i.isValid||this._tryFixDescription(r,a=>{this.response.solution.description=a},"Solution description")||this._logIssue(`Solution description is invalid (${i.errorType}).`)}}_validateItems(){let e=new Set(["Feature Layer (hosted)","Feature Layer (hosted, view)"]);for(let r of this.response.items){if(e.has(r.type)&&r.title.length>t.SERVICE_NAME_MAX_LENGTH)if(this.newDesign){let o=r.title;r.title=r.title.slice(0,t.SERVICE_NAME_MAX_LENGTH).trim(),this._logAutoFix(`Service name '${o}' exceeded ${t.SERVICE_NAME_MAX_LENGTH} characters. Auto-fixed to '${r.title}'.`)}else this._logIssue(`Service name '${r.title}' exceeds 100 characters.`);let n=rs(r.title??"");if(n.isValid||this._tryFixName(n.errorType,r.title??"",o=>{r.title=o},`Item '${r.id}' title`,"Item Title")||this._logIssue(`Item '${r.id}' title is invalid (${n.errorType}).`),r.description){let o=ns(r.description,t.DESCRIPTION_MAX_LENGTH,!0);o.isValid||this._tryFixDescription(r.description,s=>{r.description=s},`Item '${r.id}' description`)||this._logIssue(`Item '${r.id}' description is invalid (${o.errorType}).`)}}}_validateFeatureLayer(){this.response.featureLayer.layers.length||this._logIssue("Feature layer item must contain at least one layer.");let e=this.response.featureLayer.layers.map(r=>r.name.toLowerCase());e.length!==new Set(e).size&&(this.newDesign?this._dedupeLayerNames(this.response.featureLayer.layers):this._logIssue(`Layer names must be unique (case-insensitive). Layer names in design: ${e}.`));for(let r of this.response.featureLayer.layers)this._validateLayer(r,this.response.featureLayer.addLayers)}_dedupeLayerNames(e){let r=new Set;for(let n of e){let o=(n.name??"").toLowerCase();if(r.has(o)){let s=n.name;n.name=this._makeUniqueName(n.name??"Layer",r),this._logAutoFix(`Duplicate layer name '${s}'. Auto-fixed to '${n.name}'.`)}r.add(n.name.toLowerCase())}}_validateLayer(e,r){!r&&e.typeMutable===!0&&e.type==="Table"&&(this.newDesign?(e.type="Point",this._logAutoFix(`Layer '${e.name}' cannot be a Table. Auto-fixed to 'Point'.`)):this._logIssue(`Layer '${e.name}' cannot be a Table. It may be a Point, Line, or Polygon.`));let n=rs(e.name??"");if(n.isValid||this._tryFixName(n.errorType,e.name??"",o=>{e.name=o},`Layer '${e.name}' name`,"Layer Title")||this._logIssue(`Layer '${e.name}' name is invalid (${n.errorType}).`),e.description){let o=ns(e.description,t.DESCRIPTION_MAX_LENGTH,!0);o.isValid||this._tryFixDescription(e.description,s=>{e.description=s},`Layer '${e.name}' description`)||this._logIssue(`Layer '${e.name}' description is invalid (${o.errorType}).`)}this._validateLayerFields(e)}_validateLayerFields(e){let r=e.systemFields??[];this.fieldNameRegistry=new Set([...e.customFields,...e.requiredFields,...r].map(s=>s.name.toLowerCase()));for(let s of[...e.customFields,...e.requiredFields])this._validateField(s);this.fieldNameRegistry=null;let n=new Set(e.requiredFields.map(s=>s.name.toLowerCase())),o=new Set(n);for(let s of e.customFields){let i=s.name.toLowerCase();if(o.has(i)){let a=n.has(i)?"a required field name":"another field with the same name";if(this.newDesign){let c=s.name;s.name=this._makeUniqueName(s.name,o),this._logAutoFix(`Layer '${e.name}' field '${c}' collided with ${a}. Auto-fixed to '${s.name}'.`)}else this._logIssue(`Layer '${e.name}' field '${s.name}' collides with ${a}.`)}o.add(s.name.toLowerCase())}}_validateField(e){let r=/^\p{L}/u,n=/^.[\p{L}\p{M}\p{N}_]*$/u;e.alias||(this.newDesign?(e.alias=e.name,this._logAutoFix(`Field '${e.name}' had no display name (alias). Auto-fixed to '${e.alias}'.`)):this._logIssue(`Field '${e.name}' has no display name (alias).`));let o=r.test(e.name),s=n.test(e.name);if(!o||!s)if(this.newDesign){let i=e.name;e.name=this._makeUniqueName(this._sanitizeFieldName(e.name),this.fieldNameRegistry),this.fieldNameRegistry.add(e.name.toLowerCase()),this._logAutoFix(`Field '${i}' had an invalid name. Auto-fixed to '${e.name}'.`)}else o||this._logIssue(`Field '${e.name}' does not start with a letter.`),s||this._logIssue(`Field '${e.name}' contains invalid characters (only letters from any writing system, numbers, and underscores are allowed; emojis and punctuation are not allowed).`);if(e.name.length>t.FIELD_NAME_MAX_LENGTH)if(this.newDesign){let i=e.name;e.name=this._getUniqueTruncatedFieldName(e.name,this.fieldNameRegistry),this.fieldNameRegistry.add(e.name.toLowerCase()),this._logAutoFix(`Field '${i}' exceeds ${t.FIELD_NAME_MAX_LENGTH} characters. Auto-fixing to '${e.name}'.`)}else this._logIssue(`Field '${e.name}' exceeds ${t.FIELD_NAME_MAX_LENGTH} characters.`);if(ic.has(e.name.toLowerCase()))if(this.newDesign){let i=e.name;e.name=this._getUniqueTruncatedFieldName(i,this.fieldNameRegistry),this.fieldNameRegistry.add(e.name.toLowerCase()),this._logAutoFix(`Field '${i}' is a SQL reserved keyword. Auto-fixing to '${e.name}'.`)}else this._logIssue(`Field '${e.name}' is a SQL reserved keyword.`);if(ac.has(e.name.toLowerCase()))if(this.newDesign){let i=e.name;e.name=this._getUniqueTruncatedFieldName(i,this.fieldNameRegistry),this.fieldNameRegistry.add(e.name.toLowerCase()),this._logAutoFix(`Field '${i}' is a reserved system field name. Auto-fixing to '${e.name}'.`)}else this._logIssue(`Field '${e.name}' is a reserved system field name.`);if(Array.isArray(e.choiceList)&&e.type!=="string"&&(this.newDesign?e.choiceList.length?(e.type="string",this._logAutoFix(`Field '${e.name}' had a domain but was not of type 'string'. Auto-fixed by setting the type to 'string'.`)):(e.choiceList=null,this._logAutoFix(`Field '${e.name}' had an empty domain but is not of type 'string'. Auto-fixed by removing the domain.`)):this._logIssue(`Field '${e.name}' must be of type 'string' to have a domain.`)),e.type==="string"&&this._validateStringFieldLength(e),Array.isArray(e.choiceList)&&(this.newDesign?this._autoFixChoiceList(e):this._logChoiceListIssues(e)),Array.isArray(e.choiceList)&&e.length!=null){let i=Math.max(...e.choiceList.map(a=>a.length));i>e.length&&(this.newDesign?(this._logAutoFix(`The choice provided for field '${e.name}' is too long. It must fit within ${e.length} characters, but the choice requires ${i} characters. Auto-fixing to ${i}.`),e.length=i):this._logIssue(`The choice provided for field '${e.name}' is too long. It must fit within ${e.length} characters, but the choice requires ${i} characters.`))}}_autoFixChoiceList(e){let r=e.choiceList,n=r.filter(s=>s?.trim());n.length!==r.length&&(this._logAutoFix(`Field '${e.name}' had blank domain values. Auto-fixed by removing them.`),r=n,e.choiceList=r);let o=[...new Set(r)];o.length!==r.length&&(this._logAutoFix(`Field '${e.name}' had duplicate domain values. Auto-fixed by removing duplicates.`),r=o,e.choiceList=r),r.length||(this._logAutoFix(`Field '${e.name}' had an empty domain. Auto-fixed by removing the domain.`),e.choiceList=null)}_logChoiceListIssues(e){if(Array.isArray(e.choiceList)){if(!e.choiceList.length){this._logIssue(`Field '${e.name}' has an empty domain. At least one value is required.`);return}e.choiceList.some(r=>!r?.trim())&&this._logIssue(`A blank domain value was added to Field '${e.name}'.`),e.choiceList.length!==new Set(e.choiceList).size&&this._logIssue(`Field '${e.name}' has duplicate domain values.`)}}_validateStringFieldLength(e){if(this.newDesign&&e.length===255&&(e.length=256),typeof e.length!="number"||Number.isNaN(e.length)){this._handleInvalidStringFieldLength(e,256);return}let r=e.length;if(!cc(r).isValid){let n=r>4e3?4e3:256;this._handleInvalidStringFieldLength(e,n)}}_handleInvalidStringFieldLength(e,r){this.newDesign?(this._logAutoFix(`Field '${e.name}' has an invalid length. Auto-fixing to ${r}.`),e.length=r):this._logIssue(`Field '${e.name}' length is invalid (must be a number between 1 and 4000).`)}_makeUniqueName(e,r){let n=e,o=1;for(;r.has(n.toLowerCase());)n=`${e}_${o}`,o+=1;return n}_getUniqueTruncatedFieldName(e,r){let n=t.FIELD_NAME_MAX_LENGTH,o=e.slice(0,n),s=o,i=1;for(;r.has(s.toLowerCase());){let a=`_${i}`,c=Math.max(1,n-a.length);s=`${o.slice(0,c)}${a}`,i+=1}return s}_sanitizeItemName(e,r=t.NAME_MAX_LENGTH){let n=(e??"").replace(new RegExp(lc.source,"gu"),"").replace(t.INVALID_NAME_CHARS,"").replace(/\s+/gu," ").trim();return n.length>r&&(n=n.slice(0,r).trim()),n}_sanitizeDescription(e,r=t.DESCRIPTION_MAX_LENGTH){let n=(e??"").replace(/[<>]/gu,"");return n.length>r&&(n=n.slice(0,r)),n}_sanitizeFieldName(e){let r=(e??"").replace(/[^\p{L}\p{M}\p{N}_]/gu,"");return r.length===0?r="field":/^\p{L}/u.test(r)||(r=`f_${r}`),r}_tryFixName(e,r,n,o,s){if(!this.newDesign)return!1;if(e==="empty")return n(s),this._logAutoFix(`${o} was empty. Auto-fixed to '${s}'.`),!0;let i=this._sanitizeItemName(r)||s;return n(i),this._logAutoFix(`${o} was invalid (${e}). Auto-fixed to '${i}'.`),!0}_tryFixDescription(e,r,n){if(!this.newDesign)return!1;let o=this._sanitizeDescription(e);return r(o),this._logAutoFix(`${n} was invalid. Auto-fixed to a sanitized value.`),!0}_logAutoFix(e){console.debug(e)}_logIssue(e){console.debug(e),this.issues.push(e),this.isValid=!1}},rx=d.object({key:d.string().describe("Stable key identifier for the string."),value:d.string().describe("Display value for the string."),description:d.string().describe("Explanation of where/how the string is used.")}),nx=d.object({id:d.string().describe("ArcGIS item id (32 hex characters)."),title:d.string().describe("Item title."),description:d.string().describe("Item description."),type:d.enum(["Feature Layer (hosted)","Feature Layer (hosted, view)","Web Map","Instant App","Dashboard","Web Experience","Form","Table (hosted)","Table (hosted, view)","Hub Site Application","Hub Page","CSV","Data Pipeline","Desktop Application Template","Group","Notebook","QuickCapture Project"]).describe("ArcGIS item type.")}),zp=d.object({name:d.string().describe("Field name."),type:d.enum(["string","integer","double","date","oid","guid","globalid"]).describe("Field data type."),alias:d.string().describe("Field alias for display."),description:d.string().describe("Field description."),choiceList:d.array(d.string()).nullable().describe("List of allowed values for string fields with a controlled vocabulary. Null if unrestricted or not applicable."),length:d.number().int().nullable().describe("Maximum string length for string fields. Null for non-string fields.")}),ox=d.object({id:d.number().int().describe("Layer/table id within the feature service."),type:d.enum(["Point","Polyline","Polygon","Table"]).describe("Layer type."),typeMutable:d.boolean().describe("Indicates whether the layer type can be changed."),name:d.string().describe("Layer/table name."),description:d.string().describe("Layer/table description."),customFields:d.array(zp).describe("User/business fields specific to the solution."),requiredFields:d.array(zp).describe("Fields required for solution functionality (e.g., relationship keys).")}),sx=d.object({itemId:d.string().describe("ArcGIS item id for the feature layer."),addLayers:d.boolean().describe("Indicates whether new layers can be added during solution design."),layers:d.array(ox)}),bl=d.object({response:d.string().describe("Conversational response to the user's query."),solution:d.object({itemId:d.string().nullable().describe("ArcGIS item id of the source Solution template used for deployment. Preserve the existing value exactly when known; otherwise use null."),title:d.string().describe("Title of the solution."),description:d.string().describe("Description of the solution."),tags:d.array(d.string()).describe("Keywords/tags associated with the solution."),strings:d.array(rx).describe("Localized strings/labels used by apps (dashboards, forms, etc.).")}),items:d.array(nx).describe("ArcGIS items that belong to the solution (apps, maps, layers, etc.)."),featureLayer:sx.describe("Primary feature layer item and its schema/layers/tables details.")}),ix=d.object({op:d.enum(["add","remove","replace","move","copy"]).describe("RFC 6902 operation type."),path:d.string().describe("RFC 6901 JSON Pointer to the target location."),value:d.string().nullable().describe(`JSON-encoded value to apply (required for add and replace). Must be null \u2014 not an empty string \u2014 for remove, move, and copy operations. Serialize as a JSON string, e.g. '\\"text\\"' for a string, '[\\"a\\",\\"b\\"]' for an array, or '{\\"name\\":\\"x\\"}' for an object.`),from:d.string().nullable().describe("RFC 6901 JSON Pointer to the source location (required for move and copy). Must be null \u2014 not an empty string \u2014 for all other operations.")}),ax=d.object({response:d.string().describe("Conversational response describing the accepted design changes."),patches:d.array(ix).describe("Minimal RFC 6902 patch operations needed to update the current design.")}),lx=d.object({response:d.string().describe("Short, user-friendly explanation of why the requested update was not applied.")}),cx=d.object({assistantResponse:d.string().describe("Natural-language response for the user."),isValidUpdate:d.boolean().describe("True only when the request is in scope for supported design updates.")}),ux=d.object({matchedTitles:d.array(d.string()).describe("Titles of solutions that match the user's request. Empty array if no strong match.")}),dx=d.object({templateId:d.string().min(1).describe("Template id from the available template list."),confidence:d.number().min(0).max(1).describe("Confidence score from 0 to 1 for this template match."),templateDescription:d.string().min(1).describe("Short action\u2011oriented description of the template in the user's use case/workflow, starting with a verb.")}),px=d.object({assistantResponse:d.string().nullable().describe("Natural-language response for the user."),isValidUseCase:d.boolean().describe("True only when the request is concrete, appropriate, and has at least one matching template."),matchedTemplates:d.array(dx).describe("Ordered list of matching templates, best match first. Empty when no valid match exists.")}),mx=t=>t.length?t.map((e,r)=>`${r+1}. ${e}`).join(`
331
- `):"No validation errors were provided.",fx=async t=>{let{query:e,validationIssues:r,recentMessages:n,fallbackMessage:o,promptModules:s}=t;try{return(await Fp({promptText:await be(s,"explainValidationFailure"),modelTier:"fast",temperature:0,schema:lx,messages:n,inputVariables:{query:e,validationIssueCount:String(r.length),validationIssues:mx(r)}})).response?.trim()||o}catch(i){return console.warn("Natural language response failed:",{error:i}),o}},Al=t=>t in _r,hx=5,gx=.8,yx=.5,_x="Web Mapping Application",wx="Embeddings",fi=null,yl=null,hi=null,gi=null,bx="Build",fr=Object.assign({"./prompts/assessBuildRequest.md":()=>import("./UOQSRV3X.js").then(t=>t.default),"./prompts/assessUpdateRequest.md":()=>import("./7X2SPNNK.js").then(t=>t.default),"./prompts/description.md":()=>import("./E25ZWVBK.js").then(t=>t.default),"./prompts/designSolution.md":()=>import("./VXGLGWIF.js").then(t=>t.default),"./prompts/explainValidationFailure.md":()=>import("./I5E3PM26.js").then(t=>t.default),"./prompts/findExistingSolution.md":()=>import("./LPFG5XTA.js").then(t=>t.default),"./prompts/updateDesign.md":()=>import("./ZSTC2DJY.js").then(t=>t.default)}),Ax=tx.builderMessages,G=t=>t?.signal?.aborted??!1,re=(t,e,r)=>_i(e)?.builderMessages?.[t]??Ax[t],Vp=t=>{typeof window<"u"&&window.dispatchEvent(new CustomEvent("arcgis-solution-design-update",{detail:t}))},xx=async(t,e,r)=>{if(!t)return null;let n=`type:"${_x}" AND typekeywords:${wx} AND group:${t}`;return(await Ti({q:n,params:e?{token:e}:void 0,portal:r,num:1}))?.results?.[0]??null};async function vx(t,e,r,n){try{let o=await xx(t,e,r);if(!o||G(n))return null;let s=new DA({id:o.id});return await s.load(),G(n)?null:await s.fetchData("json")}catch{return null}}var Ix=async(t,e,r)=>{if(!t)return[];let n=`type:Solution AND typekeywords:${bx} AND group:${t}`;return(await Ti({q:n,params:e?{token:e}:void 0,portal:r,num:100}))?.results??[]},Tx=async(t,e,r)=>{try{let n=await Ul(t,{params:e?{token:e}:void 0,portal:r}),o=n?.buildSolution;if(!o)return null;let s=n?.params,i=s&&typeof s=="object"&&!Array.isArray(s)?s:null;return{buildSolution:o,params:i}}catch{return null}},hr=(t,e={})=>{let r=t;return"itemId"in e&&(r={...r,solution:{...r.solution,itemId:e.itemId??null}}),e.sourceBuildSolution!=null&&(r={...r,sourceBuildSolution:e.sourceBuildSolution}),"params"in e&&(r={...r,params:e.params??null}),"templateId"in e&&(r={...r,templateId:e.templateId??null}),r},Gp=(t,e)=>{if(t==null||e==null)return{ok:!1,error:"design or sourceBuildSolution is null/undefined"};try{let r=structuredClone(e);return new Ni({buildSolution:r}).applyLlmTemplate(t),{ok:!0}}catch(r){return{ok:!1,error:r instanceof Error?r.stack??r.message:String(r)}}},xl=async t=>{if(yl){Object.entries(yl).forEach(([i,a])=>{_r[i]&&(_r[i].initialTemplate=a)});return}let e=t?.configurable?.context?.token,r=Zp(t),n=Qp(t);if(!r){console.warn("Solution Builder: missing primarySolutionsGroupId in appConfig; skipping live template hydration.");return}let o=await Ix(r,e,n),s={};G(t)||(await Promise.all(o.map(async i=>{let a=i.properties?.templateInfo;if(!a||typeof a!="object")return;let c=a.id;if(typeof c!="string"||s[c])return;let l=await Tx(i.id,e,n);if(!l||G(t))return;let{buildSolution:u,params:m}=l;if(typeof u=="object"&&u!==null&&"solution"in u){let h=u.solution;h.thumbnailUrl=i.thumbnail?`${n??"https://www.arcgis.com/sharing/rest"}/content/items/${i.id}/info/${i.thumbnail}`:void 0,h.item=i}let f={...a,buildSolution:u};s[c]=hr(new Ni(f).dumpToLlmTemplate(),{itemId:i.id,sourceBuildSolution:structuredClone(u),params:m?structuredClone(m):null}),_r[c]={...a,initialTemplate:s[c]}})),yl=s)},Jp=t=>{let e=t?.configurable?.context?.token;return typeof e!="string"||!e.trim()?null:e},Zp=t=>{let e=t?.configurable?.context?.configContext?.primarySolutionsGroupId;return typeof e!="string"||!e.trim()?null:e},Qp=t=>{let e=t?.configurable?.context?.configContext?.portalURL;if(!(typeof e!="string"||!e.trim()))return`${e.replace(/\/+$/,"")}/sharing/rest`},Sx=async t=>{await Promise.all([Xp(t),xl(t)])},Yp=async t=>{let e=Jp(t);(!hi||e&&e!==gi)&&(gi=e??gi,hi=Sx(t).catch(r=>{throw hi=null,gi=null,r})),await hi};async function Xp(t){if(fi)return fi;let e=Zp(t);if(!e)return console.warn("Solution Builder: missing primarySolutionsGroupId in appConfig; skipping embeddings load."),null;let r=Qp(t),n=t?.configurable?.context?.configContext?.portalURL;if(await new LA(n?{url:n}:void 0).load(),G(t))return null;let o=Jp(t)??void 0,s=await vx(e,o,r,t);return G(t)?null:s?(fi=s.items,fi):null}var Ex=()=>Object.entries(_r).map(([t,e])=>`ID: ${t}
331
+ `):"No validation errors were provided.",fx=async t=>{let{query:e,validationIssues:r,recentMessages:n,fallbackMessage:o,promptModules:s}=t;try{return(await Fp({promptText:await be(s,"explainValidationFailure"),modelTier:"fast",temperature:0,schema:lx,messages:n,inputVariables:{query:e,validationIssueCount:String(r.length),validationIssues:mx(r)}})).response?.trim()||o}catch(i){return console.warn("Natural language response failed:",{error:i}),o}},Al=t=>t in _r,hx=5,gx=.8,yx=.5,_x="Web Mapping Application",wx="Embeddings",fi=null,yl=null,hi=null,gi=null,bx="Build",fr=Object.assign({"./prompts/assessBuildRequest.md":()=>import("./UOQSRV3X.js").then(t=>t.default),"./prompts/assessUpdateRequest.md":()=>import("./7X2SPNNK.js").then(t=>t.default),"./prompts/description.md":()=>import("./E25ZWVBK.js").then(t=>t.default),"./prompts/designSolution.md":()=>import("./SNA7NRRQ.js").then(t=>t.default),"./prompts/explainValidationFailure.md":()=>import("./I5E3PM26.js").then(t=>t.default),"./prompts/findExistingSolution.md":()=>import("./LPFG5XTA.js").then(t=>t.default),"./prompts/updateDesign.md":()=>import("./MBT2S4J5.js").then(t=>t.default)}),Ax=tx.builderMessages,G=t=>t?.signal?.aborted??!1,re=(t,e,r)=>_i(e)?.builderMessages?.[t]??Ax[t],Vp=t=>{typeof window<"u"&&window.dispatchEvent(new CustomEvent("arcgis-solution-design-update",{detail:t}))},xx=async(t,e,r)=>{if(!t)return null;let n=`type:"${_x}" AND typekeywords:${wx} AND group:${t}`;return(await Ti({q:n,params:e?{token:e}:void 0,portal:r,num:1}))?.results?.[0]??null};async function vx(t,e,r,n){try{let o=await xx(t,e,r);if(!o||G(n))return null;let s=new DA({id:o.id});return await s.load(),G(n)?null:await s.fetchData("json")}catch{return null}}var Ix=async(t,e,r)=>{if(!t)return[];let n=`type:Solution AND typekeywords:${bx} AND group:${t}`;return(await Ti({q:n,params:e?{token:e}:void 0,portal:r,num:100}))?.results??[]},Tx=async(t,e,r)=>{try{let n=await Ul(t,{params:e?{token:e}:void 0,portal:r}),o=n?.buildSolution;if(!o)return null;let s=n?.params,i=s&&typeof s=="object"&&!Array.isArray(s)?s:null;return{buildSolution:o,params:i}}catch{return null}},hr=(t,e={})=>{let r=t;return"itemId"in e&&(r={...r,solution:{...r.solution,itemId:e.itemId??null}}),e.sourceBuildSolution!=null&&(r={...r,sourceBuildSolution:e.sourceBuildSolution}),"params"in e&&(r={...r,params:e.params??null}),"templateId"in e&&(r={...r,templateId:e.templateId??null}),r},Gp=(t,e)=>{if(t==null||e==null)return{ok:!1,error:"design or sourceBuildSolution is null/undefined"};try{let r=structuredClone(e);return new Ni({buildSolution:r}).applyLlmTemplate(t),{ok:!0}}catch(r){return{ok:!1,error:r instanceof Error?r.stack??r.message:String(r)}}},xl=async t=>{if(yl){Object.entries(yl).forEach(([i,a])=>{_r[i]&&(_r[i].initialTemplate=a)});return}let e=t?.configurable?.context?.token,r=Zp(t),n=Qp(t);if(!r){console.warn("Solution Builder: missing primarySolutionsGroupId in appConfig; skipping live template hydration.");return}let o=await Ix(r,e,n),s={};G(t)||(await Promise.all(o.map(async i=>{let a=i.properties?.templateInfo;if(!a||typeof a!="object")return;let c=a.id;if(typeof c!="string"||s[c])return;let l=await Tx(i.id,e,n);if(!l||G(t))return;let{buildSolution:u,params:m}=l;if(typeof u=="object"&&u!==null&&"solution"in u){let h=u.solution;h.thumbnailUrl=i.thumbnail?`${n??"https://www.arcgis.com/sharing/rest"}/content/items/${i.id}/info/${i.thumbnail}`:void 0,h.item=i}let f={...a,buildSolution:u};s[c]=hr(new Ni(f).dumpToLlmTemplate(),{itemId:i.id,sourceBuildSolution:structuredClone(u),params:m?structuredClone(m):null}),_r[c]={...a,initialTemplate:s[c]}})),yl=s)},Jp=t=>{let e=t?.configurable?.context?.token;return typeof e!="string"||!e.trim()?null:e},Zp=t=>{let e=t?.configurable?.context?.configContext?.primarySolutionsGroupId;return typeof e!="string"||!e.trim()?null:e},Qp=t=>{let e=t?.configurable?.context?.configContext?.portalURL;if(!(typeof e!="string"||!e.trim()))return`${e.replace(/\/+$/,"")}/sharing/rest`},Sx=async t=>{await Promise.all([Xp(t),xl(t)])},Yp=async t=>{let e=Jp(t);(!hi||e&&e!==gi)&&(gi=e??gi,hi=Sx(t).catch(r=>{throw hi=null,gi=null,r})),await hi};async function Xp(t){if(fi)return fi;let e=Zp(t);if(!e)return console.warn("Solution Builder: missing primarySolutionsGroupId in appConfig; skipping embeddings load."),null;let r=Qp(t),n=t?.configurable?.context?.configContext?.portalURL;if(await new LA(n?{url:n}:void 0).load(),G(t))return null;let o=Jp(t)??void 0,s=await vx(e,o,r,t);return G(t)?null:s?(fi=s.items,fi):null}var Ex=()=>Object.entries(_r).map(([t,e])=>`ID: ${t}
332
332
  Label: ${e.label}
333
333
  Description: ${e.description}`).join(`
334
334
 
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/5.1/LICENSE.txt */
2
- import"./EXBEKVP5.js";var e='# Your Role\r\nYou are a solution designer for the ArcGIS Solutions assistant. Your job is to update an existing solution design based on the User Query by producing a minimal set of RFC 6902\u2013compliant JSON Patch operations.\r\n\r\nYou must follow all rules below at all times. If a request conflicts with these rules, prioritize the rules and adapt the design accordingly.\r\n\r\n# Your Task\r\n- Analyze the User Query, Current Solution Design, and chat history\r\n- Produce the fewest possible JSON Patch operations required to satisfy the request\r\n- Never modify, remove, or replace sections unrelated to the request\r\n- Use chat history to reconstruct prior changes when needed and as context for the current requested change\r\n- When the request lacks specific details, make reasonable assumptions and complete the design. Do not ask for clarification if the request can be fulfilled with sensible defaults.\r\n- When a request appears valid and there is no clear evidence that it violates a rule, you should proceed with the change instead of rejecting it.\r\n\r\n# Response Guidelines\r\n- Populate `response` with a concise explanation of exactly what you changed\r\n- Refer to yourself as \u201CI\u201D or \u201Cwe\u201D.\r\n- If a request conflicts with these rules:\r\n - Do not suggest enabling features, changing configuration, or alternative designs to bypass restrictions\r\n - Politely decline in `response` and return an empty `patches` array\r\n- Do not partially fulfill a request if any part of it violates the rules\r\n- The `response` must describe changes using UI-visible concepts only.\r\n- NEVER refer to internal JSON property names, schema terms, or implementation details in `response`.\r\n - This includes (but is not limited to): `choiceList`, `type`, `length`, `id`, `_idx`, `featureLayer`, `layers`, `customFields`.\r\n- When explaining changes:\r\n - Use UI terms such as \u201Cfield\u201D, \u201Coptions\u201D, \u201Callowed values\u201D, "domain", \u201Cchoice list\u201D, \u201Cname\u201D, or \u201Cdescription\u201D.\r\n- Avoid technical or system-oriented terms such as \u201Cconfigured\u201D, \u201Csetting\u201D, or \u201Cproperty\u201D in the response\r\n- Always refer to custom fields as just fields. Do NOT include the word custom\r\n\r\n# Language and Localization Rules\r\n- Detect the primary language of the User Query\r\n- Use that language consistently for all user-facing strings unless explicitly prohibited\r\n\r\n# JSON Patch Rules\r\n\r\n## Array Indexing with `_idx`\r\n- Every array element includes a read-only `_idx`\r\n- Always use `_idx` values in patch paths\r\n- Never calculate array positions manually\r\n- Never include `_idx` itself in any patch path or value\r\n- When removing multiple elements from the same array, order those `remove` operations from highest `_idx` to lowest. This prevents index-shifting from making later removals target the wrong element.\r\n\r\n## Patch Minimization\r\n- Prefer updating the most specific path possible\r\n- Do not replace an entire object when a child property can be updated\r\n- Do not combine unrelated changes into a single operation\r\n\r\n## Encoding the `value` Field\r\n- The `value` field must always be a JSON-encoded string (as if passed to `JSON.stringify`).\r\n- `remove` operations must not include a `value`\r\n\r\nExamples:\r\n- Replace the alias of a custom field whose `_idx` is `2` in layer `_idx: 0` of the feature layer:\r\n `{{ "op": "replace", "path": "/featureLayer/layers/0/customFields/2/alias", "value": "\\"New Alias\\"" }}`\r\n- Append a new custom field to layer `_idx: 1` of the feature layer:\r\n `{{ "op": "add", "path": "/featureLayer/layers/1/customFields/-", "value": "{{\\"name\\":\\"my_field\\",\\"type\\":\\"string\\",\\"alias\\":\\"My Field\\",\\"description\\":\\"...\\",\\"choiceList\\":null,\\"length\\":255}}" }}`\r\n- Remove a custom field whose `_idx` is `3`:\r\n `{{ "op": "remove", "path": "/featureLayer/layers/0/customFields/3" }}`\r\n- Update the solution title:\r\n `{{ "op": "replace", "path": "/solution/title", "value": "\\"Updated Title\\"" }}`\r\n- Update tags:\r\n `{{ "op": "replace", "path": "/solution/tags", "value": "[\\"tag1\\",\\"tag2\\",\\"tag3\\"]" }}`\r\n- Update an item description (item `_idx: 1`):\r\n `{{ "op": "replace", "path": "/items/1/description", "value": "\\"New description.\\"" }}`\r\n\r\nDo NOT include `_idx` itself in any patch operation path or value\r\n\r\n# Design Rules\r\n\r\n## Solution\r\n- Only `title`, `description`, and `tags` may be updated\r\n- When modifying the `title`, update the `description` to replace references to the previous title with the new title.\r\n- Only modify values. Do not add or remove properties\r\n\r\n## Strings\r\n- Only `value` may be updated\r\n- `key` and `description` are immutable\r\n- Always return the same number of strings\r\n\r\n## Items\r\n- Only `title` and `description` may be updated\r\n- When modifying the `title`, update the `description` of any items that reference the previous title to replace it with the new title.\r\n- `id` and `type` are immutable\r\n- Items cannot be added or removed\r\n\r\n## Feature Layers\r\n- Supported layer types: `Point`, `Polyline`, `Polygon`, `Table`\r\n\r\n### Layer Naming Rules\r\n- Layer `name` values should be written in Title Case unless specifically requested otherwise\r\n- Layer names should be localized to the detected User Query language unless specifically requested otherwise\r\n\r\n### Add Layers Rule\r\n- Never edit the `addLayers` property\r\n- If `addLayers: false`:\r\n - Layers can NOT be added or removed\r\n - Layer `id` values are immutable\r\n- If `addLayers: true`:\r\n - Layers may be added or removed\r\n - Each new layer must receive a unique `id` starting at 0\r\n- Regardless of `addLayers`:\r\n - Fields within a layer or table may be modified according to the Required Fields and Custom Fields rules.\r\n - Custom fields may be added or removed when explicitly requested.\r\n\r\n### Layer Type Mutability Rule\r\n- Never edit the `typeMutable` property\r\n\r\n### Required Fields\r\n- Required fields are protected:\r\n - Cannot be removed\r\n - Cannot be moved\r\n - `name`, `type`, `length`, and `choiceList` are immutable\r\n - `alias` and `description` can be modified\r\n\r\n### Custom Fields\r\n- Custom fields may be added, modified, or removed\r\n - All properties of the field can be modified\r\n- Field names:\r\n - must be 31 characters or fewer\r\n - lowercase in the detected User Query language when that language has letter case\r\n - contain letters from any writing system (Unicode letters are allowed, e.g., `\xE4`, `\xF1`, `\u540D`, `\u3042`)\r\n - do not contain special characters other than underscores (`_`)\r\n - do not start with a number or underscore\r\n- Localize the field `name` to the detected User Query language\r\n- Valid types: `string`, `integer`, `double`, `date`\r\n- String fields:\r\n - Set `choiceList` to an array of allowed values if applicable, else `null`\r\n - All`choiceList` values should be written in the detected User Query language unless specifically requested otherwise\r\n - Set an appropriate `length`. When setting a default length use 256 instead of 255.\r\n- Non-string fields:\r\n - `choiceList` and `length` should be set to `null`\r\n - Existing string fields can be changed to a non-string field when requested \r\n- Boolean values must be implemented as:\r\n - `string` with a two-value `choiceList`\r\n - The two values should be localized to the detected User Query language unless specifically requested otherwise\r\n - Preserve meaning equivalent to \u201CYes\u201D and \u201CNo\u201D (affirmative/negative)\r\n- No duplicate field names within the same layer\r\n\r\n# Current Solution Design\r\n{currentDesign}\r\n\r\n# User Query\r\n{query}';export{e as default};
2
+ import"./EXBEKVP5.js";var e='# Your Role\r\nYou are a solution designer for the ArcGIS Solutions assistant. Your job is to update an existing solution design based on the User Query by producing a minimal set of RFC 6902\u2013compliant JSON Patch operations.\r\n\r\nYou must follow all rules below at all times. If a request conflicts with these rules, prioritize the rules and adapt the design accordingly.\r\n\r\n# Your Task\r\n- Analyze the User Query, Current Solution Design, and chat history\r\n- Produce the fewest possible JSON Patch operations required to satisfy the request\r\n- Never modify, remove, or replace sections unrelated to the request\r\n- Use chat history to reconstruct prior changes when needed and as context for the current requested change\r\n- When the request lacks specific details, make reasonable assumptions and complete the design. Do not ask for clarification if the request can be fulfilled with sensible defaults.\r\n- When a request appears valid and there is no clear evidence that it violates a rule, you should proceed with the change instead of rejecting it.\r\n\r\n# Response Guidelines\r\n- Populate `response` with a concise explanation of exactly what you changed\r\n- Refer to yourself as \u201CI\u201D or \u201Cwe\u201D.\r\n- If a request conflicts with these rules:\r\n - Do not suggest enabling features, changing configuration, or alternative designs to bypass restrictions\r\n - Politely decline in `response` and return an empty `patches` array\r\n- Do not partially fulfill a request if any part of it violates the rules\r\n- The `response` must describe changes using UI-visible concepts only.\r\n- NEVER refer to internal JSON property names, schema terms, or implementation details in `response`.\r\n - This includes (but is not limited to): `choiceList`, `type`, `length`, `id`, `_idx`, `featureLayer`, `layers`, `customFields`.\r\n- When explaining changes:\r\n - Use UI terms such as \u201Cfield\u201D, \u201Coptions\u201D, \u201Callowed values\u201D, "domain", \u201Cchoice list\u201D, \u201Cname\u201D, or \u201Cdescription\u201D.\r\n- Avoid technical or system-oriented terms such as \u201Cconfigured\u201D, \u201Csetting\u201D, or \u201Cproperty\u201D in the response\r\n- Always refer to custom fields as just fields. Do NOT include the word custom\r\n\r\n# Language and Localization Rules\r\n- Detect the primary language of the User Query\r\n- Use that language consistently for all user-facing strings unless explicitly prohibited\r\n\r\n# JSON Patch Rules\r\n\r\n## Array Indexing with `_idx`\r\n- Every array element includes a read-only `_idx`\r\n- Always use `_idx` values in patch paths\r\n- Never calculate array positions manually\r\n- Never include `_idx` itself in any patch path or value\r\n- When removing multiple elements from the same array, order those `remove` operations from highest `_idx` to lowest. This prevents index-shifting from making later removals target the wrong element.\r\n\r\n## Patch Minimization\r\n- Prefer updating the most specific path possible\r\n- Do not replace an entire object when a child property can be updated\r\n- Do not combine unrelated changes into a single operation\r\n\r\n## Encoding the `value` Field\r\n- The `value` field must always be a JSON-encoded string (as if passed to `JSON.stringify`).\r\n- `remove` operations must not include a `value`\r\n\r\nExamples:\r\n- Replace the alias of a custom field whose `_idx` is `2` in layer `_idx: 0` of the feature layer:\r\n `{{ "op": "replace", "path": "/featureLayer/layers/0/customFields/2/alias", "value": "\\"New Alias\\"" }}`\r\n- Append a new custom field to layer `_idx: 1` of the feature layer:\r\n `{{ "op": "add", "path": "/featureLayer/layers/1/customFields/-", "value": "{{\\"name\\":\\"my_field\\",\\"type\\":\\"string\\",\\"alias\\":\\"My Field\\",\\"description\\":\\"...\\",\\"choiceList\\":null,\\"length\\":255}}" }}`\r\n- Remove a custom field whose `_idx` is `3`:\r\n `{{ "op": "remove", "path": "/featureLayer/layers/0/customFields/3" }}`\r\n- Update the solution title:\r\n `{{ "op": "replace", "path": "/solution/title", "value": "\\"Updated Title\\"" }}`\r\n- Update tags:\r\n `{{ "op": "replace", "path": "/solution/tags", "value": "[\\"tag1\\",\\"tag2\\",\\"tag3\\"]" }}`\r\n- Update an item description (item `_idx: 1`):\r\n `{{ "op": "replace", "path": "/items/1/description", "value": "\\"New description.\\"" }}`\r\n\r\nDo NOT include `_idx` itself in any patch operation path or value\r\n\r\n# Design Rules\r\n\r\n## Solution\r\n- Only `title`, `description`, and `tags` may be updated\r\n- When modifying the `title`, update the `description` to replace references to the previous title with the new title.\r\n- Only modify values. Do not add or remove properties\r\n\r\n## Strings\r\n- Only `value` may be updated\r\n- `key` and `description` are immutable\r\n- Always return the same number of strings\r\n\r\n## Items\r\n- Only `title` and `description` may be updated\r\n- When modifying the `title`, update the `description` of any items that reference the previous title to replace it with the new title.\r\n- `id` and `type` are immutable\r\n- Items cannot be added or removed\r\n\r\n## Feature Layers\r\n- Supported layer types: `Point`, `Polyline`, `Polygon`, `Table`\r\n\r\n### Layer Naming Rules\r\n- Layer `name` values should be written in Title Case unless specifically requested otherwise\r\n- Layer names should be localized to the detected User Query language unless specifically requested otherwise\r\n\r\n### Add Layers Rule\r\n- Never edit the `addLayers` property\r\n- If `addLayers: false`:\r\n - Layers can NOT be added or removed\r\n - Layer `id` values are immutable\r\n- If `addLayers: true`:\r\n - Layers may be added or removed\r\n - Each new layer must receive a unique `id` starting at 0\r\n- Regardless of `addLayers`:\r\n - Fields within a layer or table may be modified according to the Required Fields and Custom Fields rules.\r\n - Custom fields may be added or removed when explicitly requested.\r\n\r\n### Layer Type Mutability Rule\r\n- Never edit the `typeMutable` property\r\n\r\n### Required Fields\r\n- Required fields are protected:\r\n - Cannot be removed\r\n - Cannot be moved\r\n - `name`, `type`, `length`, and `choiceList` are immutable\r\n - `alias` and `description` can be modified\r\n\r\n### Custom Fields\r\n- Custom fields may be added, modified, or removed\r\n - All properties of the field can be modified\r\n- Field `name` must:\r\n - must be 31 characters or fewer\r\n - be lowercase in the detected User Query language when that language has letter case\r\n - use the native writing system of the detected User Query language (do not transliterate or romanize)\r\n - contain only letters and underscores (`_`)\r\n - not start with a number or underscore\r\n- Valid types: `string`, `integer`, `double`, `date`\r\n- String fields:\r\n - Set `choiceList` to an array of allowed values if applicable, else `null`\r\n - All`choiceList` values should be written in the detected User Query language unless specifically requested otherwise\r\n - Set an appropriate `length`. When setting a default length use 256 instead of 255.\r\n- Non-string fields:\r\n - `choiceList` and `length` should be set to `null`\r\n - Existing string fields can be changed to a non-string field when requested \r\n- Boolean values must be implemented as:\r\n - `string` with a two-value `choiceList`\r\n - The two values should be localized to the detected User Query language unless specifically requested otherwise\r\n - Preserve meaning equivalent to \u201CYes\u201D and \u201CNo\u201D (affirmative/negative)\r\n- No duplicate field names within the same layer\r\n\r\n# Current Solution Design\r\n{currentDesign}\r\n\r\n# User Query\r\n{query}';export{e as default};
@@ -85,11 +85,11 @@ Please review the draft design and let me know if you\u2019d like to make any ch
85
85
  ### Custom Fields\r
86
86
  - Add business-relevant fields only when clearly supported by the User Query or Template Instructions\r
87
87
  - Field \`name\` must:\r
88
+ - must be 31 characters or fewer\r
88
89
  - be lowercase in the detected User Query language when that language has letter case\r
89
- - contain letters from any writing system (Unicode letters are allowed, e.g., \`\xE4\`, \`\xF1\`, \`\u540D\`, \`\u3042\`)\r
90
- - not contain special characters other than underscores (\`_\`)\r
90
+ - use the native writing system of the detected User Query language (do not transliterate or romanize)\r
91
+ - contain only letters and underscores (\`_\`)\r
91
92
  - not start with a number or underscore\r
92
- - Localize the field \`name\` to the detected User Query language\r
93
93
  - Valid field types: \`string\`, \`integer\`, \`double\`, \`date\`\r
94
94
  - String fields:\r
95
95
  - Provide a \`choiceList\` to an array of allowed values if applicable, otherwise set to \`null\`\r