@rryando/arcs 4.2.1 → 5.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (192) hide show
  1. package/README.md +17 -0
  2. package/dist/cli/arcs-flash.d.ts +1 -1
  3. package/dist/cli/arcs-flash.d.ts.map +1 -1
  4. package/dist/cli/arcs-flash.js +8 -4
  5. package/dist/cli/arcs-flash.js.map +1 -1
  6. package/dist/cli/arcs-orchestrate.d.ts +1 -1
  7. package/dist/cli/arcs-orchestrate.d.ts.map +1 -1
  8. package/dist/cli/arcs-orchestrate.js +6 -2
  9. package/dist/cli/arcs-orchestrate.js.map +1 -1
  10. package/dist/cli/arg-parser.d.ts +1 -0
  11. package/dist/cli/arg-parser.d.ts.map +1 -1
  12. package/dist/cli/arg-parser.js +12 -2
  13. package/dist/cli/arg-parser.js.map +1 -1
  14. package/dist/cli/command-registry.d.ts +2 -0
  15. package/dist/cli/command-registry.d.ts.map +1 -1
  16. package/dist/cli/command-registry.js.map +1 -1
  17. package/dist/cli/commands/index.d.ts +2 -0
  18. package/dist/cli/commands/index.d.ts.map +1 -1
  19. package/dist/cli/commands/index.js +2 -0
  20. package/dist/cli/commands/index.js.map +1 -1
  21. package/dist/cli/commands/proposal-doc.js +3 -2
  22. package/dist/cli/commands/proposal-doc.js.map +1 -1
  23. package/dist/cli/commands/remember.js +1 -0
  24. package/dist/cli/commands/remember.js.map +1 -1
  25. package/dist/cli/commands/worktree.d.ts +2 -0
  26. package/dist/cli/commands/worktree.d.ts.map +1 -0
  27. package/dist/cli/commands/worktree.js +608 -0
  28. package/dist/cli/commands/worktree.js.map +1 -0
  29. package/dist/cli/dag-commands.d.ts +9 -0
  30. package/dist/cli/dag-commands.d.ts.map +1 -1
  31. package/dist/cli/dag-commands.js +37 -26
  32. package/dist/cli/dag-commands.js.map +1 -1
  33. package/dist/cli/help-generator.d.ts.map +1 -1
  34. package/dist/cli/help-generator.js +3 -0
  35. package/dist/cli/help-generator.js.map +1 -1
  36. package/dist/cli/index.d.ts.map +1 -1
  37. package/dist/cli/index.js +14 -24
  38. package/dist/cli/index.js.map +1 -1
  39. package/dist/cli/orchestrator-shared-blocks.d.ts +7 -5
  40. package/dist/cli/orchestrator-shared-blocks.d.ts.map +1 -1
  41. package/dist/cli/orchestrator-shared-blocks.js +45 -21
  42. package/dist/cli/orchestrator-shared-blocks.js.map +1 -1
  43. package/dist/cli/write-gate.d.ts +20 -0
  44. package/dist/cli/write-gate.d.ts.map +1 -0
  45. package/dist/cli/write-gate.js +39 -0
  46. package/dist/cli/write-gate.js.map +1 -0
  47. package/dist/utils/worktree-store.d.ts +54 -0
  48. package/dist/utils/worktree-store.d.ts.map +1 -0
  49. package/dist/utils/worktree-store.js +150 -0
  50. package/dist/utils/worktree-store.js.map +1 -0
  51. package/dist/utils/worktree.d.ts +71 -0
  52. package/dist/utils/worktree.d.ts.map +1 -0
  53. package/dist/utils/worktree.js +197 -0
  54. package/dist/utils/worktree.js.map +1 -0
  55. package/dist/web-client/assets/{GraphCanvas-Dw6EcoDb.js → GraphCanvas-BYZE4sO9.js} +1 -1
  56. package/dist/web-client/assets/{MarkdownEditor-Cz5_44Ej.js → MarkdownEditor-BKx6M1cw.js} +1 -1
  57. package/dist/web-client/assets/{abnfDiagram-VRR7QNED-CFJzLuew.js → abnfDiagram-VRR7QNED-D4kt0l2y.js} +1 -1
  58. package/dist/web-client/assets/architecture-TIHT7OUA-CIdGE6VO.js +1 -0
  59. package/dist/web-client/assets/{architectureDiagram-ZJ3FMSHR-FRlSgnnW.js → architectureDiagram-ZJ3FMSHR-bu29SJFS.js} +1 -1
  60. package/dist/web-client/assets/{blockDiagram-677ZJIJ3-WUkkunPZ.js → blockDiagram-677ZJIJ3-hsu7mXKw.js} +1 -1
  61. package/dist/web-client/assets/{c4Diagram-LMCZKHZV-BKeAsL6F.js → c4Diagram-LMCZKHZV-DMllRlT_.js} +1 -1
  62. package/dist/web-client/assets/channel-CBg-s-ZD.js +1 -0
  63. package/dist/web-client/assets/{chunk-32BRIVSS-B0b9kUcF.js → chunk-32BRIVSS-BSzwj5eM.js} +1 -1
  64. package/dist/web-client/assets/{chunk-52WLFC77-i6Y-vfL3.js → chunk-52WLFC77-RDdZn6yY.js} +1 -1
  65. package/dist/web-client/assets/{chunk-C7G6YPKG-atYWm6iP.js → chunk-C7G6YPKG-DQr--txT.js} +1 -1
  66. package/dist/web-client/assets/{chunk-EX3LRPZG-CZD6y0UU.js → chunk-EX3LRPZG-Bb8nc4z4.js} +1 -1
  67. package/dist/web-client/assets/{chunk-FWX5IMBZ-CVErR-UZ.js → chunk-FWX5IMBZ-QvBpOcOg.js} +2 -2
  68. package/dist/web-client/assets/{chunk-HOUHSVGY-BlHO2iQ3.js → chunk-HOUHSVGY-B0mX_yjc.js} +1 -1
  69. package/dist/web-client/assets/{chunk-ICXQ74PX-Ar8kfXfa.js → chunk-ICXQ74PX-BmJSQqOH.js} +1 -1
  70. package/dist/web-client/assets/{chunk-MOJQB5TN-DKrK867P.js → chunk-MOJQB5TN-BrEI4GGn.js} +1 -1
  71. package/dist/web-client/assets/{chunk-OGEWGWER-BmGykUeg.js → chunk-OGEWGWER-CrqDPOWP.js} +1 -1
  72. package/dist/web-client/assets/{chunk-PUDLZKDR-Bq23pnso.js → chunk-PUDLZKDR-DfPKldpG.js} +1 -1
  73. package/dist/web-client/assets/{chunk-Q4XR5HBZ-g15qvFAN.js → chunk-Q4XR5HBZ-ekATI9aV.js} +1 -1
  74. package/dist/web-client/assets/{chunk-V7JOEXUC-uyXA7S9r.js → chunk-V7JOEXUC-C5APsP1t.js} +1 -1
  75. package/dist/web-client/assets/{chunk-VAUOI2AC-WofZ-2M0.js → chunk-VAUOI2AC-BhfSWJZI.js} +1 -1
  76. package/dist/web-client/assets/{chunk-VR4S4FIN-DtTkK86v.js → chunk-VR4S4FIN-BGa-44J7.js} +1 -1
  77. package/dist/web-client/assets/{chunk-WYO6CB5R-zVyUwJq3.js → chunk-WYO6CB5R-By1K0guW.js} +1 -1
  78. package/dist/web-client/assets/{chunk-ZGVPDNZ5-CA1Oe3TK.js → chunk-ZGVPDNZ5-Vnzpc76F.js} +1 -1
  79. package/dist/web-client/assets/classDiagram-OUVF2IWQ-ciwDjhUR.js +1 -0
  80. package/dist/web-client/assets/classDiagram-v2-EOCWNBFH-ciwDjhUR.js +1 -0
  81. package/dist/web-client/assets/{cynefin-VYW2F7L2-ivJY1h_9.js → cynefin-VYW2F7L2-C6MOMOOz.js} +1 -1
  82. package/dist/web-client/assets/{cynefinDiagram-TSTJHNR4-D2DstShq.js → cynefinDiagram-TSTJHNR4-Cseyu79b.js} +1 -1
  83. package/dist/web-client/assets/{dagre-VKFMJZFB-CwnMRy0K.js → dagre-VKFMJZFB-CQJlIuNh.js} +1 -1
  84. package/dist/web-client/assets/{diagram-FQU43EPY-BKJv6Cvw.js → diagram-FQU43EPY-DpqDxhq4.js} +1 -1
  85. package/dist/web-client/assets/{diagram-G47NLZAW-CwCXcgU5.js → diagram-G47NLZAW-C11fYYaF.js} +1 -1
  86. package/dist/web-client/assets/{diagram-NH7WQ7WH-CkghU1-6.js → diagram-NH7WQ7WH-BiG-uRAF.js} +1 -1
  87. package/dist/web-client/assets/{diagram-OA4YK3LP-D3siQIGu.js → diagram-OA4YK3LP-CIXWWjq-.js} +1 -1
  88. package/dist/web-client/assets/{diagram-WEI45ONY-CSs9xTBn.js → diagram-WEI45ONY-C3OgIWu9.js} +1 -1
  89. package/dist/web-client/assets/{ebnfDiagram-CCIWWBDH--i52vMiv.js → ebnfDiagram-CCIWWBDH-BHF_NA3_.js} +1 -1
  90. package/dist/web-client/assets/{erDiagram-Q63AITRT-q2hgOBY1.js → erDiagram-Q63AITRT-CUOJCrLy.js} +1 -1
  91. package/dist/web-client/assets/eventmodeling-45OFAUF4-DxfboL1J.js +1 -0
  92. package/dist/web-client/assets/flowDiagram-23GEKE2U-C3NzpTtI.js +1 -0
  93. package/dist/web-client/assets/{ganttDiagram-NO4QXBWP-BZ2rBbTe.js → ganttDiagram-NO4QXBWP-D_4BMJ-g.js} +1 -1
  94. package/dist/web-client/assets/{gitGraph-TEB2WS4Q-OnJ8tHgt.js → gitGraph-TEB2WS4Q-CBuaZBId.js} +1 -1
  95. package/dist/web-client/assets/{gitGraphDiagram-IHSO6WYX-CPNExFAr.js → gitGraphDiagram-IHSO6WYX-BbztsGuO.js} +1 -1
  96. package/dist/web-client/assets/index-B1KVIr80.css +2 -0
  97. package/dist/web-client/assets/{index-DCBn-YrR.js → index-BWd2fBNL.js} +38 -38
  98. package/dist/web-client/assets/{info-DKCQHKI2-DGuJbmdY.js → info-DKCQHKI2-Bzi0Xjro.js} +1 -1
  99. package/dist/web-client/assets/{infoDiagram-FWYZ7A6U-ADIAn-P5.js → infoDiagram-FWYZ7A6U-BkeEKcr0.js} +1 -1
  100. package/dist/web-client/assets/{ishikawaDiagram-FXEZZL3T-CUx-RGfg.js → ishikawaDiagram-FXEZZL3T-CVusWu0p.js} +1 -1
  101. package/dist/web-client/assets/{journeyDiagram-5HDEW3XC-BH7-tBBy.js → journeyDiagram-5HDEW3XC-BUxu71zw.js} +1 -1
  102. package/dist/web-client/assets/{kanban-definition-HUTT4EX6-BGEXBnI2.js → kanban-definition-HUTT4EX6-BE8Hv4Kd.js} +1 -1
  103. package/dist/web-client/assets/{line-CC-5ezU8.js → line-CiAoINJS.js} +1 -1
  104. package/dist/web-client/assets/{mermaid-parser.core-Dw18Fjbq.js → mermaid-parser.core-BW47khiS.js} +3 -3
  105. package/dist/web-client/assets/{mermaid.core-CMQBgE43.js → mermaid.core-DP--Jl9R.js} +3 -3
  106. package/dist/web-client/assets/{mindmap-definition-LN4V7U3C-CGtjw8tB.js → mindmap-definition-LN4V7U3C-CvWJUqdq.js} +1 -1
  107. package/dist/web-client/assets/{packet-7NZHBO7P-w71Y4Hzd.js → packet-7NZHBO7P-XtzX9SaQ.js} +1 -1
  108. package/dist/web-client/assets/{pegDiagram-2B236MQR-DWtfEm4T.js → pegDiagram-2B236MQR-XNo0K1ct.js} +1 -1
  109. package/dist/web-client/assets/{pie-RZYD4A2V-S9ztgnWs.js → pie-RZYD4A2V-B1eUd9yt.js} +1 -1
  110. package/dist/web-client/assets/{pieDiagram-ENE6RG2P-BWZQPN4m.js → pieDiagram-ENE6RG2P-CRSb5z-4.js} +1 -1
  111. package/dist/web-client/assets/{quadrantDiagram-ABIIQ3AL-DINDwblH.js → quadrantDiagram-ABIIQ3AL-DziMaQxE.js} +1 -1
  112. package/dist/web-client/assets/{radar-I7S5WNFK-BOGl9krB.js → radar-I7S5WNFK-BpRqZH2g.js} +1 -1
  113. package/dist/web-client/assets/{railroad-3IZDKUUU-CR9kuYSZ.js → railroad-3IZDKUUU-FDIHW04k.js} +1 -1
  114. package/dist/web-client/assets/railroad-abnf-AHOZXSZD-BKj6JAhH.js +1 -0
  115. package/dist/web-client/assets/railroad-ebnf-EBAXGLYW-ChDM1OBv.js +1 -0
  116. package/dist/web-client/assets/railroad-peg-LSFZ7HO6-DvwA2e0i.js +1 -0
  117. package/dist/web-client/assets/{railroadDiagram-RFXS5EU6-byLCs9hp.js → railroadDiagram-RFXS5EU6-Cs7EVBaz.js} +1 -1
  118. package/dist/web-client/assets/{requirementDiagram-TGXJPOKE-Dn_FtbqW.js → requirementDiagram-TGXJPOKE-B9_Lj1ga.js} +1 -1
  119. package/dist/web-client/assets/{sankeyDiagram-HTMAVEWB-DUjRrCeC.js → sankeyDiagram-HTMAVEWB-DuTJTiy0.js} +1 -1
  120. package/dist/web-client/assets/{sequenceDiagram-DBY2YBRQ-BmBz8Wpq.js → sequenceDiagram-DBY2YBRQ-vOCU5UoE.js} +1 -1
  121. package/dist/web-client/assets/{stateDiagram-2N3HPSRC-BAYHjmqB.js → stateDiagram-2N3HPSRC-rxAnfzWn.js} +1 -1
  122. package/dist/web-client/assets/stateDiagram-v2-6OUMAXLB-B3EvQPEe.js +1 -0
  123. package/dist/web-client/assets/{swimlanes-5IMT3BWC-Bm942AR-.js → swimlanes-5IMT3BWC-gdVZUnPe.js} +1 -1
  124. package/dist/web-client/assets/swimlanesDiagram-G3AALYLV-WcOXuCPg.js +8 -0
  125. package/dist/web-client/assets/{timeline-definition-FHXFAJF6-CHAZHhQk.js → timeline-definition-FHXFAJF6-Do68JyGy.js} +1 -1
  126. package/dist/web-client/assets/{treeView-QDETBFTQ-DHHkLsSy.js → treeView-QDETBFTQ-CdZkmg80.js} +1 -1
  127. package/dist/web-client/assets/{treemap-6X3UGDF4-BUxZ8fhY.js → treemap-6X3UGDF4-ub54fmpW.js} +1 -1
  128. package/dist/web-client/assets/{vennDiagram-L72KCM5P-BL9TRcUU.js → vennDiagram-L72KCM5P-D-r8NBEp.js} +1 -1
  129. package/dist/web-client/assets/{wardley-OPB4EBWU-CfJ5mO-y.js → wardley-OPB4EBWU-CTleH1-J.js} +1 -1
  130. package/dist/web-client/assets/{wardleyDiagram-EHGQE667-BlH1TSjy.js → wardleyDiagram-EHGQE667-BU8Kw39F.js} +1 -1
  131. package/dist/web-client/assets/{xychartDiagram-FW5EYKEG-BJN6wtrV.js → xychartDiagram-FW5EYKEG-CfNnag6i.js} +1 -1
  132. package/dist/web-client/index.html +2 -2
  133. package/dist/web-server/routes/sessions.js +43 -2
  134. package/dist/web-server/routes/sessions.js.map +1 -1
  135. package/opencode/arcs/.opencode/plugins/arcs.js +5 -1
  136. package/opencode/arcs/bundle-runtime.json +3 -0
  137. package/opencode/arcs/prompts/arcs-docs.txt +1 -1
  138. package/opencode/arcs/prompts/arcs-flash.txt +46 -20
  139. package/opencode/arcs/prompts/arcs-orchestrate-caveman.txt +47 -21
  140. package/opencode/arcs/prompts/arcs-orchestrate.txt +47 -21
  141. package/opencode/arcs/prompts/software-engineer.txt +6 -0
  142. package/opencode/arcs/skills/writing-proposals/SKILL.md +90 -0
  143. package/package.json +2 -2
  144. package/scripts/build-opencode-bundle.mjs +7 -8
  145. package/dist/cli/commands/hooks.d.ts +0 -76
  146. package/dist/cli/commands/hooks.d.ts.map +0 -1
  147. package/dist/cli/commands/hooks.js +0 -436
  148. package/dist/cli/commands/hooks.js.map +0 -1
  149. package/dist/utils/claude-code-hook-install.d.ts +0 -80
  150. package/dist/utils/claude-code-hook-install.d.ts.map +0 -1
  151. package/dist/utils/claude-code-hook-install.js +0 -212
  152. package/dist/utils/claude-code-hook-install.js.map +0 -1
  153. package/dist/utils/graphify-knowledge.d.ts +0 -22
  154. package/dist/utils/graphify-knowledge.d.ts.map +0 -1
  155. package/dist/utils/graphify-knowledge.js +0 -47
  156. package/dist/utils/graphify-knowledge.js.map +0 -1
  157. package/dist/utils/graphify.d.ts +0 -104
  158. package/dist/utils/graphify.d.ts.map +0 -1
  159. package/dist/utils/graphify.js +0 -439
  160. package/dist/utils/graphify.js.map +0 -1
  161. package/dist/utils/hook-contract.d.ts +0 -36
  162. package/dist/utils/hook-contract.d.ts.map +0 -1
  163. package/dist/utils/hook-contract.js +0 -35
  164. package/dist/utils/hook-contract.js.map +0 -1
  165. package/dist/utils/hook-token-store.d.ts +0 -63
  166. package/dist/utils/hook-token-store.d.ts.map +0 -1
  167. package/dist/utils/hook-token-store.js +0 -88
  168. package/dist/utils/hook-token-store.js.map +0 -1
  169. package/dist/web-client/assets/architecture-TIHT7OUA-CoHvhex9.js +0 -1
  170. package/dist/web-client/assets/channel-D8xMXC5_.js +0 -1
  171. package/dist/web-client/assets/classDiagram-OUVF2IWQ-Doj1_hvZ.js +0 -1
  172. package/dist/web-client/assets/classDiagram-v2-EOCWNBFH-Doj1_hvZ.js +0 -1
  173. package/dist/web-client/assets/eventmodeling-45OFAUF4-ESVuFkJJ.js +0 -1
  174. package/dist/web-client/assets/flowDiagram-23GEKE2U-DN9SdR9f.js +0 -1
  175. package/dist/web-client/assets/index-wSzUPvml.css +0 -2
  176. package/dist/web-client/assets/railroad-abnf-AHOZXSZD-BvbCHrlR.js +0 -1
  177. package/dist/web-client/assets/railroad-ebnf-EBAXGLYW-D869lbCL.js +0 -1
  178. package/dist/web-client/assets/railroad-peg-LSFZ7HO6-r4TXaJPI.js +0 -1
  179. package/dist/web-client/assets/stateDiagram-v2-6OUMAXLB-Bl-1K1zV.js +0 -1
  180. package/dist/web-client/assets/swimlanesDiagram-G3AALYLV-DHU7bsfA.js +0 -8
  181. package/dist/web-server/hook-auth.d.ts +0 -12
  182. package/dist/web-server/hook-auth.d.ts.map +0 -1
  183. package/dist/web-server/hook-auth.js +0 -36
  184. package/dist/web-server/hook-auth.js.map +0 -1
  185. package/dist/web-server/opencode-client.d.ts +0 -123
  186. package/dist/web-server/opencode-client.d.ts.map +0 -1
  187. package/dist/web-server/opencode-client.js +0 -514
  188. package/dist/web-server/opencode-client.js.map +0 -1
  189. package/dist/web-server/routes/hook-events.d.ts +0 -43
  190. package/dist/web-server/routes/hook-events.d.ts.map +0 -1
  191. package/dist/web-server/routes/hook-events.js +0 -316
  192. package/dist/web-server/routes/hook-events.js.map +0 -1
