@tequila99/githuman 0.11.2 → 0.13.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.
- package/README.md +74 -2
- package/dist/cli/commands/mcp.js +112 -0
- package/dist/cli/commands/pi-acp.js +21 -0
- package/dist/cli/config.js +10 -1
- package/dist/cli/index.js +19 -8
- package/dist/cli/server-runtime.js +5 -0
- package/dist/server/adapters/agents/artifact-permission.js +88 -0
- package/dist/server/adapters/pi-acp/agent.js +98 -0
- package/dist/server/adapters/pi-acp/compatibility.js +57 -0
- package/dist/server/adapters/pi-acp/control.js +76 -0
- package/dist/server/adapters/pi-acp/errors.js +17 -0
- package/dist/server/adapters/pi-acp/extension.js +255 -0
- package/dist/server/adapters/pi-acp/launch.js +16 -0
- package/dist/server/adapters/pi-acp/mcp.js +153 -0
- package/dist/server/adapters/pi-acp/process.js +199 -0
- package/dist/server/adapters/pi-acp/session.js +409 -0
- package/dist/server/adapters/pi-acp/vendor/LICENSE +21 -0
- package/dist/server/adapters/pi-acp/vendor/README.md +29 -0
- package/dist/server/adapters/pi-acp/vendor/prompt.js +56 -0
- package/dist/server/app.js +95 -5
- package/dist/server/config/agents.js +4 -6
- package/dist/server/db/artifact-graph-migrations.js +56 -0
- package/dist/server/db/artifact-migrations.js +70 -0
- package/dist/server/db/artifact-review-migrations.js +24 -0
- package/dist/server/db/artifact-search-migrations.js +31 -0
- package/dist/server/db/artifact-validation-migrations.js +70 -0
- package/dist/server/db/index.js +3 -0
- package/dist/server/db/migrations.js +10 -0
- package/dist/server/db/sqlite-error.js +15 -0
- package/dist/server/db/transaction.js +40 -0
- package/dist/server/errors/artifacts.js +28 -0
- package/dist/server/errors/database.js +2 -0
- package/dist/server/hooks/access/local-request.js +5 -0
- package/dist/server/hooks/access/require-access.js +13 -2
- package/dist/server/repositories/artifact-catalog.repo.js +283 -0
- package/dist/server/repositories/artifact-files.repo.js +181 -0
- package/dist/server/repositories/artifact-graph.repo.js +50 -0
- package/dist/server/repositories/artifact-search.repo.js +192 -0
- package/dist/server/repositories/artifact-transition.repo.js +85 -0
- package/dist/server/repositories/artifact-validation.repo.js +157 -0
- package/dist/server/repositories/notes-catalog.repo.js +2 -10
- package/dist/server/repositories/task.repo.js +114 -0
- package/dist/server/routes/agent.js +8 -1
- package/dist/server/routes/artifact-actions.js +129 -0
- package/dist/server/routes/artifact-agent.js +199 -0
- package/dist/server/routes/artifact-definitions.js +163 -0
- package/dist/server/routes/artifact-transitions.js +80 -0
- package/dist/server/routes/artifacts.js +111 -0
- package/dist/server/routes/events.js +5 -1
- package/dist/server/services/agent/agent-session.js +180 -10
- package/dist/server/services/agent/context-builder.js +30 -2
- package/dist/server/services/agent/session-registry.js +136 -10
- package/dist/server/services/agent/turn-task-context.js +1 -0
- package/dist/server/services/artifact-authorization.service.js +199 -0
- package/dist/server/services/artifact-definition.service.js +96 -0
- package/dist/server/services/artifact-export.service.js +44 -0
- package/dist/server/services/artifact-graph-validation.js +541 -0
- package/dist/server/services/artifact-graph.service.js +81 -0
- package/dist/server/services/artifact-lifecycle.service.js +431 -0
- package/dist/server/services/artifact-maintenance.service.js +55 -0
- package/dist/server/services/artifact-search.service.js +331 -0
- package/dist/server/services/artifact-storage.service.js +646 -0
- package/dist/server/services/artifact-transition.service.js +608 -0
- package/dist/server/services/artifact-type.service.js +74 -0
- package/dist/server/services/artifact-validation-jobs.service.js +848 -0
- package/dist/server/services/device-connections.js +9 -1
- package/dist/server/services/review.service.js +6 -5
- package/dist/server/services/task.service.js +225 -0
- package/dist/server/utils/artifact-actor.js +13 -0
- package/dist/server/utils/artifact-page.js +42 -0
- package/dist/server/utils/take-within-bytes.js +16 -0
- package/dist/server/utils/text.js +7 -0
- package/dist/shared/agents/schemas.js +30 -0
- package/dist/shared/app/storage-constants.js +2 -0
- package/dist/shared/artifact-tools/descriptions.js +17 -0
- package/dist/shared/artifact-tools/instructions.js +14 -0
- package/dist/shared/artifact-tools/schemas.js +124 -0
- package/dist/shared/artifact-transitions/constants.js +21 -0
- package/dist/shared/artifact-transitions/schemas.js +111 -0
- package/dist/shared/artifact-transitions/transitions.js +61 -0
- package/dist/shared/artifact-transitions/types.js +1 -0
- package/dist/shared/artifacts/constants.js +34 -0
- package/dist/shared/artifacts/mcp-constants.js +24 -0
- package/dist/shared/artifacts/normalize.js +9 -0
- package/dist/shared/artifacts/schemas.js +874 -0
- package/dist/shared/artifacts/search.js +101 -0
- package/dist/shared/artifacts/types.js +1 -0
- package/dist/shared/events/schemas.js +1 -1
- package/dist/shared/events/types.js +1 -0
- package/dist/shared/tasks/schemas.js +261 -0
- package/dist/shared/tasks/types.js +1 -0
- package/dist/shared/utils/artifact-body.js +10 -0
- package/dist/shared/utils/canonical-json.js +22 -0
- package/dist/shared/utils/is-safe-prefixed-filename.js +10 -0
- package/dist/shared/utils/is-uuid.js +4 -2
- package/dist/shared/utils/is-valid-artifact-type-id.js +9 -0
- package/dist/shared/utils/is-valid-filename-prefix.js +13 -0
- package/dist/web/assets/AccessPage-D9xfFUBC.js +1 -0
- package/dist/web/assets/AddButton-DKNKmS1i.js +4 -0
- package/dist/web/assets/AddToAgentButton-wC1dzbDE.js +1 -0
- package/dist/web/assets/AppPage-Cozv2vqG.js +1 -0
- package/dist/web/assets/ArtifactsPage-IHUO7SbH.js +2 -0
- package/dist/web/assets/ArtifactsPage-nRD9XiRm.css +1 -0
- package/dist/web/assets/CancelButton-mkxRHwoZ.js +1 -0
- package/dist/web/assets/ClosePopup-Bd5a-Lu_.js +1 -0
- package/dist/web/assets/CreateButton-zCmb7snC.js +1 -0
- package/dist/web/assets/CreateReviewFabButton-D58IHr36.js +1 -0
- package/dist/web/assets/DialogHeader-BVrtb0Ri.js +1 -0
- package/dist/web/assets/DialogHeader-CPL9OtDV.css +1 -0
- package/dist/web/assets/{ErrorNotFound-DucDzOUJ.js → ErrorNotFound-fXS367lZ.js} +1 -1
- package/dist/web/assets/{IndexPage-D5PvyGrX.css → IndexPage-5V5GLtgi.css} +1 -1
- package/dist/web/assets/IndexPage-BJ1EQdlT.js +1 -0
- package/dist/web/assets/MainLayout-C3Ie5yOo.css +1 -0
- package/dist/web/assets/MainLayout-CeogGMHH.js +7 -0
- package/dist/web/assets/{NoteVisualEditor-CawpxEFB.css → NoteVisualEditor-DE4ACTRJ.css} +1 -1
- package/dist/web/assets/NoteVisualEditor-DqAZZig1.js +1054 -0
- package/dist/web/assets/NotesPage-C_eoCUl7.css +1 -0
- package/dist/web/assets/NotesPage-DXgI-kwN.js +4 -0
- package/dist/web/assets/{PdfPreview-rlkcqoMF.js → PdfPreview-ByeBjQMQ.js} +2 -2
- package/dist/web/assets/ProjectFilePage-DV1anYfN.js +1 -0
- package/dist/web/assets/QBtn-V3VXtJXi.js +1 -0
- package/dist/web/assets/QFab-DJhLqo9i.js +1 -0
- package/dist/web/assets/{QForm-Be8-ucuJ.js → QForm-ClpSneeD.js} +1 -1
- package/dist/web/assets/QInput-BnqLJGXl.js +1 -0
- package/dist/web/assets/QScrollArea-qf2G1s2r.js +1 -0
- package/dist/web/assets/QSeparator-B8uLaDiI.js +1 -0
- package/dist/web/assets/QSpace-CVp0CPR_.js +1 -0
- package/dist/web/assets/QSplitter-K2LjbupZ.js +1 -0
- package/dist/web/assets/QTabs-Bl_rIz4_.js +1 -0
- package/dist/web/assets/QVirtualScroll-BeEkuL6x.js +1 -0
- package/dist/web/assets/ReviewDetailPage-BgxcsTqY.css +1 -0
- package/dist/web/assets/ReviewDetailPage-CL4Dmz0L.js +1 -0
- package/dist/web/assets/ReviewsPage-BPJFTulG.js +1 -0
- package/dist/web/assets/SaveButton-D1q2suzR.js +3 -0
- package/dist/web/assets/SaveButton-Vtjvcbt0.css +1 -0
- package/dist/web/assets/SearchInput-DapVXrFj.js +1 -0
- package/dist/web/assets/StatusSwitcher-BtbSIr5q.js +1 -0
- package/dist/web/assets/{StatusSwitcher-D6i8_OfR.css → StatusSwitcher-DaE1ufAA.css} +1 -1
- package/dist/web/assets/TagFilterField-CPl-BxtL.js +1 -0
- package/dist/web/assets/TagFilterField-DjUH0m3_.css +1 -0
- package/dist/web/assets/{TerminalView-D4elkzN4.js → TerminalView-B56cEx8g.js} +12 -12
- package/dist/web/assets/{TerminalView-617DZuPt.css → TerminalView-BCeke4xd.css} +1 -1
- package/dist/web/assets/{abnfDiagram-O67JEVCF-Cugru96L.js → abnfDiagram-O67JEVCF-D_6l0gCA.js} +1 -1
- package/dist/web/assets/{access-store-Cdg8oRAM.js → access-store-CwkOl71l.js} +1 -1
- package/dist/web/assets/{agent-store-D_W7iD_B.js → agent-store-Cs-hu1v1.js} +5 -5
- package/dist/web/assets/architecture-7GRP2DOG-KT2-_RA5.js +1 -0
- package/dist/web/assets/{architectureDiagram-NJMV4G6O-7rMsE4Wt.js → architectureDiagram-NJMV4G6O-BFgjp9nL.js} +1 -1
- package/dist/web/assets/{blockDiagram-BEXU5L5S-BvSnwUrI.js → blockDiagram-BEXU5L5S-BWfbJk26.js} +1 -1
- package/dist/web/assets/{c4Diagram-YGBWAQC7-CgmQlCVx.js → c4Diagram-YGBWAQC7-oIqgOwQa.js} +1 -1
- package/dist/web/assets/channel-CAhty-fl.js +1 -0
- package/dist/web/assets/{chunk-3FUC2YCW-_i8udThz.js → chunk-3FUC2YCW-WI2pliXT.js} +1 -1
- package/dist/web/assets/{chunk-5DYCD2WN-Mhk2LlLk.js → chunk-5DYCD2WN-DYvaF8o2.js} +1 -1
- package/dist/web/assets/{chunk-742MDFTN-CDVcwgEp.js → chunk-742MDFTN-xd7B3x5h.js} +1 -1
- package/dist/web/assets/{chunk-7INBJB4K-C2c1fi9s.js → chunk-7INBJB4K-nsyx3RGB.js} +1 -1
- package/dist/web/assets/{chunk-7M6MHVWA-BeGkoIBL.js → chunk-7M6MHVWA-BxPQ9AEv.js} +1 -1
- package/dist/web/assets/{chunk-7PRAP22T-BVWTh9sT.js → chunk-7PRAP22T-CvHw2y-F.js} +1 -1
- package/dist/web/assets/{chunk-GTNCS2PH-gVhX7NZP.js → chunk-GTNCS2PH-DIfN1SOI.js} +1 -1
- package/dist/web/assets/{chunk-GWA4HPMP-BPdnIcQH.js → chunk-GWA4HPMP-2WZX1fG-.js} +1 -1
- package/dist/web/assets/{chunk-MBY4JIJT-B2VfO_06.js → chunk-MBY4JIJT-BL7akw7q.js} +1 -1
- package/dist/web/assets/{chunk-NETBCI7D-DZF_gITO.js → chunk-NETBCI7D-CQX1tY3W.js} +1 -1
- package/dist/web/assets/{chunk-O7XYJQB3-CDpBWiLq.js → chunk-O7XYJQB3-CtGXf4J6.js} +1 -1
- package/dist/web/assets/{chunk-UA2S7LBM-Iv7TSRE_.js → chunk-UA2S7LBM-C_3M_IIp.js} +1 -1
- package/dist/web/assets/{chunk-WEXAMYUT-Ce6goZ2Y.js → chunk-WEXAMYUT-6MO559WJ.js} +1 -1
- package/dist/web/assets/{chunk-Z7XXMR3K-CY6E6_Ux.js → chunk-Z7XXMR3K-CHJ55IlF.js} +1 -1
- package/dist/web/assets/{chunk-ZIGJFQKS-BLzsXZBc.js → chunk-ZIGJFQKS-533qcfPb.js} +1 -1
- package/dist/web/assets/{classDiagram-v2-NBCMYWYE-Dz0kD9P6.js → classDiagram-v2-NBCMYWYE-CFySVswx.js} +1 -1
- package/dist/web/assets/copy-code-XoEu_Yh6.js +1 -0
- package/dist/web/assets/create-DedXY-KP.js +1 -0
- package/dist/web/assets/{cynefin-OW5HDTMX-DWIx3wRm.js → cynefin-OW5HDTMX-Dfg_2VTu.js} +1 -1
- package/dist/web/assets/{cynefinDiagram-VND7K2PF-2D80uocv.js → cynefinDiagram-VND7K2PF-DaSXiPph.js} +1 -1
- package/dist/web/assets/{dagre-6A5THRUB-BLBhukn-.js → dagre-6A5THRUB-D7d1gbRO.js} +1 -1
- package/dist/web/assets/date-snFAXn1W.js +1 -0
- package/dist/web/assets/{devices-store-BfZKPOhg.js → devices-store-DB_tWC1Q.js} +1 -1
- package/dist/web/assets/{diagram-22UHCM2B-DY8dMLZ3.js → diagram-22UHCM2B-CNuTss_x.js} +1 -1
- package/dist/web/assets/{diagram-3UASUU5V-Bf6Od1NH.js → diagram-3UASUU5V--Rt3-ARV.js} +1 -1
- package/dist/web/assets/{diagram-ATOU4E4O-CjLGcYD5.js → diagram-ATOU4E4O-BP79L-gP.js} +1 -1
- package/dist/web/assets/{diagram-CDSNMT55-gIvaVNvs.js → diagram-CDSNMT55-CRO5cocs.js} +1 -1
- package/dist/web/assets/{diagram-MLGK6HIB-VR5kiCi5.js → diagram-MLGK6HIB-Difu0Zmh.js} +1 -1
- package/dist/web/assets/{diagram-MPIPVDR6-CdAdj25I.js → diagram-MPIPVDR6-grQ3ie17.js} +1 -1
- package/dist/web/assets/diff-store-D4XiTkfi.js +93 -0
- package/dist/web/assets/{dist-CBGyhCYv.js → dist-75uxNoTf.js} +1 -1
- package/dist/web/assets/{dist-CIMEaJAX.js → dist-9rzCziV2.js} +1 -1
- package/dist/web/assets/{dist-CEl-Ko94.js → dist-B9i6cUYu.js} +1 -1
- package/dist/web/assets/{dist-yzAhvE-V.js → dist-BU-fZfEv.js} +1 -1
- package/dist/web/assets/{dist-CTd7Kuqx.js → dist-BeUB43Ur.js} +1 -1
- package/dist/web/assets/{dist-C85t5q3z.js → dist-BxIdk5Al.js} +1 -1
- package/dist/web/assets/{dist-joQDFmfy.js → dist-By534Syk.js} +1 -1
- package/dist/web/assets/{dist-C54FrSb8.js → dist-DFjLCq-0.js} +1 -1
- package/dist/web/assets/{dist-lgw4kcVA.js → dist-DNrP7O-J.js} +1 -1
- package/dist/web/assets/{dist-BU8erXQF.js → dist-Du5VPTAq.js} +1 -1
- package/dist/web/assets/{dist-DLuI1PxH.js → dist-DyBqP777.js} +1 -1
- package/dist/web/assets/{ebnfDiagram-ZINNZB2B-irTAlMFO.js → ebnfDiagram-ZINNZB2B-DX2rcvMK.js} +1 -1
- package/dist/web/assets/{elk-276RUBZZ-Dj5ligvC.js → elk-276RUBZZ-DSHIl9hv.js} +1 -1
- package/dist/web/assets/{erDiagram-OPXOYQCR-Bvn6rbL1.js → erDiagram-OPXOYQCR-BIZVJO8N.js} +1 -1
- package/dist/web/assets/eventmodeling-NTZA5JFV-Bh_xDKx6.js +1 -0
- package/dist/web/assets/flowDiagram-KWPJA3E3-DXkIxaXL.js +1 -0
- package/dist/web/assets/{ganttDiagram-FUAMR5RP-BNGAUF5H.js → ganttDiagram-FUAMR5RP-D4kPfh4X.js} +1 -1
- package/dist/web/assets/{gitGraph-4MIJSDKK-DYSHOl72.js → gitGraph-4MIJSDKK-B41R-oAb.js} +1 -1
- package/dist/web/assets/{gitGraphDiagram-X574FWY7-BGwRHrPq.js → gitGraphDiagram-X574FWY7-xXrZiSJI.js} +1 -1
- package/dist/web/assets/i18n-Cfw_OfRR.js +1 -0
- package/dist/web/assets/icons-BIOTvmdT.js +1 -0
- package/dist/web/assets/index-B1Bugudn.js +2 -0
- package/dist/web/assets/index-BQU3KK1E.css +1 -0
- package/dist/web/assets/{info-A6RAGUB7-DNWR20pW.js → info-A6RAGUB7-CgSmK-La.js} +1 -1
- package/dist/web/assets/{infoDiagram-VRGFBTTK-BhNwJLY5.js → infoDiagram-VRGFBTTK-CDNEJ_R-.js} +1 -1
- package/dist/web/assets/{init-app-cg-B_TFN.js → init-app-C3tD3faT.js} +1 -1
- package/dist/web/assets/{is-D0waCELe.js → is-B1kBQ5Va.js} +1 -1
- package/dist/web/assets/{ishikawaDiagram-OU5B5YK6-CSkDpn64.js → ishikawaDiagram-OU5B5YK6-ZcU1IxFn.js} +1 -1
- package/dist/web/assets/{journeyDiagram-ZHPQQLJL-D2CEecC3.js → journeyDiagram-ZHPQQLJL-g-8ZRhJj.js} +1 -1
- package/dist/web/assets/{kanban-definition-PNTS6WVX-CQHlo4Hh.js → kanban-definition-PNTS6WVX-nfsfxVOE.js} +1 -1
- package/dist/web/assets/{line-C-izH1ks.js → line-BpuX_ban.js} +1 -1
- package/dist/web/assets/markdown-ogvtoQzt.js +16 -0
- package/dist/web/assets/mdi-Du7sIqtH.js +1 -0
- package/dist/web/assets/{mermaid-parser.core-CAGwq6D-.js → mermaid-parser.core-BBj_ep7Z.js} +3 -3
- package/dist/web/assets/{mermaid.core--xlI_0tK.js → mermaid.core-DP4USVSM.js} +4 -4
- package/dist/web/assets/{mindmap-definition-NLK3R4M7-BuCxhlwy.js → mindmap-definition-NLK3R4M7-C5GhUvi3.js} +1 -1
- package/dist/web/assets/{packet-AYTQ26CC-Bi7x5lJK.js → packet-AYTQ26CC-BIdb-vfg.js} +1 -1
- package/dist/web/assets/{pegDiagram-GJSIUBJH-qWzBPkCQ.js → pegDiagram-GJSIUBJH-DH-SdKj6.js} +1 -1
- package/dist/web/assets/{pie-WAS4IAKB-Di0wC4XB.js → pie-WAS4IAKB-Du3-jRjK.js} +1 -1
- package/dist/web/assets/{pieDiagram-5QR66LMP-BCDVY9q2.js → pieDiagram-5QR66LMP-CJh2ngqY.js} +1 -1
- package/dist/web/assets/pinia-BfqEuvsi.js +1 -0
- package/dist/web/assets/pinia-mdReENsc.js +1 -0
- package/dist/web/assets/preview-store-DOnSmm_C.js +2 -0
- package/dist/web/assets/{project-files-store-byqyG2ts.js → project-files-store-CHP6RYFI.js} +1 -1
- package/dist/web/assets/{quadrantDiagram-O4NWA36T-CpFObUjT.js → quadrantDiagram-O4NWA36T-DYsSScxc.js} +1 -1
- package/dist/web/assets/{radar-RG4KPBEZ-Br8yH8rq.js → radar-RG4KPBEZ-BBjvaVVB.js} +1 -1
- package/dist/web/assets/{railroad-74A4TZTK-CACSqhA-.js → railroad-74A4TZTK-B-CRncBU.js} +1 -1
- package/dist/web/assets/railroad-abnf-HS5TGJTU-D37zpoYN.js +1 -0
- package/dist/web/assets/railroad-ebnf-LZEXJU2U-ZnMxH6Ym.js +1 -0
- package/dist/web/assets/railroad-peg-WCYAUIDC-Dg3g-VsM.js +1 -0
- package/dist/web/assets/{railroadDiagram-XR7U4H2S-sYXRKGK1.js → railroadDiagram-XR7U4H2S-hqp-2UHb.js} +1 -1
- package/dist/web/assets/{render-C7fu7uYY.js → render-Brao9Nj2.js} +1 -1
- package/dist/web/assets/repository-store-DZgQ5H7J.js +1 -0
- package/dist/web/assets/{requirementDiagram-PLB6GJNP-C9I1JbQc.js → requirementDiagram-PLB6GJNP-Dhuw5jcQ.js} +1 -1
- package/dist/web/assets/runtime-core.esm-bundler-DDnHUoIy.js +1 -0
- package/dist/web/assets/{safe-storage-C76bPypO.js → safe-storage-BchoYSbq.js} +1 -1
- package/dist/web/assets/{sankeyDiagram-IPEJSGJF-CuvFQhPh.js → sankeyDiagram-IPEJSGJF-D5rCIxGR.js} +1 -1
- package/dist/web/assets/{sequenceDiagram-PO4LG4MO-CaVb9Y6e.js → sequenceDiagram-PO4LG4MO-YEHR4Mp-.js} +1 -1
- package/dist/web/assets/single-flight-CyDZB3rb.js +1 -0
- package/dist/web/assets/{stateDiagram-v2-GCMORJYK-Dp_APryr.js → stateDiagram-v2-GCMORJYK-9iWmz6Xf.js} +1 -1
- package/dist/web/assets/{swimlanes-2SLR337P-FclUI-k0.js → swimlanes-2SLR337P-Cjwvgt_n.js} +1 -1
- package/dist/web/assets/swimlanesDiagram-TC7HE7FX-gJwxhWoO.js +8 -0
- package/dist/web/assets/{terminal-store-BnEkXuBj.js → terminal-store-i7HHlWzR.js} +1 -1
- package/dist/web/assets/theme-CQ9InaWa.js +1 -0
- package/dist/web/assets/{timeline-definition-EJHVYXUP-BAqwqj3c.js → timeline-definition-EJHVYXUP-Cd5n2-Py.js} +1 -1
- package/dist/web/assets/{treeView-Q6P3EWNA-D87jJbUQ.js → treeView-Q6P3EWNA-C_QH9vtR.js} +1 -1
- package/dist/web/assets/{treemap-WGGIJYW6-B6nhGhRc.js → treemap-WGGIJYW6-CVnU7TVz.js} +1 -1
- package/dist/web/assets/use-add-agent-context-D5VqMr0p.js +1 -0
- package/dist/web/assets/use-app-theme-DgC4ivPF.js +1 -0
- package/dist/web/assets/use-countdown-D6_qSOZJ.js +1 -0
- package/dist/web/assets/use-notify-error-Dx2D9IEP.js +1 -0
- package/dist/web/assets/use-router-link-D7geCGQI.js +1 -0
- package/dist/web/assets/use-row-height-BgHg4-J-.js +1 -0
- package/dist/web/assets/use-server-events-CvcbsbIf.js +1 -0
- package/dist/web/assets/use-virtual-scroll-DixIsJk4.js +1 -0
- package/dist/web/assets/{use-workspace-navigation-CnebLvBV.js → use-workspace-navigation-Dq-Aw8Xq.js} +1 -1
- package/dist/web/assets/{usecaseDiagram-POWQR4AR-7YcIKxAb.js → usecaseDiagram-POWQR4AR-Cbj2Pvab.js} +1 -1
- package/dist/web/assets/{vennDiagram-UO4OBE2U-BZq5cFC4.js → vennDiagram-UO4OBE2U-2j79YqCN.js} +1 -1
- package/dist/web/assets/viewport-store-NqQS7itT.js +1 -0
- package/dist/web/assets/{vue-i18n.runtime-CEtihHHL.js → vue-i18n.runtime-JOo8b7-t.js} +2 -2
- package/dist/web/assets/{wardley-WFR3VGLG-BT8YO9H4.js → wardley-WFR3VGLG-wsMK7zm3.js} +1 -1
- package/dist/web/assets/{wardleyDiagram-VNRHLVJA-rDpXFf6D.js → wardleyDiagram-VNRHLVJA-D6PKTQIJ.js} +1 -1
- package/dist/web/assets/weighted-lru-BFtZKA_y.js +1 -0
- package/dist/web/assets/workspace-navigation-CoXKJJpP.js +1 -0
- package/dist/web/assets/{xychartDiagram-PMCCYNJV-ClniUuZc.js → xychartDiagram-PMCCYNJV-D1fQN7KG.js} +1 -1
- package/dist/web/index.html +10 -9
- package/package.json +5 -3
- package/dist/web/assets/AccessPage-CX3w30zw.js +0 -1
- package/dist/web/assets/AppPage-PFJG281y.js +0 -1
- package/dist/web/assets/CreateButton-Ch0b7juj.js +0 -1
- package/dist/web/assets/CreateReviewFabButton-DTuJzw3q.js +0 -1
- package/dist/web/assets/IndexPage-tgW07Qvs.js +0 -1
- package/dist/web/assets/MainLayout-C6yBhQnf.css +0 -1
- package/dist/web/assets/MainLayout-Cw4jpB1x.js +0 -8
- package/dist/web/assets/NoteVisualEditor-DiGhLhQg.js +0 -1054
- package/dist/web/assets/NotesPage-CVyVr9tl.js +0 -4
- package/dist/web/assets/NotesPage-CxGnZuVQ.css +0 -1
- package/dist/web/assets/PanelResize-B6FP9ZVB.js +0 -1
- package/dist/web/assets/ProjectFilePage-CkxfX9b1.js +0 -1
- package/dist/web/assets/QBtn-CyyV1Bx_.js +0 -1
- package/dist/web/assets/QExpansionItem-Dp9lbdVb.js +0 -4
- package/dist/web/assets/QFab-LOmZ9rev.js +0 -1
- package/dist/web/assets/QInput-Dq6131uz.js +0 -1
- package/dist/web/assets/QSelect-B34OqtIH.js +0 -1
- package/dist/web/assets/QSpace-BhOVGpQh.js +0 -1
- package/dist/web/assets/QVirtualScroll-BYgJ1Kh2.js +0 -1
- package/dist/web/assets/ReviewDetailPage-CkCilMNW.css +0 -1
- package/dist/web/assets/ReviewDetailPage-GNjBa4X0.js +0 -1
- package/dist/web/assets/ReviewsPage-An5fRS92.js +0 -1
- package/dist/web/assets/StatusSwitcher-DrFHHwGm.js +0 -1
- package/dist/web/assets/architecture-7GRP2DOG-BPCNj4lR.js +0 -1
- package/dist/web/assets/channel-CzRYxuLe.js +0 -1
- package/dist/web/assets/create-B9Tn5Xvi.js +0 -1
- package/dist/web/assets/diff-store-B4adGxC2.js +0 -93
- package/dist/web/assets/eventmodeling-NTZA5JFV-BJsTZ_nG.js +0 -1
- package/dist/web/assets/flUhRq6tzZclQEJ-Vdg-IuiaDsNa-Dr0goTwe.woff +0 -0
- package/dist/web/assets/flUhRq6tzZclQEJ-Vdg-IuiaDsNcIhQ8tQ-D-x-0Q06.woff2 +0 -0
- package/dist/web/assets/flowDiagram-KWPJA3E3-CvXh1Df7.js +0 -1
- package/dist/web/assets/i18n-DnlAcIbT.js +0 -1
- package/dist/web/assets/index-Cw7GJi3K.js +0 -2
- package/dist/web/assets/index-wsOPzloa.css +0 -1
- package/dist/web/assets/markdown-CvtLTiBZ.js +0 -16
- package/dist/web/assets/pinia-DO0AdKGg.js +0 -1
- package/dist/web/assets/pinia-uOZCmBi-.js +0 -1
- package/dist/web/assets/preview-store-DyO8G-ox.js +0 -1
- package/dist/web/assets/railroad-abnf-HS5TGJTU-DTBsRB1c.js +0 -1
- package/dist/web/assets/railroad-ebnf-LZEXJU2U-D3mrY4ar.js +0 -1
- package/dist/web/assets/railroad-peg-WCYAUIDC-33ZjWX0u.js +0 -1
- package/dist/web/assets/repository-store-DtRDth1L.js +0 -1
- package/dist/web/assets/runtime-core.esm-bundler-CAvPiMpd.js +0 -1
- package/dist/web/assets/single-flight-fPyIy7h5.js +0 -1
- package/dist/web/assets/swimlanesDiagram-TC7HE7FX-CuUvsn0e.js +0 -8
- package/dist/web/assets/theme-CnbaLamF.js +0 -1
- package/dist/web/assets/use-add-agent-context-xHAjjOf1.js +0 -1
- package/dist/web/assets/use-app-theme-DEowpWRR.js +0 -1
- package/dist/web/assets/use-countdown-DlcwwJrs.js +0 -1
- package/dist/web/assets/use-panel-width-CjSWCFr4.js +0 -1
- package/dist/web/assets/use-router-link-CUoYaYUw.js +0 -1
- package/dist/web/assets/use-row-height-BsE9-rO2.js +0 -1
- package/dist/web/assets/use-server-events-C2X4Xz00.js +0 -1
- package/dist/web/assets/use-virtual-scroll-BAZGswHv.js +0 -1
- package/dist/web/assets/viewport-store-CCHiY2QG.js +0 -1
- package/dist/web/assets/weighted-lru-BGovtJ2a.js +0 -1
- package/dist/web/assets/workspace-navigation-DdW0rSGz.js +0 -1
- /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
|
|
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
|
});
|
|
@@ -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,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
|
-
//
|
|
2
|
-
const
|
|
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 @@
|
|
|
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{o as _,s as v}from"./index-B1Bugudn.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-DgC4ivPF.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(v,{flat:``,bordered:``,class:`access-page__card`,dark:u(L)},{default:i(()=>[a(_,null,{default:i(()=>[p(`div`,k,n(u(T)(`access.title`)),1)]),_:1}),u(H)===`unavailable`?(e(),o(_,{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(_,{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(_,{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(_,{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{x as u}from"./index-B1Bugudn.js";import{It as d}from"./mdi-Du7sIqtH.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,I as t,L as n,Nt as r,Pt as i,Z as a,_ as o,d as s,f as c,g as l,gt as u,jt as d,l as f,lt as p,p as m,y as h}from"./runtime-core.esm-bundler-DDnHUoIy.js";import{t as g}from"./QBtn-V3VXtJXi.js";import{x as _}from"./index-B1Bugudn.js";import{m as v}from"./single-flight-CyDZB3rb.js";import{t as y}from"./agent-store-Cs-hu1v1.js";import{t as b}from"./safe-storage-BchoYSbq.js";import{n as x}from"./QSpace-CVp0CPR_.js";import{n as S,t as C}from"./use-add-agent-context-D5VqMr0p.js";import{t as w}from"./_plugin-vue_export-helper-BDNMzG2s.js";import{n as T}from"./use-workspace-navigation-Dq-Aw8Xq.js";import{n as E,r as D,t as O}from"./QSplitter-K2LjbupZ.js";var k=[`inert`,`aria-hidden`],A=h({__name:`WorkspacePane`,props:{active:{type:Boolean}},setup(i){return n(S,()=>i.active),(n,a)=>(t(),m(`div`,{class:`fit column no-wrap`,inert:!i.active,"aria-hidden":!i.active,style:r(i.active?void 0:{visibility:`hidden`})},[e(n.$slots,`default`,{active:i.active})],12,k))}}),j=220,M=600,N=w(h({__name:`PanelResize`,props:{storageKey:{default:`githuman.fileListWidth`},defaultWidth:{default:260}},setup(n){let r=n,i=p(D(r.storageKey,j,M)??r.defaultWidth),c=f(()=>[j,M]),{narrow:l,pane:m,window:h}=T(),g=f(()=>!l.value||m.value===`list`&&!h.value),_=f(()=>!l.value||m.value===`content`&&!h.value);function y(e){l.value||v(e)&&(i.value=E(e,j,M),b.set(r.storageKey,String(i.value)))}return(n,r)=>(t(),s(O,{"model-value":i.value,limits:c.value,unit:`px`,class:d([`file-explorer`,{"file-explorer--narrow":u(l)}]),disable:u(l),"before-class":[`file-explorer__panel`,{"workspace-pane--hidden":u(l)&&u(m)!==`list`}],"after-class":[`file-explorer__content`,{"workspace-pane--hidden":u(l)&&u(m)!==`content`}],"onUpdate:modelValue":y},{before:a(()=>[o(A,{active:g.value},{default:a(()=>[e(n.$slots,`panel`,{},void 0,!0)]),_:3},8,[`active`])]),after:a(()=>[o(A,{active:_.value},{default:a(()=>[e(n.$slots,`content`,{},void 0,!0)]),_:3},8,[`active`])]),_:3},8,[`model-value`,`limits`,`class`,`disable`,`before-class`,`after-class`]))}}),[[`__scopeId`,`data-v-2b7615d5`]]),P=h({__name:`AddToAgentButton`,props:{context:{type:Function},label:{},text:{type:Boolean},tooltip:{type:Boolean}},setup(e){let n=e,r=y(),o=C();function d(){o(n.context)}return(n,o)=>u(r).enabled?(t(),s(g,{key:0,class:`app-icon-control`,flat:``,dense:``,"no-caps":``,round:!e.text,icon:u(x),label:e.text?e.label:void 0,"aria-label":e.label,onClick:d},{default:a(()=>[e.tooltip?(t(),s(_,{key:0,delay:u(500)},{default:a(()=>[l(i(e.label),1)]),_:1},8,[`delay`])):c(``,!0)]),_:1},8,[`round`,`icon`,`label`,`aria-label`])):c(``,!0)}});export{N as n,P 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,2 @@
|
|
|
1
|
+
import{A as e,B as t,D as n,F as r,I as i,K as a,L as o,M as s,N as c,Nt as l,O as u,P as d,Pt as f,Q as p,S as m,T as h,V as g,Y as _,Z as v,_ as y,b,d as x,dt as S,f as C,g as w,gt as T,h as E,ht as D,jt as O,l as k,lt as A,p as j,q as ee,r as M,u as N,ut as te,w as ne,y as P,z as F}from"./runtime-core.esm-bundler-DDnHUoIy.js";import{h as re}from"./use-router-link-D7geCGQI.js";import{t as ie}from"./create-DedXY-KP.js";import{t as ae}from"./debounce-rZaFFwsz.js";import{a as oe,i as se,r as ce}from"./render-Brao9Nj2.js";import{C as le,a as ue,d as de,f as fe,i as pe,l as me,o as he,s as ge,t as I,u as _e}from"./QSeparator-B8uLaDiI.js";import{t as L}from"./QInput-BnqLJGXl.js";import{_ as ve,a as R,g as ye,l as z,t as B}from"./QBtn-V3VXtJXi.js";import{_ as be,a as xe,c as Se,d as Ce,g as we,n as Te,o as Ee,s as De,u as Oe,x as ke}from"./index-B1Bugudn.js";import{n as V}from"./vue-i18n.runtime-JOo8b7-t.js";import{Et as Ae,H as je,J as Me,K as Ne,P as Pe,R as Fe,Rt as Ie,Tt as Le,U as Re,W as ze,Wt as Be,Y as Ve,c as He,dt as Ue,en as We,i as Ge,kt as Ke,q as qe,wt as Je,xt as Ye,yt as Xe}from"./mdi-Du7sIqtH.js";import{n as Ze}from"./pinia-BfqEuvsi.js";import{a as Qe,l as $e,n as H,r as et,t as U}from"./single-flight-CyDZB3rb.js";import{t as tt}from"./agent-store-Cs-hu1v1.js";import{t as nt}from"./safe-storage-BchoYSbq.js";import{n as W}from"./use-server-events-CvcbsbIf.js";import{n as G}from"./use-app-theme-DgC4ivPF.js";import{i as K,t as rt}from"./QSpace-CVp0CPR_.js";import{u as it}from"./workspace-navigation-CoXKJJpP.js";import{r as at}from"./use-add-agent-context-D5VqMr0p.js";import{r as q}from"./use-virtual-scroll-DixIsJk4.js";import{c as ot,l as J,n as st,t as ct,u as Y}from"./ClosePopup-Bd5a-Lu_.js";import{t as X}from"./_plugin-vue_export-helper-BDNMzG2s.js";import{n as lt,t as ut}from"./QScrollArea-qf2G1s2r.js";import{n as dt,t as ft}from"./use-workspace-navigation-Dq-Aw8Xq.js";import{_ as pt,g as mt,v as Z,y as ht}from"./preview-store-DOnSmm_C.js";import{a as gt,c as _t,d as vt,f as yt,l as bt,n as xt,o as St,p as Ct,r as wt,s as Tt,t as Et,u as Dt}from"./SaveButton-D1q2suzR.js";import{n as Ot}from"./project-files-store-CHP6RYFI.js";import{n as kt,r as At,t as jt}from"./DialogHeader-BVrtb0Ri.js";import{a as Mt,i as Nt,o as Pt,r as Ft,s as It,t as Lt}from"./date-snFAXn1W.js";import{t as Rt}from"./QVirtualScroll-BeEkuL6x.js";import{t as zt}from"./AppPage-Cozv2vqG.js";import{n as Bt,t as Vt}from"./AddToAgentButton-wC1dzbDE.js";import{n as Ht,r as Ut,t as Wt}from"./TagFilterField-CPl-BxtL.js";import{t as Gt}from"./SearchInput-DapVXrFj.js";import{t as Kt}from"./CancelButton-mkxRHwoZ.js";var qt=ie({props:[`store`],setup(e,{slots:t}){let n=S(null);function i(){let t=`${e.store.isFetching.value?`un`:``}pauseAnimations`;for(let e of n.value.getElementsByTagName(`svg`))e[t]()}return c(i),r(i),()=>m(`div`,{ref:n,class:`q-infinite-scroll__loading`+(e.store.isFetching.value?``:` invisible`)},ce(t.default))}});function Jt(e){for(;e!==null&&e!==document.body;){if(window.getComputedStyle(e).position===`fixed`)return!0;e=e.parentElement}return!1}var Yt=ie({name:`QInfiniteScroll`,props:{offset:{type:Number,default:500},debounce:{type:[String,Number],default:100},scrollTarget:_e,initialIndex:{type:Number,default:0},disable:Boolean,reverse:Boolean,horizontal:Boolean},emits:[`load`],setup(t,{slots:r,emit:i}){let a=oe(),o=A(!1),l=A(!0),d=A(!1),f=S(null),p=S(null),h=S(null),g={isFetching:o},v=t.initialIndex,y,x=!1,C=k(()=>`q-infinite-scroll`+(t.horizontal?` q-infinite-scroll--horizontal`:``)+(t.reverse?` q-infinite-scroll--reverse`:``)+(d.value?` q-infinite-scroll--no-anchoring`:``)),w=k(()=>`q-infinite-scroll__sentinel q-infinite-scroll__sentinel--`+(t.horizontal?t.reverse?`start`:`end`:t.reverse?`top`:`bottom`)),T=k(()=>{if(!t.horizontal)return t.reverse?`top`:`bottom`;let e=a.lang.rtl===!0?`right`:`left`,n=a.lang.rtl===!0?`left`:`right`;return t.reverse?e:n});function E(e){return t.horizontal?ge(e):ue(e)}function D(e){return t.horizontal?Math.abs(pe(e)):me(e)}function O(e,n){t.horizontal?de(e,a.lang.rtl===!0?-n:n):fe(e,n)}function j(e){return t.horizontal?ve(e):ye(e)}c(()=>{L(t.debounce),le(),!t.disable&&te()&&!ne()&&F()});let{isIntersecting:ee,refreshIntersection:M}=Ut(()=>{let e=h.value,n=T.value,r=[`top`,`right`,`bottom`,`left`].map(e=>(e===n?t.offset:0)+`px`).join(` `);return{target:p,root:e!==null&&e!==window&&e.contains(f.value)?e:null,rootMargin:r,disabled:t.disable||!l.value,onIntersect:N}});function N(e){e.isIntersecting&&y()}function te(){let e=p.value;if(e===null)return!1;let n=h.value,r=n!==null&&n!==window&&n.contains(f.value)?n:null,{top:i,bottom:a,left:o,right:s}=r===null?{top:0,bottom:document.documentElement.clientHeight,left:0,right:document.documentElement.clientWidth}:r.getBoundingClientRect(),{top:c,bottom:l,left:u,right:d}=e.getBoundingClientRect();for(let t=e.parentElement;t!==null&&t!==r;t=t.parentElement){if(window.getComputedStyle(t).overflow===`visible`)continue;let e=t.getBoundingClientRect();if(e.top>c&&(c=e.top),e.bottom<l&&(l=e.bottom),e.left>u&&(u=e.left),e.right<d&&(d=e.right),c>l||u>d)return!1}let m=T.value;return l>=i-(m===`top`?t.offset:0)&&c<=a+(m===`bottom`?t.offset:0)&&d>=o-(m===`left`?t.offset:0)&&u<=s+(m===`right`?t.offset:0)}function ne(){return h.value===window&&(x&&=Jt(f.value),x||document.qScrollPrevented===!0)}function P(){t.disable||o.value||!l.value||!ee.value||ne()||F()}function F(){if(t.disable||o.value||!l.value)return;let e=h.value;v++,o.value=!0,t.reverse===!0&&(d.value=!0);let r=E(e);i(`load`,v,i=>{l.value&&(o.value=!1,n(()=>{t.reverse&&O(e,D(e)+E(e)-r),d.value=!1,i===!0?ce():M()}))})}function re(){v=0}function ie(){l.value?M():l.value=!0}function ce(){l.value&&(l.value=!1,o.value=!1,d.value=!1,y.cancel?.())}function le(){let e=he(f.value,t.scrollTarget),n=x;h.value=e,x=e===window&&Jt(f.value),x&&!n&&console.warn(`[Quasar] QInfiniteScroll: the window scroll target cannot react to content inside a position:fixed subtree (e.g. a Dialog), so automatic loading stays off here; set the scroll-target prop to a scrollable element of the overlay`),l.value&&t.reverse&&!x&&O(e,E(e)-j(e))}function I(){le(),M()}function _e(e){v=e}function L(e){e=Number.parseInt(e,10),y?.cancel?.(),y=e<=0?P:ae(P,Number.isNaN(e)?100:e)}let R=k(()=>!t.disable&&l.value);_(()=>t.disable,e=>{e?ce():ie()}),_(()=>t.scrollTarget,I),_(()=>t.debounce,L);let z=!1;u(()=>{z!==!1&&h.value!==null&&O(h.value,z)}),s(()=>{z=h.value!==null&&D(h.value)}),e(()=>{y?.cancel?.()});{let t=()=>{h.value===window&&M()};Oe(t),e(()=>{Ce(t)})}let B=b();return Object.assign(B.proxy,{poll:()=>{M()},trigger:F,stop:ce,reset:re,resume:ie,setIndex:_e,updateScrollTarget:I}),()=>{let e=se(r.default,[]),n=m(`div`,{ref:p,class:w.value});return R.value&&e[t.reverse?`unshift`:`push`](m(qt,{store:g},{default:r.loading})),e[t.reverse?`unshift`:`push`](n),m(`div`,{class:C.value,ref:f},e)}}}),Xt=P({__name:`RefreshButton`,props:{tooltip:{}},setup(e){return(n,r)=>(i(),x(B,{flat:``,dense:``,round:``,class:`app-icon-control`,icon:T(Ie),"aria-label":e.tooltip},{default:v(()=>[y(ke,{delay:T(500)},{default:v(()=>[w(f(e.tooltip),1)]),_:1},8,[`delay`]),t(n.$slots,`default`)]),_:3},8,[`icon`,`aria-label`]))}}),Zt=`GHT_ARTIFACT_INTEGRITY`;function Qt(e){if(e instanceof Error&&e.name===`AbortError`)return`abort`;if(e instanceof mt)return`integrity`;if(e instanceof et){if(e.code===Zt)return`integrity`;if(e.status===401||e.status===403)return`access`}return`transport`}function $t(e){return e===`ready`}function en(e){return e!==`integrity`}var tn=5;function nn(e){return[e.storeId,e.id,e.sha256,e.bytes,e.bodyStartLine].join(`:`)}var rn=Ze(`artifacts`,()=>{let e=S(null),t=S({}),n=S(null),r=S(!1),i=S(null),a=S(!1),o=S(null),s=S(``),c=S(!1),l=S(null),u=S(null),d=S(`idle`),f=S(null),p=S(null),m=S(!1),h=!0,g=null,_=!1,v=0,y=1,b=0,x=null,C=U(async()=>{if(!h)return;let o=++v,s=t.value;r.value=!0,i.value=null;try{if(y>tn)throw Error(`Too many loaded pages to refresh automatically. Reload the catalog.`);let t=y,r=await Z.search(s);if(o!==v)return;let i=r,c=1;for(;c<t;){if(!i.nextCursor){i=r,c=1;break}let e;try{e=await Z.search({...s,cursor:i.nextCursor})}catch(e){if(!(e instanceof et)||e.status!==409)throw e;i=r,c=1;break}if(o!==v)return;if(e.storeId!==r.storeId||e.storeEpoch!==r.storeEpoch||e.indexEpoch!==r.indexEpoch||!e.items.length){i=r,c=1;break}i={...e,items:[...i.items,...e.items]},++c}if(o!==v)return;y=c,e.value=i.storeId,n.value=i,a.value=!1}catch(e){if(o!==v)return;i.value=H(e),a.value=n.value!==null}finally{o===v&&(r.value=!1)}});function w(e){return h=!0,t.value=e,a.value=!1,++v,n.value=null,y=1,C()}function T(){return y=1,++v,C()}async function E(){if(r.value||a.value||!n.value?.nextCursor)return;let e=v,o=n.value;r.value=!0,i.value=null;try{let r=await Z.search({...t.value,cursor:o.nextCursor});if(e!==v)return;if(r.storeId!==o.storeId||r.storeEpoch!==o.storeEpoch||r.indexEpoch!==o.indexEpoch)throw Error(`The artifact catalog changed. Refresh the list.`);n.value={...r,items:[...o.items,...r.items]},++y}catch(t){if(e!==v)return;i.value=H(t),a.value=!0}finally{e===v&&(r.value=!1)}}function D(){s.value=``,g=null,d.value=`idle`,f.value=null,p.value=null,m.value=!1}async function O(e,t){u.value=e;let n=++b;if(x?.abort(),o.value?.id===e?.id&&o.value?.storeId===e?.storeId&&o.value||(o.value=null,D()),l.value=null,c.value=!!e,!e)return;let r=new AbortController;x=r;try{let i=await Z.get(e.id,r.signal);if(n!==b)return;if(i.storeId!==e.storeId||i.id!==e.id)throw Error(`This document belongs to another artifact store.`);o.value=i;let a=nn(i),c=d.value===`ready`&&g===a;if(!t&&c||!t&&d.value===`error`)return;c?m.value=!0:(s.value=``,g=null,d.value=`loading`),f.value=null,p.value=null;try{let e=await pt(i,r.signal);if(n!==b)return;s.value=e,g=a,d.value=`ready`}catch(e){if(n!==b)return;let t=Qt(e);if(t===`abort`)return;s.value=``,g=null,d.value=`error`,f.value=H(e),p.value=t}}catch(e){n===b&&(l.value=H(e),d.value===`loading`&&(d.value=`idle`))}finally{n===b&&(c.value=!1,m.value=!1)}}function k(e){return _=!1,O(e,!1)}let A=U(async()=>{if(!h)return;let e=_;_=!1,await O(u.value,e)});function j(){return h?(_=!0,A()):Promise.resolve()}function ee(){h=!1,_=!1,++v,++b,x?.abort(),r.value=!1,c.value=!1,m.value=!1,d.value===`loading`&&(d.value=`idle`)}return{storeId:e,input:t,catalog:n,loading:r,error:i,stale:a,document:o,body:s,documentLoading:c,documentError:l,contentState:d,contentError:f,contentErrorKind:p,verifying:m,search:w,refresh:C,reload:T,loadMore:E,select:k,refreshDocument:A,retryContent:j,cancel:ee}}),an=X(P({__name:`ArtifactStatusBadge`,props:{status:{}},setup(e){let t=e,{t:n}=V(),r=k(()=>n(`artifacts.statuses.`+t.status)),a=k(()=>`var(--artifact-status-${t.status})`);return(e,t)=>(i(),x(lt,{class:`artifact-status-badge`,style:l({background:a.value}),title:r.value},{default:v(()=>[w(f(r.value),1)]),_:1},8,[`style`,`title`]))}}),[[`__scopeId`,`data-v-6386b48f`]]),on=P({__name:`ArtifactTypeIcon`,props:{typeId:{},size:{}},setup(e){let t=new Map([[`adr`,Xe],[`plan`,Ue],[`specification`,Fe],[`prd`,Fe],[`proposal`,Le],[`research`,Ve],[`report`,We]]);return(n,r)=>(i(),x(z,{name:T(t).get(e.typeId)??T(`M6,2A2,2 0 0,0 4,4V20A2,2 0 0,0 6,22H18A2,2 0 0,0 20,20V8L14,2H6M6,4H13V9H18V20H6V4M8,12V14H16V12H8M8,16V18H13V16H8Z`),size:e.size,"aria-hidden":`true`,class:`app-icon-neutral`},null,8,[`name`,`size`]))}}),sn=[`title`],cn=[`datetime`,`title`],ln=[`title`],un=X(P({__name:`ArtifactCatalogItem`,props:{item:{},selected:{type:Boolean},storeId:{}},emits:[`select`],setup(e){let t=e,{isDark:n}=G(),r=Dt(),a=k(()=>t.storeId?r.forStore(t.storeId):null),o=k(()=>a.value?.typeLabels.get(t.item.typeId)?.label??t.item.typeId);function s(e){return a.value?.taskLabels.get(e)?.title??e}return(t,r)=>(i(),x(J,{role:`listitem`,"data-status":e.item.status,clickable:``,dark:T(n),class:`artifact-catalog__item`,active:e.selected,"aria-current":e.selected?`true`:void 0,onClick:r[0]||=n=>t.$emit(`select`,e.item)},{default:v(()=>[y(Y,{side:``,class:`artifact-catalog__side`},{default:v(()=>[y(on,{"type-id":e.item.typeId,size:`18px`,class:`artifact-catalog__icon`},null,8,[`type-id`])]),_:1}),y(Y,{class:`artifact-catalog__main`},{default:v(()=>[y(q,{class:`artifact-summary__title artifact-catalog__title ellipsis`,title:e.item.title},{default:v(()=>[w(f(e.item.title),1)]),_:1},8,[`title`]),y(q,{caption:``,class:`artifact-summary__caption artifact-catalog__metadata`},{default:v(()=>[y(an,{status:e.item.status},null,8,[`status`]),N(`span`,{class:`artifact-catalog__type ellipsis`,title:o.value},f(o.value),9,sn),N(`time`,{class:`artifact-catalog__date`,datetime:e.item.createdAt,title:e.item.createdAt},f(T(Lt)(e.item.createdAt)),9,cn),(i(!0),j(M,null,F(e.item.taskIds,e=>(i(),j(`span`,{key:e,class:`artifact-catalog__task ellipsis`,title:s(e)},f(s(e)),9,ln))),128))]),_:1})]),_:1})]),_:1},8,[`data-status`,`dark`,`active`,`aria-current`]))}}),[[`__scopeId`,`data-v-6a6d3f16`]]),dn=60,fn=X(P({__name:`ArtifactCatalog`,props:{items:{},selectedId:{},grouping:{},storeId:{},scrollTarget:{}},emits:[`select`],setup(e){let t=e,{t:n}=V(),{isDark:r}=G(),a=Dt();function o(e){if(!t.storeId)return e;let n=a.forStore(t.storeId);return t.grouping===`type`?n.typeLabels.get(e)?.label??e:n.taskLabels.get(e)?.title??e}let s=k(()=>{let e=new Map;for(let n of t.items){let r=t.grouping===`type`?[n.typeId]:t.grouping===`task`&&n.taskIds.length?n.taskIds:[``];for(let t of r){let r=e.get(t)??[];r.push(n),e.set(t,r)}}return[...e].flatMap(([e,n])=>[...t.grouping===`none`?[]:[{kind:`group`,key:`group:${e}`,label:e}],...n.map(t=>({kind:`artifact`,key:`${e}:${t.id}`,item:t}))])});return(t,a)=>(i(),x(Rt,{items:s.value,"scroll-target":e.scrollTarget,"virtual-scroll-item-size":dn,class:O([`artifact-catalog artifact-summary`,{"artifact-summary--dark":T(r)}]),role:`list`},{default:v(({item:r})=>[r.kind===`group`?(i(),x(q,{key:r.key,header:``,class:`artifact-catalog__group`},{default:v(()=>[w(f(r.label?o(r.label):T(n)(`artifacts.noTask`)),1)]),_:2},1024)):(i(),x(un,{key:r.key,item:r.item,selected:r.item.id===e.selectedId,"store-id":e.storeId,onSelect:a[0]||=e=>t.$emit(`select`,e)},null,8,[`item`,`selected`,`store-id`]))]),_:1},8,[`items`,`scroll-target`,`class`]))}}),[[`__scopeId`,`data-v-d1772a13`]]);function Q(e,t){let n=e[t];return typeof n==`string`?n:``}function pn(e,t){let n=e[t];return[...new Set((Array.isArray(n)?n:[n]).filter(e=>typeof e==`string`&&!!e))]}function mn(){return{status:null,typeIds:[],taskId:null,tags:[],tagMode:`all`,createdFrom:null,createdTo:null,group:`none`,mode:`auto`}}function hn(e){return e.status!==null||e.typeIds.length>0||e.taskId!==null||e.tags.length>0||e.createdFrom!==null||e.createdTo!==null||e.group!==`none`||e.mode!==`auto`}function gn(e,t){let n={...e},r={status:t.status,typeId:t.typeIds,taskId:t.taskId,tag:t.tags,tagMode:t.tags.length>1&&t.tagMode===`any`?`any`:null,from:t.createdFrom,to:t.createdTo,group:t.group===`none`?null:t.group,mode:t.mode===`auto`?null:t.mode};for(let[e,t]of Object.entries(r))(Array.isArray(t)?t.length:t)?n[e]=t:delete n[e];return n}function _n(e){let t=ht.find(t=>t===Q(e,`status`))??null,n=Q(e,`group`),r=Q(e,`storeId`),i=Q(e,`selectedId`),a=Q(e,`taskId`),o={status:t,typeIds:pn(e,`typeId`),taskId:it(a)?a:null,tags:pn(e,`tag`),tagMode:Q(e,`tagMode`)===`any`?`any`:`all`,createdFrom:Ft(Q(e,`from`))?Q(e,`from`):null,createdTo:Ft(Q(e,`to`))?Q(e,`to`):null,group:n===`type`||n===`task`?n:`none`,mode:Q(e,`mode`)===`exact`?`exact`:`auto`};return{input:{query:Q(e,`q`),mode:o.mode,sort:`createdAt`,limit:50,filters:{statuses:t===null?[...ht]:[t],...o.typeIds.length?{typeIds:o.typeIds}:{},...o.taskId?{taskIds:[o.taskId]}:{},...o.tags.length?{tags:o.tags,tagMode:o.tagMode}:{},...o.createdFrom?{createdFrom:Mt(o.createdFrom)}:{},...o.createdTo?{createdTo:Nt(o.createdTo)}:{}}},filters:o,group:o.group,selection:it(r)&&it(i)?{storeId:r,id:i}:null}}function vn(e,t,n={}){return{path:`/artifacts`,query:{...n,storeId:e,selectedId:t,uiPane:`content`,uiWindow:void 0}}}var yn=P({__name:`ArtifactFilterDialog`,props:h({storeId:{},tagOptions:{}},{modelValue:{type:Boolean,required:!0},modelModifiers:{},filter:{required:!0},filterModifiers:{}}),emits:[`update:modelValue`,`update:filter`],setup(e){let t=a(e,`modelValue`),n=a(e,`filter`),r=e,{t:o}=V(),{isDark:s}=G(),c=A(mn()),l=k(()=>hn(c.value)),u=k(()=>[...new Set([...r.tagOptions,...c.value.tags])]),d=k(()=>[{label:o(`artifacts.allStatuses`),value:null},...ht.map(e=>({label:o(`artifacts.statuses.`+e),value:e}))]),f=k(()=>[`none`,`type`,`task`].map(e=>({label:o(`artifacts.groups.`+e),value:e})));function p(){c.value={...n.value,typeIds:[...n.value.typeIds],tags:[...n.value.tags]}}function m(){c.value=mn()}function h(){n.value={...c.value},t.value=!1}function g(e){c.value.typeIds=Array.isArray(e)?e:[]}function _(e){c.value.taskId=typeof e==`string`?e:null}return(n,r)=>(i(),x(Ht,{modelValue:t.value,"onUpdate:modelValue":r[7]||=e=>t.value=e,"can-reset":l.value,width:`640px`,onPrepare:p,onReset:m,onApply:h},{default:v(()=>[y(Pt,{modelValue:c.value.status,"onUpdate:modelValue":r[0]||=e=>c.value.status=e,dark:T(s),outlined:``,dense:``,clearable:``,"emit-value":``,"map-options":``,options:d.value,"display-value":c.value.status===null?T(o)(`artifacts.allStatuses`):T(o)(`artifacts.statuses.`+c.value.status),label:T(o)(`artifacts.status`)},null,8,[`modelValue`,`dark`,`options`,`display-value`,`label`]),e.storeId?(i(),x(Tt,{key:`type:`+e.storeId,"model-value":c.value.typeIds,"store-id":e.storeId,kind:`type`,multiple:``,"onUpdate:modelValue":g},null,8,[`model-value`,`store-id`])):C(``,!0),e.storeId?(i(),x(Tt,{key:`task:`+e.storeId,"model-value":c.value.taskId,"store-id":e.storeId,kind:`task`,"onUpdate:modelValue":_},null,8,[`model-value`,`store-id`])):C(``,!0),y(Wt,{tags:c.value.tags,"onUpdate:tags":r[1]||=e=>c.value.tags=e,mode:c.value.tagMode,"onUpdate:mode":r[2]||=e=>c.value.tagMode=e,options:u.value,"allow-create":``},null,8,[`tags`,`mode`,`options`]),y(L,{modelValue:c.value.createdFrom,"onUpdate:modelValue":r[3]||=e=>c.value.createdFrom=e,dark:T(s),outlined:``,dense:``,clearable:``,"stack-label":``,type:`date`,max:c.value.createdTo??void 0,label:T(o)(`artifacts.createdFrom`)},null,8,[`modelValue`,`dark`,`max`,`label`]),y(L,{modelValue:c.value.createdTo,"onUpdate:modelValue":r[4]||=e=>c.value.createdTo=e,dark:T(s),outlined:``,dense:``,clearable:``,"stack-label":``,type:`date`,min:c.value.createdFrom??void 0,label:T(o)(`artifacts.createdTo`)},null,8,[`modelValue`,`dark`,`min`,`label`]),y(Pt,{modelValue:c.value.group,"onUpdate:modelValue":r[5]||=e=>c.value.group=e,dark:T(s),outlined:``,dense:``,"emit-value":``,"map-options":``,options:f.value,label:T(o)(`artifacts.group`)},null,8,[`modelValue`,`dark`,`options`,`label`]),y(Te,{dark:T(s),"model-value":c.value.mode===`auto`,label:T(o)(`artifacts.typos`),"onUpdate:modelValue":r[6]||=e=>c.value.mode=e?`auto`:`exact`},null,8,[`dark`,`model-value`,`label`])]),_:1},8,[`modelValue`,`can-reset`]))}}),bn=[`aria-label`],xn=P({__name:`ArtifactFilters`,props:h({storeId:{},navigationKey:{},tagOptions:{}},{modelValue:{required:!0},modelModifiers:{}}),emits:[`update:modelValue`],setup(e){let t=e,n=a(e,`modelValue`),r=S(!1),{t:o}=V(),s=k(()=>hn(n.value));return _(()=>t.navigationKey,()=>{r.value=!1}),(t,a)=>(i(),j(`div`,{class:`artifact-filters row no-wrap`,role:`group`,"aria-label":T(o)(`common.filters.title`)},[y(B,{class:`app-icon-control`,flat:``,round:``,dense:``,icon:s.value?T(Ne):T(qe),color:s.value?`primary`:void 0,"aria-label":T(o)(`common.filters.title`),"aria-pressed":s.value,onClick:a[0]||=e=>r.value=!0},{default:v(()=>[y(ke,{delay:T(500)},{default:v(()=>[w(f(T(o)(`common.filters.title`)),1)]),_:1},8,[`delay`])]),_:1},8,[`icon`,`color`,`aria-label`,`aria-pressed`]),s.value?(i(),x(B,{key:0,class:`app-icon-control`,flat:``,round:``,dense:``,icon:T(Me),"aria-label":T(o)(`common.filters.reset`),onClick:a[1]||=e=>n.value=T(mn)()},{default:v(()=>[y(ke,{delay:T(500)},{default:v(()=>[w(f(T(o)(`common.filters.reset`)),1)]),_:1},8,[`delay`])]),_:1},8,[`icon`,`aria-label`])):C(``,!0),y(yn,{modelValue:r.value,"onUpdate:modelValue":a[2]||=e=>r.value=e,filter:n.value,"onUpdate:filter":a[3]||=e=>n.value=e,"store-id":e.storeId,"tag-options":e.tagOptions},null,8,[`modelValue`,`filter`,`store-id`,`tag-options`])],8,bn))}}),Sn={key:0},Cn=P({__name:`ArtifactStatusBanners`,props:{loading:{type:Boolean},error:{},stale:{type:Boolean},partial:{type:Boolean}},setup(e){let{t:n}=V();return(r,a)=>(i(),j(M,null,[e.loading?(i(),x(yt,{key:0,indeterminate:``})):C(``,!0),e.error?(i(),x(K,{key:1,class:`text-negative`},E({default:v(()=>[w(f(e.error)+` `,1),e.stale?(i(),j(`div`,Sn,f(T(n)(`artifacts.stale`)),1)):C(``,!0)]),_:2},[r.$slots.action?{name:`action`,fn:v(()=>[t(r.$slots,`action`)]),key:`0`}:void 0]),1024)):C(``,!0),e.partial?(i(),x(K,{key:2},{default:v(()=>[w(f(T(n)(`artifacts.partial`)),1)]),_:1})):C(``,!0)],64))}}),wn={class:`artifact-catalog-panel column no-wrap fit`},Tn={class:`q-pa-sm`},En={class:`artifact-catalog-panel__toolbar row items-center`},Dn={key:0,class:`q-pa-md text-grey`},On={class:`row justify-center q-pa-sm`},kn=X(P({__name:`ArtifactCatalogPanel`,props:{filters:{},query:{},selectedId:{},searchKey:{},navigationKey:{},tagOptions:{},active:{type:Boolean}},emits:[`update:filters`,`update:query`,`select`],setup(e,{emit:t}){let n=e,r=t,{t:a}=V(),o=rn(),s=ee(`catalogScroll`),c=k(()=>s.value?.getScrollTarget()??null);async function l(e,t){try{await o.loadMore()}finally{t()}}return _(()=>n.searchKey,()=>s.value?.setScrollPosition(`vertical`,0)),(t,n)=>(i(),j(`section`,wn,[N(`div`,Tn,[N(`div`,En,[y(rt),y(Xt,{tooltip:T(a)(`artifacts.refresh`),loading:T(o).loading,onClick:n[0]||=()=>T(o).reload()},null,8,[`tooltip`,`loading`]),y(xn,{"model-value":e.filters,"store-id":T(o).storeId,"navigation-key":e.navigationKey,"tag-options":e.tagOptions,"onUpdate:modelValue":n[1]||=e=>r(`update:filters`,e)},null,8,[`model-value`,`store-id`,`navigation-key`,`tag-options`])]),y(Gt,{debounce:`300`,"model-value":e.query,placeholder:T(a)(`artifacts.search`),"aria-label":T(a)(`artifacts.search`),"onUpdate:modelValue":n[2]||=e=>r(`update:query`,e==null?null:String(e))},null,8,[`model-value`,`placeholder`,`aria-label`])]),y(I),y(Cn,{loading:T(o).loading,error:T(o).error,stale:T(o).stale,partial:!!T(o).catalog?.partial},null,8,[`loading`,`error`,`stale`,`partial`]),y(ut,{ref:`catalogScroll`,class:`col`,"content-style":`width: 100%`,"content-active-style":`width: 100%`},{default:v(()=>[c.value?(i(),x(Yt,{key:0,"scroll-target":c.value,offset:300,disable:T(o).loading||T(o).stale||!T(o).catalog?.nextCursor||!e.active,onLoad:l},{loading:v(()=>[N(`div`,On,[y(R,{color:`primary`})])]),default:v(()=>[y(fn,{"scroll-target":c.value,items:T(o).catalog?.items??[],"selected-id":e.selectedId,grouping:e.filters.group,"store-id":T(o).storeId,onSelect:n[3]||=e=>r(`select`,e)},null,8,[`scroll-target`,`items`,`selected-id`,`grouping`,`store-id`]),!T(o).loading&&!T(o).error&&!T(o).catalog?.items.length?(i(),j(`div`,Dn,f(T(a)(`artifacts.empty`)),1)):C(``,!0)]),_:1},8,[`scroll-target`,`disable`])):C(``,!0)]),_:1},512)]))}}),[[`__scopeId`,`data-v-4efcc79e`]]),An=Symbol(`artifact-refresh`);function jn(e){let t=new Set,n=S(!1);return o(An,t),{loading:n,refresh:U(async()=>{n.value=!0;try{await Promise.allSettled([e(),...Array.from(t,e=>e())])}finally{n.value=!1}})}}function Mn(e){let t=ne(An,void 0);t?.add(e),d(()=>t?.delete(e))}var Nn={key:0,role:`alert`,class:`text-negative artifact-export-error`},Pn=X(P({__name:`ArtifactExportMenu`,props:{artifactId:{},originalAllowed:{type:Boolean,default:!0}},setup(e){let t=e,{t:n}=V(),r=S(!1),a=S(null),o=null,s=!1;async function c(e){if(!r.value){o=new AbortController,r.value=!0,a.value=null;try{await Ot(`/api/artifacts/`+encodeURIComponent(t.artifactId)+`/export?format=`+e,`artifact-`+t.artifactId+(e===`original`?`.md`:`.metadata-history.json`),o.signal)}catch(e){s||(a.value=H(e))}finally{s||(r.value=!1)}}}return d(()=>{s=!0,o?.abort()}),(t,o)=>(i(),j(`div`,null,[y(B,{class:`app-icon-control`,flat:``,round:``,icon:T(Pe),loading:r.value,disable:r.value,"aria-label":T(n)(`artifacts.export.menu`)},{default:v(()=>[y(st,null,{default:v(()=>[y(ot,null,{default:v(()=>[p((i(),x(J,{clickable:``,disable:!e.originalAllowed,onClick:o[0]||=e=>c(`original`)},{default:v(()=>[y(Y,null,{default:v(()=>[y(q,null,{default:v(()=>[w(f(T(n)(`artifacts.export.original`)),1)]),_:1}),e.originalAllowed?C(``,!0):(i(),x(q,{key:0,caption:``},{default:v(()=>[w(f(T(n)(`artifacts.content.blocked`)),1)]),_:1}))]),_:1})]),_:1},8,[`disable`])),[[ct]]),p((i(),x(J,{clickable:``,onClick:o[1]||=e=>c(`metadata-history`)},{default:v(()=>[y(Y,null,{default:v(()=>[w(f(T(n)(`artifacts.export.history`)),1)]),_:1})]),_:1})),[[ct]])]),_:1})]),_:1})]),_:1},8,[`icon`,`loading`,`disable`,`aria-label`]),a.value?(i(),j(`div`,Nn,f(a.value),1)):C(``,!0)]))}}),[[`__scopeId`,`data-v-5607f417`]]),Fn={key:0,class:`q-pa-md artifact-metadata`},In={class:`artifact-metadata__fields`},Ln={key:1},Rn={class:`artifact-metadata__source`},zn=X(P({__name:`ArtifactMetadata`,props:{artifact:{}},setup(e){let t=e,n=Dt().forStore(t.artifact.storeId),r=S(!1),a=at(),o=we(),{t:s}=V();Mn(async()=>{r.value&&a()&&await n.invalidate()}),_(()=>[r.value&&a(),t.artifact.typeId,...t.artifact.taskIds],async(e,i,o)=>{if(!r.value||!a())return;let s=!1;o(()=>{s=!0});let{typeId:c,taskIds:l}=t.artifact;await n.resolve(`type`,c).catch(()=>{});for(let e=0;e<l.length;e+=4){if(s)return;await Promise.allSettled(l.slice(e,e+4).map(e=>n.resolve(`task`,e)))}});function c(e){return{path:`/artifacts`,query:{...o.query,taskId:e,uiPane:`list`,uiWindow:void 0}}}return(t,a)=>{let o=g(`router-link`);return i(),x(At,{modelValue:r.value,"onUpdate:modelValue":a[0]||=e=>r.value=e,icon:T(Je),label:T(s)(`artifacts.details.metadata`),class:`app-icon-expansion q-mb-md`,bordered:``},{default:v(()=>[r.value?(i(),j(`div`,Fn,[N(`dl`,In,[N(`dt`,null,f(T(s)(`artifacts.details.currentTitle`)),1),N(`dd`,null,f(e.artifact.title),1),a[1]||=w(),N(`dt`,null,f(T(s)(`artifacts.status`)),1),N(`dd`,null,f(T(s)(`artifacts.statuses.`+e.artifact.status)),1),N(`dt`,null,f(T(s)(`artifacts.type`)),1),N(`dd`,null,f(T(n).typeLabels.get(e.artifact.typeId)?.label??e.artifact.typeId),1),N(`dt`,null,f(T(s)(`artifacts.details.tasks`)),1),N(`dd`,null,[e.artifact.taskIds.length?(i(!0),j(M,{key:0},F(e.artifact.taskIds,e=>(i(),x(o,{key:e,to:c(e),class:`artifact-metadata__task`},{default:v(()=>[w(f(T(n).taskLabels.get(e)?.title??e),1)]),_:2},1032,[`to`]))),128)):(i(),j(`span`,Ln,f(T(s)(`artifacts.details.none`)),1))]),N(`dt`,null,f(T(s)(`artifacts.tag`)),1),N(`dd`,null,f(e.artifact.tags.join(`, `)||T(s)(`artifacts.details.none`)),1),N(`dt`,null,f(T(s)(`artifacts.details.version`)),1),N(`dd`,null,f(e.artifact.metadataVersion),1),N(`dt`,null,f(T(s)(`artifacts.details.created`)),1),N(`dd`,null,f(T(Lt)(e.artifact.createdAt)),1),N(`dt`,null,f(T(s)(`artifacts.details.updated`)),1),N(`dd`,null,f(T(Lt)(e.artifact.metadataUpdatedAt)),1),N(`dt`,null,f(T(s)(`artifacts.identity`)),1),N(`dd`,null,f(e.artifact.id),1),a[2]||=w(),N(`dt`,null,f(T(s)(`artifacts.store`)),1),N(`dd`,null,f(e.artifact.storeId),1),a[3]||=w(),a[4]||=N(`dt`,null,`SHA-256`,-1),N(`dd`,null,f(e.artifact.sha256),1),N(`dt`,null,f(T(s)(`artifacts.details.bytes`)),1),N(`dd`,null,f(e.artifact.bytes),1),e.artifact.sourcePath?(i(),j(M,{key:0},[N(`dt`,null,f(T(s)(`artifacts.details.sourcePath`)),1),N(`dd`,Rn,f(e.artifact.sourcePath),1)],64)):C(``,!0)])])):C(``,!0)]),_:1},8,[`modelValue`,`icon`,`label`])}}}),[[`__scopeId`,`data-v-07016dce`]]),$={options:(e,t)=>Qe(`/api/artifacts/`+encodeURIComponent(e)+`/transitions`,t),operations:(e,t)=>Qe(`/api/artifacts/`+encodeURIComponent(e)+`/transition-operations`,t),preview:(e,t,n)=>$e(`/api/artifacts/`+encodeURIComponent(e)+`/transition-previews`,{targetStatus:t},n),start:(e,t,n)=>$e(`/api/artifact-transition-operations`,{previewId:e,presetId:t,requestId:n}),cancel:e=>$e(`/api/artifact-transition-operations/`+encodeURIComponent(e)+`/cancel`)},Bn=[`succeeded`,`failed`,`cancelled`,`interrupted`];[...Bn];function Vn(e){return Bn.some(t=>t===e)}var Hn=`githuman:artifact-transition-preset:v1`,Un=6e5,Wn=Object.freeze({options:null,operation:null,error:null,stale:!1,loaded:!1}),Gn=Ze(`artifact-transition`,()=>{let e=te(new Map),t=new Set,n=new Map,r=new Map,i=new Map,a=new Map;function o(e){return a.get(e)??0}function s(e){a.set(e,o(e)+1),r.get(e)?.abort()}function c(t){return e.get(t)??Wn}function l(t,n){e.set(t,{...c(t),...n})}function u(e){let n=i.get(e);if(n)return n;{let n=U(async()=>{r.get(e)?.abort();let n=new AbortController;r.set(e,n);let i=o(e);try{let[r,a]=await Promise.all([$.options(e,n.signal),$.operations(e,n.signal)]);if(n.signal.aborted||i!==o(e))return;let s=a.items[0]??null;l(e,{options:r,operation:s!==null&&Vn(s.stage)&&(t.has(s.id)||Date.now()-s.updatedAt>=Un)?null:s,error:null,stale:!1,loaded:!0})}catch(t){!n.signal.aborted&&i===o(e)&&l(e,{error:H(t),stale:!0,loaded:!0})}});return i.set(e,n),n}}function d(e){return u(e)()}function f(e){r.get(e)?.abort(),r.delete(e),a.delete(e),i.delete(e)}function p(e,t){s(e);let n=c(e).options;l(e,{operation:t,error:null,...n?{options:{...n,activeOperationId:Vn(t.stage)?null:t.id}}:{}})}function m(){return nt.get(Hn)}async function h(e,r,i){let a=_t(n.get(e)??null,{previewId:r,presetId:i});n.set(e,a);try{let o=await $.start(r,i,a.requestId);return n.delete(e),nt.set(Hn,i),t.delete(o.id),p(e,o),o}finally{d(e)}}async function g(e,t){try{let n=await $.cancel(t);return p(e,n),n}finally{d(e)}}function _(e){let n=c(e).operation;n&&Vn(n.stage)&&(t.add(n.id),l(e,{operation:null}))}return{entries:e,entry:c,load:d,release:f,previewFor:$.preview,lastPreset:m,begin:h,cancel:g,dismiss:_}});function Kn(e){let t=Gn();_(()=>D(e),(e,n)=>{n&&t.release(n),t.load(e)},{immediate:!0});let n=W([`artifacts:changed`],()=>{t.load(D(e))});return Mn(()=>t.load(D(e))),d(()=>{n.close(),t.release(D(e))}),{entry:k(()=>t.entry(D(e))),store:t}}function qn(e,t,n,r){let i=Gn(),{registerTimeout:a,removeTimeout:o}=le(),s=S(null),c=S(!1),l=S(!1),u=S(!1),f=S(null),p=0,m=null;async function h(r=!1){let d=D(t);if(!D(n)||!d)return;let h=++p;m?.abort();let g=new AbortController;m=g,c.value=!0,f.value=null,l.value=!1,o();try{let t=await i.previewFor(D(e),d,g.signal);if(h!==p)return;s.value=t,u.value=r,a(()=>{l.value=!0},Math.max(0,t.expiresAt-Date.now()))}catch(e){h===p&&(s.value=null,f.value=H(e))}finally{h===p&&(c.value=!1)}}function g(){++p,m?.abort(),o(),s.value=null,c.value=!1,l.value=!1,u.value=!1,f.value=null}_([()=>D(n),()=>D(e),()=>D(t)],()=>{g(),D(n)&&h()},{immediate:!0});let v=W([`artifacts:changed`],()=>{D(n)&&!D(r)&&h(!0)});return d(()=>{v.close(),g()}),{preview:s,loading:c,expired:l,refreshed:u,error:f,load:h}}var Jn={class:`q-mb-md`},Yn={class:`text-subtitle2`},Xn={class:`q-my-xs`},Zn=P({__name:`ArtifactTransitionConsequences`,props:{preview:{}},setup(e){let{t}=V();return(n,r)=>(i(),j(M,null,[N(`div`,Jn,f(T(t)(`artifacts.transition.question`,{title:e.preview.title,from:T(t)(`artifacts.statuses.`+e.preview.fromStatus),to:T(t)(`artifacts.statuses.`+e.preview.targetStatus)})),1),N(`div`,Yn,f(T(t)(`artifacts.transition.changes`)),1),N(`ul`,Xn,[(i(!0),j(M,null,F(e.preview.changes,e=>(i(),j(`li`,{key:e.artifactId},f(T(t)(`artifacts.transition.change`,{title:e.title,from:T(t)(`artifacts.statuses.`+e.fromStatus),to:T(t)(`artifacts.statuses.`+e.toStatus)})),1))),128))])],64))}}),Qn={class:`text-weight-medium`},$n={class:`q-mt-xs`},er=P({__name:`ArtifactTransitionStatus`,props:{blockers:{},refreshed:{type:Boolean},expired:{type:Boolean},error:{}},setup(e){let{t}=V();return(n,r)=>(i(),j(M,null,[e.blockers.length?(i(),x(K,{key:0,dense:``,class:`bg-warning text-dark q-mt-sm`,role:`alert`},{default:v(()=>[N(`div`,Qn,f(T(t)(`artifacts.transition.blocked`)),1),(i(!0),j(M,null,F(e.blockers,e=>(i(),j(`div`,{key:e.code+e.message},f(e.message),1))),128)),N(`div`,$n,f(T(t)(`artifacts.transition.blockedHint`)),1)]),_:1})):C(``,!0),e.refreshed?(i(),x(K,{key:1,dense:``,class:`q-mt-sm`,role:`status`},{default:v(()=>[w(f(T(t)(`artifacts.transition.refreshed`)),1)]),_:1})):C(``,!0),e.expired?(i(),x(K,{key:2,dense:``,class:`q-mt-sm`,role:`status`},{default:v(()=>[w(f(T(t)(`artifacts.transition.expired`)),1)]),_:1})):C(``,!0),e.error?(i(),x(K,{key:3,dense:``,class:`text-negative q-mt-sm`,role:`alert`},{default:v(()=>[w(f(T(t)(`artifacts.transition.startFailed`))+`: `+f(e.error),1)]),_:1})):C(``,!0)],64))}}),tr={key:1},nr={key:0,class:`text-negative q-mt-sm`},rr=X(P({__name:`ArtifactTransitionDialog`,props:h({artifactId:{},target:{},contentReady:{type:Boolean,default:!0}},{modelValue:{type:Boolean,required:!0},modelModifiers:{}}),emits:[`update:modelValue`],setup(e){let t=e,n=a(e,`modelValue`),{t:r}=V(),o=tt(),s=Gn(),c=S(!1),l=S(null),u=S(null),{preview:d,loading:p,expired:m,refreshed:h,error:g,load:b}=qn(()=>t.artifactId,()=>t.target,n,c),w=k(()=>o.presets),E=k(()=>l.value??g.value),D=k(()=>!!d.value?.canConfirm&&!m.value&&!p.value&&!c.value&&t.contentReady&&w.value.some(e=>e.id===u.value&&e.available));_(n,e=>{e&&(u.value=s.lastPreset(),l.value=null)},{immediate:!0}),_(()=>t.contentReady,e=>{!e&&n.value&&!c.value&&(n.value=!1)});function O(){l.value=null,b()}async function A(){if(D.value&&d.value&&u.value){c.value=!0,l.value=null;try{await s.begin(t.artifactId,d.value.previewId,u.value),n.value=!1}catch(e){l.value=H(e)}finally{c.value=!1}}}return(e,t)=>(i(),x(Se,{modelValue:n.value,"onUpdate:modelValue":t[2]||=e=>n.value=e,persistent:``},{default:v(()=>[y(De,{class:`artifact-transition-dialog`},{default:v(()=>[y(jt,{title:T(r)(`artifacts.transition.dialogTitle`),"close-label":T(r)(`artifacts.transition.close`),"disable-close":c.value},null,8,[`title`,`close-label`,`disable-close`]),y(Ee,{class:`q-pt-none`},{default:v(()=>[T(d)?(i(),x(Zn,{key:0,preview:T(d)},null,8,[`preview`])):T(p)?(i(),j(`div`,tr,f(T(r)(`artifacts.transition.loading`)),1)):C(``,!0),y(er,{blockers:T(d)?.blockers??[],refreshed:T(h),expired:T(m),error:E.value},null,8,[`blockers`,`refreshed`,`expired`,`error`])]),_:1}),y(Ee,{class:`q-pt-none`},{default:v(()=>[y(Pt,{modelValue:u.value,"onUpdate:modelValue":t[0]||=e=>u.value=e,dense:``,outlined:``,"emit-value":``,"map-options":``,"option-value":`id`,"option-label":`title`,"option-disable":e=>!e.available,options:w.value,label:T(r)(`artifacts.transition.validator`),hint:T(r)(`artifacts.transition.validatorHint`)},null,8,[`modelValue`,`option-disable`,`options`,`label`,`hint`]),w.value.some(e=>e.available)?C(``,!0):(i(),j(`div`,nr,f(T(r)(`artifacts.transition.validatorNone`)),1))]),_:1}),y(xe,{align:`right`},{default:v(()=>[T(m)||E.value?(i(),x(xt,{key:0,label:T(r)(`artifacts.transition.refresh`),disable:T(p)||c.value,onClick:O},null,8,[`label`,`disable`])):C(``,!0),y(xt,{label:T(r)(`artifacts.transition.no`),disable:c.value,onClick:t[1]||=e=>n.value=!1},null,8,[`label`,`disable`]),y(Et,{label:T(r)(`artifacts.transition.yes`),loading:c.value,disable:!D.value,onClick:A},null,8,[`label`,`loading`,`disable`])]),_:1})]),_:1})]),_:1},8,[`modelValue`]))}}),[[`__scopeId`,`data-v-3a56a119`]]),ir=[`conflict`,`incomplete`,`pass`];function ar(e){return e.validationId!==null&&e.verdict!==null&&ir.includes(e.verdict)}var or={key:0,class:`text-caption`},sr=X(P({__name:`ArtifactTransitionResult`,props:h({operation:{}},{modelValue:{type:Boolean,required:!0},modelModifiers:{}}),emits:[`update:modelValue`],setup(e){let t=e,n=a(e,`modelValue`),{t:r}=V(),{report:o,titles:s,loading:c,error:l,load:u}=wt(()=>t.operation.validationId,n);return(t,a)=>{let d=g(`router-link`);return i(),x(Se,{modelValue:n.value,"onUpdate:modelValue":a[1]||=e=>n.value=e},{default:v(()=>[y(De,{class:`artifact-transition-result`},{default:v(()=>[y(jt,{title:T(r)(`artifacts.transition.result`),"close-label":T(r)(`artifacts.transition.close`)},null,8,[`title`,`close-label`]),y(Ee,{class:`q-pt-none`},{default:v(()=>[T(o)?(i(),j(`div`,or,f(T(r)(`artifacts.actions.verdict`))+`: `+f(T(o).verdict),1)):C(``,!0)]),_:1}),y(Ee,{class:`q-pt-none`},{default:v(()=>[y(gt,{report:T(o),titles:T(s),loading:T(c),error:T(l)},null,8,[`report`,`titles`,`loading`,`error`]),e.operation.reportArtifactId?(i(),x(d,{key:0,class:`q-mt-md block`,to:{name:`artifacts`,query:{storeId:e.operation.storeId,selectedId:e.operation.reportArtifactId}}},{default:v(()=>[w(f(T(r)(`artifacts.transition.report`)),1)]),_:1},8,[`to`])):C(``,!0)]),_:1}),y(xe,{align:`right`},{default:v(()=>[T(l)?(i(),x(xt,{key:0,label:T(r)(`artifacts.transition.retry`),onClick:T(u)},null,8,[`label`,`onClick`])):C(``,!0),y(xt,{label:T(r)(`artifacts.transition.close`),onClick:a[0]||=e=>n.value=!1},null,8,[`label`])]),_:1})]),_:1})]),_:1},8,[`modelValue`])}}}),[[`__scopeId`,`data-v-14ccd526`]]),cr=[`aria-label`],lr={class:`text-caption`},ur={key:1,class:`text-caption text-negative`},dr={key:2,class:`text-caption text-negative`},fr=P({__name:`ArtifactTransitionProgress`,props:{operation:{}},emits:[`retry`],setup(e,{emit:t}){let n=e,r=t,{t:a}=V(),o=Gn(),s=A(null),c=A(!1),l=A(!1),u=k(()=>Vn(n.operation.stage)),d=k(()=>n.operation.cancelRequested&&!u.value?a(`artifacts.transition.cancelRequested`):a(`artifacts.transition.stages.`+n.operation.stage)),p=k(()=>u.value&&n.operation.stage!==`succeeded`);_([()=>n.operation.id,()=>n.operation.stage],()=>{s.value=null});async function m(){c.value=!0,s.value=null;try{await o.cancel(n.operation.artifactId,n.operation.id)}catch(e){s.value=H(e)}finally{c.value=!1}}return(t,n)=>(i(),j(`div`,{class:`artifact-transition-progress row items-center no-wrap q-gutter-x-sm`,role:`status`,"aria-live":`polite`,"aria-label":T(a)(`artifacts.transition.progressLabel`,{to:T(a)(`artifacts.statuses.`+e.operation.targetStatus)})},[u.value?C(``,!0):(i(),x(R,{key:0,size:`1em`})),N(`span`,lr,f(d.value),1),e.operation.reason?(i(),j(`span`,ur,f(e.operation.reason),1)):C(``,!0),s.value?(i(),j(`span`,dr,f(s.value),1)):C(``,!0),e.operation.canCancel&&!e.operation.cancelRequested?(i(),x(Kt,{key:3,"no-caps":``,size:`sm`,loading:c.value,onClick:m},null,8,[`loading`])):C(``,!0),u.value&&T(ar)(e.operation)?(i(),x(St,{key:4,label:T(a)(`artifacts.transition.result`),onClick:n[0]||=e=>l.value=!0},null,8,[`label`])):C(``,!0),y(sr,{modelValue:l.value,"onUpdate:modelValue":n[1]||=e=>l.value=e,operation:e.operation},null,8,[`modelValue`,`operation`]),p.value?(i(),x(St,{key:5,label:T(a)(`artifacts.transition.retry`),onClick:n[2]||=e=>r(`retry`)},null,8,[`label`])):C(``,!0),u.value?(i(),x(kt,{key:6,size:`sm`,label:T(a)(`artifacts.transition.dismiss`),onClick:n[3]||=t=>T(o).dismiss(e.operation.artifactId)},null,8,[`label`])):C(``,!0)],8,cr))}}),pr={class:`artifact-status-button row items-center no-wrap q-gutter-x-sm`},mr={key:3,class:`row items-center no-wrap q-gutter-x-xs`,role:`alert`},hr={class:`text-caption text-negative`},gr=P({__name:`ArtifactStatusButton`,props:{artifact:{},contentReady:{type:Boolean,default:!0}},setup(e){let t=e,{t:n}=V(),{entry:r,store:a}=Kn(()=>t.artifact.id),o=A(!1),s=A(null),c=k(()=>r.value.operation),l=k(()=>!!r.value.options?.activeOperationId),u=k(()=>!r.value.loaded),d=k(()=>r.value.error!==null),p=k(()=>r.value.options?.status===t.artifact.status&&!r.value.stale?r.value.options.targets:[]);function m(e){t.contentReady&&(s.value=e,o.value=!0)}return(t,r)=>(i(),j(`div`,pr,[p.value.length&&!l.value&&e.contentReady?(i(),x(B,{key:0,dense:``,flat:``,"no-caps":``,class:`artifact-status-button__trigger`,"aria-label":T(n)(`artifacts.transition.button`,{status:T(n)(`artifacts.statuses.`+e.artifact.status)})},{default:v(()=>[y(an,{status:e.artifact.status},null,8,[`status`]),y(z,{name:T(Ke),size:`1.2em`,class:`app-icon-control`},null,8,[`name`]),y(st,{"auto-close":``},{default:v(()=>[y(ot,{dense:``,style:{"min-width":`12rem`}},{default:v(()=>[y(q,{header:``},{default:v(()=>[w(f(T(n)(`artifacts.transition.menuTitle`)),1)]),_:1}),(i(!0),j(M,null,F(p.value,e=>(i(),x(J,{key:e.status,clickable:``,disable:!e.available,onClick:t=>m(e.status)},{default:v(()=>[y(Y,null,{default:v(()=>[y(q,null,{default:v(()=>[w(f(T(n)(`artifacts.statuses.`+e.status)),1)]),_:2},1024),e.reason?(i(),x(q,{key:0,caption:``},{default:v(()=>[w(f(e.reason),1)]),_:2},1024)):C(``,!0)]),_:2},1024)]),_:2},1032,[`disable`,`onClick`]))),128))]),_:1})]),_:1})]),_:1},8,[`aria-label`])):(i(),x(an,{key:1,status:e.artifact.status},null,8,[`status`])),u.value?(i(),x(R,{key:2,size:`1em`,"aria-label":T(n)(`artifacts.transition.loadingMenu`)},null,8,[`aria-label`])):C(``,!0),d.value?(i(),j(`span`,mr,[N(`span`,hr,f(T(n)(`artifacts.transition.loadFailed`)),1),y(B,{dense:``,flat:``,"no-caps":``,size:`sm`,label:T(n)(`artifacts.transition.reload`),onClick:r[0]||=t=>T(a).load(e.artifact.id)},null,8,[`label`])])):C(``,!0),c.value?(i(),x(fr,{key:4,operation:c.value,onRetry:r[1]||=e=>m(c.value.targetStatus)},null,8,[`operation`])):C(``,!0),y(rr,{modelValue:o.value,"onUpdate:modelValue":r[2]||=e=>o.value=e,"artifact-id":e.artifact.id,target:s.value,"content-ready":e.contentReady},null,8,[`modelValue`,`artifact-id`,`target`,`content-ready`])]))}});function _r(e,t){if(e.storeEpoch!==t.storeEpoch)throw Error(`The artifact graph changed. Refresh before reading more.`)}function vr(e,t){return vt({storeId:e.storeId,fetch:(n,r)=>Z.relations(e.id,t,n??void 0,r),cursor:e=>e.nextCursor,validate:n=>{if(n.items.some(n=>(t===`outgoing`?n.sourceId:n.targetId)!==e.id))throw Error(`A relationship belongs to another artifact.`)},append:(e,t)=>(_r(e,t),{...t,items:[...e.items,...t.items]})})}function yr(e){return vt({storeId:e.storeId,fetch:(t,n)=>Z.ancestry(e.id,t??void 0,n),cursor:e=>e.nextCursor,validate:t=>{if(t.artifactId!==e.id||t.ancestorIds.includes(e.id))throw Error(`The revision ancestry does not match this artifact.`)},append:(e,t)=>(_r(e,t),{...t,ancestorIds:[...e.ancestorIds,...t.ancestorIds]})})}function br(e){return vt({storeId:e.storeId,fetch:(t,n)=>Z.history(e.id,t??0,n),cursor:e=>e.nextAfterSeq,validate:t=>{let n=0;for(let r of t.items){if(r.storeId!==e.storeId||r.artifactId!==e.id||r.seq<=n)throw Error(`The metadata history does not match this artifact.`);n=r.seq}if(t.nextAfterSeq!==null&&(n===0||t.nextAfterSeq!==n))throw Error(`Invalid metadata history continuation.`)},append:(e,t)=>{if(t.items.length&&t.items[0].seq<=(e.items.at(-1)?.seq??0))throw Error(`The metadata history page overlaps. Refresh the history.`);return{...t,items:[...e.items,...t.items]}}})}var xr=4;function Sr(e){let t=vr(e,`outgoing`),n=vr(e,`incoming`),r=yr(e),i=[t,n,r],a=te({titles:new Map,loading:!1,error:null}),o=k(()=>a.loading||i.some(e=>e.state.loading)),s=k(()=>a.error!==null||i.some(e=>e.state.stale)),c=k(()=>[...new Set([a.error,...i.map(e=>e.state.error)].filter(Boolean))].join(`
|
|
2
|
+
`)||null),l=k(()=>i.some(e=>e.state.page?.nextCursor)),u=!1,d=!1,f=0,p=!0,m=null;function h(){return[...new Set([...t.state.page?.items.map(e=>e.targetId)??[],...n.state.page?.items.map(e=>e.sourceId)??[],...r.state.page?.ancestorIds??[]])]}async function g(t){if(!u||d||t!==f)return;let n=h(),r=new Map(n.filter(e=>a.titles.has(e)).map(e=>[e,a.titles.get(e)])),i=n.filter(e=>p||!r.has(e)),o=new AbortController;m?.abort(),m=o,a.loading=!0,a.error=null;let s=null;for(let n=0;n<i.length;n+=xr)if(await Promise.all(i.slice(n,n+xr).map(async t=>{try{let n=await Z.get(t,o.signal);if(n.storeId!==e.storeId||n.id!==t)throw Error(`The linked document belongs to another store or identity.`);r.set(t,n.title)}catch(e){s??=H(e)}})),d||t!==f)return;d||t!==f||(a.titles=r,a.error=s,a.loading=!1,p=s!==null)}async function _(e){if(d)return;u=e;let t=++f;m?.abort(),a.loading=!1,await Promise.all(i.map(t=>t.setActive(e))),e&&await g(t)}async function v(){if(d)return;let e=++f;m?.abort(),a.loading=!1,p=!0,await Promise.all(i.map(e=>e.invalidate())),await g(e)}async function y(){if(!u||d||o.value||s.value)return;let e=++f;await Promise.all(i.filter(e=>e.state.page?.nextCursor).map(e=>e.more())),await g(e)}function b(){d=!0,++f,m?.abort(),a.loading=!1;for(let e of i)e.dispose()}return{outgoing:t,incoming:n,ancestry:r,names:a,loading:o,stale:s,error:c,hasMore:l,setActive:_,invalidate:v,more:y,dispose:b}}function Cr(e,t){Mn(e.invalidate);let n=at();_(()=>D(t)&&n(),t=>{e.setActive(t)},{immediate:!0});let r=W([`artifacts:changed`],()=>{e.invalidate()});return d(()=>{r.close(),e.dispose()}),e}var wr={key:1,role:`alert`,class:`q-pa-sm text-negative`},Tr={key:2,role:`status`,class:`q-pa-sm`},Er=P({__name:`ArtifactDetailState`,props:{loading:{type:Boolean},error:{},stale:{type:Boolean}},setup(e){let{t}=V();return(n,r)=>(i(),j(M,null,[e.loading?(i(),x(yt,{key:0,indeterminate:``})):C(``,!0),e.error?(i(),j(`div`,wr,f(e.error),1)):C(``,!0),e.stale&&!e.loading?(i(),j(`div`,Tr,f(T(t)(`artifacts.details.stale`)),1)):C(``,!0)],64))}}),Dr={class:`q-mb-md`},Or={class:`row justify-center q-pa-sm`},kr=X(P({__name:`ArtifactRelations`,props:{artifact:{}},setup(e){re(e=>({v13c38cf8:t}));let t=`192px`,n={parent:ze,replaces:Re,supplements:je,references:Ae},r=e,{t:a}=V(),o=we(),s=at(),c=ee(`listScroll`),l=Cr(Sr(r.artifact),!0),{outgoing:u,incoming:d,ancestry:p,names:m,loading:h,stale:g,error:_,hasMore:b}=l;async function S(e,t){try{await l.more()}finally{t()}}let E=k(()=>[...[u,d].flatMap((e,t)=>(e.state.page?.items??[]).map(e=>({id:t===0?e.targetId:e.sourceId,key:`${t}:${e.sourceId}:${e.kind}:${e.targetId}`,icon:n[e.kind],directionIcon:t===0?He:Ge,label:`${a(`artifacts.details.`+(t===0?`outgoing`:`incoming`))}: ${a(`artifacts.details.kinds.`+e.kind)}`}))),...(p.state.page?.ancestorIds??[]).map(e=>({id:e,key:`ancestor:${e}`,icon:Be,directionIcon:``,label:a(`artifacts.details.lineage`)}))].map(e=>({...e,title:m.titles.get(e.id)??e.id,route:vn(r.artifact.storeId,e.id,o.query)})));return(e,t)=>(i(),j(`div`,Dr,[y(Er,{loading:T(h),stale:T(g),error:T(_)},null,8,[`loading`,`stale`,`error`]),N(`div`,{ref_key:`listScroll`,ref:c,class:`artifact-relations__list`},[c.value?(i(),x(Yt,{key:0,"scroll-target":c.value,offset:100,disable:!T(b)||T(h)||T(g)||!T(s)(),onLoad:S},{loading:v(()=>[N(`div`,Or,[y(R,{color:`primary`})])]),default:v(()=>[y(ot,{separator:``},{default:v(()=>[(i(!0),j(M,null,F(E.value,e=>(i(),x(J,{key:e.key,to:e.route,clickable:``},{default:v(()=>[y(Y,{avatar:``,class:`app-icon-neutral`},{default:v(()=>[y(z,{name:e.icon,size:`24px`,"aria-label":e.label},{default:v(()=>[y(ke,{delay:T(500)},{default:v(()=>[w(f(e.label),1)]),_:2},1032,[`delay`])]),_:2},1032,[`name`,`aria-label`])]),_:2},1024),y(Y,null,{default:v(()=>[y(q,{class:`artifact-relations__title`},{default:v(()=>[w(f(e.title),1)]),_:2},1024)]),_:2},1024),e.directionIcon?(i(),x(Y,{key:0,side:``,class:`app-icon-neutral`},{default:v(()=>[y(z,{name:e.directionIcon,"aria-label":e.label},null,8,[`name`,`aria-label`])]),_:2},1024)):C(``,!0)]),_:2},1032,[`to`]))),128))]),_:1})]),_:1},8,[`scroll-target`,`disable`])):C(``,!0)],512)]))}}),[[`__scopeId`,`data-v-9509cce5`]]),Ar={key:0,class:`q-pa-md`},jr={class:`artifact-history__events`},Mr={class:`artifact-summary__title`},Nr={class:`artifact-summary__caption q-mt-xs`},Pr={class:`artifact-history__payload`},Fr={key:0,class:`q-pa-sm text-grey`},Ir=X(P({__name:`ArtifactHistory`,props:{artifact:{}},setup(e){let t=e,n=S(!1),{t:r}=V(),{isDark:a}=G(),o=Cr(br(t.artifact),n),s=k(()=>o.state.page?.items.map(e=>({...e,payload:JSON.stringify(e.metadata,null,2)}))??[]);return(e,t)=>(i(),x(At,{modelValue:n.value,"onUpdate:modelValue":t[0]||=e=>n.value=e,icon:T(Ye),label:T(r)(`artifacts.details.history`),class:O([`app-icon-expansion artifact-history artifact-summary q-mb-md`,{"artifact-summary--dark":T(a)}])},{default:v(()=>[n.value?(i(),j(`div`,Ar,[y(Er,{loading:T(o).state.loading,error:T(o).state.error,stale:T(o).state.stale},null,8,[`loading`,`error`,`stale`]),N(`ol`,jr,[(i(!0),j(M,null,F(s.value,e=>(i(),j(`li`,{key:e.seq,class:`q-mb-md`},[N(`div`,Mr,f(e.metadata.title),1),N(`div`,Nr,f(T(Lt)(e.createdAt))+` · `+f(e.actor.kind)+`: `+f(e.actor.id)+` · #`+f(e.seq)+` · `+f(T(r)(`artifacts.details.eventVersion`,{version:e.afterVersion}))+` · `+f(T(r)(`artifacts.details.actions.`+e.action)),1),y(At,{class:`app-icon-expansion`,label:T(r)(`artifacts.details.recordedMetadata`),dense:``},{default:v(()=>[N(`pre`,Pr,f(e.payload),1)]),_:2},1032,[`label`])]))),128))]),!T(o).state.loading&&!T(o).state.error&&!s.value.length?(i(),j(`div`,Fr,f(T(r)(`artifacts.details.noHistory`)),1)):C(``,!0),T(o).state.page?.nextAfterSeq!==null&&T(o).state.page?(i(),x(B,{key:1,flat:``,disable:T(o).state.loading||T(o).state.stale,label:T(r)(`artifacts.more`),onClick:T(o).more},null,8,[`disable`,`label`,`onClick`])):C(``,!0)])):C(``,!0)]),_:1},8,[`modelValue`,`icon`,`label`,`class`]))}}),[[`__scopeId`,`data-v-170776c7`]]),Lr={class:`artifact-pane column no-wrap fit`},Rr={class:`q-pa-md`},zr={class:`text-h5 q-my-sm`},Br={class:`row items-center q-gutter-sm`},Vr={class:`text-caption`},Hr={class:`text-caption q-mt-sm`},Ur={key:0,class:`q-mt-sm document-tags`},Wr={class:`q-pa-lg artifact-pane__body`},Gr={key:1,class:`row items-center q-gutter-sm`,role:`status`},Kr={class:`text-weight-medium`},qr={class:`text-caption q-mt-xs`},Jr=X(P({__name:`ArtifactPane`,props:{artifact:{},body:{}},setup(e){let{t}=V(),n=rn(),{loading:r,refresh:a}=jn(n.retryContent),o=k(()=>$t(n.contentState)),s=k(()=>en(n.contentErrorKind));return(c,l)=>(i(),j(`section`,Lr,[N(`div`,Rr,[N(`h1`,zr,f(e.artifact.title),1),N(`div`,Br,[(i(),x(gr,{key:e.artifact.id,artifact:e.artifact,"content-ready":o.value},null,8,[`artifact`,`content-ready`])),N(`span`,Vr,f(e.artifact.typeId),1),y(rt),y(Vt,{dense:!1,disable:!s.value,title:s.value?void 0:T(t)(`artifacts.content.blocked`),label:T(t)(`artifacts.addToAgent`),context:{kind:`artifact`,storeId:e.artifact.storeId,artifactId:e.artifact.id,name:e.artifact.title}},null,8,[`disable`,`title`,`label`,`context`]),(i(),x(Pn,{key:e.artifact.id,"artifact-id":e.artifact.id,"original-allowed":s.value},null,8,[`artifact-id`,`original-allowed`])),T(n).verifying?(i(),x(R,{key:0,size:`1em`,role:`status`,"aria-label":T(t)(`artifacts.content.verifying`)},null,8,[`aria-label`])):C(``,!0),y(Xt,{dense:!1,loading:T(r),tooltip:T(t)(`artifacts.refresh`),onClick:T(a)},null,8,[`loading`,`tooltip`,`onClick`])]),N(`div`,Hr,f(T(t)(`artifacts.currentMetadata`)),1),e.artifact.tags.length?(i(),j(`div`,Ur,[(i(!0),j(M,null,F(e.artifact.tags,e=>(i(),x(It,{key:e,dense:``},{default:v(()=>[w(f(e),1)]),_:2},1024))),128))])):C(``,!0)]),y(I),y(ut,{class:`col`},{default:v(()=>[N(`div`,Wr,[y(zn,{artifact:e.artifact},null,8,[`artifact`]),y(Ir,{artifact:e.artifact},null,8,[`artifact`]),y(kr,{artifact:e.artifact},null,8,[`artifact`]),T(n).contentState===`ready`?(i(),x(Ct,{key:0,text:e.body,variant:`document`,"disable-images":``,"heading-anchors":``},null,8,[`text`])):T(n).contentState===`loading`?(i(),j(`div`,Gr,[y(R,{size:`1em`}),N(`span`,null,f(T(t)(`artifacts.content.loading`)),1)])):T(n).contentState===`error`?(i(),x(K,{key:2,dense:``,class:`bg-negative text-white`,role:`alert`},{action:v(()=>[y(B,{flat:``,"no-caps":``,label:T(t)(`artifacts.content.retry`),disable:T(n).documentLoading,onClick:T(n).retryContent},null,8,[`label`,`disable`,`onClick`])]),default:v(()=>[N(`div`,Kr,f(T(t)(T(n).contentErrorKind===`integrity`?`artifacts.content.integrity`:`artifacts.content.failed`)),1),N(`div`,null,f(T(n).contentError),1),N(`div`,qr,f(T(t)(`artifacts.content.hint`)),1)]),_:1})):C(``,!0)])]),_:1})]))}}),[[`__scopeId`,`data-v-18ff9445`]]),Yr={class:`column no-wrap fit artifact-document-panel`},Xr={key:1,class:`q-pa-lg text-grey`},Zr=X(P({__name:`ArtifactDocumentPanel`,setup(e){let{t}=V(),n=rn();return(e,r)=>(i(),j(`section`,Yr,[y(Cn,{loading:T(n).documentLoading,error:T(n).documentError},{action:v(()=>[y(B,{flat:``,label:T(t)(`artifacts.refresh`),onClick:T(n).refreshDocument},null,8,[`label`,`onClick`])]),_:1},8,[`loading`,`error`]),T(n).document?(i(),x(Jr,{key:T(n).document.storeId+`:`+T(n).document.id,artifact:T(n).document,body:T(n).body},null,8,[`artifact`,`body`])):!T(n).documentLoading&&!T(n).documentError?(i(),j(`div`,Xr,f(T(t)(`artifacts.select`)),1)):C(``,!0)]))}}),[[`__scopeId`,`data-v-3e12d2a1`]]),Qr=P({__name:`ArtifactsPage`,setup(e){let t=we(),n=be(),r=rn(),a=dt(),o=k(()=>_n(t.query)),s=k(()=>JSON.stringify(o.value.input)),c=k(()=>JSON.stringify(o.value.selection)),l=k(()=>!a.narrow.value||!a.window.value&&(a.pane.value===`list`||a.pane.value===`content`)),u=k(()=>l.value&&(!a.narrow.value||a.pane.value===`list`));bt(()=>r.storeId,()=>l.value,()=>r.catalog?.items??[]);let f=k(()=>[...new Set((r.catalog?.items??[]).flatMap(e=>e.tags))].sort((e,t)=>e.localeCompare(t)));function p(e){ft(n,()=>({query:gn(t.query,e)}))}function m(e){ft(n,()=>({query:{...t.query,q:e||void 0}}))}function h(e){ft(n,()=>({query:{...t.query,storeId:e.storeId,selectedId:e.id,...a.narrow.value?{uiPane:`content`,uiWindow:void 0}:{}}}))}_(s,()=>void r.search(o.value.input),{immediate:!0}),_(c,()=>void r.select(o.value.selection),{immediate:!0});let g=W([`artifacts:changed`],()=>{r.refresh(),r.refreshDocument()});return d(()=>{g.close(),r.cancel()}),(e,n)=>(i(),x(zt,null,{default:v(()=>[y(Bt,{class:`fit`,"storage-key":`githuman.artifactsListWidth`,"default-width":340},{panel:v(()=>[y(kn,{filters:o.value.filters,query:o.value.input.query??null,"selected-id":o.value.selection?.id,"search-key":s.value,"navigation-key":T(t).fullPath,"tag-options":f.value,active:u.value,"onUpdate:filters":p,"onUpdate:query":m,onSelect:h},null,8,[`filters`,`query`,`selected-id`,`search-key`,`navigation-key`,`tag-options`,`active`])]),content:v(()=>[y(Zr)]),_:1})]),_:1}))}});export{Qr as default};
|