@tequila99/githuman 0.11.0 → 0.12.0

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 (330) hide show
  1. package/README.md +62 -2
  2. package/dist/cli/commands/mcp.js +112 -0
  3. package/dist/cli/commands/pi-acp.js +21 -0
  4. package/dist/cli/config.js +7 -1
  5. package/dist/cli/index.js +19 -8
  6. package/dist/cli/server-runtime.js +1 -0
  7. package/dist/server/adapters/agents/artifact-permission.js +88 -0
  8. package/dist/server/adapters/pi-acp/agent.js +98 -0
  9. package/dist/server/adapters/pi-acp/compatibility.js +57 -0
  10. package/dist/server/adapters/pi-acp/control.js +76 -0
  11. package/dist/server/adapters/pi-acp/errors.js +17 -0
  12. package/dist/server/adapters/pi-acp/extension.js +255 -0
  13. package/dist/server/adapters/pi-acp/launch.js +16 -0
  14. package/dist/server/adapters/pi-acp/mcp.js +153 -0
  15. package/dist/server/adapters/pi-acp/process.js +199 -0
  16. package/dist/server/adapters/pi-acp/session.js +409 -0
  17. package/dist/server/adapters/pi-acp/vendor/LICENSE +21 -0
  18. package/dist/server/adapters/pi-acp/vendor/README.md +29 -0
  19. package/dist/server/adapters/pi-acp/vendor/prompt.js +56 -0
  20. package/dist/server/app.js +94 -5
  21. package/dist/server/config/agents.js +4 -6
  22. package/dist/server/db/artifact-graph-migrations.js +56 -0
  23. package/dist/server/db/artifact-migrations.js +70 -0
  24. package/dist/server/db/artifact-review-migrations.js +24 -0
  25. package/dist/server/db/artifact-search-migrations.js +31 -0
  26. package/dist/server/db/artifact-validation-migrations.js +70 -0
  27. package/dist/server/db/index.js +3 -0
  28. package/dist/server/db/migrations.js +10 -0
  29. package/dist/server/db/sqlite-error.js +15 -0
  30. package/dist/server/db/transaction.js +40 -0
  31. package/dist/server/errors/artifacts.js +28 -0
  32. package/dist/server/errors/database.js +2 -0
  33. package/dist/server/hooks/access/require-access.js +8 -0
  34. package/dist/server/repositories/artifact-catalog.repo.js +283 -0
  35. package/dist/server/repositories/artifact-files.repo.js +181 -0
  36. package/dist/server/repositories/artifact-graph.repo.js +50 -0
  37. package/dist/server/repositories/artifact-search.repo.js +192 -0
  38. package/dist/server/repositories/artifact-transition.repo.js +85 -0
  39. package/dist/server/repositories/artifact-validation.repo.js +146 -0
  40. package/dist/server/repositories/notes-catalog.repo.js +2 -10
  41. package/dist/server/repositories/task.repo.js +114 -0
  42. package/dist/server/routes/agent.js +8 -1
  43. package/dist/server/routes/artifact-actions.js +129 -0
  44. package/dist/server/routes/artifact-agent.js +183 -0
  45. package/dist/server/routes/artifact-definitions.js +163 -0
  46. package/dist/server/routes/artifact-transitions.js +80 -0
  47. package/dist/server/routes/artifacts.js +111 -0
  48. package/dist/server/routes/events.js +5 -1
  49. package/dist/server/routes/project-files.js +90 -0
  50. package/dist/server/services/agent/agent-session.js +180 -10
  51. package/dist/server/services/agent/context-builder.js +30 -2
  52. package/dist/server/services/agent/session-registry.js +106 -2
  53. package/dist/server/services/agent/turn-task-context.js +1 -0
  54. package/dist/server/services/artifact-authorization.service.js +174 -0
  55. package/dist/server/services/artifact-definition.service.js +96 -0
  56. package/dist/server/services/artifact-export.service.js +44 -0
  57. package/dist/server/services/artifact-graph-validation.js +497 -0
  58. package/dist/server/services/artifact-graph.service.js +81 -0
  59. package/dist/server/services/artifact-lifecycle.service.js +343 -0
  60. package/dist/server/services/artifact-maintenance.service.js +55 -0
  61. package/dist/server/services/artifact-search.service.js +331 -0
  62. package/dist/server/services/artifact-storage.service.js +646 -0
  63. package/dist/server/services/artifact-transition.service.js +607 -0
  64. package/dist/server/services/artifact-type.service.js +74 -0
  65. package/dist/server/services/artifact-validation-jobs.service.js +518 -0
  66. package/dist/server/services/device-connections.js +9 -1
  67. package/dist/server/services/project-files.service.js +144 -0
  68. package/dist/server/services/review.service.js +6 -5
  69. package/dist/server/services/task.service.js +225 -0
  70. package/dist/server/utils/artifact-actor.js +13 -0
  71. package/dist/server/utils/artifact-page.js +42 -0
  72. package/dist/server/utils/take-within-bytes.js +16 -0
  73. package/dist/server/utils/text.js +7 -0
  74. package/dist/shared/agents/schemas.js +27 -0
  75. package/dist/shared/app/storage-constants.js +2 -0
  76. package/dist/shared/artifact-tools/descriptions.js +11 -0
  77. package/dist/shared/artifact-tools/instructions.js +14 -0
  78. package/dist/shared/artifact-tools/schemas.js +119 -0
  79. package/dist/shared/artifact-transitions/constants.js +21 -0
  80. package/dist/shared/artifact-transitions/schemas.js +111 -0
  81. package/dist/shared/artifact-transitions/transitions.js +61 -0
  82. package/dist/shared/artifact-transitions/types.js +1 -0
  83. package/dist/shared/artifacts/constants.js +34 -0
  84. package/dist/shared/artifacts/mcp-constants.js +24 -0
  85. package/dist/shared/artifacts/normalize.js +9 -0
  86. package/dist/shared/artifacts/schemas.js +820 -0
  87. package/dist/shared/artifacts/search.js +101 -0
  88. package/dist/shared/artifacts/types.js +1 -0
  89. package/dist/shared/events/schemas.js +1 -1
  90. package/dist/shared/events/types.js +1 -0
  91. package/dist/shared/git/constants.js +2 -0
  92. package/dist/shared/project-files/constants.js +18 -0
  93. package/dist/shared/project-files/schemas.js +35 -0
  94. package/dist/shared/project-files/types.js +1 -0
  95. package/dist/shared/tasks/schemas.js +261 -0
  96. package/dist/shared/tasks/types.js +1 -0
  97. package/dist/shared/utils/artifact-body.js +10 -0
  98. package/dist/shared/utils/canonical-json.js +22 -0
  99. package/dist/shared/utils/is-safe-prefixed-filename.js +10 -0
  100. package/dist/shared/utils/is-uuid.js +4 -2
  101. package/dist/shared/utils/is-valid-artifact-type-id.js +9 -0
  102. package/dist/shared/utils/is-valid-filename-prefix.js +13 -0
  103. package/dist/shared/utils/markdown-path.js +4 -0
  104. package/dist/shared/utils/pdf-path.js +4 -0
  105. package/dist/web/assets/AccessPage-Dvj0aCkm.js +1 -0
  106. package/dist/web/assets/AddButton-CMC9qf51.js +4 -0
  107. package/dist/web/assets/AddToAgentButton-BitTdCEg.js +1 -0
  108. package/dist/web/assets/AppPage-Cozv2vqG.js +1 -0
  109. package/dist/web/assets/ArtifactDefinitionPicker-BQOoU60k.js +3 -0
  110. package/dist/web/assets/ArtifactDefinitionPicker-D3qdrxlC.css +1 -0
  111. package/dist/web/assets/ArtifactsPage-BJR-XYYs.js +2 -0
  112. package/dist/web/assets/ArtifactsPage-Cu1xdYNf.css +1 -0
  113. package/dist/web/assets/CancelButton-mkxRHwoZ.js +1 -0
  114. package/dist/web/assets/ClosePopup-BtDeDZsk.js +1 -0
  115. package/dist/web/assets/CreateButton-zCmb7snC.js +1 -0
  116. package/dist/web/assets/CreateReviewFabButton-BCg1TvFh.js +1 -0
  117. package/dist/web/assets/DialogHeader-CPL9OtDV.css +1 -0
  118. package/dist/web/assets/DialogHeader-CQvAZVx7.js +1 -0
  119. package/dist/web/assets/{ErrorNotFound-DtnO85PU.js → ErrorNotFound-fXS367lZ.js} +1 -1
  120. package/dist/web/assets/{IndexPage-D5PvyGrX.css → IndexPage-5V5GLtgi.css} +1 -1
  121. package/dist/web/assets/IndexPage-DMTZyWQA.js +1 -0
  122. package/dist/web/assets/MainLayout-DWJ_-EMV.js +7 -0
  123. package/dist/web/assets/MainLayout-Dy74m_q1.css +1 -0
  124. package/dist/web/assets/NoteVisualEditor-5rHBQ3j0.js +1054 -0
  125. package/dist/web/assets/{NoteVisualEditor-BYikrY7Q.css → NoteVisualEditor-DE4ACTRJ.css} +1 -1
  126. package/dist/web/assets/NotesPage-C_eoCUl7.css +1 -0
  127. package/dist/web/assets/NotesPage-CjaxjLBW.js +4 -0
  128. package/dist/web/assets/{PdfPreview-kL_nk9my.js → PdfPreview-2NQ5gkjh.js} +2 -2
  129. package/dist/web/assets/ProjectFilePage-B-WUUxnq.js +1 -0
  130. package/dist/web/assets/QBtn-V3VXtJXi.js +1 -0
  131. package/dist/web/assets/QFab-CxpedhPI.js +1 -0
  132. package/dist/web/assets/QForm-ClpSneeD.js +1 -0
  133. package/dist/web/assets/QInput-BnqLJGXl.js +1 -0
  134. package/dist/web/assets/QScrollArea-js5dkUz1.js +1 -0
  135. package/dist/web/assets/QSpace-C7iAnGlU.js +1 -0
  136. package/dist/web/assets/QTabs-DIy5gWMb.js +1 -0
  137. package/dist/web/assets/QVirtualScroll-DkD0TczV.js +1 -0
  138. package/dist/web/assets/ReviewDetailPage-BgxcsTqY.css +1 -0
  139. package/dist/web/assets/ReviewDetailPage-Bmc8DmSu.js +1 -0
  140. package/dist/web/assets/ReviewsPage-DR1IWCmu.js +1 -0
  141. package/dist/web/assets/SearchInput-BRyN93Z1.js +1 -0
  142. package/dist/web/assets/StatusSwitcher-CpkH8BuC.js +1 -0
  143. package/dist/web/assets/{StatusSwitcher-D6i8_OfR.css → StatusSwitcher-DaE1ufAA.css} +1 -1
  144. package/dist/web/assets/TagFilterField-Bl3FBkB5.js +1 -0
  145. package/dist/web/assets/TagFilterField-DjUH0m3_.css +1 -0
  146. package/dist/web/assets/{TerminalView-617DZuPt.css → TerminalView-BCeke4xd.css} +1 -1
  147. package/dist/web/assets/{TerminalView-BsO_SZut.js → TerminalView-tEyLM5qZ.js} +12 -12
  148. package/dist/web/assets/{abnfDiagram-O67JEVCF-qUSrlp_c.js → abnfDiagram-O67JEVCF-DN9xiV9p.js} +1 -1
  149. package/dist/web/assets/{access-store-Q8nkv4Nb.js → access-store-CwkOl71l.js} +1 -1
  150. package/dist/web/assets/{agent-store-D2jgeBgi.js → agent-store-Grbx4jkz.js} +5 -5
  151. package/dist/web/assets/architecture-7GRP2DOG-DmaYCP8T.js +1 -0
  152. package/dist/web/assets/{architectureDiagram-NJMV4G6O-D7RC6OS2.js → architectureDiagram-NJMV4G6O-BVAJOucG.js} +1 -1
  153. package/dist/web/assets/{blockDiagram-BEXU5L5S-CmNtTpfK.js → blockDiagram-BEXU5L5S-TJAfSX44.js} +1 -1
  154. package/dist/web/assets/{c4Diagram-YGBWAQC7-CKCcu1qx.js → c4Diagram-YGBWAQC7-5UHyT_tW.js} +1 -1
  155. package/dist/web/assets/channel-B4_5H-fb.js +1 -0
  156. package/dist/web/assets/{chunk-3FUC2YCW-Drz6oeKx.js → chunk-3FUC2YCW-CelgLyJi.js} +1 -1
  157. package/dist/web/assets/{chunk-5DYCD2WN-RItzEgV_.js → chunk-5DYCD2WN-bhEAVIbQ.js} +1 -1
  158. package/dist/web/assets/{chunk-742MDFTN-D6hKdOv7.js → chunk-742MDFTN-ByLz4EcD.js} +1 -1
  159. package/dist/web/assets/{chunk-7INBJB4K-Dk7-Eior.js → chunk-7INBJB4K-CK2i0csa.js} +1 -1
  160. package/dist/web/assets/{chunk-7M6MHVWA-Cw8E0Nkn.js → chunk-7M6MHVWA-CoCiujjC.js} +1 -1
  161. package/dist/web/assets/{chunk-7PRAP22T-t-mTeNXF.js → chunk-7PRAP22T-CY4NCrCY.js} +1 -1
  162. package/dist/web/assets/{chunk-GTNCS2PH-C7j2atV8.js → chunk-GTNCS2PH-DMB7bQGB.js} +1 -1
  163. package/dist/web/assets/{chunk-GWA4HPMP-CH9T9LZO.js → chunk-GWA4HPMP-F6qclPTR.js} +1 -1
  164. package/dist/web/assets/{chunk-MBY4JIJT-yXOO37xD.js → chunk-MBY4JIJT-CSiiBtlX.js} +1 -1
  165. package/dist/web/assets/{chunk-NETBCI7D-C-s2UtAR.js → chunk-NETBCI7D-CBh7GChL.js} +1 -1
  166. package/dist/web/assets/{chunk-O7XYJQB3-5Me_aV8o.js → chunk-O7XYJQB3-B2aqz0sN.js} +1 -1
  167. package/dist/web/assets/{chunk-UA2S7LBM-BQaibeff.js → chunk-UA2S7LBM-B_-P_eR0.js} +1 -1
  168. package/dist/web/assets/{chunk-WEXAMYUT-UBcOE4Lf.js → chunk-WEXAMYUT-19nMFxzK.js} +1 -1
  169. package/dist/web/assets/{chunk-Z7XXMR3K-BsA8o3Pt.js → chunk-Z7XXMR3K-Co7gzRY1.js} +1 -1
  170. package/dist/web/assets/{chunk-ZIGJFQKS--KwSI1U0.js → chunk-ZIGJFQKS-Eoi4K5bK.js} +1 -1
  171. package/dist/web/assets/{classDiagram-v2-NBCMYWYE-pMF8oCmq.js → classDiagram-v2-NBCMYWYE-CfFGzL-A.js} +1 -1
  172. package/dist/web/assets/copy-code-DaqEfdXL.js +1 -0
  173. package/dist/web/assets/create-DedXY-KP.js +1 -0
  174. package/dist/web/assets/{cynefin-OW5HDTMX-DFgtXolF.js → cynefin-OW5HDTMX-DdZXl3KU.js} +1 -1
  175. package/dist/web/assets/{cynefinDiagram-VND7K2PF-CPY0JRyq.js → cynefinDiagram-VND7K2PF-WU21nYH-.js} +1 -1
  176. package/dist/web/assets/{dagre-6A5THRUB-KdjJKAB7.js → dagre-6A5THRUB-48z3F8Pl.js} +1 -1
  177. package/dist/web/assets/date-DZIuZp-w.js +1 -0
  178. package/dist/web/assets/devices-store-Bfk2wdrQ.js +1 -0
  179. package/dist/web/assets/{diagram-22UHCM2B-BDcOcvF_.js → diagram-22UHCM2B-B0AZgJW9.js} +1 -1
  180. package/dist/web/assets/{diagram-3UASUU5V-6j2nlZL3.js → diagram-3UASUU5V-CzEzrxuO.js} +1 -1
  181. package/dist/web/assets/{diagram-ATOU4E4O-BN8cdxED.js → diagram-ATOU4E4O-w6h1bD3w.js} +1 -1
  182. package/dist/web/assets/{diagram-CDSNMT55-cWPiXHkr.js → diagram-CDSNMT55-BdTHQd_o.js} +1 -1
  183. package/dist/web/assets/{diagram-MLGK6HIB-DcgkH_Vl.js → diagram-MLGK6HIB-pB4cj6c2.js} +1 -1
  184. package/dist/web/assets/{diagram-MPIPVDR6-D_e86L99.js → diagram-MPIPVDR6-C7C06qyV.js} +1 -1
  185. package/dist/web/assets/diff-store-DBDL5Hw5.js +93 -0
  186. package/dist/web/assets/{dist-Bdsq-Ze1.js → dist-B7Cu0FBW.js} +1 -1
  187. package/dist/web/assets/{dist-BVVhgjWT.js → dist-B8i8y3GY.js} +1 -1
  188. package/dist/web/assets/{dist-CjkUzU4s.js → dist-BNgPhnKo.js} +1 -1
  189. package/dist/web/assets/{dist-Bz40Nd9I.js → dist-BWoPV5P3.js} +1 -1
  190. package/dist/web/assets/{dist-BP40mvwJ.js → dist-CJ7isxli.js} +1 -1
  191. package/dist/web/assets/{dist-C9enVshI.js → dist-CTJJYvYG.js} +1 -1
  192. package/dist/web/assets/{dist-BwpyANeW.js → dist-CZz0KXAA.js} +1 -1
  193. package/dist/web/assets/{dist-CU43ytsh.js → dist-DNpwgDba.js} +1 -1
  194. package/dist/web/assets/{dist-BMFtkY2y.js → dist-DWCdhk-O.js} +1 -1
  195. package/dist/web/assets/{dist-MUQaJRtC.js → dist-DqSUdjG9.js} +1 -1
  196. package/dist/web/assets/{dist-CLCP7f3x.js → dist-Dy9K9LOR.js} +1 -1
  197. package/dist/web/assets/{ebnfDiagram-ZINNZB2B-D8xHOFOi.js → ebnfDiagram-ZINNZB2B-75vt7539.js} +1 -1
  198. package/dist/web/assets/{elk-276RUBZZ-JiDwNyLy.js → elk-276RUBZZ-DXDjJVTy.js} +1 -1
  199. package/dist/web/assets/{erDiagram-OPXOYQCR-D3J6u81a.js → erDiagram-OPXOYQCR-tNNInTmk.js} +1 -1
  200. package/dist/web/assets/eventmodeling-NTZA5JFV-QMRehQtM.js +1 -0
  201. package/dist/web/assets/flowDiagram-KWPJA3E3-DJAgsbXC.js +1 -0
  202. package/dist/web/assets/{ganttDiagram-FUAMR5RP-nvAVhbgI.js → ganttDiagram-FUAMR5RP-h3E8lnCd.js} +1 -1
  203. package/dist/web/assets/{gitGraph-4MIJSDKK-Bv_wkB2T.js → gitGraph-4MIJSDKK-BUwY-iv2.js} +1 -1
  204. package/dist/web/assets/{gitGraphDiagram-X574FWY7-DxxwadhH.js → gitGraphDiagram-X574FWY7-C0AgQH5k.js} +1 -1
  205. package/dist/web/assets/i18n-CfTd46OX.js +1 -0
  206. package/dist/web/assets/icons-BoaZfGBj.js +1 -0
  207. package/dist/web/assets/index-BQU3KK1E.css +1 -0
  208. package/dist/web/assets/index-BTpokWxr.js +2 -0
  209. package/dist/web/assets/{info-A6RAGUB7-Dw18yeIE.js → info-A6RAGUB7-DVMZ4hdK.js} +1 -1
  210. package/dist/web/assets/{infoDiagram-VRGFBTTK-C3BrgjYg.js → infoDiagram-VRGFBTTK-kLaGXGQ2.js} +1 -1
  211. package/dist/web/assets/init-app-Bxc_l2yT.js +1 -0
  212. package/dist/web/assets/{is-D0waCELe.js → is-B1kBQ5Va.js} +1 -1
  213. package/dist/web/assets/{ishikawaDiagram-OU5B5YK6-DU2p9szX.js → ishikawaDiagram-OU5B5YK6-Oj7bZlyo.js} +1 -1
  214. package/dist/web/assets/{journeyDiagram-ZHPQQLJL-Bs2zQnew.js → journeyDiagram-ZHPQQLJL-BG7V2Srs.js} +1 -1
  215. package/dist/web/assets/{kanban-definition-PNTS6WVX-pqXd5uNi.js → kanban-definition-PNTS6WVX-CIJiDE6d.js} +1 -1
  216. package/dist/web/assets/{line-CN4Dxpei.js → line-D2vEKYRZ.js} +1 -1
  217. package/dist/web/assets/markdown-Bm2wfvok.js +16 -0
  218. package/dist/web/assets/mdi-Byw1NZrZ.js +1 -0
  219. package/dist/web/assets/{mermaid-parser.core-DZqDOGRM.js → mermaid-parser.core-BcBEWjW6.js} +3 -3
  220. package/dist/web/assets/{mermaid.core-CUndCvkz.js → mermaid.core-DobO0deo.js} +4 -4
  221. package/dist/web/assets/{mindmap-definition-NLK3R4M7-DyK7YqB7.js → mindmap-definition-NLK3R4M7-y7Qz5gBF.js} +1 -1
  222. package/dist/web/assets/{packet-AYTQ26CC-DvlW_0BP.js → packet-AYTQ26CC-oRQgKr9d.js} +1 -1
  223. package/dist/web/assets/{pegDiagram-GJSIUBJH-k2e_-FWQ.js → pegDiagram-GJSIUBJH-RIU8XOHq.js} +1 -1
  224. package/dist/web/assets/{pie-WAS4IAKB-B99zaYjO.js → pie-WAS4IAKB-qmOlsLkx.js} +1 -1
  225. package/dist/web/assets/{pieDiagram-5QR66LMP-BPbS05lK.js → pieDiagram-5QR66LMP-BM932TDA.js} +1 -1
  226. package/dist/web/assets/pinia-BfqEuvsi.js +1 -0
  227. package/dist/web/assets/pinia-Cmp1GI8k.js +1 -0
  228. package/dist/web/assets/preview-store-D7qF6SgX.js +2 -0
  229. package/dist/web/assets/project-files-store-OhGs_H7U.js +1 -0
  230. package/dist/web/assets/{quadrantDiagram-O4NWA36T-DqNNdsd2.js → quadrantDiagram-O4NWA36T-qQZYwTy7.js} +1 -1
  231. package/dist/web/assets/{radar-RG4KPBEZ-BIAAr9LO.js → radar-RG4KPBEZ-Kdglk6eY.js} +1 -1
  232. package/dist/web/assets/{railroad-74A4TZTK-DYxr-1-f.js → railroad-74A4TZTK-kVhMYx4I.js} +1 -1
  233. package/dist/web/assets/railroad-abnf-HS5TGJTU-MiKgjOXr.js +1 -0
  234. package/dist/web/assets/railroad-ebnf-LZEXJU2U-BFL9h7Zx.js +1 -0
  235. package/dist/web/assets/railroad-peg-WCYAUIDC-ChGGfIn7.js +1 -0
  236. package/dist/web/assets/{railroadDiagram-XR7U4H2S-TNg-LqRR.js → railroadDiagram-XR7U4H2S-K9SrOGcT.js} +1 -1
  237. package/dist/web/assets/render-Brao9Nj2.js +1 -0
  238. package/dist/web/assets/repository-store-DZgQ5H7J.js +1 -0
  239. package/dist/web/assets/{requirementDiagram-PLB6GJNP-hKAyJR6W.js → requirementDiagram-PLB6GJNP-CtA9ZKEx.js} +1 -1
  240. package/dist/web/assets/runtime-core.esm-bundler-DDnHUoIy.js +1 -0
  241. package/dist/web/assets/{safe-storage-B1Aq5CGi.js → safe-storage-CvVvrm4v.js} +1 -1
  242. package/dist/web/assets/{sankeyDiagram-IPEJSGJF-_MSL-tES.js → sankeyDiagram-IPEJSGJF-BH_t4exx.js} +1 -1
  243. package/dist/web/assets/{sequenceDiagram-PO4LG4MO-Byq-joBG.js → sequenceDiagram-PO4LG4MO-hPNPqpDa.js} +1 -1
  244. package/dist/web/assets/single-flight-CyDZB3rb.js +1 -0
  245. package/dist/web/assets/{stateDiagram-v2-GCMORJYK-BR2jAgaa.js → stateDiagram-v2-GCMORJYK-BVmjZDRD.js} +1 -1
  246. package/dist/web/assets/{swimlanes-2SLR337P-Nt8ojGKK.js → swimlanes-2SLR337P-Tgk8-6jj.js} +1 -1
  247. package/dist/web/assets/swimlanesDiagram-TC7HE7FX-W1zDrK61.js +8 -0
  248. package/dist/web/assets/{terminal-store-D0abibMa.js → terminal-store-CKgJjtC6.js} +1 -1
  249. package/dist/web/assets/theme-slSxLNv6.js +1 -0
  250. package/dist/web/assets/{timeline-definition-EJHVYXUP-BtihLvxk.js → timeline-definition-EJHVYXUP-lAIHEGe8.js} +1 -1
  251. package/dist/web/assets/{treeView-Q6P3EWNA-D5HzXeKd.js → treeView-Q6P3EWNA-CdvzKtWf.js} +1 -1
  252. package/dist/web/assets/{treemap-WGGIJYW6-Dovjuutg.js → treemap-WGGIJYW6-BxDSJfrJ.js} +1 -1
  253. package/dist/web/assets/uid-B1JNhznI.js +1 -0
  254. package/dist/web/assets/use-add-agent-context-BSHGL5iV.js +1 -0
  255. package/dist/web/assets/use-app-theme-fmVV2QM8.js +1 -0
  256. package/dist/web/assets/use-countdown-D6_qSOZJ.js +1 -0
  257. package/dist/web/assets/use-notify-error-Dx2D9IEP.js +1 -0
  258. package/dist/web/assets/use-panel-width-BYOPuHat.js +1 -0
  259. package/dist/web/assets/use-router-link-D7geCGQI.js +1 -0
  260. package/dist/web/assets/use-row-height-BK8kNihW.js +1 -0
  261. package/dist/web/assets/use-server-events-CvcbsbIf.js +1 -0
  262. package/dist/web/assets/use-virtual-scroll-DixIsJk4.js +1 -0
  263. package/dist/web/assets/use-workspace-navigation-AaRMWmjQ.js +1 -0
  264. package/dist/web/assets/{usecaseDiagram-POWQR4AR-DSwRE8zj.js → usecaseDiagram-POWQR4AR-BH3KvMpz.js} +1 -1
  265. package/dist/web/assets/{vennDiagram-UO4OBE2U-C-B8yP1K.js → vennDiagram-UO4OBE2U-Dfi-raKp.js} +1 -1
  266. package/dist/web/assets/viewport-store-NqQS7itT.js +1 -0
  267. package/dist/web/assets/{vue-i18n.runtime-CEtihHHL.js → vue-i18n.runtime-JOo8b7-t.js} +2 -2
  268. package/dist/web/assets/{wardley-WFR3VGLG-wWgaZuh6.js → wardley-WFR3VGLG-DmbtSM24.js} +1 -1
  269. package/dist/web/assets/{wardleyDiagram-VNRHLVJA-DbhenrHd.js → wardleyDiagram-VNRHLVJA-DIzhGvI7.js} +1 -1
  270. package/dist/web/assets/weighted-lru-BFtZKA_y.js +1 -0
  271. package/dist/web/assets/workspace-navigation-xfxULfM7.js +1 -0
  272. package/dist/web/assets/{xychartDiagram-PMCCYNJV-CxFDmAEt.js → xychartDiagram-PMCCYNJV-XgqSHH_N.js} +1 -1
  273. package/dist/web/index.html +10 -8
  274. package/package.json +5 -3
  275. package/dist/web/assets/AccessPage-_OKn9U0P.js +0 -1
  276. package/dist/web/assets/AppPage-oQ9Rz0be.js +0 -1
  277. package/dist/web/assets/CreateButton-D1EtoicG.js +0 -1
  278. package/dist/web/assets/CreateReviewFabButton-BxvT3i9e.js +0 -1
  279. package/dist/web/assets/IndexPage-gdD7BHxA.js +0 -1
  280. package/dist/web/assets/MainLayout-47PTLKZf.js +0 -6
  281. package/dist/web/assets/MainLayout-ikSrFqBh.css +0 -1
  282. package/dist/web/assets/NoteVisualEditor-BQ6mVfj0.js +0 -1054
  283. package/dist/web/assets/NotesPage-DNR9iW_G.js +0 -4
  284. package/dist/web/assets/NotesPage-_8naQciW.css +0 -1
  285. package/dist/web/assets/PanelResize-CAQFVc8b.js +0 -1
  286. package/dist/web/assets/QBtn-CB-yw_iP.js +0 -1
  287. package/dist/web/assets/QExpansionItem-Dr5oXO0m.js +0 -4
  288. package/dist/web/assets/QFab-DPz8RiP0.js +0 -1
  289. package/dist/web/assets/QForm-CASiKhGm.js +0 -1
  290. package/dist/web/assets/QInput-k34nCPWg.js +0 -1
  291. package/dist/web/assets/QSelect-CaKn9Tkg.js +0 -1
  292. package/dist/web/assets/QSpace-Di_bZQY6.js +0 -1
  293. package/dist/web/assets/QVirtualScroll-oGN_Tl5J.js +0 -1
  294. package/dist/web/assets/ReviewDetailPage-BKgIprY0.js +0 -1
  295. package/dist/web/assets/ReviewDetailPage-CkCilMNW.css +0 -1
  296. package/dist/web/assets/ReviewsPage-6PJ6wofN.js +0 -1
  297. package/dist/web/assets/StatusSwitcher-s9w6iKpR.js +0 -1
  298. package/dist/web/assets/architecture-7GRP2DOG-D6PShS0_.js +0 -1
  299. package/dist/web/assets/channel-D6lb5DbY.js +0 -1
  300. package/dist/web/assets/create-B9Tn5Xvi.js +0 -1
  301. package/dist/web/assets/devices-store-CrZ4MxyY.js +0 -1
  302. package/dist/web/assets/diff-store-ByxMCKoa.js +0 -93
  303. package/dist/web/assets/eventmodeling-NTZA5JFV-QCwZLvmm.js +0 -1
  304. package/dist/web/assets/flUhRq6tzZclQEJ-Vdg-IuiaDsNa-Dr0goTwe.woff +0 -0
  305. package/dist/web/assets/flUhRq6tzZclQEJ-Vdg-IuiaDsNcIhQ8tQ-D-x-0Q06.woff2 +0 -0
  306. package/dist/web/assets/flowDiagram-KWPJA3E3-CgF90hDi.js +0 -1
  307. package/dist/web/assets/i18n-DDCqtTTW.js +0 -1
  308. package/dist/web/assets/index-BNHt6zmP.js +0 -2
  309. package/dist/web/assets/index-BwbM_RKi.css +0 -1
  310. package/dist/web/assets/init-app-BouXTk8p.js +0 -1
  311. package/dist/web/assets/markdown-jR0fhe4d.js +0 -15
  312. package/dist/web/assets/pinia-BETEFLDG.js +0 -1
  313. package/dist/web/assets/pinia-DO0AdKGg.js +0 -1
  314. package/dist/web/assets/railroad-abnf-HS5TGJTU-GESjhc3t.js +0 -1
  315. package/dist/web/assets/railroad-ebnf-LZEXJU2U-Cybu0A7J.js +0 -1
  316. package/dist/web/assets/railroad-peg-WCYAUIDC-DCHxrtbI.js +0 -1
  317. package/dist/web/assets/runtime-core.esm-bundler-CAvPiMpd.js +0 -1
  318. package/dist/web/assets/single-flight-DLCbzLI3.js +0 -1
  319. package/dist/web/assets/swimlanesDiagram-TC7HE7FX-Ds1hVYqh.js +0 -8
  320. package/dist/web/assets/theme-QEcOl0lf.js +0 -1
  321. package/dist/web/assets/use-add-agent-context-BaPUIO93.js +0 -1
  322. package/dist/web/assets/use-app-theme-B1cdbnHn.js +0 -1
  323. package/dist/web/assets/use-countdown-CTag4T13.js +0 -1
  324. package/dist/web/assets/use-panel-width-CB-0S3zX.js +0 -1
  325. package/dist/web/assets/use-router-link-Dr9wnnyZ.js +0 -1
  326. package/dist/web/assets/use-row-height-DQHVMtUe.js +0 -1
  327. package/dist/web/assets/use-server-events-BrBCbeHu.js +0 -1
  328. package/dist/web/assets/use-virtual-scroll-DG0UKjVk.js +0 -1
  329. package/dist/web/assets/weighted-lru-BSxRnMHR.js +0 -1
  330. /package/dist/web/assets/{PanelResize-XjrbOj2S.css → AddToAgentButton-XjrbOj2S.css} +0 -0
