cursorfleet 0.1.0__py3-none-any.whl

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 (101) hide show
  1. cursorfleet/__init__.py +9 -0
  2. cursorfleet/_templates/cursor/agents/architect.md +18 -0
  3. cursorfleet/_templates/cursor/agents/implementer.md +20 -0
  4. cursorfleet/_templates/cursor/agents/patcher.md +17 -0
  5. cursorfleet/_templates/cursor/agents/qa.md +21 -0
  6. cursorfleet/_templates/cursor/agents/reviewer.md +20 -0
  7. cursorfleet/_templates/cursor/agents/scout.md +17 -0
  8. cursorfleet/_templates/cursor/agents/tester.md +20 -0
  9. cursorfleet/_templates/cursor/agents-md/root.md +7 -0
  10. cursorfleet/_templates/cursor/agents-md/work.md +7 -0
  11. cursorfleet/_templates/cursor/config/config.toml +47 -0
  12. cursorfleet/_templates/cursor/hooks/entry.json +4 -0
  13. cursorfleet/_templates/cursor/rules/cursorfleet-core.mdc +10 -0
  14. cursorfleet/_templates/cursor/rules/cursorfleet-handoff.mdc +15 -0
  15. cursorfleet/_templates/cursor/skills/cursorfleet-artifacts/SKILL.md +57 -0
  16. cursorfleet/_templates/cursor/skills/cursorfleet-coordinator/SKILL.md +35 -0
  17. cursorfleet/adapters/__init__.py +0 -0
  18. cursorfleet/adapters/cursor/__init__.py +0 -0
  19. cursorfleet/adapters/cursor/blocks.py +104 -0
  20. cursorfleet/adapters/cursor/diagnostics.py +547 -0
  21. cursorfleet/adapters/cursor/fsutil.py +156 -0
  22. cursorfleet/adapters/cursor/hook_main.py +428 -0
  23. cursorfleet/adapters/cursor/hook_normalize.py +527 -0
  24. cursorfleet/adapters/cursor/hook_policy.py +76 -0
  25. cursorfleet/adapters/cursor/hook_sanitize.py +474 -0
  26. cursorfleet/adapters/cursor/hooksjson.py +305 -0
  27. cursorfleet/adapters/cursor/installer.py +626 -0
  28. cursorfleet/adapters/cursor/kit.py +210 -0
  29. cursorfleet/adapters/cursor/kit_probe.py +54 -0
  30. cursorfleet/adapters/cursor/lock.py +145 -0
  31. cursorfleet/adapters/cursor/templates.py +60 -0
  32. cursorfleet/adapters/cursor/validation.py +365 -0
  33. cursorfleet/adapters/cursor/workspace.py +80 -0
  34. cursorfleet/cli/__init__.py +0 -0
  35. cursorfleet/cli/commands/__init__.py +1 -0
  36. cursorfleet/cli/commands/_common.py +82 -0
  37. cursorfleet/cli/commands/_resolution.py +56 -0
  38. cursorfleet/cli/commands/doctor.py +81 -0
  39. cursorfleet/cli/commands/events.py +197 -0
  40. cursorfleet/cli/commands/index.py +55 -0
  41. cursorfleet/cli/commands/init.py +71 -0
  42. cursorfleet/cli/commands/migrate.py +43 -0
  43. cursorfleet/cli/commands/replay.py +76 -0
  44. cursorfleet/cli/commands/run.py +97 -0
  45. cursorfleet/cli/commands/status.py +210 -0
  46. cursorfleet/cli/commands/tui.py +47 -0
  47. cursorfleet/cli/commands/uninstall.py +73 -0
  48. cursorfleet/cli/commands/validate.py +69 -0
  49. cursorfleet/cli/main.py +81 -0
  50. cursorfleet/config/__init__.py +44 -0
  51. cursorfleet/config/io.py +27 -0
  52. cursorfleet/config/models.py +154 -0
  53. cursorfleet/config/roster.py +245 -0
  54. cursorfleet/events/__init__.py +39 -0
  55. cursorfleet/events/forbidden.py +45 -0
  56. cursorfleet/events/ids.py +109 -0
  57. cursorfleet/events/kinds.py +132 -0
  58. cursorfleet/events/models.py +213 -0
  59. cursorfleet/events/pathcheck.py +45 -0
  60. cursorfleet/git/__init__.py +0 -0
  61. cursorfleet/git/collector.py +226 -0
  62. cursorfleet/git/runner.py +135 -0
  63. cursorfleet/git/worktrees.py +71 -0
  64. cursorfleet/policy/__init__.py +0 -0
  65. cursorfleet/py.typed +0 -0
  66. cursorfleet/safeexe.py +70 -0
  67. cursorfleet/schema_gen.py +73 -0
  68. cursorfleet/state/__init__.py +0 -0
  69. cursorfleet/state/artifact_scan.py +309 -0
  70. cursorfleet/state/context.py +38 -0
  71. cursorfleet/state/event_store.py +227 -0
  72. cursorfleet/state/indexer.py +443 -0
  73. cursorfleet/state/lock.py +74 -0
  74. cursorfleet/state/models.py +268 -0
  75. cursorfleet/state/reducer.py +588 -0
  76. cursorfleet/state/retention.py +218 -0
  77. cursorfleet/state/run_builder.py +136 -0
  78. cursorfleet/state/run_model.py +43 -0
  79. cursorfleet/state/run_store.py +95 -0
  80. cursorfleet/state/runtime.py +645 -0
  81. cursorfleet/state/spool.py +186 -0
  82. cursorfleet/state/spool_read.py +242 -0
  83. cursorfleet/state/status_doc.py +293 -0
  84. cursorfleet/tui/__init__.py +0 -0
  85. cursorfleet/tui/app.py +581 -0
  86. cursorfleet/tui/data.py +545 -0
  87. cursorfleet/tui/filters.py +82 -0
  88. cursorfleet/tui/gates.py +255 -0
  89. cursorfleet/tui/help.py +101 -0
  90. cursorfleet/tui/layout.py +26 -0
  91. cursorfleet/tui/theme.py +176 -0
  92. cursorfleet/tui/views.py +1077 -0
  93. cursorfleet/tui/watch.py +33 -0
  94. cursorfleet/workflow/__init__.py +0 -0
  95. cursorfleet/workflow/artifacts.py +148 -0
  96. cursorfleet/workflow/frontmatter.py +232 -0
  97. cursorfleet-0.1.0.dist-info/METADATA +161 -0
  98. cursorfleet-0.1.0.dist-info/RECORD +101 -0
  99. cursorfleet-0.1.0.dist-info/WHEEL +4 -0
  100. cursorfleet-0.1.0.dist-info/entry_points.txt +3 -0
  101. cursorfleet-0.1.0.dist-info/licenses/LICENSE +21 -0
