runcell 0.1.15a10__py3-none-any.whl → 0.1.16__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 (559) hide show
  1. d5m_ai/_version.py +1 -1
  2. d5m_ai/agent/proxy_handler.py +19 -7
  3. d5m_ai/agent/tools/local/shell.py +63 -13
  4. d5m_ai/chat/chat_proxy_handler.py +1 -1
  5. d5m_ai/completion/__init__.py +11 -1
  6. d5m_ai/edit/shell_executor.py +64 -16
  7. d5m_ai/empty_display/__init__.py +3 -0
  8. d5m_ai/empty_display/empty_display_handler.py +137 -0
  9. d5m_ai/extension.py +12 -1
  10. d5m_ai/git_status_handler.py +225 -0
  11. d5m_ai/gitignore_handler.py +120 -0
  12. d5m_ai/labextension/package.json +7 -2
  13. d5m_ai/labextension/schemas/runcell/file-browser-toggle.json +22 -0
  14. d5m_ai/labextension/schemas/runcell/package.json.orig +7 -2
  15. d5m_ai/labextension/static/1105.da3b3cc0801d5b7daf78.js +1 -0
  16. d5m_ai/labextension/static/1113.a6206c1ce30c44e74d65.js +1 -0
  17. d5m_ai/labextension/static/1424.7330f97f81a7cbac0293.js +1 -0
  18. d5m_ai/labextension/static/1482.5594d3330698044d51b6.js +1 -0
  19. d5m_ai/labextension/static/1681.b7dbfbfc8e8bb443b01d.js +1 -0
  20. d5m_ai/labextension/static/1741.0e30660c73a4aa6109e0.js +1 -0
  21. d5m_ai/labextension/static/1980.a1d8fd213c03964ca2dd.js +1 -0
  22. d5m_ai/labextension/static/2313.e3756d51e535b61cbc41.js +1 -0
  23. d5m_ai/labextension/static/2331.f0e4d66886493b7ff0f6.js +48 -0
  24. d5m_ai/labextension/static/{4734.4e6afd0c5fd50926f67c.js → 2353.7b6b36b3164a86427209.js} +1 -1
  25. d5m_ai/labextension/static/239.17dc9f15aff0e2c966f0.js +1 -0
  26. d5m_ai/labextension/static/2443.590c85be4982d61f9378.js +1 -0
  27. d5m_ai/labextension/static/2490.742d719657af69afad3e.js +1 -0
  28. d5m_ai/labextension/static/2636.c45f9685b0508a44882a.js +1 -0
  29. d5m_ai/labextension/static/2726.e9c471b4ad7fed0d085b.js +1 -0
  30. d5m_ai/labextension/static/2783.e11cc76ea288d3c135d0.js +1 -0
  31. d5m_ai/labextension/static/2922.8cdf00bb7d09c5419d78.js +2 -0
  32. d5m_ai/labextension/static/2951.ef10b72fe6b301f68146.js +1 -0
  33. d5m_ai/labextension/static/2958.38f8dc8fc705367ecec4.js +1 -0
  34. d5m_ai/labextension/static/{5408.f0ba6921f1e4477b4a96.js → 3027.2226147340da305061f3.js} +1 -1
  35. d5m_ai/labextension/static/3033.98d8aa6a2f13a942b945.js +1 -0
  36. d5m_ai/labextension/static/3131.5b8a2d5bc188f95b8229.js +1 -0
  37. d5m_ai/labextension/static/{3246.aa2cfa5fa8d2402d7cdf.js → 3340.6609b3985073e002c83d.js} +2 -2
  38. d5m_ai/labextension/static/{415.c2838574e93d05eb13ea.js → 415.0a1fdc1d9f76c0431d42.js} +1 -1
  39. d5m_ai/labextension/static/4175.550a71c6766138e5a6ee.js +1 -0
  40. runcell-0.1.15a10.data/data/share/jupyter/labextensions/runcell/static/4296.22c023f73b9ef8838492.js → d5m_ai/labextension/static/4296.7f1db6691a4ac120a383.js +1 -1
  41. d5m_ai/labextension/static/434.bfe4f51db2eb9644fbe7.js +2 -0
  42. d5m_ai/labextension/static/4497.5c0323113f039c9558b6.js +1 -0
  43. d5m_ai/labextension/static/4664.73a65498a9c43ddcf17e.js +1 -0
  44. d5m_ai/labextension/static/4704.10a6eacaafe29bf2c42a.js +1 -0
  45. d5m_ai/labextension/static/5112.5f1cd8ee9c2297a251f7.js +1 -0
  46. d5m_ai/labextension/static/5228.05d972957a2421ec1ce0.js +1 -0
  47. d5m_ai/labextension/static/5264.37c842e2843ca2bf4298.js +1 -0
  48. d5m_ai/labextension/static/539.7b5e45294371c047b74e.js +1 -0
  49. d5m_ai/labextension/static/5391.375b4314cb4b851f0915.js +2 -0
  50. d5m_ai/labextension/static/5408.07fc40e33d3fd1a3f7b6.js +1 -0
  51. d5m_ai/labextension/static/5455.c1d01203e7e387437b83.js +1 -0
  52. d5m_ai/labextension/static/559.a4c3a83a74025324f179.js +1 -0
  53. d5m_ai/labextension/static/6131.0393c6487450018afcae.js +1 -0
  54. d5m_ai/labextension/static/6354.0025efd7872b7d32b46b.js +2 -0
  55. runcell-0.1.15a10.data/data/share/jupyter/labextensions/runcell/static/1477.710069d762ddef3ca754.js → d5m_ai/labextension/static/6494.da246ca8363db0bb8bfc.js +1 -1
  56. d5m_ai/labextension/static/{4175.d23c246efa6921b45150.js → 6556.7a46eed7932ddfc9e659.js} +1 -1
  57. d5m_ai/labextension/static/6633.6708bbc3c085110097da.js +1 -0
  58. d5m_ai/labextension/static/6820.b3aba76c0f17b2560849.js +1 -0
  59. d5m_ai/labextension/static/{4328.c50ba81ca9bf67d0fff1.js → 7440.4e80677e4d48bac95cb6.js} +1 -1
  60. d5m_ai/labextension/static/7556.c28352f72f5c6ab4e9e9.js +1 -0
  61. d5m_ai/labextension/static/7665.9b5dec1a38d313e36c39.js +1 -0
  62. d5m_ai/labextension/static/7772.094d82c7ec81259764f4.js +2 -0
  63. d5m_ai/labextension/static/8053.ebcecafa176e4cb5c439.js +2 -0
  64. d5m_ai/labextension/static/{5570.57fe0021e7ca0b4f4348.js → 8263.47d184d4682b2f6564c4.js} +1 -1
  65. d5m_ai/labextension/static/9417.b1bbd219cb5ae78f19f9.js +1 -0
  66. d5m_ai/labextension/static/9517.b2f4fa51abd8b9d6687e.js +1 -0
  67. d5m_ai/labextension/static/9599.456325f0d51fefd16a42.js +1 -0
  68. d5m_ai/labextension/static/9977.17f268665ed85e3ccc62.js +1 -0
  69. d5m_ai/labextension/static/9997.1716894eb29a02d76575.js +1 -0
  70. d5m_ai/labextension/static/remoteEntry.1b8c0969e4ce45535440.js +1 -0
  71. d5m_ai/labextension/static/third-party-licenses.json +96 -0
  72. d5m_ai/ping/ping_handler.py +10 -1
  73. d5m_ai/quick_fix/__init__.py +9 -0
  74. d5m_ai/quick_fix/quick_fix_handler.py +142 -0
  75. d5m_ai/search_replace_handler.py +404 -0
  76. d5m_ai/tools/grep.py +54 -10
  77. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/package.json +7 -2
  78. runcell-0.1.16.data/data/share/jupyter/labextensions/runcell/schemas/runcell/file-browser-toggle.json +22 -0
  79. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/schemas/runcell/package.json.orig +7 -2
  80. runcell-0.1.16.data/data/share/jupyter/labextensions/runcell/static/1105.da3b3cc0801d5b7daf78.js +1 -0
  81. runcell-0.1.16.data/data/share/jupyter/labextensions/runcell/static/1113.a6206c1ce30c44e74d65.js +1 -0
  82. runcell-0.1.16.data/data/share/jupyter/labextensions/runcell/static/1424.7330f97f81a7cbac0293.js +1 -0
  83. runcell-0.1.16.data/data/share/jupyter/labextensions/runcell/static/1482.5594d3330698044d51b6.js +1 -0
  84. runcell-0.1.16.data/data/share/jupyter/labextensions/runcell/static/1681.b7dbfbfc8e8bb443b01d.js +1 -0
  85. runcell-0.1.16.data/data/share/jupyter/labextensions/runcell/static/1741.0e30660c73a4aa6109e0.js +1 -0
  86. runcell-0.1.16.data/data/share/jupyter/labextensions/runcell/static/1980.a1d8fd213c03964ca2dd.js +1 -0
  87. runcell-0.1.16.data/data/share/jupyter/labextensions/runcell/static/2313.e3756d51e535b61cbc41.js +1 -0
  88. runcell-0.1.16.data/data/share/jupyter/labextensions/runcell/static/2331.f0e4d66886493b7ff0f6.js +48 -0
  89. runcell-0.1.15a10.data/data/share/jupyter/labextensions/runcell/static/4734.4e6afd0c5fd50926f67c.js → runcell-0.1.16.data/data/share/jupyter/labextensions/runcell/static/2353.7b6b36b3164a86427209.js +1 -1
  90. runcell-0.1.16.data/data/share/jupyter/labextensions/runcell/static/239.17dc9f15aff0e2c966f0.js +1 -0
  91. runcell-0.1.16.data/data/share/jupyter/labextensions/runcell/static/2443.590c85be4982d61f9378.js +1 -0
  92. runcell-0.1.16.data/data/share/jupyter/labextensions/runcell/static/2490.742d719657af69afad3e.js +1 -0
  93. runcell-0.1.16.data/data/share/jupyter/labextensions/runcell/static/2636.c45f9685b0508a44882a.js +1 -0
  94. runcell-0.1.16.data/data/share/jupyter/labextensions/runcell/static/2726.e9c471b4ad7fed0d085b.js +1 -0
  95. runcell-0.1.16.data/data/share/jupyter/labextensions/runcell/static/2783.e11cc76ea288d3c135d0.js +1 -0
  96. runcell-0.1.16.data/data/share/jupyter/labextensions/runcell/static/2922.8cdf00bb7d09c5419d78.js +2 -0
  97. runcell-0.1.16.data/data/share/jupyter/labextensions/runcell/static/2951.ef10b72fe6b301f68146.js +1 -0
  98. runcell-0.1.16.data/data/share/jupyter/labextensions/runcell/static/2958.38f8dc8fc705367ecec4.js +1 -0
  99. runcell-0.1.15a10.data/data/share/jupyter/labextensions/runcell/static/5408.f0ba6921f1e4477b4a96.js → runcell-0.1.16.data/data/share/jupyter/labextensions/runcell/static/3027.2226147340da305061f3.js +1 -1
  100. runcell-0.1.16.data/data/share/jupyter/labextensions/runcell/static/3033.98d8aa6a2f13a942b945.js +1 -0
  101. runcell-0.1.16.data/data/share/jupyter/labextensions/runcell/static/3131.5b8a2d5bc188f95b8229.js +1 -0
  102. runcell-0.1.15a10.data/data/share/jupyter/labextensions/runcell/static/3246.aa2cfa5fa8d2402d7cdf.js → runcell-0.1.16.data/data/share/jupyter/labextensions/runcell/static/3340.6609b3985073e002c83d.js +2 -2
  103. runcell-0.1.15a10.data/data/share/jupyter/labextensions/runcell/static/415.c2838574e93d05eb13ea.js → runcell-0.1.16.data/data/share/jupyter/labextensions/runcell/static/415.0a1fdc1d9f76c0431d42.js +1 -1
  104. runcell-0.1.16.data/data/share/jupyter/labextensions/runcell/static/4175.550a71c6766138e5a6ee.js +1 -0
  105. d5m_ai/labextension/static/4296.22c023f73b9ef8838492.js → runcell-0.1.16.data/data/share/jupyter/labextensions/runcell/static/4296.7f1db6691a4ac120a383.js +1 -1
  106. runcell-0.1.16.data/data/share/jupyter/labextensions/runcell/static/434.bfe4f51db2eb9644fbe7.js +2 -0
  107. runcell-0.1.16.data/data/share/jupyter/labextensions/runcell/static/4412.23a8cb5fb7377d3c81ab.js.LICENSE.txt +9 -0
  108. runcell-0.1.16.data/data/share/jupyter/labextensions/runcell/static/4497.5c0323113f039c9558b6.js +1 -0
  109. runcell-0.1.16.data/data/share/jupyter/labextensions/runcell/static/4664.73a65498a9c43ddcf17e.js +1 -0
  110. runcell-0.1.16.data/data/share/jupyter/labextensions/runcell/static/4704.10a6eacaafe29bf2c42a.js +1 -0
  111. runcell-0.1.16.data/data/share/jupyter/labextensions/runcell/static/5112.5f1cd8ee9c2297a251f7.js +1 -0
  112. runcell-0.1.16.data/data/share/jupyter/labextensions/runcell/static/5228.05d972957a2421ec1ce0.js +1 -0
  113. runcell-0.1.16.data/data/share/jupyter/labextensions/runcell/static/5264.37c842e2843ca2bf4298.js +1 -0
  114. runcell-0.1.16.data/data/share/jupyter/labextensions/runcell/static/539.7b5e45294371c047b74e.js +1 -0
  115. runcell-0.1.16.data/data/share/jupyter/labextensions/runcell/static/5391.375b4314cb4b851f0915.js +2 -0
  116. runcell-0.1.16.data/data/share/jupyter/labextensions/runcell/static/5391.375b4314cb4b851f0915.js.LICENSE.txt +9 -0
  117. runcell-0.1.16.data/data/share/jupyter/labextensions/runcell/static/5408.07fc40e33d3fd1a3f7b6.js +1 -0
  118. runcell-0.1.16.data/data/share/jupyter/labextensions/runcell/static/5455.c1d01203e7e387437b83.js +1 -0
  119. runcell-0.1.16.data/data/share/jupyter/labextensions/runcell/static/559.a4c3a83a74025324f179.js +1 -0
  120. runcell-0.1.16.data/data/share/jupyter/labextensions/runcell/static/5973.4e08bf1ee13205326051.js.LICENSE.txt +9 -0
  121. runcell-0.1.16.data/data/share/jupyter/labextensions/runcell/static/6131.0393c6487450018afcae.js +1 -0
  122. runcell-0.1.16.data/data/share/jupyter/labextensions/runcell/static/6354.0025efd7872b7d32b46b.js +2 -0
  123. runcell-0.1.16.data/data/share/jupyter/labextensions/runcell/static/6354.0025efd7872b7d32b46b.js.LICENSE.txt +9 -0
  124. d5m_ai/labextension/static/1477.710069d762ddef3ca754.js → runcell-0.1.16.data/data/share/jupyter/labextensions/runcell/static/6494.da246ca8363db0bb8bfc.js +1 -1
  125. runcell-0.1.15a10.data/data/share/jupyter/labextensions/runcell/static/4175.d23c246efa6921b45150.js → runcell-0.1.16.data/data/share/jupyter/labextensions/runcell/static/6556.7a46eed7932ddfc9e659.js +1 -1
  126. runcell-0.1.16.data/data/share/jupyter/labextensions/runcell/static/6633.6708bbc3c085110097da.js +1 -0
  127. runcell-0.1.16.data/data/share/jupyter/labextensions/runcell/static/6820.b3aba76c0f17b2560849.js +1 -0
  128. runcell-0.1.15a10.data/data/share/jupyter/labextensions/runcell/static/4328.c50ba81ca9bf67d0fff1.js → runcell-0.1.16.data/data/share/jupyter/labextensions/runcell/static/7440.4e80677e4d48bac95cb6.js +1 -1
  129. runcell-0.1.16.data/data/share/jupyter/labextensions/runcell/static/7556.c28352f72f5c6ab4e9e9.js +1 -0
  130. runcell-0.1.16.data/data/share/jupyter/labextensions/runcell/static/7665.9b5dec1a38d313e36c39.js +1 -0
  131. runcell-0.1.16.data/data/share/jupyter/labextensions/runcell/static/7772.094d82c7ec81259764f4.js +2 -0
  132. runcell-0.1.16.data/data/share/jupyter/labextensions/runcell/static/7772.094d82c7ec81259764f4.js.LICENSE.txt +9 -0
  133. runcell-0.1.16.data/data/share/jupyter/labextensions/runcell/static/8053.ebcecafa176e4cb5c439.js +2 -0
  134. runcell-0.1.15a10.data/data/share/jupyter/labextensions/runcell/static/5570.57fe0021e7ca0b4f4348.js → runcell-0.1.16.data/data/share/jupyter/labextensions/runcell/static/8263.47d184d4682b2f6564c4.js +1 -1
  135. runcell-0.1.16.data/data/share/jupyter/labextensions/runcell/static/8354.3044135d1229985d61c6.js.LICENSE.txt +9 -0
  136. runcell-0.1.16.data/data/share/jupyter/labextensions/runcell/static/9417.b1bbd219cb5ae78f19f9.js +1 -0
  137. runcell-0.1.16.data/data/share/jupyter/labextensions/runcell/static/9517.b2f4fa51abd8b9d6687e.js +1 -0
  138. runcell-0.1.16.data/data/share/jupyter/labextensions/runcell/static/9599.456325f0d51fefd16a42.js +1 -0
  139. runcell-0.1.16.data/data/share/jupyter/labextensions/runcell/static/9977.17f268665ed85e3ccc62.js +1 -0
  140. runcell-0.1.16.data/data/share/jupyter/labextensions/runcell/static/9997.1716894eb29a02d76575.js +1 -0
  141. runcell-0.1.16.data/data/share/jupyter/labextensions/runcell/static/remoteEntry.1b8c0969e4ce45535440.js +1 -0
  142. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/third-party-licenses.json +96 -0
  143. {runcell-0.1.15a10.dist-info → runcell-0.1.16.dist-info}/METADATA +1 -1
  144. runcell-0.1.16.dist-info/RECORD +840 -0
  145. d5m_ai/labextension/static/111.911e778bfff66b6edf5e.js +0 -1
  146. d5m_ai/labextension/static/1161.8d253f35262e756fd46a.js +0 -1
  147. d5m_ai/labextension/static/1402.a0e3b3c012e73f6a5362.js +0 -1
  148. d5m_ai/labextension/static/1544.63647539bd593f50adf1.js +0 -1
  149. d5m_ai/labextension/static/1877.041c966f3ba0df81d5b8.js +0 -1
  150. d5m_ai/labextension/static/1960.914b9e221586e3dedc59.js +0 -1
  151. d5m_ai/labextension/static/2331.00b3689d320a2f2bdfa4.js +0 -48
  152. d5m_ai/labextension/static/2353.d3aed951ac4803f9d6d2.js +0 -1
  153. d5m_ai/labextension/static/2460.bf102b98f56e88aebceb.js +0 -1
  154. d5m_ai/labextension/static/2498.d143bb29ab92e12f4e37.js +0 -1
  155. d5m_ai/labextension/static/2517.46e5c27d44c4bfd9a568.js +0 -1
  156. d5m_ai/labextension/static/2636.ec58d1feba0ff4fbc92d.js +0 -1
  157. d5m_ai/labextension/static/2690.b6d2023c4d97720d9a97.js +0 -1
  158. d5m_ai/labextension/static/2711.3b98e2cbf471f244fc06.js +0 -1
  159. d5m_ai/labextension/static/2868.7eab7f242aa920c61cba.js +0 -1
  160. d5m_ai/labextension/static/3318.37ab6bc0a3c1b95b49b9.js +0 -1
  161. d5m_ai/labextension/static/3564.53d37f4f2dee00141a5d.js +0 -1
  162. d5m_ai/labextension/static/3793.d20ed278ab88aa2cec25.js +0 -1
  163. d5m_ai/labextension/static/3799.714d7319723cee44b83b.js +0 -1
  164. d5m_ai/labextension/static/3914.6c47919debdfd8fa81e2.js +0 -1
  165. d5m_ai/labextension/static/3973.23478d0ffd48740c4ae3.js +0 -1
  166. d5m_ai/labextension/static/4.80abd6b9b8e5f2be85f1.js +0 -1
  167. d5m_ai/labextension/static/4251.f9f6dbd8634150bdddcf.js +0 -1
  168. d5m_ai/labextension/static/434.70808d0ec3c658d2b92d.js +0 -2
  169. d5m_ai/labextension/static/460.f12a395b90fcc7e71ee6.js +0 -1
  170. d5m_ai/labextension/static/4786.b9ded45759224359e493.js +0 -1
  171. d5m_ai/labextension/static/4856.21de771d6841de1cd9a8.js +0 -1
  172. d5m_ai/labextension/static/5097.897ce0d45020c2251c3f.js +0 -1
  173. d5m_ai/labextension/static/5244.309822e0f470ef7545dd.js +0 -2
  174. d5m_ai/labextension/static/5409.6449d76b8cfdaafd9907.js +0 -1
  175. d5m_ai/labextension/static/5739.df1aea3019fae9aa1c68.js +0 -1
  176. d5m_ai/labextension/static/5754.5eccecedb66c9aeb5ee8.js +0 -1
  177. d5m_ai/labextension/static/5763.dca9d855a6b45fd3f23e.js +0 -1
  178. d5m_ai/labextension/static/6089.109731a48a9dac466095.js +0 -1
  179. d5m_ai/labextension/static/6190.3ebc92f8b76d7c97c9d2.js +0 -1
  180. d5m_ai/labextension/static/620.e56412fe3a5e5e2fe2fa.js +0 -1
  181. d5m_ai/labextension/static/8053.cbb88a6e4c3f6b0fae8b.js +0 -2
  182. d5m_ai/labextension/static/8221.81d1cabd617e083b8b0b.js +0 -1
  183. d5m_ai/labextension/static/8659.76f388593c73460e6c1e.js +0 -1
  184. d5m_ai/labextension/static/8857.15291fad6383004d865a.js +0 -1
  185. d5m_ai/labextension/static/8867.81c22f89f28a7dc63104.js +0 -1
  186. d5m_ai/labextension/static/9997.bc013b353c8eda57ad1c.js +0 -1
  187. d5m_ai/labextension/static/remoteEntry.12ee5dd3b1b20bd0aefd.js +0 -1
  188. runcell-0.1.15a10.data/data/share/jupyter/labextensions/runcell/static/111.911e778bfff66b6edf5e.js +0 -1
  189. runcell-0.1.15a10.data/data/share/jupyter/labextensions/runcell/static/1161.8d253f35262e756fd46a.js +0 -1
  190. runcell-0.1.15a10.data/data/share/jupyter/labextensions/runcell/static/1402.a0e3b3c012e73f6a5362.js +0 -1
  191. runcell-0.1.15a10.data/data/share/jupyter/labextensions/runcell/static/1544.63647539bd593f50adf1.js +0 -1
  192. runcell-0.1.15a10.data/data/share/jupyter/labextensions/runcell/static/1877.041c966f3ba0df81d5b8.js +0 -1
  193. runcell-0.1.15a10.data/data/share/jupyter/labextensions/runcell/static/1960.914b9e221586e3dedc59.js +0 -1
  194. runcell-0.1.15a10.data/data/share/jupyter/labextensions/runcell/static/2331.00b3689d320a2f2bdfa4.js +0 -48
  195. runcell-0.1.15a10.data/data/share/jupyter/labextensions/runcell/static/2353.d3aed951ac4803f9d6d2.js +0 -1
  196. runcell-0.1.15a10.data/data/share/jupyter/labextensions/runcell/static/2460.bf102b98f56e88aebceb.js +0 -1
  197. runcell-0.1.15a10.data/data/share/jupyter/labextensions/runcell/static/2498.d143bb29ab92e12f4e37.js +0 -1
  198. runcell-0.1.15a10.data/data/share/jupyter/labextensions/runcell/static/2517.46e5c27d44c4bfd9a568.js +0 -1
  199. runcell-0.1.15a10.data/data/share/jupyter/labextensions/runcell/static/2636.ec58d1feba0ff4fbc92d.js +0 -1
  200. runcell-0.1.15a10.data/data/share/jupyter/labextensions/runcell/static/2690.b6d2023c4d97720d9a97.js +0 -1
  201. runcell-0.1.15a10.data/data/share/jupyter/labextensions/runcell/static/2711.3b98e2cbf471f244fc06.js +0 -1
  202. runcell-0.1.15a10.data/data/share/jupyter/labextensions/runcell/static/2868.7eab7f242aa920c61cba.js +0 -1
  203. runcell-0.1.15a10.data/data/share/jupyter/labextensions/runcell/static/3318.37ab6bc0a3c1b95b49b9.js +0 -1
  204. runcell-0.1.15a10.data/data/share/jupyter/labextensions/runcell/static/3564.53d37f4f2dee00141a5d.js +0 -1
  205. runcell-0.1.15a10.data/data/share/jupyter/labextensions/runcell/static/3793.d20ed278ab88aa2cec25.js +0 -1
  206. runcell-0.1.15a10.data/data/share/jupyter/labextensions/runcell/static/3799.714d7319723cee44b83b.js +0 -1
  207. runcell-0.1.15a10.data/data/share/jupyter/labextensions/runcell/static/3914.6c47919debdfd8fa81e2.js +0 -1
  208. runcell-0.1.15a10.data/data/share/jupyter/labextensions/runcell/static/3973.23478d0ffd48740c4ae3.js +0 -1
  209. runcell-0.1.15a10.data/data/share/jupyter/labextensions/runcell/static/4.80abd6b9b8e5f2be85f1.js +0 -1
  210. runcell-0.1.15a10.data/data/share/jupyter/labextensions/runcell/static/4251.f9f6dbd8634150bdddcf.js +0 -1
  211. runcell-0.1.15a10.data/data/share/jupyter/labextensions/runcell/static/434.70808d0ec3c658d2b92d.js +0 -2
  212. runcell-0.1.15a10.data/data/share/jupyter/labextensions/runcell/static/460.f12a395b90fcc7e71ee6.js +0 -1
  213. runcell-0.1.15a10.data/data/share/jupyter/labextensions/runcell/static/4786.b9ded45759224359e493.js +0 -1
  214. runcell-0.1.15a10.data/data/share/jupyter/labextensions/runcell/static/4856.21de771d6841de1cd9a8.js +0 -1
  215. runcell-0.1.15a10.data/data/share/jupyter/labextensions/runcell/static/5097.897ce0d45020c2251c3f.js +0 -1
  216. runcell-0.1.15a10.data/data/share/jupyter/labextensions/runcell/static/5244.309822e0f470ef7545dd.js +0 -2
  217. runcell-0.1.15a10.data/data/share/jupyter/labextensions/runcell/static/5409.6449d76b8cfdaafd9907.js +0 -1
  218. runcell-0.1.15a10.data/data/share/jupyter/labextensions/runcell/static/5739.df1aea3019fae9aa1c68.js +0 -1
  219. runcell-0.1.15a10.data/data/share/jupyter/labextensions/runcell/static/5754.5eccecedb66c9aeb5ee8.js +0 -1
  220. runcell-0.1.15a10.data/data/share/jupyter/labextensions/runcell/static/5763.dca9d855a6b45fd3f23e.js +0 -1
  221. runcell-0.1.15a10.data/data/share/jupyter/labextensions/runcell/static/6089.109731a48a9dac466095.js +0 -1
  222. runcell-0.1.15a10.data/data/share/jupyter/labextensions/runcell/static/6190.3ebc92f8b76d7c97c9d2.js +0 -1
  223. runcell-0.1.15a10.data/data/share/jupyter/labextensions/runcell/static/620.e56412fe3a5e5e2fe2fa.js +0 -1
  224. runcell-0.1.15a10.data/data/share/jupyter/labextensions/runcell/static/8053.cbb88a6e4c3f6b0fae8b.js +0 -2
  225. runcell-0.1.15a10.data/data/share/jupyter/labextensions/runcell/static/8221.81d1cabd617e083b8b0b.js +0 -1
  226. runcell-0.1.15a10.data/data/share/jupyter/labextensions/runcell/static/8659.76f388593c73460e6c1e.js +0 -1
  227. runcell-0.1.15a10.data/data/share/jupyter/labextensions/runcell/static/8857.15291fad6383004d865a.js +0 -1
  228. runcell-0.1.15a10.data/data/share/jupyter/labextensions/runcell/static/8867.81c22f89f28a7dc63104.js +0 -1
  229. runcell-0.1.15a10.data/data/share/jupyter/labextensions/runcell/static/9997.bc013b353c8eda57ad1c.js +0 -1
  230. runcell-0.1.15a10.data/data/share/jupyter/labextensions/runcell/static/remoteEntry.12ee5dd3b1b20bd0aefd.js +0 -1
  231. runcell-0.1.15a10.dist-info/RECORD +0 -817
  232. /d5m_ai/labextension/static/{2331.00b3689d320a2f2bdfa4.js.LICENSE.txt → 2331.f0e4d66886493b7ff0f6.js.LICENSE.txt} +0 -0
  233. /d5m_ai/labextension/static/{5244.309822e0f470ef7545dd.js.LICENSE.txt → 2922.8cdf00bb7d09c5419d78.js.LICENSE.txt} +0 -0
  234. /d5m_ai/labextension/static/{3246.aa2cfa5fa8d2402d7cdf.js.LICENSE.txt → 3340.6609b3985073e002c83d.js.LICENSE.txt} +0 -0
  235. /d5m_ai/labextension/static/{434.70808d0ec3c658d2b92d.js.LICENSE.txt → 434.bfe4f51db2eb9644fbe7.js.LICENSE.txt} +0 -0
  236. /runcell-0.1.15a10.data/data/share/jupyter/labextensions/runcell/static/2031.155ab0916a863c8787a7.js.LICENSE.txt → /d5m_ai/labextension/static/5391.375b4314cb4b851f0915.js.LICENSE.txt +0 -0
  237. /runcell-0.1.15a10.data/data/share/jupyter/labextensions/runcell/static/4412.23a8cb5fb7377d3c81ab.js.LICENSE.txt → /d5m_ai/labextension/static/6354.0025efd7872b7d32b46b.js.LICENSE.txt +0 -0
  238. /runcell-0.1.15a10.data/data/share/jupyter/labextensions/runcell/static/5244.309822e0f470ef7545dd.js.LICENSE.txt → /d5m_ai/labextension/static/7772.094d82c7ec81259764f4.js.LICENSE.txt +0 -0
  239. /d5m_ai/labextension/static/{8053.cbb88a6e4c3f6b0fae8b.js.LICENSE.txt → 8053.ebcecafa176e4cb5c439.js.LICENSE.txt} +0 -0
  240. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/etc/jupyter/jupyter_server_config.d/d5m_ai.json +0 -0
  241. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/etc/jupyter/jupyter_server_config.d/runcell.json +0 -0
  242. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/install.json +0 -0
  243. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/schemas/runcell/plugin.json +0 -0
  244. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/1045.a76db59a7c20953976f0.js +0 -0
  245. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/1055.87aafb19805530488a2c.js +0 -0
  246. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/108.d7dbe40ec7e0ae1a68f8.js +0 -0
  247. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/1104.a2b939bacec5e69efd99.js +0 -0
  248. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/1171.130d3cc54764cac92856.js +0 -0
  249. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/1178.3e25fad4a45450e227c9.js +0 -0
  250. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/1203.5deaeee9e57ffc718f19.js +0 -0
  251. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/1226.ff48aa5741f77eb739fe.js +0 -0
  252. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/1273.4c5992b03f129c9e3025.js +0 -0
  253. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/1285.cf3bab9529c47ac9288d.js +0 -0
  254. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/1307.d98ceb66a2401e5f4ddd.js +0 -0
  255. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/1328.38964f7daa84901e866f.js +0 -0
  256. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/1377.edf5c2163aedef75c6a1.js +0 -0
  257. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/1391.ab61eb03aed289d9d44c.js +0 -0
  258. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/1431.a691b4fa7cf229072fc0.js +0 -0
  259. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/1521.9f3807c4a4dd19a6ab8c.js +0 -0
  260. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/1524.188ff9d525210d499ff3.js +0 -0
  261. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/1534.39ba9b2bf5712b697b63.js +0 -0
  262. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/1540.9eba7e882fd8e00a782a.js +0 -0
  263. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/1552.5203480dcdda6574ef51.js +0 -0
  264. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/1555.686745d50bd19fd9d271.js +0 -0
  265. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/1618.9abd2093263741894755.js +0 -0
  266. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/1635.84bd383b17e41c9fe103.js +0 -0
  267. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/1678.57b141401f73a26257c8.js +0 -0
  268. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/1685.842997eb9757846fe690.js +0 -0
  269. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/1745.e6bb2c6882da5bf9883a.js +0 -0
  270. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/1752.8c4ecff560428215fe75.js +0 -0
  271. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/1797.f8ca14c3ec1c0f51f403.js +0 -0
  272. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/1897.7cca7a664a9ca9b486ac.js +0 -0
  273. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/1902.364fa5e977055fe14150.js +0 -0
  274. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/1915.b55b7d52608421a7fc41.js +0 -0
  275. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/1970.dff4fcccbb6cadb04d0c.js +0 -0
  276. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/200.f1d30c245c18bbb03312.js +0 -0
  277. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/2031.155ab0916a863c8787a7.js +0 -0
  278. /runcell-0.1.15a10.data/data/share/jupyter/labextensions/runcell/static/5973.4e08bf1ee13205326051.js.LICENSE.txt → /runcell-0.1.16.data/data/share/jupyter/labextensions/runcell/static/2031.155ab0916a863c8787a7.js.LICENSE.txt +0 -0
  279. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/207.f5bd6d1b383a6b01ca69.js +0 -0
  280. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/2072.a4d04cc98bb118e689a1.js +0 -0
  281. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/2075.5d6a026d7308b71b70a1.js +0 -0
  282. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/2111.a3c1f620c0a31e54cb9f.js +0 -0
  283. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/2152.4db0fcf1f4dccf54b600.js +0 -0
  284. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/2173.9fddf72b827a6d629bad.js +0 -0
  285. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/2198.e195afcaabb2e4063da9.js +0 -0
  286. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/2224.c86b12cf9e2165904033.js +0 -0
  287. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/2225.8d31eec53891ca7775b7.js +0 -0
  288. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/2271.69d9ea25d4ddd02710f6.js +0 -0
  289. /runcell-0.1.15a10.data/data/share/jupyter/labextensions/runcell/static/2331.00b3689d320a2f2bdfa4.js.LICENSE.txt → /runcell-0.1.16.data/data/share/jupyter/labextensions/runcell/static/2331.f0e4d66886493b7ff0f6.js.LICENSE.txt +0 -0
  290. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/2349.e7c5b5e507c7a81d1427.js +0 -0
  291. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/2382.9e67478cc4b31aede22c.js +0 -0
  292. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/2385.cd85a7dd4acb5be739da.js +0 -0
  293. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/248.693fd98760ec6ce42219.js +0 -0
  294. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/2555.7168a2616a6071addb97.js +0 -0
  295. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/2576.56496d8cba50d3d69eb5.js +0 -0
  296. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/2639.eb2553a7be688366d9f3.js +0 -0
  297. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/2654.2453f6b5846a4719dba4.js +0 -0
  298. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/267.829ce2ca38940b778c91.js +0 -0
  299. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/270.9409a2f5631a31c79cd9.js +0 -0
  300. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/2768.9e5b7c6ed84b2486f835.js +0 -0
  301. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/2789.12830cdb21c09111668d.js +0 -0
  302. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/2824.d02df014c07b7288e78c.js +0 -0
  303. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/2824.d02df014c07b7288e78c.js.LICENSE.txt +0 -0
  304. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/2838.2e689afee276e5e21c57.js +0 -0
  305. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/2843.65aeb8be3744d20229b8.js +0 -0
  306. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/2897.7bc91ca284ea12b863e8.js +0 -0
  307. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/2905.0d34ef7a481f9a968f05.js +0 -0
  308. /runcell-0.1.15a10.data/data/share/jupyter/labextensions/runcell/static/8354.3044135d1229985d61c6.js.LICENSE.txt → /runcell-0.1.16.data/data/share/jupyter/labextensions/runcell/static/2922.8cdf00bb7d09c5419d78.js.LICENSE.txt +0 -0
  309. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/2971.60c60668c130ed05d493.js +0 -0
  310. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/299.8600f54b39a11eeff427.js +0 -0
  311. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/3028.953cd3b9865063969086.js +0 -0
  312. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/3041.4059f9ba4f9eba56672a.js +0 -0
  313. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/3045.a457aa1d023ba5f799c2.js +0 -0
  314. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/3092.fad665f8cdb1da61b55b.js +0 -0
  315. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/3142.7df01050c977ede2b13b.js +0 -0
  316. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/3157.bcb9f8ff06fa4af27b6a.js +0 -0
  317. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/3214.a986c1896fa590b2da27.js +0 -0
  318. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/3239.4562297487744a7cc1d4.js +0 -0
  319. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/325.bd1e5cab3b6e068b25bc.js +0 -0
  320. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/3254.9e1aa1fee12644fea2d9.js +0 -0
  321. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/3267.ff884bf47b52ac634854.js +0 -0
  322. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/3291.156ad2d1520857115575.js +0 -0
  323. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/3311.dc97fd544e85acac8477.js +0 -0
  324. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/3319.687f07bb2f993c1dc44b.js +0 -0
  325. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/3325.c100f45711f539a7f262.js +0 -0
  326. /runcell-0.1.15a10.data/data/share/jupyter/labextensions/runcell/static/3246.aa2cfa5fa8d2402d7cdf.js.LICENSE.txt → /runcell-0.1.16.data/data/share/jupyter/labextensions/runcell/static/3340.6609b3985073e002c83d.js.LICENSE.txt +0 -0
  327. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/3386.4c8eebdb8d318c2913ce.js +0 -0
  328. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/3386.4c8eebdb8d318c2913ce.js.LICENSE.txt +0 -0
  329. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/3407.cbbf99a2ff4805726f3e.js +0 -0
  330. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/3424.92b1a820ff2aa6156c36.js +0 -0
  331. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/3426.27afd4c41cfad8e1a63d.js +0 -0
  332. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/3436.ea677bb3e7f3ce87d7fd.js +0 -0
  333. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/3449.5d8818fac081c207ce79.js +0 -0
  334. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/3514.c8a1863df3cfd5390617.js +0 -0
  335. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/355.45290b03d6d4be49a58e.js +0 -0
  336. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/3551.87e6eb270a212d08b1b5.js +0 -0
  337. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/359.1463d2cf955623ecceae.js +0 -0
  338. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/3619.3dfa7c4eaa067a407275.js +0 -0
  339. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/3645.5ea37d9f483120f69f4e.js +0 -0
  340. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/3659.056fa5e4e39b72bc358b.js +0 -0
  341. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/3688.7bd1ba5006b22ed5616e.js +0 -0
  342. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/3722.688cdfd335ffeac13492.js +0 -0
  343. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/3724.06a5a1b542ff978df3b4.js +0 -0
  344. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/376.f9c52e5bbd650da7b67f.js +0 -0
  345. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/3794.c0236d400b2129ac42a9.js +0 -0
  346. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/3930.b142768bad429b3ebb04.js +0 -0
  347. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/4003.95678dd199222938923b.js +0 -0
  348. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/4017.d35a7557e5338be92770.js +0 -0
  349. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/4050.00a6bfc9f23c6ef07199.js +0 -0
  350. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/4087.ea430b62171512019400.js +0 -0
  351. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/410.fd643a255d72a83c1be6.js +0 -0
  352. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/4127.0e783d9a497298e9fe18.js +0 -0
  353. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/4238.bd4642c4f9256441aea5.js +0 -0
  354. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/4246.d8aedd2b15d1a95f1288.js +0 -0
  355. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/4272.c92c9a0d98749863c853.js +0 -0
  356. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/4317.1ba9f3c33b7a1484c5df.js +0 -0
  357. /runcell-0.1.15a10.data/data/share/jupyter/labextensions/runcell/static/434.70808d0ec3c658d2b92d.js.LICENSE.txt → /runcell-0.1.16.data/data/share/jupyter/labextensions/runcell/static/434.bfe4f51db2eb9644fbe7.js.LICENSE.txt +0 -0
  358. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/4353.6a83dae11a48e9d1b345.js +0 -0
  359. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/4358.53a6106c5c93c3fda026.js +0 -0
  360. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/4364.e87c307df69aa50a5b2a.js +0 -0
  361. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/4365.b2b4496cc260301256b9.js +0 -0
  362. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/4371.647bc44642d1ad0e99e4.js +0 -0
  363. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/4390.1cafd3d4635b09e0c945.js +0 -0
  364. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/4412.23a8cb5fb7377d3c81ab.js +0 -0
  365. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/4425.a34c4f44daa5996eeec4.js +0 -0
  366. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/4447.3ad32bafee045d2c0bab.js +0 -0
  367. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/4477.d9e871faf650e6ad238a.js +0 -0
  368. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/45.560ee8b955f55e6a7471.js +0 -0
  369. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/4503.794c4dd58c6bf2e6a66d.js +0 -0
  370. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/4584.c610d4a425b036b86759.js +0 -0
  371. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/4613.05840d3fc617590fff51.js +0 -0
  372. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/4630.a78300f70b9af36897eb.js +0 -0
  373. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/4682.1b69aa450cedd96227c9.js +0 -0
  374. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/4713.4e4e598399fd6de85f5d.js +0 -0
  375. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/4725.5447994a36dfeda58b9f.js +0 -0
  376. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/4755.74d46f71eb4d23e4bca2.js +0 -0
  377. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/4838.688e36ea43737e72dbdc.js +0 -0
  378. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/485.d27de91b0124447cf435.js +0 -0
  379. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/4872.1404f5d25464532c27c2.js +0 -0
  380. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/4886.443bcf6af7b83f72b4b5.js +0 -0
  381. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/4913.d226f3c41ebb36489ce3.js +0 -0
  382. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/492.a7f5e972b35c8c877bf1.js +0 -0
  383. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/4928.5c8ad7f80ba081dfdbba.js +0 -0
  384. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/5146.45d9b015343e5a7cace1.js +0 -0
  385. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/5183.8c5527ebc7a807107471.js +0 -0
  386. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/524.927c6a42244b04ee834f.js +0 -0
  387. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/5253.2cea0b927b50c952fe98.js +0 -0
  388. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/5331.c971f98ac4fd9e9751a4.js +0 -0
  389. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/5431.528d309549815d363599.js +0 -0
  390. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/5447.1267bc4aa4938bd0f08d.js +0 -0
  391. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/5466.e1da4e862af22e314f82.js +0 -0
  392. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/5473.7ac9ad0a3e047bfeceb0.js +0 -0
  393. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/5509.c8c8ddebaabc3579daba.js +0 -0
  394. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/5590.fd188e01caa78afb3ec4.js +0 -0
  395. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/5620.cd3cd230d09209b34fb5.js +0 -0
  396. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/5636.ca803ffcf0d43c2402c9.js +0 -0
  397. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/5672.156ad2d1520857115575.js +0 -0
  398. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/5695.0da6228c48571d9386f3.js +0 -0
  399. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/5715.66ad4e7324b22a5e27fb.js +0 -0
  400. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/5741.edd8fd814866705aad98.js +0 -0
  401. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/5748.53eb48f5623074a948ba.js +0 -0
  402. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/5765.e957d823cdfe2746a356.js +0 -0
  403. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/5788.b9c62804c0698b91ca8a.js +0 -0
  404. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/5882.b40b5d690d3f6f67f09a.js +0 -0
  405. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/5885.8cd4d3e3008fdb31ce2a.js +0 -0
  406. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/5900.6dca06924caef83a5b52.js +0 -0
  407. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/5906.870c0d7bb4e022aaca9d.js +0 -0
  408. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/5908.e81f83f7a9906d9d7542.js +0 -0
  409. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/5973.4e08bf1ee13205326051.js +0 -0
  410. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/5977.d264e9baaebc417e35c0.js +0 -0
  411. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/6007.987a9850d5891b1908ae.js +0 -0
  412. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/6030.dd5fd07844168dbaa6f6.js +0 -0
  413. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/6030.dd5fd07844168dbaa6f6.js.LICENSE.txt +0 -0
  414. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/6079.5c80b9de6aabb0be08d2.js +0 -0
  415. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/6084.bf8d6b1da6c4cad209bb.js +0 -0
  416. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/6094.f96654ca0070f8f391b1.js +0 -0
  417. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/611.5ae7fb260af8629f1528.js +0 -0
  418. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/6176.bd441d4d6fe942889bf3.js +0 -0
  419. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/6221.457e64a4f06be421eaa4.js +0 -0
  420. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/6266.4f2bcc95c2d61cdaacbc.js +0 -0
  421. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/627.84c4aa26f69662abb72d.js +0 -0
  422. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/6293.823b9bfe50fdfd62dd42.js +0 -0
  423. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/6299.b14c1d46ba4ad9799f63.js +0 -0
  424. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/6306.8d22227d6aa1dfc32da5.js +0 -0
  425. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/6320.b844d6686eebcb036643.js +0 -0
  426. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/6322.997db39a5d4b63e72b21.js +0 -0
  427. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/6336.92de365c5fb0f261f799.js +0 -0
  428. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/6366.5049626e7d5bb38a8574.js +0 -0
  429. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/640.ebfad36f1dde45e9cd05.js +0 -0
  430. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/642.817a48a77e1c16e6e65d.js +0 -0
  431. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/6520.ff2a9ec2e50dd45868ac.js +0 -0
  432. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/6573.7899a873adb98c3c0190.js +0 -0
  433. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/6648.b7ed5e9a732275dc85ac.js +0 -0
  434. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/6676.1a71900a6131dbe02aad.js +0 -0
  435. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/6678.fe58c12ce33b0f5706f5.js +0 -0
  436. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/6772.01fcccfcabd525210aee.js +0 -0
  437. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/6774.1e0a751d7079179f8f73.js +0 -0
  438. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/6795.1c49fa950817836e3f1e.js +0 -0
  439. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/6803.eccda2da06d869b0acda.js +0 -0
  440. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/6822.5bf91484ea172f864747.js +0 -0
  441. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/6853.48004207e7c689ec55b4.js +0 -0
  442. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/6880.c3cfce260b3d25d9ef5e.js +0 -0
  443. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/6906.1f65b08daf64af8d1f27.js +0 -0
  444. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/6982.d9f1a29fe7834b53c855.js +0 -0
  445. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/7005.9f8920f4e58652fe3ef9.js +0 -0
  446. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/711.5c259d7417620cf8eef8.js +0 -0
  447. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/7131.cab088ddb371234f1fd6.js +0 -0
  448. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/7161.f03be5c4590ae6db98c1.js +0 -0
  449. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/7166.6e64d20ff3d06bb0726a.js +0 -0
  450. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/7181.1d3f5611193e734beaf4.js +0 -0
  451. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/72.081fe34e2c76320135d0.js +0 -0
  452. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/7232.5969981a73dac6835b93.js +0 -0
  453. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/7273.9e6765278092fd30a14f.js +0 -0
  454. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/7280.5862e5cf2b594fd45f82.js +0 -0
  455. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/7336.b8136533f61cd1b71adc.js +0 -0
  456. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/7359.7bc0ef939742600dba39.js +0 -0
  457. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/7399.6fa42c5d34d3659f9f68.js +0 -0
  458. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/7400.ea48afe8766bd82b3741.js +0 -0
  459. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/7441.bce20fb0ea3d8638bc30.js +0 -0
  460. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/7488.f63b5ad13eb23dbc3915.js +0 -0
  461. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/751.48ddf412afdd781e868f.js +0 -0
  462. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/7572.937d1e5ce68a384389e9.js +0 -0
  463. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/7652.cf086dfcd950ff2c4554.js +0 -0
  464. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/7672.61e8e5299259407f1ee1.js +0 -0
  465. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/7705.962a56002e394e3755aa.js +0 -0
  466. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/7719.9dbadc40622a97c6fa90.js +0 -0
  467. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/7771.efa5c4cf41907b4c8cfc.js +0 -0
  468. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/779.c50f60eeca2b40bf96db.js +0 -0
  469. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/7792.e67368a87fa703a97f25.js +0 -0
  470. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/7812.1b53bb1f6cce555d0b70.js +0 -0
  471. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/7890.c8c8ddebaabc3579daba.js +0 -0
  472. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/7954.b02433d4bd38b648ec0e.js +0 -0
  473. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/7959.75734676fe5e861ad899.js +0 -0
  474. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/7967.ccc236f921abba961fcb.js +0 -0
  475. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/7981.c14b5974541e98a1b340.js +0 -0
  476. /runcell-0.1.15a10.data/data/share/jupyter/labextensions/runcell/static/8053.cbb88a6e4c3f6b0fae8b.js.LICENSE.txt → /runcell-0.1.16.data/data/share/jupyter/labextensions/runcell/static/8053.ebcecafa176e4cb5c439.js.LICENSE.txt +0 -0
  477. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/8056.06f4e4d87d7ccc1e4662.js +0 -0
  478. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/8066.ad6692e614937d4dc480.js +0 -0
  479. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/8122.f671cfb05d97b5e220fa.js +0 -0
  480. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/8146.fc69595fa9fb4dc989ec.js +0 -0
  481. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/8151.e18e503723ffa9d576f7.js +0 -0
  482. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/8177.d8e81718e82279286385.js +0 -0
  483. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/8179.33453f3165561d33347d.js +0 -0
  484. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/8181.0f15741bcd037cfaf528.js +0 -0
  485. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/8249.01410b92489460697717.js +0 -0
  486. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/8295.39003c08c2539bf22593.js +0 -0
  487. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/8304.075c39345f3b817edfb1.js +0 -0
  488. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/8321.3ba6a40e5ed74b977afc.js +0 -0
  489. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/8343.31e93467f566af5fb10e.js +0 -0
  490. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/8354.3044135d1229985d61c6.js +0 -0
  491. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/8366.55b8257f92b23e6f49ec.js +0 -0
  492. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/8369.80293e64ec102044c767.js +0 -0
  493. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/84.3575d43472885d2b7714.js +0 -0
  494. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/8400.7d8ed1bca69c56f67486.js +0 -0
  495. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/8404.1c1c675dc23d7d9d80de.js +0 -0
  496. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/8437.795ac38d87895b50d98e.js +0 -0
  497. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/8480.6698a41d2cf895aafe0f.js +0 -0
  498. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/8482.85d03122dfec6d4f9307.js +0 -0
  499. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/851.9faa523fb28cedcd6b88.js +0 -0
  500. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/8522.dd261948e958bcf4ae64.js +0 -0
  501. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/8524.4c79a5ea5e22a1389a1f.js +0 -0
  502. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/8649.b722755e4bccf4a39cd5.js +0 -0
  503. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/8675.ffadeba0edbfd8d2285d.js +0 -0
  504. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/8748.bb9c4496cf4ab7577e74.js +0 -0
  505. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/8751.e80b9f51b9cdb544d16b.js +0 -0
  506. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/8768.4aba875e6cfb350edfa7.js +0 -0
  507. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/880.0bcd5ab06196cb9533c4.js +0 -0
  508. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/8824.4b08a890046be218bb35.js +0 -0
  509. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/8829.c51ecb2bf77a1ca2a962.js +0 -0
  510. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/8856.6e271445d6d3837302ec.js +0 -0
  511. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/8860.c824d17d8869a6dd6207.js +0 -0
  512. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/8887.6480b4ee0c5fa187c2d7.js +0 -0
  513. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/8929.3329d360058c1764e201.js +0 -0
  514. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/8957.4f33250ba35099dbe048.js +0 -0
  515. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/9014.0e67032c3d7119ce3370.js +0 -0
  516. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/904.60333ec0aebf2d092197.js +0 -0
  517. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/9040.9376593b8e7caa5ed6a0.js +0 -0
  518. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/9055.7b9ab3136d6a82b298a4.js +0 -0
  519. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/9071.d8aea526bf53118639a9.js +0 -0
  520. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/9113.f9e25015d31ee397e490.js +0 -0
  521. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/9115.c30adf6f374eb1bd3b93.js +0 -0
  522. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/9125.26a8a929493c19af9f50.js +0 -0
  523. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/9165.8b0907227f85ba27306b.js +0 -0
  524. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/9180.7d6cded0c9f36ac75093.js +0 -0
  525. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/9184.33de87e8d509010a9bdf.js +0 -0
  526. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/9193.3666b71cf376fdec58b4.js +0 -0
  527. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/9205.a2f5f2a2c0b69582717e.js +0 -0
  528. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/9251.822a5aa9397713d54ea2.js +0 -0
  529. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/9255.ad693b359f0d12767fe1.js +0 -0
  530. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/9262.bebc0ed75d7f86d722f2.js +0 -0
  531. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/9277.f3623a34b457ca052d80.js +0 -0
  532. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/9285.2d3c4984387ebca606d4.js +0 -0
  533. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/9289.9fb56f7beb83d721e654.js +0 -0
  534. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/934.3ce5b696b827323e706e.js +0 -0
  535. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/9402.b8868b6860051723bf48.js +0 -0
  536. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/9404.f6ff67c04b5dfb52e3d9.js +0 -0
  537. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/9412.fe8cf617636a0df90247.js +0 -0
  538. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/9456.2f96fda82d4be6b0448e.js +0 -0
  539. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/9494.b4ae8d6a63ec84cc4ec3.js +0 -0
  540. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/9513.0db046603be52099c3ec.js +0 -0
  541. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/9514.458d7630c50b4b658200.js +0 -0
  542. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/9559.07e6563cb0b401ff88a6.js +0 -0
  543. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/9576.b2d6c2e9831fda63f41f.js +0 -0
  544. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/9607.a4f836281d0337527f6e.js +0 -0
  545. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/9621.55ea68ee13d702908a10.js +0 -0
  546. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/9640.c489050f3a1342328779.js +0 -0
  547. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/9650.b4d4a115ac2fca1dfbe8.js +0 -0
  548. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/9704.f4c6d15183531d37b825.js +0 -0
  549. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/9734.63cf17414a5103d290bb.js +0 -0
  550. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/9754.2f617d267f5167be63ed.js +0 -0
  551. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/9885.f84ed1b0565de3b61e99.js +0 -0
  552. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/9912.b6643895a628f9ea506c.js +0 -0
  553. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/9926.6e52dbb62a19476aae87.js +0 -0
  554. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/9939.eab64dfd409dd1df1844.js +0 -0
  555. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/9986.e953beace913bfa7ba74.js +0 -0
  556. {runcell-0.1.15a10.data → runcell-0.1.16.data}/data/share/jupyter/labextensions/runcell/static/style.js +0 -0
  557. {runcell-0.1.15a10.dist-info → runcell-0.1.16.dist-info}/WHEEL +0 -0
  558. {runcell-0.1.15a10.dist-info → runcell-0.1.16.dist-info}/entry_points.txt +0 -0
  559. {runcell-0.1.15a10.dist-info → runcell-0.1.16.dist-info}/licenses/LICENSE +0 -0
