@straiffi/archon 1.8.6 → 1.8.7
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/dist/client/assets/ActivityView-D4Qh96zr.js +1 -0
- package/dist/client/assets/GitHubActionsDialog-Bg03OmVv.js +1 -0
- package/dist/client/assets/RepositoryGraphDialog-CS_hOqPw.js +1 -0
- package/dist/client/assets/VerificationDialog-BYH-Ek8n.js +4 -0
- package/dist/client/assets/{arc-D2Nn9xIj.js → arc-C83vRtlz.js} +1 -1
- package/dist/client/assets/architecture-7EHR7CIX-Dm8H7N6Z.js +1 -0
- package/dist/client/assets/{architectureDiagram-3BPJPVTR-BH5LLK54.js → architectureDiagram-3BPJPVTR-2lxabjSl.js} +1 -1
- package/dist/client/assets/{blockDiagram-GPEHLZMM-xOxShPwZ.js → blockDiagram-GPEHLZMM-C80HvJmb.js} +1 -1
- package/dist/client/assets/{c4Diagram-AAUBKEIU-BXMrXnKR.js → c4Diagram-AAUBKEIU-BM3k_lKz.js} +1 -1
- package/dist/client/assets/channel-HjENOCZ0.js +1 -0
- package/dist/client/assets/{chunk-2J33WTMH-BdDEtNMz.js → chunk-2J33WTMH-BTk3lX07.js} +1 -1
- package/dist/client/assets/{chunk-3OPIFGDE-PtSkTtIU.js → chunk-3OPIFGDE-DAxdBZ_4.js} +1 -1
- package/dist/client/assets/{chunk-4BX2VUAB-CtLS8D71.js → chunk-4BX2VUAB-C5pU9ApX.js} +1 -1
- package/dist/client/assets/{chunk-4EGX6M5U-Btnm0QNe.js → chunk-4EGX6M5U-CAjWPjND.js} +1 -1
- package/dist/client/assets/{chunk-55IACEB6-74CcJaub.js → chunk-55IACEB6-DhO4-AG4.js} +1 -1
- package/dist/client/assets/{chunk-5DO6E6H7-WLZ8L4ko.js → chunk-5DO6E6H7-BDKA-zHS.js} +1 -1
- package/dist/client/assets/{chunk-5ZQYHXKU-D5PYP24m.js → chunk-5ZQYHXKU-BYm9s62a.js} +1 -1
- package/dist/client/assets/{chunk-727SXJPM-gDX0xZh1.js → chunk-727SXJPM-iVUM8xuV.js} +1 -1
- package/dist/client/assets/{chunk-AQP2D5EJ-Bat82lQQ.js → chunk-AQP2D5EJ-DVM7riMJ.js} +1 -1
- package/dist/client/assets/{chunk-BR22UD5L-Cou5beGe.js → chunk-BR22UD5L-12D2GWh4.js} +1 -1
- package/dist/client/assets/{chunk-BSJP7CBP-DJ57XcV5.js → chunk-BSJP7CBP-DMi77e84.js} +1 -1
- package/dist/client/assets/{chunk-CSCIHK7Q-D3sau006.js → chunk-CSCIHK7Q-_D1FzP9B.js} +2 -2
- package/dist/client/assets/{chunk-FHYWG6QK-Ba10e2kj.js → chunk-FHYWG6QK-BhSajKiB.js} +1 -1
- package/dist/client/assets/{chunk-FMBD7UC4-CEo2wZMx.js → chunk-FMBD7UC4-Drmlc0wM.js} +1 -1
- package/dist/client/assets/{chunk-KSCS5N6A-CqEcB7Dr.js → chunk-KSCS5N6A-D3XouAHf.js} +1 -1
- package/dist/client/assets/{chunk-L5ZTLDWV-TRTuwXsF.js → chunk-L5ZTLDWV-B7NYWgT4.js} +1 -1
- package/dist/client/assets/{chunk-LZXEDZCA-DdpNmv37.js → chunk-LZXEDZCA-Dgkkbb6A.js} +2 -2
- package/dist/client/assets/{chunk-MPE355IW-MqEt-J8G.js → chunk-MPE355IW-Cw8YmjTC.js} +1 -1
- package/dist/client/assets/{chunk-MZUSXYTE-DdNi9lhx.js → chunk-MZUSXYTE-jvxRCZ7x.js} +1 -1
- package/dist/client/assets/{chunk-N66VUXT2-CjemTW4E.js → chunk-N66VUXT2-00i4y0yD.js} +1 -1
- package/dist/client/assets/{chunk-ND2GUHAM-BCUL9zWr.js → chunk-ND2GUHAM-CzO1oVCi.js} +1 -1
- package/dist/client/assets/{chunk-NZK2D7GU-BAxuwE_2.js → chunk-NZK2D7GU-re0VVZne.js} +1 -1
- package/dist/client/assets/{chunk-O5CBEL6O-Cttpc9yf.js → chunk-O5CBEL6O-BwsS59iy.js} +1 -1
- package/dist/client/assets/{chunk-PUPMXCY4-ZvwTw0To.js → chunk-PUPMXCY4-DfWourL7.js} +1 -1
- package/dist/client/assets/chunk-QZHKN3VN-CtbsU1Bj.js +1 -0
- package/dist/client/assets/{chunk-UIBZB4QT-BTY9be9s.js → chunk-UIBZB4QT-v-a5ZfN6.js} +1 -1
- package/dist/client/assets/{chunk-WCWK7LTN-Db1n3n3-.js → chunk-WCWK7LTN-CtYzhvvb.js} +1 -1
- package/dist/client/assets/chunk-WU5MYG2G-CLyh-xCA.js +1 -0
- package/dist/client/assets/{chunk-XPW4576I-DObFPxjB.js → chunk-XPW4576I-CvnAuXH2.js} +1 -1
- package/dist/client/assets/classDiagram-4FO5ZUOK-DnhdaVrK.js +1 -0
- package/dist/client/assets/classDiagram-v2-Q7XG4LA2-C-BjeSGJ.js +1 -0
- package/dist/client/assets/{cose-bilkent-S5V4N54A-MlOPiG6P.js → cose-bilkent-S5V4N54A-fchD-dH2.js} +1 -1
- package/dist/client/assets/{dagre-BM42HDAG-BTsZ2dQI.js → dagre-BM42HDAG-x71fYlqQ.js} +1 -1
- package/dist/client/assets/{dagre-BWNHuDdf.js → dagre-DSrzm-Gq.js} +1 -1
- package/dist/client/assets/{diagram-2AECGRRQ-afPu4kp4.js → diagram-2AECGRRQ-CMdwzuYj.js} +1 -1
- package/dist/client/assets/{diagram-5GNKFQAL-SixbJGPN.js → diagram-5GNKFQAL-B3l6I4qJ.js} +1 -1
- package/dist/client/assets/{diagram-KO2AKTUF-Dk1670ag.js → diagram-KO2AKTUF-BNhypLBW.js} +1 -1
- package/dist/client/assets/{diagram-LMA3HP47-BDNhjRaO.js → diagram-LMA3HP47-CmrhbiDt.js} +1 -1
- package/dist/client/assets/{diagram-OG6HWLK6-BLowQCLY.js → diagram-OG6HWLK6-CRobDMLl.js} +1 -1
- package/dist/client/assets/{erDiagram-TEJ5UH35-DAg9kUbm.js → erDiagram-TEJ5UH35-CqO7K0TS.js} +1 -1
- package/dist/client/assets/eventmodeling-FCH6USID-BWhw0UJ8.js +1 -0
- package/dist/client/assets/{flowDiagram-I6XJVG4X-BsaPmiIS.js → flowDiagram-I6XJVG4X-CuLTJZU0.js} +1 -1
- package/dist/client/assets/{ganttDiagram-6RSMTGT7-DfF1TT-s.js → ganttDiagram-6RSMTGT7-Bm7v1eRG.js} +1 -1
- package/dist/client/assets/gitGraph-WXDBUCRP-BSnxAa1J.js +1 -0
- package/dist/client/assets/{gitGraphDiagram-PVQCEYII-CEvTiN6n.js → gitGraphDiagram-PVQCEYII-CNHZr-5i.js} +1 -1
- package/dist/client/assets/index-Bs5SQZhz.css +2 -0
- package/dist/client/assets/index-LGNsdNYM.js +274 -0
- package/dist/client/assets/info-J43DQDTF-DcFwF1-h.js +1 -0
- package/dist/client/assets/{infoDiagram-5YYISTIA-CBjYYrzJ.js → infoDiagram-5YYISTIA-z27pUr2X.js} +1 -1
- package/dist/client/assets/{ishikawaDiagram-YF4QCWOH-BuCkp1uL.js → ishikawaDiagram-YF4QCWOH-CDocZ0jf.js} +1 -1
- package/dist/client/assets/{journeyDiagram-JHISSGLW-DkUPCxT5.js → journeyDiagram-JHISSGLW-CgP31lsU.js} +1 -1
- package/dist/client/assets/{kanban-definition-UN3LZRKU-CXwNZ0Fa.js → kanban-definition-UN3LZRKU-DxTm1_fc.js} +1 -1
- package/dist/client/assets/{line-CRTZgJXA.js → line-hrZ7m44_.js} +1 -1
- package/dist/client/assets/{linear-DT4rSZvy.js → linear-BOwW57yX.js} +1 -1
- package/dist/client/assets/{mermaid-parser.core-NTByLn30.js → mermaid-parser.core-BThJAIK-.js} +2 -2
- package/dist/client/assets/{mermaid.core-DszsB_Gl.js → mermaid.core-CfVyP_kK.js} +3 -3
- package/dist/client/assets/{mindmap-definition-RKZ34NQL-DCrqCcPX.js → mindmap-definition-RKZ34NQL-CuISnLgW.js} +1 -1
- package/dist/client/assets/{ordinal-k--hYEme.js → ordinal-CZ33lFpK.js} +1 -1
- package/dist/client/assets/packet-YPE3B663-1VZiO_9r.js +1 -0
- package/dist/client/assets/pie-LRSECV5Y-BX1-tQCu.js +1 -0
- package/dist/client/assets/{pieDiagram-4H26LBE5-CbHeTKto.js → pieDiagram-4H26LBE5-DnWAdd44.js} +1 -1
- package/dist/client/assets/{quadrantDiagram-W4KKPZXB-Ptpkh0Dc.js → quadrantDiagram-W4KKPZXB-Cb-RVl5A.js} +1 -1
- package/dist/client/assets/radar-GUYGQ44K-B2HRrCR4.js +1 -0
- package/dist/client/assets/{requirementDiagram-4Y6WPE33-73PM-Ae5.js → requirementDiagram-4Y6WPE33-DrXg_gCS.js} +1 -1
- package/dist/client/assets/{sankeyDiagram-5OEKKPKP-B7RCxzNy.js → sankeyDiagram-5OEKKPKP-DzZjp_ZP.js} +1 -1
- package/dist/client/assets/{sequenceDiagram-3UESZ5HK-DGXfHCo0.js → sequenceDiagram-3UESZ5HK-CQJ3PhQD.js} +1 -1
- package/dist/client/assets/{stateDiagram-AJRCARHV-Cl0_SVL3.js → stateDiagram-AJRCARHV-B16j9pg1.js} +1 -1
- package/dist/client/assets/stateDiagram-v2-BHNVJYJU-vNiFfHwm.js +1 -0
- package/dist/client/assets/{timeline-definition-PNZ67QCA-Cufq-wYg.js → timeline-definition-PNZ67QCA-bUG3mZQt.js} +1 -1
- package/dist/client/assets/treeView-BLDUP644-CDfUVbUi.js +1 -0
- package/dist/client/assets/treemap-LRROVOQU-DUWqu8sK.js +1 -0
- package/dist/client/assets/{vennDiagram-CIIHVFJN-ROVZhhP-.js → vennDiagram-CIIHVFJN-DALCJcZD.js} +1 -1
- package/dist/client/assets/wardley-L42UT6IY-BEFuPUCy.js +1 -0
- package/dist/client/assets/{wardleyDiagram-YWT4CUSO-DlHRfLPH.js → wardleyDiagram-YWT4CUSO-DPQd3l9A.js} +1 -1
- package/dist/client/assets/{xychartDiagram-2RQKCTM6-DW-KpRbf.js → xychartDiagram-2RQKCTM6-BIv1FqXG.js} +1 -1
- package/dist/client/index.html +2 -2
- package/dist/server/db.js +399 -0
- package/dist/server/db.js.map +1 -1
- package/dist/server/index.js +65 -10
- package/dist/server/index.js.map +1 -1
- package/dist/server/lib/agent.js +9 -6
- package/dist/server/lib/agent.js.map +1 -1
- package/dist/server/lib/checkWorkspaceIdentity.js +2 -206
- package/dist/server/lib/checkWorkspaceIdentity.js.map +1 -1
- package/dist/server/lib/executionReconciliation.js +73 -0
- package/dist/server/lib/executionReconciliation.js.map +1 -1
- package/dist/server/lib/integrations/github.js +10 -1
- package/dist/server/lib/integrations/github.js.map +1 -1
- package/dist/server/lib/postBuildChecks.js +20 -12
- package/dist/server/lib/postBuildChecks.js.map +1 -1
- package/dist/server/lib/repositoryGraphAnalyzer.js +392 -0
- package/dist/server/lib/repositoryGraphAnalyzer.js.map +1 -0
- package/dist/server/lib/repositoryGraphGitHistory.js +371 -0
- package/dist/server/lib/repositoryGraphGitHistory.js.map +1 -0
- package/dist/server/lib/repositoryGraphIdentity.js +134 -0
- package/dist/server/lib/repositoryGraphIdentity.js.map +1 -0
- package/dist/server/lib/repositoryGraphManifest.js +386 -0
- package/dist/server/lib/repositoryGraphManifest.js.map +1 -0
- package/dist/server/lib/repositoryGraphQueries.js +370 -0
- package/dist/server/lib/repositoryGraphQueries.js.map +1 -0
- package/dist/server/lib/repositoryGraphRetention.js +104 -0
- package/dist/server/lib/repositoryGraphRetention.js.map +1 -0
- package/dist/server/lib/repositoryGraphRoutes.js +145 -0
- package/dist/server/lib/repositoryGraphRoutes.js.map +1 -0
- package/dist/server/lib/repositoryGraphScan.js +370 -0
- package/dist/server/lib/repositoryGraphScan.js.map +1 -0
- package/dist/server/lib/repositoryGraphStore.js +352 -0
- package/dist/server/lib/repositoryGraphStore.js.map +1 -0
- package/dist/server/lib/repositoryGraphTargets.js +30 -0
- package/dist/server/lib/repositoryGraphTargets.js.map +1 -0
- package/dist/server/lib/repositoryGraphTypeScript.js +288 -0
- package/dist/server/lib/repositoryGraphTypeScript.js.map +1 -0
- package/dist/server/lib/terminal.js +25 -1
- package/dist/server/lib/terminal.js.map +1 -1
- package/dist/server/lib/types.js +1 -0
- package/dist/server/lib/types.js.map +1 -1
- package/dist/server/lib/workspaceIdentity.js +433 -0
- package/dist/server/lib/workspaceIdentity.js.map +1 -0
- package/dist/server/workers/plan.js +9 -7
- package/dist/server/workers/plan.js.map +1 -1
- package/dist/server/workers/repositoryGraphAnalyzer.js +282 -0
- package/dist/server/workers/repositoryGraphAnalyzer.js.map +1 -0
- package/package.json +2 -1
- package/dist/client/assets/ActivityView-DDeEQgbm.js +0 -1
- package/dist/client/assets/GitHubActionsDialog-DH-B_LR3.js +0 -1
- package/dist/client/assets/VerificationDialog-x43F7tbo.js +0 -4
- package/dist/client/assets/architecture-7EHR7CIX-C-4Cp4ml.js +0 -1
- package/dist/client/assets/channel-C0dk5Jiy.js +0 -1
- package/dist/client/assets/chunk-QZHKN3VN-LI_RZca2.js +0 -1
- package/dist/client/assets/chunk-WU5MYG2G-620NtSlY.js +0 -1
- package/dist/client/assets/classDiagram-4FO5ZUOK-C5ptkk7I.js +0 -1
- package/dist/client/assets/classDiagram-v2-Q7XG4LA2-BFuXUVOx.js +0 -1
- package/dist/client/assets/eventmodeling-FCH6USID-Dqb6QKoI.js +0 -1
- package/dist/client/assets/gitGraph-WXDBUCRP-DYEsqh93.js +0 -1
- package/dist/client/assets/index-B5TSPCJr.css +0 -2
- package/dist/client/assets/index-DV0vl670.js +0 -274
- package/dist/client/assets/info-J43DQDTF-CfjXFZai.js +0 -1
- package/dist/client/assets/packet-YPE3B663-Dv0HkRHU.js +0 -1
- package/dist/client/assets/pie-LRSECV5Y-S5zPzZFN.js +0 -1
- package/dist/client/assets/radar-GUYGQ44K-B7psLv22.js +0 -1
- package/dist/client/assets/stateDiagram-v2-BHNVJYJU-CqzC1yAT.js +0 -1
- package/dist/client/assets/treeView-BLDUP644-B8H0kT67.js +0 -1
- package/dist/client/assets/treemap-LRROVOQU-DPLhFHnh.js +0 -1
- package/dist/client/assets/wardley-L42UT6IY-B5-Vb08V.js +0 -1
- /package/dist/client/assets/{array-BNor45A1.js → array-B2f2amhX.js} +0 -0
- /package/dist/client/assets/{chunk-NNHCCRGN-CZB-V-Gv.js → chunk-NNHCCRGN-DgKrp8T-.js} +0 -0
- /package/dist/client/assets/{cytoscape.esm-B2lJcMSI.js → cytoscape.esm-BInZCgaJ.js} +0 -0
- /package/dist/client/assets/{defaultLocale-DPzUsThw.js → defaultLocale-sPXJ5urm.js} +0 -0
- /package/dist/client/assets/{dist-CERhmQhR.js → dist-DfHDMDTt.js} +0 -0
- /package/dist/client/assets/{graphlib-BHOW-eWz.js → graphlib-DacNv4Jd.js} +0 -0
- /package/dist/client/assets/{init-C0L3woqb.js → init-BVCnG1lj.js} +0 -0
- /package/dist/client/assets/{katex-CpjQsUQe.js → katex-BlkrXOwm.js} +0 -0
- /package/dist/client/assets/{path-sMK4d_s9.js → path-Bw5AvBNC.js} +0 -0
- /package/dist/client/assets/{rough.esm-BoTisKeL.js → rough.esm-DeLgKbOI.js} +0 -0
- /package/dist/client/assets/{src-BRjoYtUW.js → src-CFGsdLiG.js} +0 -0
|
@@ -0,0 +1,352 @@
|
|
|
1
|
+
import { randomUUID } from 'node:crypto';
|
|
2
|
+
import db from '../db.js';
|
|
3
|
+
import { REPOSITORY_GRAPH_ANALYZER_VERSION, REPOSITORY_GRAPH_SCHEMA_VERSION, } from './repositoryGraphAnalyzer.js';
|
|
4
|
+
export const MAX_REPOSITORY_GRAPH_NODES = 30_000;
|
|
5
|
+
export const MAX_REPOSITORY_GRAPH_EDGES = 150_000;
|
|
6
|
+
export const MAX_REPOSITORY_GRAPH_DIAGNOSTICS = 2_000;
|
|
7
|
+
export const hasActiveBundleRepositoryGraphScan = (projectId, bundleId) => Boolean(db.prepare(`
|
|
8
|
+
SELECT 1
|
|
9
|
+
FROM repository_graph_scans
|
|
10
|
+
WHERE project_id = ? AND target_key = ? AND status IN ('pending', 'running')
|
|
11
|
+
LIMIT 1
|
|
12
|
+
`).get(projectId, `bundle:${bundleId}`));
|
|
13
|
+
const serializeScan = (row) => ({
|
|
14
|
+
...row,
|
|
15
|
+
manifest_truncated: Boolean(row.manifest_truncated),
|
|
16
|
+
typescript_truncated: Boolean(row.typescript_truncated),
|
|
17
|
+
history_truncated: Boolean(row.history_truncated),
|
|
18
|
+
nodes_truncated: Boolean(row.nodes_truncated),
|
|
19
|
+
edges_truncated: Boolean(row.edges_truncated),
|
|
20
|
+
diagnostics_truncated: Boolean(row.diagnostics_truncated),
|
|
21
|
+
});
|
|
22
|
+
const serializeNode = (row) => ({
|
|
23
|
+
id: row.id,
|
|
24
|
+
kind: row.kind,
|
|
25
|
+
path: row.path,
|
|
26
|
+
name: row.name,
|
|
27
|
+
fileKind: row.file_kind,
|
|
28
|
+
language: row.language,
|
|
29
|
+
isTest: Boolean(row.is_test),
|
|
30
|
+
testClassification: row.test_classification,
|
|
31
|
+
});
|
|
32
|
+
const serializeEdge = (row) => ({
|
|
33
|
+
id: row.id,
|
|
34
|
+
source: row.source_node_id,
|
|
35
|
+
target: row.target_node_id,
|
|
36
|
+
kind: row.kind,
|
|
37
|
+
evidence: row.evidence_class,
|
|
38
|
+
detail: row.detail,
|
|
39
|
+
});
|
|
40
|
+
const targetKey = (identity) => identity.components.target.kind === 'repo_root'
|
|
41
|
+
? 'repo_root'
|
|
42
|
+
: `bundle:${identity.components.target.bundle_id}`;
|
|
43
|
+
const getScanRow = (projectId, scanId) => db.prepare(`
|
|
44
|
+
SELECT * FROM repository_graph_scans WHERE id = ? AND project_id = ?
|
|
45
|
+
`).get(scanId, projectId);
|
|
46
|
+
export const getRepositoryGraphScan = (projectId, scanId) => {
|
|
47
|
+
const row = getScanRow(projectId, scanId);
|
|
48
|
+
return row ? serializeScan(row) : null;
|
|
49
|
+
};
|
|
50
|
+
export const getRepositoryGraphScanByExecutionRun = (projectId, executionRunId) => {
|
|
51
|
+
const row = db.prepare(`
|
|
52
|
+
SELECT * FROM repository_graph_scans WHERE project_id = ? AND execution_run_id = ?
|
|
53
|
+
`).get(projectId, executionRunId);
|
|
54
|
+
return row ? serializeScan(row) : null;
|
|
55
|
+
};
|
|
56
|
+
export const hasActiveProjectRepositoryGraphScan = (projectId) => Boolean(db.prepare(`
|
|
57
|
+
SELECT 1 FROM repository_graph_scans
|
|
58
|
+
WHERE project_id = ? AND status IN ('pending', 'running')
|
|
59
|
+
LIMIT 1
|
|
60
|
+
`).get(projectId));
|
|
61
|
+
export const getLatestRepositoryGraphScanForTarget = (projectId, target) => {
|
|
62
|
+
const key = target.kind === 'repo_root' ? 'repo_root' : `bundle:${target.bundle_id}`;
|
|
63
|
+
const row = db.prepare(`
|
|
64
|
+
SELECT * FROM repository_graph_scans
|
|
65
|
+
WHERE project_id = ? AND target_key = ?
|
|
66
|
+
ORDER BY scan_sequence DESC
|
|
67
|
+
LIMIT 1
|
|
68
|
+
`).get(projectId, key);
|
|
69
|
+
return row ? serializeScan(row) : null;
|
|
70
|
+
};
|
|
71
|
+
export const getRepositoryGraphNodesByPath = (projectId, scanId, path) => {
|
|
72
|
+
const rows = db.prepare(`
|
|
73
|
+
SELECT id, kind, path, name, file_kind, language, is_test, test_classification
|
|
74
|
+
FROM repository_graph_nodes
|
|
75
|
+
WHERE project_id = ? AND scan_id = ? AND path = ?
|
|
76
|
+
ORDER BY id
|
|
77
|
+
`).all(projectId, scanId, path);
|
|
78
|
+
return rows.map(serializeNode);
|
|
79
|
+
};
|
|
80
|
+
export const getRepositoryGraphNodesByIds = (projectId, scanId, nodeIds) => {
|
|
81
|
+
if (nodeIds.length === 0) {
|
|
82
|
+
return [];
|
|
83
|
+
}
|
|
84
|
+
const placeholders = nodeIds.map(() => '?').join(', ');
|
|
85
|
+
const rows = db.prepare(`
|
|
86
|
+
SELECT id, kind, path, name, file_kind, language, is_test, test_classification
|
|
87
|
+
FROM repository_graph_nodes
|
|
88
|
+
WHERE project_id = ? AND scan_id = ? AND id IN (${placeholders})
|
|
89
|
+
`).all(projectId, scanId, ...nodeIds);
|
|
90
|
+
return rows.map(serializeNode);
|
|
91
|
+
};
|
|
92
|
+
export const getRepositoryGraphEdgesForNodes = (projectId, scanId, nodeIds, direction, limit) => {
|
|
93
|
+
if (nodeIds.length === 0) {
|
|
94
|
+
return [];
|
|
95
|
+
}
|
|
96
|
+
const column = direction === 'incoming' ? 'target_node_id' : 'source_node_id';
|
|
97
|
+
const oppositeColumn = direction === 'incoming' ? 'source_node_id' : 'target_node_id';
|
|
98
|
+
const placeholders = nodeIds.map(() => '?').join(', ');
|
|
99
|
+
const rows = db.prepare(`
|
|
100
|
+
SELECT id, source_node_id, target_node_id, kind, evidence_class, detail
|
|
101
|
+
FROM repository_graph_edges
|
|
102
|
+
WHERE project_id = ? AND scan_id = ?
|
|
103
|
+
AND (${column} IN (${placeholders})
|
|
104
|
+
OR (kind = 'co_changes' AND ${oppositeColumn} IN (${placeholders})))
|
|
105
|
+
ORDER BY id
|
|
106
|
+
LIMIT ?
|
|
107
|
+
`).all(projectId, scanId, ...nodeIds, ...nodeIds, limit);
|
|
108
|
+
return rows.map(serializeEdge);
|
|
109
|
+
};
|
|
110
|
+
export const getRepositoryGraphEdge = (projectId, scanId, edgeId) => {
|
|
111
|
+
const row = db.prepare(`
|
|
112
|
+
SELECT id, source_node_id, target_node_id, kind, evidence_class, detail
|
|
113
|
+
FROM repository_graph_edges
|
|
114
|
+
WHERE project_id = ? AND scan_id = ? AND id = ?
|
|
115
|
+
`).get(projectId, scanId, edgeId);
|
|
116
|
+
return row ? serializeEdge(row) : null;
|
|
117
|
+
};
|
|
118
|
+
export const listRepositoryGraphDiagnostics = (projectId, scanId, limit) => {
|
|
119
|
+
const rows = db.prepare(`
|
|
120
|
+
SELECT sequence, code, severity, message, path
|
|
121
|
+
FROM repository_graph_diagnostics
|
|
122
|
+
WHERE project_id = ? AND scan_id = ?
|
|
123
|
+
ORDER BY sequence
|
|
124
|
+
LIMIT ?
|
|
125
|
+
`).all(projectId, scanId, limit);
|
|
126
|
+
return rows.map(({ sequence: _sequence, ...diagnostic }) => diagnostic);
|
|
127
|
+
};
|
|
128
|
+
export const listRepositoryGraphEvidenceClasses = (projectId, scanId) => {
|
|
129
|
+
const rows = db.prepare(`
|
|
130
|
+
SELECT DISTINCT evidence_class
|
|
131
|
+
FROM repository_graph_edges
|
|
132
|
+
WHERE project_id = ? AND scan_id = ?
|
|
133
|
+
ORDER BY evidence_class
|
|
134
|
+
`).all(projectId, scanId);
|
|
135
|
+
return rows.map(row => row.evidence_class);
|
|
136
|
+
};
|
|
137
|
+
export const bindRepositoryGraphScanExecutionRun = (projectId, scanId, executionRunId) => {
|
|
138
|
+
const changes = db.prepare(`
|
|
139
|
+
UPDATE repository_graph_scans
|
|
140
|
+
SET execution_run_id = ?, updated_at = CURRENT_TIMESTAMP
|
|
141
|
+
WHERE id = ? AND project_id = ? AND status = 'pending' AND execution_run_id IS NULL
|
|
142
|
+
AND EXISTS (
|
|
143
|
+
SELECT 1 FROM execution_runs
|
|
144
|
+
WHERE execution_runs.id = ?
|
|
145
|
+
AND execution_runs.project_id = repository_graph_scans.project_id
|
|
146
|
+
AND execution_runs.kind = 'repository_graph_scan'
|
|
147
|
+
)
|
|
148
|
+
`).run(executionRunId, scanId, projectId, executionRunId).changes;
|
|
149
|
+
return changes > 0 ? getRepositoryGraphScan(projectId, scanId) : null;
|
|
150
|
+
};
|
|
151
|
+
const findReusableRow = (identity) => {
|
|
152
|
+
const identityJson = JSON.stringify(identity.components);
|
|
153
|
+
return db.prepare(`
|
|
154
|
+
SELECT *
|
|
155
|
+
FROM repository_graph_scans
|
|
156
|
+
WHERE project_id = ? AND target_key = ? AND identity_fingerprint = ?
|
|
157
|
+
AND identity_json = ? AND status = 'completed'
|
|
158
|
+
AND graph_schema_version = ? AND analyzer_version = ?
|
|
159
|
+
ORDER BY scan_sequence DESC
|
|
160
|
+
LIMIT 1
|
|
161
|
+
`).get(identity.components.projectId, targetKey(identity), identity.fingerprint, identityJson, REPOSITORY_GRAPH_SCHEMA_VERSION, REPOSITORY_GRAPH_ANALYZER_VERSION);
|
|
162
|
+
};
|
|
163
|
+
export const findReusableRepositoryGraphScan = (identity) => {
|
|
164
|
+
const row = findReusableRow(identity);
|
|
165
|
+
return row ? serializeScan(row) : null;
|
|
166
|
+
};
|
|
167
|
+
const admitTransaction = db.transaction((identity) => {
|
|
168
|
+
const components = identity.components;
|
|
169
|
+
if (!db.prepare('SELECT 1 FROM projects WHERE id = ? AND deletion_started_at IS NULL').get(components.projectId)) {
|
|
170
|
+
throw new Error('Repository graph project is unavailable');
|
|
171
|
+
}
|
|
172
|
+
const reusable = findReusableRow(identity);
|
|
173
|
+
if (reusable) {
|
|
174
|
+
return { state: 'reused', scan: serializeScan(reusable) };
|
|
175
|
+
}
|
|
176
|
+
const id = randomUUID();
|
|
177
|
+
const identityJson = JSON.stringify(components);
|
|
178
|
+
const sequence = db.prepare(`
|
|
179
|
+
UPDATE repository_graph_scan_sequence
|
|
180
|
+
SET next_value = next_value + 1
|
|
181
|
+
WHERE singleton = 1
|
|
182
|
+
RETURNING next_value - 1 AS scan_sequence
|
|
183
|
+
`).get();
|
|
184
|
+
if (!sequence) {
|
|
185
|
+
throw new Error('Repository graph scan sequence could not be allocated');
|
|
186
|
+
}
|
|
187
|
+
try {
|
|
188
|
+
db.prepare(`
|
|
189
|
+
INSERT INTO repository_graph_scans (
|
|
190
|
+
id, scan_sequence, project_id, target_kind, target_bundle_id, target_key,
|
|
191
|
+
identity_fingerprint, identity_json, graph_schema_version,
|
|
192
|
+
analyzer_version, analyzer_configuration_json
|
|
193
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
194
|
+
`).run(id, sequence.scan_sequence, components.projectId, components.target.kind, components.target.bundle_id, targetKey(identity), identity.fingerprint, identityJson, components.graphSchemaVersion, components.analyzerVersion, JSON.stringify(components.analyzerConfiguration));
|
|
195
|
+
}
|
|
196
|
+
catch (error) {
|
|
197
|
+
const code = error.code;
|
|
198
|
+
if (code !== 'SQLITE_CONSTRAINT_UNIQUE') {
|
|
199
|
+
throw error;
|
|
200
|
+
}
|
|
201
|
+
const active = db.prepare(`
|
|
202
|
+
SELECT * FROM repository_graph_scans
|
|
203
|
+
WHERE project_id = ? AND target_key = ? AND status IN ('pending', 'running')
|
|
204
|
+
LIMIT 1
|
|
205
|
+
`).get(components.projectId, targetKey(identity));
|
|
206
|
+
if (!active) {
|
|
207
|
+
throw error;
|
|
208
|
+
}
|
|
209
|
+
return { state: 'active', scan: serializeScan(active) };
|
|
210
|
+
}
|
|
211
|
+
const admitted = getScanRow(components.projectId, id);
|
|
212
|
+
if (!admitted) {
|
|
213
|
+
throw new Error('Admitted repository graph scan could not be loaded');
|
|
214
|
+
}
|
|
215
|
+
return { state: 'admitted', scan: serializeScan(admitted) };
|
|
216
|
+
});
|
|
217
|
+
export const admitRepositoryGraphScan = (identity) => admitTransaction(identity);
|
|
218
|
+
export const startRepositoryGraphScan = (projectId, scanId) => {
|
|
219
|
+
const changes = db.prepare(`
|
|
220
|
+
UPDATE repository_graph_scans
|
|
221
|
+
SET status = 'running', started_at = CURRENT_TIMESTAMP, updated_at = CURRENT_TIMESTAMP
|
|
222
|
+
WHERE id = ? AND project_id = ? AND status = 'pending'
|
|
223
|
+
`).run(scanId, projectId).changes;
|
|
224
|
+
return changes > 0 ? getRepositoryGraphScan(projectId, scanId) : null;
|
|
225
|
+
};
|
|
226
|
+
const boundedDiagnostics = (diagnostics) => {
|
|
227
|
+
const truncated = diagnostics.length > MAX_REPOSITORY_GRAPH_DIAGNOSTICS;
|
|
228
|
+
const values = diagnostics.slice(0, MAX_REPOSITORY_GRAPH_DIAGNOSTICS);
|
|
229
|
+
if (truncated) {
|
|
230
|
+
values[values.length - 1] = {
|
|
231
|
+
code: 'diagnostic_limit',
|
|
232
|
+
severity: 'warning',
|
|
233
|
+
message: 'Additional repository graph diagnostics were omitted during persistence.',
|
|
234
|
+
path: null,
|
|
235
|
+
};
|
|
236
|
+
}
|
|
237
|
+
return { values, truncated };
|
|
238
|
+
};
|
|
239
|
+
const insertDiagnostic = db.prepare(`
|
|
240
|
+
INSERT INTO repository_graph_diagnostics (scan_id, project_id, sequence, code, severity, message, path)
|
|
241
|
+
VALUES (?, ?, ?, ?, ?, ?, ?)
|
|
242
|
+
`);
|
|
243
|
+
const completeTransaction = db.transaction((projectId, scanId, result) => {
|
|
244
|
+
const scan = getScanRow(projectId, scanId);
|
|
245
|
+
if (!scan || (scan.status !== 'pending' && scan.status !== 'running')) {
|
|
246
|
+
return null;
|
|
247
|
+
}
|
|
248
|
+
if (result.schemaVersion !== scan.graph_schema_version || result.analyzerVersion !== scan.analyzer_version) {
|
|
249
|
+
throw new Error('Repository graph result identity does not match the admitted scan');
|
|
250
|
+
}
|
|
251
|
+
const nodes = result.nodes.slice(0, MAX_REPOSITORY_GRAPH_NODES);
|
|
252
|
+
const nodeIds = new Set(nodes.map(node => node.id));
|
|
253
|
+
if (nodeIds.size !== nodes.length) {
|
|
254
|
+
throw new Error('Repository graph node IDs must be unique within a scan');
|
|
255
|
+
}
|
|
256
|
+
const eligibleEdges = result.edges.filter(edge => nodeIds.has(edge.source) && nodeIds.has(edge.target));
|
|
257
|
+
const edges = eligibleEdges.slice(0, MAX_REPOSITORY_GRAPH_EDGES);
|
|
258
|
+
const edgeIds = new Set(edges.map(edge => edge.id));
|
|
259
|
+
if (edgeIds.size !== edges.length) {
|
|
260
|
+
throw new Error('Repository graph edge IDs must be unique within a scan');
|
|
261
|
+
}
|
|
262
|
+
const diagnostics = boundedDiagnostics(result.diagnostics);
|
|
263
|
+
const insertNode = db.prepare(`
|
|
264
|
+
INSERT INTO repository_graph_nodes (
|
|
265
|
+
scan_id, project_id, id, kind, path, name, file_kind, language, is_test, test_classification
|
|
266
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
267
|
+
`);
|
|
268
|
+
for (const node of nodes) {
|
|
269
|
+
insertNode.run(scanId, projectId, node.id, node.kind, node.path, node.name, node.fileKind, node.language, Number(node.isTest), node.testClassification);
|
|
270
|
+
}
|
|
271
|
+
const insertEdge = db.prepare(`
|
|
272
|
+
INSERT INTO repository_graph_edges (
|
|
273
|
+
scan_id, project_id, id, source_node_id, target_node_id, kind, evidence_class, detail
|
|
274
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?)
|
|
275
|
+
`);
|
|
276
|
+
for (const edge of edges) {
|
|
277
|
+
insertEdge.run(scanId, projectId, edge.id, edge.source, edge.target, edge.kind, edge.evidence, edge.detail);
|
|
278
|
+
}
|
|
279
|
+
diagnostics.values.forEach((diagnostic, sequence) => {
|
|
280
|
+
insertDiagnostic.run(scanId, projectId, sequence, diagnostic.code, diagnostic.severity, diagnostic.message, diagnostic.path);
|
|
281
|
+
});
|
|
282
|
+
const nodesTruncated = result.nodes.length > nodes.length || result.completeness.nodeLimitReached;
|
|
283
|
+
const edgesTruncated = result.edges.length > edges.length
|
|
284
|
+
|| eligibleEdges.length > edges.length
|
|
285
|
+
|| eligibleEdges.length !== result.edges.length
|
|
286
|
+
|| result.completeness.edgeLimitReached;
|
|
287
|
+
db.prepare(`
|
|
288
|
+
UPDATE repository_graph_scans
|
|
289
|
+
SET status = 'completed',
|
|
290
|
+
discovered_file_count = ?, admitted_file_count = ?, skipped_file_count = ?, inspected_byte_count = ?,
|
|
291
|
+
node_count = ?, edge_count = ?, diagnostic_count = ?,
|
|
292
|
+
manifest_truncated = ?, typescript_truncated = ?, history_truncated = ?, nodes_truncated = ?, edges_truncated = ?, diagnostics_truncated = ?,
|
|
293
|
+
completed_at = CURRENT_TIMESTAMP, updated_at = CURRENT_TIMESTAMP
|
|
294
|
+
WHERE id = ? AND project_id = ? AND status IN ('pending', 'running')
|
|
295
|
+
`).run(result.manifest.discoveredCount, result.manifest.admittedCount, result.manifest.skippedCount, result.manifest.inspectedBytes, nodes.length, edges.length, diagnostics.values.length, Number(result.completeness.manifestTruncated), Number(result.completeness.typescriptTruncated), Number(result.completeness.historyTruncated), Number(nodesTruncated), Number(edgesTruncated), Number(diagnostics.truncated || result.completeness.diagnosticLimitReached), scanId, projectId);
|
|
296
|
+
return getRepositoryGraphScan(projectId, scanId);
|
|
297
|
+
});
|
|
298
|
+
export const completeRepositoryGraphScan = (projectId, scanId, identity, result) => {
|
|
299
|
+
const scan = getScanRow(projectId, scanId);
|
|
300
|
+
if (!scan
|
|
301
|
+
|| identity.components.projectId !== projectId
|
|
302
|
+
|| scan.identity_fingerprint !== identity.fingerprint
|
|
303
|
+
|| scan.identity_json !== JSON.stringify(identity.components)) {
|
|
304
|
+
throw new Error('Repository graph completion identity does not match the admitted scan');
|
|
305
|
+
}
|
|
306
|
+
return completeTransaction(projectId, scanId, result);
|
|
307
|
+
};
|
|
308
|
+
const terminalizeTransaction = db.transaction((projectId, scanId, status, input) => {
|
|
309
|
+
const scan = getScanRow(projectId, scanId);
|
|
310
|
+
if (!scan || (scan.status !== 'pending' && scan.status !== 'running')) {
|
|
311
|
+
return null;
|
|
312
|
+
}
|
|
313
|
+
const diagnostics = boundedDiagnostics(input.diagnostics ?? []);
|
|
314
|
+
diagnostics.values.forEach((diagnostic, sequence) => {
|
|
315
|
+
insertDiagnostic.run(scanId, projectId, sequence, diagnostic.code, diagnostic.severity, diagnostic.message, diagnostic.path);
|
|
316
|
+
});
|
|
317
|
+
const counters = [
|
|
318
|
+
input.discovered_file_count ?? 0,
|
|
319
|
+
input.admitted_file_count ?? 0,
|
|
320
|
+
input.skipped_file_count ?? 0,
|
|
321
|
+
input.inspected_byte_count ?? 0,
|
|
322
|
+
input.node_count ?? 0,
|
|
323
|
+
input.edge_count ?? 0,
|
|
324
|
+
];
|
|
325
|
+
if (counters.some(value => !Number.isSafeInteger(value) || value < 0)) {
|
|
326
|
+
throw new Error('Repository graph terminal counters must be non-negative safe integers');
|
|
327
|
+
}
|
|
328
|
+
db.prepare(`
|
|
329
|
+
UPDATE repository_graph_scans
|
|
330
|
+
SET status = ?, discovered_file_count = ?, admitted_file_count = ?, skipped_file_count = ?,
|
|
331
|
+
inspected_byte_count = ?, node_count = ?, edge_count = ?, diagnostic_count = ?,
|
|
332
|
+
diagnostics_truncated = ?, completed_at = CURRENT_TIMESTAMP, updated_at = CURRENT_TIMESTAMP
|
|
333
|
+
WHERE id = ? AND project_id = ? AND status IN ('pending', 'running')
|
|
334
|
+
`).run(status, ...counters, diagnostics.values.length, Number(diagnostics.truncated), scanId, projectId);
|
|
335
|
+
return getRepositoryGraphScan(projectId, scanId);
|
|
336
|
+
});
|
|
337
|
+
export const terminalizeRepositoryGraphScan = (projectId, scanId, status, input = {}) => terminalizeTransaction(projectId, scanId, status, input);
|
|
338
|
+
export const addRepositoryGraphScanReference = (projectId, scanId, referenceType, referenceId) => {
|
|
339
|
+
if (!referenceType.trim() || !referenceId.trim()) {
|
|
340
|
+
throw new Error('Repository graph reference type and ID must not be empty');
|
|
341
|
+
}
|
|
342
|
+
db.prepare(`
|
|
343
|
+
INSERT INTO repository_graph_scan_references (project_id, reference_type, reference_id, scan_id)
|
|
344
|
+
VALUES (?, ?, ?, ?)
|
|
345
|
+
ON CONFLICT(project_id, reference_type, reference_id) DO UPDATE SET scan_id = excluded.scan_id
|
|
346
|
+
`).run(projectId, referenceType, referenceId, scanId);
|
|
347
|
+
};
|
|
348
|
+
export const removeRepositoryGraphScanReference = (projectId, referenceType, referenceId) => db.prepare(`
|
|
349
|
+
DELETE FROM repository_graph_scan_references
|
|
350
|
+
WHERE project_id = ? AND reference_type = ? AND reference_id = ?
|
|
351
|
+
`).run(projectId, referenceType, referenceId).changes > 0;
|
|
352
|
+
//# sourceMappingURL=repositoryGraphStore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repositoryGraphStore.js","sourceRoot":"","sources":["../../../server/lib/repositoryGraphStore.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { resolveSessionTarget } from './sessionTargets.js';
|
|
2
|
+
const unavailable = (target, reason, message) => ({ state: 'unavailable', target, reason, message });
|
|
3
|
+
export const resolveRepositoryGraphTarget = (project, target) => {
|
|
4
|
+
if (!project) {
|
|
5
|
+
return unavailable(target, 'project_unavailable', 'Project no longer exists.');
|
|
6
|
+
}
|
|
7
|
+
if (target.kind === 'repo_root' && target.bundle_id !== null) {
|
|
8
|
+
return unavailable(target, 'invalid_target', 'Repo-root target cannot include a bundle ID.');
|
|
9
|
+
}
|
|
10
|
+
if (target.kind === 'bundle' && !target.bundle_id.trim()) {
|
|
11
|
+
return unavailable(target, 'invalid_target', 'Bundle target requires a bundle ID.');
|
|
12
|
+
}
|
|
13
|
+
const resolution = resolveSessionTarget({
|
|
14
|
+
project_id: project.id,
|
|
15
|
+
target_kind: target.kind,
|
|
16
|
+
target_bundle_id: target.bundle_id,
|
|
17
|
+
target_branch_snapshot: null,
|
|
18
|
+
}, project);
|
|
19
|
+
if (resolution.target_available && resolution.cwd) {
|
|
20
|
+
return { state: 'available', target, cwd: resolution.cwd };
|
|
21
|
+
}
|
|
22
|
+
if (target.kind === 'repo_root') {
|
|
23
|
+
return unavailable(target, 'repository_unavailable', resolution.target_unavailable_reason ?? 'Project repository is unavailable.');
|
|
24
|
+
}
|
|
25
|
+
const reason = resolution.target_unavailable_reason?.includes('worktree')
|
|
26
|
+
? 'worktree_unavailable'
|
|
27
|
+
: 'bundle_unavailable';
|
|
28
|
+
return unavailable(target, reason, resolution.target_unavailable_reason ?? 'Target bundle is unavailable.');
|
|
29
|
+
};
|
|
30
|
+
//# sourceMappingURL=repositoryGraphTargets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repositoryGraphTargets.js","sourceRoot":"","sources":["../../../server/lib/repositoryGraphTargets.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AA2B1D,MAAM,WAAW,GAAG,CAClB,MAAuC,EACvC,MAA8C,EAC9C,OAAe,EACkB,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAA;AAEzF,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAC1C,OAAuB,EACvB,MAAuC,EACN,EAAE;IACnC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,WAAW,CAAC,MAAM,EAAE,qBAAqB,EAAE,2BAA2B,CAAC,CAAA;IAChF,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,KAAK,WAAW,IAAI,MAAM,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;QAC7D,OAAO,WAAW,CAAC,MAAM,EAAE,gBAAgB,EAAE,8CAA8C,CAAC,CAAA;IAC9F,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,CAAC;QACzD,OAAO,WAAW,CAAC,MAAM,EAAE,gBAAgB,EAAE,qCAAqC,CAAC,CAAA;IACrF,CAAC;IAED,MAAM,UAAU,GAAG,oBAAoB,CAAC;QACtC,UAAU,EAAE,OAAO,CAAC,EAAE;QACtB,WAAW,EAAE,MAAM,CAAC,IAAI;QACxB,gBAAgB,EAAE,MAAM,CAAC,SAAS;QAClC,sBAAsB,EAAE,IAAI;KAC7B,EAAE,OAAO,CAAC,CAAA;IACX,IAAI,UAAU,CAAC,gBAAgB,IAAI,UAAU,CAAC,GAAG,EAAE,CAAC;QAClD,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,CAAC,GAAG,EAAE,CAAA;IAC5D,CAAC;IAED,IAAI,MAAM,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QAChC,OAAO,WAAW,CAChB,MAAM,EACN,wBAAwB,EACxB,UAAU,CAAC,yBAAyB,IAAI,oCAAoC,CAC7E,CAAA;IACH,CAAC;IACD,MAAM,MAAM,GAAG,UAAU,CAAC,yBAAyB,EAAE,QAAQ,CAAC,UAAU,CAAC;QACvE,CAAC,CAAC,sBAAsB;QACxB,CAAC,CAAC,oBAAoB,CAAA;IACxB,OAAO,WAAW,CAChB,MAAM,EACN,MAAM,EACN,UAAU,CAAC,yBAAyB,IAAI,+BAA+B,CACxE,CAAA;AACH,CAAC,CAAA"}
|