vibe64 0.1.47 → 0.1.49

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.
Files changed (150) hide show
  1. package/bin/run.js +1734 -1687
  2. package/bin/server.js +75 -75
  3. package/bin/upgrade-state.js +4539 -4471
  4. package/dist/assets/GithubBrowserTabs-BwpiRS2u.js +1 -0
  5. package/dist/assets/{LocalDatabaseServer-6VzPWZxG.js → LocalDatabaseServer-u_Ky7bNS.js} +1 -1
  6. package/dist/assets/{Vibe64AuthSettingsButton-TLwqAxDo.js → Vibe64AuthSettingsButton-BCwswT1G.js} +1 -1
  7. package/dist/assets/{Vibe64DashboardShell-B4dQ-oHD.js → Vibe64DashboardShell-CWlgrR2B.js} +1 -1
  8. package/dist/assets/{Vibe64DatabaseWorkspace-Bh5WIPOj.js → Vibe64DatabaseWorkspace-Dhs8_H0P.js} +1 -1
  9. package/dist/assets/Vibe64OutputControls-Dn548CZa.js +8 -0
  10. package/dist/assets/{Vibe64RepositoryWorkspace-idDg94lc.js → Vibe64RepositoryWorkspace-C-8S4JUF.js} +1 -1
  11. package/dist/assets/{Vibe64SessionFiles-Z9zxosyl.js → Vibe64SessionFiles-Cx6J7DDN.js} +2 -3
  12. package/dist/assets/{Vibe64UiStoryboardView-CrCDWMdR.js → Vibe64UiStoryboardView-DHyhJiWS.js} +1 -1
  13. package/dist/assets/{Vibe64UnavailableSessions-TqsxvGSf.js → Vibe64UnavailableSessions-Da4RxIhA.js} +1 -1
  14. package/dist/assets/{_sessionId_-7F1VGOou.js → _sessionId_-DCpgDPSI.js} +1 -1
  15. package/dist/assets/_slug_-BbEWp01a.js +25 -0
  16. package/dist/assets/{_slug_-B16mTWjj.css → _slug_-DerKOisL.css} +1 -1
  17. package/dist/assets/{access-Cx9RH95J.js → access-D4di2sCr.js} +1 -1
  18. package/dist/assets/{app-DPx4KKOa.js → app-Adr9Iz8p.js} +1 -1
  19. package/dist/assets/asyncModuleRecovery-DJsn5NrL.js +1 -0
  20. package/dist/assets/{changes-DYsuQLFW.js → changes-3Dd1O8Lu.js} +1 -1
  21. package/dist/assets/client-BAXHGUOC.js +1 -0
  22. package/dist/assets/{client-BYsDPxR3.js → client-CCZIu6yc.js} +1 -1
  23. package/dist/assets/{conversation-3ln-WnbL.css → conversation-CSDHdGDb.css} +1 -1
  24. package/dist/assets/conversation-DG9lp25w.js +8 -0
  25. package/dist/assets/conversation-ErAO1CmH.js +13 -0
  26. package/dist/assets/{dashboard-CWswAbYP.js → dashboard-0tCzDYCX.js} +1 -1
  27. package/dist/assets/english-definitions-DeiQ-jTT.js +1 -0
  28. package/dist/assets/env-DsyQ2MFX.js +1 -0
  29. package/dist/assets/{health-C0f6s-G1.js → health-DyTXU-nb.js} +1 -1
  30. package/dist/assets/{history-BQjETNB9.js → history-BXGAdPMI.js} +1 -1
  31. package/dist/assets/{incoming-COpY201m.js → incoming-yajkdGBY.js} +1 -1
  32. package/dist/assets/{index-MWACm8Pp.css → index-B-dukXUB.css} +1 -1
  33. package/dist/assets/index-CGz4Yow6.js +136 -0
  34. package/dist/assets/{integrations-BBkvNRHu.js → integrations-BMrXET36.js} +10 -2
  35. package/dist/assets/issues-kc1XBZCK.js +1 -0
  36. package/dist/assets/{learning-B8_wHoe1.js → learning-CIE5ghYv.js} +1 -1
  37. package/dist/assets/linkPath-Ch9eft18.js +1 -0
  38. package/dist/assets/{placement-DXvgK433.js → placement-BNmlke_j.js} +1 -1
  39. package/dist/assets/placement-DYM3JJ-F.js +1 -0
  40. package/dist/assets/publish-DTh6amqi.js +3 -0
  41. package/dist/assets/pull-requests-CbfGSSIh.js +1 -0
  42. package/dist/assets/{repository-BNPt7UWc.js → repository-BstMh-bG.js} +1 -1
  43. package/dist/assets/settings-Bf8C6dls.js +1 -0
  44. package/dist/assets/{studioGateApi-BVdclhPL.js → studioGateApi-mkX1eOTX.js} +1 -1
  45. package/dist/assets/{studioUrls-CGKCbM_d.js → studioUrls-B0-GdWh8.js} +1 -1
  46. package/dist/assets/useArchivedVibe64Sessions-DIOpfUxD.js +1 -0
  47. package/dist/assets/useCommand-CVuya6vG.js +1 -0
  48. package/dist/assets/useEndpointResource-7-YDfAxX.js +1 -0
  49. package/dist/assets/usePaths-Y6UuQxmI.js +1 -0
  50. package/dist/assets/{useUiFeedback-B51xtCAK.js → useUiFeedback-Bd3rao6E.js} +1 -1
  51. package/dist/assets/useVibe64ConversationLog-ChJOU2SD.js +1 -0
  52. package/dist/assets/{useVibe64DatabaseTools-BE_yXZFn.js → useVibe64DatabaseTools-DKV-TeNJ.js} +1 -1
  53. package/dist/assets/{useVibe64ProjectScope-D7b8n1gx.js → useVibe64ProjectScope-DXjsKKhl.js} +1 -1
  54. package/dist/assets/useVibe64SessionData-BkIHUrP5.js +1 -0
  55. package/dist/assets/useVibe64SessionSelection-N8wX5oqo.js +1 -0
  56. package/dist/assets/{useVibe64SystemGraph-CDDcsye4.js → useVibe64SystemGraph-Db_eD-X8.js} +1 -1
  57. package/dist/assets/{useVibe64Terminal-Zr3Mig2L.js → useVibe64Terminal-B9EWJ9Ba.js} +2 -2
  58. package/dist/assets/vibe64ProjectScope.local-l5_-E6pq.js +1 -0
  59. package/dist/assets/vibe64RepositoryRealtime-CHT4-6VN.js +1 -0
  60. package/dist/assets/vibe64SessionFocus-CS6Ex53G.js +1 -0
  61. package/dist/assets/vibe64SessionFocus-CSm4YJQD.css +1 -0
  62. package/dist/assets/vibe64SessionRequestConfig-xIx-5jxQ.js +1 -0
  63. package/dist/index.html +26 -22
  64. package/docs/colleague-usage/ai-accounts.md +6 -2
  65. package/docs/colleague-usage/ai-balance-and-allowance.md +15 -2
  66. package/docs/colleague-usage/coding-agent-failures.md +2 -1
  67. package/docs/colleague-usage/coding-agent-goals.md +8 -3
  68. package/docs/colleague-usage/coding-agents.md +16 -0
  69. package/docs/colleague-usage/github-work.md +14 -0
  70. package/docs/colleague-usage/preview-browser-checks.md +5 -3
  71. package/docs/colleague-usage/project-setup.md +6 -3
  72. package/docs/colleague-usage/running-vibe64-on-your-computer.md +3 -1
  73. package/docs/colleague-usage/sessions.md +35 -7
  74. package/docs/colleague-usage/starter-apps.md +3 -0
  75. package/docs/colleague-usage/temporary-chat-context.md +2 -1
  76. package/docs/colleague-usage/temporary-chats.md +17 -5
  77. package/node_modules/@jskit-ai/assistant-core/CHANGELOG.md +539 -0
  78. package/node_modules/@jskit-ai/assistant-core/locales/en.json +383 -0
  79. package/node_modules/@jskit-ai/assistant-core/package.json +3 -2
  80. package/node_modules/@jskit-ai/assistant-runtime/CHANGELOG.md +138 -0
  81. package/node_modules/@jskit-ai/assistant-runtime/README.md +2 -1
  82. package/node_modules/@jskit-ai/assistant-runtime/locales/en.json +137 -0
  83. package/node_modules/@jskit-ai/assistant-runtime/package.json +3 -2
  84. package/node_modules/@jskit-ai/assistant-runtime/src/server/repositories/assistantConfigRepository.js +223 -203
  85. package/node_modules/@jskit-ai/assistant-runtime/src/server/repositories/conversationsRepository.js +286 -266
  86. package/node_modules/@jskit-ai/assistant-runtime/src/server/repositories/messagesRepository.js +270 -250
  87. package/node_modules/@jskit-ai/assistant-voice/locales/en.json +182 -0
  88. package/node_modules/@jskit-ai/assistant-voice/package.json +3 -2
  89. package/node_modules/@jskit-ai/connector-google-calendar/CHANGELOG.md +83 -0
  90. package/node_modules/@jskit-ai/connector-google-calendar/locales/en.json +91 -0
  91. package/node_modules/@jskit-ai/connector-google-calendar/package.json +4 -3
  92. package/node_modules/@jskit-ai/connectors-catalog/CHANGELOG.md +1722 -0
  93. package/node_modules/@jskit-ai/connectors-catalog/README.md +11 -0
  94. package/node_modules/@jskit-ai/connectors-catalog/locales/en.json +3139 -0
  95. package/node_modules/@jskit-ai/connectors-catalog/package.json +5 -4
  96. package/node_modules/@jskit-ai/connectors-core/CHANGELOG.md +183 -0
  97. package/node_modules/@jskit-ai/connectors-core/locales/en.json +92 -0
  98. package/node_modules/@jskit-ai/connectors-core/package.json +3 -2
  99. package/node_modules/@jskit-ai/http-runtime/CHANGELOG.md +31 -0
  100. package/node_modules/@jskit-ai/http-runtime/locales/en.json +14 -0
  101. package/node_modules/@jskit-ai/http-runtime/package.json +3 -2
  102. package/node_modules/@jskit-ai/kernel/CHANGELOG.md +182 -0
  103. package/node_modules/@jskit-ai/kernel/locales/en.json +94 -0
  104. package/node_modules/@jskit-ai/kernel/package.json +6 -2
  105. package/node_modules/@jskit-ai/payments-core/CHANGELOG.md +128 -0
  106. package/node_modules/@jskit-ai/payments-core/locales/en.json +77 -0
  107. package/node_modules/@jskit-ai/payments-core/package.json +3 -2
  108. package/node_modules/@jskit-ai/realtime/CHANGELOG.md +20 -0
  109. package/node_modules/@jskit-ai/realtime/locales/en.json +14 -0
  110. package/node_modules/@jskit-ai/realtime/package.json +3 -2
  111. package/node_modules/@jskit-ai/resource-core/package.json +1 -1
  112. package/node_modules/@jskit-ai/resource-crud-core/package.json +1 -1
  113. package/node_modules/@jskit-ai/uploads-runtime/CHANGELOG.md +35 -0
  114. package/node_modules/@jskit-ai/uploads-runtime/locales/en.json +15 -0
  115. package/node_modules/@jskit-ai/uploads-runtime/package.json +3 -2
  116. package/node_modules/@local/vibe64-execution/src/host/execHelper.js +49 -48
  117. package/node_modules/@local/vibe64-execution/src/server/gitTurnCheckpointCommand.js +1327 -0
  118. package/node_modules/@local/vibe64-genesis/bin/vibe64-genesis-host-context +430 -390
  119. package/node_modules/@local/vibe64-genesis/src/server/index.js +45 -45
  120. package/node_modules/@local/vibe64-genesis/src/server/promptContext.js +119 -119
  121. package/node_modules/@local/vibe64-runtime/src/server/codexAppServerProcess.js +57 -57
  122. package/node_modules/@local/vibe64-sessions/package.json +2 -1
  123. package/node_modules/@local/vibe64-terminals/src/server/opencodeSessionEnvironmentPlugin.js +195 -175
  124. package/node_modules/@local/vibe64-terminals/src/server/sessionWorkOperationCommand.js +1385 -1362
  125. package/package.json +15 -15
  126. package/server.bundle.mjs +44206 -42825
  127. package/dist/assets/GithubBrowserTabs-D-Z3TlA8.js +0 -1
  128. package/dist/assets/Vibe64OutputControls-DtybwgL3.js +0 -8
  129. package/dist/assets/_slug_-Bq84T_Iv.js +0 -24
  130. package/dist/assets/conversation-Bn7wpATa.js +0 -2
  131. package/dist/assets/conversation-CNcCrV-R.js +0 -16
  132. package/dist/assets/definitions-CEbi4qae.js +0 -1
  133. package/dist/assets/env-X7EOFLtl.js +0 -1
  134. package/dist/assets/index-CBo1BEk6.js +0 -138
  135. package/dist/assets/issues-BiSiUd5o.js +0 -1
  136. package/dist/assets/placement-B5T1LR7m.js +0 -1
  137. package/dist/assets/publish-CeLZE2AG.js +0 -3
  138. package/dist/assets/pull-requests-pTdQOT7i.js +0 -1
  139. package/dist/assets/settings-lecRzZ-r.js +0 -1
  140. package/dist/assets/useArchivedVibe64Sessions-DHYRnyJD.js +0 -1
  141. package/dist/assets/useCommand-Epd2yHhQ.js +0 -1
  142. package/dist/assets/useEndpointResource-DBRQISI_.js +0 -1
  143. package/dist/assets/usePaths-DdAnjVDj.js +0 -1
  144. package/dist/assets/useVibe64ConversationLog-DboM3tYN.js +0 -1
  145. package/dist/assets/useVibe64SessionData-CreWtQAO.js +0 -1
  146. package/dist/assets/useVibe64SessionSelection-CDaX4uwY.js +0 -1
  147. package/dist/assets/vibe64ProjectScope.local-BxTBYuRg.js +0 -1
  148. package/dist/assets/vibe64RepositoryRealtime-C-J0I5jY.js +0 -1
  149. package/dist/assets/vibe64SessionFocus-DSW5Irm6.css +0 -1
  150. package/dist/assets/vibe64SessionFocus-DzqbVq60.js +0 -1
@@ -0,0 +1 @@
1
+ import{r as __exportAll}from"./rolldown-runtime-DBalRfVu.js";import"./returnToPath-gKtcu91D.js";import{f as normalizeText,i as normalizeArray,l as normalizeObject,p as normalizeTransactionOutcome,r as isRecord}from"./normalize-BNAdWJYg.js";import{t as deepFreeze}from"./deepFreeze-BgoYkoTa.js";function splitPathAndHash(path=``){const normalizedPath=String(path||``).trim();const hashIndex=normalizedPath.indexOf(`#`);if(hashIndex<0)return{pathWithoutHash:normalizedPath,hash:``};return{pathWithoutHash:normalizedPath.slice(0,hashIndex),hash:normalizedPath.slice(hashIndex)}}function splitPathQueryAndHash(path=``){const{pathWithoutHash,hash}=splitPathAndHash(path);const queryIndex=pathWithoutHash.indexOf(`?`);if(queryIndex<0)return{pathname:pathWithoutHash,queryString:``,hash};return{pathname:pathWithoutHash.slice(0,queryIndex),queryString:pathWithoutHash.slice(queryIndex+1),hash}}function appendQueryString(path=``,queryString=``){const normalizedPath=String(path||``).trim();if(!normalizedPath)return``;const normalizedQuery=String(queryString||``).trim().replace(/^\?+/,``);if(!normalizedQuery)return normalizedPath;const{pathWithoutHash,hash}=splitPathAndHash(normalizedPath);return`${pathWithoutHash}${pathWithoutHash.includes(`?`)?`&`:`?`}${normalizedQuery}${hash}`}function normalizeFieldErrors(value){const source=isRecord(value)?value:{};const normalized={};for(const[field,message]of Object.entries(source)){const normalizedField=String(field||``).trim();if(!normalizedField)continue;normalized[normalizedField]=String(message||``)}return normalized}function resolveFieldErrors(value=null){const source=isRecord(value)?value:{};if(isRecord(source.fieldErrors))return normalizeFieldErrors(source.fieldErrors);if(isRecord(source.details?.fieldErrors))return normalizeFieldErrors(source.details.fieldErrors);return{}}function resolveRelationshipFieldKey(relationshipName=``,lookupFieldMap=null){const normalizedRelationshipName=normalizeText(relationshipName);const explicitFieldKey=normalizeText(lookupFieldMap?.[normalizedRelationshipName]);if(explicitFieldKey)return explicitFieldKey;return normalizedRelationshipName?`${normalizedRelationshipName}Id`:``}function simplifyJsonApiResourceWithRelationshipIds(resource={},{lookupFieldMap=null}={}){const normalizedResource=isRecord(resource)?normalizeObject(resource):{};const simplified={id:normalizedResource.id==null?``:String(normalizedResource.id),...normalizeObject(normalizedResource.attributes)};for(const[relationshipName,relationshipValue]of Object.entries(normalizeObject(normalizedResource.relationships))){const relationshipData=relationshipValue?.data;if(Array.isArray(relationshipData))continue;const fieldKey=resolveRelationshipFieldKey(relationshipName,lookupFieldMap);if(!fieldKey||Object.hasOwn(simplified,fieldKey))continue;simplified[fieldKey]=relationshipData?.id==null?null:String(relationshipData.id)}return simplified}var JSON_API_CONTENT_TYPE=`application/vnd.api+json`;function normalizeMediaType(contentType=``){return String(contentType||``).split(`;`)[0].trim().toLowerCase()}function isJsonContentType(contentType=``){const mediaType=normalizeMediaType(contentType);if(!mediaType)return false;return mediaType===`application/json`||/^application\/[a-z0-9.!#$&^_-]+\+json$/i.test(mediaType)}function resolveJsonApiTransportTypes({type=``,requestType=``,responseType=``}={},{context=`JSON:API transport`}={}){const fallbackType=normalizeText(type);const normalizedRequestType=normalizeText(requestType,{fallback:fallbackType});const normalizedResponseType=normalizeText(responseType,{fallback:fallbackType||normalizedRequestType});if(!normalizedRequestType&&!normalizedResponseType)throw new TypeError(`${context} requires requestType, responseType, or type.`);return Object.freeze({requestType:normalizedRequestType,responseType:normalizedResponseType})}function normalizeJsonApiResourceObject(resource={}){if(!isRecord(resource))return Object.freeze({});const source=normalizeObject(resource);const normalized={};if(source.type!=null)normalized.type=String(source.type);if(source.id!=null)normalized.id=String(source.id);if(isRecord(source.attributes))normalized.attributes=normalizeObject(source.attributes);if(isRecord(source.relationships))normalized.relationships=normalizeObject(source.relationships);if(isRecord(source.links))normalized.links=normalizeObject(source.links);if(isRecord(source.meta))normalized.meta=normalizeObject(source.meta);return Object.freeze(normalized)}function normalizeJsonApiResourceArray(value){return Object.freeze(normalizeArray(value).map(entry=>normalizeJsonApiResourceObject(entry)))}function normalizeJsonApiLinks(value){return isRecord(value)?Object.freeze(normalizeObject(value)):void 0}function normalizeJsonApiMeta(value){return isRecord(value)?Object.freeze(normalizeObject(value)):void 0}function normalizeJsonApiErrors(value){return Array.isArray(value)?Object.freeze(value.map(entry=>isRecord(entry)?normalizeObject(entry):{})):void 0}function isJsonApiResourceDocument(payload={}){return isRecord(payload)&&isRecord(payload.data)&&!Array.isArray(payload.data)}function isJsonApiCollectionDocument(payload={}){return isRecord(payload)&&Array.isArray(payload.data)}function isJsonApiErrorDocument(payload={}){return isRecord(payload)&&Array.isArray(payload.errors)}function normalizeJsonApiDocument(payload={}){const source=isRecord(payload)?normalizeObject(payload):{};const links=normalizeJsonApiLinks(source.links);const meta=normalizeJsonApiMeta(source.meta);const included=normalizeJsonApiResourceArray(source.included);if(isJsonApiResourceDocument(source))return Object.freeze({kind:`resource`,data:normalizeJsonApiResourceObject(source.data),...included.length>0?{included}:{},...links?{links}:{},...meta?{meta}:{}});if(Object.hasOwn(source,`data`)&&source.data==null)return Object.freeze({kind:`resource`,data:null,...included.length>0?{included}:{},...links?{links}:{},...meta?{meta}:{}});if(isJsonApiCollectionDocument(source))return Object.freeze({kind:`collection`,data:normalizeJsonApiResourceArray(source.data),...included.length>0?{included}:{},...links?{links}:{},...meta?{meta}:{}});if(isJsonApiErrorDocument(source)){const errors=normalizeJsonApiErrors(source.errors);return Object.freeze({kind:`errors`,errors:errors||Object.freeze([]),...links?{links}:{},...meta?{meta}:{}})}if(meta&&!Object.hasOwn(source,`data`)&&!Object.hasOwn(source,`errors`))return Object.freeze({kind:`meta`,meta,...links?{links}:{}});return Object.freeze({kind:`unknown`,value:source})}function createJsonApiResourceObject({type=``,id=null,attributes=void 0,relationships=void 0,links=void 0,meta=void 0}={}){const normalizedType=String(type||``).trim();if(!normalizedType)throw new TypeError(`createJsonApiResourceObject requires a non-empty type.`);const resource={type:normalizedType};if(id!=null&&String(id).trim())resource.id=String(id);if(attributes!==void 0){if(!isRecord(attributes))throw new TypeError(`createJsonApiResourceObject attributes must be an object.`);resource.attributes=normalizeObject(attributes)}if(relationships!==void 0){if(!isRecord(relationships))throw new TypeError(`createJsonApiResourceObject relationships must be an object.`);resource.relationships=normalizeObject(relationships)}if(links!==void 0){if(!isRecord(links))throw new TypeError(`createJsonApiResourceObject links must be an object.`);resource.links=normalizeObject(links)}if(meta!==void 0){if(!isRecord(meta))throw new TypeError(`createJsonApiResourceObject meta must be an object.`);resource.meta=normalizeObject(meta)}return Object.freeze(resource)}function createJsonApiDocument({data=void 0,included=void 0,links=void 0,meta=void 0,errors=void 0}={}){const hasData=data!==void 0;const hasErrors=errors!==void 0;if(!hasData&&!hasErrors&&!(meta!==void 0))throw new TypeError(`createJsonApiDocument requires at least one of data, errors, or meta.`);if(hasData&&hasErrors)throw new TypeError(`createJsonApiDocument cannot include both data and errors.`);const document={};if(hasData){if(data==null)document.data=null;else if(Array.isArray(data))document.data=normalizeJsonApiResourceArray(data);else if(isRecord(data))document.data=normalizeJsonApiResourceObject(data);else throw new TypeError(`createJsonApiDocument data must be a resource object, an array, or null.`)}if(hasErrors){if(!Array.isArray(errors))throw new TypeError(`createJsonApiDocument errors must be an array.`);document.errors=normalizeJsonApiErrors(errors)||Object.freeze([])}if(included!==void 0){if(!Array.isArray(included))throw new TypeError(`createJsonApiDocument included must be an array.`);document.included=normalizeJsonApiResourceArray(included)}if(links!==void 0){if(!isRecord(links))throw new TypeError(`createJsonApiDocument links must be an object.`);document.links=Object.freeze(normalizeObject(links))}if(meta!==void 0){if(!isRecord(meta))throw new TypeError(`createJsonApiDocument meta must be an object.`);document.meta=Object.freeze(normalizeObject(meta))}return Object.freeze(document)}var INVALID_VALUE_CODE=Object.freeze({code:`kernel.validation.invalid`,params:{}});function normalizeCodedEntry(entry){return isRecord(entry)&&normalizeText(entry.code)?{code:normalizeText(entry.code),params:isRecord(entry.params)?entry.params:{}}:null}function normalizeJsonApiFieldList(value=[]){const values=Array.isArray(value)?value:[value];const fields=new Set;for(const entry of values){const parts=typeof entry===`string`?entry.split(`,`):[entry];for(const part of parts){const field=normalizeText(part);if(field)fields.add(field)}}return Object.freeze([...fields].sort((left,right)=>left.localeCompare(right)))}function normalizeJsonApiFieldsets(value={},{primaryType=``}={}){const normalizedPrimaryType=normalizeText(primaryType);let source={};if(value&&typeof value===`object`&&!Array.isArray(value))source=value;else if(normalizedPrimaryType)source={[normalizedPrimaryType]:value};const fieldsets=[];for(const[rawType,rawFields]of Object.entries(source)){const type=normalizeText(rawType);const fields=normalizeJsonApiFieldList(rawFields);if(!type||fields.length<1)continue;fieldsets.push([type,fields])}return deepFreeze(Object.fromEntries(fieldsets.sort(([left],[right])=>left.localeCompare(right))))}function buildJsonApiFieldsetsToken(value={}){const fieldsets=normalizeJsonApiFieldsets(value);return Object.keys(fieldsets).length>0?JSON.stringify(fieldsets):``}function isPlainObject(value){if(value===null||typeof value!==`object`)return false;const prototype=Object.getPrototypeOf(value);return prototype===Object.prototype||prototype===null||isEmptyNullPrototypeRecord(prototype)}function isEmptyNullPrototypeRecord(value){return value!==null&&typeof value===`object`&&Object.getPrototypeOf(value)===null&&Reflect.ownKeys(value).length===0}function isSchemaLike(value){return value!==null&&typeof value===`object`&&isPlainObject(value.structure)&&isPlainObject(value.operations)&&typeof value.validateWith===`function`&&typeof value.toJsonSchema===`function`&&typeof value.cleanup===`function`}function resolveArrayItemsConfig(fieldPath,definition){if(!Object.hasOwn(definition,`items`))return null;const{items}=definition;if(isSchemaLike(items))return{kind:`schema`,schema:items};if(!isPlainObject(items)||typeof items.type!==`string`)throw new Error(`Array field "${fieldPath}" must define items as either a Schema instance or a field definition object.`);return{kind:`definition`,definition:items}}function resolveObjectValuesConfig(fieldPath,definition){if(!Object.hasOwn(definition,`values`))return null;const{values}=definition;if(isSchemaLike(values))return{kind:`schema`,schema:values};if(!isPlainObject(values)||typeof values.type!==`string`)throw new Error(`Object field "${fieldPath}" must define values as either a Schema instance or a field definition object.`);return{kind:`definition`,definition:values}}function resolveObjectFieldMode(fieldPath,definition){const hasNestedSchema=Object.hasOwn(definition,`schema`);const hasValues=Object.hasOwn(definition,`values`);const hasAdditionalProperties=Object.hasOwn(definition,`additionalProperties`);if(hasNestedSchema&&hasValues)throw new Error(`Object field "${fieldPath}" cannot define both schema and values.`);if(hasAdditionalProperties&&definition.additionalProperties!==true)throw new Error(`Object field "${fieldPath}" only supports additionalProperties: true.`);if(hasValues&&definition.additionalProperties===true)throw new Error(`Object field "${fieldPath}" cannot define both values and additionalProperties: true.`);if(hasNestedSchema){if(!isSchemaLike(definition.schema))throw new Error(`Object field "${fieldPath}" must define schema as a Schema instance.`);return{kind:`nested`,schema:definition.schema,allowAdditionalProperties:definition.additionalProperties===true}}if(hasValues)return{kind:`map`,valuesConfig:resolveObjectValuesConfig(fieldPath,definition)};if(definition.additionalProperties===true)return{kind:`opaque`};return{kind:`plain`}}function isNumericDefinition(definition){return definition?.type===`number`||definition?.type===`integer`||definition?.type===`epochMilliseconds`||definition?.type===`epochSeconds`}var EPOCH_MILLISECONDS_LIMIT=864e13;var EPOCH_SECONDS_LIMIT=864e10;var EPOCH_INTEGER_STRING_PATTERN=`^(?:0|-?[1-9]\\d*)$`;var YEAR_PATTERN=`\\d{4}`;var MONTH_PATTERN=`0[1-9]|1[0-2]`;var DAY_PATTERN=`0[1-9]|[12]\\d|3[01]`;var HOUR_PATTERN=`[01]\\d|2[0-3]`;var MINUTE_OR_SECOND_PATTERN=`[0-5]\\d`;var HOUR_MINUTE_PATTERN=`(?:${HOUR_PATTERN}):${MINUTE_OR_SECOND_PATTERN}`;var TIME_ZONE_PATTERN=`(?:Z|[+-](?:${HOUR_PATTERN}):${MINUTE_OR_SECOND_PATTERN})`;var CAPTURED_DATE_PATTERN=`(${YEAR_PATTERN})-(${MONTH_PATTERN})-(${DAY_PATTERN})`;var JSON_SCHEMA_DATE_PATTERN=`${YEAR_PATTERN}-(?:${MONTH_PATTERN})-(?:${DAY_PATTERN})`;var DATE_JSON_SCHEMA_PATTERN=`^${JSON_SCHEMA_DATE_PATTERN}$`;var DATE_PATTERN=new RegExp(`^${CAPTURED_DATE_PATTERN}$`);var TIME_PATTERN=new RegExp(`^${HOUR_MINUTE_PATTERN}(?::${MINUTE_OR_SECOND_PATTERN}(?:\\.(\\d+))?)?$`);var DATE_TIME_PATTERN=new RegExp(`^${CAPTURED_DATE_PATTERN}T${HOUR_MINUTE_PATTERN}:${MINUTE_OR_SECOND_PATTERN}(?:\\.(\\d+))?${TIME_ZONE_PATTERN}$`);var EPOCH_INTEGER_STRING=new RegExp(EPOCH_INTEGER_STRING_PATTERN);var DAYS_PER_MONTH=[31,28,31,30,31,30,31,31,30,31,30,31];function isLeapYear(year){return year%4===0&&(year%100!==0||year%400===0)}function daysInMonth(year,month){if(month===2)return isLeapYear(year)?29:28;return DAYS_PER_MONTH[month-1]}function isValidCalendarDateParts(yearText,monthText,dayText){const year=Number(yearText);const month=Number(monthText);const day=Number(dayText);return month>=1&&month<=12&&day>=1&&day<=daysInMonth(year,month)}function resolveTemporalPrecision(definition,fieldName){const precision=definition.temporalPrecision;if(precision===void 0)return void 0;if(!Number.isInteger(precision)||precision<0)throw new Error(`temporalPrecision for "${fieldName}" must be a non-negative integer.`);return precision}function hasAllowedFractionalPrecision(fraction,temporalPrecision){if(fraction===void 0)return true;return temporalPrecision===void 0||fraction.length<=temporalPrecision}function isValidDate(value){if(typeof value!==`string`)return false;const match=DATE_PATTERN.exec(value);return match!==null&&isValidCalendarDateParts(match[1],match[2],match[3])}function isValidTime(value,temporalPrecision){if(typeof value!==`string`)return false;const match=TIME_PATTERN.exec(value);return match!==null&&hasAllowedFractionalPrecision(match[1],temporalPrecision)}function isValidDateTime(value,temporalPrecision){if(typeof value!==`string`)return false;const match=DATE_TIME_PATTERN.exec(value);if(match===null)return false;return isValidCalendarDateParts(match[1],match[2],match[3])&&hasAllowedFractionalPrecision(match[4],temporalPrecision)}function fractionalPattern(temporalPrecision){if(temporalPrecision===void 0)return`(?:\\.\\d+)?`;if(temporalPrecision===0)return``;return`(?:\\.\\d{1,${temporalPrecision}})?`}function timeJsonSchemaPattern(definition,fieldName){const precision=resolveTemporalPrecision(definition,fieldName);return`^${HOUR_MINUTE_PATTERN}(?::${MINUTE_OR_SECOND_PATTERN}${fractionalPattern(precision)})?$`}function dateTimeJsonSchemaPattern(definition,fieldName){const precision=resolveTemporalPrecision(definition,fieldName);return`^${JSON_SCHEMA_DATE_PATTERN}T${HOUR_MINUTE_PATTERN}:${MINUTE_OR_SECOND_PATTERN}${fractionalPattern(precision)}${TIME_ZONE_PATTERN}$`}function castEpochInteger(value,limit){let integerValue;if(typeof value===`number`)integerValue=value;else if(typeof value===`string`&&EPOCH_INTEGER_STRING.test(value))integerValue=Number(value);else return null;if(!Number.isSafeInteger(integerValue)||integerValue<-limit||integerValue>limit)return null;return integerValue===0?0:integerValue}var UNSAFE_PATH_SEGMENTS=new Set([`__proto__`,`prototype`,`constructor`]);function setOwnProperty(target,key,value){Object.defineProperty(target,key,{value,enumerable:true,configurable:true,writable:true})}function assertSafePathSegment(segment,helperName){if(UNSAFE_PATH_SEGMENTS.has(segment))throw new Error(`${helperName}() received unsafe path segment "${segment}".`)}function normalizeFieldPath(path){if(typeof path!==`string`)return path;return path.replace(/\[(.+?)\]/g,`.$1`).replace(/^\.+/,``).replace(/\.+/g,`.`).replace(/\.$/,``)}function buildPathSegments$1(path,helperName,{normalize=false,allowEmpty=false}={}){const normalizedPath=normalize?normalizeFieldPath(path):path;if(typeof normalizedPath!==`string`||normalizedPath.trim()===``){if(allowEmpty&&normalizedPath===``)return[];throw new Error(`${helperName}() expects a non-empty dotted path string.`)}const segments=normalizedPath.split(`.`);if(segments.some(segment=>segment===``))throw new Error(`${helperName}() received an invalid path "${normalizedPath}".`);for(const segment of segments)assertSafePathSegment(segment,helperName);return segments}var JSON_SCHEMA_DRAFT_07=`http://json-schema.org/draft-07/schema#`;var JSON_REST_EXTENSION_KEY=`x-json-rest-schema`;var NON_NULL_JSON_TYPES=[`object`,`array`,`string`,`number`,`boolean`];var EXPORT_CONTEXT_KEY=Symbol(`json-rest-schema.exportContext`);var BOOLEAN_TRUE_VALUES=[`true`,`1`,`yes`,`y`,`on`];var BOOLEAN_FALSE_VALUES=[`false`,`0`,`no`,`n`,`off`];function epochIntegerSchema(limit){return{anyOf:[{type:`integer`,minimum:-limit,maximum:limit},{type:`string`,pattern:EPOCH_INTEGER_STRING_PATTERN}]}}function extensionMetadataFragment(section,values){return{[JSON_REST_EXTENSION_KEY]:{[section]:values}}}var BUILTIN_TYPE_EXPORTERS={none:()=>({type:NON_NULL_JSON_TYPES}),blob:()=>({type:NON_NULL_JSON_TYPES}),serialize:()=>({type:NON_NULL_JSON_TYPES}),object:()=>({type:`object`}),array:()=>({type:`array`}),file:()=>({type:`string`}),string:()=>({type:`string`}),number:()=>({type:[`number`,`string`]}),integer:()=>({type:[`integer`,`string`]}),epochMilliseconds:()=>epochIntegerSchema(EPOCH_MILLISECONDS_LIMIT),epochSeconds:()=>epochIntegerSchema(EPOCH_SECONDS_LIMIT),dateTime:({definition,fieldName})=>({type:`string`,format:`date-time`,pattern:dateTimeJsonSchemaPattern(definition,fieldName)}),date:()=>({type:`string`,format:`date`,pattern:DATE_JSON_SCHEMA_PATTERN}),time:({definition,fieldName})=>({type:`string`,pattern:timeJsonSchemaPattern(definition,fieldName)}),boolean:({definition})=>{if(definition.strictBoolean===true)return{type:`boolean`};const trueValues=new Set([...BOOLEAN_TRUE_VALUES,String(definition.stringTrueWhen||`true`).trim().toLowerCase()]);return{anyOf:[{type:`boolean`},{type:`number`,enum:[0,1]},{type:`string`,enum:[...new Set([...BOOLEAN_FALSE_VALUES,String(definition.stringFalseWhen||`false`).trim().toLowerCase()]),...trueValues]}]}},id:()=>({type:[`integer`,`string`],minimum:1,pattern:`^[1-9][0-9]*$`})};var BUILTIN_VALIDATOR_EXPORTERS={minLength:({definition,parameterValue})=>definition.type===`string`?{minLength:parameterValue}:null,maxLength:({definition,parameterValue})=>definition.type===`string`?{maxLength:parameterValue}:null,min:({definition,parameterValue})=>isNumericDefinition(definition)?{minimum:parameterValue}:null,max:({definition,parameterValue})=>isNumericDefinition(definition)?{maximum:parameterValue}:null,pattern:({definition,parameterValue})=>definition.type===`string`?{pattern:parameterValue instanceof RegExp?parameterValue.source:parameterValue}:null,enum:({parameterValue})=>({enum:parameterValue}),notEmpty:({parameterValue,definition})=>{if(!parameterValue)return null;if(definition.type===`array`)return null;return{minLength:1}},uppercase:({parameterValue})=>parameterValue?extensionMetadataFragment(`transforms`,{uppercase:true}):null,lowercase:({parameterValue})=>parameterValue?extensionMetadataFragment(`transforms`,{lowercase:true}):null,length:({parameterValue})=>extensionMetadataFragment(`transforms`,{length:parameterValue}),unsigned:({parameterValue})=>parameterValue?extensionMetadataFragment(`metadata`,{unsigned:true}):null,precision:({parameterValue})=>extensionMetadataFragment(`metadata`,{precision:parameterValue}),scale:({parameterValue})=>extensionMetadataFragment(`metadata`,{scale:parameterValue}),temporalPrecision:({parameterValue})=>extensionMetadataFragment(`metadata`,{temporalPrecision:parameterValue}),strictBoolean:()=>null,required:()=>null,nullable:()=>null,nullOnEmpty:()=>null,defaultTo:()=>null};function mergePlainObjects(target,source){for(const key of Object.keys(source)){const sourceValue=source[key];const targetValue=target[key];if(sourceValue&&targetValue&&typeof sourceValue===`object`&&typeof targetValue===`object`&&!Array.isArray(sourceValue)&&!Array.isArray(targetValue)){mergePlainObjects(targetValue,sourceValue);continue}target[key]=sourceValue}}function mergeSchemaFragment(target,fragment){if(!fragment||typeof fragment!==`object`||Array.isArray(fragment))throw new Error(`JSON Schema export hooks must return an object or null.`);for(const key of Object.keys(fragment)){if(key===JSON_REST_EXTENSION_KEY&&target[key]&&typeof target[key]===`object`&&typeof fragment[key]===`object`&&!Array.isArray(target[key])&&!Array.isArray(fragment[key])){mergePlainObjects(target[key],fragment[key]);continue}target[key]=fragment[key]}}function buildAnyOfSchema(baseSchema,alternatives){const finalAlternatives=[...Array.isArray(baseSchema.anyOf)&&Object.keys(baseSchema).length===1?baseSchema.anyOf:[baseSchema],...alternatives];if(finalAlternatives.length===1)return baseSchema;return{anyOf:finalAlternatives}}function getTypeExporter(schema,definition){if(!Object.hasOwn(schema.types,definition.type))throw new Error(`No casting function for type: ${definition.type}`);const handler=schema.types[definition.type];if(typeof handler.toJsonSchema===`function`)return handler.toJsonSchema;const exporter=BUILTIN_TYPE_EXPORTERS[definition.type];if(!exporter)throw new Error(`Type '${definition.type}' cannot be exported to JSON Schema without a toJsonSchema hook.`);return exporter}function getValidatorExporter(schema,parameterName,fieldName){if(!Object.hasOwn(schema.validators,parameterName))return null;const handler=schema.validators[parameterName];if(typeof handler.toJsonSchema===`function`)return handler.toJsonSchema;const exporter=BUILTIN_VALIDATOR_EXPORTERS[parameterName];if(exporter)return exporter;throw new Error(`Validator '${parameterName}' on field '${fieldName}' cannot be exported to JSON Schema without a toJsonSchema hook.`)}function normalizeMode(mode){if(mode===void 0)return`create`;if([`create`,`replace`,`patch`].includes(mode))return mode;throw new Error(`Unsupported JSON Schema export mode '${mode}'. Expected 'create', 'replace', or 'patch'.`)}function resolveOperationName(schema,options={}){if(options.mode!==void 0&&options.operation!==void 0){const normalizedMode=normalizeMode(options.mode);if(normalizedMode!==options.operation)throw new Error(`Conflicting JSON Schema export options: mode '${normalizedMode}' does not match operation '${options.operation}'.`)}if(options.operation!==void 0){if(!Object.hasOwn(schema.operations,options.operation))throw new Error(`Unknown JSON Schema export operation '${options.operation}'.`);return options.operation}return normalizeMode(options.mode)}function resolveExportOperation(schema,options={}){if(options.operationName!==void 0&&options.operationDescriptor!==void 0)return{operationName:options.operationName,operation:options.operationDescriptor};const operationName=resolveOperationName(schema,options);return{operationName,operation:schema.operations[operationName]}}function createExportOptions(options={}){const exportOptions={...options};Object.defineProperty(exportOptions,EXPORT_CONTEXT_KEY,{value:{definitions:{},nodes:[],nextDefinitionId:1,rootNode:null},enumerable:false});return exportOptions}function getExportContext(options={}){if(options[EXPORT_CONTEXT_KEY])return options[EXPORT_CONTEXT_KEY];return{definitions:{},nodes:[],nextDefinitionId:1,rootNode:null}}function sanitizeDefinitionNamePart(value){return String(value).replace(/[^a-zA-Z0-9]+/g,`_`).replace(/^_+|_+$/g,``)||`operation`}function isReferenceOnlySchema(schema){return isPlainObject(schema)&&Object.keys(schema).length===1&&typeof schema.$ref===`string`}function wrapReferenceSchema(schema){if(!isReferenceOnlySchema(schema))return schema;return{allOf:[schema]}}function findExportNode(exportContext,schema,operationName,operation,additionalProperties){return exportContext.nodes.find(node=>node.schema===schema&&node.operationName===operationName&&node.operation===operation&&node.additionalProperties===additionalProperties)||null}function createDefinitionName(exportContext,operationName){const suffix=sanitizeDefinitionNamePart(operationName);const definitionName=`SchemaNode_${exportContext.nextDefinitionId}_${suffix}`;exportContext.nextDefinitionId+=1;return definitionName}function getOrCreateExportNode(schema,options,operationName,operation,additionalProperties,{root=false}={}){const exportContext=getExportContext(options);const existingNode=findExportNode(exportContext,schema,operationName,operation,additionalProperties);if(existingNode){if(root){existingNode.pointer=`#`;exportContext.rootNode=existingNode}return existingNode}const node={schema,operationName,operation,additionalProperties,status:`new`,definitionName:root?null:createDefinitionName(exportContext,operationName),pointer:root?`#`:null};if(!root)node.pointer=`#/definitions/${node.definitionName}`;else exportContext.rootNode=node;exportContext.nodes.push(node);return node}function buildExportNodeSchema(node,options){if(node.status===`built`)return{$ref:node.pointer};if(node.status===`building`)return{$ref:node.pointer};const exportContext=getExportContext(options);node.status=`building`;if(node.pointer!==`#`)exportContext.definitions[node.definitionName]={};const objectSchema=buildSchemaObjectFragment(node.schema,options,node.operationName,node.operation,node.additionalProperties);node.status=`built`;if(node.pointer===`#`)return objectSchema;exportContext.definitions[node.definitionName]=objectSchema;return{$ref:node.pointer}}function buildSchemaReference(schema,options,operationName,operation,additionalProperties=false){const exportContext=getExportContext(options);const node=getOrCreateExportNode(schema,options,operationName,operation,additionalProperties);if(exportContext.rootNode===node)return{$ref:`#`};return buildExportNodeSchema(node,options)}function createFieldSchemaState(schema,{referenceBacked=false}={}){return{schema,referenceBacked}}function buildSchemaObjectFragment(schema,options,operationName,operation,additionalProperties=false){const properties={};const required=[];for(const[fieldName,definition]of Object.entries(schema.structure)){setOwnProperty(properties,fieldName,buildFieldSchema(schema,fieldName,definition,options,operationName,operation));if(operation.enforceRequired&&definition.required===true)required.push(fieldName)}const objectSchema={type:`object`,properties,additionalProperties};if(required.length>0)objectSchema.required=required;return objectSchema}function buildArrayItemsSchema(schema,fieldName,definition,options,operationName,operation){const itemsConfig=resolveArrayItemsConfig(fieldName,definition);if(!itemsConfig)return null;if(itemsConfig.kind===`schema`)return{...wrapReferenceSchema(buildSchemaReference(itemsConfig.schema,options,`replace`,itemsConfig.schema.operations.replace,false)),[JSON_REST_EXTENSION_KEY]:{castType:`object`}};const itemOperationName=definition.items.type===`object`&&Object.hasOwn(definition.items,`schema`)?`replace`:operationName;const itemOperation=itemOperationName===`replace`?schema.operations.replace:operation;return buildFieldSchema(schema,`${fieldName}[]`,definition.items,options,itemOperationName,itemOperation)}function buildObjectValuesSchema(schema,fieldName,definition,options,operationName,operation){const valuesConfig=resolveObjectValuesConfig(fieldName,definition);if(!valuesConfig)return null;if(valuesConfig.kind===`schema`)return{...wrapReferenceSchema(buildSchemaReference(valuesConfig.schema,options,`replace`,valuesConfig.schema.operations.replace,false)),[JSON_REST_EXTENSION_KEY]:{castType:`object`}};const valueOperationName=valuesConfig.definition.type===`object`&&Object.hasOwn(valuesConfig.definition,`schema`)?`replace`:operationName;const valueOperation=valueOperationName===`replace`?schema.operations.replace:operation;return buildFieldSchema(schema,`${fieldName}.*`,valuesConfig.definition,options,valueOperationName,valueOperation)}function buildBaseFieldSchema(schema,fieldName,definition,options,operationName,operation){if(definition.type===`object`){const objectMode=resolveObjectFieldMode(fieldName,definition);if(objectMode.kind===`nested`)return createFieldSchemaState(buildSchemaReference(objectMode.schema,options,operationName,operation,objectMode.allowAdditionalProperties===true),{referenceBacked:true});if(objectMode.kind===`opaque`)return createFieldSchemaState({type:`object`,additionalProperties:true});if(objectMode.kind===`map`)return createFieldSchemaState({type:`object`,additionalProperties:buildObjectValuesSchema(schema,fieldName,definition,options,operationName,operation)})}const baseSchema=getTypeExporter(schema,definition)({schema,fieldName,definition,operation:operationName,mode:operationName,options});if(!baseSchema||typeof baseSchema!==`object`||Array.isArray(baseSchema))throw new Error(`Type '${definition.type}' on field '${fieldName}' returned an invalid JSON Schema fragment.`);if(definition.type===`array`){const itemsSchema=buildArrayItemsSchema(schema,fieldName,definition,options,operationName,operation);if(itemsSchema)return createFieldSchemaState({...baseSchema,items:itemsSchema},{referenceBacked:isReferenceOnlySchema(baseSchema)})}return createFieldSchemaState(baseSchema,{referenceBacked:isReferenceOnlySchema(baseSchema)})}function buildFieldSchema(schema,fieldName,definition,options,operationName,operation){const exportContext={schema,fieldName,definition,operation:operationName,mode:operationName,options};const baseFieldSchemaState=buildBaseFieldSchema(schema,fieldName,definition,options,operationName,operation);const workingSchema=baseFieldSchemaState.referenceBacked?wrapReferenceSchema(baseFieldSchemaState.schema):{...baseFieldSchemaState.schema};const extensionMetadata={castType:definition.type};for(const parameterName of Object.keys(definition)){if(parameterName===`type`)continue;if(!Object.hasOwn(schema.validators,parameterName))continue;const exporter=getValidatorExporter(schema,parameterName,fieldName);if(!exporter)continue;const fragment=exporter({...exportContext,parameterName,parameterValue:definition[parameterName],fieldSchema:{...workingSchema}});if(!fragment)continue;mergeSchemaFragment(workingSchema,fragment)}if(workingSchema[JSON_REST_EXTENSION_KEY]){mergePlainObjects(extensionMetadata,workingSchema[JSON_REST_EXTENSION_KEY]);delete workingSchema[JSON_REST_EXTENSION_KEY]}const alternatives=[];if(definition.nullable===true)alternatives.push({type:`null`});if(definition.nullOnEmpty===true)alternatives.push({const:``});const finalSchema=wrapReferenceSchema(buildAnyOfSchema(workingSchema,alternatives));if(definition.defaultTo!==void 0&&operation.applyDefaults){if(typeof definition.defaultTo!==`function`){const defaultResult=schema._normalizeDefault(definition,definition.defaultTo,{fieldPath:fieldName,currentObject:{},containerKey:fieldName,objectBeforeCast:{},options:{},settings:schema._buildOperationSettings(operationName,operation,{})});if(Object.keys(defaultResult.errors).length>0){const firstError=Object.values(defaultResult.errors)[0];throw new Error(`defaultTo for "${fieldName}" is invalid (${firstError.code}).`)}finalSchema.default=defaultResult.value}else extensionMetadata.defaults={providedByFunction:true}}finalSchema[JSON_REST_EXTENSION_KEY]=extensionMetadata;return finalSchema}function buildJsonSchema(schema,options={}){const exportOptions=createExportOptions(options);const{operationName,operation}=resolveExportOperation(schema,exportOptions);const additionalProperties=exportOptions.additionalProperties===void 0?false:exportOptions.additionalProperties;const exportContext=getExportContext(exportOptions);const rootNode=getOrCreateExportNode(schema,exportOptions,operationName,operation,additionalProperties,{root:true});const transportSchema={$schema:JSON_SCHEMA_DRAFT_07,...buildExportNodeSchema(rootNode,exportOptions)};if(Object.keys(exportContext.definitions).length>0)transportSchema.definitions=exportContext.definitions;return transportSchema}function isThenable$1(value){return value!==null&&(typeof value===`object`||typeof value===`function`)&&typeof value.then===`function`}function isSchemaInstance(value){return value instanceof Schema}function createSelectionNode(){return{self:false,children:{}}}function hasSelectionChildren(selectionNode){return Object.keys(selectionNode.children).length>0}function joinPath(basePath,pathSegment){return`${basePath}.${String(pathSegment)}`}function buildFieldPath(basePath,fieldName){return basePath===``?String(fieldName):joinPath(basePath,fieldName)}function stripPathPrefix(path,prefix){if(path===prefix)return``;const prefixWithDot=`${prefix}.`;if(!path.startsWith(prefixWithDot))return null;return path.slice(prefixWithDot.length)}function prefixErrorMap(errors,prefix){const prefixedErrors={};for(const error of Object.values(errors)){const field=joinPath(prefix,error.field);setOwnProperty(prefixedErrors,field,{...error,field})}return prefixedErrors}function buildPathSegments(path){return buildPathSegments$1(path,`validatePath`)}function buildSelectionTree(paths){const selectionTree={};for(const path of paths){const segments=buildPathSegments(path);let currentTree=selectionTree;for(let index=0;index<segments.length;index++){const segment=segments[index];if(!Object.hasOwn(currentTree,segment))setOwnProperty(currentTree,segment,createSelectionNode());if(index===segments.length-1)currentTree[segment].self=true;currentTree=currentTree[segment].children}}return selectionTree}function getValueAtPath(value,pathSegments){let currentValue=value;for(const segment of pathSegments){if(currentValue===null||currentValue===void 0)return void 0;if(typeof currentValue!==`object`)return void 0;if(!Object.hasOwn(currentValue,segment))return void 0;currentValue=currentValue[segment]}return currentValue}function hasSelectedValue(value){if(value===null)return true;if(Array.isArray(value))return Object.keys(value).length>0;if(isPlainObject(value))return Object.keys(value).length>0;return value!==void 0}function sortSelectionKeys(keys){return[...keys].sort((left,right)=>{const leftIsIndex=/^[0-9]+$/.test(left);const rightIsIndex=/^[0-9]+$/.test(right);if(leftIsIndex&&rightIsIndex)return Number(left)-Number(right);if(leftIsIndex)return-1;if(rightIsIndex)return 1;return left.localeCompare(right)})}function isNumericPathSegment(segment){return/^[0-9]+$/.test(segment)}function cloneSchemaIntrospectionSnapshot(schema,seen=new WeakMap){if(seen.has(schema))return seen.get(schema);const snapshot=Object.create(Schema.prototype);seen.set(schema,snapshot);snapshot.structure=null;snapshot.types=schema.types;snapshot.validators=schema.validators;snapshot.operations=schema.operations;snapshot.structure=freezeIntrospectionValue(cloneIntrospectionValue(schema.structure,seen));snapshot._installOperationMethods();return Object.freeze(snapshot)}function cloneIntrospectionValue(value,seen=new WeakMap){if(value===null||typeof value!==`object`)return value;if(isSchemaInstance(value))return cloneSchemaIntrospectionSnapshot(value,seen);if(value instanceof Date)return new Date(value.getTime());if(value instanceof RegExp){const cloned=new RegExp(value.source,value.flags);cloned.lastIndex=value.lastIndex;return cloned}if(seen.has(value))return seen.get(value);if(Array.isArray(value)){const cloned=[];seen.set(value,cloned);for(const item of value)cloned.push(cloneIntrospectionValue(item,seen));return cloned}if(!isPlainObject(value))return value;const cloned={};seen.set(value,cloned);for(const[key,entry]of Object.entries(value))setOwnProperty(cloned,key,cloneIntrospectionValue(entry,seen));return cloned}function freezeIntrospectionValue(value,seen=new WeakSet){if(value===null||typeof value!==`object`||seen.has(value)||isSchemaInstance(value))return value;seen.add(value);if(Array.isArray(value))for(const item of value)freezeIntrospectionValue(item,seen);else for(const key of Reflect.ownKeys(value))freezeIntrospectionValue(value[key],seen);return Object.freeze(value)}function createIntrospectionSnapshot(value){return freezeIntrospectionValue(cloneIntrospectionValue(value))}function resolveDefinitionFromSchemaPath(schema,pathSegments,basePath=``){if(!isSchemaInstance(schema))return null;if(!Array.isArray(pathSegments)||pathSegments.length<1)return null;const[fieldName,...rest]=pathSegments;if(!Object.hasOwn(schema.structure,fieldName))return null;const definition=schema.structure[fieldName];if(rest.length<1)return definition;return resolveNestedDefinitionAtPath(schema,definition,rest,buildFieldPath(basePath,fieldName))}function resolveNestedDefinitionAtPath(schema,definition,pathSegments,fieldPath){if(definition?.type===`object`){const objectMode=schema._resolveObjectFieldMode(fieldPath,definition);if(objectMode.kind!==`nested`)return null;return resolveDefinitionFromSchemaPath(objectMode.schema,pathSegments,fieldPath)}if(definition?.type===`array`){const itemsConfig=schema._resolveArrayItemsConfig(fieldPath,definition);if(!itemsConfig||pathSegments.length<1)return null;const[indexSegment,...rest]=pathSegments;if(!isNumericPathSegment(indexSegment))return null;const itemPath=joinPath(fieldPath,indexSegment);if(itemsConfig.kind===`schema`){if(rest.length<1)return null;return resolveDefinitionFromSchemaPath(itemsConfig.schema,rest,itemPath)}if(rest.length<1)return itemsConfig.definition;return resolveNestedDefinitionAtPath(schema,itemsConfig.definition,rest,itemPath)}return null}function buildNestedOptions(options,prefix){const nestedOptions={...options};if(Array.isArray(options.skipFields)){const skipFields=options.skipFields.map(fieldPath=>stripPathPrefix(fieldPath,prefix)).filter(fieldPath=>fieldPath!==null&&fieldPath!==``);if(skipFields.length>0)nestedOptions.skipFields=skipFields;else delete nestedOptions.skipFields}if(isPlainObject(options.skipParams)){const skipParams={};for(const[fieldPath,parameters]of Object.entries(options.skipParams)){const nestedFieldPath=stripPathPrefix(fieldPath,prefix);if(nestedFieldPath===null||nestedFieldPath===``)continue;setOwnProperty(skipParams,nestedFieldPath,parameters)}if(Object.keys(skipParams).length>0)nestedOptions.skipParams=skipParams;else delete nestedOptions.skipParams}return nestedOptions}var DEFAULT_OPERATIONS=Object.freeze({create:Object.freeze({targetFields:`schema`,enforceRequired:true,applyDefaults:true,outputFields:`validated`,rejectExplicitUndefined:true}),replace:Object.freeze({targetFields:`schema`,enforceRequired:true,applyDefaults:true,outputFields:`validated`,rejectExplicitUndefined:true}),patch:Object.freeze({targetFields:`input`,enforceRequired:false,applyDefaults:false,outputFields:`input`,rejectExplicitUndefined:true})});function validateOperationOption(operationName,descriptor,key,allowedValues){const value=descriptor[key];if(!allowedValues.includes(value))throw new Error(`Operation "${operationName}" must define ${key} as one of: ${allowedValues.join(`, `)}.`)}function validateBooleanOperationOption(operationName,descriptor,key,required=true){const value=descriptor[key];if(value===void 0&&!required)return;if(typeof value!==`boolean`)throw new Error(`Operation "${operationName}" must define ${key} as a boolean.`)}function normalizeOperationDescriptor(operationName,descriptor){if(typeof descriptor!==`object`||descriptor===null||Array.isArray(descriptor))throw new Error(`Operation "${operationName}" must be an object.`);validateOperationOption(operationName,descriptor,`targetFields`,[`schema`,`input`]);validateBooleanOperationOption(operationName,descriptor,`enforceRequired`);validateBooleanOperationOption(operationName,descriptor,`applyDefaults`);validateOperationOption(operationName,descriptor,`outputFields`,[`validated`,`input`]);validateBooleanOperationOption(operationName,descriptor,`rejectExplicitUndefined`,false);return Object.freeze({targetFields:descriptor.targetFields,enforceRequired:descriptor.enforceRequired,applyDefaults:descriptor.applyDefaults,outputFields:descriptor.outputFields,rejectExplicitUndefined:descriptor.rejectExplicitUndefined===void 0?true:descriptor.rejectExplicitUndefined})}function normalizeOperations(operations={}){if(typeof operations!==`object`||operations===null||Array.isArray(operations))throw new Error(`Schema operations must be an object.`);const normalizedOperations=Object.create(null);for(const[operationName,descriptor]of Object.entries(DEFAULT_OPERATIONS))setOwnProperty(normalizedOperations,operationName,descriptor);for(const[operationName,descriptor]of Object.entries(operations))setOwnProperty(normalizedOperations,operationName,normalizeOperationDescriptor(operationName,descriptor));return Object.freeze(normalizedOperations)}function freezeOwnMap(source){const map=Object.create(null);for(const[key,value]of Object.entries(source))setOwnProperty(map,key,value);return Object.freeze(map)}function cloneValidationOptions(options){const validationOptions={...options};delete validationOptions.operation;delete validationOptions.mode;return validationOptions}var Schema=class{constructor(structure,types,validators,operations={}){this.structure=structure;this.types=freezeOwnMap(types);this.validators=freezeOwnMap(validators);this.operations=normalizeOperations(operations);this._installOperationMethods()}_typeError(field){return this._paramError(field,`TYPE_CAST_FAILED`,`Value could not be cast to the required type.`)}_paramError(field,code,message,params={}){const e=new Error(message);e.errorObject={field,code,message,params};return e}_paramToBeSkipped(parameterName,skipParams,fieldName){if(typeof skipParams!==`object`||skipParams===null)return false;if(Array.isArray(skipParams[fieldName])&&skipParams[fieldName].includes(parameterName))return true;return false}_fieldToBeSkipped(fieldPath,options){return Array.isArray(options.skipFields)&&options.skipFields.includes(fieldPath)}_mergeErrors(target,source){for(const[fieldPath,error]of Object.entries(source))setOwnProperty(target,fieldPath,error)}_singleErrorMap(error){const errors={};setOwnProperty(errors,error.field,error);return errors}_assertSupportedOptions(options={}){if(Object.hasOwn(options,`onlyObjectValues`))throw new Error("Unsupported validation option `onlyObjectValues`. Call `patch()` directly.");if(Object.hasOwn(options,`mode`))throw new Error("Unsupported validation option `mode`. Call `validateWith()` or an operation method directly.");if(Object.hasOwn(options,`operation`))throw new Error("Unsupported validation option `operation`. Call `validateWith()` or an operation method directly.")}_buildOperationSettings(operationName,operation,object){return{operationName,operation,targetFieldNames:operation.targetFields===`input`?Object.keys(object):Object.keys(this.structure),outputFieldNames:operation.outputFields===`input`?Object.keys(object):Object.keys(this.structure),enforceRequired:operation.enforceRequired,applyDefaults:operation.applyDefaults,rejectExplicitUndefined:operation.rejectExplicitUndefined,defaultedFields:new Set,isFieldPresent:fieldName=>Object.hasOwn(object,fieldName)}}_assertPlainObjectInput(methodName,object){if(!isPlainObject(object))throw new Error(`${methodName}() expects a plain object input.`)}_resolvePathValidationRequest(options={}){const operationName=options.operation??options.mode??`patch`;if(Object.hasOwn(options,`operation`)&&Object.hasOwn(options,`mode`)&&options.operation!==options.mode)throw new Error("Path validation options `operation` and `mode` must match when both are provided.");if(!Object.hasOwn(this.operations,operationName))throw new Error(`Unknown operation "${operationName}".`);return{operationName,operation:this.operations[operationName],validationOptions:cloneValidationOptions(options)}}_buildOperationResult(object,workingObject,settings){const validatedObject={};for(const fieldName of settings.outputFieldNames){if(!Object.hasOwn(this.structure,fieldName))continue;const fieldPresent=settings.isFieldPresent(fieldName);if(!(workingObject[fieldName]!==void 0||fieldPresent&&object[fieldName]===null||settings.defaultedFields.has(fieldName)))continue;if(!fieldPresent&&!settings.defaultedFields.has(fieldName))continue;setOwnProperty(validatedObject,fieldName,workingObject[fieldName])}return validatedObject}_resolveObjectFieldMode(fieldPath,definition){return resolveObjectFieldMode(fieldPath,definition)}_resolveArrayItemsConfig(fieldPath,definition){return resolveArrayItemsConfig(fieldPath,definition)}_resolveObjectValuesConfig(fieldPath,definition){return resolveObjectValuesConfig(fieldPath,definition)}_buildArrayItemSettings(definition,settings){if(definition.type===`object`&&Object.hasOwn(definition,`schema`))return{...settings,operationName:`replace`,operation:this.operations.replace};return settings}_castValue(definition,rawValue,fieldPath,currentObject,containerKey,objectBeforeCast,options,settings){const nullable=definition.nullable===true||options.nullable===true;const nullOnEmpty=definition.nullOnEmpty===true||options.nullOnEmpty===true;if(!Object.hasOwn(this.types,definition.type))throw new Error(`No casting function for type: ${definition.type}`);const typeHandler=this.types[definition.type];if(rawValue===null){if(nullable){setOwnProperty(currentObject,containerKey,null);return{errors:{},shouldContinue:false}}return{errors:this._singleErrorMap({field:fieldPath,code:`NOT_NULLABLE`,message:`Field cannot be null`,params:{}}),shouldContinue:false}}if(rawValue===``&&nullOnEmpty){setOwnProperty(currentObject,containerKey,null);return{errors:{},shouldContinue:false}}const context={schema:this,definition,value:rawValue,fieldName:fieldPath,object:currentObject,objectBeforeCast,valueBeforeCast:rawValue,options,mode:settings.operationName,operation:settings.operationName,fieldPresent:true,computedOptions:{nullable:nullable||nullOnEmpty,nullOnEmpty},throwTypeError:()=>{throw this._typeError(fieldPath)},throwParamError:(code,message,params)=>{throw this._paramError(fieldPath,code,message,params)}};try{const castResult=typeHandler(context);if(isThenable$1(castResult))throw new Error(`Type handler for "${definition.type}" must be synchronous.`);if(castResult!==void 0){setOwnProperty(currentObject,containerKey,castResult);context.value=castResult}}catch(e){if(e.errorObject)return{errors:this._singleErrorMap(e.errorObject),shouldContinue:false};throw e}return{errors:{},context,shouldContinue:true}}_runFieldValidators(definition,fieldPath,currentObject,containerKey,context,options){for(const paramName of Object.keys(definition)){if(paramName===`type`)continue;if(this._paramToBeSkipped(paramName,options.skipParams,fieldPath))continue;if(!Object.hasOwn(this.validators,paramName))continue;const validatorHandler=this.validators[paramName];try{context.parameterName=paramName;context.parameterValue=definition[paramName];const validatorResult=validatorHandler(context);if(isThenable$1(validatorResult))throw new Error(`Validator handler for "${paramName}" must be synchronous.`);if(validatorResult!==void 0){setOwnProperty(currentObject,containerKey,validatorResult);context.value=validatorResult}}catch(e){if(e.errorObject)return this._singleErrorMap(e.errorObject);throw e}}return{}}_normalizeAndValidateValue(definition,rawValue,fieldPath,currentObject,containerKey,objectBeforeCast,options,settings){const castResult=this._castValue(definition,rawValue,fieldPath,currentObject,containerKey,objectBeforeCast,options,settings);if(Object.keys(castResult.errors).length>0)return castResult.errors;if(!castResult.shouldContinue)return{};const{context}=castResult;const nestedErrors=this._validateNestedValue(definition,fieldPath,currentObject,containerKey,options,settings);if(Object.keys(nestedErrors).length>0)return nestedErrors;context.value=currentObject[containerKey];return this._runFieldValidators(definition,fieldPath,currentObject,containerKey,context,options)}_normalizeDefault(definition,defaultValue,{fieldPath,currentObject,containerKey,objectBeforeCast,options,settings}){const defaultObject={...currentObject};setOwnProperty(defaultObject,containerKey,defaultValue);return{errors:this._normalizeAndValidateValue(definition,defaultValue,fieldPath,defaultObject,containerKey,objectBeforeCast,options,settings),value:defaultObject[containerKey]}}_validateNestedValue(definition,fieldPath,currentObject,containerKey,options,settings){if(definition.type===`object`){const objectMode=this._resolveObjectFieldMode(fieldPath,definition);if(objectMode.kind===`nested`)return this._validateNestedObjectSchema(objectMode,fieldPath,currentObject,containerKey,options,settings);if(objectMode.kind===`map`)return this._validateObjectValues(fieldPath,currentObject,containerKey,objectMode.valuesConfig,options,settings);return{}}if(definition.type!==`array`)return{};const itemsConfig=this._resolveArrayItemsConfig(fieldPath,definition);if(!itemsConfig)return{};return this._validateArrayItems(fieldPath,currentObject,containerKey,itemsConfig,options,settings)}_validateNestedObjectSchema(objectMode,fieldPath,currentObject,containerKey,options,settings){const sourceObject=currentObject[containerKey];const nestedInput=objectMode.allowAdditionalProperties?this._extractKnownObjectFields(sourceObject,objectMode.schema):sourceObject;const nestedResult=objectMode.schema._validateWithOperation(settings.operationName,settings.operation,nestedInput,buildNestedOptions(options,fieldPath));setOwnProperty(currentObject,containerKey,objectMode.allowAdditionalProperties?this._mergeKnownAndPassthroughObjectFields(sourceObject,objectMode.schema,nestedResult.validatedObject):nestedResult.validatedObject);return prefixErrorMap(nestedResult.errors,fieldPath)}_extractKnownObjectFields(sourceObject,nestedSchema){const knownObject={};for(const[key,value]of Object.entries(sourceObject))if(Object.hasOwn(nestedSchema.structure,key))setOwnProperty(knownObject,key,value);return knownObject}_mergeKnownAndPassthroughObjectFields(sourceObject,nestedSchema,validatedObject){const mergedObject={};for(const key of Object.keys(sourceObject)){if(!Object.hasOwn(nestedSchema.structure,key)){setOwnProperty(mergedObject,key,sourceObject[key]);continue}if(Object.hasOwn(validatedObject,key))setOwnProperty(mergedObject,key,validatedObject[key])}for(const[key,value]of Object.entries(validatedObject))if(!Object.hasOwn(mergedObject,key))setOwnProperty(mergedObject,key,value);return mergedObject}_validateObjectValues(fieldPath,currentObject,containerKey,valuesConfig,options,settings){const originalEntries=currentObject[containerKey];const normalizedEntries={...originalEntries};const errors={};setOwnProperty(currentObject,containerKey,normalizedEntries);for(const key of Object.keys(originalEntries)){const valuePath=joinPath(fieldPath,key);if(this._fieldToBeSkipped(valuePath,options))continue;const rawValue=normalizedEntries[key];if(rawValue===void 0){if(settings.rejectExplicitUndefined)this._mergeErrors(errors,this._singleErrorMap(this._typeError(valuePath).errorObject));else delete normalizedEntries[key];continue}if(valuesConfig.kind===`schema`){const valueResult=valuesConfig.schema._validateWithOperation(`replace`,valuesConfig.schema.operations.replace,rawValue,buildNestedOptions(options,valuePath));setOwnProperty(normalizedEntries,key,valueResult.validatedObject);this._mergeErrors(errors,prefixErrorMap(valueResult.errors,valuePath));continue}const valueErrors=this._normalizeAndValidateValue(valuesConfig.definition,rawValue,valuePath,normalizedEntries,key,originalEntries,options,this._buildArrayItemSettings(valuesConfig.definition,settings));this._mergeErrors(errors,valueErrors)}return errors}_validateArrayItems(fieldPath,currentObject,containerKey,itemsConfig,options,settings){const originalItems=currentObject[containerKey];const normalizedItems=originalItems.slice();const errors={};setOwnProperty(currentObject,containerKey,normalizedItems);for(let index=0;index<normalizedItems.length;index++){const itemPath=joinPath(fieldPath,index);if(this._fieldToBeSkipped(itemPath,options))continue;if(!Object.hasOwn(originalItems,index)||normalizedItems[index]===void 0){if(settings.rejectExplicitUndefined)this._mergeErrors(errors,this._singleErrorMap(this._typeError(itemPath).errorObject));else delete normalizedItems[index];continue}if(itemsConfig.kind===`schema`){const itemResult=itemsConfig.schema._validateWithOperation(`replace`,itemsConfig.schema.operations.replace,normalizedItems[index],buildNestedOptions(options,itemPath));setOwnProperty(normalizedItems,index,itemResult.validatedObject);this._mergeErrors(errors,prefixErrorMap(itemResult.errors,itemPath));continue}const itemErrors=this._normalizeAndValidateValue(itemsConfig.definition,normalizedItems[index],itemPath,normalizedItems,index,originalItems,options,this._buildArrayItemSettings(itemsConfig.definition,settings));this._mergeErrors(errors,itemErrors)}return errors}_validateField(fieldName,object,validatedObject,options,settings){if(!Object.hasOwn(this.structure,fieldName))return{};const definition=this.structure[fieldName];if(this._fieldToBeSkipped(fieldName,options))return{};const fieldPresent=settings.isFieldPresent(fieldName);const rawValue=object[fieldName];const valueMissing=rawValue===void 0;if(settings.enforceRequired&&definition.required&&(!fieldPresent||valueMissing)){if(!this._paramToBeSkipped(`required`,options.skipParams,fieldName))return this._singleErrorMap({field:fieldName,code:`REQUIRED`,message:`Field is required`,params:{}})}if(!fieldPresent)return{};if(valueMissing){if(settings.rejectExplicitUndefined)return this._singleErrorMap(this._typeError(fieldName).errorObject);return{}}return this._normalizeAndValidateValue(definition,rawValue,fieldName,validatedObject,fieldName,object,options,settings)}_validateWithOperation(operationName,operation,object,options){this._assertSupportedOptions(options);const errors={};const workingObject={...object};const settings=this._buildOperationSettings(operationName,operation,object);for(const fieldName of Object.keys(object))if(!Object.hasOwn(this.structure,fieldName))setOwnProperty(errors,fieldName,{field:fieldName,code:`FIELD_NOT_ALLOWED`,message:`Field not allowed`,params:{}});for(const fieldName of settings.targetFieldNames){const fieldErrors=this._validateField(fieldName,object,workingObject,options,settings);this._mergeErrors(errors,fieldErrors)}if(settings.applyDefaults)for(const fieldName of Object.keys(this.structure)){if(settings.isFieldPresent(fieldName))continue;if(this.structure[fieldName].defaultTo!==void 0){const definition=this.structure[fieldName];const defaultValue=typeof definition.defaultTo===`function`?definition.defaultTo():definition.defaultTo;const defaultResult=this._normalizeDefault(definition,defaultValue,{fieldPath:fieldName,currentObject:workingObject,containerKey:fieldName,objectBeforeCast:object,options,settings});this._mergeErrors(errors,defaultResult.errors);if(Object.keys(defaultResult.errors).length>0)continue;setOwnProperty(workingObject,fieldName,defaultResult.value);settings.defaultedFields.add(fieldName)}}return{validatedObject:this._buildOperationResult(object,workingObject,settings),errors}}_validateSelectedTree(selectionTree,object,options,settings,basePath=``){const errors={};const validatedObject={};for(const fieldName of sortSelectionKeys(Object.keys(selectionTree))){const fieldPath=buildFieldPath(basePath,fieldName);if(!Object.hasOwn(this.structure,fieldName))throw new Error(`Unknown schema path "${fieldPath}".`);const fieldErrors=this._validateSelectedField(fieldName,selectionTree[fieldName],object,validatedObject,options,settings,fieldPath);this._mergeErrors(errors,fieldErrors)}return{validatedObject,errors}}_validateSelectedField(fieldName,selectionNode,object,validatedObject,options,settings,fieldPath){if(!Object.hasOwn(this.structure,fieldName))return{};const definition=this.structure[fieldName];const exactSelected=selectionNode.self===true;const hasChildren=hasSelectionChildren(selectionNode);if(this._fieldToBeSkipped(fieldPath,options))return{};const fieldPresent=Object.hasOwn(object,fieldName);const rawValue=object[fieldName];const errors={};if(!fieldPresent){if(exactSelected&&settings.enforceRequired&&definition.required&&!this._paramToBeSkipped(`required`,options.skipParams,fieldPath))this._mergeErrors(errors,this._singleErrorMap({field:fieldPath,code:`REQUIRED`,message:`Field is required`,params:{}}));if(exactSelected&&settings.applyDefaults&&definition.defaultTo!==void 0){const defaultValue=typeof definition.defaultTo===`function`?definition.defaultTo():definition.defaultTo;const defaultResult=this._normalizeDefault(definition,defaultValue,{fieldPath,currentObject:validatedObject,containerKey:fieldName,objectBeforeCast:object,options,settings});this._mergeErrors(errors,defaultResult.errors);if(Object.keys(defaultResult.errors).length===0)setOwnProperty(validatedObject,fieldName,defaultResult.value)}return errors}if(rawValue===void 0){if(exactSelected&&settings.rejectExplicitUndefined)return this._singleErrorMap(this._typeError(fieldPath).errorObject);return{}}const currentObject={[fieldName]:rawValue};if(exactSelected){const fieldErrors=this._normalizeAndValidateValue(definition,rawValue,fieldPath,currentObject,fieldName,object,options,settings);if(Object.hasOwn(currentObject,fieldName)&&currentObject[fieldName]!==void 0)setOwnProperty(validatedObject,fieldName,currentObject[fieldName]);else if(currentObject[fieldName]===null)setOwnProperty(validatedObject,fieldName,null);return fieldErrors}if(!hasChildren)return{};const castResult=this._castValue(definition,rawValue,fieldPath,currentObject,fieldName,object,options,settings);if(Object.keys(castResult.errors).length>0)return castResult.errors;if(!castResult.shouldContinue)return{};const nestedResult=this._validateSelectedDescendants(definition,selectionNode.children,fieldPath,currentObject,fieldName,options,settings);if(hasSelectedValue(currentObject[fieldName]))setOwnProperty(validatedObject,fieldName,currentObject[fieldName]);return nestedResult}_validateSelectedDescendants(definition,selectionTree,fieldPath,currentObject,containerKey,options,settings){if(definition.type===`object`){const objectMode=this._resolveObjectFieldMode(fieldPath,definition);if(objectMode.kind!==`nested`)throw new Error(`Schema path "${fieldPath}" does not support nested field selection.`);const nestedValue=currentObject[containerKey];if(!isPlainObject(nestedValue))return{};const nestedResult=objectMode.schema._validateSelectedTree(selectionTree,nestedValue,buildNestedOptions(options,fieldPath),{...settings,defaultedFields:new Set});setOwnProperty(currentObject,containerKey,nestedResult.validatedObject);return prefixErrorMap(nestedResult.errors,fieldPath)}if(definition.type===`array`){const itemsConfig=this._resolveArrayItemsConfig(fieldPath,definition);if(!itemsConfig)throw new Error(`Schema path "${fieldPath}" does not define array items for nested selection.`);return this._validateSelectedArrayItems(fieldPath,currentObject,containerKey,itemsConfig,selectionTree,options,settings)}throw new Error(`Schema path "${fieldPath}" does not support nested field selection.`)}_validateSelectedArrayItems(fieldPath,currentObject,containerKey,itemsConfig,selectionTree,options,settings){const normalizedItems=[];const sourceItems=currentObject[containerKey];const errors={};setOwnProperty(currentObject,containerKey,normalizedItems);for(const indexKey of sortSelectionKeys(Object.keys(selectionTree))){if(!/^[0-9]+$/.test(indexKey))throw new Error(`Schema path "${joinPath(fieldPath,indexKey)}" is invalid because array segments must use numeric indexes.`);const index=Number(indexKey);const itemPath=joinPath(fieldPath,index);const selectionNode=selectionTree[indexKey];const exactSelected=selectionNode.self===true;const hasChildren=hasSelectionChildren(selectionNode);if(this._fieldToBeSkipped(itemPath,options))continue;if(!Object.hasOwn(sourceItems,index)){if(exactSelected&&settings.rejectExplicitUndefined)setOwnProperty(errors,itemPath,this._typeError(itemPath).errorObject);continue}const rawValue=sourceItems[index];if(rawValue===void 0){if(exactSelected&&settings.rejectExplicitUndefined)setOwnProperty(errors,itemPath,this._typeError(itemPath).errorObject);continue}if(itemsConfig.kind===`schema`){if(exactSelected){const itemResult=itemsConfig.schema._validateWithOperation(`replace`,itemsConfig.schema.operations.replace,rawValue,buildNestedOptions(options,itemPath));if(hasSelectedValue(itemResult.validatedObject))setOwnProperty(normalizedItems,index,itemResult.validatedObject);this._mergeErrors(errors,prefixErrorMap(itemResult.errors,itemPath));continue}if(!hasChildren)continue;const itemResult=itemsConfig.schema._validateSelectedTree(selectionNode.children,rawValue,buildNestedOptions(options,itemPath),{...settings,operationName:`replace`,operation:itemsConfig.schema.operations.replace,defaultedFields:new Set});if(hasSelectedValue(itemResult.validatedObject))setOwnProperty(normalizedItems,index,itemResult.validatedObject);this._mergeErrors(errors,prefixErrorMap(itemResult.errors,itemPath));continue}const itemSettings=this._buildArrayItemSettings(itemsConfig.definition,settings);const itemHolder=[rawValue];if(exactSelected){const itemErrors=this._normalizeAndValidateValue(itemsConfig.definition,rawValue,itemPath,itemHolder,0,sourceItems,options,itemSettings);if(Object.hasOwn(itemHolder,0)&&itemHolder[0]!==void 0)setOwnProperty(normalizedItems,index,itemHolder[0]);else if(itemHolder[0]===null)setOwnProperty(normalizedItems,index,null);this._mergeErrors(errors,itemErrors);continue}if(!hasChildren)continue;const castResult=this._castValue(itemsConfig.definition,rawValue,itemPath,itemHolder,0,sourceItems,options,itemSettings);if(Object.keys(castResult.errors).length>0){this._mergeErrors(errors,castResult.errors);continue}if(!castResult.shouldContinue)continue;const itemErrors=this._validateSelectedDescendants(itemsConfig.definition,selectionNode.children,itemPath,itemHolder,0,options,itemSettings);if(hasSelectedValue(itemHolder[0]))setOwnProperty(normalizedItems,index,itemHolder[0]);this._mergeErrors(errors,itemErrors)}return errors}validateWith(operationName,object,options={}){if(!Object.hasOwn(this.operations,operationName))throw new Error(`Unknown operation "${operationName}".`);const operation=this.operations[operationName];this._assertPlainObjectInput(operationName,object);return this._validateWithOperation(operationName,operation,object,options)}validateAt(path,object,options={}){this._assertPlainObjectInput(`validateAt`,object);const pathSegments=buildPathSegments(path);const{operationName,operation,validationOptions}=this._resolvePathValidationRequest(options);const result=this._validateSelectedTree(buildSelectionTree([path]),object,validationOptions,this._buildOperationSettings(operationName,operation,object));return{validatedValue:getValueAtPath(result.validatedObject,pathSegments),errors:result.errors}}validatePaths(paths,object,options={}){this._assertPlainObjectInput(`validatePaths`,object);if(!Array.isArray(paths)||paths.length===0)throw new Error(`validatePaths() expects a non-empty array of schema paths.`);const{operationName,operation,validationOptions}=this._resolvePathValidationRequest(options);return this._validateSelectedTree(buildSelectionTree(paths),object,validationOptions,this._buildOperationSettings(operationName,operation,object))}_installOperationMethods(){for(const operationName of Object.keys(this.operations)){if(operationName in this)throw new Error(`Operation name "${operationName}" is reserved and cannot be used as a schema method.`);this[operationName]=(object,options={})=>this.validateWith(operationName,object,options)}}toJsonSchema(options={}){return buildJsonSchema(this,options)}getFieldDefinitions(){return createIntrospectionSnapshot(this.structure)}getFieldDefinition(path){if(typeof path!==`string`||path.trim()===``)throw new Error(`Field path must be a non-empty string.`);const definition=resolveDefinitionFromSchemaPath(this,buildPathSegments(path.trim()));return definition===null?null:createIntrospectionSnapshot(definition)}getFieldMessages(path){const definition=this.getFieldDefinition(path);if(!definition||typeof definition.messages!==`object`||definition.messages===null)return Object.freeze({});return createIntrospectionSnapshot(definition.messages)}cleanup(object,parameterName){const newObject={};for(const k of Object.keys(object))if(Object.hasOwn(this.structure,k)&&this.structure[k][parameterName])setOwnProperty(newObject,k,object[k]);return newObject}};var{parse:$parse,stringify:$stringify}=JSON;var{keys}=Object;var Primitive=String;var primitive=`string`;var object=`object`;var noop=(_,value)=>value;var set=(known,input,value)=>{const index=Primitive(input.push(value)-1);known.set(value,index);return index};var stringify=(value,replacer,space)=>{const $=replacer&&typeof replacer===object?(k,v)=>k===``||-1<replacer.indexOf(k)?v:void 0:replacer||noop;const known=new Map;const input=[];const output=[];let i=+set(known,input,$.call({"":value},``,value));let firstRun=!i;while(i<input.length){firstRun=true;output[i]=$stringify(input[i++],replace,space)}return`[`+output.join(`,`)+`]`;function replace(key,value){if(firstRun){firstRun=!firstRun;return value}const after=$.call(this,key,value);switch(typeof after){case object:if(after===null)return after;case primitive:return known.get(after)||set(known,input,after)}return after}};var DEFAULT_BOOLEAN_TRUE_VALUES=new Set([`true`,`1`,`yes`,`y`,`on`]);var DEFAULT_BOOLEAN_FALSE_VALUES=new Set([`false`,`0`,`no`,`n`,`off`]);function isThenable(value){return value!==null&&(typeof value===`object`||typeof value===`function`)&&typeof value.then===`function`}function normalizeFiniteNumberInput(value){if(typeof value===`number`)return Number.isFinite(value)?value:null;if(typeof value===`bigint`){const numberValue=Number(value);return Number.isSafeInteger(numberValue)?numberValue:null}if(typeof value===`string`){const trimmed=value.trim();if(trimmed===``)return null;const numberValue=Number(trimmed);return Number.isFinite(numberValue)?numberValue:null}return null}function deepEqual(left,right){if(Object.is(left,right))return true;if(left instanceof Date&&right instanceof Date)return left.getTime()===right.getTime();if(left instanceof RegExp&&right instanceof RegExp)return left.source===right.source&&left.flags===right.flags;if(Array.isArray(left)||Array.isArray(right)){if(!Array.isArray(left)||!Array.isArray(right))return false;if(left.length!==right.length)return false;for(let index=0;index<left.length;index++)if(!deepEqual(left[index],right[index]))return false;return true}if(left===null||right===null||typeof left!==`object`||typeof right!==`object`)return false;if(Object.getPrototypeOf(left)!==Object.getPrototypeOf(right))return false;const leftKeys=Object.keys(left);const rightKeys=Object.keys(right);if(leftKeys.length!==rightKeys.length)return false;for(const key of leftKeys){if(!Object.hasOwn(right,key))return false;if(!deepEqual(left[key],right[key]))return false}return true}var CorePlugin={install(api){const{addType,addValidator}=api;addType(`none`,context=>context.value);addType(`file`,context=>{const val=context.value;if(val===void 0||val===null)context.throwTypeError();const valType=typeof val;if(valType===`string`||valType===`number`||valType===`boolean`){const s=val.toString();return context.definition.noTrim?s:s.trim()}context.throwTypeError()});addType(`string`,context=>{const val=context.value;if(val===void 0||val===null)return``;const valType=typeof val;if(valType===`string`||valType===`number`||valType===`boolean`){const s=val.toString();return context.definition.noTrim?s:s.trim()}context.throwTypeError()});addType(`blob`,context=>context.value);addType(`number`,context=>{const numberValue=normalizeFiniteNumberInput(context.value);if(numberValue===null)context.throwTypeError();return numberValue});addType(`integer`,context=>{const numberValue=normalizeFiniteNumberInput(context.value);if(numberValue===null||!Number.isInteger(numberValue))context.throwTypeError();return numberValue});addType(`epochMilliseconds`,context=>{const epochMilliseconds=castEpochInteger(context.value,EPOCH_MILLISECONDS_LIMIT);if(epochMilliseconds===null)context.throwTypeError();return epochMilliseconds});addType(`epochSeconds`,context=>{const epochSeconds=castEpochInteger(context.value,EPOCH_SECONDS_LIMIT);if(epochSeconds===null)context.throwTypeError();return epochSeconds});addType(`dateTime`,context=>{const temporalPrecision=resolveTemporalPrecision(context.definition,context.fieldName);if(!isValidDateTime(context.value,temporalPrecision))context.throwTypeError();return context.value});addType(`date`,context=>{if(!isValidDate(context.value))context.throwTypeError();return context.value});addType(`time`,context=>{const temporalPrecision=resolveTemporalPrecision(context.definition,context.fieldName);if(!isValidTime(context.value,temporalPrecision))context.throwTypeError();return context.value});addType(`array`,context=>{if(context.definition.type===`array`&&!Array.isArray(context.value))return[context.value];return context.value});addType(`object`,context=>{if(!isPlainObject(context.value))context.throwTypeError();return context.value});addType(`serialize`,context=>{try{return JSON.stringify(context.value)}catch(e){try{return stringify(context.value)}catch(e2){context.throwTypeError()}}});addType(`boolean`,context=>{if(typeof context.value===`boolean`)return context.value;if(typeof context.value===`number`){if(context.value===1)return true;if(context.value===0)return false;context.throwTypeError()}if(typeof context.value===`bigint`){if(context.value===1n)return true;if(context.value===0n)return false;context.throwTypeError()}if(typeof context.value===`string`){const falseVal=String(context.definition.stringFalseWhen||`false`).trim().toLowerCase();const trueVal=String(context.definition.stringTrueWhen||`true`).trim().toLowerCase();const lowerValue=context.value.trim().toLowerCase();const falseValues=new Set([...DEFAULT_BOOLEAN_FALSE_VALUES,falseVal]);const trueValues=new Set([...DEFAULT_BOOLEAN_TRUE_VALUES,trueVal]);if(falseValues.has(lowerValue))return false;if(trueValues.has(lowerValue))return true}context.throwTypeError()});addType(`id`,context=>{if(typeof context.value===`number`){if(Number.isSafeInteger(context.value)&&context.value>0)return context.value;context.throwTypeError()}if(typeof context.value===`bigint`){if(context.value>0n&&context.value<=BigInt(Number.MAX_SAFE_INTEGER))return Number(context.value);context.throwTypeError()}if(typeof context.value===`string`){const trimmed=context.value.trim();if(!/^[1-9][0-9]*$/.test(trimmed))context.throwTypeError();const numberValue=Number(trimmed);if(!Number.isSafeInteger(numberValue))context.throwTypeError();return numberValue}context.throwTypeError()});addValidator(`minLength`,context=>{if(context.value===void 0)return;if(context.definition.type===`string`&&context.value.toString&&context.value.toString().length<context.parameterValue)context.throwParamError(`MIN_LENGTH`,`Length must be at least ${context.parameterValue} characters.`,{min:context.parameterValue,actual:context.value.toString().length})});addValidator(`min`,context=>{if(context.value===void 0)return;if(isNumericDefinition(context.definition)&&typeof context.value===`number`&&context.value<context.parameterValue)context.throwParamError(`MIN_VALUE`,`Value must be at least ${context.parameterValue}.`,{min:context.parameterValue,actual:context.value})});addValidator(`maxLength`,context=>{if(context.value===void 0)return;if(context.definition.type===`string`&&context.value.toString&&context.value.toString().length>context.parameterValue)context.throwParamError(`MAX_LENGTH`,`Length must be no more than ${context.parameterValue} characters.`,{max:context.parameterValue,actual:context.value.toString().length})});addValidator(`max`,context=>{if(context.value===void 0)return;if(isNumericDefinition(context.definition)&&typeof context.value===`number`&&context.value>context.parameterValue)context.throwParamError(`MAX_VALUE`,`Value must be no more than ${context.parameterValue}.`,{max:context.parameterValue,actual:context.value})});addValidator(`enum`,context=>{if(!Array.isArray(context.parameterValue))throw new Error(`Enum for ${context.fieldName} must be an array.`);if(!context.parameterValue.some(allowedValue=>deepEqual(allowedValue,context.value)))context.throwParamError(`ENUM_VALUE`,`Value must match one of the allowed enum values.`,{allowed:context.parameterValue})});addValidator(`pattern`,context=>{if(context.value===void 0)return;if(context.definition.type!==`string`||typeof context.value!==`string`)return;const patternValue=context.parameterValue;const matcher=patternValue instanceof RegExp?new RegExp(patternValue.source,patternValue.flags):typeof patternValue===`string`?new RegExp(patternValue):null;if(!matcher)throw new Error(`Pattern for ${context.fieldName} must be a string or RegExp.`);if(!matcher.test(context.value))context.throwParamError(`PATTERN`,`Value does not match the required pattern.`,{pattern:matcher.source})});addValidator(`strictBoolean`,context=>{if(!context.parameterValue)return;if(context.definition.type!==`boolean`)throw new Error(`strictBoolean can only be used on boolean fields (${context.fieldName}).`);if(typeof context.valueBeforeCast!==`boolean`)context.throwParamError(`STRICT_BOOLEAN`,`Value must be a boolean.`)});addValidator(`validator`,context=>{if(typeof context.parameterValue!==`function`)throw new Error(`Validator for ${context.fieldName} must be a function.`);const r=context.parameterValue(context.value,context.object,context);if(isThenable(r))throw new Error(`Custom validator for "${context.fieldName}" must be synchronous.`);if(typeof r===`string`)context.throwParamError(`CUSTOM_VALIDATOR_FAILED`,r)});addValidator(`uppercase`,context=>{if(typeof context.value===`string`)return context.value.toUpperCase()});addValidator(`lowercase`,context=>{if(typeof context.value===`string`)return context.value.toLowerCase()});addValidator(`length`,context=>{if(typeof context.value===`string`)return context.value.substr(0,context.parameterValue);else if(Number.isInteger(Number(context.valueBeforeCast))&&String(context.valueBeforeCast).length>context.parameterValue)context.throwParamError(`RANGE_EXCEEDED`,`Numeric value is out of the allowed character range.`,{max:context.parameterValue,actual:String(context.valueBeforeCast).length})});addValidator(`notEmpty`,context=>{if(context.parameterValue&&typeof context.value===`string`&&context.value===``)context.throwParamError(`NOT_EMPTY`,`Field cannot be empty.`)});addValidator(`required`,()=>{});addValidator(`unsigned`,()=>{});addValidator(`precision`,()=>{});addValidator(`scale`,()=>{});addValidator(`temporalPrecision`,context=>{if(context.definition.type!==`time`&&context.definition.type!==`dateTime`)throw new Error(`temporalPrecision can only be used on time or dateTime fields (${context.fieldName}).`)});addValidator(`nullable`,()=>{});addValidator(`nullOnEmpty`,()=>{});addValidator(`defaultTo`,()=>{})}};var factoryTypesBySource=new WeakMap;var factoryValidatorsBySource=new WeakMap;var registryMetadataSymbol=Symbol.for(`json-rest-schema.registry-metadata`);function registerTypeHandler(types,name,handler){if(typeof handler!==`function`)throw new Error(`Type handler for '${name}' must be a function.`);setOwnProperty(types,name,handler)}function registerValidatorHandler(validators,name,handler){if(typeof handler!==`function`)throw new Error(`Validator handler for '${name}' must be a function.`);setOwnProperty(validators,name,handler)}function createHandlerRegistry(source={}){const registry=Object.create(null);for(const[name,handler]of Object.entries(source))setOwnProperty(registry,name,handler);return registry}function installPlugin(plugin,api){if(typeof plugin.install!==`function`)throw new Error(`Plugin must have an install method.`);plugin.install(api)}function attachRegistryMetadata(target,types,validators){factoryTypesBySource.set(target,types);factoryValidatorsBySource.set(target,validators);Object.defineProperty(target,registryMetadataSymbol,{value:Object.freeze({getTypes:()=>types,getValidators:()=>validators}),enumerable:false,configurable:false,writable:false})}function extractRegistryMetadata(source){if(!source||typeof source!==`object`&&typeof source!==`function`)return null;const types=factoryTypesBySource.get(source);const validators=factoryValidatorsBySource.get(source);if(types&&validators)return{types,validators};const symbolMetadata=source[registryMetadataSymbol];if(symbolMetadata&&typeof symbolMetadata.getTypes===`function`&&typeof symbolMetadata.getValidators===`function`)return{types:symbolMetadata.getTypes(),validators:symbolMetadata.getValidators()};if(typeof source===`object`&&source.types&&typeof source.types===`object`&&source.validators&&typeof source.validators===`object`&&typeof source.create===`function`&&typeof source.replace===`function`&&typeof source.patch===`function`&&typeof source.toJsonSchema===`function`)return{types:source.types,validators:source.validators};return null}function normalizeFactorySources(sources){if(sources.length===1&&Array.isArray(sources[0]))return sources[0];return sources}function areEquivalentHandlers(left,right){return left===right}function mergeRegistryHandlers(target,source,kind){for(const[name,handler]of Object.entries(source)){if(Object.hasOwn(target,name)&&!areEquivalentHandlers(target[name],handler))throw new Error(`Cannot merge schema factories with conflicting ${kind} "${name}".`);setOwnProperty(target,name,handler)}}function resolveMergedRegistries(fallbackTypes,fallbackValidators,sources){const normalizedSources=normalizeFactorySources(sources).filter(Boolean);if(normalizedSources.length<1)return{types:createHandlerRegistry(fallbackTypes),validators:createHandlerRegistry(fallbackValidators)};const mergedTypes=Object.create(null);const mergedValidators=Object.create(null);for(const source of normalizedSources){const metadata=extractRegistryMetadata(source);if(!metadata)throw new Error(`Factory sources must be schema instances or schema factories created by json-rest-schema.`);mergeRegistryHandlers(mergedTypes,metadata.types,`type`);mergeRegistryHandlers(mergedValidators,metadata.validators,`validator`)}return{types:mergedTypes,validators:mergedValidators}}function createSchemaFactory({types={},validators={},installCore=true}={}){const factoryTypes=createHandlerRegistry(types);const factoryValidators=createHandlerRegistry(validators);const factory=(structure,options={})=>{const schema=new Schema(structure,factoryTypes,factoryValidators,options.operations);attachRegistryMetadata(schema,factoryTypes,factoryValidators);return schema};attachRegistryMetadata(factory,factoryTypes,factoryValidators);factory.addType=(name,handler)=>{registerTypeHandler(factoryTypes,name,handler)};factory.addValidator=(name,handler)=>{registerValidatorHandler(factoryValidators,name,handler)};factory.use=plugin=>{installPlugin(plugin,{addType:factory.addType,addValidator:factory.addValidator})};factory.createFactory=(...sources)=>{const mergedRegistries=resolveMergedRegistries(factoryTypes,factoryValidators,sources);return createSchemaFactory({types:mergedRegistries.types,validators:mergedRegistries.validators,installCore:false})};if(installCore)factory.use(CorePlugin);return factory}var createSchema=createSchemaFactory({installCore:true});var JSON_REST_SCHEMA_MODES=new Set([`create`,`replace`,`patch`]);var JSON_REST_SCHEMA_ERRORS=Object.freeze({REQUIRED:{messageKey:`required`,code:`kernel.validation.field.required`},TYPE_CAST_FAILED:{messageKey:`default`,code:`kernel.validation.field.typeCastFailed`},NOT_NULLABLE:{messageKey:`default`,code:`kernel.validation.field.notNullable`},MIN_LENGTH:{messageKey:`minLength`,code:`kernel.validation.field.minLength`},MAX_LENGTH:{messageKey:`maxLength`,code:`kernel.validation.field.maxLength`},MIN_VALUE:{messageKey:`min`,code:`kernel.validation.field.minValue`},MAX_VALUE:{messageKey:`max`,code:`kernel.validation.field.maxValue`},PATTERN:{messageKey:`pattern`,code:`kernel.validation.field.pattern`},ENUM_VALUE:{messageKey:`enum`,code:`kernel.validation.field.enumValue`},FIELD_NOT_ALLOWED:{messageKey:`additionalProperties`,code:`kernel.validation.field.notAllowed`},CUSTOM_VALIDATOR_FAILED:{messageKey:`validator`,code:``},STRICT_BOOLEAN:{messageKey:`default`,code:`kernel.validation.field.strictBoolean`},RANGE_EXCEEDED:{messageKey:`default`,code:`kernel.validation.field.rangeExceeded`},NOT_EMPTY:{messageKey:`default`,code:`kernel.validation.field.notEmpty`}});var INVALID_VALUE=Object.freeze({code:`kernel.validation.invalid`,message:`Invalid value.`});function isJsonRestSchemaInstance(value){return Boolean(value)&&typeof value===`object`&&typeof value.create===`function`&&typeof value.replace===`function`&&typeof value.patch===`function`&&typeof value.toJsonSchema===`function`}function resolveSchemaDefinitionMode(schemaDefinition=null,{defaultMode=`create`,context=`schema definition.mode`}={}){const source=normalizeObject(schemaDefinition);const fallbackMode=normalizeText(defaultMode).toLowerCase()||`create`;const rawMode=Object.prototype.hasOwnProperty.call(source,`mode`)?normalizeText(source.mode).toLowerCase():``;if(!rawMode)return fallbackMode;if(!JSON_REST_SCHEMA_MODES.has(rawMode))throw new TypeError(`${context} must be one of: create, replace, patch.`);return rawMode}function resolveJsonRestSchemaFieldMessages(schemaDefinition=null,fieldName=``){const normalizedFieldName=normalizeText(fieldName);if(!normalizedFieldName)return{};const source=normalizeObject(schemaDefinition);if(!isJsonRestSchemaInstance(source.schema))return{};return normalizeObject(source.schema.getFieldMessages(normalizedFieldName))}function resolveJsonRestSchemaParentFieldMessages(schemaDefinition=null,fieldName=``){const segments=normalizeText(fieldName).split(`.`).filter(Boolean);if(segments.length<2)return{};segments.pop();return resolveJsonRestSchemaFieldMessages(schemaDefinition,segments.join(`.`))}function resolveFieldMessageOverride(messages,key){const value=key?messages[key]:void 0;if(typeof value===`string`){const message=normalizeText(value);return message?{message}:null}if(!isRecord(value))return null;const message=normalizeText(value.message);if(!message)return null;const code=normalizeText(value.code);return code?{message,code,params:normalizeObject(value.params)}:{message}}function resolveJsonRestSchemaFieldError(fieldName,entry,schemaDefinition=null){const errorCode=normalizeText(entry?.code).toUpperCase();const known=JSON_REST_SCHEMA_ERRORS[errorCode]||{};const issueParams=normalizeObject(entry?.params);const directMessages=resolveJsonRestSchemaFieldMessages(schemaDefinition,fieldName);const messages=errorCode===`FIELD_NOT_ALLOWED`&&Object.keys(directMessages).length<1?resolveJsonRestSchemaParentFieldMessages(schemaDefinition,fieldName):directMessages;const override=resolveFieldMessageOverride(messages,known.messageKey)||resolveFieldMessageOverride(messages,`default`);if(override)return override.code?{message:override.message,code:override.code,params:{...issueParams,...override.params}}:{message:override.message};const libraryMessage=normalizeText(entry?.message);if(libraryMessage)return known.code?{message:libraryMessage,code:known.code,params:issueParams}:{message:libraryMessage};const rawCode=normalizeText(entry?.code);return rawCode?{message:rawCode}:{...INVALID_VALUE,params:{}}}function normalizeJsonRestSchemaFieldErrors(errors={},schemaDefinition=null){const source=normalizeObject(errors);const fieldErrors={};const fieldErrorCodes={};for(const[fieldName,entry]of Object.entries(source)){const normalizedFieldName=normalizeText(fieldName);if(!normalizedFieldName)continue;if(typeof entry===`string`){fieldErrors[normalizedFieldName]=entry;continue}const{message,code,params}=resolveJsonRestSchemaFieldError(normalizedFieldName,entry,schemaDefinition);fieldErrors[normalizedFieldName]=message;if(code)fieldErrorCodes[normalizedFieldName]={code,params}}return{fieldErrors,fieldErrorCodes}}function isSchemaDefinitionObject(value){return Boolean(value)&&typeof value===`object`&&!Array.isArray(value)&&(Object.prototype.hasOwnProperty.call(value,`schema`)||Object.prototype.hasOwnProperty.call(value,`mode`))}function normalizeSingleSchemaDefinition(value,{context=`schema definition`,defaultMode=``}={}){if(value==null)return null;if(!isSchemaDefinitionObject(value))throw new TypeError(`${context} must be a schema definition object.`);const source=normalizeObject(value);if(!Object.prototype.hasOwnProperty.call(source,`schema`))throw new TypeError(`${context}.schema is required.`);if(!isJsonRestSchemaInstance(source.schema))throw new TypeError(`${context}.schema must be a json-rest-schema schema instance.`);const normalized={schema:source.schema};const resolvedDefaultMode=normalizeText(defaultMode).toLowerCase();normalized.mode=resolveSchemaDefinitionMode(source,{defaultMode:resolvedDefaultMode||`patch`,context:`${context}.mode`});return Object.freeze(normalized)}function executeJsonRestSchemaDefinition(value,payload,{context=`schema definition`,defaultMode=``}={}){const normalized=normalizeSingleSchemaDefinition(value,{context,defaultMode});if(!normalized)return null;return normalized.schema[normalized.mode](payload)}function createCursorListValidator(itemValidator){const itemDefinition=normalizeSingleSchemaDefinition(itemValidator,{context:`cursor list item`,defaultMode:`replace`});return deepFreeze({schema:createSchema({items:{type:`array`,required:true,items:itemDefinition.schema},nextCursor:{type:`string`,required:false,nullable:true,minLength:1}}),mode:`replace`})}var cursorPaginationQuerySchema=createSchema({cursor:{type:`id`,required:false},limit:{type:`number`,required:false,min:1,unsigned:true}});var cursorPaginationQueryValidator=Object.freeze({schema:cursorPaginationQuerySchema,mode:`patch`});var HTML_TIME_STRING_SCHEMA=Object.freeze({type:`string`,pattern:`^(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d)?$`,minLength:5});var NULLABLE_HTML_TIME_STRING_SCHEMA=Object.freeze({...HTML_TIME_STRING_SCHEMA,nullable:true});var SCHEMA_VALIDATION_FAILED_MESSAGE=`Schema validation failed.`;function buildSchemaValidationError({message=SCHEMA_VALIDATION_FAILED_MESSAGE,fieldErrors=null,fieldErrorCodes=null,errors=null,cause,statusCode=null}={}){const error=new Error(message,cause?{cause}:void 0);if(message===SCHEMA_VALIDATION_FAILED_MESSAGE){error.messageCode=`kernel.validation.schemaFailed`;error.messageParams={}}if(Number.isInteger(statusCode)&&statusCode>=400&&statusCode<=599)error.statusCode=statusCode;if(isRecord(fieldErrors)){const codes=isRecord(fieldErrorCodes)&&Object.keys(fieldErrorCodes).length>0?fieldErrorCodes:null;error.fieldErrors=fieldErrors;if(codes)error.fieldErrorCodes=codes;error.details={...error.details||{},fieldErrors,...codes?{fieldErrorCodes:codes}:{}}}else if(errors!==null&&errors!==void 0)error.details={...error.details||{},errors};return error}function validateSchemaPayload(schemaDefinition,payload,{phase=`input`,context=`schema definition`,statusCode=null}={}){if(schemaDefinition==null)return payload;const result=executeJsonRestSchemaDefinition(schemaDefinition,payload,{defaultMode:phase===`output`?`replace`:`patch`,context});const{fieldErrors,fieldErrorCodes}=normalizeJsonRestSchemaFieldErrors(result.errors,schemaDefinition);if(Object.keys(fieldErrors).length>0)throw buildSchemaValidationError({fieldErrors,fieldErrorCodes,statusCode});return result.validatedObject??payload}var VALIDATION_ISSUE_CODES=new Map([{keyword:`required`,code:`kernel.validation.required`},{keyword:`type`,code:`kernel.validation.type`},{keyword:`minLength`,code:`kernel.validation.minLength`},{keyword:`maxLength`,code:`kernel.validation.maxLength`},{keyword:`minimum`,code:`kernel.validation.minimum`},{keyword:`maximum`,code:`kernel.validation.maximum`},{keyword:`exclusiveMinimum`,code:`kernel.validation.exclusiveMinimum`},{keyword:`exclusiveMaximum`,code:`kernel.validation.exclusiveMaximum`},{keyword:`multipleOf`,code:`kernel.validation.multipleOf`},{keyword:`pattern`,code:`kernel.validation.pattern`},{keyword:`format`,code:`kernel.validation.format`},{keyword:`enum`,code:`kernel.validation.enum`},{keyword:`const`,code:`kernel.validation.const`},{keyword:`minItems`,code:`kernel.validation.minItems`},{keyword:`maxItems`,code:`kernel.validation.maxItems`},{keyword:`additionalItems`,code:`kernel.validation.additionalItems`},{keyword:`uniqueItems`,code:`kernel.validation.uniqueItems`},{keyword:`minProperties`,code:`kernel.validation.minProperties`},{keyword:`maxProperties`,code:`kernel.validation.maxProperties`},{keyword:`additionalProperties`,code:`kernel.validation.additionalProperties`},{keyword:`propertyNames`,code:`kernel.validation.propertyNames`},{keyword:`oneOf`,code:`kernel.validation.oneOf`},{keyword:`anyOf`,code:`kernel.validation.anyOf`},{keyword:`not`,code:`kernel.validation.not`},{keyword:`if`,code:`kernel.validation.if`}].map(({keyword,code})=>[keyword,code]));var RECORD_ID_PATTERN=`^[1-9][0-9]*$`;var recordIdSchema=deepFreeze({type:`string`,minLength:1,pattern:RECORD_ID_PATTERN});var nullableRecordIdSchema=deepFreeze({...recordIdSchema,nullable:true});var recordIdParamsValidator=deepFreeze({schema:createSchema({recordId:{...recordIdSchema,required:true,messages:{pattern:{code:`kernel.validation.recordIdInvalid`,message:`Record id must be a canonical positive integer string.`}}}}),mode:`patch`});var JSON_API_QUERY_PAGE_CURSOR_KEY=`page[cursor]`;var JSON_API_QUERY_PAGE_LIMIT_KEY=`page[limit]`;var JSON_API_QUERY_INCLUDE_KEY=`include`;var JSON_API_QUERY_SORT_KEY=`sort`;var JSON_API_FILTER_PREFIX=`filter[`;var JSON_API_FIELDS_PREFIX=`fields[`;function normalizeQueryKey(key=``){return String(key||``).trim()}function buildFieldsTransportKey(responseType=``){const normalizedResponseType=normalizeText(responseType);return normalizedResponseType?`${JSON_API_FIELDS_PREFIX}${normalizedResponseType}]`:``}function mapPlainQueryKeyToTransportKey(key=``,{responseType=``}={}){const normalizedKey=normalizeQueryKey(key);if(!normalizedKey)return``;if(normalizedKey===`cursor`)return JSON_API_QUERY_PAGE_CURSOR_KEY;if(normalizedKey===`limit`)return JSON_API_QUERY_PAGE_LIMIT_KEY;if(normalizedKey===`q`)return`${JSON_API_FILTER_PREFIX}q]`;if(normalizedKey===`include`)return JSON_API_QUERY_INCLUDE_KEY;if(normalizedKey===`sort`)return JSON_API_QUERY_SORT_KEY;if(normalizedKey===`fields`)return buildFieldsTransportKey(responseType);return`${JSON_API_FILTER_PREFIX}${normalizedKey}]`}function encodeJsonApiResourceQueryObject(query={},{responseType=``}={}){if(!isRecord(query))return Object.freeze({});const source=normalizeObject(query);const encoded={};for(const[rawKey,rawValue]of Object.entries(source)){if(normalizeQueryKey(rawKey)===`fields`){for(const[type,fields]of Object.entries(normalizeJsonApiFieldsets(rawValue,{primaryType:responseType})))encoded[buildFieldsTransportKey(type)]=fields.join(`,`);continue}const transportKey=mapPlainQueryKeyToTransportKey(rawKey,{responseType});if(!transportKey)continue;const normalizedValues=(Array.isArray(rawValue)?rawValue:[rawValue]).map(entry=>String(entry??``).trim()).filter(Boolean);if(normalizedValues.length<1)continue;encoded[transportKey]=normalizedValues.length===1?normalizedValues[0]:normalizedValues}return Object.freeze(encoded)}function normalizeTransportKind(transport=null){return String(transport?.kind||``).trim().toLowerCase()}function isJsonApiResourceTransport(transport=null){return normalizeTransportKind(transport)===`jsonapi-resource`}function normalizeJsonApiClientTransport(transport=null){if(!isJsonApiResourceTransport(transport))return null;const resolvedTypes=resolveJsonApiTransportTypes(transport,{context:`JSON:API client transport`});return Object.freeze({kind:`jsonapi-resource`,requestType:resolvedTypes.requestType,responseType:resolvedTypes.responseType,responseKind:normalizeText(transport?.responseKind,{fallback:`record`}).toLowerCase(),includeBodyId:transport?.includeBodyId===true,lookupContainerKey:normalizeText(transport?.lookupContainerKey,{fallback:`lookups`}),lookupFieldMap:Object.freeze(Object.fromEntries(Object.entries(normalizeObject(transport?.lookupFieldMap)).map(([relationshipName,fieldKey])=>[normalizeText(relationshipName),normalizeText(fieldKey)]).filter(([relationshipName,fieldKey])=>relationshipName&&fieldKey).sort(([left],[right])=>left.localeCompare(right))))})}function defaultEncodeAttributes(body={}){const attributes={...normalizeObject(body)};delete attributes.id;return attributes}function encodeJsonApiResourceRequestBody(body,transport=null){const normalizedTransport=normalizeJsonApiClientTransport(transport);if(!normalizedTransport)return body;if(!isRecord(body))throw new TypeError(`JSON:API resource request body must be an object.`);if(!normalizedTransport.requestType)throw new TypeError(`JSON:API resource request body requires requestType.`);const source=normalizeObject(body);return createJsonApiDocument({data:createJsonApiResourceObject({type:normalizedTransport.requestType,...normalizedTransport.includeBodyId&&source.id!=null?{id:source.id}:{},attributes:defaultEncodeAttributes(source)})})}function encodeJsonApiResourceQuery(query,transport=null){const normalizedTransport=normalizeJsonApiClientTransport(transport);if(!normalizedTransport)return query;return encodeJsonApiResourceQueryObject(query,{responseType:normalizedTransport.responseType})}function createIncludedResourceIndex(document={}){const index=new Map;for(const resource of normalizeArray(document?.included)){const type=normalizeText(resource?.type);const id=normalizeText(resource?.id);if(!type||!id)continue;index.set(`${type}:${id}`,resource)}return index}function simplifyRelationshipResource(linkage={},options={}){const normalizedLinkage=isRecord(linkage)?normalizeObject(linkage):{};const type=normalizeText(normalizedLinkage.type);const id=normalizeText(normalizedLinkage.id);if(!type||!id)return null;const resourceKey=`${type}:${id}`;const includedResource=options.includedResourceIndex?.get(resourceKey);if(!includedResource)return null;return simplifyResourceObject(includedResource,options)}function simplifyResourceObject(resource={},options={}){const normalizedResource=isRecord(resource)?normalizeObject(resource):{};const type=normalizeText(normalizedResource.type);const id=normalizeText(normalizedResource.id);const resourceKey=type&&id?`${type}:${id}`:``;if(resourceKey&&options.resourceCache?.has(resourceKey))return options.resourceCache.get(resourceKey);const lookupFieldMap=options.lookupFieldMap||null;const simplified=simplifyJsonApiResourceWithRelationshipIds(normalizedResource,{lookupFieldMap});if(resourceKey&&options.inFlightKeys?.has(resourceKey))return simplified;if(resourceKey)options.inFlightKeys?.add(resourceKey);const lookupContainerKey=normalizeText(options.lookupContainerKey,{fallback:`lookups`});const lookups={};for(const[relationshipName,relationshipValue]of Object.entries(normalizeObject(normalizedResource.relationships))){const relationshipData=relationshipValue?.data;if(Array.isArray(relationshipData)){const items=relationshipData.map(entry=>simplifyRelationshipResource(entry,{...options,lookupFieldMap:null})).filter(Boolean);if(items.length>0)lookups[relationshipName]=items;continue}const fieldKey=resolveRelationshipFieldKey(relationshipName,lookupFieldMap);if(!Object.hasOwn(simplified,fieldKey))simplified[fieldKey]=relationshipData?.id==null?null:String(relationshipData.id);const lookupRecord=relationshipData==null?null:simplifyRelationshipResource(relationshipData,{...options,lookupFieldMap:null});if(lookupRecord){lookups[fieldKey]=lookupRecord;if(relationshipName!==fieldKey)lookups[relationshipName]=lookupRecord}}if(Object.keys(lookups).length>0)simplified[lookupContainerKey]=lookups;if(resourceKey){options.inFlightKeys?.delete(resourceKey);options.resourceCache?.set(resourceKey,simplified)}return simplified}function assertPrimaryDataType(resource={},expectedType=``){const normalizedExpectedType=normalizeText(expectedType);if(!normalizedExpectedType)return;const actualType=normalizeText(resource?.type);if(actualType&&actualType!==normalizedExpectedType)throw new Error(`Expected JSON:API resource type ${normalizedExpectedType}, received ${actualType}.`)}function resolveCollectionPageMeta(document={}){return{nextCursor:normalizeText(document?.meta?.page?.nextCursor||document?.meta?.pagination?.cursor?.next)||null,...isRecord(document?.meta)?{meta:document.meta}:{},...isRecord(document?.links)?{links:document.links}:{}}}function decodeJsonApiResourceResponse(payload,transport=null){const normalizedTransport=normalizeJsonApiClientTransport(transport);if(!normalizedTransport)return payload;const document=normalizeJsonApiDocument(payload);if(document.kind===`unknown`)throw new Error(`Expected JSON:API response document.`);if(normalizedTransport.responseKind===`meta`){if(document.kind!==`meta`)throw new Error(`Expected JSON:API meta document.`);return isRecord(document.meta)?document.meta:{}}const simplifyOptions={lookupContainerKey:normalizedTransport.lookupContainerKey,lookupFieldMap:normalizedTransport.lookupFieldMap,includedResourceIndex:createIncludedResourceIndex(document),resourceCache:new Map,inFlightKeys:new Set};if(normalizedTransport.responseKind===`collection`){if(document.kind!==`collection`)throw new Error(`Expected JSON:API collection document.`);for(const entry of document.data)assertPrimaryDataType(entry,normalizedTransport.responseType);return{items:document.data.map(entry=>simplifyResourceObject(entry,simplifyOptions)),...resolveCollectionPageMeta(document)}}if(document.kind!==`resource`)throw new Error(`Expected JSON:API resource document.`);if(document.data!=null)assertPrimaryDataType(document.data,normalizedTransport.responseType);return document.data==null?null:simplifyResourceObject(document.data,simplifyOptions)}function decodeJsonApiErrorFields(payload={}){const document=normalizeJsonApiDocument(payload);const fieldErrors={};const fieldErrorCodes={};if(document.kind!==`errors`)return{fieldErrors,fieldErrorCodes};for(const error of normalizeArray(document.errors)){const pointer=normalizeText(error?.source?.pointer);const fieldName=normalizeText(error?.source?.parameter)||(pointer.startsWith(`/data/attributes/`)?normalizeText(pointer.slice(17).split(`/`)[0]):``);if(!fieldName||Object.hasOwn(fieldErrors,fieldName))continue;const detail=normalizeText(error?.detail||error?.title);fieldErrors[fieldName]=detail||`Invalid value.`;const coded=detail?normalizeCodedEntry(error?.meta?.fieldErrorCode):{code:`kernel.validation.invalid`,params:{}};if(coded)fieldErrorCodes[fieldName]=coded}return{fieldErrors,fieldErrorCodes}}function createJsonApiClientErrorPayload(payload={}){const document=normalizeJsonApiDocument(payload);if(document.kind!==`errors`)return null;const firstError=normalizeArray(document.errors)[0]||{};const meta=isRecord(firstError.meta)?firstError.meta:{};const{fieldErrors,fieldErrorCodes}=decodeJsonApiErrorFields(payload);const transactionOutcome=normalizeTransactionOutcome(meta.transactionOutcome);const detail=normalizeText(firstError.detail);const message=detail||normalizeText(firstError.title);const sentence=detail?normalizeCodedEntry(meta.fieldErrorCode):message?normalizeCodedEntry({code:meta.messageCode,params:meta.messageParams}):{code:`request_failed`,params:{}};const hasFieldErrors=Object.keys(fieldErrors).length>0;const hasFieldErrorCodes=Object.keys(fieldErrorCodes).length>0;return{error:message||`Request failed.`,code:normalizeText(firstError.code)||null,params:isRecord(meta.params)?meta.params:{},...sentence?{messageCode:sentence.code,messageParams:sentence.params}:{},...transactionOutcome?{transactionOutcome}:{},...hasFieldErrors?{fieldErrors,details:{fieldErrors,...hasFieldErrorCodes?{fieldErrorCodes}:{}}}:{}}}function standardErrorMessage(payload={}){const nestedMessage=Array.isArray(payload.errors)?payload.errors.find(entry=>isRecord(entry)&&String(entry.message||``).trim())?.message:``;return String(payload.error||payload.message||nestedMessage||``).trim()}function genericHttpErrorMessage(status){return`Request failed with status ${status}.`}function resolveErrorStatus(error){if(error==null||typeof error!==`object`)return null;const hasStatus=Object.prototype.hasOwnProperty.call(error,`status`);const hasStatusCode=Object.prototype.hasOwnProperty.call(error,`statusCode`);if(!hasStatus&&!hasStatusCode)return null;const status=Number(hasStatus?error.status:error.statusCode);return Number.isInteger(status)?status:null}function isGenericHttpErrorMessage(error){const normalizedMessage=String(error?.message||``).trim();if(!normalizedMessage)return false;const status=resolveErrorStatus(error);if(status===0)return true;return status!=null&&status>=400&&normalizedMessage===genericHttpErrorMessage(status)}function createHttpError(response,data={}){const payload=isRecord(data)?data:{};const message=standardErrorMessage(payload);const jsonApiPayload=message?null:createJsonApiClientErrorPayload(payload);if(jsonApiPayload)return createHttpError(response,jsonApiPayload);const error=new Error(message||genericHttpErrorMessage(response.status));const normalizedFieldErrors=resolveFieldErrors(payload);error.status=Number(response?.status||0);error.code=String(payload.code||``).trim()||null;error.params=isRecord(payload.params)?payload.params:{};if(payload.messageCode){error.messageCode=String(payload.messageCode);error.messageParams=isRecord(payload.messageParams)?payload.messageParams:{}}else if(!message){error.messageCode=`http.request.failedWithStatus`;error.messageParams={status:error.status}}const transactionOutcome=normalizeTransactionOutcome(payload.transactionOutcome);if(transactionOutcome)error.transactionOutcome=transactionOutcome;error.fieldErrors=Object.keys(normalizedFieldErrors).length>0?normalizedFieldErrors:null;error.fieldErrorCodes=isRecord(payload.details?.fieldErrorCodes)?payload.details.fieldErrorCodes:null;if(isRecord(payload.details))error.details=payload.details;else if(error.fieldErrors)error.details={fieldErrors:error.fieldErrors};else error.details=null;return error}function createNetworkError(cause){const error=new Error(`Network request failed.`);error.status=0;error.code=null;error.messageCode=`http.request.networkFailed`;error.messageParams={};error.fieldErrors=null;error.details=null;error.cause=cause;return error}function normalizeHeaderName(name){return String(name||``).trim().toLowerCase()}function hasHeader(headers,name){const normalizedTarget=normalizeHeaderName(name);if(!normalizedTarget||!headers||typeof headers!==`object`)return false;return Object.keys(headers).some(key=>normalizeHeaderName(key)===normalizedTarget)}function setHeaderIfMissing(headers,name,value){if(!headers||typeof headers!==`object`||!name||value==null)return;if(hasHeader(headers,name))return;headers[name]=value}var DEFAULT_RETRYABLE_CSRF_ERROR_CODES=Object.freeze([`FST_CSRF_INVALID_TOKEN`,`FST_CSRF_MISSING_SECRET`]);function toUpperStringSet(values,fallback=[]){return new Set((Array.isArray(values)?values:fallback).map(value=>String(value||``).trim().toUpperCase()).filter(Boolean))}function shouldRetryForCsrfFailure({response,method,state,data,unsafeMethods,retryableErrorCodes=DEFAULT_RETRYABLE_CSRF_ERROR_CODES}){const methodValue=String(method||``).trim().toUpperCase();if(Number(response?.status)!==403||!unsafeMethods?.has(methodValue)||state?.csrfRetried)return false;const payload=createJsonApiClientErrorPayload(data)||data;const transactionOutcome=normalizeTransactionOutcome(payload?.transactionOutcome);if([`pending`,`committed`,`unknown`].includes(transactionOutcome))return false;const code=String(payload?.details?.code||payload?.code||``).trim().toUpperCase();return toUpperStringSet(retryableErrorCodes,DEFAULT_RETRYABLE_CSRF_ERROR_CODES).has(code)}function normalizePermissionList(value){const source=Array.isArray(value)?value:[value];const unique=new Set;for(const entry of source){const normalizedEntry=normalizeText(entry);if(!normalizedEntry)continue;unique.add(normalizedEntry)}return[...unique]}function hasPermission(permissionSet=[],permission=``){const requiredPermission=normalizeText(permission);if(!requiredPermission)return true;const permissions=normalizePermissionList(permissionSet);if(permissions.includes(`*`)||permissions.includes(requiredPermission))return true;for(const grantedPermission of permissions){if(!grantedPermission.endsWith(`.*`))continue;const wildcardNamespace=grantedPermission.slice(0,-2);if(!wildcardNamespace)continue;if(requiredPermission.startsWith(`${wildcardNamespace}.`))return true}return false}var TRANSIENT_QUERY_ERROR_STATUSES=Object.freeze(new Set([0,502,503,504]));var MAX_TRANSIENT_QUERY_RETRIES=2;var MAX_TRANSIENT_RETRY_DELAY_MS=3e3;function normalizeQueryErrorStatus(error){const status=Number(error?.status||error?.statusCode||0);return Number.isInteger(status)?status:0}function isTransientQueryError(error){return TRANSIENT_QUERY_ERROR_STATUSES.has(normalizeQueryErrorStatus(error))}function shouldRetryTransientQueryFailure(failureCount,error){if(!isTransientQueryError(error))return false;return Number(failureCount)<2}function transientQueryRetryDelay(attemptIndex){const normalizedAttempt=Number.isInteger(Number(attemptIndex))?Number(attemptIndex):1;return Math.min(1e3*2**Math.max(0,normalizedAttempt-1),MAX_TRANSIENT_RETRY_DELAY_MS)}var DEFAULT_UNSAFE_METHODS=Object.freeze([`POST`,`PUT`,`PATCH`,`DELETE`]);var DEFAULT_NDJSON_CONTENT_TYPE=`application/x-ndjson`;var DEFAULT_READ_TIMEOUT_MS=3e4;function requestSignalWithDeadline(signal,timeoutMs){if(!Number.isSafeInteger(timeoutMs)||timeoutMs<=0)throw new TypeError(`Request timeoutMs must be a positive finite integer.`);const deadline=AbortSignal.timeout(timeoutMs);return signal?AbortSignal.any([signal,deadline]):deadline}function normalizeMethod(method){return String(method||`GET`).trim().toUpperCase()}function resolveUnsafeMethods(value){return new Set((Array.isArray(value)?value:DEFAULT_UNSAFE_METHODS).map(method=>normalizeMethod(method)).filter(Boolean))}function resolveFetch(){if(typeof fetch===`function`)return fetch;throw new Error(`createHttpClient requires fetchImpl when global fetch is unavailable.`)}function normalizeResolvedRequestUrl(value,fallback=``){if(value===void 0||value===null||value===``)return fallback;return String(value)}function isObjectBody(value){return Boolean(value)&&typeof value===`object`&&!(value instanceof FormData)}function isQueryValuePresent(value){if(Array.isArray(value))return value.some(entry=>String(entry??``).trim());return String(value??``).trim().length>0}function appendRequestQueryToUrl(url,query=null,transport=null){const normalizedUrl=String(url||``).trim();if(!normalizedUrl)return``;const encodedQuery=transport?encodeJsonApiResourceQuery(query,transport):query&&typeof query===`object`&&!Array.isArray(query)?query:null;if(!encodedQuery||typeof encodedQuery!==`object`||Array.isArray(encodedQuery))return normalizedUrl;const searchParams=new URLSearchParams;for(const[key,rawValue]of Object.entries(encodedQuery)){const normalizedKey=String(key||``).trim();if(!normalizedKey||!isQueryValuePresent(rawValue))continue;const values=Array.isArray(rawValue)?rawValue:[rawValue];for(const value of values){const normalizedValue=String(value??``).trim();if(!normalizedValue)continue;searchParams.append(normalizedKey,normalizedValue)}}const serializedQuery=searchParams.toString();if(!serializedQuery)return normalizedUrl;return appendQueryString(normalizedUrl,serializedQuery)}function parseJsonSafely(response,signal){const contentType=String(response?.headers?.get?.(`content-type`)||``);const isJson=isJsonContentType(contentType);if(!isJson)return Promise.resolve({contentType,isJson,data:{}});return Promise.resolve(response?.json?.()).catch(error=>{signal?.throwIfAborted();if(error?.name===`AbortError`)throw error;return{}}).then(data=>({contentType,isJson,data:data&&typeof data===`object`?data:{}}))}function emitNdjsonLine(line,handlers){const normalizedLine=String(line||``).trim();if(!normalizedLine)return;try{const payload=JSON.parse(normalizedLine);if(typeof handlers?.onEvent===`function`)handlers.onEvent(payload)}catch(error){if(typeof handlers?.onMalformedLine===`function`)handlers.onMalformedLine(normalizedLine,error)}}async function readNdjsonStream(response,handlers={}){if(!response?.body||typeof response.body.getReader!==`function`){if(typeof response?.text===`function`){const rawText=await response.text().catch(()=>``);for(const line of String(rawText||``).split(/\r?\n/g))emitNdjsonLine(line,handlers)}return}const reader=response.body.getReader();const decoder=new TextDecoder;let buffered=``;while(true){const{value,done}=await reader.read();if(done)break;buffered+=decoder.decode(value,{stream:true});const lines=buffered.split(/\r?\n/g);buffered=lines.pop()||``;for(const line of lines)emitNdjsonLine(line,handlers)}buffered+=decoder.decode();if(buffered)emitNdjsonLine(buffered,handlers)}function createHttpClient(options={}){const configuredFetchImpl=typeof options.fetchImpl===`function`?options.fetchImpl:null;const configuredResolveRequestUrl=typeof options.resolveRequestUrl===`function`?options.resolveRequestUrl:null;const unsafeMethods=resolveUnsafeMethods(options.unsafeMethods);const hooks=options?.hooks&&typeof options.hooks===`object`?options.hooks:{};const csrf={enabled:options?.csrf?.enabled!==false,sessionPath:String(options?.csrf?.sessionPath||`/api/session`),headerName:String(options?.csrf?.headerName||`csrf-token`),tokenField:String(options?.csrf?.tokenField||`csrfToken`),retryableErrorCodes:Array.isArray(options?.csrf?.retryableErrorCodes)?options.csrf.retryableErrorCodes:DEFAULT_RETRYABLE_CSRF_ERROR_CODES};let csrfTokenCache=``;let csrfFetchPromise=null;function updateCsrfTokenFromPayload(data){const token=String(data?.[csrf.tokenField]||``);if(token)csrfTokenCache=token}async function fetchSessionForCsrf(){const activeFetch=configuredFetchImpl||resolveFetch();const signal=requestSignalWithDeadline(null,options.readTimeoutMs??DEFAULT_READ_TIMEOUT_MS);const requestUrl=await resolveRequestUrl(csrf.sessionPath,{originalUrl:csrf.sessionPath,method:`GET`,requestOptions:{method:`GET`},state:null,stream:false,csrfSession:true});let response;try{response=await activeFetch(requestUrl,{method:`GET`,credentials:String(options?.credentials||`same-origin`),signal})}catch(cause){signal.throwIfAborted();throw createNetworkError(cause)}const{data}=await parseJsonSafely(response,signal);signal.throwIfAborted();updateCsrfTokenFromPayload(data);if(!response.ok)throw createHttpError(response,data);return data}async function ensureCsrfToken(forceRefresh=false){if(!csrf.enabled)return``;if(!forceRefresh&&csrfTokenCache)return csrfTokenCache;if(!csrfFetchPromise||forceRefresh)csrfFetchPromise=fetchSessionForCsrf().finally(()=>{csrfFetchPromise=null});await csrfFetchPromise;return csrfTokenCache}function decorateHeaders({url,method,headers,requestOptions,state,stream}){if(typeof hooks.decorateHeaders!==`function`)return null;return hooks.decorateHeaders({url,method,headers,requestOptions,state,stream})}async function notifyFailure(payload){if(typeof hooks.onFailure===`function`)await hooks.onFailure(payload)}async function notifySuccess(payload){if(typeof hooks.onSuccess===`function`)await hooks.onSuccess(payload)}async function resolveRequestUrl(url,context={}){const normalizedUrl=String(url||``).trim();if(!configuredResolveRequestUrl)return normalizedUrl;return normalizeResolvedRequestUrl(await configuredResolveRequestUrl(normalizedUrl,{...context,url:normalizedUrl}),normalizedUrl)}async function maybeRetry({response,method,state,data,stream,csrfEnabled=csrf.enabled}){if(!csrfEnabled)return false;const customShouldRetry=typeof hooks.shouldRetryRequest===`function`?await hooks.shouldRetryRequest({response,method,state,data,stream}):null;if(!(customShouldRetry==null?shouldRetryForCsrfFailure({response,method,state,data,unsafeMethods,retryableErrorCodes:csrf.retryableErrorCodes}):Boolean(customShouldRetry)))return false;if(typeof hooks.onRetryableFailure===`function`)await hooks.onRetryableFailure({response,method,state,data,stream});csrfTokenCache=``;await ensureCsrfToken(true);state.csrfRetried=true;return true}function resolveRequestState(state){const resolvedState=state&&typeof state===`object`?state:{};if(typeof resolvedState.csrfRetried!==`boolean`)resolvedState.csrfRetried=false;return resolvedState}async function prepareRequestConfig(url,requestOptions,state,stream){const resolvedState=resolveRequestState(state);const method=normalizeMethod(requestOptions.method);const transport=normalizeJsonApiClientTransport(requestOptions.transport);const{transport:_transport,query:requestQuery,csrf:requestCsrf,timeoutMs:requestTimeoutMs,...forwardedRequestOptions}=requestOptions&&typeof requestOptions===`object`?requestOptions:{};const csrfEnabled=csrf.enabled&&requestCsrf!==false;const resolvedRequestUrl=await resolveRequestUrl(appendRequestQueryToUrl(url,requestQuery,transport),{originalUrl:url,method,requestOptions,state:resolvedState,stream:Boolean(stream),csrfSession:false});const headers=requestOptions.headers&&typeof requestOptions.headers===`object`?{...requestOptions.headers}:{};const decorateHeadersResult=decorateHeaders({url:resolvedRequestUrl,method,headers,requestOptions,state:resolvedState,stream:Boolean(stream)});if(decorateHeadersResult&&typeof decorateHeadersResult.then===`function`)await decorateHeadersResult;const config={credentials:String(options?.credentials||`same-origin`),...forwardedRequestOptions,method,headers};const ordinaryRead=!stream&&[`GET`,`HEAD`].includes(method);const timeoutMs=requestTimeoutMs??(ordinaryRead?options.readTimeoutMs??DEFAULT_READ_TIMEOUT_MS:void 0);if(timeoutMs!==void 0)config.signal=requestSignalWithDeadline(config.signal,timeoutMs);if(transport)setHeaderIfMissing(headers,`Accept`,JSON_API_CONTENT_TYPE);if(transport&&isObjectBody(config.body)){setHeaderIfMissing(headers,`Content-Type`,JSON_API_CONTENT_TYPE);config.body=encodeJsonApiResourceRequestBody(config.body,transport)}if(isObjectBody(config.body)){setHeaderIfMissing(headers,`Content-Type`,`application/json`);config.body=JSON.stringify(config.body)}if(csrfEnabled&&unsafeMethods.has(method)&&!hasHeader(headers,csrf.headerName)){const token=await ensureCsrfToken();if(token)setHeaderIfMissing(headers,csrf.headerName,token)}return{method,config,state:resolvedState,csrfEnabled,transport,url:resolvedRequestUrl}}async function executePreparedRequest(url,config,{method,state},onNetworkFailure){config.signal?.throwIfAborted();let response;try{response=await(configuredFetchImpl||resolveFetch())(url,config)}catch(cause){config.signal?.throwIfAborted();return onNetworkFailure(cause)}const{contentType,isJson,data}=await parseJsonSafely(response,config.signal);config.signal?.throwIfAborted();updateCsrfTokenFromPayload(data);return{response,data,contentType,isJson,method,state}}async function handleHttpFailure({url,method,state,response,data,contentType,isJson,stream,csrfEnabled,retryRequest}){if(await maybeRetry({response,method,state,data,stream,csrfEnabled}))return retryRequest();const error=createHttpError(response,data);if(Number(response.status)===401&&typeof hooks.onUnauthorized===`function`)await hooks.onUnauthorized(error);await notifyFailure({url,method,state,reason:`http_${response.status}`,error,response,data,contentType,isJson,stream});throw error}async function executeRequestLifecycle({url,requestOptions={},state=null,stream=false,handleNetworkFailure,retryRequest}={}){if(typeof handleNetworkFailure!==`function`)throw new TypeError(`executeRequestLifecycle requires handleNetworkFailure().`);if(typeof retryRequest!==`function`)throw new TypeError(`executeRequestLifecycle requires retryRequest().`);const requestContext=await prepareRequestConfig(url,requestOptions,state,stream);const{method,state:resolvedState}=requestContext;const result=await executePreparedRequest(requestContext.url,requestContext.config,requestContext,cause=>handleNetworkFailure({cause,url,method,state:resolvedState,stream}));if(!result.response.ok)return{handled:true,value:await handleHttpFailure({url,method,state:resolvedState,response:result.response,data:result.data,contentType:result.contentType,isJson:result.isJson,stream,csrfEnabled:requestContext.csrfEnabled,retryRequest(){return retryRequest(resolvedState)}})};return{handled:false,value:{method,state:resolvedState,result,transport:requestContext.transport}}}async function request(url,requestOptions={},state=null){const execution=await executeRequestLifecycle({url,requestOptions,state,stream:false,async handleNetworkFailure({cause,method,state:resolvedState}){if(cause?.name===`AbortError`)throw cause;const error=createNetworkError(cause);await notifyFailure({url,method,state:resolvedState,reason:`network_error`,error,stream:false});throw error},retryRequest(nextState){return request(url,requestOptions,nextState)}});if(execution.handled)return execution.value;const{method,state:resolvedState,result,transport}=execution.value;if(Number(result.response?.status||200)===204){await notifySuccess({url,method,state:resolvedState,response:result.response,data:null,rawData:null,contentType:result.contentType,isJson:result.isJson,stream:false});return null}let responseData=result.data;if(transport)try{responseData=decodeJsonApiResourceResponse(result.data,transport)}catch(cause){const error=createNetworkError(cause);error.message=`JSON:API response decoding failed.`;await notifyFailure({url,method,state:resolvedState,reason:`transport_decode_error`,error,response:result.response,data:result.data,contentType:result.contentType,isJson:result.isJson,stream:false});throw error}await notifySuccess({url,method,state:resolvedState,response:result.response,data:responseData,rawData:result.data,contentType:result.contentType,isJson:result.isJson,stream:false});return responseData}async function requestStream(url,requestOptions={},handlers={},state=null){const execution=await executeRequestLifecycle({url,requestOptions,state,stream:true,async handleNetworkFailure({cause,method,state:resolvedState}){const aborted=String(cause?.name||``)===`AbortError`;await notifyFailure({url,method,state:resolvedState,reason:aborted?`aborted`:`network_error`,error:cause,stream:true});if(aborted)throw cause;throw createNetworkError(cause)},retryRequest(nextState){return requestStream(url,requestOptions,handlers,nextState)}});if(execution.handled)return execution.value;const{method,state:resolvedState,result}=execution.value;try{let shouldParseAsNdjson=result.contentType.includes(DEFAULT_NDJSON_CONTENT_TYPE);if(!shouldParseAsNdjson&&typeof hooks.shouldTreatAsNdjsonStream===`function`)shouldParseAsNdjson=Boolean(await hooks.shouldTreatAsNdjsonStream({url,method,state:resolvedState,contentType:result.contentType,isJson:result.isJson,data:result.data,response:result.response}));if(shouldParseAsNdjson)await readNdjsonStream(result.response,handlers);else if(typeof handlers?.onEvent===`function`&&Object.keys(result.data).length>0)handlers.onEvent(result.data);else if(typeof handlers?.onEvent===`function`&&typeof result.response?.text===`function`){const rawText=await result.response.text().catch(()=>``);for(const line of String(rawText||``).split(/\r?\n/g))emitNdjsonLine(line,handlers)}}catch(error){await notifyFailure({url,method,state:resolvedState,reason:`stream_error`,error,response:result.response,data:result.data,contentType:result.contentType,isJson:result.isJson,stream:true});throw error}await notifySuccess({url,method,state:resolvedState,response:result.response,data:result.data,contentType:result.contentType,isJson:result.isJson,stream:true})}function clearCsrfTokenCache(){csrfTokenCache=``}return{request,requestStream,ensureCsrfToken,clearCsrfTokenCache}}var SAFE_RETRY_METHODS=Object.freeze(new Set([`GET`,`HEAD`]));var MAX_TRANSIENT_HTTP_RETRIES=2;function sleep(delayMs){return new Promise(resolve=>{setTimeout(resolve,delayMs)})}function shouldRetryTransientHttpFailure(error,method,attemptIndex){if(error?.name===`AbortError`||error?.name===`TimeoutError`)return false;if(!SAFE_RETRY_METHODS.has(String(method||`GET`).toUpperCase()))return false;if(!isTransientQueryError(error))return false;return Number(attemptIndex)<MAX_TRANSIENT_HTTP_RETRIES}async function requestWithTransientRetry(executor,method,signal){let attemptIndex=0;while(true){signal?.throwIfAborted();try{return await executor()}catch(error){signal?.throwIfAborted();if(!shouldRetryTransientHttpFailure(error,method,attemptIndex))throw error;attemptIndex+=1;await sleep(transientQueryRetryDelay(attemptIndex))}}}function createTransientRetryHttpClient(options={}){const baseHttpClient=createHttpClient(options);return Object.freeze({...baseHttpClient,request(url,requestOptions={},state=null){return requestWithTransientRetry(()=>baseHttpClient.request(url,requestOptions,state),String(requestOptions?.method||`GET`).toUpperCase(),requestOptions?.signal)},requestStream(url,requestOptions={},handlers={},state=null){return requestWithTransientRetry(()=>baseHttpClient.requestStream(url,requestOptions,handlers,state),String(requestOptions?.method||`GET`).toUpperCase(),requestOptions?.signal)}})}function createValidationFailure({error=`Validation failed.`,code=`validation_failed`,fieldErrors={},fieldErrorCodes=null}={}){const normalizedFieldErrors=normalizeFieldErrors(fieldErrors);const hasFieldErrorCodes=isRecord(fieldErrorCodes)&&Object.keys(fieldErrorCodes).length>0;return{error:String(error||`Validation failed.`).trim()||`Validation failed.`,code:String(code||`validation_failed`).trim()||`validation_failed`,fieldErrors:normalizedFieldErrors,details:{fieldErrors:normalizedFieldErrors,...hasFieldErrorCodes?{fieldErrorCodes}:{}}}}var client_exports=__exportAll({DEFAULT_RETRYABLE_CSRF_ERROR_CODES:()=>DEFAULT_RETRYABLE_CSRF_ERROR_CODES,createHttpClient:()=>createHttpClient,createHttpError:()=>createHttpError,createNetworkError:()=>createNetworkError,createTransientRetryHttpClient:()=>createTransientRetryHttpClient,createValidationFailure:()=>createValidationFailure,hasHeader:()=>hasHeader,isGenericHttpErrorMessage:()=>isGenericHttpErrorMessage,normalizeFieldErrors:()=>normalizeFieldErrors,normalizeHeaderName:()=>normalizeHeaderName,resolveFieldErrors:()=>resolveFieldErrors,setHeaderIfMissing:()=>setHeaderIfMissing,shouldRetryForCsrfFailure:()=>shouldRetryForCsrfFailure});function normalizeOptions(value=null){return value&&typeof value===`object`&&!Array.isArray(value)?value:{}}function createHttpWebClient(options={}){const source=normalizeOptions(options);const sourceCsrf=normalizeOptions(source.csrf);return createTransientRetryHttpClient({...source,credentials:source.credentials??`include`,csrf:{sessionPath:`/api/session`,...sourceCsrf}})}var httpWebClient=createHttpWebClient();function configureHttpWebClient(optionsOrClient={}){const source=normalizeOptions(optionsOrClient);httpWebClient=typeof source.request===`function`?source:createHttpWebClient(source);return httpWebClient}function getHttpWebClient(){return httpWebClient}function firstRouteParam(value){const rawValue=Array.isArray(value)?value[0]:value;return String(rawValue||``).trim()}var VIBE64_PROJECT_APP_PATH_PREFIX=`/app/project`;function normalizedProjectRouteSuffix(suffix=``){const normalized=String(suffix||``).trim();if(!normalized)return``;return normalized.startsWith(`/`)?normalized:`/${normalized}`}function normalizeProjectRoutePath(path=``){const normalized=String(path||``).trim();if(!normalized||normalized===`/`)return`/`;const compacted=(normalized.startsWith(`/`)?normalized:`/${normalized}`).replace(/\/{2,}/gu,`/`);if(compacted===`/`)return`/`;return compacted.replace(/\/+$/u,``)||`/`}function projectAppPath(slug=``,suffix=``){const projectSlug=String(slug||``).trim();if(!projectSlug)return`/app`;return`${VIBE64_PROJECT_APP_PATH_PREFIX}/${encodeURIComponent(projectSlug)}${normalizedProjectRouteSuffix(suffix)}`}function projectListPath(){return``}function projectSlugFromPathname(pathname=``){const match=/^\/app\/project\/([^/?#]+)/u.exec(String(pathname||``));return decodeURIComponent(match?.[1]||``).trim()||``}function currentProjectSlugFromLocation(browserWindow=globalThis.window){return projectSlugFromPathname(browserWindow?.location?.pathname||``)}function projectSlugFromRoute(route={}){return firstRouteParam(route?.params?.slug)||currentProjectSlugFromLocation()}function projectScopeValue(slug=currentProjectSlugFromLocation()){return String(slug||``).trim()||`unscoped`}function vibe64ProjectQueryScope(slug=currentProjectSlugFromLocation()){return[`project`,projectScopeValue(slug)]}function vibe64ProjectScopedStorageKey(baseKey=``,slug=currentProjectSlugFromLocation()){const normalizedBaseKey=String(baseKey||``).trim();if(!normalizedBaseKey)return``;return`${normalizedBaseKey}:project:${encodeURIComponent(projectScopeValue(slug))}`}export{resolveFieldErrors as A,validateSchemaPayload as C,createSchema as D,isJsonRestSchemaInstance as E,splitPathQueryAndHash as M,buildJsonApiFieldsetsToken as O,RECORD_ID_PATTERN as S,normalizeSingleSchemaDefinition as T,transientQueryRetryDelay as _,projectSlugFromPathname as a,isGenericHttpErrorMessage as b,vibe64ProjectScopedStorageKey as c,getHttpWebClient as d,httpWebClient as f,shouldRetryTransientQueryFailure as g,createHttpClient as h,projectListPath as i,appendQueryString as j,normalizeJsonApiFieldsets as k,configureHttpWebClient as l,createValidationFailure as m,normalizeProjectRoutePath as n,projectSlugFromRoute as o,client_exports as p,projectAppPath as r,vibe64ProjectQueryScope as s,currentProjectSlugFromLocation as t,createHttpWebClient as u,hasPermission as v,createCursorListValidator as w,encodeJsonApiResourceQueryObject as x,normalizePermissionList as y};
@@ -0,0 +1 @@
1
+ var REPOSITORY_STATUS_SESSION_REASONS=new Set([`claude-stream-turn-idle`,`codex-app-server-turn-idle`,`opencode-server-turn-idle`,`repository-canonical-changed`,`session-pull-request`,`session-repository-checked`,`session-save-completed`,`session-save-failed`,`session-save-started`,`session-save-update-required`,`session-starter-applied`,`session-turn-checkpoint-failed`,`session-turn-checkpoint-updated`,`session-update-completed`,`session-update-failed`,`session-update-started`]);var REPOSITORY_UPDATE_CHECK_FAILED_REASON=`session-repository-check-failed`;var REPOSITORY_CANONICAL_RECHECK_REASONS=new Set([`repository-canonical-changed`,`session-pull-request`,`session-save-failed`,`session-save-update-required`,`session-update-failed`]);function repositoryStatusSessionId(payload={}){return String(payload?.sessionId||payload?.session?.sessionId||``).trim()}function repositoryStatusRealtimeShouldRefresh(payload={}){return REPOSITORY_STATUS_SESSION_REASONS.has(String(payload?.reason||``).trim())}function repositoryStatusRealtimeNeedsCanonicalCheck(payload={}){return REPOSITORY_CANONICAL_RECHECK_REASONS.has(String(payload?.reason||``).trim())}export{repositoryStatusSessionId as i,repositoryStatusRealtimeNeedsCanonicalCheck as n,repositoryStatusRealtimeShouldRefresh as r,REPOSITORY_UPDATE_CHECK_FAILED_REASON as t};
@@ -0,0 +1 @@
1
+ import{D as createVNode,E as createTextVNode,Ht as watch,On as unref,_ as createBaseVNode,b as createElementBlock,g as computed,mt as openBlock,o as Fragment,qt as withCtx,tr as toDisplayString,tt as nextTick,v as createBlock,vn as ref,y as createCommentVNode}from"./runtime-core.esm-bundler-DGXg_mpN.js";import{_ as VIcon,p as VProgressLinear}from"./VAvatar-H2hyOWlB.js";import{t as useEndpointResource}from"./useEndpointResource-7-YDfAxX.js";import{t as VSelect}from"./VSelect-Dqnp_CFi.js";import{t as VTextField}from"./VTextField-CnkGeXaT.js";import{r as scopedDevelopmentApiUrl}from"./studioUrls-B0-GdWh8.js";import{X as mdiClose,it as mdiCogOutline,xr as mdiSourcePull}from"./mdi-X9prU-DG.js";import{t as VBtn}from"./VBtn-Sj5jAuOx.js";import{t as VAlert}from"./VAlert-7_VM9EUm.js";import{t as VSheet}from"./VSheet-CMhyReNa.js";import{t as VDialog}from"./VDialog-Drp3yzSH.js";import{i as VCardTitle,n as VCardText,o as VCardActions,t as VCard}from"./VCard-DExT9Cji.js";import{t as VSpacer}from"./VSpacer-BSTt0_VA.js";import{u as requestVibe64AiOnboarding,x as useModelRouting}from"./client-CCZIu6yc.js";import{t as VSkeletonLoader}from"./VSkeletonLoader-pc4bBTxv.js";import{t as VSwitch}from"./VSwitch-B_DmcTxG.js";import{t as VTextarea}from"./VTextarea-wqoRFl1K.js";import{t as _plugin_vue_export_helper_default}from"./_plugin-vue_export-helper-DNW4j-dv.js";import{b as sameVibe64AssistantSelection,c as vibe64AssistantSelectionLabel}from"./shared-TUhK_uYM.js";import{t as useUiFeedback}from"./useUiFeedback-Bd3rao6E.js";import{D as vibe64RepositoryApiPath,F as vibe64SessionPath,o as VIBE64_SESSIONS_API_SUFFIX}from"./vibe64SessionRequestConfig-xIx-5jxQ.js";import{C as readRefOrGetterValue,S as Vibe64SessionAssistantMenu_default,T as requestVibe64AccountConnectionsDialog}from"./index-CGz4Yow6.js";import{a as vibe64SessionPullRequest,i as vibe64SessionDisplayTitle}from"./vibe64SessionViewModel-B0cCumM8.js";import{a as githubProjectRepositoryName,t as GITHUB_BODY_MAX_LENGTH}from"./vibe64GithubProject-Bct-bzKq.js";var _hoisted_1$1={class:`d-flex align-center justify-space-between ga-2 pa-5 pb-2`};var _hoisted_2$1={class:`d-flex align-center ga-3`};var _hoisted_3$1={class:`text-label-large`};var _hoisted_4$1={class:`text-body-medium mt-1`};var _hoisted_5$1={key:0,role:`status`};var _sfc_main$1={__name:`Vibe64CreatePullRequestDialog`,props:{modelValue:Boolean,dashboardContext:{type:Object,default:()=>({})}},emits:[`update:modelValue`,`created`],setup(__props,{emit:__emit}){const props=__props;const emit=__emit;const title=ref(``);const body=ref(``);const draft=ref(true);const pending=ref(false);const destinationReview=ref(null);const feedback=useUiFeedback({source:`vibe64.pullRequests.create`});const session=computed(()=>props.dashboardContext.session||{});const source=computed(()=>vibe64SessionPullRequest(session.value));const repository=computed(()=>githubProjectRepositoryName(props.dashboardContext.projectContext));const branch=computed(()=>{if(source.value?.headBranch)return source.value.headBranch;const destination=props.dashboardContext.workState?.destination;if(destination?.mode===`github`&&destination.branch!==props.dashboardContext.projectContext?.repository?.defaultBranch)return destination.branch;return`vibe64/pr-${props.dashboardContext.sessionId}`});const base=computed(()=>source.value?.baseBranch||props.dashboardContext.projectContext?.repository?.defaultBranch||``);const path=computed(()=>vibe64SessionPath(readRefOrGetterValue(props.dashboardContext.sessionsApiPath),props.dashboardContext.sessionId,`/pull-request`));const resource=useEndpointResource({path,queryKey:computed(()=>[`vibe64.createPullRequest`,path.value]),enabled:false});watch(()=>props.modelValue,open=>{if(open)destinationReview.value=props.dashboardContext.workState?.destination?{...props.dashboardContext.workState.destination}:null},{immediate:true});watch(()=>props.dashboardContext.sessionId,()=>{title.value=source.value?.title||vibe64SessionDisplayTitle(session.value);body.value=source.value?.body||``;draft.value=true},{immediate:true});async function submit(){if(pending.value||!title.value.trim())return;pending.value=true;try{const result=await resource.save({title:title.value.trim(),body:body.value,draft:draft.value,destinationReview:destinationReview.value},{method:`POST`});feedback.success(`Pull request created. Future commits update its source branch.`);emit(`created`,result.pullRequest);emit(`update:modelValue`,false);props.dashboardContext.refreshSessionWork?.()}catch(error){feedback.error(error,`The pull request could not be confirmed. Retry to check GitHub and continue.`)}finally{pending.value=false}}return(_ctx,_cache)=>{return openBlock(),createBlock(VDialog,{"model-value":__props.modelValue,"max-width":`38rem`,scrollable:``,persistent:pending.value,"onUpdate:modelValue":_cache[5]||(_cache[5]=$event=>emit(`update:modelValue`,$event))},{default:withCtx(()=>[createVNode(VCard,{rounded:`xl`},{default:withCtx(()=>[createBaseVNode(`div`,_hoisted_1$1,[createBaseVNode(`div`,_hoisted_2$1,[createVNode(VIcon,{icon:unref(mdiSourcePull),color:`primary`},null,8,[`icon`]),_cache[6]||(_cache[6]=createBaseVNode(`h2`,{class:`text-title-large`},`Create pull request`,-1))]),createVNode(VBtn,{icon:unref(mdiClose),size:`48`,variant:`text`,"aria-label":`Close pull request dialog`,disabled:pending.value,onClick:_cache[0]||(_cache[0]=$event=>emit(`update:modelValue`,false))},null,8,[`icon`,`disabled`])]),createVNode(VCardText,{class:`d-flex flex-column ga-3`},{default:withCtx(()=>[createVNode(VSheet,{color:`surface-light`,rounded:`lg`,class:`pa-3 pr-destination`},{default:withCtx(()=>[createBaseVNode(`div`,_hoisted_3$1,toDisplayString(repository.value),1),createBaseVNode(`div`,_hoisted_4$1,toDisplayString(branch.value)+` → `+toDisplayString(base.value),1),_cache[7]||(_cache[7]=createBaseVNode(`p`,{class:`text-body-small text-medium-emphasis mt-2 mb-0`},`The base branch stays unchanged.`,-1))]),_:1}),_cache[8]||(_cache[8]=createBaseVNode(`p`,{class:`text-body-small ma-0`},`Save open file edits first.`,-1)),!destinationReview.value?(openBlock(),createElementBlock(`p`,_hoisted_5$1,`Refresh repository status before creating a pull request.`)):createCommentVNode(``,true),createVNode(VTextField,{modelValue:title.value,"onUpdate:modelValue":_cache[1]||(_cache[1]=$event=>title.value=$event),label:`Title`,variant:`outlined`,maxlength:`256`,disabled:pending.value,"hide-details":``},null,8,[`modelValue`,`disabled`]),createVNode(VTextarea,{modelValue:body.value,"onUpdate:modelValue":_cache[2]||(_cache[2]=$event=>body.value=$event),label:`Description`,placeholder:`What changed, and how did you check it?`,variant:`outlined`,rows:`3`,"auto-grow":``,maxlength:unref(GITHUB_BODY_MAX_LENGTH),disabled:pending.value,"hide-details":``},null,8,[`modelValue`,`maxlength`,`disabled`]),createVNode(VSwitch,{modelValue:draft.value,"onUpdate:modelValue":_cache[3]||(_cache[3]=$event=>draft.value=$event),color:`primary`,label:`Create as draft`,disabled:pending.value,"hide-details":``},null,8,[`modelValue`,`disabled`]),_cache[9]||(_cache[9]=createBaseVNode(`details`,{class:`pr-details text-body-small`},[createBaseVNode(`summary`,{class:`py-3`},`What gets pushed`),createBaseVNode(`p`,null,`All saved file changes are committed and pushed to the PR branch. Database data and chat history are separate. GitHub automation may run; this does not deploy the app.`)],-1))]),_:1}),createVNode(VCardActions,{class:`pa-5 pt-2`},{default:withCtx(()=>[createVNode(VSpacer),createVNode(VBtn,{variant:`text`,height:`48`,disabled:pending.value,onClick:_cache[4]||(_cache[4]=$event=>emit(`update:modelValue`,false))},{default:withCtx(()=>[..._cache[10]||(_cache[10]=[createTextVNode(`Cancel`,-1)])]),_:1},8,[`disabled`]),createVNode(VBtn,{color:`primary`,variant:`flat`,rounded:`pill`,height:`48`,disabled:pending.value||!title.value.trim()||!destinationReview.value||__props.dashboardContext.sourceOperationsSuspended,"aria-busy":pending.value,onClick:submit},{default:withCtx(()=>[createTextVNode(toDisplayString(pending.value?`Creating…`:draft.value?`Create draft PR`:`Create pull request`),1)]),_:1},8,[`disabled`,`aria-busy`])]),_:1})]),_:1})]),_:1},8,[`model-value`,`persistent`])}}};var Vibe64CreatePullRequestDialog_default=_plugin_vue_export_helper_default(_sfc_main$1,[[`__scopeId`,`data-v-07c592d1`]]);var _hoisted_1={class:`vibe64-assistant-dialog__title-copy`};var _hoisted_2={class:`text-body-small`};var _hoisted_3={key:2,class:`vibe64-assistant-dialog__ai`};var _hoisted_4={class:`text-body-medium mb-0`};var _hoisted_5={key:3,class:`d-flex flex-column ga-2`};var _hoisted_6={key:0,class:`d-flex flex-column ga-3 mt-3`};var _hoisted_7={key:0,class:`text-body-small`,style:{"overflow-wrap":`anywhere`}};var _hoisted_8={key:0,class:`vibe64-assistant-dialog__progress`,role:`status`,"aria-live":`polite`};var _sfc_main={__name:`Vibe64AssistantSessionDialog`,props:{modelValue:Boolean,toolbar:{type:Object,default:()=>({})}},emits:[`created`,`update:model-value`],setup(__props,{emit:__emit}){const props=__props;const emit=__emit;const routing=useModelRouting({enabled:computed(()=>props.modelValue),view:`main`});const mainSelection=routing.mainChatSelection;const openConnectionSettings=()=>requestVibe64AccountConnectionsDialog({section:`ai`});const canChooseSessionAi=computed(()=>routing.resource.data.value?.canConfigure===true);const sessionAi=ref(null);const customOpen=ref(false);const changeButton=ref(null);const aiSummary=computed(()=>sessionAi.value?`This session runs on: ${vibe64AssistantSelectionLabel(sessionAi.value)}`:`Runs on your main AI: ${vibe64AssistantSelectionLabel(mainSelection.value)}`);function openSessionAiChoice(){if(canChooseSessionAi.value&&!submitting.value)customOpen.value=true}function chooseSessionAi(selection){sessionAi.value=sameVibe64AssistantSelection(selection,mainSelection.value)?null:selection;return{ok:true}}function useMainAi(){sessionAi.value=null}function setUpAi(){close();requestVibe64AiOnboarding()}const submitButton=ref(null);const submitting=computed(()=>props.toolbar.createSessionRunning===true);const branchMode=ref(`project`);const chooseBranch=computed(()=>branchMode.value!==`project`);const createBranch=computed(()=>branchMode.value===`new`);const branchName=ref(``);const newBranchName=ref(``);const branchProject=computed(()=>props.toolbar.projectContext||{});const branchSelectionAvailable=computed(()=>!props.toolbar.repositoryBranchSelectionDisabled&&[`github`,`managed_git`].includes(branchProject.value.repositoryMode||branchProject.value.repository?.mode));const branchChoices=computed(()=>[{title:`Project branch (${branchProject.value.repository?.defaultBranch||`main`})`,value:`project`},{title:`Create a new branch`,value:`new`},{title:`Use an existing branch`,value:`existing`}]);const branchRepository=computed(()=>branchProject.value.githubRepository?.fullName||branchProject.value.repository?.github?.fullName||branchProject.value.slug);const branchPath=computed(()=>scopedDevelopmentApiUrl(`${vibe64RepositoryApiPath(`/api${VIBE64_SESSIONS_API_SUFFIX}`)}/branches`,branchProject.value.slug));const branches=useEndpointResource({path:branchPath,queryKey:computed(()=>[`vibe64.branches`,branchPath.value]),enabled:computed(()=>props.modelValue&&branchSelectionAvailable.value&&chooseBranch.value),queryOptions:{retry:false},fallbackLoadError:`Repository branches could not load.`});const selectedBranch=computed(()=>branches.data.value?.branches?.find(item=>item.name===branchName.value));const branchAlreadyExists=computed(()=>branches.data.value?.branches?.some(item=>item.name===newBranchName.value.trim()));const branchSelectionReady=computed(()=>{if(!chooseBranch.value)return true;if(!selectedBranch.value||branches.isLoading.value||branches.loadError.value)return false;return!createBranch.value||Boolean(newBranchName.value.trim())&&!branchAlreadyExists.value});watch(()=>branches.data.value,value=>{if(!value?.branches?.some(item=>item.name===branchName.value))branchName.value=value?.defaultBranch||``},{immediate:true});function close(){if(!submitting.value)emit(`update:model-value`,false)}async function submit(){if(!mainSelection.value||submitting.value||!branchSelectionReady.value)return;let response;try{const options={};if(chooseBranch.value)options.repositoryBranch={name:createBranch.value?newBranchName.value.trim():branchName.value,...createBranch.value?{fromBranch:branchName.value}:{},expectedCommit:selectedBranch.value.commit};response=await props.toolbar.createSession?.(sessionAi.value||{},options)}catch{return}if(response?.ok!==false&&response?.sessionId){emit(`created`,response);emit(`update:model-value`,false)}}watch(()=>props.modelValue,open=>{if(!open)return;branchMode.value=`project`;branchName.value=branches.data.value?.defaultBranch||``;newBranchName.value=``;sessionAi.value=null;customOpen.value=false},{immediate:true});watch(submitting,async(running,wasRunning)=>{if(running||!wasRunning||!props.modelValue)return;await nextTick();const target=submitButton.value?.$el||submitButton.value;if(target?.isConnected===true&&typeof target.focus===`function`)target.focus({preventScroll:true})});return(_ctx,_cache)=>{return openBlock(),createBlock(VDialog,{"model-value":__props.modelValue,persistent:submitting.value,"max-width":`38rem`,scrollable:``,"onUpdate:modelValue":_cache[6]||(_cache[6]=$event=>!$event&&close())},{default:withCtx(()=>[createVNode(VCard,{class:`vibe64-assistant-dialog`,rounded:`xl`},{default:withCtx(()=>[createVNode(VCardTitle,{class:`vibe64-assistant-dialog__title`},{default:withCtx(()=>[createBaseVNode(`span`,_hoisted_1,[_cache[7]||(_cache[7]=createBaseVNode(`strong`,{class:`text-title-large`},`Start an AI session`,-1)),createBaseVNode(`small`,_hoisted_2,toDisplayString(sessionAi.value?`Starts in Custom. Choose Senior, Junior or Auto from chat.`:`Start with Senior. Choose Junior or Auto from chat.`),1)]),createVNode(VBtn,{"aria-label":`Close AI session dialog`,disabled:submitting.value,icon:unref(mdiClose),title:`Close`,variant:`text`,onClick:close},null,8,[`disabled`,`icon`])]),_:1}),createVNode(VCardText,{class:`vibe64-assistant-dialog__body`},{default:withCtx(()=>[unref(routing).resource.isInitialLoading.value?(openBlock(),createBlock(VSkeletonLoader,{key:0,type:`list-item-two-line`})):unref(routing).loadError.value?(openBlock(),createBlock(VAlert,{key:1,type:`error`,variant:`tonal`},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(routing).loadError.value)+` `,1),createVNode(VBtn,{variant:`text`,onClick:_cache[0]||(_cache[0]=$event=>unref(routing).resource.reload())},{default:withCtx(()=>[..._cache[8]||(_cache[8]=[createTextVNode(`Try again`,-1)])]),_:1})]),_:1})):unref(mainSelection)?(openBlock(),createElementBlock(`div`,_hoisted_3,[createBaseVNode(`p`,_hoisted_4,[createTextVNode(toDisplayString(aiSummary.value)+` `,1),canChooseSessionAi.value?(openBlock(),createBlock(VBtn,{key:0,ref_key:`changeButton`,ref:changeButton,disabled:submitting.value,size:`small`,variant:`text`,onClick:openSessionAiChoice},{default:withCtx(()=>[..._cache[9]||(_cache[9]=[createTextVNode(` Change `,-1)])]),_:1},8,[`disabled`])):createCommentVNode(``,true),sessionAi.value?(openBlock(),createBlock(VBtn,{key:1,disabled:submitting.value,size:`small`,variant:`text`,onClick:useMainAi},{default:withCtx(()=>[..._cache[10]||(_cache[10]=[createTextVNode(`Use main AI`,-1)])]),_:1},8,[`disabled`])):createCommentVNode(``,true)]),createVNode(VBtn,{class:`vibe64-assistant-dialog__main-ai`,disabled:submitting.value,"prepend-icon":unref(mdiCogOutline),size:`small`,variant:`text`,onClick:openConnectionSettings},{default:withCtx(()=>[..._cache[11]||(_cache[11]=[createTextVNode(` Change main AI for all sessions `,-1)])]),_:1},8,[`disabled`,`prepend-icon`])])):(openBlock(),createElementBlock(`div`,_hoisted_5,[_cache[13]||(_cache[13]=createBaseVNode(`strong`,null,`No AI is set up yet`,-1)),_cache[14]||(_cache[14]=createBaseVNode(`span`,{class:`text-body-small`},`Set up your AI, then come back to start a session.`,-1)),createVNode(VBtn,{color:`primary`,variant:`flat`,class:`align-self-start`,onClick:setUpAi},{default:withCtx(()=>[..._cache[12]||(_cache[12]=[createTextVNode(`Set up your AI`,-1)])]),_:1})])),branchSelectionAvailable.value?(openBlock(),createElementBlock(Fragment,{key:4},[createVNode(VSelect,{modelValue:branchMode.value,"onUpdate:modelValue":_cache[1]||(_cache[1]=$event=>branchMode.value=$event),items:branchChoices.value,label:`Work on`,disabled:submitting.value,"hide-details":``,class:`mt-4`},null,8,[`modelValue`,`items`,`disabled`]),chooseBranch.value?(openBlock(),createElementBlock(`div`,_hoisted_6,[createBranch.value?(openBlock(),createBlock(VTextField,{key:0,modelValue:newBranchName.value,"onUpdate:modelValue":_cache[2]||(_cache[2]=$event=>newBranchName.value=$event),label:`New branch name`,placeholder:`e.g. improve-booking`,maxlength:`255`,disabled:submitting.value,"error-messages":newBranchName.value.trim()&&branchAlreadyExists.value?`That branch already exists. Choose an existing branch instead.`:[],"hide-details":`auto`},null,8,[`modelValue`,`disabled`,`error-messages`])):createCommentVNode(``,true),unref(branches).isLoading.value?(openBlock(),createBlock(VSkeletonLoader,{key:1,type:`list-item-two-line, paragraph`})):unref(branches).loadError.value?(openBlock(),createBlock(VAlert,{key:2,type:`error`,variant:`tonal`},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(branches).loadError.value)+` `,1),createVNode(VBtn,{variant:`text`,onClick:_cache[3]||(_cache[3]=$event=>unref(branches).reload())},{default:withCtx(()=>[..._cache[15]||(_cache[15]=[createTextVNode(`Try again`,-1)])]),_:1})]),_:1})):(openBlock(),createElementBlock(Fragment,{key:3},[createVNode(VSelect,{modelValue:branchName.value,"onUpdate:modelValue":_cache[4]||(_cache[4]=$event=>branchName.value=$event),items:unref(branches).data.value?.branches||[],"item-title":`name`,"item-value":`name`,label:createBranch.value?`Create from`:`Branch`,disabled:submitting.value,"hide-details":``},null,8,[`modelValue`,`items`,`label`,`disabled`]),selectedBranch.value?(openBlock(),createElementBlock(`p`,_hoisted_7,toDisplayString(createBranch.value?`Creates the branch and opens a new session.`:`Opens a new session on this branch.`)+` Your changes will be saved to `+toDisplayString(branchRepository.value)+`:`+toDisplayString(createBranch.value?newBranchName.value.trim()||`your new branch`:branchName.value)+`. `,1)):createCommentVNode(``,true),_cache[16]||(_cache[16]=createBaseVNode(`p`,{class:`text-body-small`},`Deploying the app still uses the project branch.`,-1))],64))])):createCommentVNode(``,true)],64)):createCommentVNode(``,true)]),_:1}),submitting.value?(openBlock(),createElementBlock(`div`,_hoisted_8,[createVNode(VProgressLinear,{indeterminate:``,color:`primary`,rounded:``}),_cache[17]||(_cache[17]=createBaseVNode(`p`,{class:`text-body-small mb-0`},` Copying the project source for the new session. This can take a little while for a large project. Any connected projects and workspace setup then continue in the session, which shows their progress. `,-1))])):createCommentVNode(``,true),createVNode(VCardActions,{class:`vibe64-assistant-dialog__actions`},{default:withCtx(()=>[createVNode(VBtn,{disabled:submitting.value,variant:`text`,onClick:close},{default:withCtx(()=>[..._cache[18]||(_cache[18]=[createTextVNode(`Cancel`,-1)])]),_:1},8,[`disabled`]),createVNode(VBtn,{ref_key:`submitButton`,ref:submitButton,"aria-busy":submitting.value?`true`:void 0,color:`primary`,disabled:!unref(mainSelection)||submitting.value||!branchSelectionReady.value,variant:`flat`,onClick:submit},{default:withCtx(()=>[createTextVNode(toDisplayString(submitting.value?`Creating session…`:chooseBranch.value&&createBranch.value?`Create branch & session`:`Create session`),1)]),_:1},8,[`aria-busy`,`disabled`])]),_:1}),createVNode(Vibe64SessionAssistantMenu_default,{modelValue:customOpen.value,"onUpdate:modelValue":_cache[5]||(_cache[5]=$event=>customOpen.value=$event),target:changeButton.value?.$el||null,selection:sessionAi.value||unref(mainSelection),"can-configure":canChooseSessionAi.value,"changes-disabled":submitting.value,"save-selection":chooseSessionAi},null,8,[`modelValue`,`target`,`selection`,`can-configure`,`changes-disabled`])]),_:1})]),_:1},8,[`model-value`,`persistent`])}}};var Vibe64AssistantSessionDialog_default=_plugin_vue_export_helper_default(_sfc_main,[[`__scopeId`,`data-v-674eb2c2`]]);var CREATED_SESSION_FOCUS_TIMEOUT_MS=2e3;async function focusCreatedVibe64SessionTab(sessionId=``){const normalizedSessionId=String(sessionId||``).trim();if(!normalizedSessionId||typeof document===`undefined`)return false;const deadline=Date.now()+CREATED_SESSION_FOCUS_TIMEOUT_MS;while(Date.now()<deadline){const dialogVisible=[...document.querySelectorAll(`.vibe64-assistant-dialog`)].some(element=>element.getClientRects().length>0);const target=[...document.querySelectorAll(`[data-vibe64-session-id]`)].find(element=>element.getAttribute(`data-vibe64-session-id`)===normalizedSessionId&&element.getClientRects().length>0);if(!dialogVisible&&target&&typeof target.focus===`function`){target.focus({preventScroll:true});return document.activeElement===target}await new Promise(resolve=>{(globalThis.requestAnimationFrame||(callback=>setTimeout(callback,16)))(resolve)})}return false}export{Vibe64AssistantSessionDialog_default as n,Vibe64CreatePullRequestDialog_default as r,focusCreatedVibe64SessionTab as t};
@@ -0,0 +1 @@
1
+ .pr-destination[data-v-07c592d1]{overflow-wrap:anywhere}.pr-details summary[data-v-07c592d1]{cursor:pointer;min-height:48px}.vibe64-assistant-dialog__progress[data-v-674eb2c2]{gap:.5rem;padding:0 1.5rem .5rem;display:grid}.vibe64-assistant-dialog[data-v-674eb2c2]{border:1px solid rgba(var(--v-theme-outline), .18)}.vibe64-assistant-dialog__title[data-v-674eb2c2]{justify-content:space-between;align-items:center;padding:1rem 1.25rem .75rem;display:flex}.vibe64-assistant-dialog__title-copy[data-v-674eb2c2]{gap:.15rem;display:grid}.vibe64-assistant-dialog__title-copy small[data-v-674eb2c2]{color:rgba(var(--v-theme-on-surface), .66);white-space:normal}.vibe64-assistant-dialog__body[data-v-674eb2c2]{padding:.25rem 1.25rem 1rem!important}.vibe64-assistant-dialog__ai[data-v-674eb2c2]{overflow-wrap:anywhere;justify-items:start;gap:.25rem;display:grid}.vibe64-assistant-dialog__main-ai[data-v-674eb2c2]{margin-inline-start:-.5rem}.vibe64-assistant-dialog__actions[data-v-674eb2c2]{border-top:1px solid rgba(var(--v-theme-outline), .14);justify-content:flex-end;gap:.5rem;padding:.75rem 1.25rem}@media (width<=600px){.vibe64-assistant-dialog__body[data-v-674eb2c2],.vibe64-assistant-dialog__actions[data-v-674eb2c2],.vibe64-assistant-dialog__title[data-v-674eb2c2]{padding-inline:1rem!important}}
@@ -0,0 +1 @@
1
+ import{c as vibe64ProjectScopedStorageKey,s as vibe64ProjectQueryScope}from"./vibe64ProjectScope.local-l5_-E6pq.js";import{n as vibe64RealtimeOriginPayload}from"./vibe64BrowserTabOrigin-SF9E31vi.js";var VIBE64_SESSIONS_API_SUFFIX=`/vibe64/sessions`;var VIBE64_ARCHIVED_SESSIONS_API_SUFFIX=`${VIBE64_SESSIONS_API_SUFFIX}/archived`;var VIBE64_ASSISTANTS_API_SUFFIX=`/vibe64/assistants/capabilities`;var VIBE64_ASSISTANT_MODEL_ACCESS_API_SUFFIX=`/vibe64/assistants/model-access`;var VIBE64_CURRENT_SESSION_API_SUFFIX=`${VIBE64_SESSIONS_API_SUFFIX}/current`;var VIBE64_API_SUFFIX=`/vibe64`;var VIBE64_SESSION_CHANGED_EVENT=`vibe64.session.changed`;var VIBE64_SOURCE_EDITOR_FILE_CHANGED_EVENT=`vibe64.source-editor.file.changed`;var VIBE64_SOURCE_EDITOR_SYNC_ERROR_EVENT=`vibe64.source-editor.sync.error`;var VIBE64_SOURCE_EDITOR_SYNC_READY_EVENT=`vibe64.source-editor.sync.ready`;var SELECTED_SESSION_STORAGE_KEY=`vibe64:selected-session-id`;function agentTurnControlPayloadFromContext(context={}){const source=context&&typeof context===`object`&&!Array.isArray(context)?context:{};const{agentSettings:_agentSettings,sessionId:_sessionId,...body}=source;return vibe64RealtimeOriginPayload({...body,...agentSettingsInputFromContext(source)})}function selectedSessionStorageKey(projectSlug){return vibe64ProjectScopedStorageKey(SELECTED_SESSION_STORAGE_KEY,projectSlug)}function vibe64SessionsQueryKey(surfaceId,ownershipFilter,projectSlug){return[`vibe64`,...vibe64ProjectQueryScope(projectSlug),surfaceId,ownershipFilter,`sessions`]}function vibe64SessionQueryKey(surfaceId,ownershipFilter,projectSlug){return[`vibe64`,...vibe64ProjectQueryScope(projectSlug),surfaceId,ownershipFilter,`session`]}function vibe64SessionEventMatchesScope(payload={},{projectSlug=``}={}){return!payload.learningAttemptId&&(!payload.projectSlug||payload.projectSlug===projectSlug)}function vibe64AssistantCapabilitiesQueryKey(surfaceId,ownershipFilter,projectSlug,scope=`overview`){return[`vibe64`,...vibe64ProjectQueryScope(projectSlug),surfaceId,ownershipFilter,`assistant-capabilities`,String(scope||`overview`)]}function encodePathSegment(value=``){return encodeURIComponent(String(value||``).trim())}function vibe64SessionPath(sessionsApiPath=``,sessionId=``,suffix=``){return`${sessionsApiPath}/${encodePathSegment(sessionId)}${suffix}`}function vibe64AssistantModelAccessPath(capabilitiesApiPath=``){return String(capabilitiesApiPath||``).replace(/\/assistants\/capabilities(?=\?|#|$)/u,`/assistants/model-access`)}function vibe64RepositoryApiPath(sessionsApiPath=``){const normalized=String(sessionsApiPath||``).replace(/\/+$/u,``);return normalized.endsWith(`/vibe64/sessions`)?`${normalized.slice(0,-16)}/vibe64/repository`:`${normalized}/repository`}function vibe64RepositoryHistoryPath(sessionsApiPath=``,options={}){const params=new URLSearchParams;const sessionId=String(options?.sessionId||``).trim();const cursor=String(options?.cursor||``).trim();if(sessionId)params.set(`sessionId`,sessionId);if(cursor)params.set(`cursor`,cursor);const query=params.toString();const base=`${vibe64RepositoryApiPath(sessionsApiPath)}/history`;return query?`${base}?${query}`:base}function vibe64RepositoryVersionFilesPath(sessionsApiPath=``,commit=``,options={}){const params=new URLSearchParams;const sessionId=String(options?.sessionId||``).trim();const historySnapshotCommit=String(options?.historySnapshotCommit||``).trim();if(sessionId)params.set(`sessionId`,sessionId);if(historySnapshotCommit)params.set(`historySnapshotCommit`,historySnapshotCommit);if(Number.isInteger(Number(options?.offset))&&Number(options.offset)>0)params.set(`offset`,String(Number(options.offset)));if(Number.isInteger(Number(options?.limit))&&Number(options.limit)>0)params.set(`limit`,String(Number(options.limit)));const query=params.toString();const base=`${vibe64RepositoryApiPath(sessionsApiPath)}/history/${encodePathSegment(commit)}/files`;return query?`${base}?${query}`:base}function vibe64RepositoryVersionDiffPath(sessionsApiPath=``,commit=``,sourcePath=``,options={}){const params=new URLSearchParams({path:String(sourcePath||``)});const sessionId=String(options?.sessionId||``).trim();const historySnapshotCommit=String(options?.historySnapshotCommit||``).trim();if(sessionId)params.set(`sessionId`,sessionId);if(historySnapshotCommit)params.set(`historySnapshotCommit`,historySnapshotCommit);return`${vibe64RepositoryApiPath(sessionsApiPath)}/history/${encodePathSegment(commit)}/diff?${params.toString()}`}function vibe64SessionChangesPath(sessionsApiPath=``,sessionId=``,options={}){const params=new URLSearchParams;if(Number.isInteger(Number(options?.offset))&&Number(options.offset)>0)params.set(`offset`,String(Number(options.offset)));if(Number.isInteger(Number(options?.limit))&&Number(options.limit)>0)params.set(`limit`,String(Number(options.limit)));const query=params.toString();const base=vibe64SessionPath(sessionsApiPath,sessionId,`/changes`);return query?`${base}?${query}`:base}function vibe64SessionCheckUpdatesPath(sessionsApiPath=``,sessionId=``){return vibe64SessionPath(sessionsApiPath,sessionId,`/updates/check`)}function vibe64SessionChangeDiffPath(sessionsApiPath=``,sessionId=``,sourcePath=``){return`${vibe64SessionPath(sessionsApiPath,sessionId,`/changes/diff`)}?path=${encodeURIComponent(String(sourcePath||``))}`}function vibe64AgentAttachmentPath(sessionsApiPath=``,sessionId=``){return vibe64SessionPath(sessionsApiPath,sessionId,`/agent-attachments`)}function vibe64AgentAttachmentFilePath(sessionsApiPath=``,sessionId=``,attachmentId=``){return`${vibe64AgentAttachmentPath(sessionsApiPath,sessionId)}/${encodePathSegment(attachmentId)}`}function vibe64TemporaryConversationsPath(sessionsApiPath=``,sessionId=``){return vibe64SessionPath(sessionsApiPath,sessionId,`/temporary-conversations`)}function vibe64TemporaryConversationPath(sessionsApiPath=``,sessionId=``,conversationId=``){return`${vibe64TemporaryConversationsPath(sessionsApiPath,sessionId)}/${encodePathSegment(conversationId)}`}function vibe64AgentTerminalPath(sessionsApiPath=``,sessionId=``,terminalSessionId=``){return vibe64SessionPath(sessionsApiPath,sessionId,terminalSessionId?`/agent-terminal/${encodePathSegment(terminalSessionId)}`:`/agent-terminal`)}function vibe64AgentTerminalControlTextPath(sessionsApiPath=``,sessionId=``,terminalSessionId=``){return`${vibe64AgentTerminalPath(sessionsApiPath,sessionId,terminalSessionId)}/control/text`}function vibe64ConversationLogPath(sessionsApiPath=``,sessionId=``){return vibe64SessionPath(sessionsApiPath,sessionId,`/conversation-log`)}function vibe64SessionPromptHintsPath(sessionsApiPath=``,sessionId=``){return vibe64SessionPath(sessionsApiPath,sessionId,`/prompt-hints`)}function vibe64SessionPromptHintsCancelPath(sessionsApiPath=``,sessionId=``){return`${vibe64SessionPromptHintsPath(sessionsApiPath,sessionId)}/cancel`}function vibe64SessionPreviewStatePath(sessionsApiPath=``,sessionId=``){return vibe64SessionPath(sessionsApiPath,sessionId,`/preview-state`)}function vibe64OutputsPath(sessionsApiPath=``,sessionId=``){return vibe64SessionPath(sessionsApiPath,sessionId,`/outputs`)}function vibe64PreviewIdentityPath(sessionsApiPath=``,sessionId=``){return vibe64SessionPath(sessionsApiPath,sessionId,`/preview-identity`)}function vibe64OutputRunPath(sessionsApiPath=``,sessionId=``,terminalSessionId=``){return vibe64SessionPath(sessionsApiPath,sessionId,terminalSessionId?`/output-runs/${encodePathSegment(terminalSessionId)}/terminal`:`/output-runs`)}function vibe64OutputRunStopPath(sessionsApiPath=``,sessionId=``,terminalSessionId=``){return vibe64SessionPath(sessionsApiPath,sessionId,`/output-runs/${encodePathSegment(terminalSessionId)}/stop`)}function vibe64OutputResultPath(sessionsApiPath=``,sessionId=``,resultId=``){return vibe64SessionPath(sessionsApiPath,sessionId,`/output-results/${encodePathSegment(resultId)}`)}function vibe64SourceEditorTreePath(sessionsApiPath=``,sessionId=``,options={}){const basePath=vibe64SessionPath(sessionsApiPath,sessionId,`/source-editor/tree`);const params=new URLSearchParams;const normalizedPath=String(options?.path||``).trim();if(normalizedPath)params.set(`path`,normalizedPath);if(Number.isInteger(Number(options?.offset))&&Number(options.offset)>0)params.set(`offset`,String(Number(options.offset)));if(Number.isInteger(Number(options?.limit))&&Number(options.limit)>0)params.set(`limit`,String(Number(options.limit)));const query=params.toString();return query?`${basePath}?${query}`:basePath}function vibe64SourceEditorFilesPath(sessionsApiPath=``,sessionId=``,query=``){const basePath=vibe64SessionPath(sessionsApiPath,sessionId,`/source-editor/files`);const normalizedQuery=String(query||``).trim();return normalizedQuery?`${basePath}?q=${encodeURIComponent(normalizedQuery)}`:basePath}function vibe64SourceEditorSearchPath(sessionsApiPath=``,sessionId=``,query=``){const basePath=vibe64SessionPath(sessionsApiPath,sessionId,`/source-editor/search`);const normalizedQuery=String(query||``).trim();return normalizedQuery?`${basePath}?q=${encodeURIComponent(normalizedQuery)}`:basePath}function vibe64SourceEditorResolvePathPath(sessionsApiPath=``,sessionId=``){return vibe64SessionPath(sessionsApiPath,sessionId,`/source-editor/resolve-path`)}function vibe64SourceEditorFilePath(sessionsApiPath=``,sessionId=``,sourcePath=``){const basePath=vibe64SessionPath(sessionsApiPath,sessionId,`/source-editor/file`);const normalizedPath=String(sourcePath||``).trim();return normalizedPath?`${basePath}?path=${encodeURIComponent(normalizedPath)}`:basePath}function vibe64SourceEditorCreateFilePath(sessionsApiPath=``,sessionId=``){return vibe64SessionPath(sessionsApiPath,sessionId,`/source-editor/file`)}function vibe64SourceEditorStarsPath(sessionsApiPath=``,sessionId=``){return vibe64SessionPath(sessionsApiPath,sessionId,`/source-editor/stars`)}function vibe64SourceEditorDownloadPath(sessionsApiPath=``,sessionId=``,sourcePath=``){return`${vibe64SessionPath(sessionsApiPath,sessionId,`/source-editor/download`)}?path=${encodeURIComponent(sourcePath)}`}function vibe64SourceEditorChangesStreamPath(sessionsApiPath=``,sessionId=``,sourcePath=``){const basePath=vibe64SessionPath(sessionsApiPath,sessionId,`/source-editor/changes/stream`);const normalizedPath=String(sourcePath||``).trim();return normalizedPath?`${basePath}?path=${encodeURIComponent(normalizedPath)}`:basePath}function vibe64SourceEditorExplanationsPath(sessionsApiPath=``,sessionId=``){return vibe64SessionPath(sessionsApiPath,sessionId,`/source-editor/explanations`)}function vibe64SourceEditorExplanationsStreamPath(sessionsApiPath=``,sessionId=``){return`${vibe64SourceEditorExplanationsPath(sessionsApiPath,sessionId)}/stream`}function vibe64SourceEditorExplanationsCleanupPath(sessionsApiPath=``,sessionId=``){return`${vibe64SourceEditorExplanationsPath(sessionsApiPath,sessionId)}/cleanup`}function vibe64SourceEditorExplanationPath(sessionsApiPath=``,sessionId=``,explanationId=``){return vibe64SessionPath(sessionsApiPath,sessionId,`/source-editor/explanations/${encodePathSegment(explanationId)}`)}function vibe64SourceEditorExplanationFollowupsPath(sessionsApiPath=``,sessionId=``,explanationId=``){return`${vibe64SourceEditorExplanationPath(sessionsApiPath,sessionId,explanationId)}/followups`}function vibe64SourceEditorExplanationFollowupsStreamPath(sessionsApiPath=``,sessionId=``,explanationId=``){return`${vibe64SourceEditorExplanationFollowupsPath(sessionsApiPath,sessionId,explanationId)}/stream`}function vibe64SourceEditorExplanationStopPath(sessionsApiPath=``,sessionId=``,explanationId=``){return`${vibe64SourceEditorExplanationPath(sessionsApiPath,sessionId,explanationId)}/stop`}function vibe64ConversationLogQueryKey(surfaceId,ownershipFilter,sessionId=``,projectSlug){return[`vibe64`,...vibe64ProjectQueryScope(projectSlug),surfaceId,ownershipFilter,`conversation-log`,encodePathSegment(sessionId)]}function vibe64OutputsQueryKey(surfaceId,ownershipFilter,sessionId=``,projectSlug){return[`vibe64`,...vibe64ProjectQueryScope(projectSlug),surfaceId,ownershipFilter,`outputs`,encodePathSegment(sessionId)]}function agentSettingsInputFromContext(context={}){return context?.agentSettings&&typeof context.agentSettings===`object`&&!Array.isArray(context.agentSettings)?{agentSettings:context.agentSettings}:{}}export{vibe64SourceEditorStarsPath as $,vibe64RepositoryVersionFilesPath as A,vibe64SessionsQueryKey as B,vibe64OutputRunStopPath as C,vibe64RepositoryApiPath as D,vibe64PreviewIdentityPath as E,vibe64SessionPath as F,vibe64SourceEditorExplanationPath as G,vibe64SourceEditorCreateFilePath as H,vibe64SessionPreviewStatePath as I,vibe64SourceEditorExplanationsStreamPath as J,vibe64SourceEditorExplanationStopPath as K,vibe64SessionPromptHintsCancelPath as L,vibe64SessionChangesPath as M,vibe64SessionCheckUpdatesPath as N,vibe64RepositoryHistoryPath as O,vibe64SessionEventMatchesScope as P,vibe64SourceEditorSearchPath as Q,vibe64SessionPromptHintsPath as R,vibe64OutputRunPath as S,vibe64OutputsQueryKey as T,vibe64SourceEditorDownloadPath as U,vibe64SourceEditorChangesStreamPath as V,vibe64SourceEditorExplanationFollowupsStreamPath as W,vibe64SourceEditorFilesPath as X,vibe64SourceEditorFilePath as Y,vibe64SourceEditorResolvePathPath as Z,vibe64AssistantCapabilitiesQueryKey as _,VIBE64_CURRENT_SESSION_API_SUFFIX as a,vibe64ConversationLogQueryKey as b,VIBE64_SOURCE_EDITOR_FILE_CHANGED_EVENT as c,agentTurnControlPayloadFromContext as d,vibe64SourceEditorTreePath as et,selectedSessionStorageKey as f,vibe64AgentTerminalPath as g,vibe64AgentTerminalControlTextPath as h,VIBE64_ASSISTANT_MODEL_ACCESS_API_SUFFIX as i,vibe64SessionChangeDiffPath as j,vibe64RepositoryVersionDiffPath as k,VIBE64_SOURCE_EDITOR_SYNC_ERROR_EVENT as l,vibe64AgentAttachmentPath as m,VIBE64_ARCHIVED_SESSIONS_API_SUFFIX as n,vibe64TemporaryConversationsPath as nt,VIBE64_SESSIONS_API_SUFFIX as o,vibe64AgentAttachmentFilePath as p,vibe64SourceEditorExplanationsCleanupPath as q,VIBE64_ASSISTANTS_API_SUFFIX as r,VIBE64_SESSION_CHANGED_EVENT as s,VIBE64_API_SUFFIX as t,vibe64TemporaryConversationPath as tt,VIBE64_SOURCE_EDITOR_SYNC_READY_EVENT as u,vibe64AssistantModelAccessPath as v,vibe64OutputsPath as w,vibe64OutputResultPath as x,vibe64ConversationLogPath as y,vibe64SessionQueryKey as z};
package/dist/index.html CHANGED
@@ -21,7 +21,7 @@
21
21
  }, true);
22
22
  </script>
23
23
  <style>#startup-shell{color:#25232a;background:#faf9fc;grid-template-rows:56px 1fr;font:15px system-ui,sans-serif;display:grid;position:fixed;inset:0}#startup-shell header{border-bottom:1px solid #dedce3;align-items:center;padding:0 24px;font-weight:600;display:flex}#startup-shell main{grid-template-columns:240px 1fr;min-height:0;display:grid}#startup-shell aside{border-right:1px solid #dedce3;padding:24px}#startup-shell .startup-placeholder{background:#e5e2eb;border-radius:4px;height:16px;margin-bottom:20px}#startup-shell section{padding:32px}#startup-shell a{min-height:48px;color:inherit;align-items:center;display:inline-flex}@media (width<=600px){#startup-shell main{grid-template-columns:1fr}#startup-shell aside{display:none}}@media (prefers-color-scheme:dark){#startup-shell{color:#eeeaf3;background:#19181d}#startup-shell header,#startup-shell aside{border-color:#3c3942}#startup-shell .startup-placeholder{background:#35323d}}</style>
24
- <script type="module" crossorigin src="/assets/index-CBo1BEk6.js"></script>
24
+ <script type="module" crossorigin src="/assets/index-CGz4Yow6.js"></script>
25
25
  <link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-DBalRfVu.js">
26
26
  <link rel="modulepreload" crossorigin href="/assets/runtime-core.esm-bundler-DGXg_mpN.js">
27
27
  <link rel="modulepreload" crossorigin href="/assets/VAvatar-H2hyOWlB.js">
@@ -29,12 +29,11 @@
29
29
  <link rel="modulepreload" crossorigin href="/assets/error-W1ZAEk4a.js">
30
30
  <link rel="modulepreload" crossorigin href="/assets/returnToPath-gKtcu91D.js">
31
31
  <link rel="modulepreload" crossorigin href="/assets/deepFreeze-BgoYkoTa.js">
32
- <link rel="modulepreload" crossorigin href="/assets/vibe64ProjectScope.local-BxTBYuRg.js">
32
+ <link rel="modulepreload" crossorigin href="/assets/vibe64ProjectScope.local-l5_-E6pq.js">
33
33
  <link rel="modulepreload" crossorigin href="/assets/useRealtimeEvent-BNXVwzFG.js">
34
- <link rel="modulepreload" crossorigin href="/assets/useEndpointResource-DBRQISI_.js">
34
+ <link rel="modulepreload" crossorigin href="/assets/useEndpointResource-7-YDfAxX.js">
35
35
  <link rel="modulepreload" crossorigin href="/assets/useApi-BPuI6ZR9-CFWU1m37.js">
36
- <link rel="modulepreload" crossorigin href="/assets/surface-DzO5xqc8.js">
37
- <link rel="modulepreload" crossorigin href="/assets/placement-B5T1LR7m.js">
36
+ <link rel="modulepreload" crossorigin href="/assets/linkPath-Ch9eft18.js">
38
37
  <link rel="modulepreload" crossorigin href="/assets/preload-helper-BvdcsxN9.js">
39
38
  <link rel="modulepreload" crossorigin href="/assets/lazy-DPw3syqC.js">
40
39
  <link rel="modulepreload" crossorigin href="/assets/VOverlay-Bi97WKy3.js">
@@ -47,7 +46,10 @@
47
46
  <link rel="modulepreload" crossorigin href="/assets/VSelect-Dqnp_CFi.js">
48
47
  <link rel="modulepreload" crossorigin href="/assets/layout-BtR_9hCB.js">
49
48
  <link rel="modulepreload" crossorigin href="/assets/vibe64AssistantHost-CP6oxv5b.js">
50
- <link rel="modulepreload" crossorigin href="/assets/studioUrls-CGKCbM_d.js">
49
+ <link rel="modulepreload" crossorigin href="/assets/surface-DzO5xqc8.js">
50
+ <link rel="modulepreload" crossorigin href="/assets/studioUrls-B0-GdWh8.js">
51
+ <link rel="modulepreload" crossorigin href="/assets/asyncModuleRecovery-DJsn5NrL.js">
52
+ <link rel="modulepreload" crossorigin href="/assets/client-BAXHGUOC.js">
51
53
  <link rel="modulepreload" crossorigin href="/assets/mdi-X9prU-DG.js">
52
54
  <link rel="modulepreload" crossorigin href="/assets/VBtn-Sj5jAuOx.js">
53
55
  <link rel="modulepreload" crossorigin href="/assets/VAlert-7_VM9EUm.js">
@@ -62,27 +64,29 @@
62
64
  <link rel="modulepreload" crossorigin href="/assets/VSkeletonLoader-pc4bBTxv.js">
63
65
  <link rel="modulepreload" crossorigin href="/assets/VSwitch-B_DmcTxG.js">
64
66
  <link rel="modulepreload" crossorigin href="/assets/_plugin-vue_export-helper-DNW4j-dv.js">
65
- <link rel="modulepreload" crossorigin href="/assets/StudioErrorNotice-DudSuU3G.js">
66
- <link rel="modulepreload" crossorigin href="/assets/browserLocalStorage-B4C7rHrs.js">
67
- <link rel="modulepreload" crossorigin href="/assets/clipboard-CZs9aH3L.js">
68
- <link rel="modulepreload" crossorigin href="/assets/useVibe64Terminal-Zr3Mig2L.js">
69
67
  <link rel="modulepreload" crossorigin href="/assets/shared-TUhK_uYM.js">
70
68
  <link rel="modulepreload" crossorigin href="/assets/assistantRouting-D_9PZkWu.js">
69
+ <link rel="modulepreload" crossorigin href="/assets/placement-DYM3JJ-F.js">
71
70
  <link rel="modulepreload" crossorigin href="/assets/pathname-Bb895US8.js">
72
- <link rel="modulepreload" crossorigin href="/assets/usePaths-DdAnjVDj.js">
73
- <link rel="modulepreload" crossorigin href="/assets/useUiFeedback-B51xtCAK.js">
74
- <link rel="modulepreload" crossorigin href="/assets/useCommand-Epd2yHhQ.js">
71
+ <link rel="modulepreload" crossorigin href="/assets/usePaths-Y6UuQxmI.js">
72
+ <link rel="modulepreload" crossorigin href="/assets/useUiFeedback-Bd3rao6E.js">
73
+ <link rel="modulepreload" crossorigin href="/assets/useCommand-CVuya6vG.js">
74
+ <link rel="modulepreload" crossorigin href="/assets/StudioErrorNotice-DudSuU3G.js">
75
+ <link rel="modulepreload" crossorigin href="/assets/browserLocalStorage-B4C7rHrs.js">
76
+ <link rel="modulepreload" crossorigin href="/assets/clipboard-CZs9aH3L.js">
77
+ <link rel="modulepreload" crossorigin href="/assets/useVibe64Terminal-B9EWJ9Ba.js">
75
78
  <link rel="modulepreload" crossorigin href="/assets/shared-BEwrtWSp.js">
76
79
  <link rel="modulepreload" crossorigin href="/assets/vibe64ApiResponses-B4VY77Q_.js">
77
- <link rel="modulepreload" crossorigin href="/assets/studioGateApi-BVdclhPL.js">
78
- <link rel="modulepreload" crossorigin href="/assets/client-BYsDPxR3.js">
80
+ <link rel="modulepreload" crossorigin href="/assets/studioGateApi-mkX1eOTX.js">
81
+ <link rel="modulepreload" crossorigin href="/assets/client-CCZIu6yc.js">
79
82
  <link rel="modulepreload" crossorigin href="/assets/VTextarea-wqoRFl1K.js">
80
- <link rel="modulepreload" crossorigin href="/assets/conversation-Bn7wpATa.js">
81
- <link rel="modulepreload" crossorigin href="/assets/conversation-CNcCrV-R.js">
82
- <link rel="modulepreload" crossorigin href="/assets/useVibe64ProjectScope-D7b8n1gx.js">
83
+ <link rel="modulepreload" crossorigin href="/assets/conversation-DG9lp25w.js">
84
+ <link rel="modulepreload" crossorigin href="/assets/conversation-ErAO1CmH.js">
85
+ <link rel="modulepreload" crossorigin href="/assets/useVibe64ProjectScope-DXjsKKhl.js">
83
86
  <link rel="modulepreload" crossorigin href="/assets/vibe64BrowserTabOrigin-SF9E31vi.js">
84
- <link rel="modulepreload" crossorigin href="/assets/useVibe64DatabaseTools-BE_yXZFn.js">
85
- <link rel="modulepreload" crossorigin href="/assets/useVibe64SystemGraph-CDDcsye4.js">
87
+ <link rel="modulepreload" crossorigin href="/assets/vibe64SessionRequestConfig-xIx-5jxQ.js">
88
+ <link rel="modulepreload" crossorigin href="/assets/useVibe64DatabaseTools-DKV-TeNJ.js">
89
+ <link rel="modulepreload" crossorigin href="/assets/useVibe64SystemGraph-Db_eD-X8.js">
86
90
  <link rel="stylesheet" crossorigin href="/assets/VAvatar-nHaK192T.css">
87
91
  <link rel="stylesheet" crossorigin href="/assets/VOverlay-DG-PukqI.css">
88
92
  <link rel="stylesheet" crossorigin href="/assets/VDivider-DvkP_iX7.css">
@@ -107,8 +111,8 @@
107
111
  <link rel="stylesheet" crossorigin href="/assets/useVibe64Terminal-fDhiQNz6.css">
108
112
  <link rel="stylesheet" crossorigin href="/assets/client-Dh1mE5bc.css">
109
113
  <link rel="stylesheet" crossorigin href="/assets/VTextarea-DDl63AeD.css">
110
- <link rel="stylesheet" crossorigin href="/assets/conversation-3ln-WnbL.css">
111
- <link rel="stylesheet" crossorigin href="/assets/index-MWACm8Pp.css">
114
+ <link rel="stylesheet" crossorigin href="/assets/conversation-CSDHdGDb.css">
115
+ <link rel="stylesheet" crossorigin href="/assets/index-B-dukXUB.css">
112
116
  </head>
113
117
  <body>
114
118
  <div id="app">
@@ -162,7 +162,8 @@ consent remain your interaction in **AI Accounts**.
162
162
 
163
163
  For Claude, a failed status check is distinct from being signed out. Retry the
164
164
  status check before starting another login; Colleague can recheck readiness,
165
- while provider consent remains your step.
165
+ while provider consent remains your step. **AI Accounts** shows the same Claude
166
+ Code sign-in your chats use.
166
167
  If Claude reports that another process is refreshing its OAuth token, wait a
167
168
  minute before retrying. If the error persists, ask the workspace operator to
168
169
  check the managed Claude version and refresh-lock recovery. This error alone
@@ -170,7 +171,7 @@ does not prove that you signed out or need to replace your credentials.
170
171
  Changing the workspace's Claude account stops its existing Claude processes.
171
172
  Sign-ins and key checks show a spinner and what is happening while they wait,
172
173
  as described in [AI onboarding](ai-onboarding.md#while-it-works).
173
- Main chats keep their history and resume with the newly connected account; they
174
+ Main and temporary chats keep their history and resume with the newly connected account; they
174
175
  do not require access to the previous account. Model selection in **Chat mode**
175
176
  also uses the current workspace connection. If the old process cannot be stopped,
176
177
  resolve the reported stop failure before retrying; a replacement cannot start
@@ -246,6 +247,9 @@ If those choices changed while the dialog was open, press **Cancel**, reopen
246
247
  **Custom**, review your selection and apply again. A loading error offers
247
248
  **Retry**. Neither action changes saved provider connections.
248
249
  Claude Code uses its selected provider for background model calls as well.
250
+ To start a new session on such a choice, select **Change** in **Start an AI
251
+ session**: it opens the same **Custom AI** choice, and the new chat starts in
252
+ Custom (see [Create and switch sessions](sessions.md)).
249
253
 
250
254
  If an administrator's stopped-service upgrade reports an unsupported saved
251
255
  model request even though the conversation uses current Senior, Junior, Auto
@@ -12,7 +12,14 @@ mobile; tap the value on either layout to open its details.
12
12
  such as **68%**. The weekly quota is shown when supplied; otherwise the supplied
13
13
  coding quota is used. Details include shorter windows and reset times when known.
14
14
  - Native **Claude** subscriptions and **Codex** ChatGPT plans retain their weekly
15
- percentage and existing **Refresh** control.
15
+ percentage and existing **Refresh** control. The percentage appears only while
16
+ the reading is current. While the page is visible, Claude's is read about once
17
+ a minute through a Claude chat running for that account. When no chat is running,
18
+ or the running chat can't confirm a current figure, a short check that stops as
19
+ soon as it answers runs at most every five minutes. When no current reading can be
20
+ obtained, the value shows **?%**. Its details say, for example, **Can't check
21
+ your Claude allowance right now.** and, when known, when it was last checked
22
+ and what was left then.
16
23
 
17
24
  The selected connection must be available in **AI Accounts**, and you must have
18
25
  permission to use it. To choose a model explicitly, open **Chat mode**, choose
@@ -47,12 +54,18 @@ can reject a configured key; a missing balance alone is not a reason to replace
47
54
  the key. Check the provider's Billing page for the account balance. GPT API keys
48
55
  do not show a balance. A confirmed zero does display as zero.
49
56
 
57
+ For Claude and Codex, **?%** means the allowance can't be checked right now; it
58
+ does not mean zero, and the last checked value in its details may be out of date.
59
+ Tap it and choose **Refresh** to try again, or use **Usage details** to see the
60
+ provider's current figure.
61
+
50
62
  Colleague can explain these controls, help identify the session's selected model,
51
63
  and offer to change the selection through its existing session actions. A change
52
64
  requires the person's request or acceptance and normal access checks. Colleague
53
65
  can read the same balance or allowance for a session: the amount and currency,
54
66
  or the remaining percentage with its reset time, and when it was checked. Like
55
- the indicator, no reading does not mean zero. Colleague has no access to API
67
+ the indicator, no reading does not mean zero, and a reading reported as stale is
68
+ the last value checked, not the current one. Colleague has no access to API
56
69
  keys; the person opens the provider site and handles any account payment or top-up.
57
70
 
58
71
  Verified against `Vibe64AgentPlanUsage.vue`, `Vibe64ChatModeControls.vue`,
@@ -44,7 +44,8 @@ deleted or prevent you from chatting. An interrupted snapshot command is named
44
44
  as such; expand **Technical details** for the original error and recovery steps.
45
45
  Vibe64 attempts another snapshot when the next assistant turn finishes, including
46
46
  failed or stopped turns—not immediately when you send a message. A successful
47
- snapshot clears the warning automatically.
47
+ snapshot clears the warning automatically. A snapshot stops after two minutes at
48
+ most, and a later snapshot removes the temporary files of one that was stopped.
48
49
 
49
50
  Select **Dismiss** to hide this particular failure. This takes effect immediately
50
51
  and is remembered for this project/session in the same browser across reloads.
@@ -100,11 +100,16 @@ through the explanation.
100
100
 
101
101
  Failed Main-chat messages offer **Retry** and **Cancel** on desktop and mobile.
102
102
  **Retry** checks an uncertain attempt's original message ID first. If it was
103
- already delivered, the failure controls disappear without another send.
103
+ already delivered, the failure controls disappear without another send. If the
104
+ AI proves it never received the message, Retry sends it once with the same ID;
105
+ while delivery is unknown, nothing is sent.
104
106
  **Cancel** removes an old local failed attempt immediately without stopping a
105
107
  newer goal or deleting delivered conversation history. For a request still
106
- owned by the current route, the bubble hides while cancellation is checked; it
107
- returns if delivery remains unknown or cancellation fails. Colleague can explain
108
+ owned by the current route, the bubble hides while cancellation is checked. An
109
+ unconfirmed request is removed only once the AI proves it never received it:
110
+ while that is unknown, Cancel stops the turn and checks once more. The bubble
111
+ returns if delivery remains unknown or cancellation fails. Only Claude can
112
+ currently prove that a message never arrived. Colleague can explain
108
113
  these controls; the person presses them in Main chat.
109
114
 
110
115
  New goals pass exactly your objective to the native goal evaluator. Model and