d5m_ai/_version.py CHANGED
@@ -1,4 +1,4 @@
1
1
  # This file is auto-generated by Hatchling. As such, do not:
2
2
  # - modify
3
3
  # - track in version control e.g. be sure to add to .gitignore
4
- __version__ = VERSION = '0.1.15a10'
4
+ __version__ = VERSION = '0.1.16'
@@ -13,6 +13,7 @@ The jupyter backend now serves as:
13
13
  import asyncio
14
14
  import json
15
15
  import os
16
+ import re
16
17
  import ssl
17
18
  import uuid
18
19
  import websockets
@@ -76,18 +77,28 @@ class AIJLAgentProxyHandler(WebSocketHandler):
76
77
 
77
78
  def _get_user_token(self) -> Optional[str]:
78
79
  """
79
- Get user token from local file (saved during OAuth flow).
80
+ Get user token from query param (preferred for remote/ephemeral servers) or local file.
80
81
 
81
82
  Returns:
82
83
  User token if found, None otherwise
83
84
  """
84
- # Use existing token handler utility
85
+ token_param = None
86
+ try:
87
+ token_param = self.get_query_argument("token", default=None)
88
+ except Exception:
89
+ token_param = None
90
+
91
+ if token_param and token_param.startswith("eyJ") and token_param.count(".") == 2:
92
+ print("[PROXY] ✅ Found user token in WebSocket query param")
93
+ return token_param
94
+
85
95
  token = get_current_user_token_string()