@@ -0,0 +1,101 @@
1
+ // Grapheme boundaries retain the original range when NFC or lowercase changes its length.
2
+ const SEGMENTER = new Intl.Segmenter('und', { granularity: 'grapheme' });
3
+ export function normalizeSearch(text) {
4
+ return text.normalize('NFC').toLowerCase().replaceAll('ё', 'е');
5
+ }
6
+ export function searchCopy(text) {
7
+ // ASCII has no grapheme-length changes; avoid segmenting large control-heavy documents.
8
+ // oxlint-disable-next-line no-control-regex -- This fast path intentionally recognizes all ASCII code units.
9
+ if (/^[\x00-\x7f]*$/.test(text)) {
10
+ return { text: normalizeSearch(text), offsets: [] };
11
+ }
12
+ let normalized = '';
13
+ const offsets = [];
14
+ for (const part of SEGMENTER.segment(text)) {
15
+ const value = normalizeSearch(part.segment);
16
+ if (value.length !== part.segment.length) {
17
+ offsets.push([
18
+ normalized.length,
19
+ normalized.length + value.length,
20
+ part.index,
21
+ part.index + part.segment.length
22
+ ]);
23
+ }
24
+ normalized += value;
25
+ }
26
+ return { text: normalizeSearch(text), offsets };
27
+ }
28
+ export function originalSearchRange(start, end, offsets) {
29
+ function offset(value, tail) {
30
+ let delta = 0;
31
+ for (const [from, to, originalFrom, originalTo] of offsets) {
32
+ if (value <= from)
33
+ break;
34
+ if (value < to)
35
+ return tail ? originalTo : originalFrom;
36
+ delta = originalTo - to;
37
+ }
38
+ return value + delta;
39
+ }
40
+ return [offset(start, false), offset(end, true)];
41
+ }
42
+ export function searchTokens(text, unique = true) {
43
+ const tokens = normalizeSearch(text).match(/[\p{L}\p{N}\p{M}]+/gu) ?? [];
44
+ return unique ? [...new Set(tokens)] : tokens;
45
+ }
46
+ export function searchGrams(text, width) {
47
+ const chars = Array.from(text), result = new Set();
48
+ for (let i = 0; i <= chars.length - width; i++) {
49
+ result.add(chars.slice(i, i + width).join(''));
50
+ }
51
+ return [...result];
52
+ }
53
+ export function searchEditLimit(token) {
54
+ const length = Array.from(token).length;
55
+ return length <= 3 ? 0 : length <= 7 ? 1 : 2;
56
+ }
57
+ // Keep unrestricted transpositions while bounding useful cells to the edit-distance band.
58
+ export function boundedSearchDistance(left, right, limit) {
59
+ const a = Array.from(left), b = Array.from(right);
60
+ if (Math.abs(a.length - b.length) > limit)
61
+ return limit + 1;
62
+ const matrix = new Map();
63
+ const cell = (i, j) => matrix.get(i)?.get(j) ?? limit + 1;
64
+ const put = (i, j, value) => {
65
+ let row = matrix.get(i);
66
+ if (!row) {
67
+ row = new Map();
68
+ matrix.set(i, row);
69
+ }
70
+ row.set(j, value);
71
+ };
72
+ for (let i = 0; i <= a.length; i++)
73
+ put(i + 1, 1, i);
74
+ for (let j = 0; j <= b.length; j++)
75
+ put(1, j + 1, j);
76
+ const last = new Map();
77
+ for (let i = 1; i <= a.length; i++) {
78
+ let matched = 0;
79
+ for (let j = 1; j <= b.length; j++) {
80
+ const previousRow = last.get(b[j - 1] ?? '') ?? 0, previousColumn = matched;
81
+ const cost = Number(a[i - 1] !== b[j - 1]);
82
+ if (!cost)
83
+ matched = j;
84
+ if (Math.abs(i - j) > limit)
85
+ continue;
86
+ put(i + 1, j + 1, Math.min(cell(i, j) + cost, cell(i + 1, j) + 1, cell(i, j + 1) + 1, cell(previousRow, previousColumn) +
87
+ (i - previousRow - 1) +
88
+ 1 +
89
+ (j - previousColumn - 1)));
90
+ }
91
+ last.set(a[i - 1] ?? '', i);
92
+ }
93
+ return cell(a.length + 1, b.length + 1);
94
+ }
95
+ export function searchMatchExpression(groups) {
96
+ return groups
97
+ .map(group => group.filter(token => token.length > 0))
98
+ .filter(group => group.length > 0)
99
+ .map(group => `(${group.map(token => '"' + token.replaceAll('"', '""') + '"').join(' OR ')})`)
100
+ .join(' AND ');
101
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -1,4 +1,4 @@
1
1
  import { Type } from '@sinclair/typebox';
2
2
  export const EventStreamSchema = Type.String({
3
- description: 'Server-sent events. The first event is connected with { instanceId } data. Then come review:created, review:updated, review:deleted, comment:created, comment:updated and comment:deleted with { reviewId } data, and files:changed with {} data.'
3
+ description: 'Server-sent events. The first event is connected with { instanceId } data. Then come review:created, review:updated, review:deleted, comment:created, comment:updated and comment:deleted with { reviewId } data, files:changed with {} data, and artifacts:changed with { storeId, storeEpoch } data.'
4
4
  });
@@ -11,6 +11,7 @@ export const SERVER_EVENT_TYPES = [
11
11
  'comment:updated',
12
12
  'comment:deleted',
13
13
  'notes:changed',
14
+ 'artifacts:changed',
14
15
  'files:changed',
15
16
  'devices:changed'
16
17
  ];
@@ -0,0 +1,2 @@
1
+ // Pseudo ref for the files on disk. Git has no such ref: the app reads them directly.
2
+ export const WORKTREE_REF = 'WORKTREE';
@@ -0,0 +1,18 @@
1
+ // Preview buffers must remain bounded independently of download sizes.
2
+ export const PROJECT_TEXT_LIMIT = 2_000_000;
3
+ // Match the existing image preview budget.
4
+ export const PROJECT_IMAGE_LIMIT = 10_000_000;
5
+ // Match the existing PDF preview budget.
6
+ export const PROJECT_PDF_LIMIT = 100_000_000;
7
+ // A download is buffered in memory by the browser, so it has an upper bound.
8
+ export const PROJECT_DOWNLOAD_LIMIT = 100_000_000;
9
+ // The longest repository-relative path that the API accepts.
10
+ export const MAX_PROJECT_PATH_LENGTH = 4096;
11
+ // The app route that opens a project file. Markdown links point to it.
12
+ export const PROJECT_FILE_ROUTE = '/files/open';
13
+ // The query that marks a link that cannot open. The link renders as an error.
14
+ export const PROJECT_FILE_INVALID_QUERY = 'invalid=true';
15
+ // A file: link. The default Markdown link validation rejects it.
16
+ export const FILE_URI_PATTERN = /^file:\/\//i;
17
+ // MIME type of a file that has no preview. A download uses it for every file.
18
+ export const PROJECT_DOWNLOAD_MIME = 'application/octet-stream';
@@ -0,0 +1,35 @@
1
+ import { Type } from '@sinclair/typebox';
2
+ import { MAX_PROJECT_PATH_LENGTH } from "./constants.js";
3
+ export const ProjectFileQuery = Type.Object({
4
+ path: Type.String({
5
+ minLength: 1,
6
+ maxLength: MAX_PROJECT_PATH_LENGTH,
7
+ description: 'Repository-relative WORKTREE file path.'
8
+ })
9
+ });
10
+ export const ProjectFileContentQuery = Type.Object({
11
+ ...ProjectFileQuery.properties,
12
+ download: Type.Optional(Type.Boolean({
13
+ description: 'Send an attachment without the preview size limit.'
14
+ }))
15
+ });
16
+ export const ProjectFileMetadataSchema = Type.Object({
17
+ name: Type.String({ description: 'File basename.' }),
18
+ size: Type.Number({ description: 'Current file size in bytes.' }),
19
+ kind: Type.Union([
20
+ Type.Literal('markdown'),
21
+ Type.Literal('text'),
22
+ Type.Literal('image'),
23
+ Type.Literal('pdf'),
24
+ Type.Literal('download')
25
+ ], { description: 'Supported preview, or download only.' }),
26
+ mime: Type.String({ description: 'Validated preview MIME type.' }),
27
+ previewable: Type.Boolean({
28
+ description: 'The file fits the preview budget.'
29
+ })
30
+ }, { description: 'Current WORKTREE file metadata.' });
31
+ export const ProjectFileContextSchema = Type.Object({
32
+ origins: Type.Array(Type.String(), {
33
+ description: 'Trusted loopback origins of this server instance.'
34
+ })
35
+ }, { description: 'File-link context for this server.' });
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,261 @@
1
+ import { ARTIFACT_TYPE_ID_PATTERN_SOURCE } from "../utils/is-valid-artifact-type-id.js";
2
+ import { UUID_PATTERN_SOURCE } from "../utils/is-uuid.js";
3
+ import { Type } from '@sinclair/typebox';
4
+ import { Nullable } from "../utils/schemas.js";
5
+ import { ArtifactActorSchema } from "../artifacts/schemas.js";
6
+ export const TaskInputSchema = Type.Object({
7
+ title: Type.String({
8
+ minLength: 1,
9
+ maxLength: 1000,
10
+ description: 'Task title.'
11
+ }),
12
+ externalUrl: Type.Union([Type.Null(), Type.String({ maxLength: 2048 })], {
13
+ description: 'Optional external HTTP or HTTPS URL.'
14
+ }),
15
+ state: Type.Union([Type.Literal('open'), Type.Literal('closed')], {
16
+ description: 'Task state, independent of artifact lifecycle.'
17
+ })
18
+ }, {
19
+ additionalProperties: false,
20
+ description: 'Editable minimal task definition.'
21
+ });
22
+ export const TaskSchema = Type.Object({
23
+ ...TaskInputSchema.properties,
24
+ externalUrl: Nullable(Type.String({ description: 'Optional external HTTP or HTTPS URL.' })),
25
+ storeId: Type.String({ description: 'Owning artifact store.' }),
26
+ id: Type.String({ description: 'Stable task UUID.' }),
27
+ version: Type.Integer({ description: 'Task definition version.' })
28
+ }, { description: 'Persistent task definition.' });
29
+ export const ArtifactTypeInputSchema = Type.Object({
30
+ label: Type.String({
31
+ minLength: 1,
32
+ maxLength: 256,
33
+ description: 'Human-readable type label.'
34
+ }),
35
+ active: Type.Boolean({ description: 'Available for new type selections.' })
36
+ }, { additionalProperties: false, description: 'Editable type definition.' });
37
+ export const ArtifactTypeSchema = Type.Object({
38
+ ...ArtifactTypeInputSchema.properties,
39
+ storeId: Type.String({ description: 'Owning artifact store.' }),
40
+ id: Type.String({ description: 'Immutable type identifier.' }),
41
+ version: Type.Integer({ description: 'Type definition version.' })
42
+ }, { description: 'Versioned artifact type.' });
43
+ export const DefinitionQuery = Type.Object({
44
+ limit: Type.Optional(Type.Integer({
45
+ minimum: 1,
46
+ maximum: 100,
47
+ description: 'Maximum page size.'
48
+ })),
49
+ cursor: Type.Optional(Type.String({ maxLength: 2048, description: 'Store revision cursor.' })),
50
+ search: Type.Optional(Type.String({
51
+ maxLength: 256,
52
+ description: 'Case-insensitive text matched against the name and the identifier.'
53
+ }))
54
+ }, { additionalProperties: false, description: 'Definition page options.' });
55
+ export const DefinitionParams = Type.Object({
56
+ id: Type.String({
57
+ minLength: 1,
58
+ maxLength: 100,
59
+ description: 'Definition identifier.'
60
+ })
61
+ }, { additionalProperties: false, description: 'Definition path parameter.' });
62
+ export const TaskCreateBody = Type.Object({
63
+ requestId: Type.String({
64
+ minLength: 1,
65
+ maxLength: 128,
66
+ description: 'Idempotent command identifier.'
67
+ }),
68
+ input: TaskInputSchema
69
+ }, { additionalProperties: false, description: 'Create a task.' });
70
+ export const TaskUpdateBody = Type.Object({
71
+ ...TaskCreateBody.properties,
72
+ expectedVersion: Type.Integer({
73
+ minimum: 1,
74
+ description: 'Expected task version.'
75
+ })
76
+ }, { additionalProperties: false, description: 'Update a task definition.' });
77
+ export const ArtifactTypeCreateBody = Type.Object({
78
+ requestId: TaskCreateBody.properties.requestId,
79
+ id: Type.String({
80
+ pattern: ARTIFACT_TYPE_ID_PATTERN_SOURCE,
81
+ description: 'Stable custom type identifier.'
82
+ }),
83
+ input: ArtifactTypeInputSchema
84
+ }, { additionalProperties: false, description: 'Create a custom artifact type.' });
85
+ export const ArtifactTypeUpdateBody = Type.Object({
86
+ requestId: TaskCreateBody.properties.requestId,
87
+ expectedVersion: Type.Integer({
88
+ minimum: 1,
89
+ description: 'Expected type version.'
90
+ }),
91
+ input: ArtifactTypeInputSchema
92
+ }, {
93
+ additionalProperties: false,
94
+ description: 'Update a type definition without removing history.'
95
+ });
96
+ export const TaskListSchema = Type.Object({
97
+ storeId: Type.String({ description: 'Owning store.' }),
98
+ storeEpoch: Type.Integer({ description: 'Store revision.' }),
99
+ items: Type.Array(TaskSchema, { description: 'Task definitions.' }),
100
+ nextCursor: Nullable(Type.String({ description: 'Next page cursor.' }))
101
+ }, { description: 'Task catalog page.' });
102
+ export const ArtifactTypeListSchema = Type.Object({
103
+ storeId: Type.String({ description: 'Owning store.' }),
104
+ storeEpoch: Type.Integer({ description: 'Store revision.' }),
105
+ items: Type.Array(ArtifactTypeSchema, {
106
+ description: 'Artifact type definitions.'
107
+ }),
108
+ nextCursor: Nullable(Type.String({ description: 'Next page cursor.' }))
109
+ }, { description: 'Artifact type catalog page.' });
110
+ export const TaskChatLinkSchema = Type.Object({
111
+ taskId: Type.String({ description: 'Task identifier.' }),
112
+ sessionId: Type.String({ description: 'Historical session identifier.' }),
113
+ title: Type.String({ description: 'Session title snapshot.' }),
114
+ linked: Type.Boolean({ description: 'Link is currently assigned.' }),
115
+ available: Type.Boolean({
116
+ description: 'Session is present in this server instance.'
117
+ }),
118
+ version: Type.Integer({ description: 'Link state version.' })
119
+ }, { description: 'Task session link; closed sessions remain in history.' });
120
+ export const TaskChatLinksSchema = Type.Array(TaskChatLinkSchema, {
121
+ description: 'Session links associated with a task.'
122
+ });
123
+ export const SessionTaskBody = Type.Object({
124
+ requestId: TaskCreateBody.properties.requestId,
125
+ expectedVersion: Type.Integer({
126
+ minimum: 0,
127
+ description: 'Expected session task-link version, initially zero.'
128
+ }),
129
+ taskIds: Type.Array(Type.String({ pattern: UUID_PATTERN_SOURCE }), {
130
+ maxItems: 100,
131
+ uniqueItems: true,
132
+ description: 'Complete list of session tasks.'
133
+ })
134
+ }, {
135
+ additionalProperties: false,
136
+ description: 'Assign tasks to a live server session.'
137
+ });
138
+ export const SessionTaskSchema = Type.Object({
139
+ sessionId: Type.String({ description: 'Agent session identifier.' }),
140
+ version: Type.Integer({ description: 'Assignment version.' }),
141
+ taskIds: SessionTaskBody.properties.taskIds
142
+ }, { description: 'Current task assignment for a live session.' });
143
+ export const TaskActivationBody = Type.Object({
144
+ requestId: TaskCreateBody.properties.requestId,
145
+ turnId: Type.String({
146
+ pattern: UUID_PATTERN_SOURCE,
147
+ description: 'Expected active response identifier, read with tasks.get_context.'
148
+ }),
149
+ assignmentVersion: Type.Integer({
150
+ minimum: 0,
151
+ description: 'Expected current session assignment version.'
152
+ }),
153
+ taskId: Type.String({
154
+ pattern: UUID_PATTERN_SOURCE,
155
+ description: 'Existing task to select exclusively.'
156
+ })
157
+ }, {
158
+ additionalProperties: false,
159
+ description: 'Activate an existing task for the current response and chat.'
160
+ });
161
+ export const TaskCreateAndActivateBody = Type.Object({
162
+ requestId: TaskActivationBody.properties.requestId,
163
+ turnId: TaskActivationBody.properties.turnId,
164
+ assignmentVersion: TaskActivationBody.properties.assignmentVersion,
165
+ input: TaskInputSchema
166
+ }, {
167
+ additionalProperties: false,
168
+ description: 'Atomically create a task and activate it for the current response and chat.'
169
+ });
170
+ export const TaskContextSchema = Type.Object({
171
+ storeId: Type.String({ description: 'Owning artifact store.' }),
172
+ sessionId: Type.String({ description: 'Authenticated agent session.' }),
173
+ turnId: Nullable(Type.String({
174
+ description: 'Active response identifier; null after cancellation or while idle.'
175
+ })),
176
+ assignment: SessionTaskSchema,
177
+ taskIds: Type.Array(Type.String(), {
178
+ description: 'Effective tasks for the current response, or an empty list while idle.'
179
+ }),
180
+ source: Nullable(Type.Union([Type.Literal('turn_assignment'), Type.Literal('turn_activation')], { description: 'Source of the current response task context.' }))
181
+ }, {
182
+ additionalProperties: false,
183
+ description: 'Own session task context and latest persisted assignment.'
184
+ });
185
+ export const TaskActivationResultSchema = Type.Object({
186
+ task: TaskSchema,
187
+ assignment: SessionTaskSchema,
188
+ activation: Type.Object({
189
+ sessionId: Type.String({
190
+ description: 'Session whose response was activated.'
191
+ }),
192
+ turnId: Type.String({
193
+ description: 'Response in which activation occurred.'
194
+ }),
195
+ assignmentVersion: Type.Integer({
196
+ description: 'Assignment version committed by this activation.'
197
+ }),
198
+ taskId: Type.String({
199
+ description: 'Task selected by the original operation.'
200
+ }),
201
+ requestId: TaskCreateBody.properties.requestId
202
+ }, {
203
+ description: 'Immutable receipt of the original activation, not a claim about the current selection.'
204
+ }),
205
+ replayed: Type.Boolean({
206
+ description: 'True for an idempotent repeat; no activation is applied again.'
207
+ })
208
+ }, {
209
+ additionalProperties: false,
210
+ description: 'Task and persisted activation receipt.'
211
+ });
212
+ export function definitionHistorySchema(snapshot) {
213
+ return Type.Array(Type.Object({
214
+ snapshot,
215
+ requestId: Type.String({ description: 'Command identifier.' }),
216
+ actor: ArtifactActorSchema,
217
+ createdAt: Type.String({ description: 'UTC event timestamp.' })
218
+ }, { description: 'Immutable definition version event.' }), { description: 'Definition history in version order.' });
219
+ }
220
+ export function definitionHistoryPageSchema(snapshot) {
221
+ return Type.Object({
222
+ storeId: Type.String({ description: 'Owning store.' }),
223
+ storeEpoch: Type.Integer({ description: 'Store revision.' }),
224
+ items: definitionHistorySchema(snapshot),
225
+ nextCursor: Nullable(Type.String({ description: 'Next history page cursor.' }))
226
+ }, { description: 'Definition history page.' });
227
+ }
228
+ export const TaskChatHistorySchema = Type.Object({
229
+ storeId: Type.String({ description: 'Owning store.' }),
230
+ storeEpoch: Type.Integer({ description: 'Store revision.' }),
231
+ items: Type.Array(Type.Object({
232
+ seq: Type.Integer({
233
+ description: 'Store-wide assignment event sequence.'
234
+ }),
235
+ sessionId: Type.String({
236
+ description: 'Historical session identifier.'
237
+ }),
238
+ version: Type.Integer({
239
+ description: 'Session task assignment version.'
240
+ }),
241
+ taskIds: SessionTaskBody.properties.taskIds,
242
+ title: Type.String({ description: 'Session title snapshot.' }),
243
+ actor: ArtifactActorSchema,
244
+ createdAt: Type.String({ description: 'UTC event timestamp.' }),
245
+ requestId: TaskCreateBody.properties.requestId,
246
+ taskId: Type.String({ description: 'Task being queried.' }),
247
+ linked: Type.Boolean({
248
+ description: 'Task was assigned after this event.'
249
+ }),
250
+ available: Type.Boolean({
251
+ description: 'Session is available in this runtime.'
252
+ })
253
+ }, { description: 'Immutable task-session assignment event.' }), { description: 'Task-session assignment history.' }),
254
+ nextCursor: Nullable(Type.String({ description: 'Next history page cursor.' }))
255
+ }, { description: 'Task-session history page.' });
256
+ export const TaskChatLinksPageSchema = Type.Object({
257
+ storeId: Type.String({ description: 'Owning store.' }),
258
+ storeEpoch: Type.Integer({ description: 'Store revision.' }),
259
+ items: TaskChatLinksSchema,
260
+ nextCursor: Nullable(Type.String({ description: 'Next session-link page cursor.' }))
261
+ }, { description: 'Task session links page.' });
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,10 @@
1
+ export function artifactBody(content, bodyStartLine) {
2
+ let start = 0;
3
+ for (let line = 1; line < bodyStartLine; line++) {
4
+ const end = content.indexOf('\n', start);
5
+ if (end === -1)
6
+ return '';
7
+ start = end + 1;
8
+ }
9
+ return content.slice(start);
10
+ }
@@ -0,0 +1,22 @@
1
+ import { isRecord } from "./guards.js";
2
+ // Object property order does not change the identity of a JSON command.
3
+ export function canonicalJson(value) {
4
+ if (Array.isArray(value))
5
+ return `[${value.map(canonicalJson).join(',')}]`;
6
+ if (isRecord(value)) {
7
+ const object = value;
8
+ return `{${Object.keys(object)
9
+ .filter(key => object[key] !== undefined)
10
+ .sort()
11
+ .map(key => `${JSON.stringify(key)}:${canonicalJson(object[key])}`)
12
+ .join(',')}}`;
13
+ }
14
+ if (typeof value === 'number' && !Number.isFinite(value)) {
15
+ throw new TypeError('Only finite numbers can be canonicalized.');
16
+ }
17
+ const serialized = JSON.stringify(value);
18
+ if (serialized === undefined) {
19
+ throw new TypeError('Only JSON values can be canonicalized.');
20
+ }
21
+ return serialized;
22
+ }
@@ -0,0 +1,10 @@
1
+ // Keep the name to one path component; filesystem containment needs a separate check.
2
+ export function isSafePrefixedFilename(name, prefix) {
3
+ return (name.length > 0 &&
4
+ name !== '.' &&
5
+ name !== '..' &&
6
+ name.startsWith(prefix) &&
7
+ !name.includes('/') &&
8
+ !name.includes('\\') &&
9
+ !name.includes('\0'));
10
+ }
@@ -1,5 +1,7 @@
1
- // Require the standard UUID layout, version and variant fields.
2
- const UUID_PATTERN = /^[\da-f]{8}-[\da-f]{4}-[1-8][\da-f]{3}-[89ab][\da-f]{3}-[\da-f]{12}$/i;
1
+ // Share one UUID layout between runtime checks and JSON schemas.
2
+ export const UUID_PATTERN_SOURCE = '^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$';
3
+ // Compile once for ID checks outside schema validation.
4
+ const UUID_PATTERN = new RegExp(UUID_PATTERN_SOURCE);
3
5
  export function isUuid(value) {
4
6
  return typeof value === 'string' && UUID_PATTERN.test(value);
5
7
  }
@@ -0,0 +1,9 @@
1
+ // Share the type ID format between runtime validation and HTTP schemas.
2
+ // The end-of-input assertion keeps the pattern valid for JSON Schema engines
3
+ // that treat a dollar anchor as matching before a final line break.
4
+ export const ARTIFACT_TYPE_ID_PATTERN_SOURCE = '^[a-z][a-z0-9_-]{0,99}(?![\\s\\S])';
5
+ // Compile once because type IDs are checked for every definition command.
6
+ const ARTIFACT_TYPE_ID_PATTERN = new RegExp(ARTIFACT_TYPE_ID_PATTERN_SOURCE);
7
+ export function isValidArtifactTypeId(value) {
8
+ return typeof value === 'string' && ARTIFACT_TYPE_ID_PATTERN.test(value);
9
+ }
@@ -0,0 +1,13 @@
1
+ // Leave room for generated identifiers and suffixes in storage filenames.
2
+ const MAX_PREFIX_LENGTH = 100;
3
+ // This checks a prefix, not a complete filename. An empty prefix is allowed.
4
+ export function isValidFilenamePrefix(prefix) {
5
+ if (prefix.length > MAX_PREFIX_LENGTH || /[<>:"/\\|?*]/.test(prefix)) {
6
+ return false;
7
+ }
8
+ for (let index = 0; index < prefix.length; index++) {
9
+ if (prefix.charCodeAt(index) < 32)
10
+ return false;
11
+ }
12
+ return true;
13
+ }
@@ -0,0 +1,4 @@
1
+ /** True for a path that names a Markdown file. */
2
+ export function isMarkdownPath(path) {
3
+ return /\.(md|markdown)$/i.test(path);
4
+ }
@@ -0,0 +1,4 @@
1
+ /** True for a path that names a PDF file. */
2
+ export function isPdfPath(path) {
3
+ return /\.pdf$/i.test(path);
4
+ }
@@ -0,0 +1 @@
1
+ import{I as e,N as t,Pt as n,Y as r,Z as i,_ as a,d as o,dt as s,f as c,g as l,gt as u,l as d,p as f,u as p,y as m}from"./runtime-core.esm-bundler-DDnHUoIy.js";import{t as h}from"./QInput-BnqLJGXl.js";import{t as g}from"./QBtn-V3VXtJXi.js";import{c as _,s as v}from"./index-BTpokWxr.js";import{n as y}from"./vue-i18n.runtime-JOo8b7-t.js";import{r as b}from"./pinia-BfqEuvsi.js";import{n as x,t as S}from"./single-flight-CyDZB3rb.js";import{t as C}from"./access-store-CwkOl71l.js";import{n as w}from"./use-app-theme-fmVV2QM8.js";import{t as T}from"./_plugin-vue_export-helper-BDNMzG2s.js";import{t as E}from"./QForm-ClpSneeD.js";import{n as D,t as ee}from"./use-countdown-D6_qSOZJ.js";var O={class:`access-page fullscreen flex flex-center q-pa-md`},k={class:`text-h6`},A={key:0,class:`text-caption text-negative`},j={class:`access-page__code text-primary`,"aria-live":`polite`},M={class:`text-caption`},N={key:0,role:`alert`,class:`text-caption text-negative`},P={key:0,role:`alert`,class:`text-warning`},F={key:1,role:`alert`,class:`text-negative q-mt-sm`},I=2e3,L=T(m({__name:`AccessPage`,setup(m){let{t:T}=y(),{isDark:L}=w(),R=C(),{status:z,pairing:B,pairingDeadline:V,mode:H,error:U}=b(R),{registerInterval:W,removeInterval:G}=D(),K=ee(()=>V.value??void 0),q=s(``),J=s(!1),Y=s(``),X=s(!1),Z=s(!1),Q=d(()=>z.value===`pending`),$=S(async()=>{await R.check(),H.value===`app`&&window.location.reload()});async function te(){if(!J.value){J.value=!0,Y.value=``,X.value=!1;try{await R.requestAccess(q.value.trim()||void 0),H.value===`app`&&window.location.reload()}catch(e){Y.value=x(e)}finally{J.value=!1}}}return r(z,e=>{e===`pending`?Z.value=!0:e!==null&&(e===`none`&&Z.value&&(X.value=!0),Z.value=!1)},{immediate:!0}),r(Z,e=>{e?W(()=>void $(),I):G()},{immediate:!0}),t(()=>{Q.value&&$()}),(t,r)=>(e(),f(`div`,O,[a(_,{flat:``,bordered:``,class:`access-page__card`,dark:u(L)},{default:i(()=>[a(v,null,{default:i(()=>[p(`div`,k,n(u(T)(`access.title`)),1)]),_:1}),u(H)===`unavailable`?(e(),o(v,{key:0},{default:i(()=>[p(`p`,null,n(u(T)(`access.unavailable`)),1),u(U)?(e(),f(`p`,A,n(u(U)),1)):c(``,!0),a(g,{color:`primary`,label:u(T)(`access.retry`),onClick:u($)},null,8,[`label`,`onClick`])]),_:1})):Q.value&&u(B)?(e(),o(v,{key:1},{default:i(()=>[p(`p`,null,n(u(T)(`access.pending`)),1),p(`div`,j,n(u(B).code),1),p(`p`,M,n(u(T)(`access.expiresIn`,{time:u(K).label.value})),1),u(U)?(e(),f(`p`,N,n(u(T)(`access.unavailable`))+`: `+n(u(U)),1)):c(``,!0)]),_:1})):(e(),o(v,{key:2},{default:i(()=>[p(`p`,null,n(u(T)(`access.noAccess`)),1),X.value?(e(),f(`p`,P,n(u(T)(`access.ended`)),1)):c(``,!0),a(E,{class:`column q-gutter-sm`,onSubmit:te},{default:i(()=>[a(h,{modelValue:q.value,"onUpdate:modelValue":r[0]||=e=>q.value=e,dense:``,outlined:``,maxlength:u(64),label:u(T)(`access.nameLabel`),disable:J.value,dark:u(L)},null,8,[`modelValue`,`maxlength`,`label`,`disable`,`dark`]),a(g,{color:`primary`,type:`submit`,label:u(T)(`access.request`),loading:J.value},null,8,[`label`,`loading`])]),_:1}),Y.value?(e(),f(`p`,F,n(u(T)(`access.requestFailed`))+`: `+n(Y.value),1)):c(``,!0)]),_:1})),a(v,{class:`text-caption text-grey-7`},{default:i(()=>[l(n(u(T)(`access.httpWarning`)),1)]),_:1})]),_:1},8,[`dark`])]))}}),[[`__scopeId`,`data-v-2ced0245`]]);export{L as default};
@@ -0,0 +1,4 @@
1
+ import{B as e,I as t,Pt as n,Z as r,_ as i,d as a,g as o,gt as s,y as c}from"./runtime-core.esm-bundler-DDnHUoIy.js";import{t as l}from"./QBtn-V3VXtJXi.js";import{P as u}from"./index-BTpokWxr.js";import{It as d}from"./mdi-Byw1NZrZ.js";function f(e){return e.endsWith(`/`)}function p(e){return e.replace(/\/+$/,``)}function m(e){let t=f(e),n=p(e),r=n.lastIndexOf(`/`),i=r===-1?n:n.slice(r+1);return{name:t?`${i}/`:i,parent:r===-1?``:n.slice(0,r),directory:t}}function h(e){let t=/(?:^|\s)@([^\s@]*)$/.exec(e);if(!t)return null;let n=t[1]??``;return{query:n,start:e.length-n.length-1}}function g(e,t){let{name:n,parent:r}=m(e),i=t.some(t=>t!==e&&m(t).name===n),a=r.split(`/`).at(-1)??``;return i&&a!==``?`${a}/${n}`:n}function _(e){return e.map(e=>f(e)?{kind:`directory`,path:p(e)}:{kind:`file`,path:e})}function v(e){let t=[],n=``;function r(e){for(let i of e)i.type===`text`?n+=i.text:i.type===`br`?n+=`
2
+ `:i.type===`mention`?(n+=`@${i.path}`,t.includes(i.path)||t.push(i.path)):(n!==``&&!n.endsWith(`
3
+ `)&&(n+=`
4
+ `),r(i.children))}return r(e),{text:n.replace(/ /g,` `).trim(),paths:t}}var y=c({__name:`AddButton`,props:{tooltip:{}},setup(c){return(f,p)=>(t(),a(l,{flat:``,dense:``,round:``,class:`app-icon-control`,icon:s(d),"aria-label":c.tooltip},{default:r(()=>[i(u,{delay:s(500)},{default:r(()=>[o(n(c.tooltip),1)]),_:1},8,[`delay`]),e(f.$slots,`default`)]),_:3},8,[`icon`,`aria-label`]))}});export{v as a,g as i,h as n,m as o,_ as r,y as t};
@@ -0,0 +1 @@
1
+ import{B as e,D as t,I as n,L as r,Nt as i,Pt as a,Q as o,S as s,Y as c,Z as l,_ as u,d,dt as f,f as p,g as m,gt as h,jt as g,l as _,lt as v,p as y,y as b}from"./runtime-core.esm-bundler-DDnHUoIy.js";import{u as x}from"./event-rR76ioXz.js";import{t as S}from"./create-DedXY-KP.js";import{a as C,r as w,t as T}from"./render-Brao9Nj2.js";import{d as E}from"./QInput-BnqLJGXl.js";import{t as D}from"./QBtn-V3VXtJXi.js";import{n as O,t as k}from"./use-dark-BHObfh0O.js";import{P as A}from"./index-BTpokWxr.js";import{m as j}from"./single-flight-CyDZB3rb.js";import{t as M}from"./agent-store-Grbx4jkz.js";import{t as N}from"./safe-storage-CvVvrm4v.js";import{n as P}from"./QSpace-C7iAnGlU.js";import{n as F,t as I}from"./use-add-agent-context-BSHGL5iV.js";import{a as L}from"./ClosePopup-BtDeDZsk.js";import{t as R}from"./_plugin-vue_export-helper-BDNMzG2s.js";import{n as z}from"./use-workspace-navigation-AaRMWmjQ.js";import{n as B,t as V}from"./use-panel-width-BYOPuHat.js";var H=S({name:`QSplitter`,props:{...O,modelValue:{type:Number,required:!0},reverse:Boolean,unit:{type:String,default:`%`,validator:e=>[`%`,`px`].includes(e)},limits:{type:Array,validator:e=>e.length!==2||typeof e[0]!=`number`||typeof e[1]!=`number`?!1:e[0]>=0&&e[0]<=e[1]},emitImmediately:Boolean,horizontal:Boolean,disable:Boolean,beforeClass:[Array,String,Object],afterClass:[Array,String,Object],separatorClass:[Array,String,Object],separatorStyle:[Array,String,Object],separatorAriaLabel:String},emits:[`update:modelValue`],setup(e,{slots:n,emit:r}){let i=C(),a=k(e,i),l=f(null),u={before:f(null),after:f(null)},d=E(),p=_(()=>`q-splitter no-wrap ${e.horizontal?`q-splitter--horizontal column`:`q-splitter--vertical row`} q-splitter--${e.disable?`disabled`:`workable`}`+(a()?` q-splitter--dark`:``)),m=_(()=>e.horizontal?`height`:`width`),h=_(()=>e.reverse?`after`:`before`),g=_(()=>e.limits===void 0?e.unit===`%`?[10,90]:[50,1/0]:e.limits);function v(t){return(e.unit===`%`?t:Math.round(t))+e.unit}let y=_(()=>({[h.value]:{[m.value]:v(e.modelValue)}})),b,S,D,O,A;function j(t){if(t.isFirst){let t=l.value.getBoundingClientRect()[m.value];b=e.horizontal?`up`:`left`,S=e.unit===`%`?100:t,D=Math.min(S,g.value[1],Math.max(g.value[0],e.modelValue)),O=(e.reverse?-1:1)*(e.horizontal?1:i.lang.rtl?-1:1)*(e.unit===`%`?t===0?0:100/t:1),l.value.classList.add(`q-splitter--active`);return}if(t.isFinal){A!==e.modelValue&&r(`update:modelValue`,A),l.value.classList.remove(`q-splitter--active`);return}let n=D+O*(t.direction===b?-1:1)*t.distance[e.horizontal?`y`:`x`];A=Math.min(S,g.value[1],Math.max(g.value[0],n)),u[h.value].value.style[m.value]=v(A),e.emitImmediately&&e.modelValue!==A&&r(`update:modelValue`,A)}let M=_(()=>[[L,e.disable?void 0:j,void 0,{[e.horizontal?`vertical`:`horizontal`]:!0,prevent:!0,stop:!0,mouse:!0,mouseAllDir:!0}]]),N=_(()=>{let t={role:`separator`,"aria-orientation":e.horizontal?`horizontal`:`vertical`,"aria-label":e.separatorAriaLabel||i.lang.label.resize};if(e.disable)t[`aria-disabled`]=`true`;else{let n=g.value;t.tabindex=0,t[`aria-controls`]=d.value,t[`aria-valuemin`]=n[0],n[1]!==1/0&&(t[`aria-valuemax`]=n[1]),t[`aria-valuenow`]=Math.round(e.modelValue*100)/100}return t}),P=null;function F(t){let{keyCode:n}=t,a=e.horizontal?[38,40]:[37,39];if(n!==13&&n!==36&&n!==35&&!a.includes(n))return;x(t);let o=g.value,s=e.unit===`%`?100:l.value.getBoundingClientRect()[m.value],c;if(n===13)e.modelValue===o[0]?c=P===null?e.modelValue:P:(P=e.modelValue,c=o[0]);else if(n===36)c=o[0];else if(n===35)c=o[1];else{let t=(n===a[0]?-1:1)*(e.reverse?-1:1)*(e.horizontal?1:i.lang.rtl?-1:1);c=e.modelValue+t*(e.unit===`%`?1:10)}let u=Math.min(s,o[1],Math.max(o[0],c));u!==e.modelValue&&r(`update:modelValue`,u)}function I(e,t){e<t[0]?r(`update:modelValue`,t[0]):e>t[1]&&r(`update:modelValue`,t[1])}return c(()=>e.modelValue,e=>{I(e,g.value)}),c(()=>e.limits,()=>{t(()=>{I(e.modelValue,g.value)})}),()=>{let t=[s(`div`,{ref:u.before,id:h.value===`before`?d.value:void 0,class:[`q-splitter__panel q-splitter__before`+(e.reverse?` col`:``),e.beforeClass],style:y.value.before},w(n.before)),s(`div`,{class:[`q-splitter__separator`,e.separatorClass],style:e.separatorStyle,...N.value,onKeydown:e.disable?void 0:F},[o(s(`div`,{class:`q-splitter__separator-area absolute-full`},w(n.separator)),M.value)]),s(`div`,{ref:u.after,id:h.value===`after`?d.value:void 0,class:[`q-splitter__panel q-splitter__after`+(e.reverse?``:` col`),e.afterClass],style:y.value.after},w(n.after))];return s(`div`,{class:p.value,ref:l},T(n.default,t))}}}),U=[`inert`,`aria-hidden`],W=b({__name:`WorkspacePane`,props:{active:{type:Boolean}},setup(t){return r(F,()=>t.active),(r,a)=>(n(),y(`div`,{class:`fit column no-wrap`,inert:!t.active,"aria-hidden":!t.active,style:i(t.active?void 0:{visibility:`hidden`})},[e(r.$slots,`default`,{active:t.active})],12,U))}}),G=220,K=600,q=R(b({__name:`PanelResize`,props:{storageKey:{default:`githuman.fileListWidth`},defaultWidth:{default:260}},setup(t){let r=t,i=v(B(r.storageKey,G,K)??r.defaultWidth),a=_(()=>[G,K]),{narrow:o,pane:s,window:c}=z(),f=_(()=>!o.value||s.value===`list`&&!c.value),p=_(()=>!o.value||s.value===`content`&&!c.value);function m(e){o.value||j(e)&&(i.value=V(e,G,K),N.set(r.storageKey,String(i.value)))}return(t,r)=>(n(),d(H,{"model-value":i.value,limits:a.value,unit:`px`,class:g([`file-explorer`,{"file-explorer--narrow":h(o)}]),disable:h(o),"before-class":[`file-explorer__panel`,{"workspace-pane--hidden":h(o)&&h(s)!==`list`}],"after-class":[`file-explorer__content`,{"workspace-pane--hidden":h(o)&&h(s)!==`content`}],"onUpdate:modelValue":m},{before:l(()=>[u(W,{active:f.value},{default:l(()=>[e(t.$slots,`panel`,{},void 0,!0)]),_:3},8,[`active`])]),after:l(()=>[u(W,{active:p.value},{default:l(()=>[e(t.$slots,`content`,{},void 0,!0)]),_:3},8,[`active`])]),_:3},8,[`model-value`,`limits`,`class`,`disable`,`before-class`,`after-class`]))}}),[[`__scopeId`,`data-v-2b7615d5`]]),J=b({__name:`AddToAgentButton`,props:{context:{type:Function},label:{},text:{type:Boolean},tooltip:{type:Boolean}},setup(e){let t=e,r=M(),i=I();function o(){i(t.context)}return(t,i)=>h(r).enabled?(n(),d(D,{key:0,class:`app-icon-control`,flat:``,dense:``,"no-caps":``,round:!e.text,icon:h(P),label:e.text?e.label:void 0,"aria-label":e.label,onClick:o},{default:l(()=>[e.tooltip?(n(),d(A,{key:0,delay:h(500)},{default:l(()=>[m(a(e.label),1)]),_:1},8,[`delay`])):p(``,!0)]),_:1},8,[`round`,`icon`,`label`,`aria-label`])):p(``,!0)}});export{q as n,J as t};
@@ -0,0 +1 @@
1
+ import{B as e,I as t,S as n,Z as r,d as i,l as a,w as o,y as s}from"./runtime-core.esm-bundler-DDnHUoIy.js";import{t as c}from"./create-DedXY-KP.js";import{a as l,l as u,o as d,r as f}from"./render-Brao9Nj2.js";import{t as p}from"./viewport-store-NqQS7itT.js";var m=c({name:`QPage`,props:{padding:Boolean,styleFn:Function},setup(e,{slots:t}){let r=l(),i=o(u,d);if(i===d)return console.error(`QPage needs to be a deep child of QLayout`),d;if(o(`_q_pc_`,d)===d)return console.error(`QPage needs to be child of QPageContainer`),d;let s=a(()=>{let t=(i.header.space?i.header.size:0)+(i.footer.space?i.footer.size:0);if(typeof e.styleFn==`function`){let n=i.isContainer.value?i.containerHeight.value:r.screen.height;return e.styleFn(t,n)}return{minHeight:i.isContainer.value?i.containerHeight.value-t+`px`:r.screen.height===0?t===0?`100vh`:`calc(100vh - ${t}px)`:r.screen.height-t+`px`}}),c=a(()=>`q-page${e.padding?` q-layout-padding`:``}`);return()=>n(`main`,{class:c.value,style:s.value},f(t.default))}}),h=s({__name:`AppPage`,setup(n){let a=p();function o(e,t){let n=a.metrics.scale===1&&a.metrics.height>0?Math.min(t,a.metrics.height):t;return{height:`${Math.max(0,n-e)}px`,minHeight:`0px`}}return(n,a)=>(t(),i(m,{"style-fn":o},{default:r(()=>[e(n.$slots,`default`)]),_:3}))}});export{h as t};
@@ -0,0 +1,3 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/mermaid.core-DobO0deo.js","assets/index-BTpokWxr.js","assets/runtime-core.esm-bundler-DDnHUoIy.js","assets/use-router-link-D7geCGQI.js","assets/event-rR76ioXz.js","assets/is-B1kBQ5Va.js","assets/create-DedXY-KP.js","assets/debounce-rZaFFwsz.js","assets/render-Brao9Nj2.js","assets/QInput-BnqLJGXl.js","assets/uid-B1JNhznI.js","assets/QBtn-V3VXtJXi.js","assets/use-dark-BHObfh0O.js","assets/index-BQU3KK1E.css","assets/chunk-Y2CYZVJY-DsF7k-Jl.js","assets/src-oBChb5qS.js","assets/rolldown-runtime-Dd_uD5pT.js","assets/chunk-O7XYJQB3-B2aqz0sN.js","assets/purify.es--06brOip.js","assets/chunk-ZIGJFQKS-Eoi4K5bK.js","assets/dist-B_J_HbC0.js","assets/chunk-742MDFTN-ByLz4EcD.js","assets/chunk-MBY4JIJT-CSiiBtlX.js","assets/chunk-DUW6YSOI-Dgx8z5s3.js","assets/chunk-7PRAP22T-CY4NCrCY.js","assets/chunk-7INBJB4K-CK2i0csa.js","assets/chunk-J5ZVWO5B-oDCd-gWO.js","assets/rough.esm-Dy-Kn_BL.js","assets/chunk-5DYCD2WN-bhEAVIbQ.js","assets/chunk-Z7XXMR3K-Co7gzRY1.js","assets/line-D2vEKYRZ.js","assets/path-fybaL0A-.js","assets/array-BifhSqXX.js","assets/chunk-UA2S7LBM-B_-P_eR0.js"])))=>i.map(i=>d[i]);
2
+ import{A as e,I as t,M as n,Pt as r,S as i,X as a,Y as o,Z as s,_ as c,d as l,dt as u,g as d,gt as f,h as p,ht as m,jt as h,l as g,ot as _,p as v,q as y,u as b,ut as x,y as S}from"./runtime-core.esm-bundler-DDnHUoIy.js";import{_ as C}from"./use-router-link-D7geCGQI.js";import{t as w}from"./create-DedXY-KP.js";import{a as T,t as E}from"./render-Brao9Nj2.js";import{t as D}from"./uid-B1JNhznI.js";import{f as O,u as k}from"./QBtn-V3VXtJXi.js";import{n as A,t as j}from"./use-dark-BHObfh0O.js";import{A as ee,W as te,j as ne}from"./index-BTpokWxr.js";import{t as re}from"./purify.es--06brOip.js";import{n as M}from"./vue-i18n.runtime-JOo8b7-t.js";import{n as ie}from"./pinia-BfqEuvsi.js";import{a as N,n as P,t as ae}from"./single-flight-CyDZB3rb.js";import{t as oe}from"./repository-store-DZgQ5H7J.js";import{t as se}from"./agent-store-Grbx4jkz.js";import{n as ce}from"./use-server-events-CvcbsbIf.js";import{u as F}from"./workspace-navigation-xfxULfM7.js";import{i as le,l as ue,u as I}from"./markdown-Bm2wfvok.js";import{l as de,u as fe}from"./ClosePopup-BtDeDZsk.js";import{t as L}from"./_plugin-vue_export-helper-BDNMzG2s.js";import{d as R,h as z,m as B,p as V,t as pe}from"./preview-store-D7qF6SgX.js";import{n as me}from"./copy-code-DaqEfdXL.js";import{t as he}from"./project-files-store-OhGs_H7U.js";import{a as ge,o as _e}from"./date-DZIuZp-w.js";function H(e,t){try{let n=new URL(e,t);if(n.username||n.password)return null;let r,i;if(n.protocol===`githuman:`){if(n.host!==`artifact`||n.search||n.hash)return null;let e=n.pathname.split(`/`);if(e.length!==3)return null;r=e[1]??null,i=e[2]??null}else{if(n.origin!==new URL(t).origin)return null;let e=n.hash.startsWith(`#/`)?new URL(n.hash.slice(1),n.origin):n;if(e.pathname!==`/artifacts`)return null;r=e.searchParams.get(`storeId`),i=e.searchParams.get(`selectedId`)}return F(r)&&F(i)?{storeId:r,artifactId:i}:null}catch{return null}}function ve(t){let r=me();return o(t,r.reset,{flush:`sync`}),e(r.reset),n(r.reset),r}var ye=50;function be(e){let t=new Map,n=Promise.resolve(),r=null,i=0;async function a(t,n){let a=await e(),o=n?`dark`:`default`;r!==o&&(a.initialize({startOnLoad:!1,securityLevel:`strict`,suppressErrorRendering:!0,theme:o,look:`classic`,fontSize:12,themeVariables:{fontSize:`12px`},themeCSS:`.label div, .label span, .label p { line-height: 1.25 !important; }`}),r=o),i+=1;let{svg:s}=await a.render(`agent-mermaid-${i}`,t);return s}return{render(e,r){let i=`${r?`dark`:`light`}\n${e}`,o=t.get(i);if(o)return t.delete(i),t.set(i,o),o;let s=n.then(()=>a(e,r));if(n=s.catch(()=>void 0),t.set(i,s),t.size>ye){let e=t.keys().next();e.done||t.delete(e.value)}return s}}}async function U(){let{default:e}=await ne(async()=>{let{default:e}=await import(`./mermaid.core-DobO0deo.js`);return{default:e}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33]));return{initialize:t=>e.initialize(t),async render(t,n){try{return await e.render(t,n)}catch(e){throw document.getElementById(`d${t}`)?.remove(),e}}}}var W=be(U);function G(e){return re.sanitize(e,{USE_PROFILES:{svg:!0,svgFilters:!0,html:!0},ADD_TAGS:[`foreignObject`],FORBID_TAGS:[`img`,`picture`,`source`,`video`,`audio`,`iframe`,`form`,`input`,`button`,`a`],HTML_INTEGRATION_POINTS:{foreignobject:!0}})}function K(e){let t=e.querySelector(`svg`),n=t?.getAttribute(`viewBox`)?.split(/[\s,]+/).map(Number)?.[2];!t||n===void 0||!Number.isFinite(n)||n<=0||(t.style.maxWidth=`none`,t.style.width=`${Math.round(n)}px`,t.style.height=`auto`)}async function xe(e,t,n=W,r=`Could not draw the diagram`,i=()=>!0){let a=t?`dark`:`light`,o=[],s=0;for(let t of e.querySelectorAll(`pre > code.language-mermaid`)){let e=t.parentElement;e&&o.push({el:e,source:t.textContent??``,index:s++})}for(let t of e.querySelectorAll(`.agent-mermaid`))t.dataset.theme!==a&&o.push({el:t,source:t.dataset.source??``,index:Number(t.dataset.diagramIndex??0)});await Promise.all(o.map(async({el:o,source:s,index:c})=>{if(s.trim()!==``)try{let r=await n.render(s,t);if(!o.isConnected||!e.contains(o)||!i())return;let l=document.createElement(`div`);l.className=`agent-mermaid`,l.dataset.diagramIndex=String(c),l.dataset.source=s,l.dataset.theme=a,l.innerHTML=G(r),K(l),l.tabIndex=0,l.setAttribute(`role`,`button`),o.replaceWith(l)}catch(t){if(!o.isConnected||!e.contains(o)||!i())return;if(o.classList.add(`agent-mermaid--invalid`),!o.nextElementSibling?.classList.contains(`agent-mermaid-error`)){let e=document.createElement(`div`);e.className=`agent-mermaid-error`;let n=t instanceof Error?t.message.split(`
3
+ `)[0]:``;e.textContent=n?`${r}: ${n.slice(0,200)}`:r,o.after(e)}}}))}function Se(e,t,n,r,i=0){let{registerTimeout:a,removeTimeout:s}=te();o(()=>[m(e),m(t),m(n),m(r),m(i)],([r,i,o,c,l],u,d)=>{s();let f=!0;d(()=>{f=!1,s()}),r&&(i.includes(`language-mermaid`)||r.querySelector(`.agent-mermaid`))&&a(()=>{xe(r,o,void 0,c,()=>f&&m(e)===r&&m(t)===i&&m(n)===o)},l)},{flush:`post`,immediate:!0})}var Ce=[`innerHTML`],we=S({__name:`MarkdownContent`,props:{text:{},disableImages:{type:Boolean},headingAnchors:{type:Boolean},mermaidDebounce:{default:0},previewSource:{},previewTitle:{},fileLinks:{type:Boolean},variant:{default:`compact`}},setup(e){let n=I+`?`,r=e,{t:i}=M(),o=ee(),s=T(),c=y(`body`),l=pe(),u=se(),d=oe(),f=he(),p=g(()=>le(r.text,{disableImages:r.disableImages,copyLabel:i(`agent.code.copy`),headingAnchors:r.headingAnchors,fileLink:r.fileLinks?_:void 0})),{copyCodeBlock:m}=ve(p);Se(c,p,()=>s.dark.isActive,()=>i(`agent.diagram.failed`),()=>r.mermaidDebounce),a(()=>{r.fileLinks&&!f.ready&&f.prepare().catch(()=>{})});function _(e){if(!d.info||!f.ready||H(e,window.location.href))return e;let t=r.previewSource;try{let n=R(e,{repositoryPath:d.info.path,origin:window.location.origin,origins:f.origins,from:t?.type===`file`?t.path:``});return n?o.resolve(B(n,t?.type===`file`?t.ref:z)).href:e}catch{return o.resolve(I+`?`+ue).href}}function x(e){let t=e.target instanceof Element?e.target.closest(`a`):null;if(!t||!c.value?.contains(t))return!1;let n=H(t.getAttribute(`href`)??``,window.location.href);return n?e.ctrlKey||e.metaKey||e.shiftKey||e.altKey||e.button!==0?!0:(e.preventDefault(),l.open(`markdown`,{type:`artifact`,...n},{title:t.textContent?.trim()||i(`windows.preview`)}),!0):!1}async function S(e){if(!r.fileLinks)return!1;let t=e.target instanceof Element?e.target.closest(`a`):null;if(!t||!c.value?.contains(t))return!1;let a=t.getAttribute(`href`)??``,o=new URL(a,window.location.href),l=o.hash.startsWith(`#`+n)?o.hash.slice(1):o.pathname+o.search;if(o.origin!==window.location.origin||!l.startsWith(n))return!1;if(e.ctrlKey||e.metaKey||e.shiftKey||e.altKey||e.button!==0)return!0;e.preventDefault();try{let e=new URL(l,window.location.origin).searchParams,t=V(t=>e.get(t));if(!t)throw Error(i(`windows.fileLinkFailed`));await f.open(t.link,t.ref)}catch(e){s.notify({type:`negative`,message:P(e)})}return!0}function w(e){let t=e.target instanceof Element?e.target.closest(`.agent-mermaid`):null,n=r.previewSource;if(!t||!c.value?.contains(t)||!n)return;let a=Number(t.dataset.diagramIndex??0),o=r.previewTitle??(n.type===`message`?u.chats[n.sessionId]?.info.name??i(`agent.diagram.title`):n.type===`file`?n.path:i(`windows.preview`));l.open(`diagram`,n,{title:`${o} · ${i(`windows.diagram`)} · ${a+1}`,index:a,content:t.dataset.source??``,sourceText:r.text})}async function E(e){if(e.defaultPrevented||x(e)||await S(e))return;let t=e.target instanceof Element?e.target.closest(`[data-copy]`):null;if(!t){w(e);return}await m(t,{copy:i(`agent.code.copy`),copied:i(`agent.code.copied`)})||s.notify({type:`negative`,message:i(`agent.code.copyFailed`)})}return(n,r)=>(t(),v(`div`,null,[b(`div`,{ref_key:`body`,ref:c,class:h([`md-content`,{"md-document":e.variant===`document`}]),onClick:E,onKeydown:C(w,[`enter`]),innerHTML:p.value},null,42,Ce)]))}}),Te=k({xs:2,sm:4,md:6,lg:10,xl:14});function q(e){return{transform:`scaleX(${e})`}}var Ee=w({name:`QLinearProgress`,props:{...A,...O,value:{type:Number,default:0},buffer:Number,color:String,trackColor:String,reverse:Boolean,stripe:Boolean,indeterminate:Boolean,query:Boolean,rounded:Boolean,animationSpeed:{type:[String,Number],default:2100},instantFeedback:Boolean},setup(e,{slots:t}){let n=T(),r=j(e,n),a=g(()=>e.indeterminate||e.query),o=g(()=>({...Te(e.size),"--q-linear-progress-speed":`${e.animationSpeed}ms`})),s=g(()=>`q-linear-progress`+(e.color===void 0?``:` text-${e.color}`)+(e.reverse||e.query?` q-linear-progress--reverse`:``)+(e.rounded?` rounded-borders`:``)),c=g(()=>q(e.buffer===void 0?1:e.buffer)),l=g(()=>`with${e.instantFeedback?`out`:``}-transition`),u=g(()=>`q-linear-progress__track absolute-full q-linear-progress__track--${l.value} q-linear-progress__track--${r()?`dark`:`light`}`+(e.trackColor===void 0?``:` bg-${e.trackColor}`)),d=g(()=>q(a.value?1:e.value)),f=g(()=>`q-linear-progress__model absolute-full q-linear-progress__model--${l.value} q-linear-progress__model--${a.value?`in`:``}determinate`),p=g(()=>({width:`${e.value*100}%`})),m=g(()=>`q-linear-progress__stripe absolute-${e.reverse?`right`:`left`} q-linear-progress__stripe--${l.value}`);return()=>{let n=[i(`div`,{class:u.value,style:c.value}),i(`div`,{class:f.value,style:d.value})];return e.stripe&&!a.value&&n.push(i(`div`,{class:m.value,style:p.value})),i(`div`,{class:s.value,style:o.value,role:`progressbar`,"aria-valuemin":0,"aria-valuemax":1,"aria-valuenow":e.indeterminate||e.query?void 0:e.value},E(t.default,n))}}});function J(e,t){return`?limit=50`+(e?`&cursor=`+encodeURIComponent(e):``)+(t?`&search=`+encodeURIComponent(t):``)}var Y={tasks:(e,t,n)=>N(`/api/tasks`+J(e,n),t),types:(e,t,n)=>N(`/api/artifact-types`+J(e,n),t),task:(e,t)=>N(`/api/tasks/`+encodeURIComponent(e),t),type:(e,t)=>N(`/api/artifact-types/`+encodeURIComponent(e),t)};function X(e){let t=x({page:null,loading:!1,stale:!1,error:null}),n=!1,r=!1,i=0,a=null;function o(t){if(t.storeId!==e.storeId)throw Error(`The details belong to another artifact store.`);e.validate(t)}let s=ae(async()=>{if(!n||r)return;let s=++i;a?.abort();let c=new AbortController;a=c,t.loading=!0,t.error=null;try{let n=await e.fetch(null,c.signal);if(s!==i||r)return;o(n),t.page=n,t.stale=!1}catch(e){if(s!==i||r)return;t.error=P(e),t.stale=!0}finally{a===c&&(a=null),s===i&&(t.loading=!1)}});async function c(){let s=t.page;if(!n||r||t.loading||t.stale||!s)return;let c=e.cursor(s);if(c===null)return;let l=i,u=new AbortController;a=u,t.loading=!0,t.error=null;try{let n=await e.fetch(c,u.signal);if(l!==i||r)return;o(n),t.page=e.append(s,n)}catch(e){if(l!==i||r)return;t.error=P(e),t.stale=!0}finally{a===u&&(a=null),l===i&&(t.loading=!1)}}function l(e){return r?Promise.resolve():(!e&&n&&t.loading&&(++i,a?.abort(),t.loading=!1,t.stale=!0),n=e,e&&(!t.page||t.stale)?s():Promise.resolve())}function u(){return++i,a?.abort(),t.stale=!0,t.loading=!1,n&&!r?s():Promise.resolve()}function d(){r=!0,a?.abort(),n=!1,++i,t.page=null,t.loading=!1}return{state:t,refresh:s,more:c,setActive:l,invalidate:u,dispose:d}}var Z=4;function Q(e,t){if(e.storeEpoch!==t.storeEpoch)throw Error(`The definitions changed. Refresh before reading more.`);return{...t,items:[...e.items,...t.items]}}function De(e,t,n){let r=x(new Map),i=x(new Map),a=new Map,s=new Map,c=new Set,l=new Set,u=new Set,d=new Set,f,p=Promise.resolve(),m=0,h=0;function g(t,n,r){if(n.storeId!==e)throw Error(`Definition belongs to another store.`);(t.get(n.id)?.version??0)<=n.version&&(t.set(n.id,n),l.delete(r+`:`+n.id))}function _(t){if(t.some(t=>t.storeId!==e))throw Error(`Definitions belong to another store.`)}let v=n,y=X({storeId:e,fetch:(e,t)=>{let n=e===null?v:void 0;return v=void 0,n?Promise.resolve(n):Y.tasks(e??void 0,t)},cursor:e=>e.nextCursor,validate:e=>_(e.items),append:Q}),b=X({storeId:e,fetch:(e,t)=>Y.types(e??void 0,t),cursor:e=>e.nextCursor,validate:e=>_(e.items),append:Q});o([()=>y.state.page,()=>b.state.page],([e,t],[n,a])=>{if(e!==n)for(let t of e?.items??[])g(r,t,`task`);if(t!==a)for(let e of t?.items??[])g(i,e,`type`)},{flush:`sync`});function S(t){let n=``,r=X({storeId:e,fetch:(e,r)=>t===`task`?Y.tasks(e??void 0,r,n):Y.types(e??void 0,r,n),cursor:e=>e.nextCursor,validate:e=>_(e.items),append:Q});return d.add(r),r.setActive(!0),{state:r.state,more:r.more,refresh:r.refresh,setText(e){return e===n?Promise.resolve():(n=e,r.refresh())},close(){d.delete(r),r.dispose()}}}function C(e,t,n=!1){if(!t)return Promise.resolve();let o=e+`:`+t;if(s.set(o,{kind:e,id:t}),!n&&!l.has(o)&&(e===`task`?r.has(t):i.has(t)))return Promise.resolve();if(!n&&c.has(o))return Promise.reject(Error(`Definition is unavailable. Refresh to retry.`));let d=a.get(o);if(d)return d;let f=m,p=new AbortController;u.add(p);let h=(async()=>{if(e===`task`){let e=await Y.task(t,p.signal);if(f===m){if(e.id!==t)throw Error(`Task identity changed.`);g(r,e,`task`)}}else{let e=await Y.type(t,p.signal);if(f===m){if(e.id!==t)throw Error(`Type identity changed.`);g(i,e,`type`)}}})().catch(e=>{throw f===m&&c.add(o),e}).finally(()=>{u.delete(p),a.get(o)===h&&a.delete(o)});return a.set(o,h),h}function w(e,t=!1){let n=m,r=async()=>{for(let r=0;r<e.length;r+=Z){if(n!==m)return;await Promise.allSettled(e.slice(r,r+Z).map(e=>C(e.kind,e.id,t)))}},i=p.then(r,r);return p=i,i}function T(e){let t=new Map;for(let n of e){(!i.has(n.typeId)||l.has(`type:`+n.typeId))&&!c.has(`type:`+n.typeId)&&t.set(`type:`+n.typeId,{kind:`type`,id:n.typeId});for(let e of n.taskIds)(!r.has(e)||l.has(`task:`+e))&&!c.has(`task:`+e)&&t.set(`task:`+e,{kind:`task`,id:e})}return w([...t.values()])}async function E(){++m;for(let e of u)e.abort();u.clear(),a.clear(),c.clear();for(let e of r.keys())l.add(`task:`+e);for(let e of i.keys())l.add(`type:`+e);let e=[...s.values()];await Promise.all([y.invalidate(),b.invalidate(),...[...d].map(e=>e.invalidate())]),h&&await w(e.filter(e=>l.has(e.kind+`:`+e.id)||!(e.kind===`task`?r:i).has(e.id)),!0)}function D(){++h,h===1&&(f=t?.(()=>{E()}),E(),y.setActive(!0),b.setActive(!0));let e=!1;return()=>{if(!e&&(e=!0,--h,!h)){f?.(),f=void 0,++m;for(let e of u)e.abort();u.clear(),a.clear(),s.clear(),c.clear(),y.setActive(!1),b.setActive(!1)}}}return{storeId:e,tasks:y,types:b,taskLabels:r,typeLabels:i,resolve:C,resolveCatalog:T,openSearch:S,invalidate:E,retain:D}}var $=ie(`artifact-definitions`,()=>{let e=new Map,t=null,n=null;function r(n,r){t=n;let i=e.get(n);return i||(i=De(n,e=>ce([`artifacts:changed`],e).close,r),e.set(n,i)),i}function i(){return t?Promise.resolve(r(t)):(n??=Y.tasks().then(e=>r(e.storeId,e)).finally(()=>{n=null}),n)}return{forStore:r,current:i}});function Oe(e,t,n){let r=$(),i=u(null);return o(()=>[m(e),m(t)],([e,t],n,a)=>{i.value=e?r.forStore(e):null,i.value&&t&&a(i.value.retain())},{immediate:!0}),o(()=>[i.value,m(t),n?m(n):[]],([e,t,n])=>{e&&t&&e.resolveCatalog(n)},{immediate:!0}),i}function ke(e,t){let n=JSON.stringify(t);return e?.fingerprint===n?e:{fingerprint:n,requestId:D()}}var Ae=250,je=L(S({__name:`ArtifactDefinitionPicker`,props:{storeId:{},kind:{},modelValue:{},multiple:{type:Boolean}},emits:[`update:modelValue`],setup(e,{emit:n}){let i=e,a=n,{t:m}=M(),v=$().forStore(i.storeId),y=v.openSearch(i.kind);_(y.close);let b=u(``),x=u(null),S=g(()=>Array.isArray(i.modelValue)?i.modelValue:i.modelValue?[i.modelValue]:[]);function C(e){return i.kind===`task`?v.taskLabels.get(e):v.typeLabels.get(e)}let w=g(()=>S.value.flatMap(e=>C(e)??[]));function T(e){let t=`title`in e?e.title:e.label;return(`state`in e?e.state===`closed`:!e.active)?t+` · `+m(i.kind===`task`?`artifacts.definitions.closed`:`artifacts.definitions.inactive`):t}function E(e){let t=C(e);return t?T(t):e}let D=g(()=>i.multiple?void 0:E(S.value[0]??``)),O=g(()=>{let e=[...y.state.page?.items??[]];if(!b.value)for(let t of w.value)e.some(e=>e.id===t.id)||e.push(t);return e.map(e=>({value:e.id,label:T(e)}))});o(S,async e=>{x.value=null;try{await Promise.all(e.map(e=>v.resolve(i.kind,e)))}catch{S.value===e&&(x.value=m(`artifacts.definitions.unavailable`))}},{immediate:!0}),o(w,e=>{e.length===S.value.length&&(x.value=null)});function k(e,t){t(()=>{b.value=e,y.setText(e)})}function A(){y.state.stale&&y.refresh()}function j(e){e.to!==O.value.length-1||!y.state.page?.nextCursor||y.state.loading||y.state.stale||y.more().then(()=>e.ref.refresh())}return(n,i)=>(t(),l(ge,{class:h([`artifact-definition-picker`,{"artifact-definition-picker--single":!e.multiple}]),outlined:``,dense:``,clearable:``,"use-input":``,"emit-value":``,"map-options":``,multiple:e.multiple,"use-chips":e.multiple,"model-value":e.modelValue,"display-value":D.value,options:O.value,loading:f(y).state.loading,label:f(m)(e.kind===`task`?`artifacts.definitions.task`:`artifacts.definitions.type`),error:!!(x.value||f(y).state.error),"error-message":x.value||f(y).state.error||``,"input-debounce":Ae,onFilter:k,onPopupShow:A,onVirtualScroll:j,"onUpdate:modelValue":i[0]||=e=>a(`update:modelValue`,e)},p({"no-option":s(()=>[c(de,null,{default:s(()=>[c(fe,null,{default:s(()=>[d(r(f(m)(`artifacts.definitions.noMatches`)),1)]),_:1})]),_:1})]),_:2},[e.multiple?{name:`selected-item`,fn:s(e=>[c(_e,{removable:``,dense:``,tabindex:e.tabindex,onRemove:t=>e.removeAtIndex(e.index)},{default:s(()=>[d(r(E(typeof e.opt==`object`?e.opt.value:String(e.opt))),1)]),_:2},1032,[`tabindex`,`onRemove`])]),key:`0`}:void 0]),1032,[`class`,`multiple`,`use-chips`,`model-value`,`display-value`,`options`,`loading`,`label`,`error`,`error-message`]))}}),[[`__scopeId`,`data-v-064b1665`]]);export{X as a,G as c,$ as i,K as l,ke as n,Ee as o,Oe as r,we as s,je as t,W as u};
@@ -0,0 +1 @@
1
+ .artifact-definition-picker[data-v-064b1665]{min-width:0;max-width:100%}.artifact-definition-picker--single[data-v-064b1665] .q-field__native{flex-wrap:nowrap}