pythinker-code 0.8.0__tar.gz → 0.10.0__tar.gz

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 (797) hide show
  1. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/PKG-INFO +10 -11
  2. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/README.md +9 -10
  3. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/pyproject.toml +7 -1
  4. pythinker_code-0.10.0/src/pythinker_code/CHANGELOG.md +106 -0
  5. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/app.py +35 -4
  6. pythinker_code-0.10.0/src/pythinker_code/file_restore.py +83 -0
  7. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/session_state.py +13 -0
  8. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/soul/agent.py +5 -0
  9. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/soul/approval.py +9 -0
  10. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/soul/pythinkersoul.py +67 -1
  11. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/file/replace.py +3 -0
  12. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/file/write.py +3 -0
  13. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/__init__.py +4 -0
  14. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/components/bash_execution.py +15 -3
  15. pythinker_code-0.10.0/src/pythinker_code/ui/shell/components/markdown.py +216 -0
  16. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/components/messages.py +5 -5
  17. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/components/tool_execution.py +41 -12
  18. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/slash.py +236 -0
  19. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/tool_renderers/_render_utils.py +6 -0
  20. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/tool_renderers/agent.py +11 -1
  21. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/tool_renderers/ask_user.py +3 -0
  22. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/tool_renderers/background.py +3 -0
  23. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/tool_renderers/bash.py +3 -0
  24. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/tool_renderers/edit.py +7 -1
  25. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/tool_renderers/find.py +7 -1
  26. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/tool_renderers/grep.py +3 -0
  27. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/tool_renderers/read.py +3 -0
  28. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/tool_renderers/think.py +3 -0
  29. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/tool_renderers/web.py +13 -2
  30. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/tool_renderers/write.py +5 -0
  31. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/theme.py +75 -0
  32. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/clipboard.py +24 -1
  33. pythinker_code-0.8.0/src/pythinker_code/web/static/assets/_baseUniq-DpSMr1jx.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/_baseUniq-W400tXC7.js +1 -1
  34. pythinker_code-0.8.0/src/pythinker_code/web/static/assets/arc-DpsahJyV.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/arc-34EJCxo9.js +1 -1
  35. pythinker_code-0.8.0/src/pythinker_code/web/static/assets/architectureDiagram-VXUJARFQ-DqiRv9Eg.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/architectureDiagram-VXUJARFQ-DwaRWLiC.js +1 -1
  36. pythinker_code-0.8.0/src/pythinker_code/web/static/assets/blockDiagram-VD42YOAC-WgtUvqbp.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/blockDiagram-VD42YOAC-BRSNRd25.js +1 -1
  37. pythinker_code-0.8.0/src/pythinker_code/web/static/assets/c4Diagram-YG6GDRKO-rK0RPuZd.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/c4Diagram-YG6GDRKO-DD0UYjmm.js +1 -1
  38. pythinker_code-0.10.0/src/pythinker_code/web/static/assets/channel-BGRpA8iD.js +1 -0
  39. pythinker_code-0.8.0/src/pythinker_code/web/static/assets/chunk-4BX2VUAB-DIkMuLV-.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/chunk-4BX2VUAB-DHgDfkME.js +1 -1
  40. pythinker_code-0.8.0/src/pythinker_code/web/static/assets/chunk-55IACEB6-CORdm4k4.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/chunk-55IACEB6-BImVKHaT.js +1 -1
  41. pythinker_code-0.8.0/src/pythinker_code/web/static/assets/chunk-B4BG7PRW-D9xDhwHO.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/chunk-B4BG7PRW-BI_7MRlj.js +1 -1
  42. pythinker_code-0.8.0/src/pythinker_code/web/static/assets/chunk-DI55MBZ5-BDmF9Bh-.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/chunk-DI55MBZ5-WJQkxwt1.js +1 -1
  43. pythinker_code-0.8.0/src/pythinker_code/web/static/assets/chunk-FMBD7UC4-BCse_HmM.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/chunk-FMBD7UC4-DhLSSn1H.js +1 -1
  44. pythinker_code-0.8.0/src/pythinker_code/web/static/assets/chunk-QN33PNHL-DCpBmTzA.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/chunk-QN33PNHL-zZjGr-26.js +1 -1
  45. pythinker_code-0.8.0/src/pythinker_code/web/static/assets/chunk-QZHKN3VN-BqLuqobw.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/chunk-QZHKN3VN-BS3aXYU5.js +1 -1
  46. pythinker_code-0.8.0/src/pythinker_code/web/static/assets/chunk-TZMSLE5B-8K2ogOKS.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/chunk-TZMSLE5B-DwZ3sgQz.js +1 -1
  47. pythinker_code-0.10.0/src/pythinker_code/web/static/assets/classDiagram-2ON5EDUG-BK5t0xBQ.js +1 -0
  48. pythinker_code-0.10.0/src/pythinker_code/web/static/assets/classDiagram-v2-WZHVMYZB-BK5t0xBQ.js +1 -0
  49. pythinker_code-0.10.0/src/pythinker_code/web/static/assets/clone-Dg1GHx6t.js +1 -0
  50. pythinker_code-0.8.0/src/pythinker_code/web/static/assets/code-block-IT6T5CEO-DWTFYA28.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/code-block-IT6T5CEO-Bb_0wCjb.js +1 -1
  51. pythinker_code-0.8.0/src/pythinker_code/web/static/assets/cose-bilkent-S5V4N54A-BRI7ES-N.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/cose-bilkent-S5V4N54A-DIEVeUwy.js +1 -1
  52. pythinker_code-0.8.0/src/pythinker_code/web/static/assets/cytoscape.esm-B6BxUuKW.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/cytoscape.esm-Dn1K7hBl.js +1 -1
  53. pythinker_code-0.8.0/src/pythinker_code/web/static/assets/dagre-6UL2VRFP-Ci5GdWfi.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/dagre-6UL2VRFP-CkgSwIWx.js +1 -1
  54. pythinker_code-0.8.0/src/pythinker_code/web/static/assets/diagram-PSM6KHXK-0hhAylV4.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/diagram-PSM6KHXK-CtQrWdyR.js +1 -1
  55. pythinker_code-0.8.0/src/pythinker_code/web/static/assets/diagram-QEK2KX5R-8fxgaW6d.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/diagram-QEK2KX5R-CSDDBGRj.js +1 -1
  56. pythinker_code-0.8.0/src/pythinker_code/web/static/assets/diagram-S2PKOQOG-FRr0_atE.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/diagram-S2PKOQOG-CYxMVXhs.js +1 -1
  57. pythinker_code-0.8.0/src/pythinker_code/web/static/assets/erDiagram-Q2GNP2WA-B3T-hJUM.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/erDiagram-Q2GNP2WA-BTnrd59H.js +1 -1
  58. pythinker_code-0.8.0/src/pythinker_code/web/static/assets/flowDiagram-NV44I4VS-D0S3u7ot.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/flowDiagram-NV44I4VS-CEy_PjLC.js +1 -1
  59. pythinker_code-0.8.0/src/pythinker_code/web/static/assets/ganttDiagram-JELNMOA3-CHrN2a23.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/ganttDiagram-JELNMOA3-36ZRuSR4.js +1 -1
  60. pythinker_code-0.8.0/src/pythinker_code/web/static/assets/gitGraphDiagram-NY62KEGX-CfcXZWg0.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/gitGraphDiagram-NY62KEGX-CRuujZbj.js +1 -1
  61. pythinker_code-0.8.0/src/pythinker_code/web/static/assets/graph-8jMJwCqE.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/graph-BKh6X7Dn.js +1 -1
  62. pythinker_code-0.8.0/src/pythinker_code/web/static/assets/index-C4gFzubz.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/index-CC2lLT6r.js +2 -2
  63. pythinker_code-0.8.0/src/pythinker_code/web/static/assets/index-BXrFnzMy.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/index-Cn2hJgP_.js +1 -1
  64. pythinker_code-0.8.0/src/pythinker_code/web/static/assets/index-BrfQJnRD.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/index-DzK6T3bK.js +1 -1
  65. pythinker_code-0.8.0/src/pythinker_code/web/static/assets/infoDiagram-WHAUD3N6-DdxonBf3.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/infoDiagram-WHAUD3N6-BdpB_TgQ.js +1 -1
  66. pythinker_code-0.8.0/src/pythinker_code/web/static/assets/journeyDiagram-XKPGCS4Q-BXf4aQei.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/journeyDiagram-XKPGCS4Q-B-Ueb6_0.js +1 -1
  67. pythinker_code-0.8.0/src/pythinker_code/web/static/assets/kanban-definition-3W4ZIXB7-DLpPPOu8.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/kanban-definition-3W4ZIXB7-D4mjpd4e.js +1 -1
  68. pythinker_code-0.8.0/src/pythinker_code/web/static/assets/layout-DH73UoAH.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/layout-s1vkLXlV.js +1 -1
  69. pythinker_code-0.8.0/src/pythinker_code/web/static/assets/linear-bAer2-sK.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/linear-maaL09f0.js +1 -1
  70. pythinker_code-0.8.0/src/pythinker_code/web/static/assets/mermaid-VLURNSYL-CuqbwKXv.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/mermaid-VLURNSYL-Du-05kut.js +7 -7
  71. pythinker_code-0.8.0/src/pythinker_code/web/static/assets/mermaid.core-Nx-rTKiV.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/mermaid.core-YI5xJESq.js +5 -5
  72. pythinker_code-0.8.0/src/pythinker_code/web/static/assets/min-DbfD8Ywu.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/min-C-visb5z.js +1 -1
  73. pythinker_code-0.8.0/src/pythinker_code/web/static/assets/mindmap-definition-VGOIOE7T-C6l761Ue.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/mindmap-definition-VGOIOE7T-BtL7H-jO.js +1 -1
  74. pythinker_code-0.8.0/src/pythinker_code/web/static/assets/pieDiagram-ADFJNKIX-fNg41mT9.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/pieDiagram-ADFJNKIX-DzCJMgpy.js +1 -1
  75. pythinker_code-0.8.0/src/pythinker_code/web/static/assets/quadrantDiagram-AYHSOK5B-DJz3Kx87.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/quadrantDiagram-AYHSOK5B-QxkFve7t.js +1 -1
  76. pythinker_code-0.8.0/src/pythinker_code/web/static/assets/requirementDiagram-UZGBJVZJ-B4SbrfE9.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/requirementDiagram-UZGBJVZJ-CaigVcFF.js +1 -1
  77. pythinker_code-0.8.0/src/pythinker_code/web/static/assets/sankeyDiagram-TZEHDZUN-CoSUjLAG.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/sankeyDiagram-TZEHDZUN-BpueXMqU.js +1 -1
  78. pythinker_code-0.8.0/src/pythinker_code/web/static/assets/sequenceDiagram-WL72ISMW-PjhBNHi3.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/sequenceDiagram-WL72ISMW-DF4777Nm.js +1 -1
  79. pythinker_code-0.8.0/src/pythinker_code/web/static/assets/stateDiagram-FKZM4ZOC-DOwESt8-.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/stateDiagram-FKZM4ZOC-B_zFmVzG.js +1 -1
  80. pythinker_code-0.10.0/src/pythinker_code/web/static/assets/stateDiagram-v2-4FDKWEC3-9CQoRlCH.js +1 -0
  81. pythinker_code-0.8.0/src/pythinker_code/web/static/assets/timeline-definition-IT6M3QCI-CkCLnAgi.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/timeline-definition-IT6M3QCI-BYaJbz91.js +1 -1
  82. pythinker_code-0.8.0/src/pythinker_code/web/static/assets/treemap-KMMF4GRG-CZS5XwTf.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/treemap-KMMF4GRG-BxgG9HnC.js +1 -1
  83. pythinker_code-0.8.0/src/pythinker_code/web/static/assets/xychartDiagram-PRI3JC2R-DkqqHNLh.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/xychartDiagram-PRI3JC2R-87KaLLq9.js +1 -1
  84. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/index.html +1 -1
  85. pythinker_code-0.8.0/src/pythinker_code/CHANGELOG.md +0 -60
  86. pythinker_code-0.8.0/src/pythinker_code/web/static/assets/channel-B0rlvkH-.js +0 -1
  87. pythinker_code-0.8.0/src/pythinker_code/web/static/assets/classDiagram-2ON5EDUG-D_ZHSii2.js +0 -1
  88. pythinker_code-0.8.0/src/pythinker_code/web/static/assets/classDiagram-v2-WZHVMYZB-D_ZHSii2.js +0 -1
  89. pythinker_code-0.8.0/src/pythinker_code/web/static/assets/clone-GSXejyY1.js +0 -1
  90. pythinker_code-0.8.0/src/pythinker_code/web/static/assets/stateDiagram-v2-4FDKWEC3-yl3OHWiP.js +0 -1
  91. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/LICENSE +0 -0
  92. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/NOTICE +0 -0
  93. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/__init__.py +0 -0
  94. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/__main__.py +0 -0
  95. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/acp/AGENTS.md +0 -0
  96. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/acp/__init__.py +0 -0
  97. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/acp/convert.py +0 -0
  98. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/acp/host.py +0 -0
  99. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/acp/mcp.py +0 -0
  100. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/acp/server.py +0 -0
  101. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/acp/session.py +0 -0
  102. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/acp/tools.py +0 -0
  103. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/acp/types.py +0 -0
  104. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/acp/version.py +0 -0
  105. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/agents/default/agent.yaml +0 -0
  106. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/agents/default/code_reviewer.yaml +0 -0
  107. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/agents/default/coder.yaml +0 -0
  108. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/agents/default/debugger.yaml +0 -0
  109. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/agents/default/explore.yaml +0 -0
  110. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/agents/default/implementer.yaml +0 -0
  111. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/agents/default/plan.yaml +0 -0
  112. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/agents/default/review.yaml +0 -0
  113. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/agents/default/security_reviewer.yaml +0 -0
  114. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/agents/default/system.md +0 -0
  115. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/agents/default/verifier.yaml +0 -0
  116. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/agents/okabe/agent.yaml +0 -0
  117. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/agentspec.py +0 -0
  118. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/approval_runtime/__init__.py +0 -0
  119. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/approval_runtime/models.py +0 -0
  120. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/approval_runtime/runtime.py +0 -0
  121. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/auth/__init__.py +0 -0
  122. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/auth/anthropic_direct.py +0 -0
  123. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/auth/deepseek.py +0 -0
  124. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/auth/github_feedback.py +0 -0
  125. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/auth/lm_studio.py +0 -0
  126. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/auth/minimax.py +0 -0
  127. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/auth/oauth.py +0 -0
  128. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/auth/ollama.py +0 -0
  129. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/auth/openai.py +0 -0
  130. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/auth/opencode_go.py +0 -0
  131. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/auth/openrouter.py +0 -0
  132. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/auth/platforms.py +0 -0
  133. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/background/__init__.py +0 -0
  134. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/background/agent_runner.py +0 -0
  135. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/background/ids.py +0 -0
  136. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/background/manager.py +0 -0
  137. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/background/models.py +0 -0
  138. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/background/store.py +0 -0
  139. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/background/summary.py +0 -0
  140. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/background/worker.py +0 -0
  141. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/cli/__init__.py +0 -0
  142. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/cli/__main__.py +0 -0
  143. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/cli/_lazy_group.py +0 -0
  144. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/cli/debug.py +0 -0
  145. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/cli/export.py +0 -0
  146. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/cli/info.py +0 -0
  147. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/cli/mcp.py +0 -0
  148. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/cli/plugin.py +0 -0
  149. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/cli/review.py +0 -0
  150. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/cli/secscan.py +0 -0
  151. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/cli/security_scan.py +0 -0
  152. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/cli/toad.py +0 -0
  153. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/cli/update.py +0 -0
  154. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/cli/vis.py +0 -0
  155. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/cli/web.py +0 -0
  156. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/config.py +0 -0
  157. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/constant.py +0 -0
  158. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/events.py +0 -0
  159. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/exception.py +0 -0
  160. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/extensions.py +0 -0
  161. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/hooks/__init__.py +0 -0
  162. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/hooks/config.py +0 -0
  163. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/hooks/engine.py +0 -0
  164. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/hooks/events.py +0 -0
  165. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/hooks/runner.py +0 -0
  166. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/llm.py +0 -0
  167. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/metadata.py +0 -0
  168. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/notifications/__init__.py +0 -0
  169. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/notifications/llm.py +0 -0
  170. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/notifications/manager.py +0 -0
  171. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/notifications/models.py +0 -0
  172. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/notifications/notifier.py +0 -0
  173. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/notifications/store.py +0 -0
  174. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/notifications/wire.py +0 -0
  175. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/plugin/__init__.py +0 -0
  176. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/plugin/manager.py +0 -0
  177. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/plugin/tool.py +0 -0
  178. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/prompt_templates.py +0 -0
  179. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/prompts/__init__.py +0 -0
  180. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/prompts/compact.md +0 -0
  181. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/prompts/init.md +0 -0
  182. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/py.typed +0 -0
  183. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/session.py +0 -0
  184. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/session_fork.py +0 -0
  185. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/share.py +0 -0
  186. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/skill/__init__.py +0 -0
  187. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/skill/flow/__init__.py +0 -0
  188. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/skill/flow/d2.py +0 -0
  189. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/skill/flow/mermaid.py +0 -0
  190. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/skills/pythinker-code-help/SKILL.md +0 -0
  191. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/skills/skill-creator/SKILL.md +0 -0
  192. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/soul/__init__.py +0 -0
  193. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/soul/btw.py +0 -0
  194. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/soul/compaction.py +0 -0
  195. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/soul/context.py +0 -0
  196. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/soul/denwarenji.py +0 -0
  197. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/soul/dynamic_injection.py +0 -0
  198. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/soul/dynamic_injections/__init__.py +0 -0
  199. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/soul/dynamic_injections/auto_mode.py +0 -0
  200. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/soul/dynamic_injections/plan_mode.py +0 -0
  201. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/soul/message.py +0 -0
  202. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/soul/permission.py +0 -0
  203. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/soul/slash.py +0 -0
  204. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/soul/toolset.py +0 -0
  205. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/subagents/__init__.py +0 -0
  206. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/subagents/builder.py +0 -0
  207. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/subagents/core.py +0 -0
  208. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/subagents/discovery.py +0 -0
  209. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/subagents/git_context.py +0 -0
  210. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/subagents/models.py +0 -0
  211. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/subagents/output.py +0 -0
  212. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/subagents/registry.py +0 -0
  213. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/subagents/runner.py +0 -0
  214. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/subagents/store.py +0 -0
  215. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/telemetry/__init__.py +0 -0
  216. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/telemetry/config.py +0 -0
  217. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/telemetry/crash.py +0 -0
  218. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/telemetry/errors.py +0 -0
  219. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/telemetry/metrics.py +0 -0
  220. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/telemetry/otel.py +0 -0
  221. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/telemetry/sentry.py +0 -0
  222. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/telemetry/sink.py +0 -0
  223. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/AGENTS.md +0 -0
  224. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/__init__.py +0 -0
  225. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/agent/__init__.py +0 -0
  226. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/agent/description.md +0 -0
  227. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/ask_user/__init__.py +0 -0
  228. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/ask_user/description.md +0 -0
  229. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/background/__init__.py +0 -0
  230. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/background/list.md +0 -0
  231. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/background/output.md +0 -0
  232. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/background/stop.md +0 -0
  233. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/display.py +0 -0
  234. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/dmail/__init__.py +0 -0
  235. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/dmail/dmail.md +0 -0
  236. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/file/__init__.py +0 -0
  237. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/file/glob.md +0 -0
  238. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/file/glob.py +0 -0
  239. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/file/grep.md +0 -0
  240. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/file/grep_local.py +0 -0
  241. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/file/plan_mode.py +0 -0
  242. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/file/read.md +0 -0
  243. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/file/read.py +0 -0
  244. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/file/read_media.md +0 -0
  245. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/file/read_media.py +0 -0
  246. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/file/replace.md +0 -0
  247. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/file/utils.py +0 -0
  248. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/file/write.md +0 -0
  249. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/plan/__init__.py +0 -0
  250. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/plan/description.md +0 -0
  251. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/plan/enter.py +0 -0
  252. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/plan/enter_description.md +0 -0
  253. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/plan/handoff.py +0 -0
  254. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/plan/heroes.py +0 -0
  255. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/shell/__init__.py +0 -0
  256. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/shell/bash.md +0 -0
  257. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/shell/powershell.md +0 -0
  258. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/test.py +0 -0
  259. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/think/__init__.py +0 -0
  260. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/think/think.md +0 -0
  261. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/todo/__init__.py +0 -0
  262. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/todo/set_todo_list.md +0 -0
  263. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/utils.py +0 -0
  264. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/web/__init__.py +0 -0
  265. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/web/fetch.md +0 -0
  266. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/web/fetch.py +0 -0
  267. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/web/search.md +0 -0
  268. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/web/search.py +0 -0
  269. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/__init__.py +0 -0
  270. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/acp/__init__.py +0 -0
  271. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/print/__init__.py +0 -0
  272. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/print/visualize.py +0 -0
  273. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/components/__init__.py +0 -0
  274. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/components/base.py +0 -0
  275. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/components/bordered_loader.py +0 -0
  276. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/components/diff.py +0 -0
  277. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/components/footer.py +0 -0
  278. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/components/key_hints.py +0 -0
  279. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/components/render_utils.py +0 -0
  280. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/components/settings_list.py +0 -0
  281. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/components/special_messages.py +0 -0
  282. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/console.py +0 -0
  283. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/debug.py +0 -0
  284. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/echo.py +0 -0
  285. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/export_import.py +0 -0
  286. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/keyboard.py +0 -0
  287. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/keymap.py +0 -0
  288. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/mcp_status.py +0 -0
  289. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/model_picker.py +0 -0
  290. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/oauth.py +0 -0
  291. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/placeholders.py +0 -0
  292. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/prompt.py +0 -0
  293. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/replay.py +0 -0
  294. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/selector.py +0 -0
  295. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/selectors/__init__.py +0 -0
  296. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/selectors/extension.py +0 -0
  297. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/selectors/oauth.py +0 -0
  298. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/selectors/settings.py +0 -0
  299. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/selectors/show_images.py +0 -0
  300. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/selectors/theme.py +0 -0
  301. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/selectors/thinking.py +0 -0
  302. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/session_picker.py +0 -0
  303. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/setup.py +0 -0
  304. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/spinner_words.py +0 -0
  305. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/startup.py +0 -0
  306. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/task_browser.py +0 -0
  307. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/tool_renderers/__init__.py +0 -0
  308. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/tool_renderers/generic.py +0 -0
  309. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/tool_renderers/plan.py +0 -0
  310. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/tool_renderers/todo.py +0 -0
  311. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/update.py +0 -0
  312. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/usage.py +0 -0
  313. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/usage_adapters/__init__.py +0 -0
  314. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/usage_adapters/anthropic_admin.py +0 -0
  315. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/usage_adapters/base.py +0 -0
  316. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/usage_adapters/deepseek.py +0 -0
  317. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/usage_adapters/minimax.py +0 -0
  318. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/usage_adapters/openai_admin.py +0 -0
  319. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/usage_adapters/openai_chatgpt.py +0 -0
  320. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/usage_adapters/opencode_go.py +0 -0
  321. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/usage_adapters/openrouter.py +0 -0
  322. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/usage_adapters/pythinker.py +0 -0
  323. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/usage_adapters/pythinker_ai.py +0 -0
  324. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/usage_render.py +0 -0
  325. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/visualize/__init__.py +0 -0
  326. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/visualize/_approval_panel.py +0 -0
  327. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/visualize/_blocks.py +0 -0
  328. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/visualize/_btw_panel.py +0 -0
  329. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/visualize/_input_router.py +0 -0
  330. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/visualize/_interactive.py +0 -0
  331. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/visualize/_live_view.py +0 -0
  332. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/visualize/_question_panel.py +0 -0
  333. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/visualize/_worklog.py +0 -0
  334. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/tui_config.py +0 -0
  335. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/usage_ratelimit_cache.py +0 -0
  336. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/__init__.py +0 -0
  337. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/aiohttp.py +0 -0
  338. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/aioqueue.py +0 -0
  339. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/broadcast.py +0 -0
  340. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/changelog.py +0 -0
  341. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/datetime.py +0 -0
  342. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/diff.py +0 -0
  343. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/editor.py +0 -0
  344. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/environment.py +0 -0
  345. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/envvar.py +0 -0
  346. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/export.py +0 -0
  347. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/file_filter.py +0 -0
  348. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/frontmatter.py +0 -0
  349. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/io.py +0 -0
  350. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/logging.py +0 -0
  351. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/media_tags.py +0 -0
  352. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/message.py +0 -0
  353. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/path.py +0 -0
  354. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/proctitle.py +0 -0
  355. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/proxy.py +0 -0
  356. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/pyinstaller.py +0 -0
  357. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/rich/__init__.py +0 -0
  358. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/rich/columns.py +0 -0
  359. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/rich/diff_render.py +0 -0
  360. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/rich/markdown.py +0 -0
  361. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/rich/markdown_sample.md +0 -0
  362. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/rich/markdown_sample_short.md +0 -0
  363. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/rich/syntax.py +0 -0
  364. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/sensitive.py +0 -0
  365. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/server.py +0 -0
  366. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/signals.py +0 -0
  367. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/slashcmd.py +0 -0
  368. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/string.py +0 -0
  369. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/subprocess_env.py +0 -0
  370. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/term.py +0 -0
  371. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/typing.py +0 -0
  372. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/vis/__init__.py +0 -0
  373. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/vis/api/__init__.py +0 -0
  374. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/vis/api/sessions.py +0 -0
  375. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/vis/api/statistics.py +0 -0
  376. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/vis/api/system.py +0 -0
  377. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/vis/app.py +0 -0
  378. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/vis/static/assets/highlighted-body-B3W2YXNL-CY1rtwrX.js +0 -0
  379. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/vis/static/assets/index-DSRInNnm.css +0 -0
  380. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/vis/static/assets/index-DgmTI2M_.js +0 -0
  381. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/vis/static/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
  382. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/vis/static/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
  383. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/vis/static/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
  384. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/vis/static/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
  385. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/vis/static/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
  386. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/vis/static/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
  387. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/vis/static/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
  388. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/vis/static/index.html +0 -0
  389. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/__init__.py +0 -0
  390. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/api/__init__.py +0 -0
  391. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/api/config.py +0 -0
  392. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/api/open_in.py +0 -0
  393. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/api/sessions.py +0 -0
  394. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/app.py +0 -0
  395. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/auth.py +0 -0
  396. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/models.py +0 -0
  397. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/runner/__init__.py +0 -0
  398. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/runner/messages.py +0 -0
  399. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/runner/process.py +0 -0
  400. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/runner/worker.py +0 -0
  401. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  402. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  403. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  404. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  405. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  406. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  407. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  408. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  409. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  410. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  411. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  412. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  413. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  414. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  415. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  416. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  417. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  418. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  419. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  420. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  421. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  422. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  423. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  424. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  425. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  426. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  427. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  428. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  429. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  430. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  431. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  432. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  433. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  434. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  435. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  436. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  437. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  438. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  439. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  440. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  441. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  442. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  443. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  444. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  445. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  446. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  447. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  448. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  449. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  450. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  451. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  452. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  453. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  454. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  455. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  456. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  457. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  458. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  459. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  460. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/abap-BdImnpbu.js +0 -0
  461. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/actionscript-3-CfeIJUat.js +0 -0
  462. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/ada-bCR0ucgS.js +0 -0
  463. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/andromeeda-C-Jbm3Hp.js +0 -0
  464. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/angular-html-CU67Zn6k.js +0 -0
  465. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/angular-ts-BwZT4LLn.js +0 -0
  466. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/apache-Pmp26Uib.js +0 -0
  467. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/apex-D8_7TLub.js +0 -0
  468. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/apl-dKokRX4l.js +0 -0
  469. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/applescript-Co6uUVPk.js +0 -0
  470. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/ara-BRHolxvo.js +0 -0
  471. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/asciidoc-Dv7Oe6Be.js +0 -0
  472. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/asm-D_Q5rh1f.js +0 -0
  473. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/astro-CbQHKStN.js +0 -0
  474. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/aurora-x-D-2ljcwZ.js +0 -0
  475. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/awk-DMzUqQB5.js +0 -0
  476. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/ayu-dark-CmMr59Fi.js +0 -0
  477. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/ballerina-BFfxhgS-.js +0 -0
  478. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/bat-BkioyH1T.js +0 -0
  479. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/beancount-k_qm7-4y.js +0 -0
  480. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/berry-uYugtg8r.js +0 -0
  481. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/bibtex-CHM0blh-.js +0 -0
  482. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/bicep-Bmn6On1c.js +0 -0
  483. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/blade-D4QpJJKB.js +0 -0
  484. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/bsl-BO_Y6i37.js +0 -0
  485. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/c-BIGW1oBm.js +0 -0
  486. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/c3-VCDPK7BO.js +0 -0
  487. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/cadence-Bv_4Rxtq.js +0 -0
  488. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/cairo-KRGpt6FW.js +0 -0
  489. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/catppuccin-frappe-DFWUc33u.js +0 -0
  490. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/catppuccin-latte-C9dUb6Cb.js +0 -0
  491. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/catppuccin-macchiato-DQyhUUbL.js +0 -0
  492. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/catppuccin-mocha-D87Tk5Gz.js +0 -0
  493. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/clarity-D53aC0YG.js +0 -0
  494. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/clojure-P80f7IUj.js +0 -0
  495. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/cmake-D1j8_8rp.js +0 -0
  496. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/cobol-nwyudZeR.js +0 -0
  497. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/codeowners-Bp6g37R7.js +0 -0
  498. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/codeql-DsOJ9woJ.js +0 -0
  499. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/coffee-Ch7k5sss.js +0 -0
  500. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/common-lisp-Cg-RD9OK.js +0 -0
  501. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/coq-DkFqJrB1.js +0 -0
  502. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/cpp-CofmeUqb.js +0 -0
  503. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/crystal-tKQVLTB8.js +0 -0
  504. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/csharp-K5feNrxe.js +0 -0
  505. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/css-DPfMkruS.js +0 -0
  506. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/csv-fuZLfV_i.js +0 -0
  507. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/cue-D82EKSYY.js +0 -0
  508. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/cypher-COkxafJQ.js +0 -0
  509. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/d-85-TOEBH.js +0 -0
  510. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/dark-plus-C3mMm8J8.js +0 -0
  511. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/dart-CF10PKvl.js +0 -0
  512. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/dax-CEL-wOlO.js +0 -0
  513. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/defaultLocale-DX6XiGOO.js +0 -0
  514. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/desktop-BmXAJ9_W.js +0 -0
  515. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/diff-D97Zzqfu.js +0 -0
  516. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/docker-BcOcwvcX.js +0 -0
  517. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/dotenv-Da5cRb03.js +0 -0
  518. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/dracula-BzJJZx-M.js +0 -0
  519. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/dracula-soft-BXkSAIEj.js +0 -0
  520. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/dream-maker-BtqSS_iP.js +0 -0
  521. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/edge-BkV0erSs.js +0 -0
  522. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/elixir-CDX3lj18.js +0 -0
  523. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/elm-DbKCFpqz.js +0 -0
  524. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/emacs-lisp-C9XAeP06.js +0 -0
  525. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/erb-BOJIQeun.js +0 -0
  526. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/erlang-DsQrWhSR.js +0 -0
  527. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/everforest-dark-BgDCqdQA.js +0 -0
  528. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/everforest-light-C8M2exoo.js +0 -0
  529. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/fennel-BYunw83y.js +0 -0
  530. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/fish-BvzEVeQv.js +0 -0
  531. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/fluent-C4IJs8-o.js +0 -0
  532. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/fortran-fixed-form-CkoXwp7k.js +0 -0
  533. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/fortran-free-form-BxgE0vQu.js +0 -0
  534. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/fsharp-CXgrBDvD.js +0 -0
  535. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/gdresource-B7Tvp0Sc.js +0 -0
  536. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/gdscript-DTMYz4Jt.js +0 -0
  537. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/gdshader-DkwncUOv.js +0 -0
  538. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/genie-D0YGMca9.js +0 -0
  539. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/gherkin-DyxjwDmM.js +0 -0
  540. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/git-commit-F4YmCXRG.js +0 -0
  541. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/git-rebase-r7XF79zn.js +0 -0
  542. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/github-dark-DHJKELXO.js +0 -0
  543. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/github-dark-default-Cuk6v7N8.js +0 -0
  544. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/github-dark-dimmed-DH5Ifo-i.js +0 -0
  545. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/github-dark-high-contrast-E3gJ1_iC.js +0 -0
  546. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/github-light-DAi9KRSo.js +0 -0
  547. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/github-light-default-D7oLnXFd.js +0 -0
  548. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/github-light-high-contrast-BfjtVDDH.js +0 -0
  549. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/gleam-BspZqrRM.js +0 -0
  550. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/glimmer-js-Rg0-pVw9.js +0 -0
  551. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/glimmer-ts-U6CK756n.js +0 -0
  552. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/glsl-DplSGwfg.js +0 -0
  553. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/gn-n2N0HUVH.js +0 -0
  554. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/gnuplot-DdkO51Og.js +0 -0
  555. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/go-Dn2_MT6a.js +0 -0
  556. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/graphql-ChdNCCLP.js +0 -0
  557. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/groovy-gcz8RCvz.js +0 -0
  558. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/gruvbox-dark-hard-CFHQjOhq.js +0 -0
  559. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/gruvbox-dark-medium-GsRaNv29.js +0 -0
  560. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/gruvbox-dark-soft-CVdnzihN.js +0 -0
  561. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/gruvbox-light-hard-CH1njM8p.js +0 -0
  562. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/gruvbox-light-medium-DRw_LuNl.js +0 -0
  563. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/gruvbox-light-soft-hJgmCMqR.js +0 -0
  564. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/hack-CaT9iCJl.js +0 -0
  565. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/haml-B8DHNrY2.js +0 -0
  566. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/handlebars-BL8al0AC.js +0 -0
  567. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/haskell-Df6bDoY_.js +0 -0
  568. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/haxe-CzTSHFRz.js +0 -0
  569. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/hcl-BWvSN4gD.js +0 -0
  570. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/hjson-D5-asLiD.js +0 -0
  571. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/hlsl-D3lLCCz7.js +0 -0
  572. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/houston-DnULxvSX.js +0 -0
  573. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/html-GMplVEZG.js +0 -0
  574. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/html-derivative-BFtXZ54Q.js +0 -0
  575. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/http-jrhK8wxY.js +0 -0
  576. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/hurl-irOxFIW8.js +0 -0
  577. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/hxml-Bvhsp5Yf.js +0 -0
  578. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/hy-DFXneXwc.js +0 -0
  579. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/imba-DGztddWO.js +0 -0
  580. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/index-BpoLgcEt.js +0 -0
  581. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/index-CzV_vCfu.css +0 -0
  582. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/index-DI2oedCt.js +0 -0
  583. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/ini-BEwlwnbL.js +0 -0
  584. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/init-Gi6I4Gst.js +0 -0
  585. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
  586. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
  587. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
  588. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
  589. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
  590. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
  591. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
  592. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/java-CylS5w8V.js +0 -0
  593. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/javascript-wDzz0qaB.js +0 -0
  594. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/jinja-4LBKfQ-Z.js +0 -0
  595. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/jison-wvAkD_A8.js +0 -0
  596. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/json-Cp-IABpG.js +0 -0
  597. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/json5-C9tS-k6U.js +0 -0
  598. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/jsonc-Des-eS-w.js +0 -0
  599. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/jsonl-DcaNXYhu.js +0 -0
  600. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/jsonnet-DFQXde-d.js +0 -0
  601. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/jssm-C2t-YnRu.js +0 -0
  602. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/jsx-g9-lgVsj.js +0 -0
  603. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/julia-CxzCAyBv.js +0 -0
  604. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/kanagawa-dragon-CkXjmgJE.js +0 -0
  605. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/kanagawa-lotus-CfQXZHmo.js +0 -0
  606. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/kanagawa-wave-DWedfzmr.js +0 -0
  607. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/katex-D2lIc1rk.css +0 -0
  608. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/kdl-DV7GczEv.js +0 -0
  609. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/kotlin-BdnUsdx6.js +0 -0
  610. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/kusto-DZf3V79B.js +0 -0
  611. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/laserwave-DUszq2jm.js +0 -0
  612. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/latex-B4uzh10-.js +0 -0
  613. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/lean-BZvkOJ9d.js +0 -0
  614. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/less-B1dDrJ26.js +0 -0
  615. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/light-plus-B7mTdjB0.js +0 -0
  616. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/liquid-DYVedYrR.js +0 -0
  617. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/llvm-BtvRca6l.js +0 -0
  618. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/log-2UxHyX5q.js +0 -0
  619. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/logo-BtOb2qkB.js +0 -0
  620. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/lua-BbnMAYS6.js +0 -0
  621. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/luau-C-HG3fhB.js +0 -0
  622. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/make-CHLpvVh8.js +0 -0
  623. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/markdown-Cvjx9yec.js +0 -0
  624. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/marko-DZsq8hO1.js +0 -0
  625. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/material-theme-D5KoaKCx.js +0 -0
  626. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/material-theme-darker-BfHTSMKl.js +0 -0
  627. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/material-theme-lighter-B0m2ddpp.js +0 -0
  628. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/material-theme-ocean-CyktbL80.js +0 -0
  629. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/material-theme-palenight-Csfq5Kiy.js +0 -0
  630. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/matlab-D7o27uSR.js +0 -0
  631. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/mdc-DUICxH0z.js +0 -0
  632. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/mdx-Cmh6b_Ma.js +0 -0
  633. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/mermaid-VLURNSYL-B2P5VJ9v.css +0 -0
  634. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/mermaid-mWjccvbQ.js +0 -0
  635. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/min-dark-CafNBF8u.js +0 -0
  636. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/min-light-CTRr51gU.js +0 -0
  637. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/mipsasm-CKIfxQSi.js +0 -0
  638. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/mojo-B93PlW-d.js +0 -0
  639. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/monokai-D4h5O-jR.js +0 -0
  640. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/moonbit-Ba13S78F.js +0 -0
  641. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/move-Bu9oaDYs.js +0 -0
  642. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/narrat-DRg8JJMk.js +0 -0
  643. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/nextflow-BrzmwbiE.js +0 -0
  644. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/nginx-DknmC5AR.js +0 -0
  645. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/night-owl-C39BiMTA.js +0 -0
  646. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/nim-CVrawwO9.js +0 -0
  647. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/nix-CwoSXNpI.js +0 -0
  648. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/nord-Ddv68eIx.js +0 -0
  649. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/nushell-C-sUppwS.js +0 -0
  650. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/objective-c-DXmwc3jG.js +0 -0
  651. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/objective-cpp-CLxacb5B.js +0 -0
  652. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/ocaml-C0hk2d4L.js +0 -0
  653. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/one-dark-pro-DVMEJ2y_.js +0 -0
  654. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/one-light-PoHY5YXO.js +0 -0
  655. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/openscad-C4EeE6gA.js +0 -0
  656. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/ordinal-Cboi1Yqb.js +0 -0
  657. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/pascal-D93ZcfNL.js +0 -0
  658. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/perl-C0TMdlhV.js +0 -0
  659. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/php-CDn_0X-4.js +0 -0
  660. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/pkl-u5AG7uiY.js +0 -0
  661. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/plastic-3e1v2bzS.js +0 -0
  662. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/plsql-ChMvpjG-.js +0 -0
  663. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/po-BTJTHyun.js +0 -0
  664. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/poimandres-CS3Unz2-.js +0 -0
  665. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/polar-C0HS_06l.js +0 -0
  666. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/postcss-CXtECtnM.js +0 -0
  667. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/powerquery-CEu0bR-o.js +0 -0
  668. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/powershell-Dpen1YoG.js +0 -0
  669. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/prisma-Dd19v3D-.js +0 -0
  670. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/prolog-CbFg5uaA.js +0 -0
  671. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/proto-C7zT0LnQ.js +0 -0
  672. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/pug-CGlum2m_.js +0 -0
  673. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/puppet-BMWR74SV.js +0 -0
  674. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/purescript-CklMAg4u.js +0 -0
  675. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/python-B6aJPvgy.js +0 -0
  676. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/qml-3beO22l8.js +0 -0
  677. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/qmldir-C8lEn-DE.js +0 -0
  678. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/qss-IeuSbFQv.js +0 -0
  679. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/r-Dspwwk_N.js +0 -0
  680. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/racket-BqYA7rlc.js +0 -0
  681. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/raku-DXvB9xmW.js +0 -0
  682. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/razor-C1TweQQi.js +0 -0
  683. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/red-bN70gL4F.js +0 -0
  684. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/reg-C-SQnVFl.js +0 -0
  685. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/regexp-CDVJQ6XC.js +0 -0
  686. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/rel-C3B-1QV4.js +0 -0
  687. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/riscv-BM1_JUlF.js +0 -0
  688. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/rose-pine-dawn-DHQR4-dF.js +0 -0
  689. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/rose-pine-moon-D4_iv3hh.js +0 -0
  690. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/rose-pine-qdsjHGoJ.js +0 -0
  691. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/rosmsg-BJDFO7_C.js +0 -0
  692. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/rst-B0xPkSld.js +0 -0
  693. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/ruby-BvKwtOVI.js +0 -0
  694. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/rust-B1yitclQ.js +0 -0
  695. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/sas-cz2c8ADy.js +0 -0
  696. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/sass-Cj5Yp3dK.js +0 -0
  697. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/scala-C151Ov-r.js +0 -0
  698. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/scheme-C98Dy4si.js +0 -0
  699. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/scss-OYdSNvt2.js +0 -0
  700. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/sdbl-DVxCFoDh.js +0 -0
  701. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/shaderlab-Dg9Lc6iA.js +0 -0
  702. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/shellscript-Yzrsuije.js +0 -0
  703. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/shellsession-BADoaaVG.js +0 -0
  704. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/slack-dark-BthQWCQV.js +0 -0
  705. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/slack-ochin-DqwNpetd.js +0 -0
  706. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/smalltalk-BERRCDM3.js +0 -0
  707. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/snazzy-light-Bw305WKR.js +0 -0
  708. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/solarized-dark-DXbdFlpD.js +0 -0
  709. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/solarized-light-L9t79GZl.js +0 -0
  710. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/solidity-rGO070M0.js +0 -0
  711. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/soy-Brmx7dQM.js +0 -0
  712. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/sparql-rVzFXLq3.js +0 -0
  713. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/splunk-BtCnVYZw.js +0 -0
  714. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/sql-BLtJtn59.js +0 -0
  715. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/ssh-config-_ykCGR6B.js +0 -0
  716. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/stata-BH5u7GGu.js +0 -0
  717. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/stylus-BEDo0Tqx.js +0 -0
  718. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/svelte-zxCyuUbr.js +0 -0
  719. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/swift-Dg5xB15N.js +0 -0
  720. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/synthwave-84-CbfX1IO0.js +0 -0
  721. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/system-verilog-CnnmHF94.js +0 -0
  722. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/systemd-4A_iFExJ.js +0 -0
  723. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/talonscript-CkByrt1z.js +0 -0
  724. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/tasl-QIJgUcNo.js +0 -0
  725. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/tcl-dwOrl1Do.js +0 -0
  726. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/templ-W15q3VgB.js +0 -0
  727. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/terraform-BETggiCN.js +0 -0
  728. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/tex-CvyZ59Mk.js +0 -0
  729. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/tokyo-night-hegEt444.js +0 -0
  730. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/toml-vGWfd6FD.js +0 -0
  731. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/ts-tags-zn1MmPIZ.js +0 -0
  732. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/tsv-B_m7g4N7.js +0 -0
  733. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/tsx-COt5Ahok.js +0 -0
  734. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/turtle-BsS91CYL.js +0 -0
  735. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/twig-CO9l9SDP.js +0 -0
  736. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/typescript-BPQ3VLAy.js +0 -0
  737. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/typespec-BGHnOYBU.js +0 -0
  738. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/typst-DHCkPAjA.js +0 -0
  739. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/v-BcVCzyr7.js +0 -0
  740. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/vala-CsfeWuGM.js +0 -0
  741. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/vb-D17OF-Vu.js +0 -0
  742. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/verilog-BQ8w6xss.js +0 -0
  743. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/vesper-DU1UobuO.js +0 -0
  744. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/vhdl-CeAyd5Ju.js +0 -0
  745. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/viml-CJc9bBzg.js +0 -0
  746. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/vitesse-black-Bkuqu6BP.js +0 -0
  747. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/vitesse-dark-D0r3Knsf.js +0 -0
  748. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/vitesse-light-CVO1_9PV.js +0 -0
  749. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/vue-DN_0RTcg.js +0 -0
  750. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/vue-html-AaS7Mt5G.js +0 -0
  751. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/vue-vine-CQOfvN7w.js +0 -0
  752. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/vyper-CDx5xZoG.js +0 -0
  753. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/wasm-CG6Dc4jp.js +0 -0
  754. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/wasm-MzD3tlZU.js +0 -0
  755. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/wenyan-BV7otONQ.js +0 -0
  756. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/wgsl-Dx-B1_4e.js +0 -0
  757. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/wikitext-BhOHFoWU.js +0 -0
  758. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/wit-5i3qLPDT.js +0 -0
  759. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/wolfram-lXgVvXCa.js +0 -0
  760. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/xml-sdJ4AIDG.js +0 -0
  761. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/xsl-CtQFsRM5.js +0 -0
  762. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/yaml-Buea-lGh.js +0 -0
  763. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/zenscript-DVFEvuxE.js +0 -0
  764. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/zig-VOosw3JB.js +0 -0
  765. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/brand/apple-touch-icon.png +0 -0
  766. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/brand/arctecture.webp +0 -0
  767. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/brand/bimi-logo.svg +0 -0
  768. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/brand/favicon.ico +0 -0
  769. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/brand/fonts/dm-sans-latin-ext.woff2 +0 -0
  770. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/brand/fonts/dm-sans-latin.woff2 +0 -0
  771. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/brand/fonts/instrument-sans-latin-ext.woff2 +0 -0
  772. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/brand/fonts/instrument-sans-latin.woff2 +0 -0
  773. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/brand/fonts/instrument-serif-latin-ext.woff2 +0 -0
  774. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/brand/fonts/instrument-serif-latin.woff2 +0 -0
  775. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-italic-latin-ext.woff2 +0 -0
  776. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-italic-latin.woff2 +0 -0
  777. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-latin-ext.woff2 +0 -0
  778. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-latin.woff2 +0 -0
  779. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/brand/fonts/roboto-latin-ext.woff2 +0 -0
  780. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/brand/fonts/roboto-latin.woff2 +0 -0
  781. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/brand/icon-192.png +0 -0
  782. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/brand/icon-512.png +0 -0
  783. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/brand/icon.svg +0 -0
  784. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/brand/logo.png +0 -0
  785. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/brand/pythinker_animated.svg +0 -0
  786. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/brand/robots.txt +0 -0
  787. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/logo.png +0 -0
  788. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/store/__init__.py +0 -0
  789. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/web/store/sessions.py +0 -0
  790. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/wire/__init__.py +0 -0
  791. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/wire/file.py +0 -0
  792. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/wire/jsonrpc.py +0 -0
  793. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/wire/protocol.py +0 -0
  794. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/wire/root_hub.py +0 -0
  795. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/wire/serde.py +0 -0
  796. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/wire/server.py +0 -0
  797. {pythinker_code-0.8.0 → pythinker_code-0.10.0}/src/pythinker_code/wire/types.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pythinker-code
3
- Version: 0.8.0
3
+ Version: 0.10.0
4
4
  Summary: Pythinker Code is your next CLI agent.
5
5
  Keywords: cli,agent,ai,coding-assistant,llm,claude,openai,terminal
6
6
  Author: Mohamed Elkholy
@@ -115,18 +115,17 @@ It speaks the [**Agent Client Protocol (ACP)**](https://github.com/agentclientpr
115
115
 
116
116
  ---
117
117
 
118
- ## 🆕 What's New in 0.8.0
118
+ ## 🆕 What's New in 0.10.0
119
119
 
120
- Version-scheme reset. Pythinker Code moves to a `0.MINOR.PATCH` line; `0.8.0` is the new starting release, replacing the prior 1.x/2.x lineage.
120
+ - **Tool failure recovery improvements.** The agent loop now handles malformed or empty tool-call responses more gracefully and can continue the session instead of leaving the UI stuck after a bad provider turn.
121
+ - **Safer file edits.** File write and replace tools now create restore points before mutating files, giving sessions a clearer recovery path after risky changes.
122
+ - **Session UX state tracking.** Runtime session state now records additional UX metadata so shell surfaces can provide better continuity across long-running work.
123
+ - **Shell command enhancements.** New shell slash-command plumbing improves discoverability and keeps interactive workflows smoother.
124
+ - **TUI renderer polish.** Tool cards now share more consistent status glyphs, truncation behavior, and result summaries across bash, read, write, edit, grep, find, web, subagent, background, ask-user, and think renderers.
125
+ - **Clipboard handling hardening.** Clipboard helpers now degrade more cleanly when platform clipboard access is unavailable.
126
+ - **Release and TUI specs.** The repository now includes the blackbox TUI port design and a visual smoke-test criterion for future terminal UI work.
121
127
 
122
- - **New version line — `0.MINOR.PATCH`.** `MINOR` is a monotonically increasing release counter; `PATCH` is reserved for hotfixes. No `1.0.0` milestone is planned on this line.
123
- - **PyPI reset.** All prior `pythinker-code` 1.x/2.x releases have been **yanked** from PyPI. New installs (`pip install pythinker-code`, `pip install --upgrade pythinker-code`, `uv tool install pythinker-code`, and `pythinker update`) resolve to `0.8.0`.
124
- - **GitHub reset.** All pre-`0.8.0` GitHub Releases and matching git tags have been removed. `v0.8.0` is the first tag on the new line.
125
- - **Tag scheme.** Release tags are now `v<MAJOR>.<MINOR>.<PATCH>` (e.g. `v0.8.0`). The release workflow trigger and `scripts/check_version_tag.py` both expect the `v` prefix.
126
- - **No app-level regressions.** All functionality shipped through 2.7.0 is preserved: review-first workflows (`pythinker review`, `pythinker secscan`, `pythinker security-scan`, `pythinker debug`), Reviewflow stateful review/fix workflows, the `code-reviewer` / `security-reviewer` / `debugger` subagent roles, hardened review-output validation, and the read-only PR artifact helpers.
127
- - **History preserved in-repo.** The detailed 1.x/2.x release notes are archived at [`docs/history/CHANGELOG-pre-0.8.0.md`](docs/history/CHANGELOG-pre-0.8.0.md).
128
-
129
- Upgrade with `pythinker update` or `pip install --upgrade pythinker-code==0.8.0`.
128
+ Upgrade with `pythinker update` or `pip install --upgrade pythinker-code==0.10.0`.
130
129
 
131
130
 
132
131
  ---
@@ -50,18 +50,17 @@ It speaks the [**Agent Client Protocol (ACP)**](https://github.com/agentclientpr
50
50
 
51
51
  ---
52
52
 
53
- ## 🆕 What's New in 0.8.0
53
+ ## 🆕 What's New in 0.10.0
54
54
 
55
- Version-scheme reset. Pythinker Code moves to a `0.MINOR.PATCH` line; `0.8.0` is the new starting release, replacing the prior 1.x/2.x lineage.
55
+ - **Tool failure recovery improvements.** The agent loop now handles malformed or empty tool-call responses more gracefully and can continue the session instead of leaving the UI stuck after a bad provider turn.
56
+ - **Safer file edits.** File write and replace tools now create restore points before mutating files, giving sessions a clearer recovery path after risky changes.
57
+ - **Session UX state tracking.** Runtime session state now records additional UX metadata so shell surfaces can provide better continuity across long-running work.
58
+ - **Shell command enhancements.** New shell slash-command plumbing improves discoverability and keeps interactive workflows smoother.
59
+ - **TUI renderer polish.** Tool cards now share more consistent status glyphs, truncation behavior, and result summaries across bash, read, write, edit, grep, find, web, subagent, background, ask-user, and think renderers.
60
+ - **Clipboard handling hardening.** Clipboard helpers now degrade more cleanly when platform clipboard access is unavailable.
61
+ - **Release and TUI specs.** The repository now includes the blackbox TUI port design and a visual smoke-test criterion for future terminal UI work.
56
62
 
57
- - **New version line — `0.MINOR.PATCH`.** `MINOR` is a monotonically increasing release counter; `PATCH` is reserved for hotfixes. No `1.0.0` milestone is planned on this line.
58
- - **PyPI reset.** All prior `pythinker-code` 1.x/2.x releases have been **yanked** from PyPI. New installs (`pip install pythinker-code`, `pip install --upgrade pythinker-code`, `uv tool install pythinker-code`, and `pythinker update`) resolve to `0.8.0`.
59
- - **GitHub reset.** All pre-`0.8.0` GitHub Releases and matching git tags have been removed. `v0.8.0` is the first tag on the new line.
60
- - **Tag scheme.** Release tags are now `v<MAJOR>.<MINOR>.<PATCH>` (e.g. `v0.8.0`). The release workflow trigger and `scripts/check_version_tag.py` both expect the `v` prefix.
61
- - **No app-level regressions.** All functionality shipped through 2.7.0 is preserved: review-first workflows (`pythinker review`, `pythinker secscan`, `pythinker security-scan`, `pythinker debug`), Reviewflow stateful review/fix workflows, the `code-reviewer` / `security-reviewer` / `debugger` subagent roles, hardened review-output validation, and the read-only PR artifact helpers.
62
- - **History preserved in-repo.** The detailed 1.x/2.x release notes are archived at [`docs/history/CHANGELOG-pre-0.8.0.md`](docs/history/CHANGELOG-pre-0.8.0.md).
63
-
64
- Upgrade with `pythinker update` or `pip install --upgrade pythinker-code==0.8.0`.
63
+ Upgrade with `pythinker update` or `pip install --upgrade pythinker-code==0.10.0`.
65
64
 
66
65
 
67
66
  ---
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "pythinker-code"
3
- version = "0.8.0"
3
+ version = "0.10.0"
4
4
  description = "Pythinker Code is your next CLI agent."
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.12"
@@ -158,3 +158,9 @@ seeked = "seeked"
158
158
  iterm = "iterm"
159
159
  # Verbatim pyright CLI output ("0 informations") quoted in docs.
160
160
  informations = "informations"
161
+ # Project/domain-specific names and generated IDs.
162
+ reviewr = "reviewr"
163
+ fnd = "fnd"
164
+ edn = "edn"
165
+ Encrypter = "Encrypter"
166
+ uest = "uest"
@@ -0,0 +1,106 @@
1
+ # Changelog
2
+
3
+ All notable changes to `pythinker-code` are tracked in this file.
4
+
5
+ Pythinker Code uses a `0.MINOR.PATCH` version scheme. `MINOR` is a release
6
+ counter that continues advancing with each release. `PATCH` is reserved for
7
+ hotfixes against an already-released `MINOR`. There is no `1.0.0` milestone
8
+ planned on this line.
9
+
10
+ Releases earlier than `0.8.0` were published as `pythinker-code` 1.x/2.x
11
+ under a different scheme. The full pre-`0.8.0` history is preserved in
12
+ [`docs/history/CHANGELOG-pre-0.8.0.md`](docs/history/CHANGELOG-pre-0.8.0.md).
13
+ All 1.x and 2.x releases have been yanked from PyPI and removed from the
14
+ GitHub Releases page; `0.8.0` is the new starting line.
15
+
16
+ ## Unreleased
17
+
18
+ ## 0.10.0 (2026-05-22)
19
+
20
+ ### What changed in this release
21
+
22
+ - **Tool failure recovery improvements.** The agent loop now handles malformed or empty tool-call responses more gracefully and can continue the session instead of leaving the UI stuck after a bad provider turn.
23
+ - **Safer file edits.** File write and replace tools now create restore points before mutating files, giving sessions a clearer recovery path after risky changes.
24
+ - **Session UX state tracking.** Runtime session state now records additional UX metadata so shell surfaces can provide better continuity across long-running work.
25
+ - **Shell command enhancements.** New shell slash-command plumbing improves discoverability and keeps interactive workflows smoother.
26
+ - **TUI renderer polish.** Tool cards now share more consistent status glyphs, truncation behavior, and result summaries across bash, read, write, edit, grep, find, web, subagent, background, ask-user, and think renderers.
27
+ - **Clipboard handling hardening.** Clipboard helpers now degrade more cleanly when platform clipboard access is unavailable.
28
+ - **Release and TUI specs.** The repository now includes the blackbox TUI port design and a visual smoke-test criterion for future terminal UI work.
29
+
30
+ Upgrade with `pythinker update` or `pip install --upgrade pythinker-code==0.10.0`.
31
+
32
+ ## 0.9.0 (2026-05-21)
33
+
34
+ ### What changed in this release
35
+
36
+ - **Cleaner TUI — tool card backgrounds removed.** The grey pending/running
37
+ background overlay that appeared behind every tool execution card (subagents,
38
+ bash executions, reads, etc.) has been removed. Only user-message blocks
39
+ retain a background tint, keeping the visual hierarchy focused on your input.
40
+ - **Welcome screen enhancements.** The startup info panel now shows the current
41
+ git branch (when inside a git repo) and the session auto-save path alongside
42
+ the working directory and session ID. Branch name is highlighted in magenta
43
+ for quick scanning.
44
+ - **Bash header strip styling.** The `$ command` portion of bash execution
45
+ headers now picks up the `tool_pending_bg` token for the strip background,
46
+ matching the reference renderer style and providing consistent visual weight
47
+ across themes.
48
+ - **Pythinker markdown renderer wired into message components.** User messages,
49
+ assistant messages, and custom messages now render through `pythinker_markdown`
50
+ (the project's own Markdown renderer) instead of raw `rich.markdown.Markdown`,
51
+ giving consistent heading, code-block, and table styling everywhere.
52
+ - **Expanded theme palette.** `theme.py` gains a full `MarkdownColors` /
53
+ `markdown_rich_style` subsystem with dark and light palettes covering headings,
54
+ emphasis, inline code, links, blockquotes, table borders, code-block borders
55
+ and backgrounds, and spinner states (active/done/failed).
56
+ - **Improved tool fallback renderers.** The call fallback now emits a
57
+ status-glyph header (`✔`/`✘`/`●`) instead of a bare label. The result
58
+ fallback now truncates long outputs at 60 lines / 4000 chars with an
59
+ italicised note (matching the card renderer's behaviour), and applies the
60
+ correct theme tokens for error vs. muted output.
61
+
62
+ Upgrade with `pythinker update` or `pip install --upgrade pythinker-code==0.9.0`.
63
+
64
+ ## 0.8.0 (2026-05-21)
65
+
66
+ Version-scheme reset. `pythinker-code` now ships as `0.8.0` under the new
67
+ `0.MINOR.PATCH` line.
68
+
69
+ ### What changed in this release
70
+
71
+ - **Version line reset.** `pyproject.toml` `version` is `0.8.0` under the new release design.
72
+ All prior `pythinker-code` 1.x/2.x releases have been yanked from PyPI and
73
+ removed from the GitHub Releases page. New installs of
74
+ `pip install --upgrade pythinker-code==0.8.0` resolve to the `0.x` line.
75
+ - **Tag scheme standardised** on `v<MAJOR>.<MINOR>.<PATCH>`. The
76
+ `release-pythinker-cli.yml` workflow trigger now matches `v[0-9]+.[0-9]+.[0-9]+`
77
+ and `scripts/check_version_tag.py` strips the leading `v` before comparing the
78
+ tag to `pyproject.toml`.
79
+ - **Release gate preserved.** The `What's New in <version>` section,
80
+ `pythinker-code==<version>` install snippet, and `## <version> (YYYY-MM-DD)`
81
+ CHANGELOG entry are still required for every tag — only the version values
82
+ change.
83
+ - **CHANGELOG restart.** Pre-`0.8.0` history archived to
84
+ `docs/history/CHANGELOG-pre-0.8.0.md`; this file starts fresh at `0.8.0`.
85
+ - **README "What's New" trimmed.** The cascading 2.x "What's New" wall is
86
+ replaced by a single `0.8.0` section. Past release notes live in the archived
87
+ CHANGELOG and the per-tag GitHub Releases (from `v0.8.0` onward).
88
+ - **Test refactor.** `tests/telemetry/test_otel_resource.py` now reads the
89
+ expected service version from `importlib.metadata.version("pythinker-code")`
90
+ instead of a hard-coded string, so future version bumps don't require a test
91
+ edit.
92
+
93
+ ### Included in 0.8.0
94
+
95
+ All functionality included in `pythinker-code` 0.8.0 is preserved:
96
+ review-first workflows (`pythinker review`, `pythinker secscan`,
97
+ `pythinker security-scan`, `pythinker debug`), Reviewflow stateful
98
+ review/fix workflows, the new `code-reviewer` / `security-reviewer` /
99
+ `debugger` subagent roles, hardened review-output validation, and the
100
+ read-only PR artifact helpers (`describe`, `improve` / `suggest`, `ask`,
101
+ `labels`, `changelog`, `docs`, `compliance`, etc.).
102
+
103
+ See [`docs/history/CHANGELOG-pre-0.8.0.md`](docs/history/CHANGELOG-pre-0.8.0.md)
104
+ for the archived pre-reset release-by-release notes.
105
+
106
+ Upgrade with `pythinker update` or `pip install --upgrade pythinker-code==0.8.0`.
@@ -41,6 +41,27 @@ if TYPE_CHECKING:
41
41
  _CWD_LOCK = asyncio.Lock()
42
42
 
43
43
 
44
+ def _safe_git_branch(cwd: str | Path | HostPath) -> str | None:
45
+ """Return the current git branch name, or ``None`` outside a repo / on error."""
46
+ import subprocess
47
+
48
+ try:
49
+ result = subprocess.run(
50
+ ["git", "-C", str(cwd), "branch", "--show-current"],
51
+ capture_output=True,
52
+ encoding="utf-8",
53
+ text=True,
54
+ timeout=1.0,
55
+ check=False,
56
+ )
57
+ except (OSError, subprocess.SubprocessError):
58
+ return None
59
+ if result.returncode != 0:
60
+ return None
61
+ branch = result.stdout.strip()
62
+ return branch or None
63
+
64
+
44
65
  def _patch_session_id(record: dict[str, Any]) -> None:
45
66
  """Inject the current session ID (from ContextVar) into log records."""
46
67
  try:
@@ -723,12 +744,22 @@ class PythinkerCLI:
723
744
  print_update_banner()
724
745
  schedule_auto_update_check()
725
746
 
747
+ work_dir = self._runtime.session.work_dir
726
748
  welcome_info = [
727
- WelcomeInfoItem(
728
- name="Directory", value=str(shorten_home(self._runtime.session.work_dir))
729
- ),
730
- WelcomeInfoItem(name="Session", value=self._runtime.session.id),
749
+ WelcomeInfoItem(name="Directory", value=str(shorten_home(work_dir))),
731
750
  ]
751
+ branch_name = _safe_git_branch(work_dir)
752
+ if branch_name:
753
+ welcome_info.append(WelcomeInfoItem(name="Branch", value=branch_name))
754
+ welcome_info.append(WelcomeInfoItem(name="Session", value=self._runtime.session.id))
755
+ try:
756
+ auto_save_path = str(
757
+ shorten_home(HostPath.unsafe_from_local_path(self._runtime.session.context_file))
758
+ )
759
+ except Exception:
760
+ auto_save_path = ""
761
+ if auto_save_path:
762
+ welcome_info.append(WelcomeInfoItem(name="Auto-save", value=auto_save_path))
732
763
  if base_url := self._env_overrides.get("PYTHINKER_BASE_URL"):
733
764
  welcome_info.append(
734
765
  WelcomeInfoItem(
@@ -0,0 +1,83 @@
1
+ from __future__ import annotations
2
+
3
+ import base64
4
+ import time
5
+ import uuid
6
+ from pathlib import Path
7
+
8
+ from pydantic import BaseModel
9
+
10
+ from pythinker_code.session import Session
11
+ from pythinker_code.utils.io import atomic_json_write
12
+
13
+ _RESTORE_DIR = "file_restore_points"
14
+
15
+
16
+ class FileRestorePoint(BaseModel):
17
+ id: str
18
+ created_at: float
19
+ tool_name: str
20
+ path: Path
21
+ existed: bool
22
+ content_b64: str | None = None
23
+
24
+
25
+ def _restore_dir(session: Session) -> Path:
26
+ path = session.dir / _RESTORE_DIR
27
+ path.mkdir(parents=True, exist_ok=True)
28
+ return path
29
+
30
+
31
+ def _restore_file(session: Session, restore_id: str) -> Path:
32
+ return _restore_dir(session) / f"{restore_id}.json"
33
+
34
+
35
+ def create_file_restore_point(
36
+ session: Session,
37
+ *,
38
+ tool_name: str,
39
+ path: str | Path,
40
+ ) -> FileRestorePoint:
41
+ target = Path(path)
42
+ existed = target.exists()
43
+ content_b64 = None
44
+ if existed and target.is_file():
45
+ content_b64 = base64.b64encode(target.read_bytes()).decode("utf-8")
46
+
47
+ point = FileRestorePoint(
48
+ id=f"{int(time.time() * 1000)}-{uuid.uuid4().hex[:8]}",
49
+ created_at=time.time(),
50
+ tool_name=tool_name,
51
+ path=target,
52
+ existed=existed,
53
+ content_b64=content_b64,
54
+ )
55
+ atomic_json_write(point.model_dump(mode="json"), _restore_file(session, point.id))
56
+ return point
57
+
58
+
59
+ def list_file_restore_points(
60
+ session: Session, *, limit: int | None = None
61
+ ) -> list[FileRestorePoint]:
62
+ points: list[FileRestorePoint] = []
63
+ for path in _restore_dir(session).glob("*.json"):
64
+ try:
65
+ points.append(FileRestorePoint.model_validate_json(path.read_text(encoding="utf-8")))
66
+ except Exception:
67
+ continue
68
+ points.sort(key=lambda point: (point.created_at, point.id), reverse=True)
69
+ return points[:limit] if limit is not None else points
70
+
71
+
72
+ def restore_file_restore_point(session: Session, restore_id: str) -> FileRestorePoint:
73
+ point = FileRestorePoint.model_validate_json(
74
+ _restore_file(session, restore_id).read_text(encoding="utf-8")
75
+ )
76
+ if not point.existed:
77
+ point.path.unlink(missing_ok=True)
78
+ return point
79
+
80
+ point.path.parent.mkdir(parents=True, exist_ok=True)
81
+ content = base64.b64decode(point.content_b64 or "")
82
+ point.path.write_bytes(content)
83
+ return point
@@ -18,6 +18,17 @@ class ApprovalStateData(BaseModel):
18
18
  auto_approve_actions: set[str] = Field(default_factory=set)
19
19
 
20
20
 
21
+ class TrustStateData(BaseModel):
22
+ trusted: bool = False
23
+ safe_mode: bool = True
24
+
25
+
26
+ class AccessibilityStateData(BaseModel):
27
+ plain_output: bool = False
28
+ animations: bool = True
29
+ symbols: Literal["unicode", "ascii"] = "unicode"
30
+
31
+
21
32
  class TodoItemState(BaseModel):
22
33
  """A single todo item stored in session or subagent state."""
23
34
 
@@ -28,6 +39,8 @@ class TodoItemState(BaseModel):
28
39
  class SessionState(BaseModel):
29
40
  version: int = 1
30
41
  approval: ApprovalStateData = Field(default_factory=ApprovalStateData)
42
+ trust: TrustStateData = Field(default_factory=TrustStateData)
43
+ accessibility: AccessibilityStateData = Field(default_factory=AccessibilityStateData)
31
44
  additional_dirs: list[str] = Field(default_factory=list)
32
45
  custom_title: str | None = None
33
46
  title_generated: bool = False
@@ -288,6 +288,9 @@ class Runtime:
288
288
 
289
289
  # Merge invocation flags with persisted session state.
290
290
  effective_yolo = yolo or session.state.approval.yolo
291
+ # An explicit --yolo invocation is already a deliberate trust decision for
292
+ # this run, so it must not deadlock non-interactive/e2e flows behind safe mode.
293
+ effective_safe_mode = False if yolo else session.state.trust.safe_mode
291
294
  if auto and not session.state.approval.auto:
292
295
  session.state.approval.auto = True
293
296
  session.save_state()
@@ -297,12 +300,14 @@ class Runtime:
297
300
  session.state.approval.yolo = approval_state.yolo
298
301
  session.state.approval.auto = approval_state.auto
299
302
  session.state.approval.auto_approve_actions = set(approval_state.auto_approve_actions)
303
+ session.state.trust.safe_mode = approval_state.safe_mode
300
304
  session.save_state()
301
305
 
302
306
  approval_state = ApprovalState(
303
307
  yolo=effective_yolo,
304
308
  auto=session.state.approval.auto,
305
309
  runtime_auto=runtime_auto,
310
+ safe_mode=effective_safe_mode,
306
311
  auto_approve_actions=saved_actions,
307
312
  on_change=_on_approval_change,
308
313
  )
@@ -58,6 +58,7 @@ class ApprovalState:
58
58
  yolo: bool = False,
59
59
  auto: bool = False,
60
60
  runtime_auto: bool = False,
61
+ safe_mode: bool = False,
61
62
  auto_approve_actions: set[str] | None = None,
62
63
  on_change: Callable[[], None] | None = None,
63
64
  ):
@@ -69,6 +70,8 @@ class ApprovalState:
69
70
  """
70
71
  self.runtime_auto = runtime_auto
71
72
  """Invocation-only auto flag, e.g. ``--auto`` or ``--print``. Not persisted."""
73
+ self.safe_mode = safe_mode
74
+ """When true, all auto-approval paths are suppressed."""
72
75
  self.auto_approve_actions: set[str] = auto_approve_actions or set()
73
76
  """Set of action names that should automatically be approved."""
74
77
  self._on_change = on_change
@@ -120,12 +123,18 @@ class Approval:
120
123
  """Toggle invocation-only auto mode without persisting it."""
121
124
  self._state.runtime_auto = auto
122
125
 
126
+ def set_safe_mode(self, safe_mode: bool) -> None:
127
+ self._state.safe_mode = safe_mode
128
+ self._state.notify_change()
129
+
123
130
  def is_auto_approve(self) -> bool:
124
131
  """True when tool calls should be auto-approved.
125
132
 
126
133
  Auto mode implies auto-approve, so this returns True whenever either the
127
134
  explicit yolo flag or auto mode is set.
128
135
  """
136
+ if self._state.safe_mode:
137
+ return False
129
138
  return self._state.yolo or self.is_auto()
130
139
 
131
140
  def is_yolo(self) -> bool:
@@ -2,6 +2,7 @@ from __future__ import annotations
2
2
 
3
3
  import asyncio
4
4
  import contextlib
5
+ import re
5
6
  import time
6
7
  import uuid
7
8
  from collections.abc import Awaitable, Callable, Sequence
@@ -20,7 +21,7 @@ from pythinker_core.chat_provider import (
20
21
  APITimeoutError,
21
22
  RetryableChatProvider,
22
23
  )
23
- from pythinker_core.message import Message
24
+ from pythinker_core.message import Message, ToolCall
24
25
  from tenacity import RetryCallState, retry_if_exception, stop_after_attempt, wait_exponential_jitter
25
26
 
26
27
  from pythinker_code.approval_runtime import (
@@ -166,6 +167,54 @@ def classify_api_error(e: Exception) -> tuple[str, int | None]:
166
167
  type StepStopReason = Literal["no_tool_calls", "tool_rejected"]
167
168
 
168
169
 
170
+ _MISSING_REQUIRED_FIELD_RE = re.compile(
171
+ r"^\s*(?P<field>[A-Za-z_][A-Za-z0-9_\-.]*)\s*\n\s+Field required",
172
+ re.MULTILINE,
173
+ )
174
+
175
+
176
+ def _missing_required_fields_from_validation_error(message: str) -> list[str]:
177
+ """Extract field names from Pydantic's missing-field validation text."""
178
+ if "Error validating JSON arguments:" not in message:
179
+ return []
180
+ return [match.group("field") for match in _MISSING_REQUIRED_FIELD_RE.finditer(message)]
181
+
182
+
183
+ def _is_empty_tool_arguments(tool_call: ToolCall) -> bool:
184
+ raw = tool_call.function.arguments
185
+ return raw is None or raw.strip() in {"", "{}"}
186
+
187
+
188
+ def _malformed_empty_tool_call_summary(
189
+ tool_calls: Sequence[ToolCall], tool_results: Sequence[ToolResult]
190
+ ) -> str | None:
191
+ """Return a concise summary when a step only produced empty invalid tool calls.
192
+
193
+ Some models can get stuck emitting `{}`/empty arguments for tools with required
194
+ fields. Continuing the agent loop just floods the UI with repeated validation
195
+ cards. Detect that dead-end shape and stop after the first invalid batch.
196
+ """
197
+ if not tool_calls or len(tool_calls) != len(tool_results):
198
+ return None
199
+
200
+ calls_by_id = {call.id: call for call in tool_calls}
201
+ missing_by_tool: list[str] = []
202
+ for result in tool_results:
203
+ call = calls_by_id.get(result.tool_call_id)
204
+ if call is None or not _is_empty_tool_arguments(call):
205
+ return None
206
+ if not result.return_value.is_error:
207
+ return None
208
+ fields = _missing_required_fields_from_validation_error(result.return_value.message)
209
+ if not fields:
210
+ return None
211
+ missing_by_tool.append(f"{call.function.name}.{', '.join(fields)}")
212
+
213
+ if not missing_by_tool:
214
+ return None
215
+ return "; ".join(missing_by_tool)
216
+
217
+
169
218
  @dataclass(frozen=True, slots=True)
170
219
  class StepOutcome:
171
220
  stop_reason: StepStopReason
@@ -1249,6 +1298,23 @@ class PythinkerSoul:
1249
1298
  await asyncio.shield(grow_context_task)
1250
1299
  raise
1251
1300
 
1301
+ if invalid_summary := _malformed_empty_tool_call_summary(result.tool_calls, results):
1302
+ message = Message(
1303
+ role="assistant",
1304
+ content=[
1305
+ TextPart(
1306
+ text=(
1307
+ "I couldn't continue because the model emitted malformed empty "
1308
+ "tool calls with missing required arguments: "
1309
+ f"{invalid_summary}. Please retry the request, or switch models "
1310
+ "if this repeats."
1311
+ )
1312
+ )
1313
+ ],
1314
+ )
1315
+ await self._context.append_message(message)
1316
+ return StepOutcome(stop_reason="no_tool_calls", assistant_message=message)
1317
+
1252
1318
  rejected_errors = [
1253
1319
  result.return_value
1254
1320
  for result in results
@@ -6,6 +6,7 @@ from pydantic import BaseModel, Field
6
6
  from pythinker_core.tooling import CallableTool2, ToolError, ToolReturnValue
7
7
  from pythinker_host.path import HostPath
8
8
 
9
+ from pythinker_code.file_restore import create_file_restore_point
9
10
  from pythinker_code.soul.agent import Runtime
10
11
  from pythinker_code.soul.approval import Approval
11
12
  from pythinker_code.soul.permission import check_file_mutation_allowed
@@ -172,6 +173,8 @@ class StrReplaceFile(CallableTool2[Params]):
172
173
  if not result:
173
174
  return result.rejection_error()
174
175
 
176
+ create_file_restore_point(self._runtime.session, tool_name=self.name, path=str(p))
177
+
175
178
  # Write the modified content back to the file
176
179
  await p.write_text(content, encoding="utf-8", errors="replace")
177
180
 
@@ -6,6 +6,7 @@ from pydantic import BaseModel, Field
6
6
  from pythinker_core.tooling import CallableTool2, ToolError, ToolReturnValue
7
7
  from pythinker_host.path import HostPath
8
8
 
9
+ from pythinker_code.file_restore import create_file_restore_point
9
10
  from pythinker_code.soul.agent import Runtime
10
11
  from pythinker_code.soul.approval import Approval
11
12
  from pythinker_code.soul.permission import check_file_mutation_allowed
@@ -158,6 +159,8 @@ class WriteFile(CallableTool2[Params]):
158
159
  if not result:
159
160
  return result.rejection_error()
160
161
 
162
+ create_file_restore_point(self._runtime.session, tool_name=self.name, path=str(p))
163
+
161
164
  # Write content to file
162
165
  match params.mode:
163
166
  case "overwrite":
@@ -1735,6 +1735,10 @@ def _value_style_for_label(label: str, level: WelcomeInfoItem.Level) -> str:
1735
1735
  return "grey39"
1736
1736
  if label == "Model":
1737
1737
  return "bold bright_white"
1738
+ if label == "Branch":
1739
+ return "magenta"
1740
+ if label == "Auto-save":
1741
+ return "grey50"
1738
1742
  return level.value
1739
1743
 
1740
1744
 
@@ -76,6 +76,18 @@ def _accent_style(state: BashExecutionState) -> RichStyle:
76
76
  return tui_rich_style("muted" if state.exclude_from_context else "bash_mode")
77
77
 
78
78
 
79
+ def _command_strip_style(state: BashExecutionState) -> RichStyle:
80
+ """Background tint for the ``$ cmd`` portion of the bash header.
81
+
82
+ Mirrors the dark 256-color strip used by the reference renderer; on light
83
+ themes we use the tool pending background so the strip still reads as a
84
+ contiguous run rather than blending into the surrounding card.
85
+ """
86
+ accent = _accent_style(state)
87
+ bg = tui_rich_style("tool_pending_bg")
88
+ return accent + bg + RichStyle(bold=True)
89
+
90
+
79
91
  def _output_lines(output: str) -> list[str]:
80
92
  cleaned = sanitize_ansi(output).replace("\r\n", "\n").replace("\r", "\n")
81
93
  if cleaned == "":
@@ -122,7 +134,6 @@ def format_bash_command_for_header(command: str, *, expanded: bool) -> str:
122
134
 
123
135
 
124
136
  def _status_header(state: BashExecutionState) -> Text:
125
- accent = _accent_style(state)
126
137
  if state.status in ("pending", "running"):
127
138
  header = _pulsing_marker()
128
139
  header.append("Running", style=tui_rich_style("muted") + RichStyle(bold=True))
@@ -136,11 +147,12 @@ def _status_header(state: BashExecutionState) -> Text:
136
147
  header = Text("✔ ", style=tui_rich_style("success"))
137
148
  header.append("Ran", style=tui_rich_style("success") + RichStyle(bold=True))
138
149
 
150
+ strip = _command_strip_style(state)
139
151
  header.append(" ")
140
- header.append("$ ", style=accent + RichStyle(bold=True))
152
+ header.append("$ ", style=strip)
141
153
  header.append(
142
154
  format_bash_command_for_header(state.command, expanded=state.expanded),
143
- style=accent + RichStyle(bold=True),
155
+ style=strip,
144
156
  )
145
157
  if state.header_suffix:
146
158
  header.append(state.header_suffix, style=tui_rich_style("muted"))