86
96
  if token:
87
- print(f"[PROXY] ✅ Found user token")
88
- else:
89
- print("[PROXY] ❌ No user token found")
90
- return token
97
+ print("[PROXY] ✅ Found user token in local file")
98
+ return token
99
+
100
+ print("[PROXY] ❌ No user token found")
101
+ return None
91
102
 
92
103
  def _is_remote_connection_closed(self) -> bool:
93
104
  """Check if the remote WebSocket connection is closed."""
@@ -157,7 +168,8 @@ class AIJLAgentProxyHandler(WebSocketHandler):
157
168
  separator = "&" if "?" in connection_url else "?"
158
169
  connection_url = f"{connection_url}{separator}{'&'.join(params)}"
159
170
 
160
- print(f"[PROXY] Remote URL: {connection_url}")
171
+ redacted_url = re.sub(r"(token=)[^&]+", r"\1<redacted>", connection_url)
172
+ print(f"[PROXY] Remote URL: {redacted_url}")
161
173
 
162
174
  # Only create SSL context for wss:// connections
163
175
  ssl_context = None
@@ -40,20 +40,41 @@ class ShellExecutor:
40
40
  'chmod 777', 'chmod -R 777', 'chown -R', 'passwd', 'su -',
41
41
  'sudo su', 'sudo rm', 'sudo chmod', 'sudo chown',