@@ -0,0 +1,101 @@
1
+ cursorfleet/__init__.py,sha256=YMPo2lNfLr7A8AWqoPx2TMGT2xiF6Ue2hLj3zqcJKG4,258
2
+ cursorfleet/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
+ cursorfleet/safeexe.py,sha256=7bTy661AZrhBULtdmvUNOOxxiAmuzbRXD2wZZ0DSamU,2885
4
+ cursorfleet/schema_gen.py,sha256=BbRrGBxj4uThAHyaH8rfH70nbCjM91vh6F6Lr5VapzU,2627
5
+ cursorfleet/adapters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
+ cursorfleet/adapters/cursor/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
7
+ cursorfleet/adapters/cursor/blocks.py,sha256=AkdoB-Eugz-MZ20ei31BdFm-R29lpKbzEpqFI-gTMTM,3430
8
+ cursorfleet/adapters/cursor/diagnostics.py,sha256=PC5n5VpGLJUsFUcD8kf2i6371COb6Xg59Lzl0YYI9Lk,20082
9
+ cursorfleet/adapters/cursor/fsutil.py,sha256=UN__YupVMw9nnyN5uPC21jdf2Y8M3G0XdM5ykOgw4Oc,5021
10
+ cursorfleet/adapters/cursor/hook_main.py,sha256=oklqGs2u4UAnITdatF05bOiT41xq_MOA2zJcyASPjLE,15727
11
+ cursorfleet/adapters/cursor/hook_normalize.py,sha256=CbYKvEd5IB6eJO3s2asTXCRt8Fnn4PbJW5VWezi9bUI,17807
12
+ cursorfleet/adapters/cursor/hook_policy.py,sha256=zIM8l7I1u_OEZRZgDqvLpZvbQFLj63AlQOMUIpvrLnU,2448
13
+ cursorfleet/adapters/cursor/hook_sanitize.py,sha256=otFss63fWkXmWAW9HYKnRPB-4LpcBou4b9DOzb_fbnY,18050
14
+ cursorfleet/adapters/cursor/hooksjson.py,sha256=j7U8sl4_qkF-4eUMRHtR09c_7CP7l0ld_2UEqHewv6U,11537
15
+ cursorfleet/adapters/cursor/installer.py,sha256=95dJphauYUYEK13ftQKktF4yQ-SNYJibB6rpxiJhQ_E,22694
16
+ cursorfleet/adapters/cursor/kit.py,sha256=nmw4RpfN_Chr-bhnnUa40pjXpFAwsr7YOOfXQzYEHI4,7915
17
+ cursorfleet/adapters/cursor/kit_probe.py,sha256=xX2ohvmtvU-mkDR1-LQr9dDKC9OOxwsMmnd6TSEf2Zc,1878
18
+ cursorfleet/adapters/cursor/lock.py,sha256=2IrYECFdZChj1yRaA4Mf2FepC5z6G__gOp95XOW2noQ,4983
19
+ cursorfleet/adapters/cursor/templates.py,sha256=60C1a4oLoeMpqcZQY0xpXxNxw5HJDzBL5UAzslEBJXc,2179
20
+ cursorfleet/adapters/cursor/validation.py,sha256=VBRXZ1TKjk78Cs4n4xulhSjneDbsjvRawjIM-jme0Qg,14890
21
+ cursorfleet/adapters/cursor/workspace.py,sha256=0V5wCk4mScmcEy5PyXqO9xABdNBvrEK3fYRh7aB59BM,2809
22
+ cursorfleet/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
23
+ cursorfleet/cli/main.py,sha256=cg_S7A594x6xMRHWirLnbdCNj5HFeJP19KYRFgBa2l8,2203
24
+ cursorfleet/cli/commands/__init__.py,sha256=7uNtVc-CnxjDwjD_T0gF8iBsYiNO1OCOrrmrJaZNQ4Q,89
25
+ cursorfleet/cli/commands/_common.py,sha256=S6_n_tNdt0NGUuOpjA58kyxHUdZ3Ch_SKlQrah88GCg,3026
26
+ cursorfleet/cli/commands/_resolution.py,sha256=guZ9GuYDG3hQHBXqmipFLasiJOD2BhDYOCCTIAaZ7Og,1655
27
+ cursorfleet/cli/commands/doctor.py,sha256=umeZwlhN3HJ7kABiFfykU96hbLz7YnQWCvABqlICtsg,3283
28
+ cursorfleet/cli/commands/events.py,sha256=0vRmWWj-NHNKkbYER5G_9cyW_twWx8cV1ZV6pqzDUDA,7292
29
+ cursorfleet/cli/commands/index.py,sha256=i3I-SN7DQjTd4a2UI5LupWsys__P8m4hlAJwhJakZuw,2154
30
+ cursorfleet/cli/commands/init.py,sha256=EzxmzTeNJL-w1PWRJTFedlCyHfJG0bROEqaMRstpYH4,2982
31
+ cursorfleet/cli/commands/migrate.py,sha256=NegUXbMxTzvaw7jPvpzuW5oBjyIk8wMGTcp1lA3cG8E,1638
32
+ cursorfleet/cli/commands/replay.py,sha256=WA59W6ImrqIAinvgJZ_Grqad4zBcNh59psCzG9RF8-g,3259
33
+ cursorfleet/cli/commands/run.py,sha256=VNvFrxvAXO3Sl8mgXh18xmzTJRRu71_tGOpRlhOGcbE,3454
34
+ cursorfleet/cli/commands/status.py,sha256=647w-MMtmV1lEPy6TcSRZDI93qixY6FWQGaEy04YIOE,7848
35
+ cursorfleet/cli/commands/tui.py,sha256=O25yAJFQ1tNW3Hf02ZowrDs5DHvQ4ZP1d8QLyWf1-7A,1725
36
+ cursorfleet/cli/commands/uninstall.py,sha256=6oV-GSUKqc4oeco4hhbPN9cKdb_pHD8jj82EbrOWTqo,3015
37
+ cursorfleet/cli/commands/validate.py,sha256=f_HhP6kg7X0221WX7APnw5krhvk7WPy-bB5dFysojM0,2594
38
+ cursorfleet/config/__init__.py,sha256=7Ucya9A4izb91xre3F1I657n1aj1hhcQhfBsPzDGOsU,1289
39
+ cursorfleet/config/io.py,sha256=LbDkybLyReRvrcWhYzOQOvDR5wm_erqKhlb_wpTBb8c,862
40
+ cursorfleet/config/models.py,sha256=kTe5owJ294e3gs8R2t2EPgH5NOZD5NYODhkZdLXVAIg,4388
41
+ cursorfleet/config/roster.py,sha256=qqrNF0OO2R1HKEg7-bSflI6zzkh4RXCbm5K4g7c0iqQ,9621
42
+ cursorfleet/events/__init__.py,sha256=xD_3ccKN_U75fgmKRm9RT9OG_NUdiNXQo-uUZuGIa1o,1196
43
+ cursorfleet/events/forbidden.py,sha256=YAmStDfVHMvPyVOpDAOJIZvDcgfXt7tPnBKO9VPYbsY,1111
44
+ cursorfleet/events/ids.py,sha256=Sh9_KFRNRYhfiJ64fvOV3i5ijNpJH424gQo5INl9bm8,4074
45
+ cursorfleet/events/kinds.py,sha256=vsyB3BCfV2JhX4_g6U5DSpq0VR-fDZq8b7_NVs84veQ,3737
46
+ cursorfleet/events/models.py,sha256=JrM8v6iiKebLOZx8p3PpG3q46PTFaGZWlfEXQLGlLjA,8421
47
+ cursorfleet/events/pathcheck.py,sha256=oQ11aa1Xn6unb8GnHria78DQewCgnyyKQS_HoZKajcg,1709
48
+ cursorfleet/git/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
49
+ cursorfleet/git/collector.py,sha256=SiNlj1gRYhqjFAhdR8kdhDmY7QpGnxaCF-t68t38eno,7878
50
+ cursorfleet/git/runner.py,sha256=EB_lfEP2Ro-SGCjMrExX07UWuGN5k5T4zupgxJrJUp4,4249
51
+ cursorfleet/git/worktrees.py,sha256=rKH9w6vV2j28J3yv5Ny6TQLRXXI10ePwycmM3Y6wwqI,2368
52
+ cursorfleet/policy/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
53
+ cursorfleet/state/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
54
+ cursorfleet/state/artifact_scan.py,sha256=B5HeaLNWrfLmBmHmHLJfOxeAryDnHLiMNa2EZowC3E8,12600
55
+ cursorfleet/state/context.py,sha256=NlYsM3INpmVSQ8ucr28eTnNVr4xL9mGcJqnbLze4MRA,1276
56
+ cursorfleet/state/event_store.py,sha256=VUnUNFsbLHPaiXMWxlxLgPWmeRoTmlaVgP3sPXVZ1M4,8034
57
+ cursorfleet/state/indexer.py,sha256=RJhebejUbR3mYXv-A9Yv6b9-A8enA6KqTOjS8-gOdMI,17375
58
+ cursorfleet/state/lock.py,sha256=SJRc3DWgSb1HgVWHSAq6qcfZsPYsOB024z10V61rRf8,2033
59
+ cursorfleet/state/models.py,sha256=aCoR5Qz1H6D0EzF-8xuUu3QMaS0njxdV7Q5MIXTRY64,7203
60
+ cursorfleet/state/reducer.py,sha256=34l4GpzY0ZV6zPZE8iZOdCszi6KVuaQaWBh5v0g5ocg,21777
61
+ cursorfleet/state/retention.py,sha256=gMGtirrMH810Zyu7uonzRHFolS3tAigPJ5sYh3TbBcg,7707
62
+ cursorfleet/state/run_builder.py,sha256=rDwttd-wUvkHZxnwsVFQ6XKkRnX41PcDumOjxoPSbAg,4743
63
+ cursorfleet/state/run_model.py,sha256=YOm-Y193PhEoNW4zCuGrRfazEieJeJgTPMS1ACZ5rQU,1054
64
+ cursorfleet/state/run_store.py,sha256=P6ynQY0lNdKamFXBObew8vmjCsTYNXvuo-ovVm7vuFI,2897
65
+ cursorfleet/state/runtime.py,sha256=aH6m16tBSkLPscsFnjDoieCFuMMQ4sEZpm75eswcXJ8,21426
66
+ cursorfleet/state/spool.py,sha256=M-jU_f4V7rtHN3kgxFbsY5sEzrPm576PaszqEXW14pQ,6339
67
+ cursorfleet/state/spool_read.py,sha256=lISjUYN0qb7JfzUv2QkYL7uFiR9PuFPpYb370if2SVQ,8278
68
+ cursorfleet/state/status_doc.py,sha256=x3orYXaenjarp7NDWMbSwcihPZ-2gInABI-r056D8xc,8939
69
+ cursorfleet/tui/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
70
+ cursorfleet/tui/app.py,sha256=Hh3CbJnLQ6AnAwtKRh5MwIE-2aau6S8ilnWJyOVpWIc,22787
71
+ cursorfleet/tui/data.py,sha256=HiLaXByMlRVxnzD99L_A0zIAOalpQAyDJtfgITOEY0Y,21227
72
+ cursorfleet/tui/filters.py,sha256=jzYYmkilfZ1xU5IdRZrZTwlr5HOjO3qIsfyGePr0YdU,2963
73
+ cursorfleet/tui/gates.py,sha256=Z1grV-ZsbN9V4XLRshU3LAgF5h7QO2DDQpvkx3vRe1I,8378
74
+ cursorfleet/tui/help.py,sha256=krqmJGHNBrHoydV4hLG2qIlXhuCCD_tQ2eUKwtybyuU,4313
75
+ cursorfleet/tui/layout.py,sha256=vmN_wQWOx5_rjYzFXnwaqkE5JSkwzY7_wPct4g3CD_Y,652
76
+ cursorfleet/tui/theme.py,sha256=71zIG4-aYdMphDZnjP0-Dpl1hWdJqDCrmNCvNsaCsyY,4779
77
+ cursorfleet/tui/views.py,sha256=U6cy842Rv-CN8RqQ5192rdQnbI2fQUI7hetLdwTDjKs,41940
78
+ cursorfleet/tui/watch.py,sha256=PtWOpWlvdLerVZJ9YuD7Na5nrXVzd9uEh7ETlVkRldk,1077
79
+ cursorfleet/workflow/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
80
+ cursorfleet/workflow/artifacts.py,sha256=DHdr4yoWCmhdbw_wz11Ly6wCb6Kc9cqpDP5eZPGqDPs,5834
81
+ cursorfleet/workflow/frontmatter.py,sha256=TBd__kFlRVw4Yv5Q0EbCsCoJTI7727BnAjjWLoIt2yQ,8342
82
+ cursorfleet/_templates/cursor/agents/architect.md,sha256=GTo8bCxfkv-eHWmYadJoFuXzKe1LW-NjCufZEZFu1V8,1050
83
+ cursorfleet/_templates/cursor/agents/implementer.md,sha256=4R0pUp-OiBCUZGzpdoVnV6vg5dh-8oqgk3oZQwoxenc,1296
84
+ cursorfleet/_templates/cursor/agents/patcher.md,sha256=k-JyyO7mDAwBhNK0mgYZJSBMDC6emdMaa4Ro9JpnEtM,1007
85
+ cursorfleet/_templates/cursor/agents/qa.md,sha256=RDIiwjiYciTISErQ6Ck-JokHcy3siPeEv9EgnF5JdSY,1286
86
+ cursorfleet/_templates/cursor/agents/reviewer.md,sha256=4YAK9Gj8wNaapfxlPgqLPaKakO5XItE2uhvyXtBDWWY,1340
87
+ cursorfleet/_templates/cursor/agents/scout.md,sha256=_buGp8poyHR-9JTnBn_zOtLdPGuGUyWVOuzpRCM1DVQ,805
88
+ cursorfleet/_templates/cursor/agents/tester.md,sha256=9TOyo_djNeOsMkdgtvRnBPLqtLFT_uSHzxVqp1SrTaE,1158
89
+ cursorfleet/_templates/cursor/agents-md/root.md,sha256=C_VnxCb8WMM4x3R9JnslpwWNlolWZrOtUsliYcH_Yy4,524
90
+ cursorfleet/_templates/cursor/agents-md/work.md,sha256=DHpsex_bMkqKL5oZbyv-SjVqg1H2rzRuJEgEqh2FEP0,430
91
+ cursorfleet/_templates/cursor/config/config.toml,sha256=rsrHomPUlTTPgx6-SgI2FWQgzh56OHg6zLqtAyPVrC8,1034
92
+ cursorfleet/_templates/cursor/hooks/entry.json,sha256=inenenNK1e1jQbfSl3uvQBUjEmIPqr6tGPILUqwqAOg,52
93
+ cursorfleet/_templates/cursor/rules/cursorfleet-core.mdc,sha256=oYo01RzJESpmCVq31HtAhvU4B-BQ2sp4KhunWs0zZaE,661
94
+ cursorfleet/_templates/cursor/rules/cursorfleet-handoff.mdc,sha256=xlALdvJqGQsOC8Tzh4K2n3Va5UQTJMmjil_9LQlBuls,1044
95
+ cursorfleet/_templates/cursor/skills/cursorfleet-artifacts/SKILL.md,sha256=_ZVn7At7QNw6PPMMe5nvuT1wJ7SBClF7NkgFdQ6gs-U,2608
96
+ cursorfleet/_templates/cursor/skills/cursorfleet-coordinator/SKILL.md,sha256=zdX2ORbmLr-hAUsWFVjJ3ORtUcwutuEzFd0W3-vwP-w,2654
97
+ cursorfleet-0.1.0.dist-info/METADATA,sha256=lAc8wMJKgSwSVkKE-yRMwHxhY8QS2FbWw0lr5-66MZo,7414
98
+ cursorfleet-0.1.0.dist-info/WHEEL,sha256=W3fkpkm7-wf9vBI5Z-7s0eWkeM-spu78I8Neb98DeEg,87
99
+ cursorfleet-0.1.0.dist-info/entry_points.txt,sha256=EUMiJJjOqAHcW0aAKiPjp0c9JP2EZOGaXA1ixegUr7E,119
100
+ cursorfleet-0.1.0.dist-info/licenses/LICENSE,sha256=mh5Qe-diiSHj-5oGFkGh62vA1hsV4by5KYkc-_7ukjs,1073
101
+ cursorfleet-0.1.0.dist-info/RECORD,,
@@ -0,0 +1,4 @@
1
+ Wheel-Version: 1.0
2
+ Generator: hatchling 1.32.4
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
@@ -0,0 +1,3 @@
1
+ [console_scripts]
2
+ cursorfleet = cursorfleet.cli.main:app
3
+ cursorfleet-hook = cursorfleet.adapters.cursor.hook_main:main
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Mounir Al-Suroji
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.