@@ -1,88 +0,0 @@
1
- /**
2
- * Per-project auth token for the Claude Code session-bridge hook endpoint.
3
- *
4
- * Loopback-only is not enough on its own: every process on the machine shares
5
- * localhost, so any local program could otherwise register sessions, write
6
- * checkpoints, and hit the SessionStart path — whose answer is injected into a
7
- * live agent session as `additionalContext`. The token proves the caller is
8
- * the hook script that `arcs hooks install-claude-code` provisioned for this
9
- * project.
10
- *
11
- * Intentionally not a CRUD store — one token per project, rotated by rerunning
12
- * the install command. No index, no markdown mirror, no lock (a rotation races
13
- * only with itself, and the loser simply has to rerun install).
14
- */
15
- import { timingSafeEqual } from "node:crypto";
16
- import { chmod } from "node:fs/promises";
17
- import { dirname, join } from "node:path";
18
- import { readJsonSafe } from "./json.js";
19
- import { ensureDir, nowISO, writeJson } from "./storage-utils.js";
20
- export function hookTokenPath(projectDir) {
21
- return join(projectDir, "hooks", "claude-code-token.json");
22
- }
23
- export async function readHookToken(projectDir) {
24
- const file = await readJsonSafe(hookTokenPath(projectDir));
25
- return typeof file?.token === "string" && file.token ? file.token : undefined;
26
- }
27
- /**
28
- * Rotates the on-disk token, owner-only.
29
- *
30
- * Unlike the web token there is no in-memory copy to verify against — the hook
31
- * subprocess re-reads this file at every checkpoint, so the FILE is the
32
- * credential and its mode is the whole control. `writeJson` stages a temp file
33
- * and renames it into place with no mode argument, so the token lands 0644
34
- * (world-readable) on a default umask — and it lands that way on EVERY write,
35
- * not just the first: the rename swaps in the freshly created temp inode, whose
36
- * mode came from the umask, and the previous file's mode is discarded with the
37
- * inode it belonged to. (A mode passed at open() would in fact have covered this
38
- * writer, precisely because every write creates the destination inode; the
39
- * "applies only at create" caveat bites a direct non-atomic open(path,"w",mode)
40
- * over an existing file, which is not this path.) The chmod is nonetheless
41
- * unconditional rather than conditional on the mode read back, so the 0600
42
- * guarantee survives a future switch away from the atomic writer.
43
- *
44
- * The directory is narrowed too: the staged temp file is a fresh inode born
45
- * under the umask, so it is briefly world-readable between write and rename.
46
- * 0o700 on the enclosing directory — which holds nothing but this token —
47
- * denies another account the traversal needed to reach that window at all.
48
- *
49
- * What this buys, stated honestly: 0o600 is a cross-user control. It keeps
50
- * other UNIX accounts out; it is NOT a defense against a process running as
51
- * THIS user, which can read the file at any mode. Nor is this the token's only
52
- * copy — `arcs hooks install-claude-code --write` embeds the same value in the
53
- * workspace's .claude/settings.local.json, which is now created 0o600 and
54
- * chmodded 0o600 unconditionally too (claude-code-hook-install.ts), though that
55
- * copy is inlined into the hook command string and so still leaks to `ps` on
56
- * every hook fire. So this is a floor on ARCS's own copy, not a guarantee about
57
- * the secret.
58
- *
59
- * A chmod failure propagates and fails the install command. That is
60
- * deliberate — the caller (`arcs hooks install-claude-code`) has not printed
61
- * the snippet yet, so the run fails closed and the user reruns to rotate,
62
- * rather than silently installing a token this process could not protect. The
63
- * hook's own read path (readHookToken/verifyHookToken) is untouched by this and
64
- * still never throws.
65
- */
66
- export async function writeHookToken(projectDir, token) {
67
- const path = hookTokenPath(projectDir);
68
- await ensureDir(dirname(path));
69
- await chmod(dirname(path), 0o700);
70
- await writeJson(path, { token, createdAt: nowISO() });
71
- await chmod(path, 0o600);
72
- }
73
- /**
74
- * Constant-time token comparison. Returns false when the project has no token
75
- * provisioned yet, so an uninstalled project cannot be driven by an empty
76
- * `Authorization` header.
77
- */
78
- export async function verifyHookToken(projectDir, candidate) {
79
- const token = await readHookToken(projectDir);
80
- if (!token || !candidate)
81
- return false;
82
- const expected = Buffer.from(token, "utf-8");
83
- const actual = Buffer.from(candidate, "utf-8");
84
- if (expected.length !== actual.length)
85
- return false;
86
- return timingSafeEqual(expected, actual);
87
- }
88
- //# sourceMappingURL=hook-token-store.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hook-token-store.js","sourceRoot":"","sources":["../../src/utils/hook-token-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAOlE,MAAM,UAAU,aAAa,CAAC,UAAkB;IAC9C,OAAO,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,wBAAwB,CAAC,CAAC;AAC7D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,UAAkB;IACpD,MAAM,IAAI,GAAG,MAAM,YAAY,CAAgB,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC;IAC1E,OAAO,OAAO,IAAI,EAAE,KAAK,KAAK,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AAChF,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,UAAkB,EAAE,KAAa;IACpE,MAAM,IAAI,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC;IACvC,MAAM,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IAC/B,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;IAClC,MAAM,SAAS,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;IACtD,MAAM,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAC3B,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,UAAkB,EAAE,SAAiB;IACzE,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,UAAU,CAAC,CAAC;IAC9C,IAAI,CAAC,KAAK,IAAI,CAAC,SAAS;QAAE,OAAO,KAAK,CAAC;IAEvC,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC7C,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAC/C,IAAI,QAAQ,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IACpD,OAAO,eAAe,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;AAC3C,CAAC"}
@@ -1 +0,0 @@
1
- import"./chunk-KEIR6QF5-DEvma7oi.js";import{M as e}from"./mermaid-parser.core-Dw18Fjbq.js";export{e as createArchitectureServices};
@@ -1 +0,0 @@
1
- import{at as e,it as t}from"./chunk-WYO6CB5R-zVyUwJq3.js";var n=(n,r)=>e.lang.round(t.parse(n)[r]);export{n as t};
@@ -1 +0,0 @@
1
- import{n as e}from"./chunk-Y2CYZVJY-DsF7k-Jl.js";import"./src-oBChb5qS.js";import"./chunk-WYO6CB5R-zVyUwJq3.js";import"./chunk-ICXQ74PX-Ar8kfXfa.js";import"./chunk-HOUHSVGY-BlHO2iQ3.js";import"./chunk-Q4XR5HBZ-g15qvFAN.js";import"./chunk-7BUUIJ7U-Bb538aSH.js";import"./chunk-OGEWGWER-BmGykUeg.js";import"./chunk-32BRIVSS-B0b9kUcF.js";import"./chunk-XXDRQBXY-BvKO0v-W.js";import"./chunk-VR4S4FIN-DtTkK86v.js";import"./chunk-C7G6YPKG-atYWm6iP.js";import"./chunk-ZGVPDNZ5-CA1Oe3TK.js";import"./chunk-52WLFC77-i6Y-vfL3.js";import"./chunk-FWX5IMBZ-CVErR-UZ.js";import{i as t,n,r,t as i}from"./chunk-V7JOEXUC-uyXA7S9r.js";var a={parser:n,get db(){return new i},renderer:r,styles:t,init:e(e=>{e.class||={},e.class.arrowMarkerAbsolute=e.arrowMarkerAbsolute},`init`)};export{a as diagram};
@@ -1 +0,0 @@
1
- import{n as e}from"./chunk-Y2CYZVJY-DsF7k-Jl.js";import"./src-oBChb5qS.js";import"./chunk-WYO6CB5R-zVyUwJq3.js";import"./chunk-ICXQ74PX-Ar8kfXfa.js";import"./chunk-HOUHSVGY-BlHO2iQ3.js";import"./chunk-Q4XR5HBZ-g15qvFAN.js";import"./chunk-7BUUIJ7U-Bb538aSH.js";import"./chunk-OGEWGWER-BmGykUeg.js";import"./chunk-32BRIVSS-B0b9kUcF.js";import"./chunk-XXDRQBXY-BvKO0v-W.js";import"./chunk-VR4S4FIN-DtTkK86v.js";import"./chunk-C7G6YPKG-atYWm6iP.js";import"./chunk-ZGVPDNZ5-CA1Oe3TK.js";import"./chunk-52WLFC77-i6Y-vfL3.js";import"./chunk-FWX5IMBZ-CVErR-UZ.js";import{i as t,n,r,t as i}from"./chunk-V7JOEXUC-uyXA7S9r.js";var a={parser:n,get db(){return new i},renderer:r,styles:t,init:e(e=>{e.class||={},e.class.arrowMarkerAbsolute=e.arrowMarkerAbsolute},`init`)};export{a as diagram};
@@ -1 +0,0 @@
1
- import"./chunk-KEIR6QF5-DEvma7oi.js";import{O as e}from"./mermaid-parser.core-Dw18Fjbq.js";export{e as createEventModelingServices};
@@ -1 +0,0 @@
1
- import"./src-oBChb5qS.js";import"./chunk-WYO6CB5R-zVyUwJq3.js";import"./chunk-ICXQ74PX-Ar8kfXfa.js";import"./chunk-HOUHSVGY-BlHO2iQ3.js";import"./chunk-Q4XR5HBZ-g15qvFAN.js";import"./chunk-7BUUIJ7U-Bb538aSH.js";import"./chunk-OGEWGWER-BmGykUeg.js";import"./chunk-32BRIVSS-B0b9kUcF.js";import"./chunk-XXDRQBXY-BvKO0v-W.js";import"./chunk-VR4S4FIN-DtTkK86v.js";import"./chunk-C7G6YPKG-atYWm6iP.js";import"./chunk-ZGVPDNZ5-CA1Oe3TK.js";import"./chunk-52WLFC77-i6Y-vfL3.js";import"./chunk-FWX5IMBZ-CVErR-UZ.js";import"./chunk-ZIRB5QZD-BpeS1aZ7.js";import{n as e}from"./chunk-PUDLZKDR-Bq23pnso.js";export{e as diagram};
@@ -1,2 +0,0 @@
1
- /*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */
2
- @layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-divide-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial}}}@layer theme{:root,:host{--font-sans:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:"JetBrains Mono Variable", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;--color-emerald-500:oklch(69.6% .17 162.48);--color-black:#000;--spacing:.25rem;--container-md:28rem;--container-lg:32rem;--container-xl:36rem;--container-2xl:42rem;--container-4xl:56rem;--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height:calc(1.5 / 1);--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--font-weight-normal:400;--font-weight-bold:700;--tracking-wide:.025em;--leading-snug:1.375;--leading-relaxed:1.625;--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-term-bg:#050505;--color-term-panel:#101010;--color-term-inset:#1a1a1a;--color-term-border:#2c2c2c;--color-term-border-hi:#474747;--color-term-fg:#f2f2f2;--color-term-dim:#8f8f8f;--color-term-green:#4ade80;--color-term-amber:#fbbf24;--color-term-red:#f87171;--color-term-cyan:#22d3ee;--color-term-magenta:#e879f9;--color-term-blue:#60a5fa;--color-term-purple:#a78bfa;--color-term-orange:#fb923c;--color-term-teal:#2dd4bf;--color-term-lime:#a3e635}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring:where(:not(iframe)){outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}html,body,#root{height:100%}body{background-color:var(--color-term-bg);font-family:var(--font-mono);--tw-leading:var(--leading-relaxed);font-size:13px;line-height:var(--leading-relaxed);color:var(--color-term-fg);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}::selection{background:var(--color-term-fg);color:var(--color-term-bg)}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:var(--color-term-bg)}::-webkit-scrollbar-thumb{background:var(--color-term-border)}::-webkit-scrollbar-thumb:hover{background:var(--color-term-border-hi)}input,textarea,select,button{font:inherit}select,option{background:var(--color-term-inset);color:var(--color-term-fg)}}@layer components{.kbd{border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-term-border);background-color:var(--color-term-panel);padding-inline:var(--spacing);--tw-leading:calc(var(--spacing) * 4);font-size:11px;line-height:calc(var(--spacing) * 4);color:var(--color-term-dim);display:inline-block}.scanlines{pointer-events:none;z-index:60;background:repeating-linear-gradient(0deg,#0000 0 2px,#0000000b 3px,#0000 4px);position:fixed;inset:0}.md{--tw-leading:var(--leading-relaxed);max-width:none;font-size:13px;line-height:var(--leading-relaxed)}.md h1{margin-top:0;margin-bottom:calc(var(--spacing) * 4);border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--color-term-border);padding-bottom:calc(var(--spacing) * 2);font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height));--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold);color:var(--color-term-green)}.md h2{margin-top:calc(var(--spacing) * 7);margin-bottom:calc(var(--spacing) * 3);border-bottom-style:var(--tw-border-style);border-color:#2c2c2c99;border-bottom-width:1px}@supports (color:color-mix(in lab, red, red)){.md h2{border-color:color-mix(in oklab, var(--color-term-border) 60%, transparent)}}.md h2{padding-bottom:var(--spacing);font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold);color:var(--color-term-green)}.md h3{margin-top:calc(var(--spacing) * 5);margin-bottom:calc(var(--spacing) * 2);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold);color:var(--color-term-cyan)}.md h4{margin-top:calc(var(--spacing) * 4);margin-bottom:calc(var(--spacing) * 2);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold);color:var(--color-term-fg)}.md p{margin-block:calc(var(--spacing) * 3)}.md ul{margin-block:calc(var(--spacing) * 3);padding-left:calc(var(--spacing) * 4);list-style-type:none}.md ul>li{margin-block:var(--spacing);position:relative}.md ul>li:before{content:"▸";left:calc(var(--spacing) * -4);color:var(--color-term-dim);position:absolute}.md ul>li>ul{margin-block:var(--spacing)}.md ol{margin-block:calc(var(--spacing) * 3);padding-left:calc(var(--spacing) * 6);list-style-type:decimal}.md ol ::marker{color:var(--color-term-dim)}.md ol::marker{color:var(--color-term-dim)}.md ol ::-webkit-details-marker{color:var(--color-term-dim)}.md ol::-webkit-details-marker{color:var(--color-term-dim)}.md a{color:var(--color-term-cyan);text-underline-offset:2px;text-decoration-line:underline}@media (hover:hover){.md a:hover{color:var(--color-term-green)}}.md strong{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold);color:var(--color-term-fg)}.md code:not(pre code){border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-term-border);background-color:var(--color-term-panel);padding-inline:var(--spacing);padding-block:calc(var(--spacing) * .5);color:var(--color-term-amber);font-size:12px}.md pre{margin-block:calc(var(--spacing) * 4);border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-term-border);background-color:var(--color-term-inset);padding:calc(var(--spacing) * 3);overflow-x:auto}.md pre code{background:0 0;font-size:12px}.md blockquote{margin-block:calc(var(--spacing) * 3);border-left-style:var(--tw-border-style);border-color:#fbbf2499;border-left-width:2px}@supports (color:color-mix(in lab, red, red)){.md blockquote{border-color:color-mix(in oklab, var(--color-term-amber) 60%, transparent)}}.md blockquote{padding-left:calc(var(--spacing) * 3);color:var(--color-term-dim)}.md table{margin-block:calc(var(--spacing) * 4);border-collapse:collapse;width:100%}.md th{border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-term-border);background-color:var(--color-term-panel);padding-inline:calc(var(--spacing) * 2);padding-block:var(--spacing);text-align:left;--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold);color:var(--color-term-green)}.md td{border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-term-border);padding-inline:calc(var(--spacing) * 2);padding-block:var(--spacing);vertical-align:top}.md hr{margin-block:calc(var(--spacing) * 6);border-color:var(--color-term-border)}.md input[type=checkbox]{margin-right:var(--spacing);accent-color:var(--color-emerald-500)}.hljs{background:0 0}.cm-host,.cm-host .cm-editor{height:100%}.cm-host .cm-editor{border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-term-border);--tw-outline-style:none;background-color:#0000;outline-style:none;font-size:13px}.cm-host .cm-scroller{font-family:var(--font-mono)}}@layer utilities{.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:0}.top-0{top:0}.top-2{top:calc(var(--spacing) * 2)}.right-3{right:calc(var(--spacing) * 3)}.bottom-8{bottom:calc(var(--spacing) * 8)}.z-10{z-index:10}.z-40{z-index:40}.z-50{z-index:50}.col-span-2{grid-column:span 2/span 2}.container{width:100%}@media (width>=40rem){.container{max-width:40rem}}@media (width>=48rem){.container{max-width:48rem}}@media (width>=64rem){.container{max-width:64rem}}@media (width>=80rem){.container{max-width:80rem}}@media (width>=96rem){.container{max-width:96rem}}.mx-auto{margin-inline:auto}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:var(--spacing)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mr-1{margin-right:var(--spacing)}.mr-2{margin-right:calc(var(--spacing) * 2)}.mb-0\.5{margin-bottom:calc(var(--spacing) * .5)}.mb-1{margin-bottom:var(--spacing)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.ml-1{margin-left:var(--spacing)}.ml-1\.5{margin-left:calc(var(--spacing) * 1.5)}.ml-2{margin-left:calc(var(--spacing) * 2)}.ml-6{margin-left:calc(var(--spacing) * 6)}.line-clamp-3{-webkit-line-clamp:3;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.h-1\.5{height:calc(var(--spacing) * 1.5)}.h-64{height:calc(var(--spacing) * 64)}.h-\[calc\(100\%-25px\)\]{height:calc(100% - 25px)}.h-\[calc\(100\%-33px\)\]{height:calc(100% - 33px)}.h-full{height:100%}.max-h-48{max-height:calc(var(--spacing) * 48)}.max-h-64{max-height:calc(var(--spacing) * 64)}.max-h-\[55vh\]{max-height:55vh}.min-h-0{min-height:0}.min-h-14{min-height:calc(var(--spacing) * 14)}.min-h-16{min-height:calc(var(--spacing) * 16)}.min-h-20{min-height:calc(var(--spacing) * 20)}.min-h-40{min-height:calc(var(--spacing) * 40)}.min-h-96{min-height:calc(var(--spacing) * 96)}.w-3{width:calc(var(--spacing) * 3)}.w-6{width:calc(var(--spacing) * 6)}.w-8{width:calc(var(--spacing) * 8)}.w-12{width:calc(var(--spacing) * 12)}.w-14{width:calc(var(--spacing) * 14)}.w-16{width:calc(var(--spacing) * 16)}.w-20{width:calc(var(--spacing) * 20)}.w-24{width:calc(var(--spacing) * 24)}.w-28{width:calc(var(--spacing) * 28)}.w-32{width:calc(var(--spacing) * 32)}.w-36{width:calc(var(--spacing) * 36)}.w-44{width:calc(var(--spacing) * 44)}.w-48{width:calc(var(--spacing) * 48)}.w-56{width:calc(var(--spacing) * 56)}.w-60{width:calc(var(--spacing) * 60)}.w-72{width:calc(var(--spacing) * 72)}.w-96{width:calc(var(--spacing) * 96)}.w-full{width:100%}.max-w-2xl{max-width:var(--container-2xl)}.max-w-4xl{max-width:var(--container-4xl)}.max-w-lg{max-width:var(--container-lg)}.max-w-md{max-width:var(--container-md)}.max-w-xl{max-width:var(--container-xl)}.min-w-0{min-width:0}.flex-1{flex:1}.shrink-0{flex-shrink:0}.border-collapse{border-collapse:collapse}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.resize-none{resize:none}.resize-y{resize:vertical}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-\[8rem_1fr\]{grid-template-columns:8rem 1fr}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-baseline{align-items:baseline}.items-center{align-items:center}.items-start{align-items:flex-start}.items-stretch{align-items:stretch}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-1{gap:var(--spacing)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-6{gap:calc(var(--spacing) * 6)}.gap-px{gap:1px}.gap-x-2{column-gap:calc(var(--spacing) * 2)}.gap-x-3{column-gap:calc(var(--spacing) * 3)}.gap-x-6{column-gap:calc(var(--spacing) * 6)}.gap-y-1{row-gap:var(--spacing)}.gap-y-3{row-gap:calc(var(--spacing) * 3)}:where(.divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px * var(--tw-divide-y-reverse));border-bottom-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)))}:where(.divide-term-border\/40>:not(:last-child)){border-color:#2c2c2c66}@supports (color:color-mix(in lab, red, red)){:where(.divide-term-border\/40>:not(:last-child)){border-color:color-mix(in oklab, var(--color-term-border) 40%, transparent)}}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-b-0{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.border-term-amber\/40{border-color:#fbbf2466}@supports (color:color-mix(in lab, red, red)){.border-term-amber\/40{border-color:color-mix(in oklab, var(--color-term-amber) 40%, transparent)}}.border-term-bg\/50{border-color:#05050580}@supports (color:color-mix(in lab, red, red)){.border-term-bg\/50{border-color:color-mix(in oklab, var(--color-term-bg) 50%, transparent)}}.border-term-blue\/40{border-color:#60a5fa66}@supports (color:color-mix(in lab, red, red)){.border-term-blue\/40{border-color:color-mix(in oklab, var(--color-term-blue) 40%, transparent)}}.border-term-border{border-color:var(--color-term-border)}.border-term-border-hi{border-color:var(--color-term-border-hi)}.border-term-border\/30{border-color:#2c2c2c4d}@supports (color:color-mix(in lab, red, red)){.border-term-border\/30{border-color:color-mix(in oklab, var(--color-term-border) 30%, transparent)}}.border-term-border\/40{border-color:#2c2c2c66}@supports (color:color-mix(in lab, red, red)){.border-term-border\/40{border-color:color-mix(in oklab, var(--color-term-border) 40%, transparent)}}.border-term-border\/60{border-color:#2c2c2c99}@supports (color:color-mix(in lab, red, red)){.border-term-border\/60{border-color:color-mix(in oklab, var(--color-term-border) 60%, transparent)}}.border-term-cyan\/40{border-color:#22d3ee66}@supports (color:color-mix(in lab, red, red)){.border-term-cyan\/40{border-color:color-mix(in oklab, var(--color-term-cyan) 40%, transparent)}}.border-term-cyan\/50{border-color:#22d3ee80}@supports (color:color-mix(in lab, red, red)){.border-term-cyan\/50{border-color:color-mix(in oklab, var(--color-term-cyan) 50%, transparent)}}.border-term-cyan\/60{border-color:#22d3ee99}@supports (color:color-mix(in lab, red, red)){.border-term-cyan\/60{border-color:color-mix(in oklab, var(--color-term-cyan) 60%, transparent)}}.border-term-green\/40{border-color:#4ade8066}@supports (color:color-mix(in lab, red, red)){.border-term-green\/40{border-color:color-mix(in oklab, var(--color-term-green) 40%, transparent)}}.border-term-green\/60{border-color:#4ade8099}@supports (color:color-mix(in lab, red, red)){.border-term-green\/60{border-color:color-mix(in oklab, var(--color-term-green) 60%, transparent)}}.border-term-lime\/40{border-color:#a3e63566}@supports (color:color-mix(in lab, red, red)){.border-term-lime\/40{border-color:color-mix(in oklab, var(--color-term-lime) 40%, transparent)}}.border-term-magenta\/40{border-color:#e879f966}@supports (color:color-mix(in lab, red, red)){.border-term-magenta\/40{border-color:color-mix(in oklab, var(--color-term-magenta) 40%, transparent)}}.border-term-orange\/40{border-color:#fb923c66}@supports (color:color-mix(in lab, red, red)){.border-term-orange\/40{border-color:color-mix(in oklab, var(--color-term-orange) 40%, transparent)}}.border-term-purple\/40{border-color:#a78bfa66}@supports (color:color-mix(in lab, red, red)){.border-term-purple\/40{border-color:color-mix(in oklab, var(--color-term-purple) 40%, transparent)}}.border-term-red\/40{border-color:#f8717166}@supports (color:color-mix(in lab, red, red)){.border-term-red\/40{border-color:color-mix(in oklab, var(--color-term-red) 40%, transparent)}}.border-term-red\/50{border-color:#f8717180}@supports (color:color-mix(in lab, red, red)){.border-term-red\/50{border-color:color-mix(in oklab, var(--color-term-red) 50%, transparent)}}.border-term-red\/60{border-color:#f8717199}@supports (color:color-mix(in lab, red, red)){.border-term-red\/60{border-color:color-mix(in oklab, var(--color-term-red) 60%, transparent)}}.border-term-teal\/40{border-color:#2dd4bf66}@supports (color:color-mix(in lab, red, red)){.border-term-teal\/40{border-color:color-mix(in oklab, var(--color-term-teal) 40%, transparent)}}.border-transparent{border-color:#0000}.bg-black\/60{background-color:#0009}@supports (color:color-mix(in lab, red, red)){.bg-black\/60{background-color:color-mix(in oklab, var(--color-black) 60%, transparent)}}.bg-term-bg{background-color:var(--color-term-bg)}.bg-term-bg\/70{background-color:#050505b3}@supports (color:color-mix(in lab, red, red)){.bg-term-bg\/70{background-color:color-mix(in oklab, var(--color-term-bg) 70%, transparent)}}.bg-term-cyan\/20{background-color:#22d3ee33}@supports (color:color-mix(in lab, red, red)){.bg-term-cyan\/20{background-color:color-mix(in oklab, var(--color-term-cyan) 20%, transparent)}}.bg-term-green{background-color:var(--color-term-green)}.bg-term-green\/60{background-color:#4ade8099}@supports (color:color-mix(in lab, red, red)){.bg-term-green\/60{background-color:color-mix(in oklab, var(--color-term-green) 60%, transparent)}}.bg-term-inset{background-color:var(--color-term-inset)}.bg-term-panel{background-color:var(--color-term-panel)}.p-0{padding:0}.p-2{padding:calc(var(--spacing) * 2)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-6{padding:calc(var(--spacing) * 6)}.px-1{padding-inline:var(--spacing)}.px-1\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-6{padding-inline:calc(var(--spacing) * 6)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:var(--spacing)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-6{padding-block:calc(var(--spacing) * 6)}.py-8{padding-block:calc(var(--spacing) * 8)}.pt-1{padding-top:var(--spacing)}.pt-2{padding-top:calc(var(--spacing) * 2)}.pt-\[12vh\]{padding-top:12vh}.pt-\[15vh\]{padding-top:15vh}.pb-0\.5{padding-bottom:calc(var(--spacing) * .5)}.pb-1{padding-bottom:var(--spacing)}.pb-3{padding-bottom:calc(var(--spacing) * 3)}.pl-2{padding-left:calc(var(--spacing) * 2)}.pl-3{padding-left:calc(var(--spacing) * 3)}.pl-4{padding-left:calc(var(--spacing) * 4)}.pl-5{padding-left:calc(var(--spacing) * 5)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.align-middle{vertical-align:middle}.font-mono{font-family:var(--font-mono)}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-\[9px\]{font-size:9px}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[12px\]{font-size:12px}.text-\[13px\]{font-size:13px}.text-\[15px\]{font-size:15px}.leading-4{--tw-leading:calc(var(--spacing) * 4);line-height:calc(var(--spacing) * 4)}.leading-5{--tw-leading:calc(var(--spacing) * 5);line-height:calc(var(--spacing) * 5)}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.whitespace-nowrap{white-space:nowrap}.whitespace-pre{white-space:pre}.whitespace-pre-wrap{white-space:pre-wrap}.text-inherit{color:inherit}.text-term-amber{color:var(--color-term-amber)}.text-term-bg{color:var(--color-term-bg)}.text-term-bg\/70{color:#050505b3}@supports (color:color-mix(in lab, red, red)){.text-term-bg\/70{color:color-mix(in oklab, var(--color-term-bg) 70%, transparent)}}.text-term-bg\/80{color:#050505cc}@supports (color:color-mix(in lab, red, red)){.text-term-bg\/80{color:color-mix(in oklab, var(--color-term-bg) 80%, transparent)}}.text-term-blue{color:var(--color-term-blue)}.text-term-border-hi{color:var(--color-term-border-hi)}.text-term-cyan{color:var(--color-term-cyan)}.text-term-dim{color:var(--color-term-dim)}.text-term-dim\/40{color:#8f8f8f66}@supports (color:color-mix(in lab, red, red)){.text-term-dim\/40{color:color-mix(in oklab, var(--color-term-dim) 40%, transparent)}}.text-term-dim\/70{color:#8f8f8fb3}@supports (color:color-mix(in lab, red, red)){.text-term-dim\/70{color:color-mix(in oklab, var(--color-term-dim) 70%, transparent)}}.text-term-dim\/80{color:#8f8f8fcc}@supports (color:color-mix(in lab, red, red)){.text-term-dim\/80{color:color-mix(in oklab, var(--color-term-dim) 80%, transparent)}}.text-term-fg{color:var(--color-term-fg)}.text-term-green{color:var(--color-term-green)}.text-term-lime{color:var(--color-term-lime)}.text-term-magenta{color:var(--color-term-magenta)}.text-term-orange{color:var(--color-term-orange)}.text-term-purple{color:var(--color-term-purple)}.text-term-red{color:var(--color-term-red)}.text-term-teal{color:var(--color-term-teal)}.normal-case{text-transform:none}.uppercase{text-transform:uppercase}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.line-through{text-decoration-line:line-through}.underline{text-decoration-line:underline}.opacity-0{opacity:0}.opacity-40{opacity:.4}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-100{opacity:1}.shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a), 0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-black\/50{--tw-shadow-color:#00000080}@supports (color:color-mix(in lab, red, red)){.shadow-black\/50{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-black) 50%, transparent) var(--tw-shadow-alpha), transparent)}}.shadow-black\/60{--tw-shadow-color:#0009}@supports (color:color-mix(in lab, red, red)){.shadow-black\/60{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-black) 60%, transparent) var(--tw-shadow-alpha), transparent)}}.shadow-black\/70{--tw-shadow-color:#000000b3}@supports (color:color-mix(in lab, red, red)){.shadow-black\/70{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-black) 70%, transparent) var(--tw-shadow-alpha), transparent)}}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}@media (hover:hover){.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}}.placeholder\:text-term-dim\/50::placeholder{color:#8f8f8f80}@supports (color:color-mix(in lab, red, red)){.placeholder\:text-term-dim\/50::placeholder{color:color-mix(in oklab, var(--color-term-dim) 50%, transparent)}}.placeholder\:text-term-dim\/60::placeholder{color:#8f8f8f99}@supports (color:color-mix(in lab, red, red)){.placeholder\:text-term-dim\/60::placeholder{color:color-mix(in oklab, var(--color-term-dim) 60%, transparent)}}@media (hover:hover){.hover\:border-term-cyan\/80:hover{border-color:#22d3eecc}@supports (color:color-mix(in lab, red, red)){.hover\:border-term-cyan\/80:hover{border-color:color-mix(in oklab, var(--color-term-cyan) 80%, transparent)}}.hover\:bg-term-border\/40:hover{background-color:#2c2c2c66}@supports (color:color-mix(in lab, red, red)){.hover\:bg-term-border\/40:hover{background-color:color-mix(in oklab, var(--color-term-border) 40%, transparent)}}.hover\:bg-term-cyan:hover{background-color:var(--color-term-cyan)}.hover\:bg-term-fg\/5:hover{background-color:#f2f2f20d}@supports (color:color-mix(in lab, red, red)){.hover\:bg-term-fg\/5:hover{background-color:color-mix(in oklab, var(--color-term-fg) 5%, transparent)}}.hover\:bg-term-green:hover{background-color:var(--color-term-green)}.hover\:bg-term-inset:hover{background-color:var(--color-term-inset)}.hover\:bg-term-red:hover{background-color:var(--color-term-red)}.hover\:font-bold:hover{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.hover\:text-term-bg:hover{color:var(--color-term-bg)}.hover\:text-term-cyan:hover{color:var(--color-term-cyan)}.hover\:text-term-fg:hover{color:var(--color-term-fg)}.hover\:text-term-green:hover{color:var(--color-term-green)}.hover\:text-term-red:hover{color:var(--color-term-red)}}.focus\:border-term-green\/60:focus{border-color:#4ade8099}@supports (color:color-mix(in lab, red, red)){.focus\:border-term-green\/60:focus{border-color:color-mix(in oklab, var(--color-term-green) 60%, transparent)}}.focus\:bg-term-green:focus{background-color:var(--color-term-green)}.focus\:text-term-bg:focus{color:var(--color-term-bg)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus-visible\:opacity-100:focus-visible{opacity:1}.disabled\:opacity-40:disabled{opacity:.4}.disabled\:opacity-50:disabled{opacity:.5}@media (width>=48rem){.md\:col-span-4{grid-column:span 4/span 4}.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}@media (width>=64rem){.lg\:col-span-5{grid-column:span 5/span 5}.lg\:block{display:block}.lg\:flex{display:flex}.lg\:inline-flex{display:inline-flex}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}}@media (width>=80rem){.xl\:inline{display:inline}}}@font-face{font-family:JetBrains Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;src:url(data:font/woff2;base64,d09GMgABAAAAAAfsABQAAAAAEAwAAAeCAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGhwbHhwoP0hWQVJbBmA/U1RBVIFiJyYAdC9qEQgKhGSEAAsgADCGCAE2AiQDOgQgBYlMB4EUDAcbLQ4onoexrSC/2ZyLAa8p8VHB8/x3Vue+V0hVJalMJg2nx/TCrQXxBeqLjQG7FyM1WEa/X1tEXN7cFz9EJEMmMUz3RihWSSKeQCbcIou0izz/C8v+fq3VfajEa9gDD11CImXS7qL/RJFVzC1qiB6KmKeD6TZdQ6IRGv78dL6uSVVCfgni5mzu7kcgQBgAEAQTQRCoL++STTYybkJxNfQxAAIAGu8OdEB9teW2jh4BpgDqFjAeSEByW3zFP0CBBgNMsMCGEDjgggdhiEAUAeIIED7ABTDUEnkIE9Q9ahFgKttcVhApo4ACB4qobHaccgDfEjFO6aaWUhjMLt2SyIvHKoDqoA4CSUwEIYQCEjhAO9R1G6keDeDZGjNo+AhxOjCEGTr1WeIF3kYBiLAOKvkJSMiKX0VdAyQt3SDJClCkxJCHkCzfqyVTriJZLcolS32JZHUekq2TYNkYtCtjYHMQXSxGjXDz2t/yLWXzDzxz+o3zFwDEaN23F+13pyMdQAEaSKAR9vcGq4A4MTSKCElGW+M7UcY7xqkggITb28ZJhlqc9q2twYKTt0NjixBgYvO9BIihEBLYuOFXQzfIQ7dXGUEEEgFDooBfAzqiQbpJrhiWSuKJCRFKYbHCyJKI2G5GiZbNAvgAu5pc3vwx4G+g3aDkhklABiSz0BICXrYghtYhx/cdJ+44rY2oZ0aMNRFz3VZjb6W33F3gzltqtOCV8tTHSpOeXuItfvr5lCdfzFpqtEitvqdcdGGFd28ZqqC0tPbeChGXgrIlnhSWu/eUso4uKWFLugyDzQJhflY4659+WjQ++6x72WUMv9G8mw6QJl7BVxX5fe/kpUsOvnZwee9uQ0cGXYd0o89XB2748sDSnt8d2VphdOTTgceDVvOds0v9P/s7HPq15aGun/6Vllb56f1dl0t1LejqrNkpdRZsG8TOnM5vkBG5oiVyVGnS8LHps5cfNWJs6qKPfaNSxiQNBUm3cKNWROr0GSur7Za31k1vieq7LH11VF+jXdRIasRKflc7jkobm1Z9te1IyZA0pDkhLR98+H37Zf1c/8at+dB7x+7GfVyTfJMPiYztsnl59Y5l4j+0n1RXlpHnF3Tq7HecmNF/CJodEMAikruxiyJaGLvHOdAfoA+oDvpjBm2b91cHGRZMU9n25xEU0A8fgEEAdKI3Q1iDtc034sug5YVMkE2jsE+BIkwSoQ3gxXMqz9tELp48bd0cFKOKS7xYjEuXBnZP5ia7DyiO/X/YI+PQSbt2uSdqAkWL9nQbV1XB94/+uPfdZz8dnXYFBYrcTl2SIR/ybxJNJPz/Gupb0JaZeens2ekC7EKr8t+Ls/P5VJPYJdHKyqfg2nqU6bhlidzcddQV/7MmecTzJ5VPcKXkNKSEogHjYFx6QZ7rQ+FSe8njaiNuOnXS8H2ScQ619c2mC3VTtauL0rRbXd/CkSOP37FY9Zkjz8+GibYUMOEWF+RdrFS8Ecv1SHOpPUPZGEIpjPvFyU5cXKjd6OXqorTqy9GwRd++HVufPGnVsW+aO3vggKZ18jR9sXaTC1PWTEsVUaK0FkNySbTQDqlm2PfDjZcu4aalnSLKjnOoYQ0nUlqqXcGpPu/4VgV/xU2pAqW4BW3qzhQ8/hFKhV2qE3+BKAtDqBXjfgnVdH4y0wg5tbVNRenNdTWOrenWLcupQdmsbq5b+18piTe/xRdp1xbILxNPJGInm2z6hoB21Lal0i+ePTtd7B45+3XhFJ329evskXm7qurUVREotqSluSo/L29d3qDhI4YOQqWhI4YNvBNfsMHeXKemXrxQfKeuPOGRVayA3JtkJKEgbPp+dXUDluddutRYLFoXGXWX6N3WFaGLbQtRSitVYNacTNSdy7AaG/HSaUEANcBoGXNdcZvZsOqQ1icBDv21/gzAoYPHH/WDW0qNR3QTYKEAEHig6o13NXbND06CQPlRtYjGNnSktRc09k1mAMDvAlDKfQjgy6fssInlfzmNAjKkDxoxHOBLdVRAIVt9j4qo+hA1w9T1aNBNTUOTTNUHLbqokE+UAfJXCIGw/IxCSL5GRUJeR40rL/UxTm4Q08H6MbCs70ObuNyIIXrINHQYInF06UUlevTjbQzTh5upiDMzMMogUtEnjPs/Y7jAHCJeB0GBHh04tC6FiB6ZFB1oArUSIoFoqhzCeAN6lHwm0T4C3VVPWvjpSMXReuWesMEcoqrmgtNBGd2noWeV0hNAz9rFeShNJxHGsPa3HXeKTk8b55hahySYHaYKKFFLpCfN8rsoaJn01CR04Gkc+5k7KVTCmClX8Q10HCrUEkVlSX+XO33oQR9609tJ516H497WSobWs5Up6TLaS10/dessIskgJSLiDlWvHVUywpkQ7hdPZqGyiEF0uVQerVcPamT1A3eKXdyI1vG9OoflrSXihZ1qqGE3nhmAgiIbRCQgPLEPtOM3UQwTLYaYYomNlpA44opnjV6jkD6id80OOrzf6BzmMD6eEa1zKyeYG1fzfEf16V6jw9XYOaar1/b2kP/IYX8oR2mcFvv2GtBV3JXgd437AQAA)format("woff2-variations");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:JetBrains Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;src:url(/assets/jetbrains-mono-cyrillic-wght-normal-D73BlboJ.woff2)format("woff2-variations");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:JetBrains Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;src:url(/assets/jetbrains-mono-greek-wght-normal-Bw9x6K1M.woff2)format("woff2-variations");unicode-range:U+370-377,U+37A-37F,U+384-38A,U+38C,U+38E-3A1,U+3A3-3FF}@font-face{font-family:JetBrains Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;src:url(/assets/jetbrains-mono-vietnamese-wght-normal-Bt-aOZkq.woff2)format("woff2-variations");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:JetBrains Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;src:url(/assets/jetbrains-mono-latin-ext-wght-normal-DBQx-q_a.woff2)format("woff2-variations");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:JetBrains Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;src:url(/assets/jetbrains-mono-latin-wght-normal-B9CIFXIH.woff2)format("woff2-variations");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}pre code.hljs{padding:1em;display:block;overflow-x:auto}code.hljs{padding:3px 5px}.hljs-meta,.hljs-comment{color:#565f89}.hljs-tag,.hljs-doctag,.hljs-selector-id,.hljs-selector-class,.hljs-regexp,.hljs-template-tag,.hljs-selector-pseudo,.hljs-selector-attr,.hljs-variable.language_,.hljs-deletion{color:#f7768e}.hljs-variable,.hljs-template-variable,.hljs-number,.hljs-literal,.hljs-type,.hljs-params,.hljs-link{color:#ff9e64}.hljs-built_in,.hljs-attribute{color:#e0af68}.hljs-keyword,.hljs-title.function_,.hljs-title,.hljs-title.class_,.hljs-title.class_.inherited__,.hljs-subst,.hljs-property{color:#7dcfff}.hljs-selector-tag{color:#73daca}.hljs-quote,.hljs-string,.hljs-symbol,.hljs-bullet,.hljs-addition{color:#9ece6a}.hljs-code,.hljs-formula,.hljs-section{color:#7aa2f7}.hljs-name,.hljs-keyword,.hljs-operator,.hljs-keyword,.hljs-char.escape_,.hljs-attr{color:#bb9af7}.hljs-punctuation{color:#c0caf5}.hljs{color:#9aa5ce;background:#1a1b26}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}
@@ -1 +0,0 @@
1
- import"./chunk-KEIR6QF5-DEvma7oi.js";import{m as e}from"./mermaid-parser.core-Dw18Fjbq.js";export{e as createRailroadAbnfServices};
@@ -1 +0,0 @@
1
- import"./chunk-KEIR6QF5-DEvma7oi.js";import{f as e}from"./mermaid-parser.core-Dw18Fjbq.js";export{e as createRailroadEbnfServices};
@@ -1 +0,0 @@
1
- import"./chunk-KEIR6QF5-DEvma7oi.js";import{u as e}from"./mermaid-parser.core-Dw18Fjbq.js";export{e as createRailroadPegServices};
@@ -1 +0,0 @@
1
- import{n as e}from"./chunk-Y2CYZVJY-DsF7k-Jl.js";import"./src-oBChb5qS.js";import"./chunk-WYO6CB5R-zVyUwJq3.js";import"./chunk-ICXQ74PX-Ar8kfXfa.js";import"./chunk-HOUHSVGY-BlHO2iQ3.js";import"./chunk-Q4XR5HBZ-g15qvFAN.js";import"./chunk-7BUUIJ7U-Bb538aSH.js";import"./chunk-OGEWGWER-BmGykUeg.js";import"./chunk-32BRIVSS-B0b9kUcF.js";import"./chunk-XXDRQBXY-BvKO0v-W.js";import"./chunk-VR4S4FIN-DtTkK86v.js";import"./chunk-C7G6YPKG-atYWm6iP.js";import"./chunk-ZGVPDNZ5-CA1Oe3TK.js";import"./chunk-52WLFC77-i6Y-vfL3.js";import"./chunk-FWX5IMBZ-CVErR-UZ.js";import{i as t,n,r,t as i}from"./chunk-EX3LRPZG-CZD6y0UU.js";var a={parser:n,get db(){return new i(2)},renderer:r,styles:t,init:e(e=>{e.state||={},e.state.arrowMarkerAbsolute=e.arrowMarkerAbsolute},`init`)};export{a as diagram};
@@ -1,8 +0,0 @@
1
- import{n as e}from"./chunk-Y2CYZVJY-DsF7k-Jl.js";import"./src-oBChb5qS.js";import"./chunk-WYO6CB5R-zVyUwJq3.js";import"./chunk-ICXQ74PX-Ar8kfXfa.js";import"./chunk-HOUHSVGY-BlHO2iQ3.js";import"./chunk-Q4XR5HBZ-g15qvFAN.js";import"./chunk-7BUUIJ7U-Bb538aSH.js";import"./chunk-OGEWGWER-BmGykUeg.js";import"./chunk-32BRIVSS-B0b9kUcF.js";import"./chunk-XXDRQBXY-BvKO0v-W.js";import"./chunk-VR4S4FIN-DtTkK86v.js";import"./chunk-C7G6YPKG-atYWm6iP.js";import"./chunk-ZGVPDNZ5-CA1Oe3TK.js";import"./chunk-52WLFC77-i6Y-vfL3.js";import"./chunk-FWX5IMBZ-CVErR-UZ.js";import"./chunk-ZIRB5QZD-BpeS1aZ7.js";import{r as t,t as n}from"./chunk-PUDLZKDR-Bq23pnso.js";var r=n({defaultLayout:`swimlane`,styles:e(e=>`${t(e)}
2
- .swimlane.cluster rect {
3
- stroke: ${e.clusterBorder} !important;
4
- }
5
- [data-look="neo"].cluster rect {
6
- filter: none;
7
- }
8
- `,`getStyles`)});export{r as diagram};
@@ -1,12 +0,0 @@
1
- /**
2
- * Bearer-token gate for `/api/hook/*`.
3
- *
4
- * Layered on top of (never instead of) the global loopback-only
5
- * `secureLocalRequest`: loopback proves the caller is on this machine, the
6
- * token proves it is this project's installed hook script. Browser-facing
7
- * routes stay token-free — only the hook endpoint carries a shared secret,
8
- * because only it is called by something that is not the ARCS web UI.
9
- */
10
- import type { MiddlewareHandler } from "hono";
11
- export declare const requireHookToken: MiddlewareHandler;
12
- //# sourceMappingURL=hook-auth.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hook-auth.d.ts","sourceRoot":"","sources":["../../src/web-server/hook-auth.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAC;AAY9C,eAAO,MAAM,gBAAgB,EAAE,iBAmB9B,CAAC"}
@@ -1,36 +0,0 @@
1
- /**
2
- * Bearer-token gate for `/api/hook/*`.
3
- *
4
- * Layered on top of (never instead of) the global loopback-only
5
- * `secureLocalRequest`: loopback proves the caller is on this machine, the
6
- * token proves it is this project's installed hook script. Browser-facing
7
- * routes stay token-free — only the hook endpoint carries a shared secret,
8
- * because only it is called by something that is not the ARCS web UI.
9
- */
10
- import { verifyHookToken } from "../utils/hook-token-store.js";
11
- import { fail, requireProjectDir } from "./respond.js";
12
- const BEARER = /^Bearer\s+(\S+)$/i;
13
- /** `/api/hook/:slug/...` → the slug segment, or "" when the shape is wrong. */
14
- function slugFromPath(url) {
15
- const segments = new URL(url).pathname.split("/");
16
- return segments[1] === "api" && segments[2] === "hook" ? (segments[3] ?? "") : "";
17
- }
18
- export const requireHookToken = async (c, next) => {
19
- const unauthorized = () => c.json(fail("hook_unauthorized", "Missing or invalid ARCS hook token"), 401);
20
- const match = BEARER.exec((c.req.header("authorization") ?? "").trim());
21
- if (!match)
22
- return unauthorized();
23
- let projectDir;
24
- try {
25
- projectDir = requireProjectDir(slugFromPath(c.req.url));
26
- }
27
- catch {
28
- // Deliberately 401, not 404: an unauthenticated caller must not be able to
29
- // probe which project slugs exist on this machine.
30
- return unauthorized();
31
- }
32
- if (!(await verifyHookToken(projectDir, match[1])))
33
- return unauthorized();
34
- await next();
35
- };
36
- //# sourceMappingURL=hook-auth.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hook-auth.js","sourceRoot":"","sources":["../../src/web-server/hook-auth.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEvD,MAAM,MAAM,GAAG,mBAAmB,CAAC;AAEnC,+EAA+E;AAC/E,SAAS,YAAY,CAAC,GAAW;IAC/B,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAClD,OAAO,QAAQ,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACpF,CAAC;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAsB,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE;IACnE,MAAM,YAAY,GAAG,GAAG,EAAE,CACxB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,oCAAoC,CAAC,EAAE,GAAG,CAAC,CAAC;IAE/E,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACxE,IAAI,CAAC,KAAK;QAAE,OAAO,YAAY,EAAE,CAAC;IAElC,IAAI,UAAkB,CAAC;IACvB,IAAI,CAAC;QACH,UAAU,GAAG,iBAAiB,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1D,CAAC;IAAC,MAAM,CAAC;QACP,2EAA2E;QAC3E,mDAAmD;QACnD,OAAO,YAAY,EAAE,CAAC;IACxB,CAAC;IAED,IAAI,CAAC,CAAC,MAAM,eAAe,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAAE,OAAO,YAAY,EAAE,CAAC;IAE1E,MAAM,IAAI,EAAE,CAAC;AACf,CAAC,CAAC"}
@@ -1,123 +0,0 @@
1
- /**
2
- * opencode session discovery bridge (Phase 1 — observability only).
3
- *
4
- * ARCS never spawns or manages an opencode server; it attaches to an already
5
- * running `opencode serve` instance as a thin client, subscribes to the
6
- * cross-instance `/global/event` SSE stream, and mirrors what it sees into the
7
- * per-project session store. Everything here is best-effort: if opencode is
8
- * not configured, not running, or speaks a different dialect, the ARCS web
9
- * server keeps working and the sessions list is simply empty or stale.
10
- *
11
- * Verified against opencode 0.0.0-main-202607110203:
12
- * - `opencode serve` defaults to port 0 (ephemeral), so a port/URL must be
13
- * supplied explicitly via env — there is no safe default to guess.
14
- * - `OPENCODE_SERVER_PASSWORD` is enforced as HTTP Basic auth with the literal
15
- * username "opencode"; any other username is rejected with 401.
16
- * - `/event` is scoped to one instance (`?directory=`); `/global/event` is the
17
- * cross-directory stream and wraps each event as `{ directory, project,
18
- * payload }`. Frames carry no `event:` field, only `data:`.
19
- */
20
- import { type SessionStatus } from "../utils/session-store.js";
21
- export interface OpencodeConfig {
22
- baseUrl: string;
23
- password?: string;
24
- }
25
- /**
26
- * Reads bridge configuration from the environment. Returns null (discovery
27
- * disabled) when no opencode endpoint is configured.
28
- */
29
- export declare function readOpencodeConfig(env?: NodeJS.ProcessEnv): OpencodeConfig | null;
30
- export interface OpencodeMessageTarget {
31
- /** opencode-native session id ("ses_…") — never the ARCS normalized id. */
32
- runtimeSessionId: string;
33
- /** Worktree the session belongs to, when known — scopes opencode's lookup. */
34
- directory?: string;
35
- }
36
- /**
37
- * Injects a user message into a live opencode session.
38
- *
39
- * Unlike the rest of this module (best-effort observability) this is a user
40
- * mutation, so failures throw a typed DagError the web routes can surface.
41
- *
42
- * Verified against opencode 1.0.0 (`GET /doc`) plus a live server:
43
- * - `POST /session/:sessionID/prompt_async` acks with 204 and runs the turn in
44
- * the background. `POST /session/:sessionID/message` takes the same body but
45
- * only responds once the assistant has finished its whole turn — minutes, for
46
- * a browser request — so async delivery is the one that fits a web form.
47
- * - the body requires `parts`; a text part is `{ type: "text", text }`.
48
- * - `?directory=` is optional (an unscoped send still lands) but is passed when
49
- * known so the lookup is unambiguous across worktrees.
50
- */
51
- export declare function sendOpencodeMessage(config: OpencodeConfig, target: OpencodeMessageTarget, text: string): Promise<void>;
52
- export interface CreateOpencodeSessionInput {
53
- /** Worktree the session runs in — required, see the directory note below. */
54
- directory: string;
55
- title?: string;
56
- }
57
- /** Only what ARCS needs to mirror the session; the SSE stream fills in the rest. */
58
- export interface CreatedOpencodeSession {
59
- runtimeSessionId: string;
60
- title?: string;
61
- }
62
- /**
63
- * Creates a live opencode session bound to a worktree.
64
- *
65
- * Verified against opencode 0.0.0-main-202607110203 (`GET /doc`, operationId
66
- * `session.create`) plus a live server:
67
- * - the route is `POST /session` — NOT `/api/session`. opencode serves its own
68
- * web UI from the same port and answers every unknown path with a 200
69
- * text/html SPA shell, so a wrong path looks like a success until the body is
70
- * read. That is why the id is checked below rather than trusting `res.ok`.
71
- * - `directory` is a *query* parameter and never a body field. Omitting it does
72
- * not fail; opencode silently creates the session in its own working
73
- * directory, so the caller must always pass the worktree explicitly.
74
- * - `title` is the only body field ARCS sets; the response is a full session
75
- * object (`{ id, slug, directory, title, time }`).
76
- * - `DELETE /session/:sessionID` exists, so nothing created here is permanent.
77
- */
78
- export declare function createOpencodeSession(config: OpencodeConfig, input: CreateOpencodeSessionInput): Promise<CreatedOpencodeSession>;
79
- interface OpencodeSessionInfo {
80
- id?: string;
81
- slug?: string;
82
- title?: string;
83
- directory?: string;
84
- projectID?: string;
85
- time?: {
86
- created?: number;
87
- updated?: number;
88
- };
89
- project?: {
90
- worktree?: string;
91
- };
92
- }
93
- interface OpencodeEvent {
94
- type?: string;
95
- properties?: {
96
- sessionID?: string;
97
- info?: OpencodeSessionInfo;
98
- status?: {
99
- type?: string;
100
- };
101
- };
102
- }
103
- /**
104
- * Maps an opencode event type to the ARCS session status it implies.
105
- * Returns null for events that carry no status transition (the record is
106
- * refreshed but its status is left alone).
107
- */
108
- export declare function statusForOpencodeEvent(event: OpencodeEvent): SessionStatus | null;
109
- export interface OpencodeDiscoveryState {
110
- enabled: boolean;
111
- connected: boolean;
112
- baseUrl: string | null;
113
- }
114
- export declare function opencodeDiscoveryState(): OpencodeDiscoveryState;
115
- /**
116
- * Starts the discovery loop if an opencode endpoint is configured. Idempotent;
117
- * returns false when discovery is disabled (no configuration present).
118
- */
119
- export declare function startOpencodeDiscovery(config?: OpencodeConfig | null): boolean;
120
- /** Stops the discovery loop (test cleanup / server shutdown). */
121
- export declare function stopOpencodeDiscovery(): Promise<void>;
122
- export {};
123
- //# sourceMappingURL=opencode-client.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"opencode-client.d.ts","sourceRoot":"","sources":["../../src/web-server/opencode-client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAOH,OAAO,EAEL,KAAK,aAAa,EAGnB,MAAM,2BAA2B,CAAC;AAanC,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,cAAc,GAAG,IAAI,CAc9F;AAYD,MAAM,WAAW,qBAAqB;IACpC,2EAA2E;IAC3E,gBAAgB,EAAE,MAAM,CAAC;IACzB,8EAA8E;IAC9E,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,cAAc,EACtB,MAAM,EAAE,qBAAqB,EAC7B,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,IAAI,CAAC,CAiCf;AAMD,MAAM,WAAW,0BAA0B;IACzC,6EAA6E;IAC7E,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,oFAAoF;AACpF,MAAM,WAAW,sBAAsB;IACrC,gBAAgB,EAAE,MAAM,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,cAAc,EACtB,KAAK,EAAE,0BAA0B,GAChC,OAAO,CAAC,sBAAsB,CAAC,CAyCjC;AAeD,UAAU,mBAAmB;IAC3B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9C,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACjC;AAED,UAAU,aAAa;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE;QACX,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,IAAI,CAAC,EAAE,mBAAmB,CAAC;QAC3B,MAAM,CAAC,EAAE;YAAE,IAAI,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;KAC5B,CAAC;CACH;AAQD;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,aAAa,GAAG,aAAa,GAAG,IAAI,CAuBjF;AA2DD,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAED,wBAAgB,sBAAsB,IAAI,sBAAsB,CAE/D;AAoQD;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,wBAAuB,GAAG,OAAO,CAW7E;AAED,iEAAiE;AACjE,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC,CAa3D"}