42
42
  'nc ', 'netcat',
43
- 'python -c', 'python3 -c', 'eval', 'exec', 'import os'
43
+ 'python -c', 'python3 -c', 'eval', 'exec', 'import os',
44
+ # Package managers / networked operations (require explicit permission)
45
+ 'pip install', 'pip uninstall', 'pip download',
46
+ 'conda install', 'conda update', 'conda remove',
47
+ 'npm install', 'npm i', 'npm add',
48
+ 'yarn add', 'yarn install',
49
+ 'pnpm add', 'pnpm install',
50
+ # Git operations that modify state or reach network (require permission)
51
+ 'git checkout', 'git switch', 'git reset', 'git clean',
52
+ 'git pull', 'git push', 'git fetch',
44
53
  ]
45
54
 
46
55
  # Safe commands that are allowed without permission.
47
56
  SAFE_COMMANDS = [
48
57
  'ls', 'dir', 'pwd', 'whoami', 'id', 'date', 'uptime', 'uname',
58
+ 'hostname', 'sw_vers',
49
59
  'df', 'du', 'free', 'ps', 'top', 'htop', 'which', 'where',
50
60
  'cat', 'head', 'tail', 'wc', 'grep', 'find', 'locate',
51
61
  'echo', 'env', 'printenv', 'history', 'file', 'stat',
52
- 'mount', 'lsblk', 'lscpu', 'lsmem', 'lsusb', 'lspci',
62
+ 'tree', 'jq',
63
+ 'lsblk', 'lscpu', 'lsmem', 'lsusb', 'lspci',
53
64
  'ifconfig', 'ip', 'netstat', 'ss', 'ping', 'traceroute',
54
- 'git status', 'git log', 'git branch', 'git diff',
55
- 'npm list', 'pip list', 'pip show', 'conda list',
56
- 'docker ps', 'docker images', 'kubectl get', 'pip', 'pip install', 'streamlit', 'streamlit run', 'chmod'
65
+ # Git (read-only)
66
+ 'git status', 'git log', 'git branch', 'git diff', 'git show', 'git rev-parse', 'git --version',
67
+ # Node/Python package tools (read-only)
68
+ 'npm list', 'npm ls', 'npm --version', 'npm -v',
69
+ 'pip list', 'pip show', 'pip check', 'pip --version', 'pip -v', 'pip -V',
70
+ 'conda list', 'conda info', 'conda --version',
71
+ # Container / cluster inspection (read-only)
72
+ 'docker ps', 'docker images', 'docker --version', 'docker version',
73
+ 'kubectl get', 'kubectl version',
74
+ # Jupyter tooling (explicitly allow nbconvert and kernelspec listing)
75
+ 'jupyter --version', 'jupyter nbconvert', 'jupyter kernelspec',
76
+ # Convenience built-ins (cd is handled specially, but we still allow it)
77
+ 'cd',
57
78
  ]
58
79
 
59
80
  def __init__(self, permission_handler: PermissionHandler = None):
@@ -64,6 +85,9 @@ class ShellExecutor:
64
85
  permission_handler: Handler for requesting user permissions for dangerous commands.
65
86
  """
66
87
  self.permission_handler = permission_handler
88
+ # Track working directory across commands. Plain `cd ...` in a subprocess
89
+ # does not persist; we implement `cd` as a built-in in execute_command.
90
+ self.cwd = os.getcwd()
67
91
 
68
92
  def analyze_command_safety(self, command: str) -> Dict[str, Any]:
69
93
  """
@@ -103,8 +127,8 @@ class ShellExecutor:
103
127
 
104
128
  base_command = command_parts[0]
105
129
 
106
- # Allow git, npm, pip, conda, docker, kubectl with subcommands.
107
- if base_command in ['git', 'npm', 'pip', 'conda', 'docker', 'kubectl']:
130
+ # Allow a limited set of subcommands for multi-tool CLIs.
131
+ if base_command in ['git', 'npm', 'pip', 'conda', 'docker', 'kubectl', 'jupyter']:
108
132
  if len(command_parts) < 2:
109
133
  return False
110
134
  full_command = f"{base_command} {command_parts[1]}"
@@ -127,6 +151,24 @@ class ShellExecutor:
127
151
  """
128
152
  # Analyze command safety.
129
153
  safety_analysis = self.analyze_command_safety(command)
154
+
155
+ # Built-in: support `cd` by updating the executor's working directory.
156
+ try:
157
+ parts = shlex.split(command)
158
+ except Exception:
159
+ parts = []
160
+ if parts and parts[0].lower() == "cd":
161
+ if len(parts) == 1:
162
+ target = os.path.expanduser("~")
163
+ else:
164
+ target = os.path.expanduser(parts[1])
165
+ if not os.path.isabs(target):
166
+ target = os.path.join(self.cwd, target)
167
+ target = os.path.realpath(target)
168
+ if not os.path.isdir(target):
169
+ return f"Error: directory does not exist: {target}"
170
+ self.cwd = target
171
+ return f"Changed directory to: {self.cwd}"
130
172
 
131
173
  # Handle dangerous commands.
132
174
  if safety_analysis["is_dangerous"]:
@@ -140,12 +182,20 @@ class ShellExecutor:
140
182
 
141
183
  if not permission_granted:
142
184
  return f"Command execution cancelled by user. Command was: {command}"
143
-
144
- # Handle non-dangerous commands that aren't in safe list.
185
+
186
+ # If not allowlisted, ask for permission (instead of hard-blocking).
145
187
  elif not safety_analysis["is_safe_command"]:
146
- command_parts = shlex.split(command.lower()) if command else []
147
- base_command = command_parts[0] if command_parts else "unknown"
148
- return f"Error: Command '{base_command}' is not in the allowed commands list"
188
+ if not self.permission_handler:
189
+ command_parts = shlex.split(command.lower()) if command else []
190
+ base_command = command_parts[0] if command_parts else "unknown"
191
+ return f"Error: Command '{base_command}' is not in the allowed commands list and no permission handler is available."
192
+
193
+ permission_granted = await self.permission_handler.request_permission(
194
+ command,
195
+ "not_allowlisted",
196
+ )
197
+ if not permission_granted:
198
+ return f"Command execution cancelled by user. Command was: {command}"
149
199
 
150
200
  # Execute the command.
151
201
  return await self._execute_safe_command(command)
@@ -162,7 +212,7 @@ class ShellExecutor:
162
212
  capture_output=True,
163
213
  text=True,
164
214
  timeout=90,
165
- cwd=os.getcwd()
215
+ cwd=self.cwd
166
216
  )
167
217
 
168
218
  # Combine stdout and stderr.
@@ -190,7 +190,7 @@ class AIChatProxyHandler(APIHandler):
190
190
  if not user_token:
191
191
  self.set_status(401)
192
192
  self.finish(json.dumps({
193
- "error": "You're signed out. Please sign in to continue using D5M AI.",
193
+ "error": "Authentication required. You may not be signed in or there may be an issue with your authentication. Please try signing in again.",
194
194
  "status": "auth_required",
195
195
  "debug_info": {
196
196
  "frontend_integration_needed": True,
@@ -65,6 +65,11 @@ class CompletionHandler(APIHandler):
65
65
  mime = body.get('mime', 'text/x-python')
66
66
  path = body.get('path')
67
67
  cell_id = body.get('cell_id')
68
+ mode = body.get('mode')
69
+ region_text = body.get('region_text')
70
+ cursor_offset = body.get('cursor_offset')
71
+ region_start_line = body.get('region_start_line')
72
+ region_start_column = body.get('region_start_column')
68
73
  except KeyError as e:
69
74
  raise HTTPError(400, f"Missing required field: {e}")
70
75
 
@@ -76,7 +81,12 @@ class CompletionHandler(APIHandler):
76
81
  "language": language,
77
82
  "mime": mime,
78
83
  "path": path,
79
- "cell_id": cell_id
84
+ "cell_id": cell_id,
85
+ "mode": mode,
86
+ "region_text": region_text,
87
+ "cursor_offset": cursor_offset,
88
+ "region_start_line": region_start_line,
89
+ "region_start_column": region_start_column
80
90
  }
81
91
 
82
92
  # Forward request to remote server
@@ -7,6 +7,10 @@ import uuid
7
7
 
8
8
  class ShellExecutor:
9
9
  def __init__(self):
10
+ # Track working directory across commands. Note that plain `cd ...` in a
11
+ # subprocess does not persist; we implement `cd` as a built-in below.
12
+ self.cwd = os.getcwd()
13
+
10
14
  self.dangerous_patterns = [
11
15
  'rm -rf', 'rm -r', 'rmdir', 'del', 'format', 'fdisk',
12
16
  'mkfs', 'dd if=', 'dd of=', '> /dev/', 'shutdown', 'reboot',
@@ -14,19 +18,40 @@ class ShellExecutor:
14
18
  'chmod 777', 'chmod -R 777', 'chown -R', 'passwd', 'su -',
15
19
  'sudo su', 'sudo rm', 'sudo chmod', 'sudo chown', '&&', '||',
16
20
  ';', '|', '>', '>>', '<', 'curl', 'wget', 'nc ', 'netcat',
17
- 'python -c', 'python3 -c', 'eval', 'exec', 'import os'
21
+ 'python -c', 'python3 -c', 'eval', 'exec', 'import os',
22
+ # Package managers / networked operations (require explicit permission)
23
+ 'pip install', 'pip uninstall', 'pip download',
24
+ 'conda install', 'conda update', 'conda remove',
25
+ 'npm install', 'npm i', 'npm add',
26
+ 'yarn add', 'yarn install',
27
+ 'pnpm add', 'pnpm install',
28
+ # Git operations that modify state or reach network (require permission)
29
+ 'git checkout', 'git switch', 'git reset', 'git clean',
30
+ 'git pull', 'git push', 'git fetch',
18
31
  ]
19
32
 
20
33
  self.safe_commands = [
21
34
  'ls', 'dir', 'pwd', 'whoami', 'id', 'date', 'uptime', 'uname',
35
+ 'hostname', 'sw_vers',
22
36
  'df', 'du', 'free', 'ps', 'top', 'htop', 'which', 'where',
23
37
  'cat', 'head', 'tail', 'wc', 'grep', 'find', 'locate',
24
38
  'echo', 'env', 'printenv', 'history', 'file', 'stat',
25
- 'mount', 'lsblk', 'lscpu', 'lsmem', 'lsusb', 'lspci',
39
+ 'tree', 'jq',
40
+ 'lsblk', 'lscpu', 'lsmem', 'lsusb', 'lspci',
26
41
  'ifconfig', 'ip', 'netstat', 'ss', 'ping', 'traceroute',
27
- 'git status', 'git log', 'git branch', 'git diff',
28
- 'npm list', 'pip list', 'pip show', 'conda list',
29
- 'docker ps', 'docker images', 'kubectl get', 'pip', 'pip install', 'streamlit', 'streamlit run', 'chmod'
42
+ # Git (read-only)
43
+ 'git status', 'git log', 'git branch', 'git diff', 'git show', 'git rev-parse', 'git --version',
44
+ # Node/Python package tools (read-only)
45
+ 'npm list', 'npm ls', 'npm --version', 'npm -v',
46
+ 'pip list', 'pip show', 'pip check', 'pip --version', 'pip -v', 'pip -V',
47
+ 'conda list', 'conda info', 'conda --version',
48
+ # Container / cluster inspection (read-only)
49
+ 'docker ps', 'docker images', 'docker --version', 'docker version',
50
+ 'kubectl get', 'kubectl version',
51
+ # Jupyter tooling (explicitly allow nbconvert and kernelspec listing)
52
+ 'jupyter --version', 'jupyter nbconvert', 'jupyter kernelspec',
53
+ # Convenience built-ins (cd is handled specially, but we still allow it)
54
+ 'cd',
30
55
  ]
31
56
 
32
57
  def _is_dangerous_command(self, command):
@@ -46,12 +71,13 @@ class ShellExecutor:
46
71
 
47
72
  base_command = command_parts[0]
48
73
 
49
- # Allow git, npm, pip, conda, docker, kubectl with subcommands
50
- if base_command in ['git', 'npm', 'pip', 'conda', 'docker', 'kubectl']:
74
+ # Allow a limited set of subcommands for multi-tool CLIs.
75
+ if base_command in ['git', 'npm', 'pip', 'conda', 'docker', 'kubectl', 'jupyter']:
51
76
  if len(command_parts) < 2:
52
- return False, f"{base_command} requires a subcommand"
77
+ return False, f"{base_command} requires a subcommand or flag"
53
78
  full_command = f"{base_command} {command_parts[1]}"
54
- if full_command not in [cmd for cmd in self.safe_commands if cmd.startswith(base_command)]:
79
+ allowed = {cmd for cmd in self.safe_commands if cmd.startswith(f"{base_command} ")}
80
+ if full_command not in allowed:
55
81
  return False, f"{full_command} is not in the allowed commands list"
56
82
  elif base_command not in [cmd.split()[0] for cmd in self.safe_commands]:
57
83
  return False, f"Command '{base_command}' is not in the allowed commands list"
@@ -95,18 +121,40 @@ class ShellExecutor:
95
121
  """
