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
@@ -1,4 +1,4 @@
1
- import{Cn as toRaw,D as createVNode,E as createTextVNode,Ht as watch,On as unref,Pt as useId,St as resolveComponent,Yt as withDirectives,Zn as normalizeClass,_ as createBaseVNode,b as createElementBlock,bt as renderList,er as normalizeStyle,et as mergeProps,fn as markRaw,g as computed,it as onBeforeUnmount,mt as openBlock,o as Fragment,qt as withCtx,tr as toDisplayString,tt as nextTick,un as isRef,v as createBlock,vn as ref,wn as toRef,xn as shallowRef,xt as renderSlot,y as createCommentVNode}from"./runtime-core.esm-bundler-DGXg_mpN.js";import{ar as vModelSelect,cr as withKeys,lr as withModifiers,or as vModelText,sr as vShow}from"./VAvatar-H2hyOWlB.js";import{n as VList,s as VListItem,t as VMenu}from"./VMenu-DnhVIMrr.js";import{At as mdiFileCogOutline,Ht as mdiFolderOutline,Nt as mdiFileDocumentOutline,Pt as mdiFileImageOutline,Rt as mdiFileTableOutline,Wr as mdiVuejs,_n as mdiLanguageRuby,cn as mdiLanguageCsharp,ct as mdiConsoleLine,dn as mdiLanguageHtml5,fn as mdiLanguageJava,gn as mdiLanguagePython,hn as mdiLanguagePhp,kt as mdiFileCodeOutline,ln as mdiLanguageCss3,mn as mdiLanguageKotlin,pn as mdiLanguageJavascript,sn as mdiLanguageCpp,tt as mdiCodeJson,un as mdiLanguageGo,vn as mdiLanguageRust,wr as mdiStarOutline,yn as mdiLanguageTypescript}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 VDivider}from"./VDivider-AUQb_N9d.js";import{t as VDialog}from"./VDialog-Drp3yzSH.js";import{n as VCardText,t as VCard}from"./VCard-DExT9Cji.js";import{t as _plugin_vue_export_helper_default}from"./_plugin-vue_export-helper-DNW4j-dv.js";import{t as useVibe64SystemGraph}from"./useVibe64SystemGraph-CDDcsye4.js";import{a as _sfc_main$d,i as _sfc_main$1$1,n as Position,s as _sfc_main$f,t as MarkerType}from"./vue-flow-core-BlVEnES8.js";var _hoisted_1$3=[`open`,`onToggle`];var _hoisted_2$3={class:`subsystem-tree__folder`,viewBox:`0 0 24 24`,"aria-hidden":`true`};var _hoisted_3$3=[`d`];var _hoisted_4$3=[`data-file-path`,`aria-pressed`,`title`,`onClick`,`onKeydown`];var _hoisted_5$3={class:`subsystem-tree__type`,"aria-hidden":`true`};var _hoisted_6$2=[`d`];var _hoisted_7$2={class:`subsystem-tree__name`};var _hoisted_8$2=[`title`];var _hoisted_9$2={viewBox:`0 0 24 24`,"aria-hidden":`true`};var _hoisted_10$2=[`d`];var _hoisted_11$2=[`title`];var _hoisted_12$2=[`title`];var _hoisted_13$2=[`title`];var _hoisted_14$2={key:0,class:`subsystem-tree__bar`};var _sfc_main$3={__name:`Vibe64SubsystemTreeBranch`,props:{items:{type:Array,required:true},depth:{type:Number,default:0},selectedId:{type:String,default:``},searching:Boolean,folderState:{type:Map,default:()=>new Map}},emits:[`select`,`inspect`],setup(__props){const icons=[[[`js`,`mjs`,`cjs`,`jsx`],mdiLanguageJavascript,`#aa8215`],[[`ts`,`tsx`,`mts`,`cts`],mdiLanguageTypescript,`#397fc3`],[[`vue`],mdiVuejs,`#38866c`],[[`py`,`pyi`],mdiLanguagePython,`#3e79a1`],[[`rs`],mdiLanguageRust,`#936344`],[[`go`],mdiLanguageGo,`#298998`],[[`java`],mdiLanguageJava,`#bc674d`],[[`kt`,`kts`],mdiLanguageKotlin,`#8163b0`],[[`cs`],mdiLanguageCsharp,`#7760ac`],[[`c`,`h`,`cc`,`cpp`,`hpp`],mdiLanguageCpp,`#4b7aaa`],[[`rb`],mdiLanguageRuby,`#b75757`],[[`php`],mdiLanguagePhp,`#7a72a6`],[[`css`,`scss`,`sass`,`less`],mdiLanguageCss3,`#4f86bc`],[[`html`,`htm`],mdiLanguageHtml5,`#bd7050`],[[`json`,`jsonc`],mdiCodeJson,`#938140`],[[`yaml`,`yml`,`toml`,`ini`,`conf`],mdiFileCogOutline,`#7b8190`],[[`sh`,`bash`,`zsh`,`ps1`],mdiConsoleLine,`#698171`],[[`png`,`jpg`,`jpeg`,`webp`,`gif`,`svg`,`ico`],mdiFileImageOutline,`#9a74a3`],[[`csv`,`tsv`,`sql`],mdiFileTableOutline,`#408b89`],[[`md`,`txt`,`rst`],mdiFileDocumentOutline,`#6d8592`]];function icon(name){const extension=name.includes(`.`)?name.split(`.`).at(-1).toLowerCase():``;const match=icons.find(([extensions])=>extensions.includes(extension));return match?{path:match[1],color:match[2]}:{path:mdiFileCodeOutline,color:`#698b80`}}return(_ctx,_cache)=>{const _component_Vibe64SubsystemTreeBranch=resolveComponent(`Vibe64SubsystemTreeBranch`,true);return openBlock(),createElementBlock(`ul`,{class:normalizeClass([`subsystem-tree`,{"subsystem-tree--branch":__props.depth>0}])},[(openBlock(true),createElementBlock(Fragment,null,renderList(__props.items,item=>{return openBlock(),createElementBlock(`li`,{key:item.path||item.id,class:normalizeClass({"subsystem-tree__directory":item.kind===`directory`})},[item.kind===`directory`?(openBlock(),createElementBlock(`details`,{key:0,open:__props.searching||(__props.folderState.get(item.path)??__props.depth<1),onToggle:$event=>!__props.searching&&__props.folderState.set(item.path,$event.target.open)},[createBaseVNode(`summary`,null,[(openBlock(),createElementBlock(`svg`,_hoisted_2$3,[createBaseVNode(`path`,{d:unref(mdiFolderOutline)},null,8,_hoisted_3$3)])),createBaseVNode(`span`,null,toDisplayString(item.name),1),createBaseVNode(`small`,null,toDisplayString(item.count)+` file`+toDisplayString(item.count===1?``:`s`),1)]),createVNode(_component_Vibe64SubsystemTreeBranch,{items:item.children,"folder-state":__props.folderState,depth:__props.depth+1,searching:__props.searching,"selected-id":__props.selectedId,onSelect:_cache[0]||(_cache[0]=$event=>_ctx.$emit(`select`,$event)),onInspect:_cache[1]||(_cache[1]=$event=>_ctx.$emit(`inspect`,$event))},null,8,[`items`,`folder-state`,`depth`,`searching`,`selected-id`])],40,_hoisted_1$3)):(openBlock(),createElementBlock(`button`,{key:1,type:`button`,class:normalizeClass([`subsystem-tree__file nodrag nopan`,{"subsystem-tree__file--selected":__props.selectedId===item.id,"subsystem-tree__file--main":item.programs?.some(program=>program.mainSource===item.file.path)}]),"data-zoom-kind":`file`,"data-file-path":item.file.path,"aria-pressed":__props.selectedId===item.id,style:normalizeStyle({"--file-volume":item.volume??0}),title:`${item.file.path}\n${item.reasons.join(` · `)}\nClick to open this file's interface.`,onClick:$event=>{_ctx.$emit(`select`,item.file);_ctx.$emit(`inspect`,item.file)},onKeydown:withKeys(withModifiers($event=>{_ctx.$emit(`select`,item.file);_ctx.$emit(`inspect`,item.file)},[`stop`,`prevent`]),[`enter`])},[createBaseVNode(`span`,_hoisted_5$3,[(openBlock(),createElementBlock(`svg`,{class:`subsystem-tree__document`,viewBox:`0 0 24 24`,style:normalizeStyle({color:icon(item.name).color})},[createBaseVNode(`path`,{d:icon(item.name).path},null,8,_hoisted_6$2)],4)),createBaseVNode(`small`,null,toDisplayString(item.name.includes(`.`)?item.name.split(`.`).at(-1):`file`),1)]),createBaseVNode(`span`,_hoisted_7$2,toDisplayString(item.name),1),(openBlock(true),createElementBlock(Fragment,null,renderList(item.programs?.filter(program=>program.mainSource===item.file.path),program=>{return openBlock(),createElementBlock(`span`,{key:program.id,class:`subsystem-tree__program subsystem-tree__program--main`,title:program.title},[(openBlock(),createElementBlock(`svg`,_hoisted_9$2,[createBaseVNode(`path`,{d:unref(mdiStarOutline)},null,8,_hoisted_10$2)])),createTextVNode(` Main · `+toDisplayString(program.title),1)],8,_hoisted_8$2)}),128)),item.programs?.some(program=>program.mainSource!==item.file.path)?(openBlock(),createElementBlock(`span`,{key:0,class:`subsystem-tree__program`,title:item.programs.filter(program=>program.mainSource!==item.file.path).map(program=>program.title).join(`
1
+ import{Cn as toRaw,D as createVNode,E as createTextVNode,Ht as watch,On as unref,Pt as useId,St as resolveComponent,Yt as withDirectives,Zn as normalizeClass,_ as createBaseVNode,b as createElementBlock,bt as renderList,er as normalizeStyle,et as mergeProps,fn as markRaw,g as computed,it as onBeforeUnmount,mt as openBlock,o as Fragment,qt as withCtx,tr as toDisplayString,tt as nextTick,un as isRef,v as createBlock,vn as ref,wn as toRef,xn as shallowRef,xt as renderSlot,y as createCommentVNode}from"./runtime-core.esm-bundler-DGXg_mpN.js";import{ar as vModelSelect,cr as withKeys,lr as withModifiers,or as vModelText,sr as vShow}from"./VAvatar-H2hyOWlB.js";import{n as VList,s as VListItem,t as VMenu}from"./VMenu-DnhVIMrr.js";import{At as mdiFileCogOutline,Ht as mdiFolderOutline,Nt as mdiFileDocumentOutline,Pt as mdiFileImageOutline,Rt as mdiFileTableOutline,Wr as mdiVuejs,_n as mdiLanguageRuby,cn as mdiLanguageCsharp,ct as mdiConsoleLine,dn as mdiLanguageHtml5,fn as mdiLanguageJava,gn as mdiLanguagePython,hn as mdiLanguagePhp,kt as mdiFileCodeOutline,ln as mdiLanguageCss3,mn as mdiLanguageKotlin,pn as mdiLanguageJavascript,sn as mdiLanguageCpp,tt as mdiCodeJson,un as mdiLanguageGo,vn as mdiLanguageRust,wr as mdiStarOutline,yn as mdiLanguageTypescript}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 VDivider}from"./VDivider-AUQb_N9d.js";import{t as VDialog}from"./VDialog-Drp3yzSH.js";import{n as VCardText,t as VCard}from"./VCard-DExT9Cji.js";import{t as _plugin_vue_export_helper_default}from"./_plugin-vue_export-helper-DNW4j-dv.js";import{t as useVibe64SystemGraph}from"./useVibe64SystemGraph-Db_eD-X8.js";import{a as _sfc_main$d,i as _sfc_main$1$1,n as Position,s as _sfc_main$f,t as MarkerType}from"./vue-flow-core-BlVEnES8.js";var _hoisted_1$3=[`open`,`onToggle`];var _hoisted_2$3={class:`subsystem-tree__folder`,viewBox:`0 0 24 24`,"aria-hidden":`true`};var _hoisted_3$3=[`d`];var _hoisted_4$3=[`data-file-path`,`aria-pressed`,`title`,`onClick`,`onKeydown`];var _hoisted_5$3={class:`subsystem-tree__type`,"aria-hidden":`true`};var _hoisted_6$2=[`d`];var _hoisted_7$2={class:`subsystem-tree__name`};var _hoisted_8$2=[`title`];var _hoisted_9$2={viewBox:`0 0 24 24`,"aria-hidden":`true`};var _hoisted_10$2=[`d`];var _hoisted_11$2=[`title`];var _hoisted_12$2=[`title`];var _hoisted_13$2=[`title`];var _hoisted_14$2={key:0,class:`subsystem-tree__bar`};var _sfc_main$3={__name:`Vibe64SubsystemTreeBranch`,props:{items:{type:Array,required:true},depth:{type:Number,default:0},selectedId:{type:String,default:``},searching:Boolean,folderState:{type:Map,default:()=>new Map}},emits:[`select`,`inspect`],setup(__props){const icons=[[[`js`,`mjs`,`cjs`,`jsx`],mdiLanguageJavascript,`#aa8215`],[[`ts`,`tsx`,`mts`,`cts`],mdiLanguageTypescript,`#397fc3`],[[`vue`],mdiVuejs,`#38866c`],[[`py`,`pyi`],mdiLanguagePython,`#3e79a1`],[[`rs`],mdiLanguageRust,`#936344`],[[`go`],mdiLanguageGo,`#298998`],[[`java`],mdiLanguageJava,`#bc674d`],[[`kt`,`kts`],mdiLanguageKotlin,`#8163b0`],[[`cs`],mdiLanguageCsharp,`#7760ac`],[[`c`,`h`,`cc`,`cpp`,`hpp`],mdiLanguageCpp,`#4b7aaa`],[[`rb`],mdiLanguageRuby,`#b75757`],[[`php`],mdiLanguagePhp,`#7a72a6`],[[`css`,`scss`,`sass`,`less`],mdiLanguageCss3,`#4f86bc`],[[`html`,`htm`],mdiLanguageHtml5,`#bd7050`],[[`json`,`jsonc`],mdiCodeJson,`#938140`],[[`yaml`,`yml`,`toml`,`ini`,`conf`],mdiFileCogOutline,`#7b8190`],[[`sh`,`bash`,`zsh`,`ps1`],mdiConsoleLine,`#698171`],[[`png`,`jpg`,`jpeg`,`webp`,`gif`,`svg`,`ico`],mdiFileImageOutline,`#9a74a3`],[[`csv`,`tsv`,`sql`],mdiFileTableOutline,`#408b89`],[[`md`,`txt`,`rst`],mdiFileDocumentOutline,`#6d8592`]];function icon(name){const extension=name.includes(`.`)?name.split(`.`).at(-1).toLowerCase():``;const match=icons.find(([extensions])=>extensions.includes(extension));return match?{path:match[1],color:match[2]}:{path:mdiFileCodeOutline,color:`#698b80`}}return(_ctx,_cache)=>{const _component_Vibe64SubsystemTreeBranch=resolveComponent(`Vibe64SubsystemTreeBranch`,true);return openBlock(),createElementBlock(`ul`,{class:normalizeClass([`subsystem-tree`,{"subsystem-tree--branch":__props.depth>0}])},[(openBlock(true),createElementBlock(Fragment,null,renderList(__props.items,item=>{return openBlock(),createElementBlock(`li`,{key:item.path||item.id,class:normalizeClass({"subsystem-tree__directory":item.kind===`directory`})},[item.kind===`directory`?(openBlock(),createElementBlock(`details`,{key:0,open:__props.searching||(__props.folderState.get(item.path)??__props.depth<1),onToggle:$event=>!__props.searching&&__props.folderState.set(item.path,$event.target.open)},[createBaseVNode(`summary`,null,[(openBlock(),createElementBlock(`svg`,_hoisted_2$3,[createBaseVNode(`path`,{d:unref(mdiFolderOutline)},null,8,_hoisted_3$3)])),createBaseVNode(`span`,null,toDisplayString(item.name),1),createBaseVNode(`small`,null,toDisplayString(item.count)+` file`+toDisplayString(item.count===1?``:`s`),1)]),createVNode(_component_Vibe64SubsystemTreeBranch,{items:item.children,"folder-state":__props.folderState,depth:__props.depth+1,searching:__props.searching,"selected-id":__props.selectedId,onSelect:_cache[0]||(_cache[0]=$event=>_ctx.$emit(`select`,$event)),onInspect:_cache[1]||(_cache[1]=$event=>_ctx.$emit(`inspect`,$event))},null,8,[`items`,`folder-state`,`depth`,`searching`,`selected-id`])],40,_hoisted_1$3)):(openBlock(),createElementBlock(`button`,{key:1,type:`button`,class:normalizeClass([`subsystem-tree__file nodrag nopan`,{"subsystem-tree__file--selected":__props.selectedId===item.id,"subsystem-tree__file--main":item.programs?.some(program=>program.mainSource===item.file.path)}]),"data-zoom-kind":`file`,"data-file-path":item.file.path,"aria-pressed":__props.selectedId===item.id,style:normalizeStyle({"--file-volume":item.volume??0}),title:`${item.file.path}\n${item.reasons.join(` · `)}\nClick to open this file's interface.`,onClick:$event=>{_ctx.$emit(`select`,item.file);_ctx.$emit(`inspect`,item.file)},onKeydown:withKeys(withModifiers($event=>{_ctx.$emit(`select`,item.file);_ctx.$emit(`inspect`,item.file)},[`stop`,`prevent`]),[`enter`])},[createBaseVNode(`span`,_hoisted_5$3,[(openBlock(),createElementBlock(`svg`,{class:`subsystem-tree__document`,viewBox:`0 0 24 24`,style:normalizeStyle({color:icon(item.name).color})},[createBaseVNode(`path`,{d:icon(item.name).path},null,8,_hoisted_6$2)],4)),createBaseVNode(`small`,null,toDisplayString(item.name.includes(`.`)?item.name.split(`.`).at(-1):`file`),1)]),createBaseVNode(`span`,_hoisted_7$2,toDisplayString(item.name),1),(openBlock(true),createElementBlock(Fragment,null,renderList(item.programs?.filter(program=>program.mainSource===item.file.path),program=>{return openBlock(),createElementBlock(`span`,{key:program.id,class:`subsystem-tree__program subsystem-tree__program--main`,title:program.title},[(openBlock(),createElementBlock(`svg`,_hoisted_9$2,[createBaseVNode(`path`,{d:unref(mdiStarOutline)},null,8,_hoisted_10$2)])),createTextVNode(` Main · `+toDisplayString(program.title),1)],8,_hoisted_8$2)}),128)),item.programs?.some(program=>program.mainSource!==item.file.path)?(openBlock(),createElementBlock(`span`,{key:0,class:`subsystem-tree__program`,title:item.programs.filter(program=>program.mainSource!==item.file.path).map(program=>program.title).join(`
2
2
  `)},`Part of · `+toDisplayString(item.programs.filter(program=>program.mainSource!==item.file.path).length===1?item.programs.find(program=>program.mainSource!==item.file.path).title:`${item.programs.filter(program=>program.mainSource!==item.file.path).length} Programs`),9,_hoisted_11$2)):createCommentVNode(``,true),item.reasons.length?(openBlock(),createElementBlock(`span`,{key:1,class:`subsystem-tree__entry`,title:item.reasons.join(` · `)},`Entry`,8,_hoisted_12$2)):createCommentVNode(``,true),createBaseVNode(`span`,{class:`subsystem-tree__volume`,title:item.volume==null?`Size unavailable`:`${item.file.sourceLines.toLocaleString()} source lines; bar relative to other files in this subsystem.`},[item.volume!=null?(openBlock(),createElementBlock(`span`,_hoisted_14$2,[createBaseVNode(`i`,{style:normalizeStyle({width:`${item.volume*100}%`})},null,4)])):createCommentVNode(``,true),createBaseVNode(`small`,null,toDisplayString(item.volume==null?`—`:item.file.sourceLines.toLocaleString()),1)],8,_hoisted_13$2)],46,_hoisted_4$3))],2)}),128))],2)}}};var Vibe64SubsystemTreeBranch_default=_plugin_vue_export_helper_default(_sfc_main$3,[[`__scopeId`,`data-v-a6687ea3`]]);var _hoisted_1$2=[`aria-label`];var _hoisted_2$2={class:`subsystem-inspector__header`};var _hoisted_3$2={key:0,class:`subsystem-inspector__navigation nodrag nopan`,"aria-label":`In this subsystem`};var _hoisted_4$2={class:`subsystem-inspector__body`};var _hoisted_5$2={class:`subsystem-inspector__summary`};var _hoisted_6$1={key:0,class:`subsystem-inspector__description`};var _hoisted_7$1={key:1,class:`subsystem-inspector__hint`};var _hoisted_8$1={key:0,class:`subsystem-inspector__coverage`,role:`status`};var _hoisted_9$1=[`onClick`];var _hoisted_10$1={key:0,title:`Export analysis is partial. Unknown return information is omitted.`};var _hoisted_11$1={key:0,class:`subsystem-inspector__hint`,title:`No intended directory-level contract is recorded; observed imports and available exports are shown separately.`};var _hoisted_12$1={key:1,class:`subsystem-inspector__coverage`,role:`status`,title:`Unobserved imports do not prove an export is internal or unused.`};var _hoisted_13$1={key:2,class:`subsystem-inspector__search`};var _hoisted_14$1=[`open`,`onToggle`];var _hoisted_15$1=[`title`];var _hoisted_16$1={key:0};var _hoisted_17$1={class:`subsystem-inspector__signatures`};var _hoisted_18$1={key:0,class:`subsystem-inspector__declaration`};var _hoisted_19$1=[`title`,`onClick`];var _hoisted_20$1=[`title`];var _hoisted_21$1={key:0,class:`subsystem-inspector__returns`};var _hoisted_22$1={class:`subsystem-inspector__source`};var _hoisted_23$1={key:1,class:`subsystem-inspector__evidence`};var _hoisted_24$1={key:0,class:`subsystem-inspector__consumers nodrag nopan`};var _hoisted_25$1=[`title`];var _hoisted_26$1=[`onClick`];var _hoisted_27$1={key:1,class:`subsystem-inspector__no-imports`,title:`No imports are recorded in the current analysis. This does not prove the export is unused.`};var _hoisted_28$1={key:1,class:`subsystem-inspector__signature subsystem-inspector__signature--unresolved`};var _hoisted_29$1=[`title`];var _hoisted_30$1={key:0,class:`subsystem-inspector__returns`};var _hoisted_31$1={key:0,class:`subsystem-inspector__hint`};var _hoisted_32$1={key:1,class:`subsystem-inspector__hint`};var _hoisted_33$1={key:3,class:`subsystem-inspector__technical nodrag nopan`};var _hoisted_34$1={key:0};var _hoisted_35$1={key:4,class:`subsystem-inspector__technical nodrag nopan`};var _hoisted_36$1={key:0};var _hoisted_37$1={key:0};var _hoisted_38$1={key:2,class:`subsystem-inspector__section`};var _hoisted_39$1=[`onClick`];var _hoisted_40$1={class:`subsystem-inspector__file-tools nodrag nopan`};var _hoisted_41$1={class:`subsystem-inspector__search`};var _hoisted_42$1={class:`subsystem-inspector__sort`};var _hoisted_43$1={key:0,class:`subsystem-inspector__hint`};var _sfc_main$2={__name:`Vibe64SubsystemInspector`,props:{outline:{type:Object,required:true},embedded:Boolean},emits:[`close`,`inspect`,`open-program`],setup(__props){const props=__props;function preserveTextSelection(event){if(!event.detail)return;const selected=event.view?.getSelection();const control=event.target.closest(`button, a, summary`);if(control&&selected&&!selected.isCollapsed&&control.contains(selected.anchorNode)&&control.contains(selected.focusNode)){event.preventDefault();event.stopPropagation()}}const query=ref(``);const filesElement=ref(null);const interfaceElement=ref(null);const programElement=ref(null);const programsElement=ref(null);const folderState=ref(new Map);const symbolQuery=ref(``);const sortBy=ref(`name`);const selected=ref(null);const expandedGroups=ref(new Set);const signatureGroups=computed(()=>{const term=symbolQuery.value.trim().toLocaleLowerCase();const observed=props.outline.observedSymbols||[];const observedIds=new Set(observed.map(symbol=>symbol.source.symbolId));return[{key:`observed`,title:`Imported by other subsystems`,primary:true,symbols:observed,explanation:`These particular declarations are imported across this directory boundary. Imports do not prove runtime calls or intended API membership.`},{key:`declared`,title:`Declared API`,primary:!observed.length,symbols:props.outline.publicSymbols.filter(symbol=>!observedIds.has(symbol.source?.symbolId)),explanation:`Explicit package or module exports, including members with no observed consumers.`},{key:`candidates`,title:`Exports from externally used files`,primary:!observed.length&&!props.outline.publicSymbols.length,symbols:props.outline.boundarySymbols,explanation:`These files are imported by other subsystems, but imports of these particular exports are unproven. This is not a declared API.`},{key:`available`,title:`Other available exports`,primary:false,symbols:props.outline.availableSymbols||[],explanation:`Available under the language’s visibility rules. They may be internal, unused or useful to future consumers; current analysis does not decide intent.`}].filter(group=>group.symbols.length).map(group=>({...group,count:group.symbols.length,symbols:group.symbols.filter(symbol=>!term||`${symbol.qualifiedName||``} ${symbol.name||``} ${symbol.source?.path||``}`.toLocaleLowerCase().includes(term))}))});const measuredFiles=computed(()=>props.outline.files.filter(file=>Number.isSafeInteger(file.sourceLines)).length);const measuredLines=computed(()=>props.outline.files.reduce((total,file)=>total+(Number.isSafeInteger(file.sourceLines)?file.sourceLines:0),0));function signature(symbol){return(symbol.qualifiedName||symbol.name)+(Array.isArray(symbol.parameters)?`(${symbol.parameters.join(`, `)})`:``)}function basename(path){return path.split(`/`).pop()}const tree=computed(()=>{const term=query.value.trim().toLocaleLowerCase();const byName=(a,b)=>a.name.localeCompare(b.name,void 0,{numeric:true,sensitivity:`base`});function compare(a,b){if(a.kind!==b.kind)return a.kind===`file`?-1:1;if(a.kind===`file`){if(sortBy.value===`size`){const size=item=>Number.isSafeInteger(item.file.sourceLines)?item.file.sourceLines:-1;if(size(a)!==size(b))return size(b)-size(a)}if(sortBy.value===`type`){const extension=item=>item.name.includes(`.`)?item.name.split(`.`).at(-1).toLocaleLowerCase():``;const typeOrder=extension(a).localeCompare(extension(b));if(typeOrder)return typeOrder}}return byName(a,b)}function arrange(items){return items.flatMap(item=>{if(item.kind===`file`)return!term||item.file.path.toLocaleLowerCase().includes(term)?[item]:[];const children=arrange(item.children);return children.length?[{...item,children}]:[]}).sort(compare)}return arrange(props.outline.tree)});watch(()=>props.outline.owner.id,()=>{query.value=``;symbolQuery.value=``;selected.value=null;sortBy.value=`name`;folderState.value=new Map;expandedGroups.value=new Set});return(_ctx,_cache)=>{return openBlock(),createElementBlock(`section`,{class:normalizeClass([`subsystem-inspector`,{"subsystem-inspector--embedded":__props.embedded}]),"aria-label":__props.outline.owner.opaque?`External package interface`:`Subsystem interface`,onClickCapture:preserveTextSelection},[createBaseVNode(`header`,_hoisted_2$2,[createBaseVNode(`div`,null,[createBaseVNode(`small`,null,toDisplayString(__props.outline.owner.opaque?`EXTERNAL DEPENDENCY`:__props.outline.owner.placementKind===`libraries`?`SHARED LIBRARY`:`SUBSYSTEM`),1),createBaseVNode(`h2`,null,toDisplayString(__props.outline.owner.title),1),createBaseVNode(`p`,null,toDisplayString(__props.outline.owner.root),1)]),!__props.embedded?(openBlock(),createElementBlock(`button`,{key:0,type:`button`,class:`subsystem-inspector__close`,"aria-label":`Back to architecture map`,onClick:_cache[0]||(_cache[0]=$event=>_ctx.$emit(`close`))},`×`)):createCommentVNode(``,true)]),!__props.outline.owner.opaque?(openBlock(),createElementBlock(`nav`,_hoisted_3$2,[createBaseVNode(`button`,{type:`button`,onClick:_cache[1]||(_cache[1]=$event=>programElement.value?.scrollIntoView({block:`start`}))},`Explanation`),__props.outline.programs?.length?(openBlock(),createElementBlock(`button`,{key:0,type:`button`,onClick:_cache[2]||(_cache[2]=$event=>programsElement.value?.scrollIntoView({block:`start`}))},[_cache[10]||(_cache[10]=createTextVNode(`Programs `,-1)),createBaseVNode(`small`,null,toDisplayString(__props.outline.programs.length),1)])):createCommentVNode(``,true),createBaseVNode(`button`,{type:`button`,onClick:_cache[3]||(_cache[3]=$event=>interfaceElement.value?.scrollIntoView({block:`start`}))},`Interface`),createBaseVNode(`button`,{type:`button`,onClick:_cache[4]||(_cache[4]=$event=>filesElement.value?.scrollIntoView({block:`start`}))},[_cache[11]||(_cache[11]=createTextVNode(`Files `,-1)),createBaseVNode(`small`,null,toDisplayString(__props.outline.files.length),1)])])):createCommentVNode(``,true),createBaseVNode(`div`,_hoisted_4$2,[createBaseVNode(`p`,_hoisted_5$2,toDisplayString(__props.outline.owner.opaque?`External package · source remains opaque`:`${__props.outline.files.length} file${__props.outline.files.length===1?``:`s`} · ${measuredFiles.value?measuredLines.value.toLocaleString()+` measured source lines`+(measuredFiles.value<__props.outline.files.length?` (${measuredFiles.value}/${__props.outline.files.length} files)`:``):`Source size unavailable`}`),1),!__props.outline.owner.opaque?(openBlock(),createElementBlock(`section`,{key:0,ref_key:`programElement`,ref:programElement,class:`subsystem-inspector__section`,"aria-label":`Subsystem explanation`},[_cache[12]||(_cache[12]=createBaseVNode(`h3`,null,`Explanation`,-1)),__props.outline.owner.description?(openBlock(),createElementBlock(`div`,_hoisted_6$1,[renderSlot(_ctx.$slots,`text`,{text:__props.outline.owner.description,sourcePath:`genesis/subsystems.md`},()=>[createTextVNode(toDisplayString(__props.outline.owner.description),1)],true)])):(openBlock(),createElementBlock(`p`,_hoisted_7$1,`No explanation in Genesis.`))],512)):createCommentVNode(``,true),!__props.outline.owner.opaque&&(__props.outline.programs?.length||__props.outline.programStatus!==`valid`)?(openBlock(),createElementBlock(`section`,{key:1,ref_key:`programsElement`,ref:programsElement,class:`subsystem-inspector__section`,"aria-label":`Subsystem Programs`},[createBaseVNode(`h3`,null,[_cache[13]||(_cache[13]=createTextVNode(`Programs `,-1)),createBaseVNode(`span`,null,toDisplayString(__props.outline.programs?.length||0),1)]),__props.outline.programStatus!==`valid`?(openBlock(),createElementBlock(`div`,_hoisted_8$1,[..._cache[14]||(_cache[14]=[createBaseVNode(`p`,null,`Program descriptions need refresh.`,-1)])])):createCommentVNode(``,true),(openBlock(true),createElementBlock(Fragment,null,renderList(__props.outline.programs||[],program=>{return openBlock(),createElementBlock(`button`,{key:program.id,type:`button`,class:`subsystem-inspector__program nodrag nopan`,onClick:$event=>_ctx.$emit(`open-program`,program.id)},[createBaseVNode(`strong`,null,toDisplayString(program.title)+` →`,1),createBaseVNode(`span`,null,toDisplayString(program.description),1)],8,_hoisted_9$1)}),128))],512)):createCommentVNode(``,true),createBaseVNode(`section`,{ref_key:`interfaceElement`,ref:interfaceElement,class:`subsystem-inspector__section`,"aria-label":`Subsystem interface`},[createBaseVNode(`h3`,null,[_cache[15]||(_cache[15]=createTextVNode(`Interface `,-1)),__props.outline.publicEntries.some(entry=>entry.coverage!==`complete`)?(openBlock(),createElementBlock(`small`,_hoisted_10$1,`Partial`)):createCommentVNode(``,true)]),!__props.outline.publicEntries.length?(openBlock(),createElementBlock(`p`,_hoisted_11$1,`Intended API not declared.`)):createCommentVNode(``,true),__props.outline.dependencyCoverage!==`complete`&&!__props.outline.owner.opaque?(openBlock(),createElementBlock(`p`,_hoisted_12$1,`Import analysis `+toDisplayString(__props.outline.dependencyCoverage||`unavailable`)+`.`,1)):createCommentVNode(``,true),(__props.outline.exportCount||__props.outline.publicSymbols.length)>12?(openBlock(),createElementBlock(`label`,_hoisted_13$1,[_cache[16]||(_cache[16]=createTextVNode(`Find a signature`,-1)),withDirectives(createBaseVNode(`input`,{"onUpdate:modelValue":_cache[5]||(_cache[5]=$event=>symbolQuery.value=$event),type:`search`,placeholder:`Operation, component, value or type`},null,512),[[vModelText,symbolQuery.value]])])):createCommentVNode(``,true),(openBlock(true),createElementBlock(Fragment,null,renderList(signatureGroups.value,group=>{return openBlock(),createElementBlock(`details`,{key:group.key,class:`subsystem-inspector__surface nodrag nopan`,open:group.primary,onToggle:$event=>$event.target.open&&expandedGroups.value.add(group.key)},[createBaseVNode(`summary`,{title:group.explanation},toDisplayString(group.title)+` · `+toDisplayString(group.count),9,_hoisted_15$1),group.primary||expandedGroups.value.has(group.key)?(openBlock(),createElementBlock(`div`,_hoisted_16$1,[createBaseVNode(`div`,_hoisted_17$1,[(openBlock(true),createElementBlock(Fragment,null,renderList(group.symbols.slice(0,200),symbol=>{return openBlock(),createElementBlock(Fragment,{key:`${symbol.source?.symbolId||symbol.importPaths?.join(`,`)}:${symbol.qualifiedName||symbol.name}:${symbol.start?.line||``}`},[symbol.source?(openBlock(),createElementBlock(`div`,_hoisted_18$1,[createBaseVNode(`button`,{type:`button`,class:`subsystem-inspector__signature nodrag nopan`,title:`Open ${symbol.source.path}:${symbol.source.line||``}`,onClick:$event=>_ctx.$emit(`inspect`,symbol.source)},[createBaseVNode(`small`,null,toDisplayString(symbol.kind||`Declaration`),1),createBaseVNode(`code`,{title:signature(symbol)},toDisplayString(signature(symbol)),9,_hoisted_20$1),symbol.returnType?(openBlock(),createElementBlock(`span`,_hoisted_21$1,`→ `+toDisplayString(symbol.returnType),1)):createCommentVNode(``,true),createBaseVNode(`span`,_hoisted_22$1,toDisplayString(basename(symbol.source.path))+` ↗`,1),symbol.declared||symbol.importPaths?.length?(openBlock(),createElementBlock(`span`,_hoisted_23$1,`Declared export`)):createCommentVNode(``,true)],8,_hoisted_19$1),symbol.consumers?.length?(openBlock(),createElementBlock(`details`,_hoisted_24$1,[createBaseVNode(`summary`,{title:symbol.consumerEvidence===`file`||group.key===`candidates`?`Show files that import the source file; use of this particular export is unproven.`:`Show files that import this declaration.`},toDisplayString(symbol.consumerEvidence===`file`||group.key===`candidates`?`Source file imported by`:`Imported by`)+` `+toDisplayString([...new Set(symbol.consumers.map(file=>file.subsystemId))].length)+` subsystem`+toDisplayString(new Set(symbol.consumers.map(file=>file.subsystemId)).size===1?``:`s`)+` · `+toDisplayString(symbol.consumers.length)+` file`+toDisplayString(symbol.consumers.length===1?``:`s`),9,_hoisted_25$1),(openBlock(true),createElementBlock(Fragment,null,renderList(symbol.consumers,file=>{return openBlock(),createElementBlock(`button`,{key:file.id,type:`button`,class:`subsystem-inspector__consumer`,onClick:$event=>_ctx.$emit(`inspect`,{path:file.path})},[createBaseVNode(`code`,null,toDisplayString(file.path),1),_cache[17]||(_cache[17]=createBaseVNode(`span`,{"aria-hidden":`true`},`→`,-1))],8,_hoisted_26$1)}),128))])):group.key===`available`?(openBlock(),createElementBlock(`p`,_hoisted_27$1,`No recorded imports`)):createCommentVNode(``,true)])):(openBlock(),createElementBlock(`div`,_hoisted_28$1,[createBaseVNode(`small`,null,toDisplayString(symbol.kind||`Declaration`),1),createBaseVNode(`code`,{title:signature(symbol)},toDisplayString(signature(symbol)),9,_hoisted_29$1),symbol.returnType?(openBlock(),createElementBlock(`span`,_hoisted_30$1,`→ `+toDisplayString(symbol.returnType),1)):createCommentVNode(``,true),createBaseVNode(`span`,null,toDisplayString(__props.outline.owner.opaque?`External package`:`Implementation location not resolved`),1)]))],64)}),128))]),group.symbols.length>200?(openBlock(),createElementBlock(`p`,_hoisted_31$1,`Showing 200 matches. Refine the search.`)):createCommentVNode(``,true),symbolQuery.value&&!group.symbols.length?(openBlock(),createElementBlock(`p`,_hoisted_32$1,`No declarations match this search.`)):createCommentVNode(``,true)])):createCommentVNode(``,true)],40,_hoisted_14$1)}),128)),__props.outline.programStatus!==`valid`||__props.outline.programDiagnostics?.length?(openBlock(),createElementBlock(`details`,_hoisted_33$1,[_cache[18]||(_cache[18]=createBaseVNode(`summary`,null,`Analysis details`,-1)),__props.outline.programStatus!==`valid`?(openBlock(),createElementBlock(`p`,_hoisted_34$1,`Genesis explanation index needs repair.`)):createCommentVNode(``,true),(openBlock(true),createElementBlock(Fragment,null,renderList(__props.outline.programDiagnostics||[],diagnostic=>{return openBlock(),createElementBlock(`p`,{key:diagnostic.code+diagnostic.message},toDisplayString(diagnostic.message),1)}),128))])):createCommentVNode(``,true),__props.outline.publicEntries.length?(openBlock(),createElementBlock(`details`,_hoisted_35$1,[createBaseVNode(`summary`,null,`Import paths · `+toDisplayString(__props.outline.publicEntries.length),1),(openBlock(true),createElementBlock(Fragment,null,renderList(__props.outline.publicEntries,(entry,index)=>{return openBlock(),createElementBlock(`div`,{key:index},[createBaseVNode(`code`,null,toDisplayString(entry.importPath),1),createBaseVNode(`p`,null,[createTextVNode(toDisplayString(entry.conditions.join(` · `)||`Default conditions`),1),entry.target?(openBlock(),createElementBlock(`span`,_hoisted_36$1,` · `+toDisplayString(entry.target),1)):createCommentVNode(``,true)]),!entry.symbols.length?(openBlock(),createElementBlock(`p`,_hoisted_37$1,`Public declarations have not been resolved for this path.`)):createCommentVNode(``,true)])}),128))])):createCommentVNode(``,true)],512),__props.outline.operations.length?(openBlock(),createElementBlock(`section`,_hoisted_38$1,[createBaseVNode(`h3`,null,[_cache[19]||(_cache[19]=createTextVNode(`Receives UI calls `,-1)),createBaseVNode(`span`,null,toDisplayString(__props.outline.operations.length),1)]),(openBlock(true),createElementBlock(Fragment,null,renderList(__props.outline.operations,call=>{return openBlock(),createElementBlock(`button`,{key:call.id,type:`button`,class:`subsystem-inspector__signature nodrag nopan`,onClick:$event=>_ctx.$emit(`inspect`,{path:call.file.path,symbol:call.controllerSymbol})},[createBaseVNode(`code`,null,toDisplayString([call.key?.protocol,call.key?.method,call.key?.operation].filter(Boolean).join(` · `)||call.id),1),createBaseVNode(`span`,null,[createTextVNode(toDisplayString(basename(call.file.path))+` ↗`,1),call.pages.length?(openBlock(),createElementBlock(Fragment,{key:0},[createTextVNode(` · `+toDisplayString(call.pages.map(page=>page.title).join(`, `)),1)],64)):createCommentVNode(``,true)])],8,_hoisted_39$1)}),128))])):createCommentVNode(``,true),!__props.outline.owner.opaque?(openBlock(),createElementBlock(`section`,{key:3,ref_key:`filesElement`,ref:filesElement,class:`subsystem-inspector__section subsystem-inspector__files`},[createBaseVNode(`h3`,null,[_cache[20]||(_cache[20]=createTextVNode(`Files `,-1)),createBaseVNode(`span`,null,toDisplayString(__props.outline.files.length),1)]),_cache[24]||(_cache[24]=createBaseVNode(`p`,{class:`subsystem-inspector__hint`},`Click a file to open it. Bars compare source size.`,-1)),createBaseVNode(`div`,_hoisted_40$1,[createBaseVNode(`label`,_hoisted_41$1,[_cache[21]||(_cache[21]=createTextVNode(`Find a file`,-1)),withDirectives(createBaseVNode(`input`,{"onUpdate:modelValue":_cache[6]||(_cache[6]=$event=>query.value=$event),type:`search`,placeholder:`Name or path`},null,512),[[vModelText,query.value]])]),createBaseVNode(`label`,_hoisted_42$1,[_cache[23]||(_cache[23]=createTextVNode(`Sort`,-1)),withDirectives(createBaseVNode(`select`,{"onUpdate:modelValue":_cache[7]||(_cache[7]=$event=>sortBy.value=$event)},[..._cache[22]||(_cache[22]=[createBaseVNode(`option`,{value:`name`},`Name`,-1),createBaseVNode(`option`,{value:`type`},`File type`,-1),createBaseVNode(`option`,{value:`size`},`Size · largest first`,-1)])],512),[[vModelSelect,sortBy.value]])])]),createVNode(Vibe64SubsystemTreeBranch_default,{items:tree.value,"folder-state":folderState.value,searching:!!query.value.trim(),"selected-id":selected.value?.id||``,onSelect:_cache[8]||(_cache[8]=$event=>selected.value=$event),onInspect:_cache[9]||(_cache[9]=$event=>_ctx.$emit(`inspect`,$event))},null,8,[`items`,`folder-state`,`searching`,`selected-id`]),!tree.value.length?(openBlock(),createElementBlock(`p`,_hoisted_43$1,`No files match this search.`)):createCommentVNode(``,true)],512)):createCommentVNode(``,true)])],42,_hoisted_1$2)}}};var Vibe64SubsystemInspector_default=_plugin_vue_export_helper_default(_sfc_main$2,[[`__scopeId`,`data-v-fdf4744b`]]);var _hoisted_1$1={class:`program-inspector`,"aria-label":`Program explanation`};var _hoisted_2$1={key:0};var _hoisted_3$1={class:`program-inspector__preview`};var _hoisted_4$1={class:`program-explanation-dialog__header`};var _hoisted_5$1=[`id`];var _sfc_main$1={__name:`Vibe64ProgramInspector`,props:{program:{type:Object,required:true},architecture:{type:Object,required:true},owner:Object,active:{type:Boolean,default:true}},emits:[`inspect`],setup(__props){const props=__props;const filesElement=ref(null);const explanationOpen=ref(false);const dialogTitleId=useId();const preview=computed(()=>props.program.description.trim().split(/\n\s*\n/u)[0]);watch([()=>props.program.id,()=>props.active],()=>{explanationOpen.value=false});const files=computed(()=>{const sources=new Set(props.program.sources);const indexed=props.architecture.files.filter(file=>sources.has(file.path));const largest=Math.max(1,...indexed.map(file=>file.sourceLines||0));return indexed.map(file=>({kind:`file`,id:file.id,name:file.path,file,programs:[props.program],reasons:[],volume:Number.isSafeInteger(file.sourceLines)?file.sourceLines/largest:null}))});const mainFiles=computed(()=>files.value.filter(item=>item.file.path===props.program.mainSource));const supportingFiles=computed(()=>files.value.filter(item=>item.file.path!==props.program.mainSource).sort((a,b)=>a.name.localeCompare(b.name)));return(_ctx,_cache)=>{return openBlock(),createElementBlock(`section`,_hoisted_1$1,[createBaseVNode(`header`,null,[_cache[5]||(_cache[5]=createBaseVNode(`small`,null,`PROGRAM`,-1)),createBaseVNode(`h2`,null,toDisplayString(__props.program.title),1),createBaseVNode(`p`,null,toDisplayString(__props.owner?.title),1)]),createBaseVNode(`button`,{type:`button`,class:`program-inspector__anchor`,onClick:_cache[0]||(_cache[0]=$event=>_ctx.$emit(`inspect`,{path:__props.program.mainSource}))},[_cache[6]||(_cache[6]=createBaseVNode(`small`,null,`Main source file`,-1)),createBaseVNode(`strong`,null,toDisplayString(__props.program.mainSource)+` →`,1)]),supportingFiles.value.length?(openBlock(),createElementBlock(`nav`,_hoisted_2$1,[createBaseVNode(`button`,{type:`button`,onClick:_cache[1]||(_cache[1]=$event=>filesElement.value?.scrollIntoView({block:`start`}))},`Supporting files `+toDisplayString(supportingFiles.value.length)+` ↓`,1)])):createCommentVNode(``,true),createBaseVNode(`div`,_hoisted_3$1,[renderSlot(_ctx.$slots,`text`,{text:preview.value,sourcePath:__props.program.path},()=>[createTextVNode(toDisplayString(preview.value),1)],true)]),createVNode(VDialog,{modelValue:explanationOpen.value,"onUpdate:modelValue":_cache[3]||(_cache[3]=$event=>explanationOpen.value=$event),"max-width":`800`,scrollable:``,class:`program-explanation-dialog`,"aria-labelledby":unref(dialogTitleId)},{activator:withCtx(({props:activatorProps})=>[createBaseVNode(`button`,mergeProps(activatorProps,{type:`button`,class:`program-inspector__read`,"aria-haspopup":`dialog`}),`Read full explanation`,16)]),default:withCtx(()=>[createVNode(VCard,null,{default:withCtx(()=>[createBaseVNode(`header`,_hoisted_4$1,[createBaseVNode(`h2`,{id:unref(dialogTitleId)},toDisplayString(__props.program.title),9,_hoisted_5$1),createBaseVNode(`button`,{type:`button`,"aria-label":`Close Program explanation`,onClick:_cache[2]||(_cache[2]=$event=>explanationOpen.value=false)},`×`)]),createVNode(VCardText,{class:`program-explanation-dialog__body`},{default:withCtx(()=>[createBaseVNode(`div`,null,[renderSlot(_ctx.$slots,`text`,{text:__props.program.description,sourcePath:__props.program.path},()=>[createTextVNode(toDisplayString(__props.program.description),1)],true)]),createBaseVNode(`div`,null,[renderSlot(_ctx.$slots,`text`,{text:__props.program.publicContract,sourcePath:__props.program.path},()=>[createTextVNode(toDisplayString(__props.program.publicContract),1)],true)])]),_:3})]),_:3})]),_:3},8,[`modelValue`,`aria-labelledby`]),createBaseVNode(`section`,{ref_key:`filesElement`,ref:filesElement},[createBaseVNode(`h3`,null,[_cache[7]||(_cache[7]=createTextVNode(`Source files `,-1)),createBaseVNode(`small`,null,toDisplayString(files.value.length),1)]),createVNode(Vibe64SubsystemTreeBranch_default,{items:[...mainFiles.value,...supportingFiles.value],onInspect:_cache[4]||(_cache[4]=$event=>_ctx.$emit(`inspect`,$event))},null,8,[`items`])],512)])}}};var Vibe64ProgramInspector_default=_plugin_vue_export_helper_default(_sfc_main$1,[[`__scopeId`,`data-v-4b298893`]]);function layeredGraph(nodes=[],edges=[]){const byId=new Map(nodes.map(node=>[node.id,node]));const outgoing=new Map([...byId.keys()].map(id=>[id,new Set]));const incoming=new Map([...byId.keys()].map(id=>[id,new Set]));const validEdges=edges.filter(edge=>byId.has(edge.fromId)&&byId.has(edge.toId)&&edge.fromId!==edge.toId);for(const edge of validEdges){outgoing.get(edge.fromId).add(edge.toId);incoming.get(edge.toId).add(edge.fromId)}const visited=new Set;const finish=[];for(const id of[...byId.keys()].sort()){if(visited.has(id))continue;const stack=[[id,false]];while(stack.length){const[current,complete]=stack.pop();if(complete){finish.push(current);continue}if(visited.has(current))continue;visited.add(current);stack.push([current,true]);for(const target of outgoing.get(current))if(!visited.has(target))stack.push([target,false])}}const groupById=new Map;const groups=[];for(const id of finish.reverse()){if(groupById.has(id))continue;const members=[];const stack=[id];const group={id:``,members,dependencies:new Set,consumers:new Set,rank:0};while(stack.length){const current=stack.pop();if(groupById.has(current))continue;groupById.set(current,group);members.push(current);for(const source of incoming.get(current))if(!groupById.has(source))stack.push(source)}members.sort();group.id=JSON.stringify(members);group.cyclic=members.length>1;groups.push(group)}for(const edge of validEdges){const source=groupById.get(edge.fromId);const target=groupById.get(edge.toId);if(source===target)continue;source.dependencies.add(target);target.consumers.add(source)}const remaining=new Map(groups.map(group=>[group,group.dependencies.size]));const queue=groups.filter(group=>!group.dependencies.size);for(let index=0;index<queue.length;index++){const group=queue[index];for(const consumer of group.consumers){consumer.rank=Math.max(consumer.rank,group.rank+1);remaining.set(consumer,remaining.get(consumer)-1);if(!remaining.get(consumer))queue.push(consumer)}}const rows=new Map;for(const group of groups){if(!rows.has(group.rank))rows.set(group.rank,[]);rows.get(group.rank).push(group)}return{layers:[...rows].sort(([a],[b])=>b-a).map(([rank,row])=>({rank,groups:row.sort((a,b)=>a.id.localeCompare(b.id)).map(group=>({id:group.id,rank,cyclic:group.cyclic,members:group.members.map(id=>byId.get(id))}))})),edges:validEdges,disconnectedIds:new Set([...byId.keys()].filter(id=>!outgoing.get(id).size&&!incoming.get(id).size)),nodeRanks:new Map([...groupById].map(([id,group])=>[id,group.rank])),cyclicIds:new Set([...groupById].filter(([,group])=>group.cyclic).map(([id])=>id))}}function architectureGraph(architecture,subsystemId=``,{includeTypeOnly=false}={}){const files=architecture?.files||[];const subsystems=architecture?.subsystems||[];const packages=architecture?.packages||[];const relations=(architecture?.relations||[]).filter(relation=>(includeTypeOnly||!(relation.typeOnly||relation.kind===`type-import`))&&relation.resolution===`resolved`&&(relation.targetFileId||relation.targetPackageId));const usedPackages=new Set(relations.map(relation=>relation.targetPackageId));const boundaries=packages.map(entry=>({...entry,title:entry.name,kind:`package`,path:entry.root,fileIds:[],provenance:`package`}));const filesById=new Map([...files,...boundaries].map(file=>[file.id,file]));const sourceFileIds=new Set(files.map(file=>file.id));const fileEdges=relations.map(relation=>({fromId:relation.fromFileId,toId:relation.targetFileId||relation.targetPackageId,evidence:[relation]}));const concrete=layeredGraph(files,fileEdges.filter(edge=>sourceFileIds.has(edge.toId)));const externalCycleFileIds=new Set;if(subsystemId){for(const row of concrete.layers)for(const component of row.groups)if(component.cyclic&&component.members.some(file=>file.subsystemId===subsystemId)&&component.members.some(file=>file.subsystemId!==subsystemId)){for(const file of component.members)if(file.subsystemId===subsystemId)externalCycleFileIds.add(file.id)}}const localPackageIds=new Set(relations.filter(relation=>filesById.get(relation.fromFileId)?.subsystemId===subsystemId&&!relation.targetFileId).map(relation=>relation.targetPackageId));const nodes=subsystemId?[...files.filter(file=>file.subsystemId===subsystemId),...boundaries.filter(entry=>localPackageIds.has(entry.id))]:subsystems.filter(entry=>!entry.opaque||usedPackages.has(entry.packageId));const aggregated=new Map;const boundary=[];for(const edge of fileEdges){const from=filesById.get(edge.fromId);const to=filesById.get(edge.toId);if(!from||!to)continue;if(subsystemId){if(from.subsystemId===subsystemId&&(to.subsystemId===subsystemId||localPackageIds.has(to.id))){const key=JSON.stringify([edge.fromId,edge.toId]);if(!aggregated.has(key))aggregated.set(key,{...edge,evidence:[]});aggregated.get(key).evidence.push(...edge.evidence)}else if(from.subsystemId===subsystemId||to.subsystemId===subsystemId)boundary.push({...edge,from,to})}else if(from.subsystemId!==to.subsystemId){const key=`${from.subsystemId}->${to.subsystemId}`;if(!aggregated.has(key))aggregated.set(key,{fromId:from.subsystemId,toId:to.subsystemId,evidence:[]});aggregated.get(key).evidence.push(...edge.evidence)}}const graph=layeredGraph(nodes,[...aggregated.values()]);const groupByOwner=new Map(graph.layers.flatMap(layer=>layer.groups.flatMap(group=>group.members.map(member=>[member.id,group.id]))));const concreteCycleGroups=new Set;if(!subsystemId)for(const row of concrete.layers)for(const component of row.groups){if(!component.cyclic)continue;const owners=new Set(component.members.map(file=>file.subsystemId));const groups=new Set([...owners].map(id=>groupByOwner.get(id)));if(owners.size>1&&groups.size===1)concreteCycleGroups.add(groups.values().next().value)}for(const layer of graph.layers)for(const group of layer.groups)group.cycleLabel=group.cyclic&&!subsystemId&&!concreteCycleGroups.has(group.id)?`Bidirectional subsystem coupling`:`Dependency cycle`;return{...graph,boundary,externalCycleFileIds}}var externalDependenciesId=`visual:external-dependencies`;function pageConnections(ui,pageId){const parents=new Set([pageId]);const children=new Map;for(const use of ui?.componentUses||[]){if(!children.has(use.parentId))children.set(use.parentId,[]);children.get(use.parentId).push(use)}const pending=[pageId];while(pending.length)for(const use of children.get(pending.pop())||[])for(const id of[use.id,use.componentId]){if(!id||parents.has(id))continue;parents.add(id);pending.push(id)}return(ui?.connections||[]).filter(connection=>parents.has(connection.parentId))}function pageHierarchy(ui){const pages=ui?.pages||[];const registrations=ui?.registrations||[];const rows=[];const children=new Map;for(const page of pages){const parent=page.parentId||null;if(!children.has(parent))children.set(parent,[]);children.get(parent).push(page)}for(const list of children.values())list.sort((a,b)=>b.title.localeCompare(a.title));const stack=(children.get(null)||[]).map(page=>({page,depth:0}));while(stack.length){const{page,depth}=stack.pop();rows.push({...page,depth,registrations:registrations.filter(entry=>entry.pageId===page.id)});stack.push(...(children.get(page.id)||[]).map(child=>({page:child,depth:depth+1})))}return rows}function pageStoryboard(ui){const rows=pageHierarchy(ui);const children=new Map;const widths=new Map;const heights=new Map;const depthHeights=new Map;const cardWidth=264;const siblingGap=36;for(const page of rows){if(!children.has(page.parentId||null))children.set(page.parentId||null,[]);children.get(page.parentId||null).push(page);const identities=[...new Set(page.registrations.map(entry=>entry.identity))];const height=Math.max(120,64+Math.ceil(page.title.length/24)*26+identities.reduce((total,identity)=>total+Math.ceil(identity.length/32)*20,0));heights.set(page.id,height);depthHeights.set(page.depth,Math.max(depthHeights.get(page.depth)||0,height))}for(const page of[...rows].reverse()){const descendants=children.get(page.id)||[];widths.set(page.id,Math.max(cardWidth,descendants.reduce((total,child)=>total+widths.get(child.id),0)+Math.max(0,descendants.length-1)*siblingGap))}const depthTops=new Map;let y=0;for(const[depth,height]of[...depthHeights].sort((a,b)=>a[0]-b[0])){depthTops.set(depth,y);y+=height+84}const left=new Map;let rootLeft=0;for(const root of children.get(null)||[]){left.set(root.id,rootLeft);rootLeft+=widths.get(root.id)+100}return{nodes:rows.map(page=>{let childLeft=left.get(page.id);for(const child of children.get(page.id)||[]){left.set(child.id,childLeft);childLeft+=widths.get(child.id)+siblingGap}return{id:page.id,type:`page`,position:{x:left.get(page.id)+(widths.get(page.id)-cardWidth)/2,y:depthTops.get(page.depth)},style:{width:`${cardWidth}px`,height:`${heights.get(page.id)}px`},data:{...page,identities:[...new Set(page.registrations.map(entry=>entry.identity))],childCount:(children.get(page.id)||[]).length}}}),edges:rows.filter(page=>page.parentId).map(page=>({id:`parent:${page.id}`,source:page.parentId,target:page.id,sourceHandle:`children`,targetHandle:`parent`,type:`smoothstep`,selectable:false,style:{stroke:`#93a7ba`,strokeWidth:2}}))}}function engineOverview(architecture,order=[]){const orderIndex=new Map(order.map((id,index)=>[id,index]));const graph=architectureGraph(architecture);const externalPackages=graph.layers.flatMap(layer=>layer.groups.flatMap(group=>group.members)).filter(owner=>owner.opaque).sort((a,b)=>a.title.localeCompare(b.title));const applicationLayers=graph.layers.map(layer=>({...layer,groups:layer.groups.map(group=>({...group,members:group.members.filter(owner=>!owner.opaque)})).filter(group=>group.members.length)}));const files=new Map((architecture?.files||[]).map(file=>[file.id,file]));const placements=new Map((architecture?.layout?.groups||[]).flatMap((group,index)=>group.subsystems.map((member,memberIndex)=>[member.root,{...member,kind:group.kind,groupId:group.id,order:index,memberOrder:memberIndex}])));const entryOwners=new Set((architecture?.entryPoints||[]).filter(entry=>entry.resolution===`resolved`).map(entry=>entry.subsystemId));const cards=new Map;const totals=applicationLayers.flatMap(layer=>layer.groups.flatMap(group=>group.members)).map(subsystem=>(subsystem.fileIds||[]).map(id=>files.get(id)?.sourceLines).filter(Number.isSafeInteger).reduce((sum,lines)=>sum+Math.max(0,lines),0));const largest=Math.max(1,...totals);for(const layer of applicationLayers)for(const group of layer.groups)for(const subsystem of group.members){const sourceFiles=(subsystem.fileIds||[]).map(id=>files.get(id)).filter(Boolean);const measured=sourceFiles.filter(file=>Number.isSafeInteger(file.sourceLines)&&file.sourceLines>=0);const sourceLines=measured.length?measured.reduce((total,file)=>total+file.sourceLines,0):null;const volume=Math.log1p((sourceLines||0)/100)/Math.log1p(largest/100);const placement=placements.get(subsystem.root);const width=260+160*volume;const height=width;const publicEntries=(architecture?.packages||[]).filter(pkg=>pkg.subsystemId===subsystem.id).flatMap(pkg=>pkg.entryPoints||[]);const receivingFiles=new Set((architecture?.relations||[]).filter(relation=>relation.resolution===`resolved`&&files.get(relation.targetFileId)?.subsystemId===subsystem.id&&files.get(relation.fromFileId)?.subsystemId!==subsystem.id).map(relation=>relation.targetFileId));const publicCount=new Set(publicEntries.flatMap(entry=>(entry.symbols||[]).map(symbol=>`${symbol.sourceFile||entry.file}:${symbol.qualifiedName||symbol.name}:${symbol.start?.line||``}`))).size;const publicSummary=publicCount?`${publicCount} public declaration${publicCount===1?``:`s`}`:publicEntries.length?`Public declarations need analysis`:receivingFiles.size?`Exported signatures to review`:`Public interface not recorded`;cards.set(subsystem.id,{id:subsystem.id,type:`subsystem`,style:{width:`${width}px`,height:`${height}px`},data:{...subsystem,...placement?{placementKind:placement.kind}:{},publicSummary,library:placement?.kind===`libraries`,presentationOrder:placement?.order??Infinity,memberOrder:placement?.memberOrder??Infinity,sourceLines,sizePartial:measured.length!==sourceFiles.length,measuredFiles:measured.length,sourceVolume:(sourceLines||0)/largest,entryFiles:(architecture?.entryPoints||[]).filter(entry=>entry.subsystemId===subsystem.id).map(entry=>entry.file),cycleLabel:group.cyclic?group.cycleLabel:``,disconnected:graph.disconnectedIds.has(subsystem.id),rank:layer.rank}})}const sourceCards=[...cards.values()].sort((a,b)=>(orderIndex.get(a.id)??Infinity)-(orderIndex.get(b.id)??Infinity)||Number(!entryOwners.has(a.id))-Number(!entryOwners.has(b.id))||Number(a.data.placementKind===`support`)-Number(b.data.placementKind===`support`)||a.data.presentationOrder-b.data.presentationOrder||a.data.memberOrder-b.data.memberOrder||(a.data.root||a.id).localeCompare(b.data.root||b.id));const libraryCards=sourceCards.filter(card=>card.data.library);const applicationCards=sourceCards.filter(card=>!card.data.library);const columns=Math.min(6,Math.max(1,Math.ceil(Math.sqrt(applicationCards.length))));const cellSize=Math.max(280,...applicationCards.map(card=>parseFloat(card.style.width)));const gap=56;const applicationWidth=applicationCards.length?columns*cellSize+(columns-1)*gap:0;const rowCount=Math.ceil(applicationCards.length/columns);const applicationHeight=rowCount?rowCount*cellSize+(rowCount-1)*gap:0;const decorations=[];const nodes=[];for(const[index,card]of applicationCards.entries()){const inset=(cellSize-parseFloat(card.style.width))/2;card.position={x:index%columns*(cellSize+gap)+inset,y:Math.floor(index/columns)*(cellSize+gap)+inset};card.data.arrangeable=true;card.data.initialFocus=index<columns;card.draggable=true;card.dragHandle=`.engine-subsystem__grip`;nodes.push(card)}let width=applicationWidth;let height=Math.max(200,applicationHeight);if(libraryCards.length){const columnX=applicationWidth+48;const columnWidth=Math.max(...libraryCards.map(card=>parseFloat(card.style.width)));decorations.push({id:`visual:shared-libraries`,type:`annotation`,position:{x:columnX,y:0},style:{width:`${columnWidth}px`,height:`76px`},selectable:false,focusable:false,draggable:false,data:{kind:`libraries`,title:`Shared libraries`,detail:`Project-owned reusable interfaces`}});let libraryY=88;for(const card of libraryCards){card.position={x:columnX+(columnWidth-parseFloat(card.style.width))/2,y:libraryY};card.data.library=true;card.draggable=false;nodes.push(card);libraryY+=parseFloat(card.style.height)+24}width=columnX+columnWidth;height=Math.max(height,libraryY-24)}if(externalPackages.length){const columnWidth=Math.min(640,Math.max(420,...externalPackages.map(pkg=>pkg.title.length*9+48)));const charactersPerLine=Math.floor((columnWidth-48)/9);const columnHeight=112+externalPackages.reduce((total,pkg)=>total+15+22*Math.ceil(pkg.title.length/charactersPerLine),0);nodes.push({id:externalDependenciesId,type:`external-dependencies`,position:{x:width+48,y:0},style:{width:`${columnWidth}px`,height:`${columnHeight}px`},draggable:false,data:{id:externalDependenciesId,kind:`external-dependencies`,title:`External dependencies`,root:``,opaque:true,fileIds:[],entryFiles:[],sourceLines:null,packages:externalPackages,description:`Available throughout the project. Select a dependency to read its public interface.`}});width+=48+columnWidth;height=Math.max(height,columnHeight)}return{nodes,edges:[],decorations,width,height,applicationWidth,applicationHeight,externalCount:externalPackages.length}}function symbolSource(path,symbol){return{path,symbolId:symbol.id,symbol:symbol.qualifiedName||symbol.name,line:symbol.start?.line}}function subsystemOutline(architecture,subsystemId){const nativeOwner=(architecture?.subsystems||[]).find(subsystem=>subsystem.id===subsystemId);if(!nativeOwner)return null;const placementGroup=(architecture?.layout?.groups||[]).find(group=>group.subsystems.some(member=>member.root===nativeOwner.root));const owner=placementGroup?.subsystems.find(member=>member.root===nativeOwner.root)?{...nativeOwner,placementKind:placementGroup.kind}:nativeOwner;const files=new Map((architecture?.files||[]).map(file=>[file.id,file]));const local=owner.opaque?[]:[...files.values()].filter(file=>file.subsystemId===owner.id);const localIds=new Set(local.map(file=>file.id));const byPath=new Map(local.map(file=>[file.path,file]));const sourceFilesByPath=new Map([...files.values()].map(file=>[file.path,file]));const symbolsByFile=new Map;for(const symbol of architecture?.symbols||[])if(symbol.visibility===`public`){if(!symbolsByFile.has(symbol.fileId))symbolsByFile.set(symbol.fileId,[]);symbolsByFile.get(symbol.fileId).push(symbol)}const entries=new Map;const addEntry=(file,reason)=>{if(!file||!localIds.has(file.id))return;if(!entries.has(file.id))entries.set(file.id,{file,reasons:new Set,consumers:new Map});entries.get(file.id).reasons.add(reason);return entries.get(file.id)};for(const entry of architecture?.entryPoints||[])if(entry.resolution===`resolved`&&entry.subsystemId===owner.id)addEntry(files.get(entry.fileId)||byPath.get(entry.file),`Application entry`);const publicEntries=(architecture?.packages||[]).filter(pkg=>pkg.subsystemId===owner.id).flatMap(pkg=>(pkg.entryPoints||[]).map(entry=>{const file=byPath.get(entry.file);addEntry(file,`Declared public import`);return{...entry,file,symbols:(entry.symbols||[]).map(symbol=>{const sourceFile=symbol.sourceFile?files.get(`file:${symbol.sourceFile}`)||sourceFilesByPath.get(symbol.sourceFile):file;const candidates=(symbolsByFile.get(sourceFile?.id)||[]).filter(candidate=>!owner.opaque&&(!symbol.sourceHash||symbol.sourceHash===sourceFile.hash)&&(candidate.qualifiedName||candidate.name)===(symbol.sourceQualifiedName||symbol.sourceName||symbol.qualifiedName||symbol.name)&&(!symbol.start||candidate.start?.line===symbol.start.line&&candidate.start?.column===symbol.start.column));const source=candidates.length===1?candidates[0]:null;return{...symbol,...source?{source:symbolSource(sourceFile.path,source)}:{}}}),conditions:entry.conditions||[],importPath:entry.importPath===`.`?pkg.name:`${pkg.name}${entry.importPath?.startsWith(`./`)?entry.importPath.slice(1):`/`+(entry.importPath||``)}`}}));const packages=new Map((architecture?.packages||[]).map(pkg=>[pkg.id,pkg]));const symbolsById=new Map((architecture?.symbols||[]).map(symbol=>[symbol.id,symbol]));const observed=new Map;const fileLinks=new Map;const importsByFile=new Map;const importsBySymbol=new Map;const exposedFiles=new Set(publicEntries.flatMap(entry=>entry.symbols.map(symbol=>sourceFilesByPath.get(symbol.source?.path)?.id)).filter(Boolean));for(const relation of architecture?.relations||[]){if(relation.resolution!==`resolved`)continue;const from=files.get(relation.fromFileId);const to=files.get(relation.targetFileId)||packages.get(relation.targetPackageId);if(!from||!to)continue;if(localIds.has(to.id)||exposedFiles.has(to.id)){if(!importsByFile.has(to.id))importsByFile.set(to.id,new Map);importsByFile.get(to.id).set(from.id,from);for(const id of relation.importedSymbolIds||[]){const symbol=symbolsById.get(id);if(!symbol||symbol.fileId!==to.id||symbol.visibility!==`public`)continue;if(!importsBySymbol.has(id))importsBySymbol.set(id,new Map);importsBySymbol.get(id).set(from.id,from)}}if(localIds.has(to.id)&&!localIds.has(from.id)){addEntry(to,`Used by other subsystems`).consumers.set(from.id,from);for(const id of relation.importedSymbolIds||[]){const symbol=symbolsById.get(id);if(!symbol||symbol.fileId!==to.id||symbol.visibility!==`public`)continue;if(!observed.has(id))observed.set(id,{...symbol,consumers:new Map,source:symbolSource(to.path,symbol)});observed.get(id).consumers.set(from.id,from)}}if(relation.typeOnly||relation.kind===`type-import`)continue;if(from.id!==to.id&&localIds.has(from.id)&&(localIds.has(to.id)||!relation.targetFileId)){const key=JSON.stringify([from.id,to.id]);fileLinks.set(key,{fromId:from.id,toId:to.id,from:from.path,to:to.path||to.name})}}const pages=architecture?.ui?.pages||[];let callsByPage;const operations=(architecture?.ui?.connections||[]).filter(connection=>connection.resolution===`resolved`&&localIds.has(connection.controllerFileId)).map(connection=>{const file=files.get(connection.controllerFileId);addEntry(file,`Receives UI calls`);callsByPage||=new Map(pages.map(page=>[page.id,new Set(pageConnections(architecture.ui,page.id).map(call=>call.id))]));return{...connection,file,pages:pages.filter(page=>callsByPage.get(page.id).has(connection.id))}});const entryFiles=[...entries.values()].map(entry=>({...entry,reasons:[...entry.reasons],consumers:[...entry.consumers.values()],symbols:symbolsByFile.get(entry.file.id)||[]})).sort((a,b)=>a.file.path.localeCompare(b.file.path));const programs=(architecture?.program?.modules||[]).filter(module=>module.subsystemId===owner.id);const programsByFile=new Map;for(const module of architecture?.program?.modules||[])for(const source of module.sources){if(!programsByFile.has(source))programsByFile.set(source,[]);programsByFile.get(source).push(module)}const largest=Math.max(1,...local.map(file=>Number.isSafeInteger(file.sourceLines)?file.sourceLines:0));const root={children:[]};const directories=new Map([[``,root]]);for(const file of local){const prefix=owner.root&&owner.root!==`.`?owner.root+`/`:``;const relativePath=prefix&&file.path.startsWith(prefix)?file.path.slice(prefix.length):file.path;const segments=relativePath.split(`/`);let directory=root;let path=``;for(const name of segments.slice(0,-1)){path=path?path+`/`+name:name;if(!directories.has(path)){const folder={kind:`directory`,name,path,children:[],count:0};directories.set(path,folder);directory.children.push(folder)}directory=directories.get(path);directory.count++}directory.children.push({kind:`file`,id:file.id,name:segments.at(-1),file,relativePath,reasons:entries.has(file.id)?[...entries.get(file.id).reasons]:[],programs:programsByFile.get(file.path)||[],publicCount:symbolsByFile.get(file.id)?.length||0,volume:Number.isSafeInteger(file.sourceLines)?Math.max(0,file.sourceLines)/largest:null})}for(const directory of directories.values())directory.children.sort((a,b)=>(a.kind===b.kind?0:a.kind===`file`?-1:1)||a.name.localeCompare(b.name));const publicSymbols=new Map;const declaredSymbolIds=new Set;for(const entry of publicEntries)for(const symbol of entry.symbols){const key=`${symbol.source?.symbolId||entry.importPath}:${symbol.qualifiedName||symbol.name}:${symbol.start?.line||``}`;if(symbol.source?.symbolId)declaredSymbolIds.add(symbol.source.symbolId);if(!publicSymbols.has(key))publicSymbols.set(key,{...symbol,importPaths:[]});const exposed=publicSymbols.get(key);if(!exposed.importPaths.includes(entry.importPath))exposed.importPaths.push(entry.importPath)}const boundarySymbols=entryFiles.filter(entry=>entry.consumers.length).flatMap(entry=>entry.symbols.filter(symbol=>!declaredSymbolIds.has(symbol.id)&&!observed.has(symbol.id)).map(symbol=>({...symbol,consumers:entry.consumers,source:symbolSource(entry.file.path,symbol)})));const observedSymbols=[...observed.values()].map(symbol=>({...symbol,declared:declaredSymbolIds.has(symbol.id),consumers:[...symbol.consumers.values()]}));const candidates=new Set(boundarySymbols.map(symbol=>symbol.id));const availableSymbols=local.flatMap(file=>(symbolsByFile.get(file.id)||[]).filter(symbol=>!declaredSymbolIds.has(symbol.id)&&!observed.has(symbol.id)&&!candidates.has(symbol.id)).map(symbol=>({...symbol,source:symbolSource(file.path,symbol)})));for(const symbol of[...publicSymbols.values(),...observedSymbols,...boundarySymbols,...availableSymbols]){if(!symbol.source)continue;const exact=[...importsBySymbol.get(symbol.source.symbolId)?.values()||[]];const sourceFile=sourceFilesByPath.get(symbol.source.path);symbol.consumers=(exact.length?exact:[...importsByFile.get(sourceFile?.id)?.values()||[]]).sort((a,b)=>a.path.localeCompare(b.path));symbol.consumerEvidence=exact.length?`declaration`:`file`}return{owner,tree:root.children,files:local,programs,programStatus:architecture?.program?.status||`unavailable`,programDiagnostics:architecture?.program?.diagnostics||[],entryFiles,publicEntries,publicSymbols:[...publicSymbols.values()],observedSymbols,boundarySymbols,availableSymbols,operations,fileLinks:[...fileLinks.values()],dependencyCoverage:architecture?.ui?.capabilities?.imports||architecture?.capabilities?.dependencies||`unconfigured`,exportCount:local.reduce((count,file)=>count+(symbolsByFile.get(file.id)?.length||0),0)}}function architectureOverview(architecture,expandedSubsystemId=``,order=[]){const ui=pageStoryboard(architecture?.ui);const engine=engineOverview(architecture,order);const uiWidth=Math.max(400,...ui.nodes.map(node=>node.position.x+parseFloat(node.style.width)));const uiHeight=Math.max(200,...ui.nodes.map(node=>node.position.y+parseFloat(node.style.height)));const width=Math.max(uiWidth,engine.width);const uiLeft=(width-uiWidth)/2;const engineLeft=(width-engine.width)/2;const engineTop=ui.nodes.length?uiHeight+112:0;const uiParents=ui.nodes.filter(node=>node.data.childCount);const uiFocus=uiParents.length?uiParents:ui.nodes.slice(0,3);const uiHeadingLeft=uiLeft+(uiFocus[0]?.position.x||0);const shift=(node,x,y)=>({...node,position:{x:node.position.x+x,y:node.position.y+y+48}});const annotations=[...ui.nodes.length?[{id:`visual:ui-heading`,type:`annotation`,position:{x:uiHeadingLeft,y:0},style:{width:`640px`,height:`36px`},data:{kind:`heading`,title:`UI`,detail:`Pages / screens / scenes · parents above children · siblings on the same row`}}]:[],...engine.nodes.length?[{id:`visual:engine-heading`,type:`annotation`,position:{x:engineLeft,y:engineTop},style:{width:`640px`,height:`36px`},data:{kind:`heading`,title:`Engine`,detail:`Directory subsystems · interfaces and responsibilities`}}]:[],...ui.nodes.length?[{id:`visual:divider`,type:`annotation`,position:{x:0,y:uiHeight+84},style:{width:`${width}px`,height:`1px`},data:{kind:`divider`}}]:[],...engine.decorations.map(node=>shift(node,engineLeft,engineTop))].map(node=>({...node,selectable:false,focusable:false,draggable:false,zIndex:-1}));const files=new Map((architecture?.files||[]).map(file=>[file.id,file]));const owners=new Map(engine.nodes.map(node=>[node.id,node]));const bridges=[];for(const page of ui.nodes){const connections=pageConnections(architecture?.ui,page.id);page.data.unresolvedCalls=0;page.data.callCount=0;for(const connection of connections){const file=files.get(connection.controllerFileId);const owner=owners.get(file?.subsystemId);if(connection.resolution!==`resolved`||!file||!owner){page.data.unresolvedCalls++;continue}const receivers=owner.data.receivers||=[];if(!receivers.some(receiver=>receiver.id===file.id))receivers.push({id:file.id,path:file.path});const key=connection.key||{};const operation=[key.protocol,key.method,key.operation].filter(Boolean).join(` · `);bridges.push({id:`call:${page.id}:${connection.id}`,source:page.id,target:owner.id,sourceHandle:`engine-out`,targetHandle:`controller:${file.id}`,type:`controller`,selectable:true,zIndex:2,markerEnd:{type:`arrowclosed`,color:`#7954b3`,width:18,height:18},style:{stroke:`#7954b3`,strokeWidth:2},data:{connection,controllerFile:file.path,operation,label:`${file.path.split(`/`).pop()} · ${operation}`}});page.data.callCount++}}const engineNodes=engine.nodes.map(node=>shift(node,engineLeft,engineTop));for(const node of engineNodes){node.data.expanded=node.id===expandedSubsystemId;if(node.data.arrangeable)node.extent=[[engineLeft,engineTop+48],[engineLeft+engine.applicationWidth,engineTop+48+engine.applicationHeight]]}return{nodes:[...annotations,...ui.nodes.map(node=>shift(node,uiLeft,0)),...engineNodes],edges:[...ui.edges,...engine.edges,...bridges],uiIds:ui.nodes.map(node=>node.id),engineIds:engine.nodes.map(node=>node.id),externalCount:engine.externalCount,initialIds:[...uiFocus.map(node=>node.id),...engine.nodes.filter(node=>node.data.initialFocus||engine.nodes.length===1).map(node=>node.id),...annotations.filter(node=>node.data.kind===`heading`).map(node=>node.id)]}}var _hoisted_1={class:`ui-storyboard`,"aria-label":`UI and Engine architecture`};var _hoisted_2={class:`ui-storyboard__toolbar`};var _hoisted_3={class:`ui-storyboard__heading`};var _hoisted_4={key:0,role:`status`};var _hoisted_5={key:1};var _hoisted_6={key:0};var _hoisted_7={key:1};var _hoisted_8={key:2,title:`This project has no UI-call discovery configured. Missing arrows do not prove there are no calls.`};var _hoisted_9={class:`ui-storyboard__actions`};var _hoisted_10={key:0};var _hoisted_11={style:{"white-space":`pre-wrap`,"overflow-wrap":`anywhere`}};var _hoisted_12=[`title`];var _hoisted_13={class:`storyboard-page__meta`};var _hoisted_14={key:1,class:`storyboard-page__routes`};var _hoisted_15={key:2,class:`storyboard-page__unregistered`};var _hoisted_16={key:3,class:`storyboard-page__unresolved`};var _hoisted_17={class:`external-dependencies`,"aria-label":`External dependencies`};var _hoisted_18=[`data-package-id`,`aria-label`,`title`,`onClick`];var _hoisted_19={class:`subsystem-zoom__context`};var _hoisted_20={class:`subsystem-zoom__breadcrumbs`,"aria-label":`Architecture location`};var _hoisted_21={key:1};var _hoisted_22=[`aria-label`];var _hoisted_23={key:0,class:`subsystem-zoom__file`};var _hoisted_24={class:`subsystem-zoom__body`};var _hoisted_25={key:0,class:`subsystem-zoom__loading`,role:`status`,"aria-busy":`true`,"aria-label":`Loading subsystem interface`};var _hoisted_26=[`title`];var _hoisted_27=[`onKeydown`];var _hoisted_28={class:`engine-subsystem__content`};var _hoisted_29={key:0,class:`engine-subsystem__start`};var _hoisted_30={class:`engine-subsystem__meta`};var _hoisted_31={key:0};var _hoisted_32={key:1,class:`engine-subsystem__directory`};var _hoisted_33={class:`engine-subsystem__description`};var _hoisted_34=[`title`];var _hoisted_35=[`title`];var _hoisted_36={key:0};var _hoisted_37={key:2,class:`engine-subsystem__receivers`};var _hoisted_38=[`title`];var _hoisted_39=[`title`];var _hoisted_40=[`aria-label`,`title`];var _hoisted_41=[`x`,`y`];var _hoisted_42=[`title`];var _hoisted_43=[`title`];var _hoisted_44={key:0};var _hoisted_45={key:1};var _hoisted_46={key:3,class:`ui-storyboard__empty`,role:`status`};var _hoisted_47={key:0};var _hoisted_48={key:1};var _hoisted_49={key:4,class:`ui-storyboard__legend`};var _hoisted_50={key:5,class:`ui-storyboard__notice`,role:`status`};var _sfc_main={__name:`Vibe64UiStoryboardView`,props:{active:{type:Boolean,default:true},sessionId:{type:String,default:``},reloadVersion:{type:Number,default:0},openProgramRequest:Object},emits:[`inspect-file`,`open-source-file`],setup(__props,{emit:__emit}){const props=__props;const{architecture,error,loading,refreshing,refreshProgress,refreshOutput,refresh,reload,cancelRefresh}=useVibe64SystemGraph({active:toRef(props,`active`),sessionId:toRef(props,`sessionId`),reloadVersion:toRef(props,`reloadVersion`)});const emit=__emit;const canvas=ref(null);const dismissedError=ref(``);watch(error,()=>{dismissedError.value=``});const expandedSubsystemId=ref(``);const compact=ref(false);const outline=shallowRef(null);const retainedOutline=shallowRef(null);const focusOwner=computed(()=>{const native=architecture.value?.subsystems?.find(owner=>owner.id===expandedSubsystemId.value);return native?{...native,...overview.value.nodes.find(node=>node.id===native.id)?.data||{}}:null});watch([expandedSubsystemId,architecture],async([id],previous,onCleanup)=>{outline.value=null;if(!id)return;let cancelled=false;onCleanup(()=>{cancelled=true});await nextTick();await new Promise(requestAnimationFrame);await new Promise(requestAnimationFrame);if(!cancelled){const detail=subsystemOutline(toRaw(architecture.value),id);outline.value=detail?markRaw(detail):null}},{flush:`sync`});const layoutPositions=ref({});const fileRequest=ref(null);const retainedFileRequest=shallowRef(null);const viewHistory=shallowRef([]);const programId=ref(``);const retainedProgramId=ref(``);const currentProgram=computed(()=>architecture.value?.program?.modules?.find(program=>program.id===programId.value));const retainedProgram=computed(()=>architecture.value?.program?.modules?.find(program=>program.id===retainedProgramId.value));const parentProgram=computed(()=>architecture.value?.program?.modules?.find(program=>program.id===viewHistory.value.findLast(entry=>entry.programId)?.programId));let dragging=false;let lastDragEnded=0;let zoomAnchor;let zoomTarget;let parentViewport;let parentNode;let fileParentViewport;let transitioning=false;let gestureTarget;let gestureTimer;let gestureDirection;let zoomMotion;let zoomFrame;let zoomTime;let navigationVersion=0;let pinchDistance;let pinchTarget;function finishGesture(){if(zoomMotion||transitioning){gestureTimer=setTimeout(finishGesture,80);return}gestureTarget=void 0;zoomTarget=void 0;zoomAnchor=void 0}function stopZoomMotion(){cancelAnimationFrame(zoomFrame);zoomFrame=void 0;zoomMotion=void 0}function moveCamera(viewport,{semantic=false,done}={}){zoomMotion={viewport,semantic,done};if(!zoomFrame){zoomTime=void 0;zoomFrame=requestAnimationFrame(animateZoom)}}function animateZoom(time){if(!zoomMotion||!flow||!props.active){stopZoomMotion();return}const motion=zoomMotion;const destination=motion.viewport;const current=flow.getViewport();const amount=1-Math.exp(-Math.min(50,time-(zoomTime||time-16))/45);zoomTime=time;const next={x:current.x+(destination.x-current.x)*amount,y:current.y+(destination.y-current.y)*amount,zoom:current.zoom+(destination.zoom-current.zoom)*amount};const complete=Math.abs(next.zoom-destination.zoom)<.001&&Math.abs(next.x-destination.x)<.3&&Math.abs(next.y-destination.y)<.3;flow.setViewport(complete?destination:next,{duration:0});if(motion.semantic)viewportChanged(complete?destination:next);if(zoomMotion!==motion)return;if(complete){zoomFrame=void 0;zoomMotion=void 0;motion.done?.()}else zoomFrame=requestAnimationFrame(animateZoom)}async function readingViewport(origin){const version=++navigationVersion;stopZoomMotion();if(gestureTarget)gestureTarget.consumed=true;transitioning=true;canvas.value?.focus({preventScroll:true});if(origin&&flow&&canvas.value){const width=Math.min(960,Math.max(280,canvas.value.clientWidth-48));const zoom=Math.min(1,origin.width/width);flow.setViewport({x:origin.x+origin.width/2-width*zoom/2,y:origin.y+origin.height/2-160*zoom,zoom},{duration:0})}await nextTick();await new Promise(requestAnimationFrame);if(version!==navigationVersion||!flow||!canvas.value)return;const node=unref(flow?.getNodes)?.find(node=>node.type===`subsystem-detail`);const width=node?.dimensions.width||Math.min(960,Math.max(280,canvas.value.clientWidth-48));const height=Math.min(node?.dimensions.height||canvas.value.clientHeight-48,canvas.value.clientHeight-48);const destination={x:(canvas.value.clientWidth-width)/2,y:24,zoom:1};if(origin){const zoom=Math.min(1,origin.width/width);await flow.setViewport({x:origin.x+origin.width/2-width*zoom/2,y:origin.y+origin.height/2-height*zoom/2,zoom},{duration:0})}moveCamera(destination,{done:()=>{transitioning=false}})}async function closeDetail(event){const external=outline.value?.owner.opaque;const currentViewport=flow?.getViewport();const detailWidth=unref(flow?.getNodes)?.find(node=>node.type===`subsystem-detail`)?.dimensions.width||Math.min(960,Math.max(280,canvas.value.clientWidth-48));const detailHeight=unref(flow?.getNodes)?.find(node=>node.type===`subsystem-detail`)?.dimensions.height||canvas.value.clientHeight;const outAnchor=zoomAnchor||{x:canvas.value.clientWidth/2,y:canvas.value.clientHeight/2};stopZoomMotion();++navigationVersion;if(event?.type===`click`||event?.type===`keydown`)gestureTarget=void 0;else if(gestureTarget)gestureTarget.consumed=true;transitioning=true;expandedSubsystemId.value=``;fileRequest.value=null;retainedFileRequest.value=null;retainedOutline.value=null;programId.value=``;retainedProgramId.value=``;viewHistory.value=[];zoomTarget=void 0;await nextTick();if(!external&&parentViewport&&parentNode&&currentViewport){const zoom=Math.min(3,detailWidth*currentViewport.zoom/parseFloat(parentNode.style.width));const centreX=currentViewport.x+detailWidth*currentViewport.zoom/2;const centreY=currentViewport.y+Math.min(detailHeight,canvas.value.clientHeight)*currentViewport.zoom/2;const matched={zoom,x:centreX-(parentNode.position.x+parseFloat(parentNode.style.width)/2)*zoom,y:centreY-(parentNode.position.y+parseFloat(parentNode.style.height)/2)*zoom};await flow?.setViewport(matched,{duration:0});moveCamera({zoom:parentViewport.zoom,x:outAnchor.x-(outAnchor.x-matched.x)/zoom*parentViewport.zoom,y:outAnchor.y-(outAnchor.y-matched.y)/zoom*parentViewport.zoom},{done:()=>{transitioning=false}});return}transitioning=false}function rememberView(){viewHistory.value=[...viewHistory.value,{request:fileRequest.value&&{...fileRequest.value},programId:programId.value,ownerId:expandedSubsystemId.value,parentNode,parentViewport,fileParentViewport,viewport:{...flow.getViewport()}}]}async function openProgram(id){const program=architecture.value?.program?.modules?.find(program=>program.id===id);if(!program||programId.value===id)return;rememberView();const ownerNode=nodes.value.find(node=>node.id===program.subsystemId);if(ownerNode&&program.subsystemId!==expandedSubsystemId.value){parentNode={position:{...ownerNode.position},style:{...ownerNode.style}};expandedSubsystemId.value=program.subsystemId}programId.value=id;retainedProgramId.value=id;fileRequest.value=null;await readingViewport()}async function openFile(request){const program=architecture.value?.program?.modules?.find(program=>program.path===request.path);if(program)return openProgram(program.id);if(request.path===`genesis/subsystems.md`||request.path.startsWith(`genesis/program/`))return;if(fileRequest.value?.path===request.path&&!request.symbolId&&!request.symbol&&!request.presentation)return;rememberView();programId.value=``;const file=architecture.value?.files?.find(file=>file.path===request.path);const ownerNode=nodes.value.find(node=>node.id===file?.subsystemId);if(ownerNode&&file.subsystemId!==expandedSubsystemId.value){parentNode={position:{...ownerNode.position},style:{...ownerNode.style}};expandedSubsystemId.value=file.subsystemId}fileParentViewport=gestureDirection===true&&zoomTarget?.kind===`file`?gestureTarget.viewport:{...zoomMotion&&!zoomMotion.semantic?zoomMotion.viewport:flow.getViewport()};fileRequest.value={path:request.path,symbolId:request.symbolId,symbol:request.symbol,line:request.line,presentation:request.presentation||`interface`,symbolPresentation:request.symbolPresentation};retainedFileRequest.value=fileRequest.value;zoomTarget=void 0;await readingViewport()}function updateFileLocation(location){if(!fileRequest.value||location.path!==fileRequest.value.path)return;if([`symbolId`,`presentation`,`symbolPresentation`].every(key=>fileRequest.value[key]===location[key]))return;fileRequest.value={...fileRequest.value,...location};retainedFileRequest.value=fileRequest.value}async function goBack(event){const previous=viewHistory.value.at(-1);if(!previous)return closeDetail(event);++navigationVersion;stopZoomMotion();gestureTarget=void 0;transitioning=false;viewHistory.value=viewHistory.value.slice(0,-1);expandedSubsystemId.value=previous.request?architecture.value.files.find(file=>file.path===previous.request.path)?.subsystemId||previous.ownerId:architecture.value.program?.modules?.find(program=>program.id===previous.programId)?.subsystemId||previous.ownerId;parentNode=previous.parentNode;parentViewport=previous.parentViewport;fileParentViewport=previous.fileParentViewport;fileRequest.value=previous.request;if(previous.request)retainedFileRequest.value=previous.request;programId.value=previous.programId||``;if(previous.programId)retainedProgramId.value=previous.programId;await nextTick();await flow.setViewport(previous.viewport,{duration:0})}async function showSubsystem(){++navigationVersion;stopZoomMotion();if(gestureTarget)gestureTarget.consumed=true;transitioning=true;canvas.value?.focus({preventScroll:true});fileRequest.value=null;programId.value=``;viewHistory.value=[];await nextTick();moveCamera(fileParentViewport||{x:24,y:24,zoom:1},{done:()=>{transitioning=false}})}const coverage=computed(()=>architecture.value?.ui?.capabilities?.pages);const nodes=shallowRef([]);const edges=shallowRef([]);const showCalls=ref(false);const selectedPageId=ref(``);const visibleEdges=computed(()=>(focusOwner.value&&!focusOwner.value.opaque?[]:edges.value).filter(edge=>edge.type!==`controller`||showCalls.value||edge.source===selectedPageId.value).map(edge=>expandedSubsystemId.value&&edge.type!==`controller`?{...edge,style:{...edge.style,opacity:edge.source===expandedSubsystemId.value||edge.target===expandedSubsystemId.value?.4:.05}}:edge));function toggleCalls(){showCalls.value=!showCalls.value;selectedPageId.value=``}function selectNode({node,event}){if(node.type===`page`){selectedPageId.value=node.id;showCalls.value=false}else if(node.type===`subsystem`&&!node.data.opaque&&!dragging&&Date.now()-lastDragEnded>250&&!event?.target?.closest(`.engine-subsystem__grip`)){gestureTarget=void 0;enterSubsystem(node,flow.getViewport())}}function clearSelection(){selectedPageId.value=``}function rearrangeSubsystem({node}){dragging=false;lastDragEnded=Date.now();if(!node.data.arrangeable)return;layoutPositions.value={...layoutPositions.value,[node.id]:{...node.position}}}function moveSubsystem(id,direction){const node=nodes.value.find(entry=>entry.id===id);if(!node)return;rearrangeSubsystem({node:{...node,position:{...node.position,x:node.position.x+direction*32}}})}function captureZoomAnchor(event){const rect=canvas.value.getBoundingClientRect();zoomAnchor={x:event.clientX-rect.left,y:event.clientY-rect.top};const element=event.target?.closest?.(`[data-zoom-kind]`);zoomTarget=element?{kind:element.dataset.zoomKind,path:element.dataset.filePath,element}:void 0}function zoomGesture(event,factor,inward){const current=flow.getViewport();if(!gestureTarget||gestureDirection!==inward){captureZoomAnchor(event);const hovered=event.target.closest(`.vue-flow__node`);const node=nodes.value.find(node=>node.id===hovered?.dataset.id);const element=inward?zoomTarget?.element:void 0;const rect=element?.getBoundingClientRect();const canvasRect=canvas.value.getBoundingClientRect();const centred=inward&&(element||node&&node.type!==`subsystem-detail`&&node.type!==`annotation`);gestureTarget={point:rect?{x:(rect.x-canvasRect.x+rect.width/2-current.x)/current.zoom,y:(rect.y-canvasRect.y+rect.height/2-current.y)/current.zoom}:centred?{x:node.position.x+parseFloat(node.style.width)/2,y:node.position.y+parseFloat(node.style.height)/2}:{x:(zoomAnchor.x-current.x)/current.zoom,y:(zoomAnchor.y-current.y)/current.zoom},anchor:centred?{x:canvas.value.clientWidth/2,y:canvas.value.clientHeight/2}:{...zoomAnchor},detail:zoomTarget,nodeId:node?.id,viewport:{...current}};gestureDirection=inward}clearTimeout(gestureTimer);gestureTimer=setTimeout(finishGesture,220);if(gestureTarget.consumed)return;if(transitioning){++navigationVersion;transitioning=false;stopZoomMotion()}const zoom=Math.max(.08,Math.min(3,(zoomMotion?.viewport.zoom||current.zoom)*factor));zoomTarget=gestureTarget.detail;zoomAnchor=gestureTarget.anchor;moveCamera({zoom,x:zoomAnchor.x-gestureTarget.point.x*zoom,y:zoomAnchor.y-gestureTarget.point.y*zoom},{semantic:true})}function zoomWheel(event){if(!flow||!props.active||focusOwner.value?.opaque||!event.deltaY)return;if(!event.ctrlKey&&event.target.closest(`.subsystem-zoom`))return;event.preventDefault();event.stopPropagation();const delta=event.deltaY*(event.deltaMode===1?16:event.deltaMode===2?canvas.value.clientHeight:1);zoomGesture(event,2**(-Math.max(-300,Math.min(300,delta))*(event.ctrlKey?.006:.003)),delta<0)}function startPinch(event){if(event.touches.length!==2||!flow||focusOwner.value?.opaque)return;event.preventDefault();event.stopPropagation();pinchDistance=Math.hypot(event.touches[0].clientX-event.touches[1].clientX,event.touches[0].clientY-event.touches[1].clientY);pinchTarget=event.target;gestureTarget=void 0}function movePinch(event){if(event.touches.length!==2||!pinchDistance||!props.active)return;event.preventDefault();event.stopPropagation();const distance=Math.hypot(event.touches[0].clientX-event.touches[1].clientX,event.touches[0].clientY-event.touches[1].clientY);if(!distance||distance===pinchDistance)return;const factor=distance/pinchDistance;zoomGesture({target:pinchTarget,clientX:(event.touches[0].clientX+event.touches[1].clientX)/2,clientY:(event.touches[0].clientY+event.touches[1].clientY)/2},factor,factor>1);clearTimeout(gestureTimer);pinchDistance=distance}function endPinch(event){if(event.touches.length<2){pinchDistance=void 0;pinchTarget=void 0;gestureTimer=setTimeout(finishGesture,220)}}function zoomControl(inward){if(!flow||!canvas.value)return;gestureTarget=void 0;const rect=canvas.value.getBoundingClientRect();zoomGesture({target:canvas.value,clientX:rect.x+rect.width/2,clientY:rect.y+rect.height/2},inward?1.4:1/1.4,inward)}function enterSubsystem(node,viewport){if(expandedSubsystemId.value||!canvas.value)return;parentNode={position:{...node.position},style:{...node.style}};parentViewport=gestureTarget?{...gestureTarget.viewport}:{...viewport};expandedSubsystemId.value=node.id;readingViewport({x:node.position.x*viewport.zoom+viewport.x,y:node.position.y*viewport.zoom+viewport.y,width:parseFloat(node.style.width)*viewport.zoom,height:parseFloat(node.style.height)*viewport.zoom})}function viewportChanged(viewport){if(!props.active||!canvas.value||!contentCount.value||dragging||transitioning)return;if(focusOwner.value?.opaque){zoomAnchor=void 0;return}const rect=canvas.value.getBoundingClientRect();if(outline.value&&!outline.value.owner.opaque){if(viewport.zoom<.7){if(fileRequest.value||programId.value)goBack();else closeDetail()}return}const centerX=((zoomAnchor?.x??rect.width/2)-viewport.x)/viewport.zoom;const centerY=((zoomAnchor?.y??rect.height/2)-viewport.y)/viewport.zoom;const candidate=gestureDirection===true&&nodes.value.find(node=>node.type===`subsystem`&&node.id===gestureTarget?.nodeId&&!node.data.opaque&&parseFloat(node.style.width)*viewport.zoom>=Math.min(560,rect.width*.8)&&centerX>=node.position.x&&centerX<=node.position.x+parseFloat(node.style.width)&&centerY>=node.position.y&&centerY<=node.position.y+parseFloat(node.style.height));if(candidate)enterSubsystem(candidate,viewport)}const uiIds=ref([]);const engineIds=ref([]);const externalCount=ref(0);const initialIds=ref([]);const contentCount=computed(()=>uiIds.value.length+engineIds.value.length);const entryWarning=computed(()=>architecture.value?.layoutDiagnostic||architecture.value?.entryPointDiagnostic||((architecture.value?.layout?.groups||[]).flatMap(group=>group.subsystems).some(member=>!(architecture.value?.subsystems||[]).some(owner=>!owner.opaque&&owner.root===member.root))?`Some declared architecture roots are not indexed. Re-scan project or correct their Stack paths.`:(architecture.value?.entryPoints||[]).some(entry=>entry.resolution!==`resolved`)?`Some declared entry files are not indexed. Re-scan project or correct their Stack paths.`:``));const ports=[[`top-in`,`target`,Position.Top],[`bottom-out`,`source`,Position.Bottom],[`top-out`,`source`,Position.Top],[`bottom-in`,`target`,Position.Bottom],[`left-in`,`target`,Position.Left],[`left-out`,`source`,Position.Left],[`right-in`,`target`,Position.Right],[`right-out`,`source`,Position.Right]].map(([id,type,position])=>({id,type,position}));function controllerPath(edge){const{sourceX,sourceY,targetX,targetY}=edge;return`M ${sourceX},${sourceY} L ${targetX},${targetY}`}let flow;const flowReady=ref(false);let fitPending=true;async function fit(ids){if(!flow||!props.active||!contentCount.value)return;stopZoomMotion();++navigationVersion;gestureTarget=void 0;transitioning=true;if(focusOwner.value&&!focusOwner.value.opaque){expandedSubsystemId.value=``;fileRequest.value=null;retainedFileRequest.value=null;retainedOutline.value=null;programId.value=``;retainedProgramId.value=``;viewHistory.value=[];ids=void 0}await nextTick();const measured=unref(flow.getNodes);if(measured.length!==nodes.value.length||measured.some(node=>!node.dimensions.width||!node.dimensions.height)){transitioning=false;return}await flow.fitView({nodes:Array.isArray(ids)?ids:void 0,padding:.12,maxZoom:1,duration:0});transitioning=false;fitPending=false}async function initialize(instance){flow=instance;await fit(initialIds.value);flowReady.value=true}function fitIfPending(){if(fitPending)fit(initialIds.value)}const overview=computed(()=>architectureOverview(toRaw(architecture.value)));watch([overview,expandedSubsystemId,layoutPositions],([diagram,expanded,positions],previous)=>{if(architecture.value&&expanded){const currentOwner=fileRequest.value?architecture.value.files.find(file=>file.path===fileRequest.value.path)?.subsystemId:currentProgram.value?.subsystemId;if(currentOwner&&currentOwner!==expanded)expandedSubsystemId.value=currentOwner;else if(!focusOwner.value){expandedSubsystemId.value=``;fileRequest.value=null;programId.value=``;viewHistory.value=[]}}const arranged=diagram.nodes.map(node=>({...node,class:node.class||``,position:{...node.position}}));for(const node of arranged)if(node.data.arrangeable&&positions[node.id]){const[minimum,maximum]=node.extent;node.position={x:Math.max(minimum[0],Math.min(maximum[0]-parseFloat(node.style.width),positions[node.id].x)),y:Math.max(minimum[1],Math.min(maximum[1]-parseFloat(node.style.height),positions[node.id].y))}}if(!(architecture.value?.ui?.pages||[]).some(page=>page.id===selectedPageId.value))selectedPageId.value=``;const focused=focusOwner.value&&!focusOwner.value.opaque;nodes.value=focused?[...arranged.map(node=>({...node,class:`architecture-map-node--hidden`})),{id:`visual:subsystem-detail`,type:`subsystem-detail`,position:{x:0,y:0},draggable:false,style:{width:`clamp(280px, calc(100cqw - 48px), 960px)`},data:{outline:outline.value,owner:focusOwner.value}}]:arranged;edges.value=diagram.edges;uiIds.value=diagram.uiIds;engineIds.value=diagram.engineIds;externalCount.value=diagram.externalCount;initialIds.value=diagram.initialIds;if(!previous||diagram!==previous[0]){fitPending=true;if(!expandedSubsystemId.value)fit(initialIds.value)}},{immediate:true});watch([outline,fileRequest,programId],([detail,file,program])=>{flow?.updateNodeData(`visual:subsystem-detail`,{outline:detail});if(detail&&detail.owner.id===expandedSubsystemId.value&&!file&&!program)retainedOutline.value=detail});watch(()=>props.sessionId,()=>{++navigationVersion;stopZoomMotion();clearTimeout(gestureTimer);gestureTarget=void 0;transitioning=false;expandedSubsystemId.value=``;fileRequest.value=null;retainedFileRequest.value=null;retainedOutline.value=null;programId.value=``;retainedProgramId.value=``;viewHistory.value=[];selectedPageId.value=``;showCalls.value=false;layoutPositions.value={};zoomAnchor=void 0;zoomTarget=void 0;parentViewport=void 0;fileParentViewport=void 0});let handledProgramRequest;watch([()=>props.openProgramRequest,architecture,()=>props.active,flowReady],([request,snapshot,active,ready])=>{if(!ready||!active||!request||handledProgramRequest===request||!snapshot?.program?.modules.some(program=>program.id===request.id))return;handledProgramRequest=request;openProgram(request.id)});watch(architecture,snapshot=>{if(programId.value&&!snapshot?.program?.modules.some(program=>program.id===programId.value))showSubsystem()});watch(()=>props.active,active=>{if(!active){++navigationVersion;stopZoomMotion();clearTimeout(gestureTimer);gestureTarget=void 0;transitioning=false}else if(fitPending)fit(initialIds.value)});watch(canvas,(element,previous,onCleanup)=>{if(!element)return;const pageEscape=event=>{if(event.key!==`Escape`||event.defaultPrevented||event.target!==document.body||!props.active||!expandedSubsystemId.value)return;event.preventDefault();goBack(event)};document.addEventListener(`keydown`,pageEscape);let width=element.clientWidth;let height=element.clientHeight;const observer=new ResizeObserver(()=>{const nextWidth=element.clientWidth;const nextHeight=element.clientHeight;if(!nextWidth||!nextHeight||width===nextWidth&&height===nextHeight)return;const oldWidth=width;width=nextWidth;height=nextHeight;if(!props.active||!flow||!expandedSubsystemId.value||focusOwner.value?.opaque)return;const sheetWidth=value=>Math.min(960,Math.max(280,value-48));const adapt=viewport=>viewport&&{...viewport,x:viewport.x+(width-oldWidth)/2+(sheetWidth(oldWidth)-sheetWidth(width))*viewport.zoom/2};stopZoomMotion();++navigationVersion;clearTimeout(gestureTimer);gestureTarget=void 0;zoomTarget=void 0;zoomAnchor=void 0;transitioning=false;fileParentViewport=adapt(fileParentViewport);viewHistory.value=viewHistory.value.map(entry=>({...entry,viewport:adapt(entry.viewport),fileParentViewport:adapt(entry.fileParentViewport)}));flow.setViewport(adapt(flow.getViewport()),{duration:0})});observer.observe(element);onCleanup(()=>{observer.disconnect();document.removeEventListener(`keydown`,pageEscape)})},{flush:`post`});onBeforeUnmount(()=>{stopZoomMotion();clearTimeout(gestureTimer)});return(_ctx,_cache)=>{return openBlock(),createElementBlock(`section`,_hoisted_1,[createBaseVNode(`header`,_hoisted_2,[renderSlot(_ctx.$slots,`navigation`,{},void 0,true),createBaseVNode(`div`,_hoisted_3,[_cache[19]||(_cache[19]=createBaseVNode(`h1`,null,`Architecture`,-1)),unref(refreshProgress)?(openBlock(),createElementBlock(`p`,_hoisted_4,toDisplayString(unref(refreshProgress).message)+` · `+toDisplayString(unref(refreshProgress).elapsedSeconds)+`s`,1)):(openBlock(),createElementBlock(`p`,_hoisted_5,[createTextVNode(toDisplayString(uiIds.value.length)+` pages / screens / scenes · `+toDisplayString(engineIds.value.length-(externalCount.value?1:0))+` subsystems`,1),externalCount.value?(openBlock(),createElementBlock(`span`,_hoisted_6,` · `+toDisplayString(externalCount.value)+` external packages`,1)):createCommentVNode(``,true),_cache[18]||(_cache[18]=createTextVNode()),coverage.value&&coverage.value!==`complete`?(openBlock(),createElementBlock(`span`,_hoisted_7,`· `+toDisplayString(coverage.value)+` page discovery`,1)):createCommentVNode(``,true),unref(architecture)?.ui?.capabilities?.operationUses===`unconfigured`?(openBlock(),createElementBlock(`span`,_hoisted_8,` · UI calls not analysed`)):createCommentVNode(``,true)]))]),createBaseVNode(`div`,_hoisted_9,[unref(refreshing)?(openBlock(),createBlock(VBtn,{key:0,size:`small`,variant:`text`,"min-height":`44`,onClick:unref(cancelRefresh)},{default:withCtx(()=>[..._cache[20]||(_cache[20]=[createTextVNode(`Cancel analysis`,-1)])]),_:1},8,[`onClick`])):createCommentVNode(``,true),createVNode(VBtn,{size:`small`,variant:`text`,disabled:!contentCount.value,onClick:_cache[0]||(_cache[0]=$event=>fit())},{default:withCtx(()=>[..._cache[21]||(_cache[21]=[createTextVNode(`Fit`,-1)])]),_:1},8,[`disabled`]),createVNode(VMenu,null,{activator:withCtx(({props:menuProps})=>[createVNode(VBtn,mergeProps(menuProps,{size:`small`,variant:`text`,"aria-label":`Architecture options`,title:`Architecture options`,"min-width":`36`}),{default:withCtx(()=>[..._cache[22]||(_cache[22]=[createTextVNode(`⋯`,-1)])]),_:1},16)]),default:withCtx(()=>[createVNode(VList,{density:`compact`},{default:withCtx(()=>[createVNode(VListItem,{title:`Fit UI`,disabled:!uiIds.value.length,onClick:_cache[1]||(_cache[1]=$event=>fit(uiIds.value))},null,8,[`disabled`]),createVNode(VListItem,{title:`Fit Engine`,disabled:!engineIds.value.length,onClick:_cache[2]||(_cache[2]=$event=>fit(engineIds.value))},null,8,[`disabled`]),createVNode(VListItem,{title:showCalls.value?`Hide UI calls`:`Show all UI calls`,disabled:!edges.value.some(edge=>edge.type===`controller`),onClick:toggleCalls},null,8,[`title`,`disabled`]),createVNode(VListItem,{title:`Zoom in`,disabled:!contentCount.value,onClick:_cache[3]||(_cache[3]=$event=>zoomControl(true))},null,8,[`disabled`]),createVNode(VListItem,{title:`Zoom out`,disabled:!contentCount.value,onClick:_cache[4]||(_cache[4]=$event=>zoomControl(false))},null,8,[`disabled`]),createVNode(VListItem,{title:`Reset arrangement`,disabled:!Object.keys(layoutPositions.value).length,onClick:_cache[5]||(_cache[5]=$event=>layoutPositions.value={})},null,8,[`disabled`]),createVNode(VDivider),createVNode(VListItem,{title:`Reload architecture`,disabled:unref(loading),onClick:unref(reload)},null,8,[`disabled`,`onClick`]),unref(refreshing)?(openBlock(),createBlock(VListItem,{key:0,title:`Cancel analysis`,onClick:unref(cancelRefresh)},null,8,[`onClick`])):(openBlock(),createBlock(VListItem,{key:1,title:`Re-scan project`,disabled:unref(loading),onClick:unref(refresh)},null,8,[`disabled`,`onClick`]))]),_:1})]),_:1})])]),createBaseVNode(`div`,{ref_key:`canvas`,ref:canvas,class:`ui-storyboard__canvas`,tabindex:`-1`,onKeydownCapture:_cache[17]||(_cache[17]=withKeys($event=>expandedSubsystemId.value&&($event.preventDefault(),$event.stopPropagation(),goBack($event)),[`esc`])),onWheelCapture:zoomWheel,onTouchstartCapture:startPinch,onTouchmoveCapture:movePinch,onTouchendCapture:endPinch,onTouchcancelCapture:endPinch},[unref(error)&&unref(error)!==dismissedError.value?(openBlock(),createBlock(VAlert,{key:0,class:`ui-storyboard__error`,type:`error`,variant:`tonal`,closable:``,"onClick:close":_cache[6]||(_cache[6]=$event=>dismissedError.value=unref(error))},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(error)),1),unref(refreshOutput)?(openBlock(),createElementBlock(`details`,_hoisted_10,[_cache[23]||(_cache[23]=createBaseVNode(`summary`,null,`Command output`,-1)),createBaseVNode(`pre`,_hoisted_11,toDisplayString(unref(refreshOutput)),1)])):createCommentVNode(``,true)]),_:1})):createCommentVNode(``,true),!unref(refreshing)&&unref(architecture)?.diagnostics?.some(item=>item.code===`ARCHITECTURE_UI_STALE`)?(openBlock(),createBlock(VAlert,{key:1,class:`ui-storyboard__error`,type:`info`,variant:`tonal`},{default:withCtx(()=>[_cache[25]||(_cache[25]=createTextVNode(`UI map needs refresh. `,-1)),createVNode(VBtn,{size:`small`,variant:`text`,loading:unref(refreshing),onClick:unref(refresh)},{default:withCtx(()=>[..._cache[24]||(_cache[24]=[createTextVNode(`Re-scan project`,-1)])]),_:1},8,[`loading`,`onClick`])]),_:1})):createCommentVNode(``,true),createVNode(unref(_sfc_main$1$1),{nodes:nodes.value,"onUpdate:nodes":_cache[13]||(_cache[13]=$event=>nodes.value=$event),edges:visibleEdges.value,"min-zoom":.08,"max-zoom":3,"zoom-on-double-click":false,"zoom-on-scroll":false,"zoom-on-pinch":false,"nodes-draggable":false,"nodes-connectable":false,"edges-updatable":false,"elevate-nodes-on-select":false,"default-edge-options":{markerEnd:{type:unref(MarkerType).ArrowClosed,width:16,height:16,color:`#7895a4`}},onInit:initialize,onNodesInitialized:fitIfPending,onNodeClick:selectNode,onNodeDragStart:_cache[14]||(_cache[14]=$event=>isRef(dragging)?dragging.value=true:dragging=true),onNodeDragStop:rearrangeSubsystem,onViewportChange:_cache[15]||(_cache[15]=$event=>compact.value=$event.zoom<.5),onViewportChangeEnd:viewportChanged,onPaneClick:clearSelection},{"node-page":withCtx(({data,selected})=>[createBaseVNode(`article`,{class:normalizeClass([`storyboard-page`,{"storyboard-page--compact":compact.value,"storyboard-page--root":!data.parentId,"storyboard-page--selected":selected,"architecture-context":expandedSubsystemId.value&&data.id!==selectedPageId.value}]),title:[data.title,...data.identities,data.file].filter(Boolean).join(`
3
3
  `)},[data.parentId?(openBlock(),createBlock(unref(_sfc_main$f),{key:0,id:`parent`,type:`target`,position:unref(Position).Top},null,8,[`position`])):createCommentVNode(``,true),createBaseVNode(`div`,_hoisted_13,[createBaseVNode(`span`,null,toDisplayString(data.kind),1),createBaseVNode(`span`,null,toDisplayString(data.surface),1)]),createBaseVNode(`h2`,null,toDisplayString(data.title),1),data.identities.length?(openBlock(),createElementBlock(`div`,_hoisted_14,[(openBlock(true),createElementBlock(Fragment,null,renderList(data.identities,identity=>{return openBlock(),createElementBlock(`span`,{key:identity},toDisplayString(identity),1)}),128))])):(openBlock(),createElementBlock(`p`,_hoisted_15,`No navigation identity recorded`)),data.unresolvedCalls?(openBlock(),createElementBlock(`span`,_hoisted_16,toDisplayString(data.unresolvedCalls)+` unresolved calls`,1)):createCommentVNode(``,true),data.callCount?(openBlock(),createBlock(unref(_sfc_main$f),{key:4,id:`engine-out`,type:`source`,position:unref(Position).Right},null,8,[`position`])):createCommentVNode(``,true),data.childCount?(openBlock(),createBlock(unref(_sfc_main$f),{key:5,id:`children`,type:`source`,position:unref(Position).Bottom},null,8,[`position`])):createCommentVNode(``,true)],10,_hoisted_12)]),"node-external-dependencies":withCtx(({data})=>[createBaseVNode(`aside`,_hoisted_17,[createBaseVNode(`header`,null,[_cache[26]||(_cache[26]=createBaseVNode(`h2`,null,`External dependencies`,-1)),createBaseVNode(`p`,null,toDisplayString(data.packages.length)+` packages · Available throughout the project`,1)]),createBaseVNode(`ul`,null,[(openBlock(true),createElementBlock(Fragment,null,renderList(data.packages,pkg=>{return openBlock(),createElementBlock(`li`,{key:pkg.id},[createBaseVNode(`button`,{type:`button`,class:`nodrag nopan`,"data-package-id":pkg.id,"aria-label":`View ${pkg.title} public interface`,title:pkg.title,onClick:withModifiers($event=>expandedSubsystemId.value=pkg.id,[`stop`])},toDisplayString(pkg.title),9,_hoisted_18)])}),128))])])]),"node-subsystem-detail":withCtx(({data})=>[createBaseVNode(`div`,_hoisted_19,[createBaseVNode(`article`,{class:`subsystem-zoom nodrag nopan`,"aria-label":`Zoomed subsystem`,onWheel:_cache[10]||(_cache[10]=$event=>!$event.ctrlKey&&$event.stopPropagation()),onTouchmove:_cache[11]||(_cache[11]=$event=>$event.touches.length!==2&&$event.stopPropagation())},[createBaseVNode(`nav`,_hoisted_20,[createBaseVNode(`button`,{type:`button`,class:`subsystem-zoom__back nodrag nopan`,"aria-label":`Back to previous view`,onClick:goBack},`← Back`),createBaseVNode(`button`,{type:`button`,class:`nodrag nopan`,onClick:closeDetail},`Engine`),_cache[30]||(_cache[30]=createBaseVNode(`span`,null,`›`,-1)),fileRequest.value||programId.value?(openBlock(),createElementBlock(`button`,{key:0,type:`button`,class:`nodrag nopan`,onClick:showSubsystem},toDisplayString(data.owner.title),1)):(openBlock(),createElementBlock(`strong`,_hoisted_21,toDisplayString(data.owner.title),1)),currentProgram.value?(openBlock(),createElementBlock(Fragment,{key:2},[_cache[27]||(_cache[27]=createBaseVNode(`span`,null,`›`,-1)),createBaseVNode(`strong`,null,toDisplayString(currentProgram.value.title),1)],64)):fileRequest.value&&parentProgram.value?(openBlock(),createElementBlock(Fragment,{key:3},[_cache[28]||(_cache[28]=createBaseVNode(`span`,null,`›`,-1)),createBaseVNode(`button`,{type:`button`,onClick:_cache[7]||(_cache[7]=$event=>openProgram(parentProgram.value.id))},toDisplayString(parentProgram.value.title),1)],64)):createCommentVNode(``,true),fileRequest.value?(openBlock(),createElementBlock(Fragment,{key:4},[_cache[29]||(_cache[29]=createBaseVNode(`span`,null,`›`,-1)),createBaseVNode(`strong`,null,toDisplayString(fileRequest.value.path.split(`/`).pop()),1)],64)):createCommentVNode(``,true),createBaseVNode(`button`,{type:`button`,class:`subsystem-zoom__close`,"aria-label":fileRequest.value||programId.value?`Back to previous view`:`Back to Engine`,title:`Close this view (Esc)`,onClick:_cache[8]||(_cache[8]=$event=>goBack($event))},`×`,8,_hoisted_22)]),_cache[35]||(_cache[35]=createBaseVNode(`p`,{class:`subsystem-zoom__navigation-hint`},`Scroll to read · Pinch to zoom · Esc / × to go back`,-1)),retainedFileRequest.value?withDirectives((openBlock(),createElementBlock(`div`,_hoisted_23,[renderSlot(_ctx.$slots,`file-interface`,{request:retainedFileRequest.value,active:!!fileRequest.value,architecture:unref(architecture),openFile,updateLocation:updateFileLocation,openProgram},()=>[createBaseVNode(`button`,{type:`button`,onClick:_cache[9]||(_cache[9]=$event=>emit(`inspect-file`,retainedFileRequest.value))},`Open `+toDisplayString(retainedFileRequest.value.path)+` interface`,1)],true)],512)),[[vShow,fileRequest.value]]):createCommentVNode(``,true),retainedProgram.value?withDirectives((openBlock(),createBlock(Vibe64ProgramInspector_default,{key:retainedProgram.value.id,active:props.active&&!!programId.value,program:retainedProgram.value,architecture:unref(architecture),owner:unref(architecture).subsystems.find(owner=>owner.id===retainedProgram.value.subsystemId),onInspect:openFile},{text:withCtx(context=>[renderSlot(_ctx.$slots,`text`,mergeProps(context,{openSource:openFile}),()=>[createTextVNode(toDisplayString(context.text),1)],true)]),_:3},8,[`active`,`program`,`architecture`,`owner`])),[[vShow,programId.value]]):createCommentVNode(``,true),withDirectives(createBaseVNode(`div`,_hoisted_24,[retainedOutline.value?.owner.id!==data.owner.id?(openBlock(),createElementBlock(`div`,_hoisted_25,[createBaseVNode(`h2`,null,toDisplayString(data.owner.title),1),createBaseVNode(`p`,null,toDisplayString(data.owner.root),1),_cache[31]||(_cache[31]=createBaseVNode(`div`,{class:`subsystem-zoom__skeleton`},null,-1)),_cache[32]||(_cache[32]=createBaseVNode(`div`,{class:`subsystem-zoom__skeleton`},null,-1)),_cache[33]||(_cache[33]=createBaseVNode(`div`,{class:`subsystem-zoom__skeleton`},null,-1)),_cache[34]||(_cache[34]=createBaseVNode(`p`,null,`Preparing interface and files…`,-1))])):createCommentVNode(``,true),retainedOutline.value?withDirectives((openBlock(),createBlock(Vibe64SubsystemInspector_default,{key:1,embedded:``,outline:retainedOutline.value,onInspect:openFile,onOpenProgram:openProgram},{text:withCtx(context=>[renderSlot(_ctx.$slots,`text`,mergeProps(context,{openSource:openFile}),()=>[createTextVNode(toDisplayString(context.text),1)],true)]),_:3},8,[`outline`])),[[vShow,retainedOutline.value.owner.id===data.owner.id]]):createCommentVNode(``,true)],512),[[vShow,!fileRequest.value&&!programId.value]])],32)])]),"node-subsystem":withCtx(({data,selected})=>[createBaseVNode(`article`,{class:normalizeClass([`engine-subsystem`,{"engine-subsystem--compact":compact.value,"engine-subsystem--library":data.library,"engine-subsystem--support":data.placementKind===`support`,"engine-subsystem--entry":data.entryFiles.length,"engine-subsystem--cycle":data.cycleLabel,"engine-subsystem--selected":selected,"engine-subsystem--expanded":data.expanded,"architecture-context":expandedSubsystemId.value&&!data.expanded}]),title:`${data.root}\n${data.description||`Description not recorded.`}${data.sourceLines!=null?`
4
4
  `+data.sourceLines.toLocaleString()+` measured source lines`:``}${data.cycleLabel?`
@@ -1 +1 @@
1
- import{D as createVNode,E as createTextVNode,On as unref,_ as createBaseVNode,b as createElementBlock,bt as renderList,mt as openBlock,o as Fragment,qt as withCtx,tr as toDisplayString,v as createBlock,vn as ref,y as createCommentVNode}from"./runtime-core.esm-bundler-DGXg_mpN.js";import{_ as VIcon}from"./VAvatar-H2hyOWlB.js";import{f as mdiAlertCircleOutline}from"./mdi-X9prU-DG.js";import{t as VBtn}from"./VBtn-Sj5jAuOx.js";import{i as VExpansionPanelText,n as VExpansionPanel,r as VExpansionPanelTitle,t as VExpansionPanels}from"./VExpansionPanels-BgimJBV2.js";import{t as _plugin_vue_export_helper_default}from"./_plugin-vue_export-helper-DNW4j-dv.js";import{t as useUiFeedback}from"./useUiFeedback-B51xtCAK.js";import{t as writeClipboardText}from"./clipboard-CZs9aH3L.js";import{n as useVibe64ProjectSlug}from"./useVibe64ProjectScope-D7b8n1gx.js";import{i as vibe64SessionDisplayTitle}from"./vibe64SessionViewModel-B0cCumM8.js";var _hoisted_1={class:`studio-unavailable-sessions__entries`};var _hoisted_2={class:`text-body-medium mb-1`};var _sfc_main={__name:`Vibe64UnavailableSessions`,props:{sessions:{type:Array,default:()=>[]},loading:{type:Boolean,default:false}},emits:[`recheck`],setup(__props){const expanded=ref(0);const projectSlug=useVibe64ProjectSlug();const feedback=useUiFeedback({source:`vibe64.sessions.recovery`});async function copyDetails(session){try{await writeClipboardText(JSON.stringify({project:projectSlug.value,sessionId:session.sessionId,sessionName:session.sessionName,code:session.unavailable.code,message:session.unavailable.message,sessionRoot:session.sessionRoot,archivePath:session.archivePath,sourcePath:session.sourcePath},null,2));feedback.success(`Recovery details copied.`)}catch(error){feedback.error(error,`Recovery details could not be copied.`)}}return(_ctx,_cache)=>{return __props.sessions.length?(openBlock(),createBlock(VExpansionPanels,{key:0,modelValue:expanded.value,"onUpdate:modelValue":_cache[1]||(_cache[1]=$event=>expanded.value=$event),variant:`accordion`,class:`studio-unavailable-sessions`},{default:withCtx(()=>[createVNode(VExpansionPanel,null,{default:withCtx(()=>[createVNode(VExpansionPanelTitle,null,{default:withCtx(()=>[createVNode(VIcon,{icon:unref(mdiAlertCircleOutline),color:`warning`,class:`mr-2`},null,8,[`icon`]),createTextVNode(` `+toDisplayString(__props.sessions.length===1?`1 session needs attention`:`${__props.sessions.length} sessions need attention`),1)]),_:1}),createVNode(VExpansionPanelText,null,{default:withCtx(()=>[createBaseVNode(`div`,_hoisted_1,[(openBlock(true),createElementBlock(Fragment,null,renderList(__props.sessions,session=>{return openBlock(),createElementBlock(`div`,{key:session.sessionId,class:`mb-3`},[createBaseVNode(`strong`,null,toDisplayString(unref(vibe64SessionDisplayTitle)(session)),1),createBaseVNode(`p`,_hoisted_2,toDisplayString(session.unavailable.message),1),createVNode(VBtn,{variant:`text`,height:`48`,onClick:$event=>copyDetails(session)},{default:withCtx(()=>[..._cache[2]||(_cache[2]=[createTextVNode(`Copy recovery details`,-1)])]),_:1},8,[`onClick`])])}),128)),createVNode(VBtn,{variant:`tonal`,height:`48`,disabled:__props.loading,onClick:_cache[0]||(_cache[0]=$event=>_ctx.$emit(`recheck`))},{default:withCtx(()=>[createTextVNode(toDisplayString(__props.loading?`Checking…`:`Check again`),1)]),_:1},8,[`disabled`])])]),_:1})]),_:1})]),_:1},8,[`modelValue`])):createCommentVNode(``,true)}}};var Vibe64UnavailableSessions_default=_plugin_vue_export_helper_default(_sfc_main,[[`__scopeId`,`data-v-379dc39a`]]);export{Vibe64UnavailableSessions_default as t};
1
+ import{D as createVNode,E as createTextVNode,On as unref,_ as createBaseVNode,b as createElementBlock,bt as renderList,mt as openBlock,o as Fragment,qt as withCtx,tr as toDisplayString,v as createBlock,vn as ref,y as createCommentVNode}from"./runtime-core.esm-bundler-DGXg_mpN.js";import{_ as VIcon}from"./VAvatar-H2hyOWlB.js";import{f as mdiAlertCircleOutline}from"./mdi-X9prU-DG.js";import{t as VBtn}from"./VBtn-Sj5jAuOx.js";import{i as VExpansionPanelText,n as VExpansionPanel,r as VExpansionPanelTitle,t as VExpansionPanels}from"./VExpansionPanels-BgimJBV2.js";import{t as _plugin_vue_export_helper_default}from"./_plugin-vue_export-helper-DNW4j-dv.js";import{t as useUiFeedback}from"./useUiFeedback-Bd3rao6E.js";import{t as writeClipboardText}from"./clipboard-CZs9aH3L.js";import{n as useVibe64ProjectSlug}from"./useVibe64ProjectScope-DXjsKKhl.js";import{i as vibe64SessionDisplayTitle}from"./vibe64SessionViewModel-B0cCumM8.js";var _hoisted_1={class:`studio-unavailable-sessions__entries`};var _hoisted_2={class:`text-body-medium mb-1`};var _sfc_main={__name:`Vibe64UnavailableSessions`,props:{sessions:{type:Array,default:()=>[]},loading:{type:Boolean,default:false}},emits:[`recheck`],setup(__props){const expanded=ref(0);const projectSlug=useVibe64ProjectSlug();const feedback=useUiFeedback({source:`vibe64.sessions.recovery`});async function copyDetails(session){try{await writeClipboardText(JSON.stringify({project:projectSlug.value,sessionId:session.sessionId,sessionName:session.sessionName,code:session.unavailable.code,message:session.unavailable.message,sessionRoot:session.sessionRoot,archivePath:session.archivePath,sourcePath:session.sourcePath},null,2));feedback.success(`Recovery details copied.`)}catch(error){feedback.error(error,`Recovery details could not be copied.`)}}return(_ctx,_cache)=>{return __props.sessions.length?(openBlock(),createBlock(VExpansionPanels,{key:0,modelValue:expanded.value,"onUpdate:modelValue":_cache[1]||(_cache[1]=$event=>expanded.value=$event),variant:`accordion`,class:`studio-unavailable-sessions`},{default:withCtx(()=>[createVNode(VExpansionPanel,null,{default:withCtx(()=>[createVNode(VExpansionPanelTitle,null,{default:withCtx(()=>[createVNode(VIcon,{icon:unref(mdiAlertCircleOutline),color:`warning`,class:`mr-2`},null,8,[`icon`]),createTextVNode(` `+toDisplayString(__props.sessions.length===1?`1 session needs attention`:`${__props.sessions.length} sessions need attention`),1)]),_:1}),createVNode(VExpansionPanelText,null,{default:withCtx(()=>[createBaseVNode(`div`,_hoisted_1,[(openBlock(true),createElementBlock(Fragment,null,renderList(__props.sessions,session=>{return openBlock(),createElementBlock(`div`,{key:session.sessionId,class:`mb-3`},[createBaseVNode(`strong`,null,toDisplayString(unref(vibe64SessionDisplayTitle)(session)),1),createBaseVNode(`p`,_hoisted_2,toDisplayString(session.unavailable.message),1),createVNode(VBtn,{variant:`text`,height:`48`,onClick:$event=>copyDetails(session)},{default:withCtx(()=>[..._cache[2]||(_cache[2]=[createTextVNode(`Copy recovery details`,-1)])]),_:1},8,[`onClick`])])}),128)),createVNode(VBtn,{variant:`tonal`,height:`48`,disabled:__props.loading,onClick:_cache[0]||(_cache[0]=$event=>_ctx.$emit(`recheck`))},{default:withCtx(()=>[createTextVNode(toDisplayString(__props.loading?`Checking…`:`Check again`),1)]),_:1},8,[`disabled`])])]),_:1})]),_:1})]),_:1},8,[`modelValue`])):createCommentVNode(``,true)}}};var Vibe64UnavailableSessions_default=_plugin_vue_export_helper_default(_sfc_main,[[`__scopeId`,`data-v-379dc39a`]]);export{Vibe64UnavailableSessions_default as t};
@@ -1 +1 @@
1
- import{D as createVNode,E as createTextVNode,On as unref,_ as createBaseVNode,b as createElementBlock,bt as renderList,g as computed,mt as openBlock,o as Fragment,qt as withCtx,tr as toDisplayString,v as createBlock,y as createCommentVNode}from"./runtime-core.esm-bundler-DGXg_mpN.js";import{_ as VIcon,p as VProgressLinear}from"./VAvatar-H2hyOWlB.js";import{S as mdiArrowLeft,_ as mdiArchiveCancelOutline,er as mdiRefresh}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{r as Vibe64ConversationLog_default,t as Vibe64SessionFiles_default}from"./Vibe64SessionFiles-Z9zxosyl.js";import{t as _plugin_vue_export_helper_default}from"./_plugin-vue_export-helper-DNW4j-dv.js";import{r as shortVibe64SessionId}from"./vibe64SessionViewModel-B0cCumM8.js";import{i as useArchivedVibe64SessionDetail,t as archiveFactRows}from"./useArchivedVibe64Sessions-DHYRnyJD.js";var _hoisted_1$1={class:`studio-archived-session-detail__header`};var _hoisted_2$1={class:`studio-archived-session-detail__title`};var _hoisted_3={class:`studio-archived-session-detail__grid`};var _hoisted_4={class:`studio-archived-session-detail__section`};var _hoisted_5={class:`studio-archived-session-detail__fact-list`};var _hoisted_6={class:`studio-archived-session-detail__section studio-archived-session-detail__conversation`};var _hoisted_7={key:0,class:`studio-archived-session-detail__muted`};var _sfc_main$1={__name:`ArchivedVibe64SessionDetail`,props:{sessionsApiPath:{type:String,default:``},projectSlug:{type:String,default:``},backTo:{default:null,type:[Object,String]},conversationLog:{default:()=>({}),type:Object},session:{default:null,type:Object}},setup(__props){const props=__props;const archiveIcon=mdiArchiveCancelOutline;const conversationTurns=computed(()=>Array.isArray(props.conversationLog?.turns)?props.conversationLog.turns:[]);const conversationError=computed(()=>String(props.conversationLog?.error||``));const conversationLoadMoreError=computed(()=>String(props.conversationLog?.loadMoreError||``));const conversationHasMoreBefore=computed(()=>Boolean(props.conversationLog?.hasMoreBefore));const conversationLoading=computed(()=>Boolean(props.conversationLog?.loading));const conversationLoadingMore=computed(()=>Boolean(props.conversationLog?.loadingMore));return(_ctx,_cache)=>{return __props.session?(openBlock(),createBlock(VSheet,{key:0,class:`studio-archived-session-detail`,rounded:`lg`,border:``},{default:withCtx(()=>[createBaseVNode(`div`,_hoisted_1$1,[createBaseVNode(`div`,_hoisted_2$1,[createVNode(VIcon,{icon:unref(archiveIcon),size:`20`},null,8,[`icon`]),createBaseVNode(`div`,null,[createBaseVNode(`h2`,null,`Archived session `+toDisplayString(unref(shortVibe64SessionId)(__props.session.sessionId)),1),_cache[0]||(_cache[0]=createBaseVNode(`p`,null,`Read-only history. Source restore is not available from archived sessions.`,-1))])]),__props.backTo?(openBlock(),createBlock(VBtn,{key:0,class:`studio-archived-session-detail__back`,"prepend-icon":unref(mdiArrowLeft),size:`small`,to:__props.backTo,variant:`tonal`},{default:withCtx(()=>[..._cache[1]||(_cache[1]=[createTextVNode(` Back to sessions `,-1)])]),_:1},8,[`prepend-icon`,`to`])):createCommentVNode(``,true)]),createBaseVNode(`div`,_hoisted_3,[createBaseVNode(`section`,_hoisted_4,[_cache[2]||(_cache[2]=createBaseVNode(`h3`,null,`Facts`,-1)),createBaseVNode(`dl`,_hoisted_5,[(openBlock(true),createElementBlock(Fragment,null,renderList(unref(archiveFactRows)(__props.session),fact=>{return openBlock(),createElementBlock(`div`,{key:fact.label,class:`studio-archived-session-detail__fact-row`},[createBaseVNode(`dt`,null,[createVNode(VIcon,{icon:fact.icon,size:`16`},null,8,[`icon`]),createBaseVNode(`span`,null,toDisplayString(fact.label),1)]),createBaseVNode(`dd`,null,toDisplayString(fact.value),1)])}),128))])])]),__props.sessionsApiPath?(openBlock(),createBlock(Vibe64SessionFiles_default,{key:0,archived:``,"session-id":__props.session.sessionId,"sessions-api-path":__props.sessionsApiPath,"project-slug":__props.projectSlug,style:{"height":`30rem`}},null,8,[`session-id`,`sessions-api-path`,`project-slug`])):createCommentVNode(``,true),createBaseVNode(`section`,_hoisted_6,[_cache[3]||(_cache[3]=createBaseVNode(`h3`,null,`Conversation`,-1)),createVNode(Vibe64ConversationLog_default,{"session-id":__props.session.sessionId,error:conversationError.value,"has-more-before":conversationHasMoreBefore.value,loading:conversationLoading.value,"loading-more":conversationLoadingMore.value,"load-more-error":conversationLoadMoreError.value,reloadable:true,reloading:conversationLoading.value,"source-root":__props.session.sourcePath||``,turns:conversationTurns.value,visible:true,onLoadMore:__props.conversationLog.loadMore,onReload:__props.conversationLog.reload},null,8,[`session-id`,`error`,`has-more-before`,`loading`,`loading-more`,`load-more-error`,`reloading`,`source-root`,`turns`,`onLoadMore`,`onReload`]),!conversationLoading.value&&!conversationError.value&&conversationTurns.value.length<1?(openBlock(),createElementBlock(`p`,_hoisted_7,` No conversation messages were recorded for this archive. `)):createCommentVNode(``,true)])]),_:1})):createCommentVNode(``,true)}}};var ArchivedVibe64SessionDetail_default=_plugin_vue_export_helper_default(_sfc_main$1,[[`__scopeId`,`data-v-a3ea18d1`]]);var _hoisted_1={class:`vibe64-dashboard-page vibe64-dashboard-page--archive-detail`};var _hoisted_2={class:`vibe64-dashboard-page__empty-actions`};var _sfc_main={__name:`[sessionId]`,setup(__props){const{backTo,conversationLog,error,loading,reload,session,sessionId,sessionsApiPath,projectSlug}=useArchivedVibe64SessionDetail();return(_ctx,_cache)=>{return openBlock(),createElementBlock(`section`,_hoisted_1,[_cache[3]||(_cache[3]=createBaseVNode(`header`,{class:`vibe64-dashboard-page__header`},[createBaseVNode(`h1`,{class:`text-headline-small font-weight-bold ma-0`},`Archived Session`)],-1)),unref(error)?(openBlock(),createBlock(VAlert,{key:0,type:`error`,variant:`tonal`,density:`comfortable`},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(error)),1)]),_:1})):createCommentVNode(``,true),unref(loading)&&!unref(session)?(openBlock(),createBlock(VProgressLinear,{key:1,color:`primary`,height:`6`,indeterminate:``,rounded:``})):createCommentVNode(``,true),unref(session)?(openBlock(),createBlock(ArchivedVibe64SessionDetail_default,{key:2,"back-to":unref(backTo),"conversation-log":unref(conversationLog),session:unref(session),"sessions-api-path":unref(sessionsApiPath),"project-slug":unref(projectSlug)},null,8,[`back-to`,`conversation-log`,`session`,`sessions-api-path`,`project-slug`])):!unref(loading)?(openBlock(),createBlock(VSheet,{key:3,class:`vibe64-dashboard-page__empty`,rounded:`lg`,border:``},{default:withCtx(()=>[_cache[2]||(_cache[2]=createBaseVNode(`h2`,null,`Archived session unavailable`,-1)),createBaseVNode(`p`,null,`Session `+toDisplayString(unref(sessionId)||`unknown`)+` could not be loaded.`,1),createBaseVNode(`div`,_hoisted_2,[createVNode(VBtn,{"prepend-icon":unref(mdiArrowLeft),to:unref(backTo),variant:`tonal`},{default:withCtx(()=>[..._cache[0]||(_cache[0]=[createTextVNode(` Back to sessions `,-1)])]),_:1},8,[`prepend-icon`,`to`]),createVNode(VBtn,{"prepend-icon":unref(mdiRefresh),variant:`text`,onClick:unref(reload)},{default:withCtx(()=>[..._cache[1]||(_cache[1]=[createTextVNode(` Retry `,-1)])]),_:1},8,[`prepend-icon`,`onClick`])])]),_:1})):createCommentVNode(``,true)])}}};var _sessionId__default=_plugin_vue_export_helper_default(_sfc_main,[[`__scopeId`,`data-v-9d04455c`]]);export{_sessionId__default as default};
1
+ import{D as createVNode,E as createTextVNode,On as unref,_ as createBaseVNode,b as createElementBlock,bt as renderList,g as computed,mt as openBlock,o as Fragment,qt as withCtx,tr as toDisplayString,v as createBlock,y as createCommentVNode}from"./runtime-core.esm-bundler-DGXg_mpN.js";import{_ as VIcon,p as VProgressLinear}from"./VAvatar-H2hyOWlB.js";import{S as mdiArrowLeft,_ as mdiArchiveCancelOutline,er as mdiRefresh}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{r as Vibe64ConversationLog_default,t as Vibe64SessionFiles_default}from"./Vibe64SessionFiles-Cx6J7DDN.js";import{t as _plugin_vue_export_helper_default}from"./_plugin-vue_export-helper-DNW4j-dv.js";import{r as shortVibe64SessionId}from"./vibe64SessionViewModel-B0cCumM8.js";import{i as useArchivedVibe64SessionDetail,t as archiveFactRows}from"./useArchivedVibe64Sessions-DIOpfUxD.js";var _hoisted_1$1={class:`studio-archived-session-detail__header`};var _hoisted_2$1={class:`studio-archived-session-detail__title`};var _hoisted_3={class:`studio-archived-session-detail__grid`};var _hoisted_4={class:`studio-archived-session-detail__section`};var _hoisted_5={class:`studio-archived-session-detail__fact-list`};var _hoisted_6={class:`studio-archived-session-detail__section studio-archived-session-detail__conversation`};var _hoisted_7={key:0,class:`studio-archived-session-detail__muted`};var _sfc_main$1={__name:`ArchivedVibe64SessionDetail`,props:{sessionsApiPath:{type:String,default:``},projectSlug:{type:String,default:``},backTo:{default:null,type:[Object,String]},conversationLog:{default:()=>({}),type:Object},session:{default:null,type:Object}},setup(__props){const props=__props;const archiveIcon=mdiArchiveCancelOutline;const conversationTurns=computed(()=>Array.isArray(props.conversationLog?.turns)?props.conversationLog.turns:[]);const conversationError=computed(()=>String(props.conversationLog?.error||``));const conversationLoadMoreError=computed(()=>String(props.conversationLog?.loadMoreError||``));const conversationHasMoreBefore=computed(()=>Boolean(props.conversationLog?.hasMoreBefore));const conversationLoading=computed(()=>Boolean(props.conversationLog?.loading));const conversationLoadingMore=computed(()=>Boolean(props.conversationLog?.loadingMore));return(_ctx,_cache)=>{return __props.session?(openBlock(),createBlock(VSheet,{key:0,class:`studio-archived-session-detail`,rounded:`lg`,border:``},{default:withCtx(()=>[createBaseVNode(`div`,_hoisted_1$1,[createBaseVNode(`div`,_hoisted_2$1,[createVNode(VIcon,{icon:unref(archiveIcon),size:`20`},null,8,[`icon`]),createBaseVNode(`div`,null,[createBaseVNode(`h2`,null,`Archived session `+toDisplayString(unref(shortVibe64SessionId)(__props.session.sessionId)),1),_cache[0]||(_cache[0]=createBaseVNode(`p`,null,`Read-only history. Source restore is not available from archived sessions.`,-1))])]),__props.backTo?(openBlock(),createBlock(VBtn,{key:0,class:`studio-archived-session-detail__back`,"prepend-icon":unref(mdiArrowLeft),size:`small`,to:__props.backTo,variant:`tonal`},{default:withCtx(()=>[..._cache[1]||(_cache[1]=[createTextVNode(` Back to sessions `,-1)])]),_:1},8,[`prepend-icon`,`to`])):createCommentVNode(``,true)]),createBaseVNode(`div`,_hoisted_3,[createBaseVNode(`section`,_hoisted_4,[_cache[2]||(_cache[2]=createBaseVNode(`h3`,null,`Facts`,-1)),createBaseVNode(`dl`,_hoisted_5,[(openBlock(true),createElementBlock(Fragment,null,renderList(unref(archiveFactRows)(__props.session),fact=>{return openBlock(),createElementBlock(`div`,{key:fact.label,class:`studio-archived-session-detail__fact-row`},[createBaseVNode(`dt`,null,[createVNode(VIcon,{icon:fact.icon,size:`16`},null,8,[`icon`]),createBaseVNode(`span`,null,toDisplayString(fact.label),1)]),createBaseVNode(`dd`,null,toDisplayString(fact.value),1)])}),128))])])]),__props.sessionsApiPath?(openBlock(),createBlock(Vibe64SessionFiles_default,{key:0,archived:``,"session-id":__props.session.sessionId,"sessions-api-path":__props.sessionsApiPath,"project-slug":__props.projectSlug,style:{"height":`30rem`}},null,8,[`session-id`,`sessions-api-path`,`project-slug`])):createCommentVNode(``,true),createBaseVNode(`section`,_hoisted_6,[_cache[3]||(_cache[3]=createBaseVNode(`h3`,null,`Conversation`,-1)),createVNode(Vibe64ConversationLog_default,{"session-id":__props.session.sessionId,error:conversationError.value,"has-more-before":conversationHasMoreBefore.value,loading:conversationLoading.value,"loading-more":conversationLoadingMore.value,"load-more-error":conversationLoadMoreError.value,reloadable:true,reloading:conversationLoading.value,"source-root":__props.session.sourcePath||``,turns:conversationTurns.value,visible:true,onLoadMore:__props.conversationLog.loadMore,onReload:__props.conversationLog.reload},null,8,[`session-id`,`error`,`has-more-before`,`loading`,`loading-more`,`load-more-error`,`reloading`,`source-root`,`turns`,`onLoadMore`,`onReload`]),!conversationLoading.value&&!conversationError.value&&conversationTurns.value.length<1?(openBlock(),createElementBlock(`p`,_hoisted_7,` No conversation messages were recorded for this archive. `)):createCommentVNode(``,true)])]),_:1})):createCommentVNode(``,true)}}};var ArchivedVibe64SessionDetail_default=_plugin_vue_export_helper_default(_sfc_main$1,[[`__scopeId`,`data-v-a3ea18d1`]]);var _hoisted_1={class:`vibe64-dashboard-page vibe64-dashboard-page--archive-detail`};var _hoisted_2={class:`vibe64-dashboard-page__empty-actions`};var _sfc_main={__name:`[sessionId]`,setup(__props){const{backTo,conversationLog,error,loading,reload,session,sessionId,sessionsApiPath,projectSlug}=useArchivedVibe64SessionDetail();return(_ctx,_cache)=>{return openBlock(),createElementBlock(`section`,_hoisted_1,[_cache[3]||(_cache[3]=createBaseVNode(`header`,{class:`vibe64-dashboard-page__header`},[createBaseVNode(`h1`,{class:`text-headline-small font-weight-bold ma-0`},`Archived Session`)],-1)),unref(error)?(openBlock(),createBlock(VAlert,{key:0,type:`error`,variant:`tonal`,density:`comfortable`},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(error)),1)]),_:1})):createCommentVNode(``,true),unref(loading)&&!unref(session)?(openBlock(),createBlock(VProgressLinear,{key:1,color:`primary`,height:`6`,indeterminate:``,rounded:``})):createCommentVNode(``,true),unref(session)?(openBlock(),createBlock(ArchivedVibe64SessionDetail_default,{key:2,"back-to":unref(backTo),"conversation-log":unref(conversationLog),session:unref(session),"sessions-api-path":unref(sessionsApiPath),"project-slug":unref(projectSlug)},null,8,[`back-to`,`conversation-log`,`session`,`sessions-api-path`,`project-slug`])):!unref(loading)?(openBlock(),createBlock(VSheet,{key:3,class:`vibe64-dashboard-page__empty`,rounded:`lg`,border:``},{default:withCtx(()=>[_cache[2]||(_cache[2]=createBaseVNode(`h2`,null,`Archived session unavailable`,-1)),createBaseVNode(`p`,null,`Session `+toDisplayString(unref(sessionId)||`unknown`)+` could not be loaded.`,1),createBaseVNode(`div`,_hoisted_2,[createVNode(VBtn,{"prepend-icon":unref(mdiArrowLeft),to:unref(backTo),variant:`tonal`},{default:withCtx(()=>[..._cache[0]||(_cache[0]=[createTextVNode(` Back to sessions `,-1)])]),_:1},8,[`prepend-icon`,`to`]),createVNode(VBtn,{"prepend-icon":unref(mdiRefresh),variant:`text`,onClick:unref(reload)},{default:withCtx(()=>[..._cache[1]||(_cache[1]=[createTextVNode(` Retry `,-1)])]),_:1},8,[`prepend-icon`,`onClick`])])]),_:1})):createCommentVNode(``,true)])}}};var _sessionId__default=_plugin_vue_export_helper_default(_sfc_main,[[`__scopeId`,`data-v-9d04455c`]]);export{_sessionId__default as default};