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