96
122
  # Safety check - identify potentially dangerous commands
97
123
  is_dangerous, dangerous_pattern = self._is_dangerous_command(command)
98
-
99
- # If dangerous command detected, ask for user confirmation
124
+
125
+ # Built-in: support `cd` by updating the executor's working directory.
126
+ try:
127
+ parts = shlex.split(command)
128
+ except Exception:
129
+ parts = []
130
+ if parts and parts[0].lower() == "cd":
131
+ if len(parts) == 1:
132
+ target = os.path.expanduser("~")
133
+ else:
134
+ target = os.path.expanduser(parts[1])
135
+ if not os.path.isabs(target):
136
+ target = os.path.join(self.cwd, target)
137
+ target = os.path.realpath(target)
138
+ if not os.path.isdir(target):
139
+ return f"Error: directory does not exist: {target}"
140
+ self.cwd = target
141
+ return f"Changed directory to: {self.cwd}"
142
+
143
+ # If dangerous OR not allowlisted, ask for user confirmation.
100
144
  if is_dangerous:
101
145
  permission_granted = await self.request_permission(handler, command, dangerous_pattern)
102
146
  if not permission_granted:
103
147
  return f"Command execution cancelled by user. Command was: {command}"
104
-
105
- # Additional safety: only allow specific safe commands (for non-dangerous commands)
106
- if not is_dangerous:
148
+ else:
107
149
  is_safe, error_msg = self._is_safe_command(command)
