pythinker-code 0.28.0__tar.gz → 0.29.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 (859) hide show
  1. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/PKG-INFO +21 -21
  2. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/README.md +19 -19
  3. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/pyproject.toml +2 -2
  4. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/CHANGELOG.md +11 -0
  5. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/acp/server.py +13 -0
  6. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/app.py +39 -14
  7. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/auth/anthropic_direct.py +2 -1
  8. pythinker_code-0.29.0/src/pythinker_code/auth/browser_login_page.py +100 -0
  9. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/auth/deepseek.py +2 -1
  10. pythinker_code-0.29.0/src/pythinker_code/auth/minimax.py +382 -0
  11. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/auth/oauth.py +2 -1
  12. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/auth/openai.py +12 -66
  13. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/auth/opencode_go.py +17 -1
  14. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/auth/openrouter.py +2 -1
  15. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/auth/platforms.py +24 -4
  16. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/cli/__init__.py +72 -24
  17. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/cli/review.py +5 -0
  18. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/config.py +27 -6
  19. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/hooks/engine.py +76 -3
  20. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/llm.py +55 -26
  21. pythinker_code-0.29.0/src/pythinker_code/session_recap.py +400 -0
  22. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/soul/__init__.py +7 -0
  23. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/soul/agent.py +1 -0
  24. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/soul/approval.py +102 -3
  25. pythinker_code-0.29.0/src/pythinker_code/soul/deliberation.py +92 -0
  26. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/soul/dynamic_injections/auto_mode.py +21 -1
  27. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/soul/permission.py +120 -0
  28. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/soul/pythinkersoul.py +94 -4
  29. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/soul/slash.py +13 -0
  30. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/subagents/builder.py +1 -0
  31. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/subagents/models.py +3 -0
  32. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/subagents/runner.py +3 -0
  33. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/subagents/store.py +3 -0
  34. pythinker_code-0.29.0/src/pythinker_code/thinking.py +156 -0
  35. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/tools/agent/__init__.py +6 -0
  36. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/tools/ask_user/__init__.py +48 -13
  37. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/ui/print/visualize.py +14 -5
  38. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/ui/shell/__init__.py +12 -0
  39. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/ui/shell/components/render_utils.py +6 -1
  40. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/ui/shell/components/report.py +23 -10
  41. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/ui/shell/components/tool_execution.py +3 -0
  42. pythinker_code-0.29.0/src/pythinker_code/ui/shell/echo.py +41 -0
  43. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/ui/shell/keymap.py +4 -4
  44. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/ui/shell/motion.py +84 -24
  45. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/ui/shell/oauth.py +75 -6
  46. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/ui/shell/prompt.py +342 -37
  47. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/ui/shell/selectors/settings.py +54 -7
  48. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/ui/shell/selectors/thinking.py +18 -10
  49. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/ui/shell/setup.py +23 -14
  50. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/ui/shell/slash.py +89 -34
  51. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/ui/shell/spacing.py +7 -2
  52. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/ui/shell/tips.py +1 -1
  53. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/ui/shell/tool_renderers/_file_diff.py +43 -4
  54. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/ui/shell/tool_renderers/ask_user.py +5 -2
  55. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/ui/shell/tool_renderers/edit.py +12 -2
  56. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/ui/shell/tool_renderers/write.py +20 -4
  57. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/ui/shell/visualize/__init__.py +9 -2
  58. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/ui/shell/visualize/_blocks.py +54 -3
  59. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/ui/shell/visualize/_interactive.py +40 -3
  60. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/ui/shell/visualize/_live_view.py +89 -33
  61. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/ui/shell/visualize/_worklog.py +4 -2
  62. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/ui/theme.py +59 -0
  63. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/utils/rich/__init__.py +6 -5
  64. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/utils/rich/markdown.py +15 -4
  65. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/api/config.py +18 -2
  66. pythinker_code-0.28.0/src/pythinker_code/web/static/assets/_baseUniq-GashHLgw.js → pythinker_code-0.29.0/src/pythinker_code/web/static/assets/_baseUniq-CgxMXC-c.js +1 -1
  67. pythinker_code-0.28.0/src/pythinker_code/web/static/assets/arc-DEWPFwW9.js → pythinker_code-0.29.0/src/pythinker_code/web/static/assets/arc-CRBBy4uQ.js +1 -1
  68. pythinker_code-0.28.0/src/pythinker_code/web/static/assets/architectureDiagram-VXUJARFQ-Dwj_75SA.js → pythinker_code-0.29.0/src/pythinker_code/web/static/assets/architectureDiagram-VXUJARFQ-OftFBVm7.js +1 -1
  69. pythinker_code-0.28.0/src/pythinker_code/web/static/assets/blockDiagram-VD42YOAC-BimuzGAk.js → pythinker_code-0.29.0/src/pythinker_code/web/static/assets/blockDiagram-VD42YOAC-C4k2jrm0.js +1 -1
  70. pythinker_code-0.28.0/src/pythinker_code/web/static/assets/c4Diagram-YG6GDRKO-B8L7fvII.js → pythinker_code-0.29.0/src/pythinker_code/web/static/assets/c4Diagram-YG6GDRKO-BdUvalhu.js +1 -1
  71. pythinker_code-0.29.0/src/pythinker_code/web/static/assets/channel-DENEbOlS.js +1 -0
  72. pythinker_code-0.28.0/src/pythinker_code/web/static/assets/chunk-4BX2VUAB-qrOmRQpW.js → pythinker_code-0.29.0/src/pythinker_code/web/static/assets/chunk-4BX2VUAB-DuQ-vLEI.js +1 -1
  73. pythinker_code-0.28.0/src/pythinker_code/web/static/assets/chunk-55IACEB6-tr65WtB9.js → pythinker_code-0.29.0/src/pythinker_code/web/static/assets/chunk-55IACEB6-BNb_KJbG.js +1 -1
  74. pythinker_code-0.28.0/src/pythinker_code/web/static/assets/chunk-B4BG7PRW-BIL16yOB.js → pythinker_code-0.29.0/src/pythinker_code/web/static/assets/chunk-B4BG7PRW-XSZOj5hR.js +1 -1
  75. pythinker_code-0.28.0/src/pythinker_code/web/static/assets/chunk-DI55MBZ5-BhTHAnWR.js → pythinker_code-0.29.0/src/pythinker_code/web/static/assets/chunk-DI55MBZ5-CgPwcBB1.js +1 -1
  76. pythinker_code-0.28.0/src/pythinker_code/web/static/assets/chunk-FMBD7UC4-CJGXTY-C.js → pythinker_code-0.29.0/src/pythinker_code/web/static/assets/chunk-FMBD7UC4-CpnM4Jzk.js +1 -1
  77. pythinker_code-0.28.0/src/pythinker_code/web/static/assets/chunk-QN33PNHL-BEdYgE4-.js → pythinker_code-0.29.0/src/pythinker_code/web/static/assets/chunk-QN33PNHL-CprAV0g9.js +1 -1
  78. pythinker_code-0.28.0/src/pythinker_code/web/static/assets/chunk-QZHKN3VN-CcwBy9_m.js → pythinker_code-0.29.0/src/pythinker_code/web/static/assets/chunk-QZHKN3VN-CSX0Cg2Q.js +1 -1
  79. pythinker_code-0.28.0/src/pythinker_code/web/static/assets/chunk-TZMSLE5B-BubpIDxH.js → pythinker_code-0.29.0/src/pythinker_code/web/static/assets/chunk-TZMSLE5B-Drg_j0k7.js +1 -1
  80. pythinker_code-0.29.0/src/pythinker_code/web/static/assets/classDiagram-2ON5EDUG-BFyueyY8.js +1 -0
  81. pythinker_code-0.29.0/src/pythinker_code/web/static/assets/classDiagram-v2-WZHVMYZB-BFyueyY8.js +1 -0
  82. pythinker_code-0.29.0/src/pythinker_code/web/static/assets/clone-tPJSvyCb.js +1 -0
  83. pythinker_code-0.28.0/src/pythinker_code/web/static/assets/code-block-IT6T5CEO-D04qHW6c.js → pythinker_code-0.29.0/src/pythinker_code/web/static/assets/code-block-IT6T5CEO-B8jYG9WA.js +1 -1
  84. pythinker_code-0.28.0/src/pythinker_code/web/static/assets/cose-bilkent-S5V4N54A-BPawTe1E.js → pythinker_code-0.29.0/src/pythinker_code/web/static/assets/cose-bilkent-S5V4N54A-BIe5qbQp.js +1 -1
  85. pythinker_code-0.28.0/src/pythinker_code/web/static/assets/cytoscape.esm-RnhU_9Wa.js → pythinker_code-0.29.0/src/pythinker_code/web/static/assets/cytoscape.esm-DRJzot-J.js +1 -1
  86. pythinker_code-0.28.0/src/pythinker_code/web/static/assets/dagre-6UL2VRFP-UWFQqM0K.js → pythinker_code-0.29.0/src/pythinker_code/web/static/assets/dagre-6UL2VRFP-Bs3qk1_w.js +1 -1
  87. pythinker_code-0.28.0/src/pythinker_code/web/static/assets/diagram-PSM6KHXK-CLjjfotY.js → pythinker_code-0.29.0/src/pythinker_code/web/static/assets/diagram-PSM6KHXK-Dynk2DSf.js +1 -1
  88. pythinker_code-0.28.0/src/pythinker_code/web/static/assets/diagram-QEK2KX5R-qpL5YNE7.js → pythinker_code-0.29.0/src/pythinker_code/web/static/assets/diagram-QEK2KX5R-BMxuViqa.js +1 -1
  89. pythinker_code-0.28.0/src/pythinker_code/web/static/assets/diagram-S2PKOQOG-CbFvh8Cw.js → pythinker_code-0.29.0/src/pythinker_code/web/static/assets/diagram-S2PKOQOG-CFNWP-1D.js +1 -1
  90. pythinker_code-0.28.0/src/pythinker_code/web/static/assets/erDiagram-Q2GNP2WA-CjYV8vm9.js → pythinker_code-0.29.0/src/pythinker_code/web/static/assets/erDiagram-Q2GNP2WA-Cs2Iq4y8.js +1 -1
  91. pythinker_code-0.28.0/src/pythinker_code/web/static/assets/flowDiagram-NV44I4VS-C2fVr1_G.js → pythinker_code-0.29.0/src/pythinker_code/web/static/assets/flowDiagram-NV44I4VS-BA32P1Qd.js +1 -1
  92. pythinker_code-0.28.0/src/pythinker_code/web/static/assets/ganttDiagram-JELNMOA3-DLZrDPZ0.js → pythinker_code-0.29.0/src/pythinker_code/web/static/assets/ganttDiagram-JELNMOA3-CMp4umlU.js +1 -1
  93. pythinker_code-0.28.0/src/pythinker_code/web/static/assets/gitGraphDiagram-NY62KEGX-DuEcFZx1.js → pythinker_code-0.29.0/src/pythinker_code/web/static/assets/gitGraphDiagram-NY62KEGX-BzIUZUBd.js +1 -1
  94. pythinker_code-0.28.0/src/pythinker_code/web/static/assets/graph-B2G9FUQn.js → pythinker_code-0.29.0/src/pythinker_code/web/static/assets/graph-CtCSApyt.js +1 -1
  95. pythinker_code-0.28.0/src/pythinker_code/web/static/assets/index-B87_cLpx.js → pythinker_code-0.29.0/src/pythinker_code/web/static/assets/index-Bk12GGJc.js +1 -1
  96. pythinker_code-0.28.0/src/pythinker_code/web/static/assets/index-CWw7hKJL.js → pythinker_code-0.29.0/src/pythinker_code/web/static/assets/index-CWH3DyiO.js +1 -1
  97. pythinker_code-0.28.0/src/pythinker_code/web/static/assets/index-DaTrJm4j.js → pythinker_code-0.29.0/src/pythinker_code/web/static/assets/index-CZWExEIJ.js +2 -2
  98. pythinker_code-0.28.0/src/pythinker_code/web/static/assets/infoDiagram-WHAUD3N6-BP4wXDgY.js → pythinker_code-0.29.0/src/pythinker_code/web/static/assets/infoDiagram-WHAUD3N6-DmqBfX87.js +1 -1
  99. pythinker_code-0.28.0/src/pythinker_code/web/static/assets/journeyDiagram-XKPGCS4Q-DRoRmtcl.js → pythinker_code-0.29.0/src/pythinker_code/web/static/assets/journeyDiagram-XKPGCS4Q-4LBlzlYS.js +1 -1
  100. pythinker_code-0.28.0/src/pythinker_code/web/static/assets/kanban-definition-3W4ZIXB7-ChS3i5hy.js → pythinker_code-0.29.0/src/pythinker_code/web/static/assets/kanban-definition-3W4ZIXB7-DMJpOiYR.js +1 -1
  101. pythinker_code-0.28.0/src/pythinker_code/web/static/assets/layout-Ci-xrvgb.js → pythinker_code-0.29.0/src/pythinker_code/web/static/assets/layout-Bk_EsMXR.js +1 -1
  102. pythinker_code-0.28.0/src/pythinker_code/web/static/assets/linear-B2P_3hKc.js → pythinker_code-0.29.0/src/pythinker_code/web/static/assets/linear-ByrBHe5Q.js +1 -1
  103. pythinker_code-0.28.0/src/pythinker_code/web/static/assets/mermaid-VLURNSYL-DT1aPIMQ.js → pythinker_code-0.29.0/src/pythinker_code/web/static/assets/mermaid-VLURNSYL-zSj5EdJk.js +7 -7
  104. pythinker_code-0.28.0/src/pythinker_code/web/static/assets/mermaid.core-CIXBcBwk.js → pythinker_code-0.29.0/src/pythinker_code/web/static/assets/mermaid.core-aCzfRgz1.js +5 -5
  105. pythinker_code-0.28.0/src/pythinker_code/web/static/assets/min-CXhhlW7H.js → pythinker_code-0.29.0/src/pythinker_code/web/static/assets/min-BwR5RWWD.js +1 -1
  106. pythinker_code-0.28.0/src/pythinker_code/web/static/assets/mindmap-definition-VGOIOE7T-DTIinMnI.js → pythinker_code-0.29.0/src/pythinker_code/web/static/assets/mindmap-definition-VGOIOE7T-DhswlT4L.js +1 -1
  107. pythinker_code-0.28.0/src/pythinker_code/web/static/assets/pieDiagram-ADFJNKIX-CIBCliKO.js → pythinker_code-0.29.0/src/pythinker_code/web/static/assets/pieDiagram-ADFJNKIX-CEG4ThTJ.js +1 -1
  108. pythinker_code-0.28.0/src/pythinker_code/web/static/assets/quadrantDiagram-AYHSOK5B-CxSjcZcX.js → pythinker_code-0.29.0/src/pythinker_code/web/static/assets/quadrantDiagram-AYHSOK5B-aJJ2CanL.js +1 -1
  109. pythinker_code-0.28.0/src/pythinker_code/web/static/assets/requirementDiagram-UZGBJVZJ-DAAVV1OD.js → pythinker_code-0.29.0/src/pythinker_code/web/static/assets/requirementDiagram-UZGBJVZJ-nuQiRopE.js +1 -1
  110. pythinker_code-0.28.0/src/pythinker_code/web/static/assets/sankeyDiagram-TZEHDZUN-DFebIFvN.js → pythinker_code-0.29.0/src/pythinker_code/web/static/assets/sankeyDiagram-TZEHDZUN-Bgmma15o.js +1 -1
  111. pythinker_code-0.28.0/src/pythinker_code/web/static/assets/sequenceDiagram-WL72ISMW-DioeBndC.js → pythinker_code-0.29.0/src/pythinker_code/web/static/assets/sequenceDiagram-WL72ISMW-Qnkd9aEf.js +1 -1
  112. pythinker_code-0.28.0/src/pythinker_code/web/static/assets/stateDiagram-FKZM4ZOC-QgkZgi2p.js → pythinker_code-0.29.0/src/pythinker_code/web/static/assets/stateDiagram-FKZM4ZOC-BmerzPrd.js +1 -1
  113. pythinker_code-0.29.0/src/pythinker_code/web/static/assets/stateDiagram-v2-4FDKWEC3-Ut5FiACF.js +1 -0
  114. pythinker_code-0.28.0/src/pythinker_code/web/static/assets/timeline-definition-IT6M3QCI-BDygaett.js → pythinker_code-0.29.0/src/pythinker_code/web/static/assets/timeline-definition-IT6M3QCI-DVLQ2yQz.js +1 -1
  115. pythinker_code-0.28.0/src/pythinker_code/web/static/assets/treemap-KMMF4GRG-B-glFAnf.js → pythinker_code-0.29.0/src/pythinker_code/web/static/assets/treemap-KMMF4GRG-DxALlWo8.js +1 -1
  116. pythinker_code-0.28.0/src/pythinker_code/web/static/assets/xychartDiagram-PRI3JC2R-DAXy-uTd.js → pythinker_code-0.29.0/src/pythinker_code/web/static/assets/xychartDiagram-PRI3JC2R-D8-15cDk.js +1 -1
  117. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/index.html +1 -1
  118. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/wire/server.py +3 -1
  119. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/wire/types.py +26 -0
  120. pythinker_code-0.28.0/src/pythinker_code/auth/minimax.py +0 -203
  121. pythinker_code-0.28.0/src/pythinker_code/ui/shell/echo.py +0 -23
  122. pythinker_code-0.28.0/src/pythinker_code/web/static/assets/channel-B_RyZ3Hg.js +0 -1
  123. pythinker_code-0.28.0/src/pythinker_code/web/static/assets/classDiagram-2ON5EDUG-Bq3OpdHm.js +0 -1
  124. pythinker_code-0.28.0/src/pythinker_code/web/static/assets/classDiagram-v2-WZHVMYZB-Bq3OpdHm.js +0 -1
  125. pythinker_code-0.28.0/src/pythinker_code/web/static/assets/clone-GvlpQ0ej.js +0 -1
  126. pythinker_code-0.28.0/src/pythinker_code/web/static/assets/stateDiagram-v2-4FDKWEC3-sBpGXbnZ.js +0 -1
  127. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/LICENSE +0 -0
  128. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/NOTICE +0 -0
  129. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/__init__.py +0 -0
  130. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/__main__.py +0 -0
  131. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/acp/AGENTS.md +0 -0
  132. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/acp/__init__.py +0 -0
  133. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/acp/convert.py +0 -0
  134. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/acp/host.py +0 -0
  135. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/acp/mcp.py +0 -0
  136. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/acp/session.py +0 -0
  137. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/acp/tools.py +0 -0
  138. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/acp/types.py +0 -0
  139. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/acp/version.py +0 -0
  140. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/agents/default/agent.yaml +0 -0
  141. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/agents/default/code_reviewer.yaml +0 -0
  142. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/agents/default/coder.yaml +0 -0
  143. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/agents/default/debugger.yaml +0 -0
  144. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/agents/default/explore.yaml +0 -0
  145. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/agents/default/implementer.yaml +0 -0
  146. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/agents/default/judge.yaml +0 -0
  147. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/agents/default/plan.yaml +0 -0
  148. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/agents/default/review.yaml +0 -0
  149. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/agents/default/security_reviewer.yaml +0 -0
  150. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/agents/default/system.md +0 -0
  151. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/agents/default/verifier.yaml +0 -0
  152. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/agents/okabe/agent.yaml +0 -0
  153. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/agentspec.py +0 -0
  154. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/approval_runtime/__init__.py +0 -0
  155. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/approval_runtime/models.py +0 -0
  156. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/approval_runtime/runtime.py +0 -0
  157. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/auth/__init__.py +0 -0
  158. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/auth/github_feedback.py +0 -0
  159. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/auth/lm_studio.py +0 -0
  160. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/auth/ollama.py +0 -0
  161. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/background/__init__.py +0 -0
  162. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/background/agent_runner.py +0 -0
  163. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/background/ids.py +0 -0
  164. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/background/manager.py +0 -0
  165. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/background/models.py +0 -0
  166. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/background/store.py +0 -0
  167. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/background/summary.py +0 -0
  168. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/background/worker.py +0 -0
  169. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/cli/__main__.py +0 -0
  170. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/cli/_lazy_group.py +0 -0
  171. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/cli/debug.py +0 -0
  172. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/cli/export.py +0 -0
  173. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/cli/info.py +0 -0
  174. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/cli/mcp.py +0 -0
  175. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/cli/plugin.py +0 -0
  176. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/cli/secscan.py +0 -0
  177. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/cli/security_scan.py +0 -0
  178. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/cli/skill.py +0 -0
  179. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/cli/toad.py +0 -0
  180. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/cli/update.py +0 -0
  181. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/cli/vis.py +0 -0
  182. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/cli/web.py +0 -0
  183. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/constant.py +0 -0
  184. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/events.py +0 -0
  185. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/exception.py +0 -0
  186. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/execution_profiles.py +0 -0
  187. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/extensions.py +0 -0
  188. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/feedback.py +0 -0
  189. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/feedback_repo.py +0 -0
  190. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/file_restore.py +0 -0
  191. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/hooks/__init__.py +0 -0
  192. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/hooks/config.py +0 -0
  193. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/hooks/events.py +0 -0
  194. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/hooks/runner.py +0 -0
  195. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/memory/__init__.py +0 -0
  196. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/memory/consolidation.py +0 -0
  197. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/memory/harvest.py +0 -0
  198. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/memory/recall.py +0 -0
  199. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/memory/recap.py +0 -0
  200. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/memory/retriever.py +0 -0
  201. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/memory/sanitize.py +0 -0
  202. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/metadata.py +0 -0
  203. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/native.py +0 -0
  204. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/notifications/__init__.py +0 -0
  205. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/notifications/llm.py +0 -0
  206. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/notifications/manager.py +0 -0
  207. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/notifications/models.py +0 -0
  208. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/notifications/notifier.py +0 -0
  209. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/notifications/store.py +0 -0
  210. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/notifications/wire.py +0 -0
  211. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/plugin/__init__.py +0 -0
  212. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/plugin/manager.py +0 -0
  213. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/plugin/tool.py +0 -0
  214. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/project_memory.py +0 -0
  215. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/prompt_templates.py +0 -0
  216. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/prompts/__init__.py +0 -0
  217. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/prompts/compact.md +0 -0
  218. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/prompts/init.md +0 -0
  219. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/py.typed +0 -0
  220. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/scratchpad.py +0 -0
  221. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/session.py +0 -0
  222. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/session_fork.py +0 -0
  223. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/session_state.py +0 -0
  224. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/share.py +0 -0
  225. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/skill/__init__.py +0 -0
  226. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/skill/flow/__init__.py +0 -0
  227. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/skill/flow/d2.py +0 -0
  228. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/skill/flow/mermaid.py +0 -0
  229. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/skill/lockfile.py +0 -0
  230. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/skills/check-impl-against-spec/SKILL.md +0 -0
  231. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/skills/create-pr/SKILL.md +0 -0
  232. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/skills/diagnose-ci-failures/SKILL.md +0 -0
  233. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/skills/fix-errors/SKILL.md +0 -0
  234. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/skills/implement-specs/SKILL.md +0 -0
  235. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/skills/pr-walkthrough/SKILL.md +0 -0
  236. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/skills/pythinker-code-help/SKILL.md +0 -0
  237. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/skills/reproduce-bug-report/SKILL.md +0 -0
  238. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/skills/resolve-merge-conflicts/SKILL.md +0 -0
  239. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/skills/review-pr/SKILL.md +0 -0
  240. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/skills/skill-creator/SKILL.md +0 -0
  241. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/skills/spec-driven-implementation/SKILL.md +0 -0
  242. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/skills/write-product-spec/SKILL.md +0 -0
  243. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/skills/write-tech-spec/SKILL.md +0 -0
  244. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/soul/btw.py +0 -0
  245. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/soul/compaction.py +0 -0
  246. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/soul/compaction_restore.py +0 -0
  247. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/soul/context.py +0 -0
  248. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/soul/denwarenji.py +0 -0
  249. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/soul/dynamic_injection.py +0 -0
  250. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/soul/dynamic_injections/__init__.py +0 -0
  251. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/soul/dynamic_injections/plan_mode.py +0 -0
  252. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/soul/message.py +0 -0
  253. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/soul/toolset.py +0 -0
  254. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/subagents/__init__.py +0 -0
  255. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/subagents/core.py +0 -0
  256. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/subagents/discovery.py +0 -0
  257. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/subagents/git_context.py +0 -0
  258. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/subagents/output.py +0 -0
  259. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/subagents/registry.py +0 -0
  260. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/telemetry/__init__.py +0 -0
  261. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/telemetry/config.py +0 -0
  262. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/telemetry/crash.py +0 -0
  263. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/telemetry/errors.py +0 -0
  264. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/telemetry/metrics.py +0 -0
  265. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/telemetry/otel.py +0 -0
  266. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/telemetry/sentry.py +0 -0
  267. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/telemetry/sink.py +0 -0
  268. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/tools/AGENTS.md +0 -0
  269. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/tools/__init__.py +0 -0
  270. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/tools/agent/description.md +0 -0
  271. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/tools/ask_user/description.md +0 -0
  272. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/tools/background/__init__.py +0 -0
  273. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/tools/background/handoff.md +0 -0
  274. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/tools/background/input.md +0 -0
  275. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/tools/background/list.md +0 -0
  276. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/tools/background/output.md +0 -0
  277. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/tools/background/stop.md +0 -0
  278. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/tools/display.py +0 -0
  279. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/tools/dmail/__init__.py +0 -0
  280. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/tools/dmail/dmail.md +0 -0
  281. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/tools/file/__init__.py +0 -0
  282. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/tools/file/glob.md +0 -0
  283. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/tools/file/glob.py +0 -0
  284. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/tools/file/grep.md +0 -0
  285. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/tools/file/grep_local.py +0 -0
  286. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/tools/file/plan_mode.py +0 -0
  287. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/tools/file/read.md +0 -0
  288. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/tools/file/read.py +0 -0
  289. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/tools/file/read_media.md +0 -0
  290. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/tools/file/read_media.py +0 -0
  291. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/tools/file/replace.md +0 -0
  292. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/tools/file/replace.py +0 -0
  293. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/tools/file/utils.py +0 -0
  294. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/tools/file/write.md +0 -0
  295. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/tools/file/write.py +0 -0
  296. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/tools/memory/__init__.py +0 -0
  297. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/tools/memory/memory.md +0 -0
  298. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/tools/plan/__init__.py +0 -0
  299. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/tools/plan/description.md +0 -0
  300. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/tools/plan/enter.py +0 -0
  301. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/tools/plan/enter_description.md +0 -0
  302. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/tools/plan/handoff.py +0 -0
  303. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/tools/plan/heroes.py +0 -0
  304. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/tools/scratchpad/__init__.py +0 -0
  305. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/tools/scratchpad/scratchpad_tool.md +0 -0
  306. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/tools/shell/__init__.py +0 -0
  307. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/tools/shell/bash.md +0 -0
  308. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/tools/shell/powershell.md +0 -0
  309. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/tools/skill/__init__.py +0 -0
  310. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/tools/skill/description.md +0 -0
  311. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/tools/test.py +0 -0
  312. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/tools/think/__init__.py +0 -0
  313. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/tools/think/think.md +0 -0
  314. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/tools/todo/__init__.py +0 -0
  315. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/tools/todo/set_todo_list.md +0 -0
  316. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/tools/utils.py +0 -0
  317. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/tools/web/__init__.py +0 -0
  318. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/tools/web/_allowlist.py +0 -0
  319. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/tools/web/fetch.md +0 -0
  320. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/tools/web/fetch.py +0 -0
  321. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/tools/web/search.md +0 -0
  322. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/tools/web/search.py +0 -0
  323. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/ui/__init__.py +0 -0
  324. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/ui/acp/__init__.py +0 -0
  325. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/ui/print/__init__.py +0 -0
  326. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/ui/shell/components/__init__.py +0 -0
  327. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/ui/shell/components/base.py +0 -0
  328. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/ui/shell/components/bash_execution.py +0 -0
  329. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/ui/shell/components/bordered_loader.py +0 -0
  330. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/ui/shell/components/diff.py +0 -0
  331. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/ui/shell/components/dynamic_border.py +0 -0
  332. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/ui/shell/components/footer.py +0 -0
  333. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/ui/shell/components/key_hints.py +0 -0
  334. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/ui/shell/components/markdown.py +0 -0
  335. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/ui/shell/components/messages.py +0 -0
  336. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/ui/shell/components/panel.py +0 -0
  337. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/ui/shell/components/settings_list.py +0 -0
  338. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/ui/shell/components/special_messages.py +0 -0
  339. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/ui/shell/console.py +0 -0
  340. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/ui/shell/debug.py +0 -0
  341. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/ui/shell/design_system.py +0 -0
  342. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/ui/shell/export_import.py +0 -0
  343. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/ui/shell/glyphs.py +0 -0
  344. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/ui/shell/keyboard.py +0 -0
  345. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/ui/shell/mcp_status.py +0 -0
  346. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/ui/shell/model_picker.py +0 -0
  347. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/ui/shell/placeholders.py +0 -0
  348. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/ui/shell/render_constants.py +0 -0
  349. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/ui/shell/replay.py +0 -0
  350. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/ui/shell/selector.py +0 -0
  351. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/ui/shell/selectors/__init__.py +0 -0
  352. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/ui/shell/selectors/extension.py +0 -0
  353. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/ui/shell/selectors/oauth.py +0 -0
  354. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/ui/shell/selectors/show_images.py +0 -0
  355. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/ui/shell/selectors/theme.py +0 -0
  356. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/ui/shell/session_picker.py +0 -0
  357. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/ui/shell/spinner_words.py +0 -0
  358. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/ui/shell/startup.py +0 -0
  359. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/ui/shell/task_browser.py +0 -0
  360. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/ui/shell/tool_renderers/__init__.py +0 -0
  361. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/ui/shell/tool_renderers/_render_utils.py +0 -0
  362. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/ui/shell/tool_renderers/agent.py +0 -0
  363. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/ui/shell/tool_renderers/background.py +0 -0
  364. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/ui/shell/tool_renderers/bash.py +0 -0
  365. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/ui/shell/tool_renderers/find.py +0 -0
  366. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/ui/shell/tool_renderers/generic.py +0 -0
  367. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/ui/shell/tool_renderers/grep.py +0 -0
  368. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/ui/shell/tool_renderers/plan.py +0 -0
  369. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/ui/shell/tool_renderers/read.py +0 -0
  370. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/ui/shell/tool_renderers/think.py +0 -0
  371. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/ui/shell/tool_renderers/todo.py +0 -0
  372. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/ui/shell/tool_renderers/web.py +0 -0
  373. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/ui/shell/update.py +0 -0
  374. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/ui/shell/update_orchestrator.py +0 -0
  375. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/ui/shell/usage.py +0 -0
  376. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/ui/shell/usage_adapters/__init__.py +0 -0
  377. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/ui/shell/usage_adapters/anthropic_admin.py +0 -0
  378. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/ui/shell/usage_adapters/base.py +0 -0
  379. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/ui/shell/usage_adapters/deepseek.py +0 -0
  380. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/ui/shell/usage_adapters/minimax.py +0 -0
  381. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/ui/shell/usage_adapters/openai_admin.py +0 -0
  382. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/ui/shell/usage_adapters/openai_chatgpt.py +0 -0
  383. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/ui/shell/usage_adapters/opencode_go.py +0 -0
  384. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/ui/shell/usage_adapters/openrouter.py +0 -0
  385. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/ui/shell/usage_adapters/pythinker.py +0 -0
  386. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/ui/shell/usage_adapters/pythinker_ai.py +0 -0
  387. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/ui/shell/usage_render.py +0 -0
  388. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/ui/shell/visualize/_activity_tree.py +0 -0
  389. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/ui/shell/visualize/_approval_panel.py +0 -0
  390. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/ui/shell/visualize/_btw_panel.py +0 -0
  391. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/ui/shell/visualize/_dialog_shell.py +0 -0
  392. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/ui/shell/visualize/_input_router.py +0 -0
  393. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/ui/shell/visualize/_question_panel.py +0 -0
  394. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/ui/shell/visualize/_transcript.py +0 -0
  395. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/ui/terminal_capabilities.py +0 -0
  396. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/ui/tui_config.py +0 -0
  397. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/usage_ratelimit_cache.py +0 -0
  398. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/utils/__init__.py +0 -0
  399. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/utils/aiohttp.py +0 -0
  400. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/utils/aioqueue.py +0 -0
  401. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/utils/broadcast.py +0 -0
  402. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/utils/changelog.py +0 -0
  403. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/utils/clipboard.py +0 -0
  404. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/utils/datetime.py +0 -0
  405. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/utils/diff.py +0 -0
  406. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/utils/editor.py +0 -0
  407. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/utils/environment.py +0 -0
  408. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/utils/envvar.py +0 -0
  409. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/utils/export.py +0 -0
  410. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/utils/file_filter.py +0 -0
  411. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/utils/frontmatter.py +0 -0
  412. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/utils/io.py +0 -0
  413. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/utils/logging.py +0 -0
  414. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/utils/media_tags.py +0 -0
  415. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/utils/message.py +0 -0
  416. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/utils/path.py +0 -0
  417. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/utils/proctitle.py +0 -0
  418. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/utils/proxy.py +0 -0
  419. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/utils/pyinstaller.py +0 -0
  420. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/utils/rich/columns.py +0 -0
  421. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/utils/rich/diff_render.py +0 -0
  422. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/utils/rich/markdown_sample.md +0 -0
  423. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/utils/rich/markdown_sample_short.md +0 -0
  424. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/utils/rich/syntax.py +0 -0
  425. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/utils/sensitive.py +0 -0
  426. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/utils/server.py +0 -0
  427. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/utils/signals.py +0 -0
  428. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/utils/slashcmd.py +0 -0
  429. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/utils/sleep_inhibitor.py +0 -0
  430. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/utils/string.py +0 -0
  431. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/utils/subprocess_env.py +0 -0
  432. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/utils/term.py +0 -0
  433. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/utils/typing.py +0 -0
  434. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/vis/__init__.py +0 -0
  435. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/vis/api/__init__.py +0 -0
  436. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/vis/api/sessions.py +0 -0
  437. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/vis/api/statistics.py +0 -0
  438. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/vis/api/system.py +0 -0
  439. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/vis/app.py +0 -0
  440. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/vis/static/assets/highlighted-body-B3W2YXNL-CY1rtwrX.js +0 -0
  441. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/vis/static/assets/index-DSRInNnm.css +0 -0
  442. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/vis/static/assets/index-DgmTI2M_.js +0 -0
  443. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/vis/static/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
  444. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/vis/static/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
  445. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/vis/static/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
  446. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/vis/static/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
  447. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/vis/static/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
  448. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/vis/static/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
  449. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/vis/static/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
  450. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/vis/static/index.html +0 -0
  451. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/__init__.py +0 -0
  452. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/api/__init__.py +0 -0
  453. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/api/open_in.py +0 -0
  454. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/api/sessions.py +0 -0
  455. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/app.py +0 -0
  456. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/auth.py +0 -0
  457. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/models.py +0 -0
  458. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/runner/__init__.py +0 -0
  459. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/runner/messages.py +0 -0
  460. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/runner/process.py +0 -0
  461. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/runner/worker.py +0 -0
  462. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/_headers +0 -0
  463. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  464. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  465. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  466. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  467. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  468. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  469. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  470. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  471. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  472. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  473. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  474. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  475. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  476. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  477. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  478. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  479. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  480. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  481. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  482. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  483. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  484. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  485. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  486. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  487. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  488. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  489. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  490. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  491. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  492. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  493. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  494. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  495. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  496. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  497. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  498. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  499. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  500. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  501. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  502. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  503. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  504. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  505. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  506. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  507. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  508. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  509. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  510. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  511. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  512. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  513. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  514. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  515. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  516. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  517. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  518. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  519. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  520. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  521. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  522. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/abap-BdImnpbu.js +0 -0
  523. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/actionscript-3-CfeIJUat.js +0 -0
  524. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/ada-bCR0ucgS.js +0 -0
  525. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/andromeeda-C-Jbm3Hp.js +0 -0
  526. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/angular-html-CU67Zn6k.js +0 -0
  527. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/angular-ts-BwZT4LLn.js +0 -0
  528. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/apache-Pmp26Uib.js +0 -0
  529. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/apex-D8_7TLub.js +0 -0
  530. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/apl-dKokRX4l.js +0 -0
  531. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/applescript-Co6uUVPk.js +0 -0
  532. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/ara-BRHolxvo.js +0 -0
  533. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/asciidoc-Dv7Oe6Be.js +0 -0
  534. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/asm-D_Q5rh1f.js +0 -0
  535. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/astro-CbQHKStN.js +0 -0
  536. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/aurora-x-D-2ljcwZ.js +0 -0
  537. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/awk-DMzUqQB5.js +0 -0
  538. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/ayu-dark-CmMr59Fi.js +0 -0
  539. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/ballerina-BFfxhgS-.js +0 -0
  540. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/bat-BkioyH1T.js +0 -0
  541. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/beancount-k_qm7-4y.js +0 -0
  542. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/berry-uYugtg8r.js +0 -0
  543. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/bibtex-CHM0blh-.js +0 -0
  544. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/bicep-Bmn6On1c.js +0 -0
  545. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/blade-D4QpJJKB.js +0 -0
  546. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/bsl-BO_Y6i37.js +0 -0
  547. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/c-BIGW1oBm.js +0 -0
  548. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/c3-VCDPK7BO.js +0 -0
  549. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/cadence-Bv_4Rxtq.js +0 -0
  550. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/cairo-KRGpt6FW.js +0 -0
  551. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/catppuccin-frappe-DFWUc33u.js +0 -0
  552. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/catppuccin-latte-C9dUb6Cb.js +0 -0
  553. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/catppuccin-macchiato-DQyhUUbL.js +0 -0
  554. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/catppuccin-mocha-D87Tk5Gz.js +0 -0
  555. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/clarity-D53aC0YG.js +0 -0
  556. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/clojure-P80f7IUj.js +0 -0
  557. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/cmake-D1j8_8rp.js +0 -0
  558. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/cobol-nwyudZeR.js +0 -0
  559. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/codeowners-Bp6g37R7.js +0 -0
  560. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/codeql-DsOJ9woJ.js +0 -0
  561. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/coffee-Ch7k5sss.js +0 -0
  562. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/common-lisp-Cg-RD9OK.js +0 -0
  563. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/coq-DkFqJrB1.js +0 -0
  564. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/cpp-CofmeUqb.js +0 -0
  565. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/crystal-tKQVLTB8.js +0 -0
  566. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/csharp-K5feNrxe.js +0 -0
  567. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/css-DPfMkruS.js +0 -0
  568. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/csv-fuZLfV_i.js +0 -0
  569. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/cue-D82EKSYY.js +0 -0
  570. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/cypher-COkxafJQ.js +0 -0
  571. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/d-85-TOEBH.js +0 -0
  572. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/dark-plus-C3mMm8J8.js +0 -0
  573. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/dart-CF10PKvl.js +0 -0
  574. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/dax-CEL-wOlO.js +0 -0
  575. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/defaultLocale-DX6XiGOO.js +0 -0
  576. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/desktop-BmXAJ9_W.js +0 -0
  577. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/diff-D97Zzqfu.js +0 -0
  578. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/docker-BcOcwvcX.js +0 -0
  579. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/dotenv-Da5cRb03.js +0 -0
  580. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/dracula-BzJJZx-M.js +0 -0
  581. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/dracula-soft-BXkSAIEj.js +0 -0
  582. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/dream-maker-BtqSS_iP.js +0 -0
  583. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/edge-BkV0erSs.js +0 -0
  584. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/elixir-CDX3lj18.js +0 -0
  585. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/elm-DbKCFpqz.js +0 -0
  586. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/emacs-lisp-C9XAeP06.js +0 -0
  587. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/erb-BOJIQeun.js +0 -0
  588. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/erlang-DsQrWhSR.js +0 -0
  589. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/everforest-dark-BgDCqdQA.js +0 -0
  590. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/everforest-light-C8M2exoo.js +0 -0
  591. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/fennel-BYunw83y.js +0 -0
  592. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/fish-BvzEVeQv.js +0 -0
  593. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/fluent-C4IJs8-o.js +0 -0
  594. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/fortran-fixed-form-CkoXwp7k.js +0 -0
  595. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/fortran-free-form-BxgE0vQu.js +0 -0
  596. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/fsharp-CXgrBDvD.js +0 -0
  597. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/gdresource-B7Tvp0Sc.js +0 -0
  598. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/gdscript-DTMYz4Jt.js +0 -0
  599. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/gdshader-DkwncUOv.js +0 -0
  600. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/genie-D0YGMca9.js +0 -0
  601. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/gherkin-DyxjwDmM.js +0 -0
  602. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/git-commit-F4YmCXRG.js +0 -0
  603. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/git-rebase-r7XF79zn.js +0 -0
  604. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/github-dark-DHJKELXO.js +0 -0
  605. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/github-dark-default-Cuk6v7N8.js +0 -0
  606. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/github-dark-dimmed-DH5Ifo-i.js +0 -0
  607. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/github-dark-high-contrast-E3gJ1_iC.js +0 -0
  608. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/github-light-DAi9KRSo.js +0 -0
  609. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/github-light-default-D7oLnXFd.js +0 -0
  610. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/github-light-high-contrast-BfjtVDDH.js +0 -0
  611. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/gleam-BspZqrRM.js +0 -0
  612. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/glimmer-js-Rg0-pVw9.js +0 -0
  613. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/glimmer-ts-U6CK756n.js +0 -0
  614. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/glsl-DplSGwfg.js +0 -0
  615. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/gn-n2N0HUVH.js +0 -0
  616. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/gnuplot-DdkO51Og.js +0 -0
  617. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/go-Dn2_MT6a.js +0 -0
  618. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/graphql-ChdNCCLP.js +0 -0
  619. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/groovy-gcz8RCvz.js +0 -0
  620. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/gruvbox-dark-hard-CFHQjOhq.js +0 -0
  621. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/gruvbox-dark-medium-GsRaNv29.js +0 -0
  622. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/gruvbox-dark-soft-CVdnzihN.js +0 -0
  623. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/gruvbox-light-hard-CH1njM8p.js +0 -0
  624. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/gruvbox-light-medium-DRw_LuNl.js +0 -0
  625. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/gruvbox-light-soft-hJgmCMqR.js +0 -0
  626. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/hack-CaT9iCJl.js +0 -0
  627. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/haml-B8DHNrY2.js +0 -0
  628. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/handlebars-BL8al0AC.js +0 -0
  629. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/haskell-Df6bDoY_.js +0 -0
  630. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/haxe-CzTSHFRz.js +0 -0
  631. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/hcl-BWvSN4gD.js +0 -0
  632. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/hjson-D5-asLiD.js +0 -0
  633. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/hlsl-D3lLCCz7.js +0 -0
  634. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/houston-DnULxvSX.js +0 -0
  635. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/html-GMplVEZG.js +0 -0
  636. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/html-derivative-BFtXZ54Q.js +0 -0
  637. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/http-jrhK8wxY.js +0 -0
  638. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/hurl-irOxFIW8.js +0 -0
  639. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/hxml-Bvhsp5Yf.js +0 -0
  640. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/hy-DFXneXwc.js +0 -0
  641. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/imba-DGztddWO.js +0 -0
  642. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/index-BpoLgcEt.js +0 -0
  643. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/index-CzV_vCfu.css +0 -0
  644. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/index-DI2oedCt.js +0 -0
  645. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/ini-BEwlwnbL.js +0 -0
  646. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/init-Gi6I4Gst.js +0 -0
  647. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
  648. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
  649. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
  650. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
  651. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
  652. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
  653. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
  654. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/java-CylS5w8V.js +0 -0
  655. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/javascript-wDzz0qaB.js +0 -0
  656. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/jinja-4LBKfQ-Z.js +0 -0
  657. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/jison-wvAkD_A8.js +0 -0
  658. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/json-Cp-IABpG.js +0 -0
  659. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/json5-C9tS-k6U.js +0 -0
  660. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/jsonc-Des-eS-w.js +0 -0
  661. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/jsonl-DcaNXYhu.js +0 -0
  662. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/jsonnet-DFQXde-d.js +0 -0
  663. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/jssm-C2t-YnRu.js +0 -0
  664. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/jsx-g9-lgVsj.js +0 -0
  665. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/julia-CxzCAyBv.js +0 -0
  666. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/kanagawa-dragon-CkXjmgJE.js +0 -0
  667. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/kanagawa-lotus-CfQXZHmo.js +0 -0
  668. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/kanagawa-wave-DWedfzmr.js +0 -0
  669. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/katex-D2lIc1rk.css +0 -0
  670. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/kdl-DV7GczEv.js +0 -0
  671. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/kotlin-BdnUsdx6.js +0 -0
  672. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/kusto-DZf3V79B.js +0 -0
  673. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/laserwave-DUszq2jm.js +0 -0
  674. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/latex-B4uzh10-.js +0 -0
  675. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/lean-BZvkOJ9d.js +0 -0
  676. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/less-B1dDrJ26.js +0 -0
  677. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/light-plus-B7mTdjB0.js +0 -0
  678. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/liquid-DYVedYrR.js +0 -0
  679. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/llvm-BtvRca6l.js +0 -0
  680. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/log-2UxHyX5q.js +0 -0
  681. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/logo-BtOb2qkB.js +0 -0
  682. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/lua-BbnMAYS6.js +0 -0
  683. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/luau-C-HG3fhB.js +0 -0
  684. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/make-CHLpvVh8.js +0 -0
  685. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/markdown-Cvjx9yec.js +0 -0
  686. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/marko-DZsq8hO1.js +0 -0
  687. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/material-theme-D5KoaKCx.js +0 -0
  688. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/material-theme-darker-BfHTSMKl.js +0 -0
  689. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/material-theme-lighter-B0m2ddpp.js +0 -0
  690. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/material-theme-ocean-CyktbL80.js +0 -0
  691. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/material-theme-palenight-Csfq5Kiy.js +0 -0
  692. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/matlab-D7o27uSR.js +0 -0
  693. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/mdc-DUICxH0z.js +0 -0
  694. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/mdx-Cmh6b_Ma.js +0 -0
  695. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/mermaid-VLURNSYL-YVZJy7__.css +0 -0
  696. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/mermaid-mWjccvbQ.js +0 -0
  697. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/min-dark-CafNBF8u.js +0 -0
  698. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/min-light-CTRr51gU.js +0 -0
  699. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/mipsasm-CKIfxQSi.js +0 -0
  700. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/mojo-B93PlW-d.js +0 -0
  701. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/monokai-D4h5O-jR.js +0 -0
  702. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/moonbit-Ba13S78F.js +0 -0
  703. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/move-Bu9oaDYs.js +0 -0
  704. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/narrat-DRg8JJMk.js +0 -0
  705. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/nextflow-BrzmwbiE.js +0 -0
  706. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/nginx-DknmC5AR.js +0 -0
  707. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/night-owl-C39BiMTA.js +0 -0
  708. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/nim-CVrawwO9.js +0 -0
  709. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/nix-CwoSXNpI.js +0 -0
  710. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/nord-Ddv68eIx.js +0 -0
  711. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/nushell-C-sUppwS.js +0 -0
  712. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/objective-c-DXmwc3jG.js +0 -0
  713. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/objective-cpp-CLxacb5B.js +0 -0
  714. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/ocaml-C0hk2d4L.js +0 -0
  715. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/one-dark-pro-DVMEJ2y_.js +0 -0
  716. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/one-light-PoHY5YXO.js +0 -0
  717. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/openscad-C4EeE6gA.js +0 -0
  718. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/ordinal-Cboi1Yqb.js +0 -0
  719. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/pascal-D93ZcfNL.js +0 -0
  720. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/perl-C0TMdlhV.js +0 -0
  721. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/php-CDn_0X-4.js +0 -0
  722. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/pkl-u5AG7uiY.js +0 -0
  723. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/plastic-3e1v2bzS.js +0 -0
  724. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/plsql-ChMvpjG-.js +0 -0
  725. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/po-BTJTHyun.js +0 -0
  726. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/poimandres-CS3Unz2-.js +0 -0
  727. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/polar-C0HS_06l.js +0 -0
  728. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/postcss-CXtECtnM.js +0 -0
  729. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/powerquery-CEu0bR-o.js +0 -0
  730. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/powershell-Dpen1YoG.js +0 -0
  731. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/prisma-Dd19v3D-.js +0 -0
  732. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/prolog-CbFg5uaA.js +0 -0
  733. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/proto-C7zT0LnQ.js +0 -0
  734. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/pug-CGlum2m_.js +0 -0
  735. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/puppet-BMWR74SV.js +0 -0
  736. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/purescript-CklMAg4u.js +0 -0
  737. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/python-B6aJPvgy.js +0 -0
  738. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/qml-3beO22l8.js +0 -0
  739. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/qmldir-C8lEn-DE.js +0 -0
  740. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/qss-IeuSbFQv.js +0 -0
  741. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/r-Dspwwk_N.js +0 -0
  742. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/racket-BqYA7rlc.js +0 -0
  743. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/raku-DXvB9xmW.js +0 -0
  744. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/razor-C1TweQQi.js +0 -0
  745. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/red-bN70gL4F.js +0 -0
  746. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/reg-C-SQnVFl.js +0 -0
  747. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/regexp-CDVJQ6XC.js +0 -0
  748. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/rel-C3B-1QV4.js +0 -0
  749. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/riscv-BM1_JUlF.js +0 -0
  750. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/rose-pine-dawn-DHQR4-dF.js +0 -0
  751. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/rose-pine-moon-D4_iv3hh.js +0 -0
  752. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/rose-pine-qdsjHGoJ.js +0 -0
  753. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/rosmsg-BJDFO7_C.js +0 -0
  754. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/rst-B0xPkSld.js +0 -0
  755. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/ruby-BvKwtOVI.js +0 -0
  756. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/rust-B1yitclQ.js +0 -0
  757. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/sas-cz2c8ADy.js +0 -0
  758. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/sass-Cj5Yp3dK.js +0 -0
  759. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/scala-C151Ov-r.js +0 -0
  760. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/scheme-C98Dy4si.js +0 -0
  761. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/scss-OYdSNvt2.js +0 -0
  762. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/sdbl-DVxCFoDh.js +0 -0
  763. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/shaderlab-Dg9Lc6iA.js +0 -0
  764. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/shellscript-Yzrsuije.js +0 -0
  765. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/shellsession-BADoaaVG.js +0 -0
  766. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/slack-dark-BthQWCQV.js +0 -0
  767. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/slack-ochin-DqwNpetd.js +0 -0
  768. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/smalltalk-BERRCDM3.js +0 -0
  769. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/snazzy-light-Bw305WKR.js +0 -0
  770. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/solarized-dark-DXbdFlpD.js +0 -0
  771. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/solarized-light-L9t79GZl.js +0 -0
  772. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/solidity-rGO070M0.js +0 -0
  773. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/soy-Brmx7dQM.js +0 -0
  774. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/sparql-rVzFXLq3.js +0 -0
  775. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/splunk-BtCnVYZw.js +0 -0
  776. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/sql-BLtJtn59.js +0 -0
  777. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/ssh-config-_ykCGR6B.js +0 -0
  778. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/stata-BH5u7GGu.js +0 -0
  779. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/stylus-BEDo0Tqx.js +0 -0
  780. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/svelte-zxCyuUbr.js +0 -0
  781. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/swift-Dg5xB15N.js +0 -0
  782. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/synthwave-84-CbfX1IO0.js +0 -0
  783. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/system-verilog-CnnmHF94.js +0 -0
  784. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/systemd-4A_iFExJ.js +0 -0
  785. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/talonscript-CkByrt1z.js +0 -0
  786. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/tasl-QIJgUcNo.js +0 -0
  787. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/tcl-dwOrl1Do.js +0 -0
  788. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/templ-W15q3VgB.js +0 -0
  789. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/terraform-BETggiCN.js +0 -0
  790. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/tex-CvyZ59Mk.js +0 -0
  791. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/tokyo-night-hegEt444.js +0 -0
  792. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/toml-vGWfd6FD.js +0 -0
  793. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/ts-tags-zn1MmPIZ.js +0 -0
  794. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/tsv-B_m7g4N7.js +0 -0
  795. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/tsx-COt5Ahok.js +0 -0
  796. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/turtle-BsS91CYL.js +0 -0
  797. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/twig-CO9l9SDP.js +0 -0
  798. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/typescript-BPQ3VLAy.js +0 -0
  799. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/typespec-BGHnOYBU.js +0 -0
  800. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/typst-DHCkPAjA.js +0 -0
  801. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/v-BcVCzyr7.js +0 -0
  802. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/vala-CsfeWuGM.js +0 -0
  803. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/vb-D17OF-Vu.js +0 -0
  804. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/verilog-BQ8w6xss.js +0 -0
  805. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/vesper-DU1UobuO.js +0 -0
  806. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/vhdl-CeAyd5Ju.js +0 -0
  807. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/viml-CJc9bBzg.js +0 -0
  808. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/vitesse-black-Bkuqu6BP.js +0 -0
  809. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/vitesse-dark-D0r3Knsf.js +0 -0
  810. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/vitesse-light-CVO1_9PV.js +0 -0
  811. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/vue-DN_0RTcg.js +0 -0
  812. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/vue-html-AaS7Mt5G.js +0 -0
  813. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/vue-vine-CQOfvN7w.js +0 -0
  814. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/vyper-CDx5xZoG.js +0 -0
  815. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/wasm-CG6Dc4jp.js +0 -0
  816. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/wasm-MzD3tlZU.js +0 -0
  817. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/wenyan-BV7otONQ.js +0 -0
  818. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/wgsl-Dx-B1_4e.js +0 -0
  819. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/wikitext-BhOHFoWU.js +0 -0
  820. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/wit-5i3qLPDT.js +0 -0
  821. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/wolfram-lXgVvXCa.js +0 -0
  822. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/xml-sdJ4AIDG.js +0 -0
  823. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/xsl-CtQFsRM5.js +0 -0
  824. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/yaml-Buea-lGh.js +0 -0
  825. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/zenscript-DVFEvuxE.js +0 -0
  826. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/assets/zig-VOosw3JB.js +0 -0
  827. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/brand/apple-touch-icon.png +0 -0
  828. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/brand/arctecture.webp +0 -0
  829. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/brand/bimi-logo.svg +0 -0
  830. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/brand/favicon.ico +0 -0
  831. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/brand/fonts/dm-sans-latin-ext.woff2 +0 -0
  832. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/brand/fonts/dm-sans-latin.woff2 +0 -0
  833. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/brand/fonts/instrument-sans-latin-ext.woff2 +0 -0
  834. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/brand/fonts/instrument-sans-latin.woff2 +0 -0
  835. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/brand/fonts/instrument-serif-latin-ext.woff2 +0 -0
  836. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/brand/fonts/instrument-serif-latin.woff2 +0 -0
  837. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-italic-latin-ext.woff2 +0 -0
  838. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-italic-latin.woff2 +0 -0
  839. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-latin-ext.woff2 +0 -0
  840. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-latin.woff2 +0 -0
  841. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/brand/fonts/roboto-latin-ext.woff2 +0 -0
  842. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/brand/fonts/roboto-latin.woff2 +0 -0
  843. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/brand/icon-192.png +0 -0
  844. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/brand/icon-512.png +0 -0
  845. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/brand/icon.svg +0 -0
  846. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/brand/logo.png +0 -0
  847. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/brand/pythinker_animated.svg +0 -0
  848. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/brand/robots.txt +0 -0
  849. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/install.ps1 +0 -0
  850. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/install.sh +0 -0
  851. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/static/logo.png +0 -0
  852. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/store/__init__.py +0 -0
  853. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/web/store/sessions.py +0 -0
  854. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/wire/__init__.py +0 -0
  855. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/wire/file.py +0 -0
  856. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/wire/jsonrpc.py +0 -0
  857. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/wire/protocol.py +0 -0
  858. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/wire/root_hub.py +0 -0
  859. {pythinker_code-0.28.0 → pythinker_code-0.29.0}/src/pythinker_code/wire/serde.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pythinker-code
