graphite-code 0.3.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 (112) hide show
  1. graphite/__init__.py +41 -0
  2. graphite/__main__.py +7 -0
  3. graphite/_cleanup_worker.py +525 -0
  4. graphite/activation.py +164 -0
  5. graphite/agent_hooks.py +577 -0
  6. graphite/agent_settings.py +226 -0
  7. graphite/analyze.py +146 -0
  8. graphite/answer_contract.py +420 -0
  9. graphite/bootstrap.py +210 -0
  10. graphite/buildlock.py +99 -0
  11. graphite/cache.py +131 -0
  12. graphite/channel.py +1325 -0
  13. graphite/cli.py +3053 -0
  14. graphite/cluster.py +111 -0
  15. graphite/config.py +209 -0
  16. graphite/context.py +355 -0
  17. graphite/daemon.py +745 -0
  18. graphite/daemon_health.py +733 -0
  19. graphite/debt.py +118 -0
  20. graphite/dependency_install.py +1597 -0
  21. graphite/detach.py +33 -0
  22. graphite/doctor.py +678 -0
  23. graphite/doctor_probes.py +2100 -0
  24. graphite/engine_identity.py +238 -0
  25. graphite/export/__init__.py +6 -0
  26. graphite/export/html.py +244 -0
  27. graphite/export/json.py +39 -0
  28. graphite/export/md.py +68 -0
  29. graphite/extract/__init__.py +4 -0
  30. graphite/extract/ast.py +1964 -0
  31. graphite/freshness.py +127 -0
  32. graphite/git.py +406 -0
  33. graphite/graph.py +117 -0
  34. graphite/graph_io.py +188 -0
  35. graphite/health.py +147 -0
  36. graphite/hook_entry.py +68 -0
  37. graphite/hookinstall.py +224 -0
  38. graphite/hookshim.py +86 -0
  39. graphite/incident_ledger.py +247 -0
  40. graphite/ingest.py +279 -0
  41. graphite/init.py +791 -0
  42. graphite/io.py +32 -0
  43. graphite/listing.py +51 -0
  44. graphite/llm.py +518 -0
  45. graphite/llm_probe.py +157 -0
  46. graphite/mcp.py +7 -0
  47. graphite/mcp_server.py +450 -0
  48. graphite/natural_query.py +252 -0
  49. graphite/overlays.py +713 -0
  50. graphite/probe_process.py +879 -0
  51. graphite/probe_workspace.py +728 -0
  52. graphite/process_contracts.py +22 -0
  53. graphite/provider_observer.py +397 -0
  54. graphite/query.py +646 -0
  55. graphite/query_plan.py +97 -0
  56. graphite/replacement_audit.py +291 -0
  57. graphite/resolve.py +660 -0
  58. graphite/review.py +782 -0
  59. graphite/routing/__init__.py +5 -0
  60. graphite/routing/approval.py +362 -0
  61. graphite/routing/classifier.py +169 -0
  62. graphite/routing/claude_executor.py +419 -0
  63. graphite/routing/claude_probe.py +102 -0
  64. graphite/routing/cli_identity.py +84 -0
  65. graphite/routing/codex_executor.py +383 -0
  66. graphite/routing/codex_probe.py +93 -0
  67. graphite/routing/context_builder.py +327 -0
  68. graphite/routing/contracts.py +802 -0
  69. graphite/routing/diff_policy.py +468 -0
  70. graphite/routing/edit_apply.py +166 -0
  71. graphite/routing/effort.py +43 -0
  72. graphite/routing/lifecycle.py +771 -0
  73. graphite/routing/lifecycle_operator.py +227 -0
  74. graphite/routing/lifecycle_service.py +555 -0
  75. graphite/routing/lifecycle_storage.py +977 -0
  76. graphite/routing/ollama_executor.py +341 -0
  77. graphite/routing/ollama_probe.py +72 -0
  78. graphite/routing/openrouter_executor.py +338 -0
  79. graphite/routing/openrouter_probe.py +188 -0
  80. graphite/routing/policy.py +815 -0
  81. graphite/routing/probe_runner.py +543 -0
  82. graphite/routing/process_runner.py +523 -0
  83. graphite/routing/profiles.py +554 -0
  84. graphite/routing/prompt.py +58 -0
  85. graphite/routing/registry.py +444 -0
  86. graphite/routing/route_pool.py +629 -0
  87. graphite/routing/route_pool_execution.py +275 -0
  88. graphite/routing/schema_validation.py +169 -0
  89. graphite/routing/service.py +1263 -0
  90. graphite/routing/settings.py +99 -0
  91. graphite/routing/shadow.py +201 -0
  92. graphite/routing/storage.py +4001 -0
  93. graphite/routing/telemetry.py +346 -0
  94. graphite/routing/worktree.py +259 -0
  95. graphite/routing/zai_edit.py +113 -0
  96. graphite/routing/zai_executor.py +191 -0
  97. graphite/routing/zai_probe.py +126 -0
  98. graphite/savings.py +84 -0
  99. graphite/ts_bridge.py +142 -0
  100. graphite/ts_resolver.mjs +314 -0
  101. graphite/typescript_activation.py +1586 -0
  102. graphite/usage_ledger.py +156 -0
  103. graphite/validation.py +148 -0
  104. graphite/watch.py +167 -0
  105. graphite/windows_job.py +368 -0
  106. graphite/windows_startup.py +144 -0
  107. graphite/windows_task.py +212 -0
  108. graphite_code-0.3.0.dist-info/METADATA +743 -0
  109. graphite_code-0.3.0.dist-info/RECORD +112 -0
  110. graphite_code-0.3.0.dist-info/WHEEL +4 -0
  111. graphite_code-0.3.0.dist-info/entry_points.txt +3 -0
  112. graphite_code-0.3.0.dist-info/licenses/LICENSE +21 -0
@@ -0,0 +1,112 @@
1
+ graphite/__init__.py,sha256=jZUTFi2XY4CQG89ulBRo_vypbS5DHeM_EllD_N4T14w,2181
2
+ graphite/__main__.py,sha256=Bp5bcXE6M0AnuNW1LjOXOEvGG5r0fXZoeRb_k5Yxphs,149
3
+ graphite/_cleanup_worker.py,sha256=8ApB6cG6_rupUR8yPXlg0ary0GG88jOHCiC_VSvL1uI,18964
4
+ graphite/activation.py,sha256=u2LdJt1kpvrBKZoK9QIp6AY-c3dHGdu5AOdyCf8bNoY,5217
5
+ graphite/agent_hooks.py,sha256=zKluT-d-_RhVoaqXRGOcGEw2sG_bCu57oqmpHXX4mEI,24182
6
+ graphite/agent_settings.py,sha256=Lw2dGV74wvuuD3J65Vyqz0ljg4feYPrl6ZHKtyfH7xI,10455
7
+ graphite/analyze.py,sha256=a5ST3iIoSBEstqFEAu8_FU_XT_uTGwp9qc-GGJmialk,5402
8
+ graphite/answer_contract.py,sha256=y70W-0HcFuk7o9SCw72OE2dTBZoKJNbypP56ainToyY,19942
9
+ graphite/bootstrap.py,sha256=OPDzN9jSr8IE1N7xOnVKk3FgO2UqBTOUNcNV-pZAsus,8448
10
+ graphite/buildlock.py,sha256=LkyRvAFgvNjjJ4AiZ0kBQQ41DJrpIXP9m4f7oGvFxDM,3257
11
+ graphite/cache.py,sha256=Idyaw1TtbrZV18pZsm2Ad4nqCz1DmonqEokIJWqbQM4,5044
12
+ graphite/channel.py,sha256=xYu6gjYF7O0X_L6meuGxYzBHDx63yGdgQ-_ri3jknF8,54220
13
+ graphite/cli.py,sha256=qREhxPm5feDfkv8Zevby8Q6tIyZTjbLPKEqc0edKVyw,136730
14
+ graphite/cluster.py,sha256=j5dFT40DD7scD4h8d7XJoAGQIcJKpsKsrFceiJkOuzw,4066
15
+ graphite/config.py,sha256=yh0YxtKFrXNJA8IZjh7ut79PgE-2jeC28ME-qs-jgyU,9476
16
+ graphite/context.py,sha256=2PHkt26JC51OQifxEOmcTJKIFEXpnon6KBb_Kr6UJ4E,12854
17
+ graphite/daemon.py,sha256=_MvOrbzffRazeSnHQGms3jbH6T7Bdfztaby06VrJCDM,29622
18
+ graphite/daemon_health.py,sha256=l2jHdkVWVsUOs3Ob4_Zcs6M8PrgAADDKdoDjhIx9N4Y,29018
19
+ graphite/debt.py,sha256=mvxoFrICwbWP19YKlf1cZIPFg8qIf7Jgyr9kIweVBbE,4664
20
+ graphite/dependency_install.py,sha256=wlI5TOqyWZE0qJHU1KvUCAShqr1JPHgJo_Kmz_gr4YI,58310
21
+ graphite/detach.py,sha256=wlRfPpxk-c8-9plRKyZcUUQpk5GBM5Qw9D-7wQ6STu8,976
22
+ graphite/doctor.py,sha256=mT1Q9iJUrOqqinb_Z4qGcbLgKbEm3uxbA0zUv-dIzSY,35519
23
+ graphite/doctor_probes.py,sha256=LtIlfueQLRbCr2PmJy2zz5IA1Ep05ni1KfS8UR0x4pQ,87538
24
+ graphite/engine_identity.py,sha256=hZYA9fBsg2fj_61Rtkc84XzJrdsa2MaDFOLZJV4I7eE,8951
25
+ graphite/freshness.py,sha256=kkhs-ArInlv1XxedmQRAFiThvrHt11mN5UAGCQCU4A8,5284
26
+ graphite/git.py,sha256=-WtiX-XTmRkzGYP4qW9vWKtYKeZRTWxyI2QqAzBOMcI,15493
27
+ graphite/graph.py,sha256=W0tfBZzzdZfR5SP-lxlWkPZGB_SWNWq_X1dKNmSr1-c,4272
28
+ graphite/graph_io.py,sha256=rWjc3_Lq7DOg1_XuM4eY8GH9GwIHowo0CcABTIRtLyc,6563
29
+ graphite/health.py,sha256=pmp8PoED--oLF8A3Y-BIq1HfXkJSGgSOET0lJOEwl4w,5244
30
+ graphite/hook_entry.py,sha256=mQdahnjC_2r3XeMCXTcdEGbbygsEOYG0DZ_oHYLGLr0,2723
31
+ graphite/hookinstall.py,sha256=0uS6iFUPVAQD0lQPL_aplFrBFINzCq9edxAQQOrWSRo,9027
32
+ graphite/hookshim.py,sha256=WFKi0YhEvU2cdqHf0BPPDQ8tF12uK3jzv69carkt55c,3857
33
+ graphite/incident_ledger.py,sha256=wHW-P_PJNollM_L9bAXHaxFeLb89wMXs7XX0VrH7aSw,8654
34
+ graphite/ingest.py,sha256=JGIptEfOBlLarvTV3jRqxBajzZf67Sin2QGmDx7wv-Q,8778
35
+ graphite/init.py,sha256=htdBZ6mDxgW0udH24iG1-cXyTotG7mEM6qC4KRH9Vto,39310
36
+ graphite/io.py,sha256=YETPvbNGWpJknDsGolTSkY-Z4W6bcJdaapWDTjRtqf8,1045
37
+ graphite/listing.py,sha256=fxKBK7_1q9IcFK_VAhpQCKyDV7q_RajJ0r8O2h9rqes,1666
38
+ graphite/llm.py,sha256=eC3MqypRzWALwfoo00-R6w66fkUnaXMBxqVa7thaLYk,19441
39
+ graphite/llm_probe.py,sha256=jNDWc4PndR-YqKB9aPROj56P1gRZQ8bz-SMpR04JAMU,4848
40
+ graphite/mcp.py,sha256=Abe0CPbOu-KwiBgK_nd4T8QqpIOhOQxrAAYWgsSZe7M,189
41
+ graphite/mcp_server.py,sha256=XJR7d1dgMuykVUSdkZIoDUlixWJOD27AaqY9uzKz9ys,16754
42
+ graphite/natural_query.py,sha256=B9isQ3AVhNUS1VVKbS_NSdiE2E1hhtpIVNngatMz3V8,10455
43
+ graphite/overlays.py,sha256=t3jKcXCAd4sFb9VjmyL-KErgWLI24730hA8zJ-7A-V0,26908
44
+ graphite/probe_process.py,sha256=YAmWlHQIKI9EVRb6c0aeYSlNb3YlvL-gEXyS-lBdwuo,38164
45
+ graphite/probe_workspace.py,sha256=DJGITdi7fBn3xzfsgkeknWI-MiwEquJNrHevVY-tTA4,29198
46
+ graphite/process_contracts.py,sha256=ruqbZx6-9gfXPQvUFczg5KJedrcjbykEwRhb2Si3Vw8,1066
47
+ graphite/provider_observer.py,sha256=0Ko8HamjBki_nQTJ1VII7pfpt6d28YkxSDgU1GiTJiA,15679
48
+ graphite/query.py,sha256=kAUrXwpxTI-hsm5axfcVsz5UkQDY20KnSYba8HC6vQ0,24822
49
+ graphite/query_plan.py,sha256=TLGwOnsL6Ia1hCsDzmWWBwtcn37Dn6aOuAvGowtgSXg,3768
50
+ graphite/replacement_audit.py,sha256=TQS7RkpG53by4bzrrD5bj-ZHKreTZvSKRe6Dx24NicY,12090
51
+ graphite/resolve.py,sha256=Cedf6ekSb1LnlyNLVITR6yUXdziYqOrV15PcQkf63ZQ,29299
52
+ graphite/review.py,sha256=Dd35aA8n5R1Osoop769uymdOFFZMB4BFexAKJD9bO7o,27810
53
+ graphite/savings.py,sha256=W5FbXScpteMTwngVUtDqPct99tHY7W8s3XlT4hbPJCY,3175
54
+ graphite/ts_bridge.py,sha256=J-ZneuxLnoZCL4oO1fKLl278EkOfaCGI74lh2BVhXLE,5386
55
+ graphite/typescript_activation.py,sha256=hN_OoSMy3y4neNYyrc6RyFAEN70jjOePMLxiAoPhRWk,52874
56
+ graphite/usage_ledger.py,sha256=tvBBCnWvw5ooDQOJQH7pUNQoKbHMI0UKn16ZDs7D1X0,5206
57
+ graphite/validation.py,sha256=uH0KDY0a3Eecx5eNDHDBm1gri8N4szdUHG5DZc0iFxY,6740
58
+ graphite/watch.py,sha256=a5sM9g6auHmXwdfKFdpmCin0jkcZlw9_PzBqic0lSTc,5125
59
+ graphite/windows_job.py,sha256=hVv5Bcbz6rXVPFukJVdbzYJaELCD5l_DPW3oB62nlBc,17587
60
+ graphite/windows_startup.py,sha256=C6NjsoHcTb9OJkdOGZytFPlBsHByxds2syBZY1UERWg,5017
61
+ graphite/windows_task.py,sha256=3grdW7WrqzpFDQMXvw68UcWsIn6mswCzOTY1xTmKuDM,7291
62
+ graphite/export/__init__.py,sha256=pWJWSCaB0crABtU8Eeu21YOb4rZvuI1Fvz_OvNGTZCo,181
63
+ graphite/export/html.py,sha256=WB-9p0fpjFh-bTpHl5aYg1UdM_PGXwaZEtyR3lleNZU,8949
64
+ graphite/export/json.py,sha256=fTICqe3qOw7_b9BIvHtUl315ppYu-s7WYt05tareoH4,1268
65
+ graphite/export/md.py,sha256=JqxULAZHdsxBsbgeZVzZ08C0_ZmQ9Tsln_dAmvHmbjY,2557
66
+ graphite/extract/__init__.py,sha256=HsF3yU1VcT3EsvUfxMJ0iVW2Ud_XrivnBGmdi9QTK3M,118
67
+ graphite/extract/ast.py,sha256=e5rbU7woKD8TZJNbf6o80lVxzsHRS1gImwMqi84zr2U,92460
68
+ graphite/routing/__init__.py,sha256=QlzeC4TbkzJNPn6vVrMH36FmpHrH0ZoJzjK_ckF-Z54,177
69
+ graphite/routing/approval.py,sha256=Ti5vconJP2MkAa_TwIERvo_R6ag0rxcxnUp76XrNN3o,14234
70
+ graphite/routing/classifier.py,sha256=9JcVhxWnt9K_xMJkS-xiLUKYHi3LZiTGefkqBUSvvKc,6836
71
+ graphite/routing/claude_executor.py,sha256=3CAVWC0ijRSOSfjvCbH_Yfmxmg2ANRxDDkLPDKhNH8c,14480
72
+ graphite/routing/claude_probe.py,sha256=eWmFo47NOR8JqnAyISNYxxOPTL24_gv6Out3dB_WJLw,4633
73
+ graphite/routing/cli_identity.py,sha256=kJ1GmprhddWlooymOnHblRzdTKX6HIZDmc8qBDOTNVo,3150
74
+ graphite/routing/codex_executor.py,sha256=fsHqf7Q4RQ66_BLTIce2MdH4CnPKJv_9AS3OsrgGK5s,13311
75
+ graphite/routing/codex_probe.py,sha256=Q_ck0gQlZHJtgvo8qNpoyuz0alztIjGjdBzfz0g6guc,4770
76
+ graphite/routing/context_builder.py,sha256=CNzgh6PTGvMM_1t_joK5wKLX3jBde0RzmXezhL4PTyk,10553
77
+ graphite/routing/contracts.py,sha256=8oDyAnsJDICwBLZPCWyYB6CKgW1PzT9VtBVSAWomheA,29288
78
+ graphite/routing/diff_policy.py,sha256=2wsqds_-u0Bdm5mDv1-qHPltSMZ2sSW59WGzhrMuS6c,17362
79
+ graphite/routing/edit_apply.py,sha256=Gg8OX03QsdU2c2rqQqRgLeAARL15XUsm3dCGE3NnnSA,6216
80
+ graphite/routing/effort.py,sha256=6XH35JYcvwkcWY0asPu7Sfs6ZRU6KNMGAcJ82ddt-9U,1520
81
+ graphite/routing/lifecycle.py,sha256=iylQbxwGhX47XVcCw7uIvKsNHf21RVIgoekCB2VWVXg,29019
82
+ graphite/routing/lifecycle_operator.py,sha256=pYjZsTT_lQ8mkzVu88h58Wtb1Vg2ZojHrUQk1_oNacQ,9042
83
+ graphite/routing/lifecycle_service.py,sha256=siMR4UXW974mmVo0KFJBE9I_9K1tlVbHtTvbcO3jHL8,26461
84
+ graphite/routing/lifecycle_storage.py,sha256=XM-jrP78TW9-r5K9QVDbhqEa8wg4BNVMrIH0HhuUtPs,45301
85
+ graphite/routing/ollama_executor.py,sha256=2RsSUscHiihmrl4E7W9Yja2x7CgilmNHbLSvD3gWsoE,12028
86
+ graphite/routing/ollama_probe.py,sha256=ypshcN5gIE3k2k_cq60bURXnd1UtmL_w00iTkykFBRE,4023
87
+ graphite/routing/openrouter_executor.py,sha256=Tp-CTQoSbEc6U6l8vLOIot4FK-mATnTIbsQrRYoU9B0,11961
88
+ graphite/routing/openrouter_probe.py,sha256=yw4lCa73mjevmlvKdiqYdH_jQ-U4aIeYgI3jVI0sNOE,8138
89
+ graphite/routing/policy.py,sha256=EkYSRFXizBFyL02w_--_c9R4xEBi-BGD3M4p3PNHAcg,27764
90
+ graphite/routing/probe_runner.py,sha256=d1b6LUfzjqqlU4exc35qUltvQK7jLBOqX9A5hXHr9l0,19738
91
+ graphite/routing/process_runner.py,sha256=ZFtwplEDpyRdzStqeKOQmZ4eAyQa1KyfiftB-v5TDy0,20956
92
+ graphite/routing/profiles.py,sha256=BClxZEKO0NBceyn6-aOaOHQ2hh0Eq1fbb_i-rCdCO6I,20140
93
+ graphite/routing/prompt.py,sha256=6pcMjyha7Fh13eG2B1SOHcdg_EpvAQViWi2_62S-zc0,1984
94
+ graphite/routing/registry.py,sha256=tR5SPX9L4YgTlT0p5JjmLVjixHMoevub2NAR0-12eg4,16748
95
+ graphite/routing/route_pool.py,sha256=H84woSod909aT2ZLRBbDAt4i7HkZcDJ0H0ApWQysqno,22197
96
+ graphite/routing/route_pool_execution.py,sha256=g0SMbEz85Jm6--7ydljp88Whsi_lmJNlG0L-wHCfpGI,9115
97
+ graphite/routing/schema_validation.py,sha256=uDTNHq6zFL2BXFr1nveC7Zq63eWrYW1-pz3-zt0JbKo,6853
98
+ graphite/routing/service.py,sha256=Ai2qCY00Qq0KP8F7TK1pbfihXovb_PQjpF2GvnqPXPc,52540
99
+ graphite/routing/settings.py,sha256=a8OebKzDQUG0kuFmzCapvWl-dP7gl8DtBWfRZzjrz20,4049
100
+ graphite/routing/shadow.py,sha256=JAKGiQSnZ3Fq5I26LqVpcRfdvgqhPylWIDo-xezOsFU,6689
101
+ graphite/routing/storage.py,sha256=F0RFAj6fVlo_8vbY8IK6cQ5XX4fv0kY8d3PvrfvYuTo,178784
102
+ graphite/routing/telemetry.py,sha256=Fpw30UHVTdDUDAOONFz7XZy87PEcKfKXuUGR3sB7E_g,12791
103
+ graphite/routing/worktree.py,sha256=5xGLRRrzVNcduF9cmk1b1m6rNkY_X8aK7-hj_4zOMRE,10031
104
+ graphite/routing/zai_edit.py,sha256=Kra2tI9GkntQAhV1vNHlFlp4sY-ksq2-bY4N9fEfLEc,4466
105
+ graphite/routing/zai_executor.py,sha256=cHUl7DbWRUhYg9Lwm3OiP6H3dI70y_b8iAWCyfgOPi0,6636
106
+ graphite/routing/zai_probe.py,sha256=HL2vM8s2J4-n8Bp3l7QLpWLEk-PhZrt_rLc2cY65hvU,4771
107
+ graphite/ts_resolver.mjs,sha256=fCDjJKjynZ8fBM4MV6nzAO8fHftDWb7I6Mkf4Ck7R8s,10826
108
+ graphite_code-0.3.0.dist-info/METADATA,sha256=nycmq30zjTeScP3inMg92NPPNMkCEsyh6BQuVull_Cg,44233
109
+ graphite_code-0.3.0.dist-info/WHEEL,sha256=zOwg4jB6zX2kU910N-cMawjivD6tO8NEWvE12je1bVk,87
110
+ graphite_code-0.3.0.dist-info/entry_points.txt,sha256=-BpYAYFyn58DYi-hrFW9hMz6mTwNsYI44s9gaef4MiM,87
111
+ graphite_code-0.3.0.dist-info/licenses/LICENSE,sha256=mfotJ1Lk0VVUgoEPOIR7-x5cvYiz2UkuVH7e3fhoDiY,1066
112
+ graphite_code-0.3.0.dist-info/RECORD,,
@@ -0,0 +1,4 @@
1
+ Wheel-Version: 1.0
2
+ Generator: hatchling 1.32.0
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
@@ -0,0 +1,3 @@
1
+ [console_scripts]
2
+ graphite = graphite.cli:main
3
+ graphite-mcp = graphite.mcp_server:main
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 jared0565
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.