108
150
  if not is_safe:
109
- return f"Error: {error_msg}"
151
+ permission_granted = await self.request_permission(
152
+ handler,
153
+ command,
154
+ f"not_allowlisted: {error_msg}",
155
+ )
156
+ if not permission_granted:
157
+ return f"Command execution cancelled by user. Command was: {command}"
110
158
 
111
159
  try:
112
160
  print(f"[SHELL] Executing command: {command}")
@@ -118,7 +166,7 @@ class ShellExecutor:
118
166
  capture_output=True,
119
167
  text=True,
120
168
  timeout=90, # 30 second timeout
121
- cwd=os.getcwd() # Run in current working directory
169
+ cwd=self.cwd # Run in tracked working directory
122
170
  )
123
171
 
124
172
  # Combine stdout and stderr
@@ -0,0 +1,3 @@
1
+ from .empty_display_handler import EmptyDisplayProxyHandler
2
+
3
+ __all__ = ["EmptyDisplayProxyHandler"]
@@ -0,0 +1,137 @@
1
+ """
2
+ Empty display proxy handler.
3
+
4
+ Forwards empty state display requests to the SaaS backend to avoid CORS issues.
5
+ """
6
+
7
+ import asyncio
8
+ import aiohttp
9
+ import certifi
10
+ import json
11
+ import logging
12
+ import os
13
+ import ssl
14
+ from typing import Optional
15
+ from urllib.parse import urlparse
16
+
17
+ from jupyter_server.base.handlers import APIHandler
18
+ from tornado import web
19
+
20
+ from ..auth.token_handler import get_current_user_token_string
21
+
22
+ logging.basicConfig(level=logging.INFO)
23
+
24
+ DEFAULT_SAAS_URL = "https://www.runcell.dev"
25
+ ALLOWED_HOST_SUFFIXES = (".runcell.dev",)
26
+ ALLOWED_HOSTS = {"runcell.dev", "www.runcell.dev", "localhost", "127.0.0.1"}
27
+
28
+
29
+ def _is_allowed_host(hostname: str) -> bool:
30
+ if not hostname:
31
+ return False
32
+ hostname = hostname.lower()
33
+ if hostname in ALLOWED_HOSTS:
34
+ return True
35
+ return any(hostname.endswith(suffix) for suffix in ALLOWED_HOST_SUFFIXES)
36
+
37
+
38
+ class EmptyDisplayProxyHandler(APIHandler):
39
+ """Proxy handler for empty display requests."""
40
+
41
+ def _create_ssl_context(self):
42
+ try:
43
+ certifi_ca_bundle = certifi.where()
44
+ return ssl.create_default_context(cafile=certifi_ca_bundle)
45
+ except Exception as error:
46
+ logging.warning(f"[EMPTY-DISPLAY-PROXY] Failed to use certifi CA bundle: {error}")
47
+ return ssl.create_default_context()
48
+
49
+ def _resolve_saas_url(self, saas_url: Optional[str]) -> str:
50
+ candidate = saas_url or os.environ.get("D5M_SAAS_URL") or DEFAULT_SAAS_URL
51
+ candidate = candidate.strip()
52
+
53
+ parsed = urlparse(candidate)
54
+ if not parsed.scheme or not parsed.netloc:
55
+ raise ValueError("Invalid SaaS URL")
56
+
57
+ if not _is_allowed_host(parsed.hostname or ""):
58
+ raise ValueError("SaaS URL host not allowed")
59
+
60
+ return f"{parsed.scheme}://{parsed.netloc}".rstrip("/")
61
+
62
+ def _extract_token(self) -> Optional[str]:
63
+ local_token = get_current_user_token_string()
64
+ if local_token:
65
+ return local_token
66
+
67
+ auth_header = self.request.headers.get("Authorization", "")
68
+ if auth_header.startswith("Bearer "):
69
+ return auth_header[7:]
70
+
71
+ return None
72
+
73
+ @web.authenticated
74
+ async def post(self):
75
+ try:
76
+ try:
77
+ body = json.loads(self.request.body or b"{}")
78
+ except json.JSONDecodeError:
79
+ self.set_status(400)
80
+ self.finish(json.dumps({"error": "Invalid JSON in request body"}))
81
+ return
82
+
83
+ ping_status = body.get("ping_status") or {}
84
+ payload = {
85
+ "runcell_version": body.get("runcell_version", ""),
86
+ "ping_status": {
87
+ "local": bool(ping_status.get("local")),
88
+ "remote": bool(ping_status.get("remote"))
89
+ }
90
+ }
91
+
92
+ if "logged_in" in body:
93
+ payload["logged_in"] = bool(body.get("logged_in"))
94
+ if "user_id" in body:
95
+ payload["user_id"] = body.get("user_id")
96
+
97
+ try:
98
+ saas_url = self._resolve_saas_url(body.get("saas_url"))
99
+ except ValueError as error:
100
+ self.set_status(400)
101
+ self.finish(json.dumps({"error": str(error)}))
102
+ return
103
+
104
+ user_token = self._extract_token()
105
+ headers = {"Content-Type": "application/json"}
106
+ if user_token:
107
+ headers["Authorization"] = f"Bearer {user_token}"
108
+
109
+ ssl_context = self._create_ssl_context()
110
+ timeout = aiohttp.ClientTimeout(total=10)
111
+
112
+ async with aiohttp.ClientSession(timeout=timeout) as session:
113
+ url = f"{saas_url}/api/plugin-auth/empty_display"
114
+ logging.info(f"[EMPTY-DISPLAY-PROXY] Forwarding request to: {url}")
115
+ async with session.post(url, json=payload, headers=headers, ssl=ssl_context) as response:
116
+ response_text = await response.text()
117
+ if response.status == 200:
118
+ try:
119
+ response_data = json.loads(response_text)
120
+ self.finish(json.dumps(response_data))
121
+ except json.JSONDecodeError:
122
+ logging.error("[EMPTY-DISPLAY-PROXY] Invalid JSON response")
123
+ self.set_status(502)
124
+ self.finish(json.dumps({"error": "Invalid response from server"}))
125
+ else:
126
+ logging.error(f"[EMPTY-DISPLAY-PROXY] Remote error {response.status}: {response_text}")
127
+ self.set_status(response.status)
128
+ self.finish(response_text)
129
+
130
+ except asyncio.TimeoutError:
131
+ logging.error("[EMPTY-DISPLAY-PROXY] Request timeout")
132
+ self.set_status(408)
133
+ self.finish(json.dumps({"error": "Request timeout"}))
134
+ except Exception as error:
135
+ logging.error(f"[EMPTY-DISPLAY-PROXY] Unexpected error: {error}")
136
+ self.set_status(500)
137
+ self.finish(json.dumps({"error": f"Internal server error: {error}"}))
d5m_ai/extension.py CHANGED
@@ -13,8 +13,10 @@ from .sandbox.shell_exec import ShellExecHandler
13
13
  from .chat.code_apply import CodeApplyHandler
14
14
  from .mention.mention_file_handler import MentionFileHandler
15
15
  from .auth.token_handler import TokenHandler
16
- from .ping.ping_handler import PingProxyHandler
16
+ from .ping.ping_handler import PingProxyHandler, PingLocalHandler
17
+ from .empty_display import EmptyDisplayProxyHandler
17
18
  from .title import TitleGenerationHandler
19
+ from .quick_fix import QuickFixApplyHandler
18
20
 
19
21
  from .completion import CompletionHandler
20
22
  from .edit import AIEditChatHandler
@@ -25,6 +27,9 @@ from .agent import AIJLAgentProxyHandler
25
27
  from .agent.config import IMAGE_DIR
26
28
  from .image import get_image_handlers
27
29
  from .upgrade import UpgradeEnvironmentHandler, UpgradeHandler
30
+ from .gitignore_handler import GitIgnoreHandler
31
+ from .git_status_handler import GitStatusHandler
32
+ from .search_replace_handler import SearchReplaceHandler
28
33
 
29
34
  # Static file handler for serving image files
30
35
  class ImageFileHandler(web.StaticFileHandler):
@@ -62,9 +67,15 @@ class D5MAIExtensionApp(ExtensionApp):
62
67
  (r"/api/d5m_ai/mention/files", MentionFileHandler),
63
68
  (r"/api/d5m_ai/auth/token", TokenHandler),
64
69
  (r"/api/d5m_ai/ping", PingProxyHandler),
70
+ (r"/api/d5m_ai/ping_local", PingLocalHandler),
71
+ (r"/api/d5m_ai/empty_display", EmptyDisplayProxyHandler),
65
72
  (r"/api/d5m_ai/generate_title", TitleGenerationHandler),
73
+ (r"/api/d5m_ai/quick_fix_apply", QuickFixApplyHandler),
66
74
  (r"/api/d5m_ai/upgrade/info", UpgradeEnvironmentHandler),
67
75
  (r"/api/d5m_ai/upgrade", UpgradeHandler),
76
+ (r"/api/d5m_ai/gitignore", GitIgnoreHandler),
77
+ (r"/api/d5m_ai/git-status", GitStatusHandler),
78
+ (r"/api/d5m_ai/search_replace", SearchReplaceHandler),
68
79
  # Static file handler for the temporary image files
69
80
  (r"/d5m-ai/images/(.*)", ImageFileHandler, {"path": IMAGE_DIR}),
70
81
  ]