3
- Version: 0.28.0
3
+ Version: 0.29.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
@@ -23,7 +23,7 @@ Requires-Dist: agent-client-protocol==0.8.0
23
23
  Requires-Dist: aiofiles>=24.0,<26.0
24
24
  Requires-Dist: aiohttp==3.13.5
25
25
  Requires-Dist: typer==0.21.1
26
- Requires-Dist: pythinker-core[contrib]==1.1.1
26
+ Requires-Dist: pythinker-core[contrib]==1.2.0
27
27
  Requires-Dist: loguru>=0.6.0,<0.7
28
28
  Requires-Dist: prompt-toolkit==3.0.52
29
29
  Requires-Dist: pillow==12.2.0
@@ -115,7 +115,7 @@ It speaks the [**Agent Client Protocol (ACP)**](https://github.com/agentclientpr
115
115
 
116
116
  ---
117
117
 
118
- ## 🆕 What's New in 0.28.0
118
+ ## 🆕 What's New in 0.29.0
119
119
 
120
120
  - **Redesigned startup welcome banner.** A cleaner footer-chip layout — the "What's new / Update available" chip now sits on the panel's bottom border, the headline/strapline/help lines align beside the robot logo, and the info grid drops its vertical separator.
121
121
  - **Terminal-aware rendering for minimal and CI terminals.** The shell UI adapts to your terminal — ASCII glyph fallbacks for `TERM=dumb` and legacy Windows code pages, a reduced-motion mode (`PYTHINKER_REDUCED_MOTION`), and `NO_COLOR`/`CLICOLOR` support — so output stays readable in CI logs, SSH panes, and bare terminals.
@@ -123,7 +123,7 @@ It speaks the [**Agent Client Protocol (ACP)**](https://github.com/agentclientpr
123
123
  - **More distribution channels.** Releases now include best-effort Docker/GHCR, Scoop, Nix, and manual WinGet plumbing, with channel-native update guidance where the install format supports it.
124
124
  - **Repository moved to the Pythoughts-labs GitHub org.** All GitHub URLs, install scripts, CI configuration, and the default `/feedback` repository now point to `github.com/Pythoughts-labs/pythinker-code`; configs that still reference the previous owner are auto-migrated.
125
125
 
126
- Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.28.0`, or use the native installer for your platform from the [Releases page](https://github.com/Pythoughts-labs/pythinker-code/releases/latest).
126
+ Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.29.0`, or use the native installer for your platform from the [Releases page](https://github.com/Pythoughts-labs/pythinker-code/releases/latest).
127
127
 
128
128
 
129
129
  ---
@@ -213,7 +213,7 @@ matches your OS — no Python, Node, or `uv` prerequisite.
213
213
 
214
214
  | Platform | Recommended install | Artifact source |
215
215
  |---|---|---|
216
- | **🪟 Windows** | `irm https://pythinker.com/install.ps1 \| iex` | `PythinkerSetup-0.28.0.exe` from [Releases](https://github.com/Pythoughts-labs/pythinker-code/releases/latest) |
216
+ | **🪟 Windows** | `irm https://pythinker.com/install.ps1 \| iex` | `PythinkerSetup-0.29.0.exe` from [Releases](https://github.com/Pythoughts-labs/pythinker-code/releases/latest) |
217
217
  | **<img src="https://img.shields.io/badge/-macOS-000000?style=flat-square&logo=apple&logoColor=white" alt="macOS"> / <img src="https://img.shields.io/badge/-Linux-FCC624?style=flat-square&logo=linux&logoColor=black" alt="Linux">** | `curl -fsSL https://pythinker.com/install.sh \| bash` | native tarball from [Releases](https://github.com/Pythoughts-labs/pythinker-code/releases/latest) |
218
218
  | **<img src="https://img.shields.io/badge/-macOS-000000?style=flat-square&logo=apple&logoColor=white" alt="macOS"> — Homebrew** | `brew install Pythoughts-labs/pythinker/pythinker-code` | auto-published Homebrew tap |
219
219
  | **🐳 Docker** | `docker run --rm -it ghcr.io/pythoughts-labs/pythinker-code` | GHCR multi-arch image |
@@ -241,7 +241,7 @@ pythinker # start the interactive TUI
241
241
 
242
242
  ### 🪟 Windows — native installer
243
243
 
244
- `PythinkerSetup-0.28.0.exe` is a signed* Inno Setup wizard. Installs per-user
244
+ `PythinkerSetup-0.29.0.exe` is a signed* Inno Setup wizard. Installs per-user
245
245
  into `%LOCALAPPDATA%\Programs\Pythinker`, registers `pythinker` on your user
246
246
  PATH (`HKCU\Environment`), broadcasts `WM_SETTINGCHANGE` so new shells see
247
247
  the change. **No UAC prompt.**
@@ -252,13 +252,13 @@ irm https://pythinker.com/install.ps1 | iex
252
252
 
253
253
  # Or manually download the installer + checksum from the Releases page,
254
254
  # verify with Get-FileHash, then run:
255
- .\PythinkerSetup-0.28.0.exe
255
+ .\PythinkerSetup-0.29.0.exe
256
256
 
257
257
  # Open a fresh PowerShell
258
258
  pythinker --version
259
259
  ```
260
260
 
261
- **Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.28.0.exe /ALLUSERS`
261
+ **Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.29.0.exe /ALLUSERS`
262
262
  installs to `%ProgramFiles%\Pythinker` and writes PATH to HKLM (requires admin).
263
263
 
264
264
  **Upgrade:** `pythinker update` from inside the running app — it downloads
@@ -309,26 +309,26 @@ attached to every GitHub Release.
309
309
 
310
310
  ```sh
311
311
  # Debian / Ubuntu (x86_64)
312
- sudo dpkg -i pythinker-code_0.28.0_amd64.deb
312
+ sudo dpkg -i pythinker-code_0.29.0_amd64.deb
313
313
  sudo apt-get install -f # only if dpkg reports missing deps
314
314
 
315
315
  # Debian / Ubuntu (ARM64)
316
- sudo dpkg -i pythinker-code_0.28.0_arm64.deb
316
+ sudo dpkg -i pythinker-code_0.29.0_arm64.deb
317
317
 
318
318
  # Fedora / RHEL / openSUSE (x86_64)
319
- curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.28.0/pythinker-code-0.28.0.x86_64.rpm
320
- curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.28.0/pythinker-code-0.28.0.x86_64.rpm.sha256
321
- sha256sum -c pythinker-code-0.28.0.x86_64.rpm.sha256
319
+ curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.29.0/pythinker-code-0.29.0.x86_64.rpm
320
+ curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.29.0/pythinker-code-0.29.0.x86_64.rpm.sha256
321
+ sha256sum -c pythinker-code-0.29.0.x86_64.rpm.sha256
322
322
  # Fedora / RHEL:
323
- sudo dnf install ./pythinker-code-0.28.0.x86_64.rpm
323
+ sudo dnf install ./pythinker-code-0.29.0.x86_64.rpm
324
324
  # openSUSE:
325
- sudo zypper install ./pythinker-code-0.28.0.x86_64.rpm
325
+ sudo zypper install ./pythinker-code-0.29.0.x86_64.rpm
326
326
 
327
327
  # Fedora / RHEL (aarch64)
328
- curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.28.0/pythinker-code-0.28.0.aarch64.rpm
329
- curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.28.0/pythinker-code-0.28.0.aarch64.rpm.sha256
330
- sha256sum -c pythinker-code-0.28.0.aarch64.rpm.sha256
331
- sudo dnf install ./pythinker-code-0.28.0.aarch64.rpm
328
+ curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.29.0/pythinker-code-0.29.0.aarch64.rpm
329
+ curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.29.0/pythinker-code-0.29.0.aarch64.rpm.sha256
330
+ sha256sum -c pythinker-code-0.29.0.aarch64.rpm.sha256
331
+ sudo dnf install ./pythinker-code-0.29.0.aarch64.rpm
332
332
  ```
333
333
 
334
334
  Both packages drop a small `/usr/bin/pythinker` launcher that execs the real
@@ -337,8 +337,8 @@ binary under `/usr/lib/pythinker/`, so your `$PATH` stays tidy.
337
337
  **Verify before install:**
338
338
 
339
339
  ```sh
340
- sha256sum -c pythinker-code_0.28.0_amd64.deb.sha256 # Debian/Ubuntu
341
- sha256sum -c pythinker-code-0.28.0.x86_64.rpm.sha256 # Fedora/RHEL
340
+ sha256sum -c pythinker-code_0.29.0_amd64.deb.sha256 # Debian/Ubuntu
341
+ sha256sum -c pythinker-code-0.29.0.x86_64.rpm.sha256 # Fedora/RHEL
342
342
  ```
343
343
 
344
344
  **Upgrade:** download the new `.deb`/`.rpm` from Releases and `dpkg -i` /
@@ -50,7 +50,7 @@ It speaks the [**Agent Client Protocol (ACP)**](https://github.com/agentclientpr
50
50
 
51
51
  ---
52
52
 
53
- ## 🆕 What's New in 0.28.0
53
+ ## 🆕 What's New in 0.29.0
54
54
 
55
55
  - **Redesigned startup welcome banner.** A cleaner footer-chip layout — the "What's new / Update available" chip now sits on the panel's bottom border, the headline/strapline/help lines align beside the robot logo, and the info grid drops its vertical separator.
56
56
  - **Terminal-aware rendering for minimal and CI terminals.** The shell UI adapts to your terminal — ASCII glyph fallbacks for `TERM=dumb` and legacy Windows code pages, a reduced-motion mode (`PYTHINKER_REDUCED_MOTION`), and `NO_COLOR`/`CLICOLOR` support — so output stays readable in CI logs, SSH panes, and bare terminals.
@@ -58,7 +58,7 @@ It speaks the [**Agent Client Protocol (ACP)**](https://github.com/agentclientpr
58
58
  - **More distribution channels.** Releases now include best-effort Docker/GHCR, Scoop, Nix, and manual WinGet plumbing, with channel-native update guidance where the install format supports it.
59
59
  - **Repository moved to the Pythoughts-labs GitHub org.** All GitHub URLs, install scripts, CI configuration, and the default `/feedback` repository now point to `github.com/Pythoughts-labs/pythinker-code`; configs that still reference the previous owner are auto-migrated.
60
60
 
61
- Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.28.0`, or use the native installer for your platform from the [Releases page](https://github.com/Pythoughts-labs/pythinker-code/releases/latest).
61
+ Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.29.0`, or use the native installer for your platform from the [Releases page](https://github.com/Pythoughts-labs/pythinker-code/releases/latest).
62
62
 
63
63
 
64
64
  ---
@@ -148,7 +148,7 @@ matches your OS — no Python, Node, or `uv` prerequisite.
148
148
 
149
149
  | Platform | Recommended install | Artifact source |
150
150
  |---|---|---|
151
- | **🪟 Windows** | `irm https://pythinker.com/install.ps1 \| iex` | `PythinkerSetup-0.28.0.exe` from [Releases](https://github.com/Pythoughts-labs/pythinker-code/releases/latest) |
151
+ | **🪟 Windows** | `irm https://pythinker.com/install.ps1 \| iex` | `PythinkerSetup-0.29.0.exe` from [Releases](https://github.com/Pythoughts-labs/pythinker-code/releases/latest) |
152
152
  | **<img src="https://img.shields.io/badge/-macOS-000000?style=flat-square&logo=apple&logoColor=white" alt="macOS"> / <img src="https://img.shields.io/badge/-Linux-FCC624?style=flat-square&logo=linux&logoColor=black" alt="Linux">** | `curl -fsSL https://pythinker.com/install.sh \| bash` | native tarball from [Releases](https://github.com/Pythoughts-labs/pythinker-code/releases/latest) |
153
153
  | **<img src="https://img.shields.io/badge/-macOS-000000?style=flat-square&logo=apple&logoColor=white" alt="macOS"> — Homebrew** | `brew install Pythoughts-labs/pythinker/pythinker-code` | auto-published Homebrew tap |
154
154
  | **🐳 Docker** | `docker run --rm -it ghcr.io/pythoughts-labs/pythinker-code` | GHCR multi-arch image |
@@ -176,7 +176,7 @@ pythinker # start the interactive TUI
176
176
 
177
177
  ### 🪟 Windows — native installer
178
178
 
179
- `PythinkerSetup-0.28.0.exe` is a signed* Inno Setup wizard. Installs per-user
179
+ `PythinkerSetup-0.29.0.exe` is a signed* Inno Setup wizard. Installs per-user
180
180
  into `%LOCALAPPDATA%\Programs\Pythinker`, registers `pythinker` on your user
181
181
  PATH (`HKCU\Environment`), broadcasts `WM_SETTINGCHANGE` so new shells see
182
182
  the change. **No UAC prompt.**
@@ -187,13 +187,13 @@ irm https://pythinker.com/install.ps1 | iex
187
187
 
188
188
  # Or manually download the installer + checksum from the Releases page,
189
189
  # verify with Get-FileHash, then run:
190
- .\PythinkerSetup-0.28.0.exe
190
+ .\PythinkerSetup-0.29.0.exe
191
191
 
192
192
  # Open a fresh PowerShell
193
193
  pythinker --version
194
194
  ```
195
195
 
196
- **Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.28.0.exe /ALLUSERS`
196
+ **Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.29.0.exe /ALLUSERS`
197
197
  installs to `%ProgramFiles%\Pythinker` and writes PATH to HKLM (requires admin).
198
198
 
199
199
  **Upgrade:** `pythinker update` from inside the running app — it downloads
@@ -244,26 +244,26 @@ attached to every GitHub Release.
244
244
 
245
245
  ```sh
246
246
  # Debian / Ubuntu (x86_64)
247
- sudo dpkg -i pythinker-code_0.28.0_amd64.deb
247
+ sudo dpkg -i pythinker-code_0.29.0_amd64.deb
248
248
  sudo apt-get install -f # only if dpkg reports missing deps
249
249
 
250
250
  # Debian / Ubuntu (ARM64)
251
- sudo dpkg -i pythinker-code_0.28.0_arm64.deb
251
+ sudo dpkg -i pythinker-code_0.29.0_arm64.deb
252
252
 
253
253
  # Fedora / RHEL / openSUSE (x86_64)
254
- curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.28.0/pythinker-code-0.28.0.x86_64.rpm
255
- curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.28.0/pythinker-code-0.28.0.x86_64.rpm.sha256
256
- sha256sum -c pythinker-code-0.28.0.x86_64.rpm.sha256
254
+ curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.29.0/pythinker-code-0.29.0.x86_64.rpm
255
+ curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.29.0/pythinker-code-0.29.0.x86_64.rpm.sha256
256
+ sha256sum -c pythinker-code-0.29.0.x86_64.rpm.sha256
257
257
  # Fedora / RHEL:
258
- sudo dnf install ./pythinker-code-0.28.0.x86_64.rpm
258
+ sudo dnf install ./pythinker-code-0.29.0.x86_64.rpm
259
259
  # openSUSE:
260
- sudo zypper install ./pythinker-code-0.28.0.x86_64.rpm
260
+ sudo zypper install ./pythinker-code-0.29.0.x86_64.rpm
261
261
 
262
262
  # Fedora / RHEL (aarch64)
263
- curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.28.0/pythinker-code-0.28.0.aarch64.rpm
264
- curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.28.0/pythinker-code-0.28.0.aarch64.rpm.sha256
265
- sha256sum -c pythinker-code-0.28.0.aarch64.rpm.sha256
266
- sudo dnf install ./pythinker-code-0.28.0.aarch64.rpm
263
+ curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.29.0/pythinker-code-0.29.0.aarch64.rpm
264
+ curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.29.0/pythinker-code-0.29.0.aarch64.rpm.sha256
265
+ sha256sum -c pythinker-code-0.29.0.aarch64.rpm.sha256
266
+ sudo dnf install ./pythinker-code-0.29.0.aarch64.rpm
267
267
  ```
268
268
 
269
269
  Both packages drop a small `/usr/bin/pythinker` launcher that execs the real
@@ -272,8 +272,8 @@ binary under `/usr/lib/pythinker/`, so your `$PATH` stays tidy.
272
272
  **Verify before install:**
273
273
 
274
274
  ```sh
275
- sha256sum -c pythinker-code_0.28.0_amd64.deb.sha256 # Debian/Ubuntu
276
- sha256sum -c pythinker-code-0.28.0.x86_64.rpm.sha256 # Fedora/RHEL
275
+ sha256sum -c pythinker-code_0.29.0_amd64.deb.sha256 # Debian/Ubuntu
276
+ sha256sum -c pythinker-code-0.29.0.x86_64.rpm.sha256 # Fedora/RHEL
277
277
  ```
278
278
 
279
279
  **Upgrade:** download the new `.deb`/`.rpm` from Releases and `dpkg -i` /
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "pythinker-code"
3
- version = "0.28.0"
3
+ version = "0.29.0"
4
4
  description = "Pythinker Code is your next CLI agent."
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.12"
@@ -26,7 +26,7 @@ dependencies = [
26
26
  "aiofiles>=24.0,<26.0",
27
27
  "aiohttp==3.13.5",
28
28
  "typer==0.21.1",
29
- "pythinker-core[contrib]==1.1.1",
29
+ "pythinker-core[contrib]==1.2.0",
30
30
  # notify-py (via batrachian-toad) caps loguru at <=0.6.0 on 3.14+.
31
31
  "loguru>=0.6.0,<0.7",
32
32
  "prompt-toolkit==3.0.52",
@@ -15,6 +15,17 @@ GitHub Releases page; `0.8.0` is the new starting line.
15
15
 
16
16
  ## Unreleased
17
17
 
18
+ ## 0.29.0 (2026-06-01)
19
+
20
+ ### What changed in this release
21
+
22
+ - **Reloads pick up MCP and model changes cleanly.** `/reload` now re-reads MCP server configuration added after startup, cleans up stale MCP/model-refresh resources during same-process reloads, and `/model` starts a fresh session when switching models so old context does not carry across providers.
23
+ - **Thinking effort controls and safer auto-mode decisions.** Thinking effort is now a first-class setting across the CLI, ACP, web config, and supported providers; Shift+Tab cycles available efforts in the shell, and auto-mode can deliberate with advisor feedback before sensitive or destructive approval flows.
24
+ - **Shell sessions get cleaner recaps and rendering.** The interactive shell can show turn recaps, includes hook stdout/stderr in the transcript, improves prompt/file-mention and tool-output spacing, and uses branded browser-login result pages.
25
+ - **MiniMax Token Plan model availability stays current.** MiniMax login and startup refresh now use the authenticated model catalog so Token Plan keys only keep models actually available to that key, while preserving user model preferences and isolating discovery failures from other provider refreshes.
26
+
27
+ Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.29.0`, or use the native installer for your OS (see the README install table).
28
+
18
29
  ## 0.28.0 (2026-05-31)
19
30
 
20
31
  ### What changed in this release
@@ -24,6 +24,7 @@ from pythinker_code.llm import create_llm, derive_model_capabilities
24
24
  from pythinker_code.session import Session
25
25
  from pythinker_code.soul.slash import registry as soul_slash_registry
26
26
  from pythinker_code.soul.toolset import PythinkerToolset
27
+ from pythinker_code.thinking import DEFAULT_THINKING_EFFORT, effective_config_thinking_effort
27
28
  from pythinker_code.utils.logging import logger
28
29
 
29
30
 
@@ -380,11 +381,21 @@ class ACPServer:
380
381
  )
381
382
  raise acp.RequestError.invalid_params({"model_id": "Model's provider not found"})
382
383
 
384
+ if model_id_conv.thinking:
385
+ # Preserve the user's configured effort when switching to a thinking
386
+ # model; only fall back to the default when thinking was previously off.
387
+ current_effort = effective_config_thinking_effort(
388
+ config.default_thinking, config.default_thinking_effort
389
+ )
390
+ thinking_effort = current_effort if current_effort != "off" else DEFAULT_THINKING_EFFORT
391
+ else:
392
+ thinking_effort = "off"
383
393
  new_llm = create_llm(
384
394
  new_provider,
385
395
  new_model,
386
396
  session_id=acp_session.id,
387
397
  thinking=model_id_conv.thinking,
398
+ thinking_effort=thinking_effort,
388
399
  oauth=cli_instance.soul.runtime.oauth,
389
400
  )
390
401
  cli_instance.soul.runtime.llm = new_llm
@@ -392,12 +403,14 @@ class ACPServer:
392
403
 
393
404
  config.default_model = model_id_conv.model_key
394
405
  config.default_thinking = model_id_conv.thinking
406
+ config.default_thinking_effort = thinking_effort
395
407
  assert config.is_from_default_location, (
396
408
  "`pythinker acp` must use the default config location"
397
409
  )
398
410
  config_for_save = load_config()
399
411
  config_for_save.default_model = model_id_conv.model_key
400
412
  config_for_save.default_thinking = model_id_conv.thinking
413
+ config_for_save.default_thinking_effort = thinking_effort
401
414
  save_config(config_for_save)
402
415
 
403
416
  async def authenticate(self, method_id: str, **kwargs: Any) -> acp.AuthenticateResponse | None:
@@ -12,6 +12,7 @@ from typing import TYPE_CHECKING, Any
12
12
 
13
13
  import pythinker_host
14
14
  from pydantic import SecretStr
15
+ from pythinker_core.chat_provider import ThinkingEffort
15
16
  from pythinker_host.path import HostPath
16
17
 
17
18
  from pythinker_code.agentspec import DEFAULT_AGENT_FILE
@@ -27,6 +28,7 @@ from pythinker_code.soul import RunCancelled, run_soul
27
28
  from pythinker_code.soul.agent import Runtime, load_agent
28
29
  from pythinker_code.soul.context import Context
29
30
  from pythinker_code.soul.pythinkersoul import PythinkerSoul
31
+ from pythinker_code.thinking import bool_to_thinking_effort, effective_config_thinking_effort
30
32
  from pythinker_code.utils.aioqueue import QueueShutDown
31
33
  from pythinker_code.utils.logging import logger, open_original_stderr, redirect_stderr_to_logger
32
34
  from pythinker_code.utils.path import shorten_home
@@ -148,6 +150,7 @@ class PythinkerCLI:
148
150
  config: Config | Path | None = None,
149
151
  model_name: str | None = None,
150
152
  thinking: bool | None = None,
153
+ thinking_effort: ThinkingEffort | None = None,
151
154
  # Run mode
152
155
  yolo: bool = False,
153
156
  auto: bool = False,
@@ -176,6 +179,8 @@ class PythinkerCLI:
176
179
  Defaults to None.
177
180
  model_name (str | None, optional): Name of the model to use. Defaults to None.
178
181
  thinking (bool | None, optional): Whether to enable thinking mode. Defaults to None.
182
+ thinking_effort (ThinkingEffort | None, optional): Reasoning effort override.
183
+ Defaults to None.
179
184
  yolo (bool, optional): Dangerously skip permission approvals. The user is still
180
185
  reachable via ``AskUserQuestion``. Defaults to False.
181
186
  auto (bool, optional): Invocation-level auto mode (no user is present to answer
@@ -256,8 +261,19 @@ class PythinkerCLI:
256
261
  assert model is not None
257
262
  env_overrides = augment_provider_with_env_vars(provider, model, provider_key=model.provider)
258
263
 
259
- # determine thinking mode
260
- thinking = config.default_thinking if thinking is None else thinking
264
+ # determine thinking mode / effort. The bool flag is kept for CLI and
265
+ # config compatibility; the effort string is the source of truth for new
266
+ # sessions when present.
267
+ if thinking_effort is None:
268
+ thinking_effort = (
269
+ bool_to_thinking_effort(thinking)
270
+ if thinking is not None
271
+ else effective_config_thinking_effort(
272
+ config.default_thinking,
273
+ config.default_thinking_effort,
274
+ )
275
+ )
276
+ thinking = thinking_effort != "off"
261
277
 
262
278
  # determine yolo mode
263
279
  yolo = yolo if yolo else config.default_yolo
@@ -270,6 +286,7 @@ class PythinkerCLI:
270
286
  provider,
271
287
  model,
272
288
  thinking=thinking,
289
+ thinking_effort=thinking_effort,
273
290
  session_id=session.id,
274
291
  oauth=oauth,
275
292
  )
@@ -277,6 +294,7 @@ class PythinkerCLI:
277
294
  logger.info("Using LLM provider: {provider}", provider=provider)
278
295
  logger.info("Using LLM model: {model}", model=model)
279
296
  logger.info("Thinking mode: {thinking}", thinking=thinking)
297
+ logger.info("Thinking effort: {thinking_effort}", thinking_effort=thinking_effort)
280
298
 
281
299
  if startup_progress is not None:
282
300
  startup_progress("Scanning workspace...")
@@ -449,6 +467,24 @@ class PythinkerCLI:
449
467
  """Get the Session instance."""
450
468
  return self._runtime.session
451
469
 
470
+ async def cleanup_runtime_resources(self) -> None:
471
+ """Cleanup per-CLI-instance resources without stopping persisted background tasks."""
472
+ # Cancel the startup managed-model refresh task if it is still running
473
+ # so it does not outlive this CLI instance across reloads.
474
+ if self._bg_refresh_task is not None and not self._bg_refresh_task.done():
475
+ self._bg_refresh_task.cancel()
476
+
477
+ # Cleanup MCP connections held by this instance's toolset. Background
478
+ # task workers are persisted elsewhere and intentionally left alone.
479
+ from pythinker_code.soul.toolset import PythinkerToolset
480
+
481
+ toolset = self._soul.agent.toolset
482
+ if isinstance(toolset, PythinkerToolset):
483
+ try:
484
+ await toolset.cleanup()
485
+ except Exception:
486
+ logger.exception("Failed to cleanup MCP toolset during reload")
487
+
452
488
  async def shutdown_background_tasks(self) -> None:
453
489
  """Kill active background tasks on exit, unless keep_alive_on_exit is configured.
454
490
 
@@ -462,18 +498,7 @@ class PythinkerCLI:
462
498
  store corruption must not propagate and replace the real exit code
463
499
  with a traceback.
464
500
  """
465
- # Cancel the startup managed-model refresh task if it is still running
466
- # so it does not outlive the CLI process.
467
- if self._bg_refresh_task is not None and not self._bg_refresh_task.done():
468
- self._bg_refresh_task.cancel()
469
-
470
- # Cleanup MCP connections held by the toolset
471
- from pythinker_code.soul.toolset import PythinkerToolset
472
-
473
- toolset = self._soul.agent.toolset
474
- if isinstance(toolset, PythinkerToolset):
475
- with contextlib.suppress(Exception):
476
- await toolset.cleanup()
501
+ await self.cleanup_runtime_resources()
477
502
 
478
503
  bg_config = self._runtime.config.background
479
504
  if bg_config.keep_alive_on_exit:
@@ -11,6 +11,7 @@ from pydantic import SecretStr
11
11
  from pythinker_code.auth import ANTHROPIC_PLATFORM_ID
12
12
  from pythinker_code.auth.oauth import OAuthEvent
13
13
  from pythinker_code.config import Config, LLMModel, LLMProvider, save_config
14
+ from pythinker_code.thinking import apply_login_thinking_defaults
14
15
  from pythinker_code.utils.aiohttp import new_client_session
15
16
 
16
17
  ANTHROPIC_BASE_URL = "https://api.anthropic.com"
@@ -88,7 +89,7 @@ def _apply_anthropic_config(
88
89
  config.default_model = ANTHROPIC_DEFAULT_MODEL_ALIAS
89
90
  else:
90
91
  config.default_model = fallback
91
- config.default_thinking = False
92
+ apply_login_thinking_defaults(config, thinking=False, effort="off")
92
93
 
93
94
 
94
95
  def _model_by_id() -> dict[str, AnthropicModel]:
@@ -0,0 +1,100 @@
1
+ from __future__ import annotations
2
+
3
+ import base64
4
+ import html
5
+ from functools import lru_cache
6
+ from pathlib import Path
7
+
8
+ from pythinker_code.utils.logging import logger
9
+
10
+ _PYTHINKER_BRAND_DIR = Path(__file__).resolve().parents[1] / "web" / "static" / "brand"
11
+ _PYTHINKER_LOGO_PATH = _PYTHINKER_BRAND_DIR / "icon.svg"
12
+ _PYTHINKER_FAVICON_PATH = _PYTHINKER_BRAND_DIR / "favicon.ico"
13
+
14
+
15
+ # Bounded: only the two brand assets below are ever passed in; the cap keeps a
16
+ # future caller with many distinct paths from leaking memory.
17
+ @lru_cache(maxsize=16)
18
+ def browser_login_asset_data_uri(path: Path, media_type: str) -> str:
19
+ # Fail soft: a missing/unreadable brand asset is cosmetic and must never break
20
+ # the OAuth callback page. Build outputs (web/static) are normally present, so
21
+ # log loudly and embed an empty source rather than raising mid-login.
22
+ try:
23
+ raw = path.read_bytes()
24
+ except OSError as exc:
25
+ logger.warning(
26
+ "Browser-login brand asset unavailable, rendering without it ({}): {}", path, exc
27
+ )
28
+ return ""
29
+ encoded = base64.b64encode(raw).decode("utf-8")
30
+ return f"data:{media_type};base64,{encoded}"
31
+
32
+
33
+ def browser_login_logo_data_uri() -> str:
34
+ return browser_login_asset_data_uri(_PYTHINKER_LOGO_PATH, "image/svg+xml")
35
+
36
+
37
+ def browser_login_favicon_data_uri() -> str:
38
+ return browser_login_asset_data_uri(_PYTHINKER_FAVICON_PATH, "image/x-icon")
39
+
40
+
41
+ def build_browser_login_result_html(
42
+ *,
43
+ ok: bool,
44
+ success_title: str,
45
+ failure_title: str,
46
+ success_heading: str,
47
+ failure_heading: str,
48
+ success_body: str,
49
+ failure_body: str | None,
50
+ fallback_failure_body: str,
51
+ ) -> str:
52
+ title = success_title if ok else failure_title
53
+ heading = success_heading if ok else failure_heading
54
+ body = success_body if ok else failure_body
55
+ escaped_title = html.escape(title)
56
+ escaped_heading = html.escape(heading)
57
+ escaped_body = html.escape(body or fallback_failure_body)
58
+ favicon = html.escape(browser_login_favicon_data_uri(), quote=True)
59
+ logo = html.escape(browser_login_logo_data_uri(), quote=True)
60
+ return f"""<!doctype html>
61
+ <html lang="en">
62
+ <head>
63
+ <meta charset="utf-8">
64
+ <meta name="viewport" content="width=device-width, initial-scale=1">
65
+ <title>{escaped_title}</title>
66
+ <link rel="icon" type="image/x-icon" href="{favicon}">
67
+ <style>
68
+ :root {{ color-scheme: light dark; }}
69
+ body {{
70
+ margin: 0;
71
+ min-height: 100vh;
72
+ display: grid;
73
+ place-items: center;
74
+ font-family: Inter, ui-sans-serif, system-ui, -apple-system,
75
+ BlinkMacSystemFont, "Segoe UI", sans-serif;
76
+ background: radial-gradient(circle at top, #1e293b 0, #0f172a 42%, #020617 100%);
77
+ color: #f8fafc;
78
+ }}
79
+ main {{
80
+ width: min(440px, calc(100vw - 48px));
81
+ padding: 40px 32px;
82
+ border: 1px solid rgba(148, 163, 184, 0.25);
83
+ border-radius: 28px;
84
+ background: rgba(15, 23, 42, 0.82);
85
+ box-shadow: 0 24px 80px rgba(2, 6, 23, 0.45);
86
+ text-align: center;
87
+ }}
88
+ .logo {{ width: 82px; height: auto; margin-bottom: 22px; }}
89
+ h1 {{ margin: 0 0 12px; font-size: 2rem; line-height: 1.15; }}
90
+ p {{ margin: 0; color: #cbd5e1; font-size: 1.05rem; line-height: 1.6; }}
91
+ </style>
92
+ </head>
93
+ <body>
94
+ <main>
95
+ <img class="logo" src="{logo}" alt="Pythinker logo">
96
+ <h1>{escaped_heading}</h1>
97
+ <p>{escaped_body}</p>
98
+ </main>
99
+ </body>
100
+ </html>"""
@@ -11,6 +11,7 @@ from pydantic import SecretStr
11
11
  from pythinker_code.auth import DEEPSEEK_PLATFORM_ID
12
12
  from pythinker_code.auth.oauth import OAuthEvent
13
13
  from pythinker_code.config import Config, LLMModel, LLMProvider, save_config
14
+ from pythinker_code.thinking import apply_login_thinking_defaults
14
15
  from pythinker_code.utils.aiohttp import new_client_session
15
16
 
16
17
  DEEPSEEK_BASE_URL = "https://api.deepseek.com/v1"
@@ -76,7 +77,7 @@ def _apply_deepseek_config(
76
77
  config.default_model = DEEPSEEK_DEFAULT_MODEL_ALIAS
77
78
  else:
78
79
  config.default_model = fallback
79
- config.default_thinking = False
80
+ apply_login_thinking_defaults(config, thinking=False, effort="off")
80
81
 
81
82
 
82
83
  def _model_by_id() -> dict[str, DeepSeekModel]: