pythinker-code 0.9.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 (796) hide show
  1. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/PKG-INFO +10 -9
  2. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/README.md +9 -8
  3. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/pyproject.toml +1 -1
  4. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/CHANGELOG.md +14 -0
  5. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/app.py +5 -2
  6. pythinker_code-0.10.0/src/pythinker_code/file_restore.py +83 -0
  7. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/session_state.py +13 -0
  8. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/soul/agent.py +5 -0
  9. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/soul/approval.py +9 -0
  10. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/soul/pythinkersoul.py +67 -1
  11. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/file/replace.py +3 -0
  12. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/file/write.py +3 -0
  13. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/components/bash_execution.py +0 -1
  14. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/components/markdown.py +6 -23
  15. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/components/tool_execution.py +4 -0
  16. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/slash.py +236 -0
  17. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/tool_renderers/_render_utils.py +6 -0
  18. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/tool_renderers/agent.py +11 -1
  19. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/tool_renderers/ask_user.py +3 -0
  20. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/tool_renderers/background.py +3 -0
  21. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/tool_renderers/bash.py +3 -0
  22. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/tool_renderers/edit.py +7 -1
  23. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/tool_renderers/find.py +7 -1
  24. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/tool_renderers/grep.py +3 -0
  25. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/tool_renderers/read.py +3 -0
  26. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/tool_renderers/think.py +3 -0
  27. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/tool_renderers/web.py +13 -2
  28. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/tool_renderers/write.py +5 -0
  29. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/clipboard.py +24 -1
  30. pythinker_code-0.9.0/src/pythinker_code/web/static/assets/_baseUniq-CLYo-eYc.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/_baseUniq-W400tXC7.js +1 -1
  31. pythinker_code-0.9.0/src/pythinker_code/web/static/assets/arc-mC4g2zfg.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/arc-34EJCxo9.js +1 -1
  32. pythinker_code-0.9.0/src/pythinker_code/web/static/assets/architectureDiagram-VXUJARFQ-FmgnYRJb.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/architectureDiagram-VXUJARFQ-DwaRWLiC.js +1 -1
  33. pythinker_code-0.9.0/src/pythinker_code/web/static/assets/blockDiagram-VD42YOAC-C0qpB9e0.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/blockDiagram-VD42YOAC-BRSNRd25.js +1 -1
  34. pythinker_code-0.9.0/src/pythinker_code/web/static/assets/c4Diagram-YG6GDRKO-ByVx8Ywn.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/c4Diagram-YG6GDRKO-DD0UYjmm.js +1 -1
  35. pythinker_code-0.10.0/src/pythinker_code/web/static/assets/channel-BGRpA8iD.js +1 -0
  36. pythinker_code-0.9.0/src/pythinker_code/web/static/assets/chunk-4BX2VUAB-wZ1dc8_P.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/chunk-4BX2VUAB-DHgDfkME.js +1 -1
  37. pythinker_code-0.9.0/src/pythinker_code/web/static/assets/chunk-55IACEB6-ylcVoZDW.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/chunk-55IACEB6-BImVKHaT.js +1 -1
  38. pythinker_code-0.9.0/src/pythinker_code/web/static/assets/chunk-B4BG7PRW-B3zDYjiB.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/chunk-B4BG7PRW-BI_7MRlj.js +1 -1
  39. pythinker_code-0.9.0/src/pythinker_code/web/static/assets/chunk-DI55MBZ5-Byycj1Wy.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/chunk-DI55MBZ5-WJQkxwt1.js +1 -1
  40. pythinker_code-0.9.0/src/pythinker_code/web/static/assets/chunk-FMBD7UC4-Cgro0Pqg.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/chunk-FMBD7UC4-DhLSSn1H.js +1 -1
  41. pythinker_code-0.9.0/src/pythinker_code/web/static/assets/chunk-QN33PNHL-BdU7uRdS.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/chunk-QN33PNHL-zZjGr-26.js +1 -1
  42. pythinker_code-0.9.0/src/pythinker_code/web/static/assets/chunk-QZHKN3VN-qD4PdXAn.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/chunk-QZHKN3VN-BS3aXYU5.js +1 -1
  43. pythinker_code-0.9.0/src/pythinker_code/web/static/assets/chunk-TZMSLE5B-BqnSmzp_.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/chunk-TZMSLE5B-DwZ3sgQz.js +1 -1
  44. pythinker_code-0.10.0/src/pythinker_code/web/static/assets/classDiagram-2ON5EDUG-BK5t0xBQ.js +1 -0
  45. pythinker_code-0.10.0/src/pythinker_code/web/static/assets/classDiagram-v2-WZHVMYZB-BK5t0xBQ.js +1 -0
  46. pythinker_code-0.10.0/src/pythinker_code/web/static/assets/clone-Dg1GHx6t.js +1 -0
  47. pythinker_code-0.9.0/src/pythinker_code/web/static/assets/code-block-IT6T5CEO-D-cRJHCv.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/code-block-IT6T5CEO-Bb_0wCjb.js +1 -1
  48. pythinker_code-0.9.0/src/pythinker_code/web/static/assets/cose-bilkent-S5V4N54A-DWFwWp_z.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/cose-bilkent-S5V4N54A-DIEVeUwy.js +1 -1
  49. pythinker_code-0.9.0/src/pythinker_code/web/static/assets/cytoscape.esm-u8DpDuAe.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/cytoscape.esm-Dn1K7hBl.js +1 -1
  50. pythinker_code-0.9.0/src/pythinker_code/web/static/assets/dagre-6UL2VRFP-CSPpX_7_.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/dagre-6UL2VRFP-CkgSwIWx.js +1 -1
  51. pythinker_code-0.9.0/src/pythinker_code/web/static/assets/diagram-PSM6KHXK-DUq5-xrG.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/diagram-PSM6KHXK-CtQrWdyR.js +1 -1
  52. pythinker_code-0.9.0/src/pythinker_code/web/static/assets/diagram-QEK2KX5R-kzcEBaU4.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/diagram-QEK2KX5R-CSDDBGRj.js +1 -1
  53. pythinker_code-0.9.0/src/pythinker_code/web/static/assets/diagram-S2PKOQOG-7geS4IkB.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/diagram-S2PKOQOG-CYxMVXhs.js +1 -1
  54. pythinker_code-0.9.0/src/pythinker_code/web/static/assets/erDiagram-Q2GNP2WA-zVuDNqu7.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/erDiagram-Q2GNP2WA-BTnrd59H.js +1 -1
  55. pythinker_code-0.9.0/src/pythinker_code/web/static/assets/flowDiagram-NV44I4VS-DG_-c07q.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/flowDiagram-NV44I4VS-CEy_PjLC.js +1 -1
  56. pythinker_code-0.9.0/src/pythinker_code/web/static/assets/ganttDiagram-JELNMOA3-MSVeqymQ.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/ganttDiagram-JELNMOA3-36ZRuSR4.js +1 -1
  57. pythinker_code-0.9.0/src/pythinker_code/web/static/assets/gitGraphDiagram-NY62KEGX-BlbwPpDQ.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/gitGraphDiagram-NY62KEGX-CRuujZbj.js +1 -1
  58. pythinker_code-0.9.0/src/pythinker_code/web/static/assets/graph-BbW0SHBo.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/graph-BKh6X7Dn.js +1 -1
  59. pythinker_code-0.9.0/src/pythinker_code/web/static/assets/index-CRxnqkbf.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/index-CC2lLT6r.js +2 -2
  60. pythinker_code-0.9.0/src/pythinker_code/web/static/assets/index-E_AGlbef.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/index-Cn2hJgP_.js +1 -1
  61. pythinker_code-0.9.0/src/pythinker_code/web/static/assets/index-3X9fT2mZ.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/index-DzK6T3bK.js +1 -1
  62. pythinker_code-0.9.0/src/pythinker_code/web/static/assets/infoDiagram-WHAUD3N6-B0KZTmoa.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/infoDiagram-WHAUD3N6-BdpB_TgQ.js +1 -1
  63. pythinker_code-0.9.0/src/pythinker_code/web/static/assets/journeyDiagram-XKPGCS4Q-BvlOjkBR.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/journeyDiagram-XKPGCS4Q-B-Ueb6_0.js +1 -1
  64. pythinker_code-0.9.0/src/pythinker_code/web/static/assets/kanban-definition-3W4ZIXB7-B8ybpTIE.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/kanban-definition-3W4ZIXB7-D4mjpd4e.js +1 -1
  65. pythinker_code-0.9.0/src/pythinker_code/web/static/assets/layout-D_Rax6Qq.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/layout-s1vkLXlV.js +1 -1
  66. pythinker_code-0.9.0/src/pythinker_code/web/static/assets/linear-Cs4yIP8t.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/linear-maaL09f0.js +1 -1
  67. pythinker_code-0.9.0/src/pythinker_code/web/static/assets/mermaid-VLURNSYL-CFV6Atto.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/mermaid-VLURNSYL-Du-05kut.js +7 -7
  68. pythinker_code-0.9.0/src/pythinker_code/web/static/assets/mermaid.core-BY0ELBvq.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/mermaid.core-YI5xJESq.js +5 -5
  69. pythinker_code-0.9.0/src/pythinker_code/web/static/assets/min-Bs8jBXMW.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/min-C-visb5z.js +1 -1
  70. pythinker_code-0.9.0/src/pythinker_code/web/static/assets/mindmap-definition-VGOIOE7T-Cg3rLEXy.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/mindmap-definition-VGOIOE7T-BtL7H-jO.js +1 -1
  71. pythinker_code-0.9.0/src/pythinker_code/web/static/assets/pieDiagram-ADFJNKIX-DwQ97SEk.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/pieDiagram-ADFJNKIX-DzCJMgpy.js +1 -1
  72. pythinker_code-0.9.0/src/pythinker_code/web/static/assets/quadrantDiagram-AYHSOK5B-D-pKdvp1.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/quadrantDiagram-AYHSOK5B-QxkFve7t.js +1 -1
  73. pythinker_code-0.9.0/src/pythinker_code/web/static/assets/requirementDiagram-UZGBJVZJ-M7yGkeOP.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/requirementDiagram-UZGBJVZJ-CaigVcFF.js +1 -1
  74. pythinker_code-0.9.0/src/pythinker_code/web/static/assets/sankeyDiagram-TZEHDZUN-VXTqg5Sd.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/sankeyDiagram-TZEHDZUN-BpueXMqU.js +1 -1
  75. pythinker_code-0.9.0/src/pythinker_code/web/static/assets/sequenceDiagram-WL72ISMW-BjVjf4_O.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/sequenceDiagram-WL72ISMW-DF4777Nm.js +1 -1
  76. pythinker_code-0.9.0/src/pythinker_code/web/static/assets/stateDiagram-FKZM4ZOC-BUkn1DGi.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/stateDiagram-FKZM4ZOC-B_zFmVzG.js +1 -1
  77. pythinker_code-0.10.0/src/pythinker_code/web/static/assets/stateDiagram-v2-4FDKWEC3-9CQoRlCH.js +1 -0
  78. pythinker_code-0.9.0/src/pythinker_code/web/static/assets/timeline-definition-IT6M3QCI-D58FWsX4.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/timeline-definition-IT6M3QCI-BYaJbz91.js +1 -1
  79. pythinker_code-0.9.0/src/pythinker_code/web/static/assets/treemap-KMMF4GRG-ky_39j1t.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/treemap-KMMF4GRG-BxgG9HnC.js +1 -1
  80. pythinker_code-0.9.0/src/pythinker_code/web/static/assets/xychartDiagram-PRI3JC2R-DXAaaG9C.js → pythinker_code-0.10.0/src/pythinker_code/web/static/assets/xychartDiagram-PRI3JC2R-87KaLLq9.js +1 -1
  81. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/index.html +1 -1
  82. pythinker_code-0.9.0/src/pythinker_code/web/static/assets/channel-tCyj3CPG.js +0 -1
  83. pythinker_code-0.9.0/src/pythinker_code/web/static/assets/classDiagram-2ON5EDUG-OEjNCjm2.js +0 -1
  84. pythinker_code-0.9.0/src/pythinker_code/web/static/assets/classDiagram-v2-WZHVMYZB-OEjNCjm2.js +0 -1
  85. pythinker_code-0.9.0/src/pythinker_code/web/static/assets/clone-Dz5N6JGI.js +0 -1
  86. pythinker_code-0.9.0/src/pythinker_code/web/static/assets/stateDiagram-v2-4FDKWEC3-CWssh2Re.js +0 -1
  87. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/LICENSE +0 -0
  88. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/NOTICE +0 -0
  89. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/__init__.py +0 -0
  90. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/__main__.py +0 -0
  91. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/acp/AGENTS.md +0 -0
  92. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/acp/__init__.py +0 -0
  93. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/acp/convert.py +0 -0
  94. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/acp/host.py +0 -0
  95. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/acp/mcp.py +0 -0
  96. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/acp/server.py +0 -0
  97. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/acp/session.py +0 -0
  98. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/acp/tools.py +0 -0
  99. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/acp/types.py +0 -0
  100. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/acp/version.py +0 -0
  101. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/agents/default/agent.yaml +0 -0
  102. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/agents/default/code_reviewer.yaml +0 -0
  103. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/agents/default/coder.yaml +0 -0
  104. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/agents/default/debugger.yaml +0 -0
  105. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/agents/default/explore.yaml +0 -0
  106. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/agents/default/implementer.yaml +0 -0
  107. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/agents/default/plan.yaml +0 -0
  108. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/agents/default/review.yaml +0 -0
  109. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/agents/default/security_reviewer.yaml +0 -0
  110. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/agents/default/system.md +0 -0
  111. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/agents/default/verifier.yaml +0 -0
  112. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/agents/okabe/agent.yaml +0 -0
  113. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/agentspec.py +0 -0
  114. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/approval_runtime/__init__.py +0 -0
  115. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/approval_runtime/models.py +0 -0
  116. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/approval_runtime/runtime.py +0 -0
  117. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/auth/__init__.py +0 -0
  118. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/auth/anthropic_direct.py +0 -0
  119. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/auth/deepseek.py +0 -0
  120. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/auth/github_feedback.py +0 -0
  121. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/auth/lm_studio.py +0 -0
  122. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/auth/minimax.py +0 -0
  123. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/auth/oauth.py +0 -0
  124. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/auth/ollama.py +0 -0
  125. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/auth/openai.py +0 -0
  126. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/auth/opencode_go.py +0 -0
  127. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/auth/openrouter.py +0 -0
  128. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/auth/platforms.py +0 -0
  129. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/background/__init__.py +0 -0
  130. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/background/agent_runner.py +0 -0
  131. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/background/ids.py +0 -0
  132. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/background/manager.py +0 -0
  133. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/background/models.py +0 -0
  134. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/background/store.py +0 -0
  135. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/background/summary.py +0 -0
  136. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/background/worker.py +0 -0
  137. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/cli/__init__.py +0 -0
  138. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/cli/__main__.py +0 -0
  139. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/cli/_lazy_group.py +0 -0
  140. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/cli/debug.py +0 -0
  141. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/cli/export.py +0 -0
  142. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/cli/info.py +0 -0
  143. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/cli/mcp.py +0 -0
  144. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/cli/plugin.py +0 -0
  145. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/cli/review.py +0 -0
  146. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/cli/secscan.py +0 -0
  147. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/cli/security_scan.py +0 -0
  148. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/cli/toad.py +0 -0
  149. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/cli/update.py +0 -0
  150. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/cli/vis.py +0 -0
  151. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/cli/web.py +0 -0
  152. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/config.py +0 -0
  153. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/constant.py +0 -0
  154. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/events.py +0 -0
  155. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/exception.py +0 -0
  156. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/extensions.py +0 -0
  157. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/hooks/__init__.py +0 -0
  158. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/hooks/config.py +0 -0
  159. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/hooks/engine.py +0 -0
  160. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/hooks/events.py +0 -0
  161. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/hooks/runner.py +0 -0
  162. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/llm.py +0 -0
  163. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/metadata.py +0 -0
  164. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/notifications/__init__.py +0 -0
  165. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/notifications/llm.py +0 -0
  166. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/notifications/manager.py +0 -0
  167. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/notifications/models.py +0 -0
  168. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/notifications/notifier.py +0 -0
  169. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/notifications/store.py +0 -0
  170. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/notifications/wire.py +0 -0
  171. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/plugin/__init__.py +0 -0
  172. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/plugin/manager.py +0 -0
  173. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/plugin/tool.py +0 -0
  174. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/prompt_templates.py +0 -0
  175. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/prompts/__init__.py +0 -0
  176. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/prompts/compact.md +0 -0
  177. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/prompts/init.md +0 -0
  178. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/py.typed +0 -0
  179. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/session.py +0 -0
  180. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/session_fork.py +0 -0
  181. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/share.py +0 -0
  182. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/skill/__init__.py +0 -0
  183. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/skill/flow/__init__.py +0 -0
  184. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/skill/flow/d2.py +0 -0
  185. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/skill/flow/mermaid.py +0 -0
  186. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/skills/pythinker-code-help/SKILL.md +0 -0
  187. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/skills/skill-creator/SKILL.md +0 -0
  188. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/soul/__init__.py +0 -0
  189. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/soul/btw.py +0 -0
  190. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/soul/compaction.py +0 -0
  191. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/soul/context.py +0 -0
  192. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/soul/denwarenji.py +0 -0
  193. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/soul/dynamic_injection.py +0 -0
  194. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/soul/dynamic_injections/__init__.py +0 -0
  195. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/soul/dynamic_injections/auto_mode.py +0 -0
  196. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/soul/dynamic_injections/plan_mode.py +0 -0
  197. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/soul/message.py +0 -0
  198. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/soul/permission.py +0 -0
  199. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/soul/slash.py +0 -0
  200. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/soul/toolset.py +0 -0
  201. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/subagents/__init__.py +0 -0
  202. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/subagents/builder.py +0 -0
  203. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/subagents/core.py +0 -0
  204. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/subagents/discovery.py +0 -0
  205. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/subagents/git_context.py +0 -0
  206. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/subagents/models.py +0 -0
  207. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/subagents/output.py +0 -0
  208. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/subagents/registry.py +0 -0
  209. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/subagents/runner.py +0 -0
  210. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/subagents/store.py +0 -0
  211. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/telemetry/__init__.py +0 -0
  212. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/telemetry/config.py +0 -0
  213. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/telemetry/crash.py +0 -0
  214. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/telemetry/errors.py +0 -0
  215. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/telemetry/metrics.py +0 -0
  216. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/telemetry/otel.py +0 -0
  217. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/telemetry/sentry.py +0 -0
  218. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/telemetry/sink.py +0 -0
  219. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/AGENTS.md +0 -0
  220. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/__init__.py +0 -0
  221. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/agent/__init__.py +0 -0
  222. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/agent/description.md +0 -0
  223. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/ask_user/__init__.py +0 -0
  224. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/ask_user/description.md +0 -0
  225. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/background/__init__.py +0 -0
  226. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/background/list.md +0 -0
  227. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/background/output.md +0 -0
  228. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/background/stop.md +0 -0
  229. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/display.py +0 -0
  230. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/dmail/__init__.py +0 -0
  231. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/dmail/dmail.md +0 -0
  232. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/file/__init__.py +0 -0
  233. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/file/glob.md +0 -0
  234. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/file/glob.py +0 -0
  235. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/file/grep.md +0 -0
  236. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/file/grep_local.py +0 -0
  237. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/file/plan_mode.py +0 -0
  238. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/file/read.md +0 -0
  239. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/file/read.py +0 -0
  240. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/file/read_media.md +0 -0
  241. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/file/read_media.py +0 -0
  242. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/file/replace.md +0 -0
  243. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/file/utils.py +0 -0
  244. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/file/write.md +0 -0
  245. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/plan/__init__.py +0 -0
  246. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/plan/description.md +0 -0
  247. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/plan/enter.py +0 -0
  248. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/plan/enter_description.md +0 -0
  249. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/plan/handoff.py +0 -0
  250. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/plan/heroes.py +0 -0
  251. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/shell/__init__.py +0 -0
  252. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/shell/bash.md +0 -0
  253. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/shell/powershell.md +0 -0
  254. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/test.py +0 -0
  255. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/think/__init__.py +0 -0
  256. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/think/think.md +0 -0
  257. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/todo/__init__.py +0 -0
  258. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/todo/set_todo_list.md +0 -0
  259. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/utils.py +0 -0
  260. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/web/__init__.py +0 -0
  261. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/web/fetch.md +0 -0
  262. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/web/fetch.py +0 -0
  263. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/web/search.md +0 -0
  264. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/tools/web/search.py +0 -0
  265. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/__init__.py +0 -0
  266. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/acp/__init__.py +0 -0
  267. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/print/__init__.py +0 -0
  268. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/print/visualize.py +0 -0
  269. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/__init__.py +0 -0
  270. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/components/__init__.py +0 -0
  271. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/components/base.py +0 -0
  272. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/components/bordered_loader.py +0 -0
  273. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/components/diff.py +0 -0
  274. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/components/footer.py +0 -0
  275. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/components/key_hints.py +0 -0
  276. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/components/messages.py +0 -0
  277. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/components/render_utils.py +0 -0
  278. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/components/settings_list.py +0 -0
  279. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/components/special_messages.py +0 -0
  280. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/console.py +0 -0
  281. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/debug.py +0 -0
  282. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/echo.py +0 -0
  283. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/export_import.py +0 -0
  284. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/keyboard.py +0 -0
  285. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/keymap.py +0 -0
  286. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/mcp_status.py +0 -0
  287. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/model_picker.py +0 -0
  288. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/oauth.py +0 -0
  289. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/placeholders.py +0 -0
  290. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/prompt.py +0 -0
  291. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/replay.py +0 -0
  292. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/selector.py +0 -0
  293. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/selectors/__init__.py +0 -0
  294. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/selectors/extension.py +0 -0
  295. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/selectors/oauth.py +0 -0
  296. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/selectors/settings.py +0 -0
  297. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/selectors/show_images.py +0 -0
  298. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/selectors/theme.py +0 -0
  299. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/selectors/thinking.py +0 -0
  300. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/session_picker.py +0 -0
  301. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/setup.py +0 -0
  302. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/spinner_words.py +0 -0
  303. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/startup.py +0 -0
  304. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/task_browser.py +0 -0
  305. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/tool_renderers/__init__.py +0 -0
  306. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/tool_renderers/generic.py +0 -0
  307. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/tool_renderers/plan.py +0 -0
  308. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/tool_renderers/todo.py +0 -0
  309. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/update.py +0 -0
  310. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/usage.py +0 -0
  311. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/usage_adapters/__init__.py +0 -0
  312. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/usage_adapters/anthropic_admin.py +0 -0
  313. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/usage_adapters/base.py +0 -0
  314. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/usage_adapters/deepseek.py +0 -0
  315. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/usage_adapters/minimax.py +0 -0
  316. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/usage_adapters/openai_admin.py +0 -0
  317. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/usage_adapters/openai_chatgpt.py +0 -0
  318. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/usage_adapters/opencode_go.py +0 -0
  319. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/usage_adapters/openrouter.py +0 -0
  320. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/usage_adapters/pythinker.py +0 -0
  321. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/usage_adapters/pythinker_ai.py +0 -0
  322. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/usage_render.py +0 -0
  323. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/visualize/__init__.py +0 -0
  324. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/visualize/_approval_panel.py +0 -0
  325. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/visualize/_blocks.py +0 -0
  326. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/visualize/_btw_panel.py +0 -0
  327. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/visualize/_input_router.py +0 -0
  328. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/visualize/_interactive.py +0 -0
  329. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/visualize/_live_view.py +0 -0
  330. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/visualize/_question_panel.py +0 -0
  331. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/shell/visualize/_worklog.py +0 -0
  332. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/theme.py +0 -0
  333. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/ui/tui_config.py +0 -0
  334. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/usage_ratelimit_cache.py +0 -0
  335. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/__init__.py +0 -0
  336. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/aiohttp.py +0 -0
  337. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/aioqueue.py +0 -0
  338. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/broadcast.py +0 -0
  339. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/changelog.py +0 -0
  340. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/datetime.py +0 -0
  341. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/diff.py +0 -0
  342. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/editor.py +0 -0
  343. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/environment.py +0 -0
  344. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/envvar.py +0 -0
  345. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/export.py +0 -0
  346. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/file_filter.py +0 -0
  347. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/frontmatter.py +0 -0
  348. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/io.py +0 -0
  349. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/logging.py +0 -0
  350. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/media_tags.py +0 -0
  351. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/message.py +0 -0
  352. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/path.py +0 -0
  353. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/proctitle.py +0 -0
  354. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/proxy.py +0 -0
  355. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/pyinstaller.py +0 -0
  356. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/rich/__init__.py +0 -0
  357. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/rich/columns.py +0 -0
  358. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/rich/diff_render.py +0 -0
  359. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/rich/markdown.py +0 -0
  360. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/rich/markdown_sample.md +0 -0
  361. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/rich/markdown_sample_short.md +0 -0
  362. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/rich/syntax.py +0 -0
  363. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/sensitive.py +0 -0
  364. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/server.py +0 -0
  365. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/signals.py +0 -0
  366. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/slashcmd.py +0 -0
  367. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/string.py +0 -0
  368. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/subprocess_env.py +0 -0
  369. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/term.py +0 -0
  370. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/utils/typing.py +0 -0
  371. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/vis/__init__.py +0 -0
  372. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/vis/api/__init__.py +0 -0
  373. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/vis/api/sessions.py +0 -0
  374. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/vis/api/statistics.py +0 -0
  375. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/vis/api/system.py +0 -0
  376. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/vis/app.py +0 -0
  377. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/vis/static/assets/highlighted-body-B3W2YXNL-CY1rtwrX.js +0 -0
  378. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/vis/static/assets/index-DSRInNnm.css +0 -0
  379. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/vis/static/assets/index-DgmTI2M_.js +0 -0
  380. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/vis/static/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
  381. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/vis/static/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
  382. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/vis/static/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
  383. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/vis/static/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
  384. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/vis/static/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
  385. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/vis/static/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
  386. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/vis/static/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
  387. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/vis/static/index.html +0 -0
  388. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/__init__.py +0 -0
  389. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/api/__init__.py +0 -0
  390. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/api/config.py +0 -0
  391. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/api/open_in.py +0 -0
  392. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/api/sessions.py +0 -0
  393. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/app.py +0 -0
  394. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/auth.py +0 -0
  395. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/models.py +0 -0
  396. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/runner/__init__.py +0 -0
  397. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/runner/messages.py +0 -0
  398. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/runner/process.py +0 -0
  399. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/runner/worker.py +0 -0
  400. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  401. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  402. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  403. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  404. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  405. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  406. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  407. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  408. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  409. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  410. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  411. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  412. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  413. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  414. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  415. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  416. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  417. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  418. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  419. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  420. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  421. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  422. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  423. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  424. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  425. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  426. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  427. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  428. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  429. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  430. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  431. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  432. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  433. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  434. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  435. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  436. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  437. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  438. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  439. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  440. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  441. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  442. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  443. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  444. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  445. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  446. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  447. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  448. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  449. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  450. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  451. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  452. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  453. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  454. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  455. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  456. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  457. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  458. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  459. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/abap-BdImnpbu.js +0 -0
  460. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/actionscript-3-CfeIJUat.js +0 -0
  461. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/ada-bCR0ucgS.js +0 -0
  462. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/andromeeda-C-Jbm3Hp.js +0 -0
  463. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/angular-html-CU67Zn6k.js +0 -0
  464. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/angular-ts-BwZT4LLn.js +0 -0
  465. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/apache-Pmp26Uib.js +0 -0
  466. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/apex-D8_7TLub.js +0 -0
  467. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/apl-dKokRX4l.js +0 -0
  468. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/applescript-Co6uUVPk.js +0 -0
  469. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/ara-BRHolxvo.js +0 -0
  470. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/asciidoc-Dv7Oe6Be.js +0 -0
  471. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/asm-D_Q5rh1f.js +0 -0
  472. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/astro-CbQHKStN.js +0 -0
  473. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/aurora-x-D-2ljcwZ.js +0 -0
  474. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/awk-DMzUqQB5.js +0 -0
  475. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/ayu-dark-CmMr59Fi.js +0 -0
  476. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/ballerina-BFfxhgS-.js +0 -0
  477. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/bat-BkioyH1T.js +0 -0
  478. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/beancount-k_qm7-4y.js +0 -0
  479. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/berry-uYugtg8r.js +0 -0
  480. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/bibtex-CHM0blh-.js +0 -0
  481. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/bicep-Bmn6On1c.js +0 -0
  482. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/blade-D4QpJJKB.js +0 -0
  483. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/bsl-BO_Y6i37.js +0 -0
  484. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/c-BIGW1oBm.js +0 -0
  485. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/c3-VCDPK7BO.js +0 -0
  486. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/cadence-Bv_4Rxtq.js +0 -0
  487. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/cairo-KRGpt6FW.js +0 -0
  488. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/catppuccin-frappe-DFWUc33u.js +0 -0
  489. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/catppuccin-latte-C9dUb6Cb.js +0 -0
  490. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/catppuccin-macchiato-DQyhUUbL.js +0 -0
  491. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/catppuccin-mocha-D87Tk5Gz.js +0 -0
  492. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/clarity-D53aC0YG.js +0 -0
  493. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/clojure-P80f7IUj.js +0 -0
  494. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/cmake-D1j8_8rp.js +0 -0
  495. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/cobol-nwyudZeR.js +0 -0
  496. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/codeowners-Bp6g37R7.js +0 -0
  497. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/codeql-DsOJ9woJ.js +0 -0
  498. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/coffee-Ch7k5sss.js +0 -0
  499. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/common-lisp-Cg-RD9OK.js +0 -0
  500. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/coq-DkFqJrB1.js +0 -0
  501. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/cpp-CofmeUqb.js +0 -0
  502. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/crystal-tKQVLTB8.js +0 -0
  503. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/csharp-K5feNrxe.js +0 -0
  504. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/css-DPfMkruS.js +0 -0
  505. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/csv-fuZLfV_i.js +0 -0
  506. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/cue-D82EKSYY.js +0 -0
  507. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/cypher-COkxafJQ.js +0 -0
  508. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/d-85-TOEBH.js +0 -0
  509. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/dark-plus-C3mMm8J8.js +0 -0
  510. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/dart-CF10PKvl.js +0 -0
  511. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/dax-CEL-wOlO.js +0 -0
  512. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/defaultLocale-DX6XiGOO.js +0 -0
  513. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/desktop-BmXAJ9_W.js +0 -0
  514. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/diff-D97Zzqfu.js +0 -0
  515. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/docker-BcOcwvcX.js +0 -0
  516. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/dotenv-Da5cRb03.js +0 -0
  517. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/dracula-BzJJZx-M.js +0 -0
  518. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/dracula-soft-BXkSAIEj.js +0 -0
  519. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/dream-maker-BtqSS_iP.js +0 -0
  520. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/edge-BkV0erSs.js +0 -0
  521. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/elixir-CDX3lj18.js +0 -0
  522. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/elm-DbKCFpqz.js +0 -0
  523. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/emacs-lisp-C9XAeP06.js +0 -0
  524. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/erb-BOJIQeun.js +0 -0
  525. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/erlang-DsQrWhSR.js +0 -0
  526. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/everforest-dark-BgDCqdQA.js +0 -0
  527. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/everforest-light-C8M2exoo.js +0 -0
  528. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/fennel-BYunw83y.js +0 -0
  529. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/fish-BvzEVeQv.js +0 -0
  530. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/fluent-C4IJs8-o.js +0 -0
  531. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/fortran-fixed-form-CkoXwp7k.js +0 -0
  532. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/fortran-free-form-BxgE0vQu.js +0 -0
  533. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/fsharp-CXgrBDvD.js +0 -0
  534. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/gdresource-B7Tvp0Sc.js +0 -0
  535. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/gdscript-DTMYz4Jt.js +0 -0
  536. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/gdshader-DkwncUOv.js +0 -0
  537. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/genie-D0YGMca9.js +0 -0
  538. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/gherkin-DyxjwDmM.js +0 -0
  539. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/git-commit-F4YmCXRG.js +0 -0
  540. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/git-rebase-r7XF79zn.js +0 -0
  541. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/github-dark-DHJKELXO.js +0 -0
  542. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/github-dark-default-Cuk6v7N8.js +0 -0
  543. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/github-dark-dimmed-DH5Ifo-i.js +0 -0
  544. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/github-dark-high-contrast-E3gJ1_iC.js +0 -0
  545. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/github-light-DAi9KRSo.js +0 -0
  546. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/github-light-default-D7oLnXFd.js +0 -0
  547. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/github-light-high-contrast-BfjtVDDH.js +0 -0
  548. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/gleam-BspZqrRM.js +0 -0
  549. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/glimmer-js-Rg0-pVw9.js +0 -0
  550. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/glimmer-ts-U6CK756n.js +0 -0
  551. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/glsl-DplSGwfg.js +0 -0
  552. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/gn-n2N0HUVH.js +0 -0
  553. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/gnuplot-DdkO51Og.js +0 -0
  554. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/go-Dn2_MT6a.js +0 -0
  555. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/graphql-ChdNCCLP.js +0 -0
  556. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/groovy-gcz8RCvz.js +0 -0
  557. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/gruvbox-dark-hard-CFHQjOhq.js +0 -0
  558. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/gruvbox-dark-medium-GsRaNv29.js +0 -0
  559. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/gruvbox-dark-soft-CVdnzihN.js +0 -0
  560. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/gruvbox-light-hard-CH1njM8p.js +0 -0
  561. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/gruvbox-light-medium-DRw_LuNl.js +0 -0
  562. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/gruvbox-light-soft-hJgmCMqR.js +0 -0
  563. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/hack-CaT9iCJl.js +0 -0
  564. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/haml-B8DHNrY2.js +0 -0
  565. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/handlebars-BL8al0AC.js +0 -0
  566. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/haskell-Df6bDoY_.js +0 -0
  567. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/haxe-CzTSHFRz.js +0 -0
  568. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/hcl-BWvSN4gD.js +0 -0
  569. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/hjson-D5-asLiD.js +0 -0
  570. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/hlsl-D3lLCCz7.js +0 -0
  571. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/houston-DnULxvSX.js +0 -0
  572. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/html-GMplVEZG.js +0 -0
  573. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/html-derivative-BFtXZ54Q.js +0 -0
  574. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/http-jrhK8wxY.js +0 -0
  575. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/hurl-irOxFIW8.js +0 -0
  576. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/hxml-Bvhsp5Yf.js +0 -0
  577. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/hy-DFXneXwc.js +0 -0
  578. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/imba-DGztddWO.js +0 -0
  579. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/index-BpoLgcEt.js +0 -0
  580. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/index-CzV_vCfu.css +0 -0
  581. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/index-DI2oedCt.js +0 -0
  582. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/ini-BEwlwnbL.js +0 -0
  583. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/init-Gi6I4Gst.js +0 -0
  584. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
  585. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
  586. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
  587. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
  588. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
  589. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
  590. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
  591. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/java-CylS5w8V.js +0 -0
  592. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/javascript-wDzz0qaB.js +0 -0
  593. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/jinja-4LBKfQ-Z.js +0 -0
  594. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/jison-wvAkD_A8.js +0 -0
  595. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/json-Cp-IABpG.js +0 -0
  596. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/json5-C9tS-k6U.js +0 -0
  597. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/jsonc-Des-eS-w.js +0 -0
  598. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/jsonl-DcaNXYhu.js +0 -0
  599. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/jsonnet-DFQXde-d.js +0 -0
  600. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/jssm-C2t-YnRu.js +0 -0
  601. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/jsx-g9-lgVsj.js +0 -0
  602. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/julia-CxzCAyBv.js +0 -0
  603. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/kanagawa-dragon-CkXjmgJE.js +0 -0
  604. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/kanagawa-lotus-CfQXZHmo.js +0 -0
  605. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/kanagawa-wave-DWedfzmr.js +0 -0
  606. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/katex-D2lIc1rk.css +0 -0
  607. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/kdl-DV7GczEv.js +0 -0
  608. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/kotlin-BdnUsdx6.js +0 -0
  609. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/kusto-DZf3V79B.js +0 -0
  610. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/laserwave-DUszq2jm.js +0 -0
  611. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/latex-B4uzh10-.js +0 -0
  612. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/lean-BZvkOJ9d.js +0 -0
  613. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/less-B1dDrJ26.js +0 -0
  614. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/light-plus-B7mTdjB0.js +0 -0
  615. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/liquid-DYVedYrR.js +0 -0
  616. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/llvm-BtvRca6l.js +0 -0
  617. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/log-2UxHyX5q.js +0 -0
  618. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/logo-BtOb2qkB.js +0 -0
  619. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/lua-BbnMAYS6.js +0 -0
  620. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/luau-C-HG3fhB.js +0 -0
  621. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/make-CHLpvVh8.js +0 -0
  622. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/markdown-Cvjx9yec.js +0 -0
  623. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/marko-DZsq8hO1.js +0 -0
  624. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/material-theme-D5KoaKCx.js +0 -0
  625. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/material-theme-darker-BfHTSMKl.js +0 -0
  626. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/material-theme-lighter-B0m2ddpp.js +0 -0
  627. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/material-theme-ocean-CyktbL80.js +0 -0
  628. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/material-theme-palenight-Csfq5Kiy.js +0 -0
  629. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/matlab-D7o27uSR.js +0 -0
  630. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/mdc-DUICxH0z.js +0 -0
  631. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/mdx-Cmh6b_Ma.js +0 -0
  632. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/mermaid-VLURNSYL-B2P5VJ9v.css +0 -0
  633. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/mermaid-mWjccvbQ.js +0 -0
  634. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/min-dark-CafNBF8u.js +0 -0
  635. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/min-light-CTRr51gU.js +0 -0
  636. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/mipsasm-CKIfxQSi.js +0 -0
  637. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/mojo-B93PlW-d.js +0 -0
  638. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/monokai-D4h5O-jR.js +0 -0
  639. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/moonbit-Ba13S78F.js +0 -0
  640. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/move-Bu9oaDYs.js +0 -0
  641. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/narrat-DRg8JJMk.js +0 -0
  642. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/nextflow-BrzmwbiE.js +0 -0
  643. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/nginx-DknmC5AR.js +0 -0
  644. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/night-owl-C39BiMTA.js +0 -0
  645. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/nim-CVrawwO9.js +0 -0
  646. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/nix-CwoSXNpI.js +0 -0
  647. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/nord-Ddv68eIx.js +0 -0
  648. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/nushell-C-sUppwS.js +0 -0
  649. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/objective-c-DXmwc3jG.js +0 -0
  650. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/objective-cpp-CLxacb5B.js +0 -0
  651. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/ocaml-C0hk2d4L.js +0 -0
  652. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/one-dark-pro-DVMEJ2y_.js +0 -0
  653. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/one-light-PoHY5YXO.js +0 -0
  654. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/openscad-C4EeE6gA.js +0 -0
  655. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/ordinal-Cboi1Yqb.js +0 -0
  656. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/pascal-D93ZcfNL.js +0 -0
  657. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/perl-C0TMdlhV.js +0 -0
  658. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/php-CDn_0X-4.js +0 -0
  659. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/pkl-u5AG7uiY.js +0 -0
  660. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/plastic-3e1v2bzS.js +0 -0
  661. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/plsql-ChMvpjG-.js +0 -0
  662. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/po-BTJTHyun.js +0 -0
  663. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/poimandres-CS3Unz2-.js +0 -0
  664. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/polar-C0HS_06l.js +0 -0
  665. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/postcss-CXtECtnM.js +0 -0
  666. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/powerquery-CEu0bR-o.js +0 -0
  667. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/powershell-Dpen1YoG.js +0 -0
  668. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/prisma-Dd19v3D-.js +0 -0
  669. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/prolog-CbFg5uaA.js +0 -0
  670. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/proto-C7zT0LnQ.js +0 -0
  671. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/pug-CGlum2m_.js +0 -0
  672. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/puppet-BMWR74SV.js +0 -0
  673. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/purescript-CklMAg4u.js +0 -0
  674. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/python-B6aJPvgy.js +0 -0
  675. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/qml-3beO22l8.js +0 -0
  676. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/qmldir-C8lEn-DE.js +0 -0
  677. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/qss-IeuSbFQv.js +0 -0
  678. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/r-Dspwwk_N.js +0 -0
  679. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/racket-BqYA7rlc.js +0 -0
  680. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/raku-DXvB9xmW.js +0 -0
  681. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/razor-C1TweQQi.js +0 -0
  682. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/red-bN70gL4F.js +0 -0
  683. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/reg-C-SQnVFl.js +0 -0
  684. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/regexp-CDVJQ6XC.js +0 -0
  685. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/rel-C3B-1QV4.js +0 -0
  686. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/riscv-BM1_JUlF.js +0 -0
  687. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/rose-pine-dawn-DHQR4-dF.js +0 -0
  688. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/rose-pine-moon-D4_iv3hh.js +0 -0
  689. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/rose-pine-qdsjHGoJ.js +0 -0
  690. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/rosmsg-BJDFO7_C.js +0 -0
  691. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/rst-B0xPkSld.js +0 -0
  692. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/ruby-BvKwtOVI.js +0 -0
  693. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/rust-B1yitclQ.js +0 -0
  694. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/sas-cz2c8ADy.js +0 -0
  695. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/sass-Cj5Yp3dK.js +0 -0
  696. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/scala-C151Ov-r.js +0 -0
  697. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/scheme-C98Dy4si.js +0 -0
  698. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/scss-OYdSNvt2.js +0 -0
  699. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/sdbl-DVxCFoDh.js +0 -0
  700. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/shaderlab-Dg9Lc6iA.js +0 -0
  701. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/shellscript-Yzrsuije.js +0 -0
  702. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/shellsession-BADoaaVG.js +0 -0
  703. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/slack-dark-BthQWCQV.js +0 -0
  704. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/slack-ochin-DqwNpetd.js +0 -0
  705. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/smalltalk-BERRCDM3.js +0 -0
  706. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/snazzy-light-Bw305WKR.js +0 -0
  707. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/solarized-dark-DXbdFlpD.js +0 -0
  708. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/solarized-light-L9t79GZl.js +0 -0
  709. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/solidity-rGO070M0.js +0 -0
  710. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/soy-Brmx7dQM.js +0 -0
  711. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/sparql-rVzFXLq3.js +0 -0
  712. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/splunk-BtCnVYZw.js +0 -0
  713. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/sql-BLtJtn59.js +0 -0
  714. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/ssh-config-_ykCGR6B.js +0 -0
  715. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/stata-BH5u7GGu.js +0 -0
  716. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/stylus-BEDo0Tqx.js +0 -0
  717. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/svelte-zxCyuUbr.js +0 -0
  718. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/swift-Dg5xB15N.js +0 -0
  719. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/synthwave-84-CbfX1IO0.js +0 -0
  720. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/system-verilog-CnnmHF94.js +0 -0
  721. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/systemd-4A_iFExJ.js +0 -0
  722. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/talonscript-CkByrt1z.js +0 -0
  723. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/tasl-QIJgUcNo.js +0 -0
  724. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/tcl-dwOrl1Do.js +0 -0
  725. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/templ-W15q3VgB.js +0 -0
  726. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/terraform-BETggiCN.js +0 -0
  727. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/tex-CvyZ59Mk.js +0 -0
  728. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/tokyo-night-hegEt444.js +0 -0
  729. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/toml-vGWfd6FD.js +0 -0
  730. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/ts-tags-zn1MmPIZ.js +0 -0
  731. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/tsv-B_m7g4N7.js +0 -0
  732. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/tsx-COt5Ahok.js +0 -0
  733. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/turtle-BsS91CYL.js +0 -0
  734. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/twig-CO9l9SDP.js +0 -0
  735. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/typescript-BPQ3VLAy.js +0 -0
  736. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/typespec-BGHnOYBU.js +0 -0
  737. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/typst-DHCkPAjA.js +0 -0
  738. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/v-BcVCzyr7.js +0 -0
  739. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/vala-CsfeWuGM.js +0 -0
  740. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/vb-D17OF-Vu.js +0 -0
  741. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/verilog-BQ8w6xss.js +0 -0
  742. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/vesper-DU1UobuO.js +0 -0
  743. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/vhdl-CeAyd5Ju.js +0 -0
  744. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/viml-CJc9bBzg.js +0 -0
  745. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/vitesse-black-Bkuqu6BP.js +0 -0
  746. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/vitesse-dark-D0r3Knsf.js +0 -0
  747. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/vitesse-light-CVO1_9PV.js +0 -0
  748. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/vue-DN_0RTcg.js +0 -0
  749. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/vue-html-AaS7Mt5G.js +0 -0
  750. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/vue-vine-CQOfvN7w.js +0 -0
  751. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/vyper-CDx5xZoG.js +0 -0
  752. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/wasm-CG6Dc4jp.js +0 -0
  753. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/wasm-MzD3tlZU.js +0 -0
  754. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/wenyan-BV7otONQ.js +0 -0
  755. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/wgsl-Dx-B1_4e.js +0 -0
  756. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/wikitext-BhOHFoWU.js +0 -0
  757. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/wit-5i3qLPDT.js +0 -0
  758. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/wolfram-lXgVvXCa.js +0 -0
  759. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/xml-sdJ4AIDG.js +0 -0
  760. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/xsl-CtQFsRM5.js +0 -0
  761. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/yaml-Buea-lGh.js +0 -0
  762. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/zenscript-DVFEvuxE.js +0 -0
  763. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/assets/zig-VOosw3JB.js +0 -0
  764. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/brand/apple-touch-icon.png +0 -0
  765. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/brand/arctecture.webp +0 -0
  766. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/brand/bimi-logo.svg +0 -0
  767. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/brand/favicon.ico +0 -0
  768. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/brand/fonts/dm-sans-latin-ext.woff2 +0 -0
  769. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/brand/fonts/dm-sans-latin.woff2 +0 -0
  770. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/brand/fonts/instrument-sans-latin-ext.woff2 +0 -0
  771. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/brand/fonts/instrument-sans-latin.woff2 +0 -0
  772. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/brand/fonts/instrument-serif-latin-ext.woff2 +0 -0
  773. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/brand/fonts/instrument-serif-latin.woff2 +0 -0
  774. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-italic-latin-ext.woff2 +0 -0
  775. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-italic-latin.woff2 +0 -0
  776. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-latin-ext.woff2 +0 -0
  777. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-latin.woff2 +0 -0
  778. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/brand/fonts/roboto-latin-ext.woff2 +0 -0
  779. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/brand/fonts/roboto-latin.woff2 +0 -0
  780. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/brand/icon-192.png +0 -0
  781. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/brand/icon-512.png +0 -0
  782. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/brand/icon.svg +0 -0
  783. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/brand/logo.png +0 -0
  784. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/brand/pythinker_animated.svg +0 -0
  785. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/brand/robots.txt +0 -0
  786. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/static/logo.png +0 -0
  787. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/store/__init__.py +0 -0
  788. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/web/store/sessions.py +0 -0
  789. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/wire/__init__.py +0 -0
  790. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/wire/file.py +0 -0
  791. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/wire/jsonrpc.py +0 -0
  792. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/wire/protocol.py +0 -0
  793. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/wire/root_hub.py +0 -0
  794. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/wire/serde.py +0 -0
  795. {pythinker_code-0.9.0 → pythinker_code-0.10.0}/src/pythinker_code/wire/server.py +0 -0
  796. {pythinker_code-0.9.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.9.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,16 +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.9.0
118
+ ## 🆕 What's New in 0.10.0
119
119
 
120
- - **Cleaner TUI tool card backgrounds removed.** The grey pending/running overlay behind tool execution cards (subagents, bash, reads, etc.) is gone. Only user-message blocks keep a background tint, keeping visual focus on your input.
121
- - **Welcome screen enhancements.** The startup panel now shows the current git branch (highlighted in magenta) and the session auto-save path alongside the working directory and session ID.
122
- - **Bash header strip styling.** The `$ command` strip in bash execution headers now uses the `tool_pending_bg` theme token, matching the reference renderer across light and dark themes.
123
- - **Pythinker markdown renderer in all messages.** User, assistant, and custom messages now render through `pythinker_markdown` for consistent heading, code-block, and table styling.
124
- - **Expanded theme palette.** A new `MarkdownColors` / `markdown_rich_style` subsystem in `theme.py` covers headings, emphasis, inline code, links, blockquotes, table borders, code-block backgrounds, and spinner states with separate dark and light palettes.
125
- - **Improved tool fallback renderers.** Call fallbacks now show a status glyph (`✔`/`✘`/`●`); result fallbacks truncate at 60 lines / 4000 chars with an italicised note and use correct theme tokens.
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.
126
127
 
127
- Upgrade with `pythinker update` or `pip install --upgrade pythinker-code==0.9.0`.
128
+ Upgrade with `pythinker update` or `pip install --upgrade pythinker-code==0.10.0`.
128
129
 
129
130
 
130
131
  ---
@@ -50,16 +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.9.0
53
+ ## 🆕 What's New in 0.10.0
54
54
 
55
- - **Cleaner TUI tool card backgrounds removed.** The grey pending/running overlay behind tool execution cards (subagents, bash, reads, etc.) is gone. Only user-message blocks keep a background tint, keeping visual focus on your input.
56
- - **Welcome screen enhancements.** The startup panel now shows the current git branch (highlighted in magenta) and the session auto-save path alongside the working directory and session ID.
57
- - **Bash header strip styling.** The `$ command` strip in bash execution headers now uses the `tool_pending_bg` theme token, matching the reference renderer across light and dark themes.
58
- - **Pythinker markdown renderer in all messages.** User, assistant, and custom messages now render through `pythinker_markdown` for consistent heading, code-block, and table styling.
59
- - **Expanded theme palette.** A new `MarkdownColors` / `markdown_rich_style` subsystem in `theme.py` covers headings, emphasis, inline code, links, blockquotes, table borders, code-block backgrounds, and spinner states with separate dark and light palettes.
60
- - **Improved tool fallback renderers.** Call fallbacks now show a status glyph (`✔`/`✘`/`●`); result fallbacks truncate at 60 lines / 4000 chars with an italicised note and use correct theme tokens.
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.
61
62
 
62
- Upgrade with `pythinker update` or `pip install --upgrade pythinker-code==0.9.0`.
63
+ Upgrade with `pythinker update` or `pip install --upgrade pythinker-code==0.10.0`.
63
64
 
64
65
 
65
66
  ---
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "pythinker-code"
3
- version = "0.9.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"
@@ -15,6 +15,20 @@ GitHub Releases page; `0.8.0` is the new starting line.
15
15
 
16
16
  ## Unreleased
17
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
+
18
32
  ## 0.9.0 (2026-05-21)
19
33
 
20
34
  ### What changed in this release
@@ -41,7 +41,7 @@ if TYPE_CHECKING:
41
41
  _CWD_LOCK = asyncio.Lock()
42
42
 
43
43
 
44
- def _safe_git_branch(cwd: str | Path) -> str | None:
44
+ def _safe_git_branch(cwd: str | Path | HostPath) -> str | None:
45
45
  """Return the current git branch name, or ``None`` outside a repo / on error."""
46
46
  import subprocess
47
47
 
@@ -49,6 +49,7 @@ def _safe_git_branch(cwd: str | Path) -> str | None:
49
49
  result = subprocess.run(
50
50
  ["git", "-C", str(cwd), "branch", "--show-current"],
51
51
  capture_output=True,
52
+ encoding="utf-8",
52
53
  text=True,
53
54
  timeout=1.0,
54
55
  check=False,
@@ -752,7 +753,9 @@ class PythinkerCLI:
752
753
  welcome_info.append(WelcomeInfoItem(name="Branch", value=branch_name))
753
754
  welcome_info.append(WelcomeInfoItem(name="Session", value=self._runtime.session.id))
754
755
  try:
755
- auto_save_path = str(shorten_home(self._runtime.session.context_file))
756
+ auto_save_path = str(
757
+ shorten_home(HostPath.unsafe_from_local_path(self._runtime.session.context_file))
758
+ )
756
759
  except Exception:
757
760
  auto_save_path = ""
758
761
  if auto_save_path:
@@ -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":
@@ -134,7 +134,6 @@ def format_bash_command_for_header(command: str, *, expanded: bool) -> str:
134
134
 
135
135
 
136
136
  def _status_header(state: BashExecutionState) -> Text:
137
- accent = _accent_style(state)
138
137
  if state.status in ("pending", "running"):
139
138
  header = _pulsing_marker()
140
139
  header.append("Running", style=tui_rich_style("muted") + RichStyle(bold=True))
@@ -18,13 +18,14 @@ from __future__ import annotations
18
18
 
19
19
  from dataclasses import dataclass, field
20
20
 
21
- from rich.console import Console, ConsoleOptions, Group, RenderResult, RenderableType
21
+ from rich.console import Console, ConsoleOptions, RenderableType, RenderResult
22
22
  from rich.markdown import CodeBlock, Markdown
23
23
  from rich.padding import Padding
24
24
  from rich.rule import Rule
25
25
  from rich.style import Style as RichStyle
26
26
  from rich.syntax import Syntax
27
27
  from rich.text import Text
28
+ from rich.theme import Theme
28
29
 
29
30
  from pythinker_code.ui.theme import ThemeName, get_markdown_colors
30
31
 
@@ -38,9 +39,7 @@ __all__ = [
38
39
  class _BorderedCodeBlock(CodeBlock):
39
40
  """Code block with ``╭─ lang`` / ``╰─`` border rules and background tint."""
40
41
 
41
- def __rich_console__(
42
- self, console: Console, options: ConsoleOptions
43
- ) -> RenderResult:
42
+ def __rich_console__(self, console: Console, options: ConsoleOptions) -> RenderResult:
44
43
  colors = get_markdown_colors()
45
44
  border_style = RichStyle(color=colors.code_block_border, bold=True)
46
45
  bg_style = RichStyle(bgcolor=colors.code_block_bg) if colors.code_block_bg else RichStyle()
@@ -96,26 +95,12 @@ class PythinkerMarkdown(Markdown):
96
95
 
97
96
  elements = {**Markdown.elements, "fence": _BorderedCodeBlock, "code_block": _BorderedCodeBlock}
98
97
 
99
- def __rich_console__(
100
- self, console: Console, options: ConsoleOptions
101
- ) -> RenderResult:
98
+ def __rich_console__(self, console: Console, options: ConsoleOptions) -> RenderResult:
102
99
  overrides = _markdown_style_overrides()
103
- with console.use_theme(_PythinkerMarkdownTheme(overrides)):
100
+ with console.use_theme(Theme(overrides, inherit=True)):
104
101
  yield from super().__rich_console__(console, options)
105
102
 
106
103
 
107
- class _PythinkerMarkdownTheme:
108
- """Lightweight Rich ``Theme`` shim — only enough to satisfy ``Console.use_theme``."""
109
-
110
- def __init__(self, styles: dict[str, RichStyle]) -> None:
111
- from rich.theme import Theme
112
-
113
- self._theme = Theme(styles, inherit=True)
114
-
115
- def __getattr__(self, name: str): # type: ignore[no-untyped-def]
116
- return getattr(self._theme, name)
117
-
118
-
119
104
  def pythinker_markdown(text: str, *, code_theme: str = "monokai") -> PythinkerMarkdown:
120
105
  """Build a :class:`PythinkerMarkdown` with the palette pre-wired."""
121
106
  return PythinkerMarkdown(text, code_theme=code_theme)
@@ -199,9 +184,7 @@ def _find_stream_safe_boundary(text: str) -> int | None:
199
184
  open_fence = opener
200
185
  cursor = line_end
201
186
  continue
202
- if not content.strip():
203
- last_boundary = line_end
204
- elif content.rstrip().endswith(_SENTENCE_END):
187
+ if not content.strip() or content.rstrip().endswith(_SENTENCE_END):
205
188
  last_boundary = line_end
206
189
  cursor = line_end
207
190
  return last_boundary
@@ -235,6 +235,10 @@ class ToolExecutionComponent:
235
235
  return None
236
236
 
237
237
  def _background_style(self) -> Style | None:
238
+ if self._status in _PENDING_LIKE:
239
+ return tui_rich_style("tool_pending_bg")
240
+ if self._status in (ToolExecutionStatus.ERROR, ToolExecutionStatus.DENIED):
241
+ return tui_rich_style("tool_error_bg")
238
242
  return None
239
243
 
240
244
  def _call_fallback(self) -> RenderableType: