pythinker-code 0.30.0__tar.gz → 0.32.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.30.0 → pythinker_code-0.32.0}/PKG-INFO +25 -25
  2. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/README.md +24 -24
  3. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/pyproject.toml +1 -1
  4. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/CHANGELOG.md +23 -0
  5. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/acp/session.py +1 -1
  6. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/agents/default/code_reviewer.yaml +5 -3
  7. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/agents/default/security_reviewer.yaml +6 -3
  8. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/app.py +29 -0
  9. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/cli/__init__.py +31 -4
  10. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/config.py +53 -7
  11. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/scratchpad.py +43 -0
  12. pythinker_code-0.32.0/src/pythinker_code/session_cleanup.py +260 -0
  13. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/session_recap.py +108 -9
  14. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/soul/agent.py +19 -7
  15. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/soul/approval.py +64 -10
  16. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/soul/dynamic_injections/auto_mode.py +37 -29
  17. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/soul/pythinkersoul.py +23 -8
  18. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/__init__.py +4 -0
  19. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/agent/description.md +2 -0
  20. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/shell/__init__.py +6 -6
  21. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/print/__init__.py +1 -1
  22. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/__init__.py +8 -4
  23. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/components/markdown.py +27 -14
  24. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/echo.py +14 -3
  25. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/motion.py +76 -30
  26. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/prompt.py +28 -5
  27. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/selectors/settings.py +12 -0
  28. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/slash.py +10 -22
  29. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/tool_renderers/__init__.py +2 -0
  30. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/tool_renderers/_render_utils.py +5 -7
  31. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/tool_renderers/agent.py +1 -1
  32. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/tool_renderers/ask_user.py +1 -1
  33. pythinker_code-0.32.0/src/pythinker_code/ui/shell/tool_renderers/skill.py +84 -0
  34. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/tool_renderers/todo.py +2 -2
  35. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/visualize/_blocks.py +137 -22
  36. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/visualize/_interactive.py +17 -0
  37. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/visualize/_live_view.py +46 -12
  38. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/visualize/_worklog.py +17 -9
  39. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/theme.py +25 -21
  40. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/utils/pyinstaller.py +12 -5
  41. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/utils/rich/markdown.py +32 -41
  42. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/utils/rich/syntax.py +32 -1
  43. pythinker_code-0.30.0/src/pythinker_code/web/static/assets/_baseUniq-BpBZwHN_.js → pythinker_code-0.32.0/src/pythinker_code/web/static/assets/_baseUniq-Bifyk8NN.js +1 -1
  44. pythinker_code-0.30.0/src/pythinker_code/web/static/assets/arc-DP9ud60-.js → pythinker_code-0.32.0/src/pythinker_code/web/static/assets/arc-BYpkXSz8.js +1 -1
  45. pythinker_code-0.30.0/src/pythinker_code/web/static/assets/architectureDiagram-VXUJARFQ-DTfdSqNy.js → pythinker_code-0.32.0/src/pythinker_code/web/static/assets/architectureDiagram-VXUJARFQ-CyKYl5gX.js +1 -1
  46. pythinker_code-0.30.0/src/pythinker_code/web/static/assets/blockDiagram-VD42YOAC-C2G2Cu29.js → pythinker_code-0.32.0/src/pythinker_code/web/static/assets/blockDiagram-VD42YOAC-CEgNKzwz.js +1 -1
  47. pythinker_code-0.30.0/src/pythinker_code/web/static/assets/c4Diagram-YG6GDRKO-ComToUA5.js → pythinker_code-0.32.0/src/pythinker_code/web/static/assets/c4Diagram-YG6GDRKO-BHjzrlC6.js +1 -1
  48. pythinker_code-0.32.0/src/pythinker_code/web/static/assets/channel-6SvD-Q3G.js +1 -0
  49. pythinker_code-0.30.0/src/pythinker_code/web/static/assets/chunk-4BX2VUAB-D96vnFIw.js → pythinker_code-0.32.0/src/pythinker_code/web/static/assets/chunk-4BX2VUAB-DfkR0dZ9.js +1 -1
  50. pythinker_code-0.30.0/src/pythinker_code/web/static/assets/chunk-55IACEB6-B0qnyDND.js → pythinker_code-0.32.0/src/pythinker_code/web/static/assets/chunk-55IACEB6-BGiC5VZW.js +1 -1
  51. pythinker_code-0.30.0/src/pythinker_code/web/static/assets/chunk-B4BG7PRW-DcgAnCnn.js → pythinker_code-0.32.0/src/pythinker_code/web/static/assets/chunk-B4BG7PRW-DxVGxC1F.js +1 -1
  52. pythinker_code-0.30.0/src/pythinker_code/web/static/assets/chunk-DI55MBZ5-CMZQpCjP.js → pythinker_code-0.32.0/src/pythinker_code/web/static/assets/chunk-DI55MBZ5-zN0LfjGZ.js +1 -1
  53. pythinker_code-0.30.0/src/pythinker_code/web/static/assets/chunk-FMBD7UC4-DKHRIomN.js → pythinker_code-0.32.0/src/pythinker_code/web/static/assets/chunk-FMBD7UC4-BzWNV9cS.js +1 -1
  54. pythinker_code-0.30.0/src/pythinker_code/web/static/assets/chunk-QN33PNHL-laZOaFx9.js → pythinker_code-0.32.0/src/pythinker_code/web/static/assets/chunk-QN33PNHL-BHLGK8_b.js +1 -1
  55. pythinker_code-0.30.0/src/pythinker_code/web/static/assets/chunk-QZHKN3VN-B1jKxOKI.js → pythinker_code-0.32.0/src/pythinker_code/web/static/assets/chunk-QZHKN3VN-Da0J0B84.js +1 -1
  56. pythinker_code-0.30.0/src/pythinker_code/web/static/assets/chunk-TZMSLE5B-yIThlDNj.js → pythinker_code-0.32.0/src/pythinker_code/web/static/assets/chunk-TZMSLE5B-Ct8dBGJH.js +1 -1
  57. pythinker_code-0.32.0/src/pythinker_code/web/static/assets/classDiagram-2ON5EDUG-D8_PjZVG.js +1 -0
  58. pythinker_code-0.32.0/src/pythinker_code/web/static/assets/classDiagram-v2-WZHVMYZB-D8_PjZVG.js +1 -0
  59. pythinker_code-0.32.0/src/pythinker_code/web/static/assets/clone-CFEh_EP3.js +1 -0
  60. pythinker_code-0.30.0/src/pythinker_code/web/static/assets/code-block-IT6T5CEO-CHP42Z9a.js → pythinker_code-0.32.0/src/pythinker_code/web/static/assets/code-block-IT6T5CEO-Cxm_b-b-.js +1 -1
  61. pythinker_code-0.30.0/src/pythinker_code/web/static/assets/cose-bilkent-S5V4N54A-CQ1HXW6x.js → pythinker_code-0.32.0/src/pythinker_code/web/static/assets/cose-bilkent-S5V4N54A-C5xz2pZw.js +1 -1
  62. pythinker_code-0.30.0/src/pythinker_code/web/static/assets/cytoscape.esm-C9FIomKi.js → pythinker_code-0.32.0/src/pythinker_code/web/static/assets/cytoscape.esm-DCXCrMWk.js +1 -1
  63. pythinker_code-0.30.0/src/pythinker_code/web/static/assets/dagre-6UL2VRFP-C2_b9bSH.js → pythinker_code-0.32.0/src/pythinker_code/web/static/assets/dagre-6UL2VRFP-DNG-R8yA.js +1 -1
  64. pythinker_code-0.30.0/src/pythinker_code/web/static/assets/diagram-PSM6KHXK-nEM7k0TB.js → pythinker_code-0.32.0/src/pythinker_code/web/static/assets/diagram-PSM6KHXK-CNOaVFaY.js +1 -1
  65. pythinker_code-0.30.0/src/pythinker_code/web/static/assets/diagram-QEK2KX5R-WrdMaUNh.js → pythinker_code-0.32.0/src/pythinker_code/web/static/assets/diagram-QEK2KX5R-Bwwcc_vK.js +1 -1
  66. pythinker_code-0.30.0/src/pythinker_code/web/static/assets/diagram-S2PKOQOG-DS3U5Zjh.js → pythinker_code-0.32.0/src/pythinker_code/web/static/assets/diagram-S2PKOQOG-DvnIsCVi.js +1 -1
  67. pythinker_code-0.30.0/src/pythinker_code/web/static/assets/erDiagram-Q2GNP2WA-BcWzCeiC.js → pythinker_code-0.32.0/src/pythinker_code/web/static/assets/erDiagram-Q2GNP2WA-Dl05OpEj.js +1 -1
  68. pythinker_code-0.30.0/src/pythinker_code/web/static/assets/flowDiagram-NV44I4VS-DdjIyGyT.js → pythinker_code-0.32.0/src/pythinker_code/web/static/assets/flowDiagram-NV44I4VS-BltqvXtV.js +1 -1
  69. pythinker_code-0.30.0/src/pythinker_code/web/static/assets/ganttDiagram-JELNMOA3-DqtkXHa6.js → pythinker_code-0.32.0/src/pythinker_code/web/static/assets/ganttDiagram-JELNMOA3-DL7PiVmE.js +1 -1
  70. pythinker_code-0.30.0/src/pythinker_code/web/static/assets/gitGraphDiagram-NY62KEGX-c-pctF5V.js → pythinker_code-0.32.0/src/pythinker_code/web/static/assets/gitGraphDiagram-NY62KEGX-CH4ZKKZj.js +1 -1
  71. pythinker_code-0.30.0/src/pythinker_code/web/static/assets/graph-fAmhffdU.js → pythinker_code-0.32.0/src/pythinker_code/web/static/assets/graph-B4Kzwv80.js +1 -1
  72. pythinker_code-0.30.0/src/pythinker_code/web/static/assets/index-BgmeZfYh.js → pythinker_code-0.32.0/src/pythinker_code/web/static/assets/index-BkNQzVTK.js +1 -1
  73. pythinker_code-0.30.0/src/pythinker_code/web/static/assets/index-D82Jkou6.js → pythinker_code-0.32.0/src/pythinker_code/web/static/assets/index-DJ8OfNNk.js +2 -2
  74. pythinker_code-0.30.0/src/pythinker_code/web/static/assets/index-D4RsU1W9.js → pythinker_code-0.32.0/src/pythinker_code/web/static/assets/index-Z_xsZ3W6.js +1 -1
  75. pythinker_code-0.30.0/src/pythinker_code/web/static/assets/infoDiagram-WHAUD3N6-DRLS8TXt.js → pythinker_code-0.32.0/src/pythinker_code/web/static/assets/infoDiagram-WHAUD3N6-ZAfE1Ir5.js +1 -1
  76. pythinker_code-0.30.0/src/pythinker_code/web/static/assets/journeyDiagram-XKPGCS4Q-BUtWQT7p.js → pythinker_code-0.32.0/src/pythinker_code/web/static/assets/journeyDiagram-XKPGCS4Q-CRmMzq2d.js +1 -1
  77. pythinker_code-0.30.0/src/pythinker_code/web/static/assets/kanban-definition-3W4ZIXB7-DnSOvMIT.js → pythinker_code-0.32.0/src/pythinker_code/web/static/assets/kanban-definition-3W4ZIXB7-B8Li9_1d.js +1 -1
  78. pythinker_code-0.30.0/src/pythinker_code/web/static/assets/layout-B56R08kx.js → pythinker_code-0.32.0/src/pythinker_code/web/static/assets/layout-DX5pYCeV.js +1 -1
  79. pythinker_code-0.30.0/src/pythinker_code/web/static/assets/linear-B7Z5u4Ef.js → pythinker_code-0.32.0/src/pythinker_code/web/static/assets/linear-pptMzQ-K.js +1 -1
  80. pythinker_code-0.30.0/src/pythinker_code/web/static/assets/mermaid-VLURNSYL-CBRFGpvi.js → pythinker_code-0.32.0/src/pythinker_code/web/static/assets/mermaid-VLURNSYL-b7xUvj9U.js +7 -7
  81. pythinker_code-0.30.0/src/pythinker_code/web/static/assets/mermaid.core-BuhofBVT.js → pythinker_code-0.32.0/src/pythinker_code/web/static/assets/mermaid.core-DCw3BYz7.js +5 -5
  82. pythinker_code-0.30.0/src/pythinker_code/web/static/assets/min-C3PE9D8T.js → pythinker_code-0.32.0/src/pythinker_code/web/static/assets/min-tMI5897w.js +1 -1
  83. pythinker_code-0.30.0/src/pythinker_code/web/static/assets/mindmap-definition-VGOIOE7T-DBKiQrtd.js → pythinker_code-0.32.0/src/pythinker_code/web/static/assets/mindmap-definition-VGOIOE7T-C6aZL2vS.js +1 -1
  84. pythinker_code-0.30.0/src/pythinker_code/web/static/assets/pieDiagram-ADFJNKIX-kQOSbgTo.js → pythinker_code-0.32.0/src/pythinker_code/web/static/assets/pieDiagram-ADFJNKIX-vNbhzK3J.js +1 -1
  85. pythinker_code-0.30.0/src/pythinker_code/web/static/assets/quadrantDiagram-AYHSOK5B-j4UapWXo.js → pythinker_code-0.32.0/src/pythinker_code/web/static/assets/quadrantDiagram-AYHSOK5B-bBv6bv7G.js +1 -1
  86. pythinker_code-0.30.0/src/pythinker_code/web/static/assets/requirementDiagram-UZGBJVZJ-C1ZQuL0D.js → pythinker_code-0.32.0/src/pythinker_code/web/static/assets/requirementDiagram-UZGBJVZJ-CGSWL41c.js +1 -1
  87. pythinker_code-0.30.0/src/pythinker_code/web/static/assets/sankeyDiagram-TZEHDZUN-CX5TCpHV.js → pythinker_code-0.32.0/src/pythinker_code/web/static/assets/sankeyDiagram-TZEHDZUN-fmgNCgCs.js +1 -1
  88. pythinker_code-0.30.0/src/pythinker_code/web/static/assets/sequenceDiagram-WL72ISMW-DFM_2rnO.js → pythinker_code-0.32.0/src/pythinker_code/web/static/assets/sequenceDiagram-WL72ISMW-DuYLVv43.js +1 -1
  89. pythinker_code-0.30.0/src/pythinker_code/web/static/assets/stateDiagram-FKZM4ZOC-BATCmOry.js → pythinker_code-0.32.0/src/pythinker_code/web/static/assets/stateDiagram-FKZM4ZOC-DSpubNLv.js +1 -1
  90. pythinker_code-0.32.0/src/pythinker_code/web/static/assets/stateDiagram-v2-4FDKWEC3-I3HpLmKV.js +1 -0
  91. pythinker_code-0.30.0/src/pythinker_code/web/static/assets/timeline-definition-IT6M3QCI-CcwzUm5O.js → pythinker_code-0.32.0/src/pythinker_code/web/static/assets/timeline-definition-IT6M3QCI-_GniQiss.js +1 -1
  92. pythinker_code-0.30.0/src/pythinker_code/web/static/assets/treemap-KMMF4GRG-DHL8NzIM.js → pythinker_code-0.32.0/src/pythinker_code/web/static/assets/treemap-KMMF4GRG-FD_NWnVZ.js +1 -1
  93. pythinker_code-0.30.0/src/pythinker_code/web/static/assets/xychartDiagram-PRI3JC2R-Bz9jd22K.js → pythinker_code-0.32.0/src/pythinker_code/web/static/assets/xychartDiagram-PRI3JC2R-CWP4yJ_Q.js +1 -1
  94. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/index.html +1 -1
  95. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/wire/__init__.py +4 -1
  96. pythinker_code-0.30.0/src/pythinker_code/web/static/assets/channel-D7XKNUp-.js +0 -1
  97. pythinker_code-0.30.0/src/pythinker_code/web/static/assets/classDiagram-2ON5EDUG-C5iasCpX.js +0 -1
  98. pythinker_code-0.30.0/src/pythinker_code/web/static/assets/classDiagram-v2-WZHVMYZB-C5iasCpX.js +0 -1
  99. pythinker_code-0.30.0/src/pythinker_code/web/static/assets/clone-qwIL_iPW.js +0 -1
  100. pythinker_code-0.30.0/src/pythinker_code/web/static/assets/stateDiagram-v2-4FDKWEC3-D7KeOreI.js +0 -1
  101. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/LICENSE +0 -0
  102. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/NOTICE +0 -0
  103. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/__init__.py +0 -0
  104. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/__main__.py +0 -0
  105. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/acp/AGENTS.md +0 -0
  106. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/acp/__init__.py +0 -0
  107. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/acp/convert.py +0 -0
  108. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/acp/host.py +0 -0
  109. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/acp/mcp.py +0 -0
  110. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/acp/server.py +0 -0
  111. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/acp/tools.py +0 -0
  112. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/acp/types.py +0 -0
  113. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/acp/version.py +0 -0
  114. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/agents/default/agent.yaml +0 -0
  115. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/agents/default/coder.yaml +0 -0
  116. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/agents/default/debugger.yaml +0 -0
  117. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/agents/default/explore.yaml +0 -0
  118. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/agents/default/implementer.yaml +0 -0
  119. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/agents/default/judge.yaml +0 -0
  120. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/agents/default/plan.yaml +0 -0
  121. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/agents/default/review.yaml +0 -0
  122. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/agents/default/system.md +0 -0
  123. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/agents/default/verifier.yaml +0 -0
  124. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/agents/okabe/agent.yaml +0 -0
  125. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/agentspec.py +0 -0
  126. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/approval_runtime/__init__.py +0 -0
  127. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/approval_runtime/models.py +0 -0
  128. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/approval_runtime/runtime.py +0 -0
  129. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/auth/__init__.py +0 -0
  130. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/auth/anthropic_direct.py +0 -0
  131. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/auth/browser_login_page.py +0 -0
  132. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/auth/deepseek.py +0 -0
  133. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/auth/github_feedback.py +0 -0
  134. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/auth/lm_studio.py +0 -0
  135. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/auth/minimax.py +0 -0
  136. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/auth/oauth.py +0 -0
  137. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/auth/ollama.py +0 -0
  138. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/auth/openai.py +0 -0
  139. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/auth/opencode_go.py +0 -0
  140. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/auth/openrouter.py +0 -0
  141. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/auth/platforms.py +0 -0
  142. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/background/__init__.py +0 -0
  143. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/background/agent_runner.py +0 -0
  144. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/background/ids.py +0 -0
  145. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/background/manager.py +0 -0
  146. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/background/models.py +0 -0
  147. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/background/store.py +0 -0
  148. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/background/summary.py +0 -0
  149. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/background/worker.py +0 -0
  150. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/cli/__main__.py +0 -0
  151. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/cli/_lazy_group.py +0 -0
  152. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/cli/debug.py +0 -0
  153. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/cli/export.py +0 -0
  154. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/cli/info.py +0 -0
  155. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/cli/mcp.py +0 -0
  156. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/cli/plugin.py +0 -0
  157. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/cli/review.py +0 -0
  158. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/cli/secscan.py +0 -0
  159. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/cli/security_scan.py +0 -0
  160. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/cli/skill.py +0 -0
  161. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/cli/toad.py +0 -0
  162. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/cli/update.py +0 -0
  163. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/cli/vis.py +0 -0
  164. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/cli/web.py +0 -0
  165. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/constant.py +0 -0
  166. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/events.py +0 -0
  167. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/exception.py +0 -0
  168. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/execution_profiles.py +0 -0
  169. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/extensions.py +0 -0
  170. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/feedback.py +0 -0
  171. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/feedback_repo.py +0 -0
  172. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/file_restore.py +0 -0
  173. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/hooks/__init__.py +0 -0
  174. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/hooks/config.py +0 -0
  175. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/hooks/engine.py +0 -0
  176. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/hooks/events.py +0 -0
  177. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/hooks/runner.py +0 -0
  178. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/llm.py +0 -0
  179. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/memory/__init__.py +0 -0
  180. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/memory/consolidation.py +0 -0
  181. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/memory/harvest.py +0 -0
  182. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/memory/recall.py +0 -0
  183. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/memory/recap.py +0 -0
  184. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/memory/retriever.py +0 -0
  185. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/memory/sanitize.py +0 -0
  186. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/metadata.py +0 -0
  187. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/native.py +0 -0
  188. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/notifications/__init__.py +0 -0
  189. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/notifications/llm.py +0 -0
  190. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/notifications/manager.py +0 -0
  191. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/notifications/models.py +0 -0
  192. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/notifications/notifier.py +0 -0
  193. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/notifications/store.py +0 -0
  194. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/notifications/wire.py +0 -0
  195. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/plugin/__init__.py +0 -0
  196. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/plugin/manager.py +0 -0
  197. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/plugin/tool.py +0 -0
  198. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/project_memory.py +0 -0
  199. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/prompt_templates.py +0 -0
  200. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/prompts/__init__.py +0 -0
  201. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/prompts/compact.md +0 -0
  202. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/prompts/init.md +0 -0
  203. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/py.typed +0 -0
  204. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/session.py +0 -0
  205. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/session_fork.py +0 -0
  206. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/session_state.py +0 -0
  207. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/share.py +0 -0
  208. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/skill/__init__.py +0 -0
  209. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/skill/flow/__init__.py +0 -0
  210. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/skill/flow/d2.py +0 -0
  211. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/skill/flow/mermaid.py +0 -0
  212. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/skill/lockfile.py +0 -0
  213. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/skills/check-impl-against-spec/SKILL.md +0 -0
  214. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/skills/create-pr/SKILL.md +0 -0
  215. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/skills/diagnose-ci-failures/SKILL.md +0 -0
  216. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/skills/fix-errors/SKILL.md +0 -0
  217. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/skills/implement-specs/SKILL.md +0 -0
  218. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/skills/pr-walkthrough/SKILL.md +0 -0
  219. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/skills/pythinker-code-help/SKILL.md +0 -0
  220. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/skills/reproduce-bug-report/SKILL.md +0 -0
  221. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/skills/resolve-merge-conflicts/SKILL.md +0 -0
  222. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/skills/review-pr/SKILL.md +0 -0
  223. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/skills/skill-creator/SKILL.md +0 -0
  224. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/skills/spec-driven-implementation/SKILL.md +0 -0
  225. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/skills/write-product-spec/SKILL.md +0 -0
  226. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/skills/write-tech-spec/SKILL.md +0 -0
  227. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/soul/__init__.py +0 -0
  228. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/soul/btw.py +0 -0
  229. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/soul/compaction.py +0 -0
  230. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/soul/compaction_restore.py +0 -0
  231. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/soul/context.py +0 -0
  232. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/soul/deliberation.py +0 -0
  233. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/soul/denwarenji.py +0 -0
  234. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/soul/dynamic_injection.py +0 -0
  235. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/soul/dynamic_injections/__init__.py +0 -0
  236. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/soul/dynamic_injections/plan_mode.py +0 -0
  237. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/soul/message.py +0 -0
  238. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/soul/permission.py +0 -0
  239. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/soul/slash.py +0 -0
  240. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/soul/toolset.py +0 -0
  241. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/subagents/__init__.py +0 -0
  242. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/subagents/builder.py +0 -0
  243. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/subagents/core.py +0 -0
  244. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/subagents/discovery.py +0 -0
  245. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/subagents/git_context.py +0 -0
  246. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/subagents/models.py +0 -0
  247. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/subagents/output.py +0 -0
  248. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/subagents/registry.py +0 -0
  249. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/subagents/runner.py +0 -0
  250. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/subagents/store.py +0 -0
  251. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/telemetry/__init__.py +0 -0
  252. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/telemetry/config.py +0 -0
  253. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/telemetry/crash.py +0 -0
  254. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/telemetry/errors.py +0 -0
  255. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/telemetry/metrics.py +0 -0
  256. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/telemetry/otel.py +0 -0
  257. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/telemetry/sentry.py +0 -0
  258. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/telemetry/sink.py +0 -0
  259. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/thinking.py +0 -0
  260. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/AGENTS.md +0 -0
  261. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/agent/__init__.py +0 -0
  262. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/ask_user/__init__.py +0 -0
  263. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/ask_user/description.md +0 -0
  264. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/background/__init__.py +0 -0
  265. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/background/handoff.md +0 -0
  266. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/background/input.md +0 -0
  267. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/background/list.md +0 -0
  268. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/background/output.md +0 -0
  269. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/background/stop.md +0 -0
  270. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/display.py +0 -0
  271. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/dmail/__init__.py +0 -0
  272. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/dmail/dmail.md +0 -0
  273. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/file/__init__.py +0 -0
  274. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/file/glob.md +0 -0
  275. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/file/glob.py +0 -0
  276. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/file/grep.md +0 -0
  277. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/file/grep_local.py +0 -0
  278. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/file/plan_mode.py +0 -0
  279. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/file/read.md +0 -0
  280. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/file/read.py +0 -0
  281. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/file/read_media.md +0 -0
  282. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/file/read_media.py +0 -0
  283. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/file/replace.md +0 -0
  284. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/file/replace.py +0 -0
  285. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/file/utils.py +0 -0
  286. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/file/write.md +0 -0
  287. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/file/write.py +0 -0
  288. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/memory/__init__.py +0 -0
  289. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/memory/memory.md +0 -0
  290. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/plan/__init__.py +0 -0
  291. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/plan/description.md +0 -0
  292. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/plan/enter.py +0 -0
  293. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/plan/enter_description.md +0 -0
  294. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/plan/handoff.py +0 -0
  295. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/plan/heroes.py +0 -0
  296. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/scratchpad/__init__.py +0 -0
  297. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/scratchpad/scratchpad_tool.md +0 -0
  298. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/shell/bash.md +0 -0
  299. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/shell/powershell.md +0 -0
  300. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/skill/__init__.py +0 -0
  301. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/skill/description.md +0 -0
  302. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/test.py +0 -0
  303. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/think/__init__.py +0 -0
  304. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/think/think.md +0 -0
  305. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/todo/__init__.py +0 -0
  306. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/todo/set_todo_list.md +0 -0
  307. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/utils.py +0 -0
  308. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/web/__init__.py +0 -0
  309. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/web/_allowlist.py +0 -0
  310. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/web/fetch.md +0 -0
  311. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/web/fetch.py +0 -0
  312. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/web/search.md +0 -0
  313. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/tools/web/search.py +0 -0
  314. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/__init__.py +0 -0
  315. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/acp/__init__.py +0 -0
  316. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/print/visualize.py +0 -0
  317. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/components/__init__.py +0 -0
  318. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/components/base.py +0 -0
  319. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/components/bash_execution.py +0 -0
  320. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/components/bordered_loader.py +0 -0
  321. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/components/diff.py +0 -0
  322. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/components/dynamic_border.py +0 -0
  323. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/components/footer.py +0 -0
  324. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/components/key_hints.py +0 -0
  325. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/components/messages.py +0 -0
  326. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/components/panel.py +0 -0
  327. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/components/render_utils.py +0 -0
  328. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/components/report.py +0 -0
  329. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/components/settings_list.py +0 -0
  330. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/components/special_messages.py +0 -0
  331. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/components/tool_execution.py +0 -0
  332. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/console.py +0 -0
  333. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/debug.py +0 -0
  334. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/design_system.py +0 -0
  335. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/export_import.py +0 -0
  336. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/glyphs.py +0 -0
  337. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/keyboard.py +0 -0
  338. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/keymap.py +0 -0
  339. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/mcp_status.py +0 -0
  340. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/model_picker.py +0 -0
  341. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/oauth.py +0 -0
  342. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/placeholders.py +0 -0
  343. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/render_constants.py +0 -0
  344. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/replay.py +0 -0
  345. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/selector.py +0 -0
  346. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/selectors/__init__.py +0 -0
  347. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/selectors/extension.py +0 -0
  348. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/selectors/oauth.py +0 -0
  349. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/selectors/show_images.py +0 -0
  350. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/selectors/theme.py +0 -0
  351. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/selectors/thinking.py +0 -0
  352. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/session_picker.py +0 -0
  353. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/setup.py +0 -0
  354. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/spacing.py +0 -0
  355. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/spinner_words.py +0 -0
  356. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/startup.py +0 -0
  357. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/task_browser.py +0 -0
  358. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/tips.py +0 -0
  359. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/tool_renderers/_file_diff.py +0 -0
  360. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/tool_renderers/background.py +0 -0
  361. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/tool_renderers/bash.py +0 -0
  362. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/tool_renderers/edit.py +0 -0
  363. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/tool_renderers/find.py +0 -0
  364. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/tool_renderers/generic.py +0 -0
  365. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/tool_renderers/grep.py +0 -0
  366. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/tool_renderers/plan.py +0 -0
  367. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/tool_renderers/read.py +0 -0
  368. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/tool_renderers/think.py +0 -0
  369. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/tool_renderers/web.py +0 -0
  370. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/tool_renderers/write.py +0 -0
  371. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/update.py +0 -0
  372. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/update_orchestrator.py +0 -0
  373. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/usage.py +0 -0
  374. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/usage_adapters/__init__.py +0 -0
  375. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/usage_adapters/anthropic_admin.py +0 -0
  376. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/usage_adapters/base.py +0 -0
  377. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/usage_adapters/deepseek.py +0 -0
  378. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/usage_adapters/minimax.py +0 -0
  379. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/usage_adapters/openai_admin.py +0 -0
  380. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/usage_adapters/openai_chatgpt.py +0 -0
  381. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/usage_adapters/opencode_go.py +0 -0
  382. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/usage_adapters/openrouter.py +0 -0
  383. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/usage_adapters/pythinker.py +0 -0
  384. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/usage_adapters/pythinker_ai.py +0 -0
  385. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/usage_render.py +0 -0
  386. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/visualize/__init__.py +0 -0
  387. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/visualize/_activity_tree.py +0 -0
  388. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/visualize/_approval_panel.py +0 -0
  389. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/visualize/_btw_panel.py +0 -0
  390. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/visualize/_dialog_shell.py +0 -0
  391. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/visualize/_input_router.py +0 -0
  392. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/visualize/_question_panel.py +0 -0
  393. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/shell/visualize/_transcript.py +0 -0
  394. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/terminal_capabilities.py +0 -0
  395. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/ui/tui_config.py +0 -0
  396. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/usage_ratelimit_cache.py +0 -0
  397. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/utils/__init__.py +0 -0
  398. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/utils/aiohttp.py +0 -0
  399. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/utils/aioqueue.py +0 -0
  400. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/utils/broadcast.py +0 -0
  401. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/utils/changelog.py +0 -0
  402. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/utils/clipboard.py +0 -0
  403. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/utils/datetime.py +0 -0
  404. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/utils/diff.py +0 -0
  405. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/utils/editor.py +0 -0
  406. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/utils/environment.py +0 -0
  407. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/utils/envvar.py +0 -0
  408. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/utils/export.py +0 -0
  409. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/utils/file_filter.py +0 -0
  410. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/utils/frontmatter.py +0 -0
  411. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/utils/io.py +0 -0
  412. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/utils/logging.py +0 -0
  413. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/utils/media_tags.py +0 -0
  414. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/utils/message.py +0 -0
  415. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/utils/path.py +0 -0
  416. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/utils/proctitle.py +0 -0
  417. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/utils/proxy.py +0 -0
  418. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/utils/rich/__init__.py +0 -0
  419. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/utils/rich/columns.py +0 -0
  420. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/utils/rich/diff_render.py +0 -0
  421. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/utils/rich/markdown_sample.md +0 -0
  422. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/utils/rich/markdown_sample_short.md +0 -0
  423. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/utils/sensitive.py +0 -0
  424. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/utils/server.py +0 -0
  425. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/utils/signals.py +0 -0
  426. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/utils/slashcmd.py +0 -0
  427. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/utils/sleep_inhibitor.py +0 -0
  428. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/utils/string.py +0 -0
  429. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/utils/subprocess_env.py +0 -0
  430. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/utils/term.py +0 -0
  431. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/utils/typing.py +0 -0
  432. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/vis/__init__.py +0 -0
  433. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/vis/api/__init__.py +0 -0
  434. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/vis/api/sessions.py +0 -0
  435. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/vis/api/statistics.py +0 -0
  436. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/vis/api/system.py +0 -0
  437. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/vis/app.py +0 -0
  438. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/vis/static/assets/highlighted-body-B3W2YXNL-CY1rtwrX.js +0 -0
  439. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/vis/static/assets/index-DSRInNnm.css +0 -0
  440. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/vis/static/assets/index-DgmTI2M_.js +0 -0
  441. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/vis/static/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
  442. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/vis/static/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
  443. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/vis/static/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
  444. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/vis/static/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
  445. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/vis/static/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
  446. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/vis/static/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
  447. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/vis/static/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
  448. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/vis/static/index.html +0 -0
  449. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/__init__.py +0 -0
  450. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/api/__init__.py +0 -0
  451. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/api/config.py +0 -0
  452. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/api/open_in.py +0 -0
  453. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/api/sessions.py +0 -0
  454. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/app.py +0 -0
  455. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/auth.py +0 -0
  456. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/models.py +0 -0
  457. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/runner/__init__.py +0 -0
  458. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/runner/messages.py +0 -0
  459. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/runner/process.py +0 -0
  460. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/runner/worker.py +0 -0
  461. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/_headers +0 -0
  462. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  463. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  464. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  465. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  466. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  467. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  468. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  469. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  470. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  471. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  472. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  473. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  474. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  475. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  476. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  477. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  478. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  479. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  480. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  481. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  482. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  483. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  484. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  485. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  486. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  487. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  488. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  489. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  490. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  491. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  492. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  493. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  494. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  495. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  496. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  497. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  498. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  499. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  500. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  501. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  502. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  503. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  504. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  505. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  506. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  507. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  508. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  509. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  510. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  511. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  512. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  513. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  514. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  515. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  516. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  517. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  518. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  519. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  520. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  521. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/abap-BdImnpbu.js +0 -0
  522. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/actionscript-3-CfeIJUat.js +0 -0
  523. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/ada-bCR0ucgS.js +0 -0
  524. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/andromeeda-C-Jbm3Hp.js +0 -0
  525. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/angular-html-CU67Zn6k.js +0 -0
  526. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/angular-ts-BwZT4LLn.js +0 -0
  527. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/apache-Pmp26Uib.js +0 -0
  528. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/apex-D8_7TLub.js +0 -0
  529. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/apl-dKokRX4l.js +0 -0
  530. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/applescript-Co6uUVPk.js +0 -0
  531. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/ara-BRHolxvo.js +0 -0
  532. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/asciidoc-Dv7Oe6Be.js +0 -0
  533. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/asm-D_Q5rh1f.js +0 -0
  534. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/astro-CbQHKStN.js +0 -0
  535. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/aurora-x-D-2ljcwZ.js +0 -0
  536. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/awk-DMzUqQB5.js +0 -0
  537. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/ayu-dark-CmMr59Fi.js +0 -0
  538. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/ballerina-BFfxhgS-.js +0 -0
  539. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/bat-BkioyH1T.js +0 -0
  540. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/beancount-k_qm7-4y.js +0 -0
  541. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/berry-uYugtg8r.js +0 -0
  542. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/bibtex-CHM0blh-.js +0 -0
  543. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/bicep-Bmn6On1c.js +0 -0
  544. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/blade-D4QpJJKB.js +0 -0
  545. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/bsl-BO_Y6i37.js +0 -0
  546. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/c-BIGW1oBm.js +0 -0
  547. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/c3-VCDPK7BO.js +0 -0
  548. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/cadence-Bv_4Rxtq.js +0 -0
  549. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/cairo-KRGpt6FW.js +0 -0
  550. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/catppuccin-frappe-DFWUc33u.js +0 -0
  551. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/catppuccin-latte-C9dUb6Cb.js +0 -0
  552. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/catppuccin-macchiato-DQyhUUbL.js +0 -0
  553. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/catppuccin-mocha-D87Tk5Gz.js +0 -0
  554. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/clarity-D53aC0YG.js +0 -0
  555. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/clojure-P80f7IUj.js +0 -0
  556. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/cmake-D1j8_8rp.js +0 -0
  557. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/cobol-nwyudZeR.js +0 -0
  558. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/codeowners-Bp6g37R7.js +0 -0
  559. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/codeql-DsOJ9woJ.js +0 -0
  560. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/coffee-Ch7k5sss.js +0 -0
  561. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/common-lisp-Cg-RD9OK.js +0 -0
  562. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/coq-DkFqJrB1.js +0 -0
  563. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/cpp-CofmeUqb.js +0 -0
  564. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/crystal-tKQVLTB8.js +0 -0
  565. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/csharp-K5feNrxe.js +0 -0
  566. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/css-DPfMkruS.js +0 -0
  567. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/csv-fuZLfV_i.js +0 -0
  568. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/cue-D82EKSYY.js +0 -0
  569. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/cypher-COkxafJQ.js +0 -0
  570. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/d-85-TOEBH.js +0 -0
  571. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/dark-plus-C3mMm8J8.js +0 -0
  572. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/dart-CF10PKvl.js +0 -0
  573. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/dax-CEL-wOlO.js +0 -0
  574. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/defaultLocale-DX6XiGOO.js +0 -0
  575. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/desktop-BmXAJ9_W.js +0 -0
  576. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/diff-D97Zzqfu.js +0 -0
  577. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/docker-BcOcwvcX.js +0 -0
  578. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/dotenv-Da5cRb03.js +0 -0
  579. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/dracula-BzJJZx-M.js +0 -0
  580. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/dracula-soft-BXkSAIEj.js +0 -0
  581. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/dream-maker-BtqSS_iP.js +0 -0
  582. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/edge-BkV0erSs.js +0 -0
  583. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/elixir-CDX3lj18.js +0 -0
  584. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/elm-DbKCFpqz.js +0 -0
  585. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/emacs-lisp-C9XAeP06.js +0 -0
  586. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/erb-BOJIQeun.js +0 -0
  587. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/erlang-DsQrWhSR.js +0 -0
  588. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/everforest-dark-BgDCqdQA.js +0 -0
  589. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/everforest-light-C8M2exoo.js +0 -0
  590. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/fennel-BYunw83y.js +0 -0
  591. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/fish-BvzEVeQv.js +0 -0
  592. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/fluent-C4IJs8-o.js +0 -0
  593. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/fortran-fixed-form-CkoXwp7k.js +0 -0
  594. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/fortran-free-form-BxgE0vQu.js +0 -0
  595. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/fsharp-CXgrBDvD.js +0 -0
  596. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/gdresource-B7Tvp0Sc.js +0 -0
  597. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/gdscript-DTMYz4Jt.js +0 -0
  598. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/gdshader-DkwncUOv.js +0 -0
  599. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/genie-D0YGMca9.js +0 -0
  600. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/gherkin-DyxjwDmM.js +0 -0
  601. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/git-commit-F4YmCXRG.js +0 -0
  602. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/git-rebase-r7XF79zn.js +0 -0
  603. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/github-dark-DHJKELXO.js +0 -0
  604. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/github-dark-default-Cuk6v7N8.js +0 -0
  605. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/github-dark-dimmed-DH5Ifo-i.js +0 -0
  606. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/github-dark-high-contrast-E3gJ1_iC.js +0 -0
  607. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/github-light-DAi9KRSo.js +0 -0
  608. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/github-light-default-D7oLnXFd.js +0 -0
  609. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/github-light-high-contrast-BfjtVDDH.js +0 -0
  610. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/gleam-BspZqrRM.js +0 -0
  611. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/glimmer-js-Rg0-pVw9.js +0 -0
  612. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/glimmer-ts-U6CK756n.js +0 -0
  613. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/glsl-DplSGwfg.js +0 -0
  614. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/gn-n2N0HUVH.js +0 -0
  615. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/gnuplot-DdkO51Og.js +0 -0
  616. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/go-Dn2_MT6a.js +0 -0
  617. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/graphql-ChdNCCLP.js +0 -0
  618. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/groovy-gcz8RCvz.js +0 -0
  619. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/gruvbox-dark-hard-CFHQjOhq.js +0 -0
  620. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/gruvbox-dark-medium-GsRaNv29.js +0 -0
  621. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/gruvbox-dark-soft-CVdnzihN.js +0 -0
  622. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/gruvbox-light-hard-CH1njM8p.js +0 -0
  623. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/gruvbox-light-medium-DRw_LuNl.js +0 -0
  624. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/gruvbox-light-soft-hJgmCMqR.js +0 -0
  625. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/hack-CaT9iCJl.js +0 -0
  626. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/haml-B8DHNrY2.js +0 -0
  627. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/handlebars-BL8al0AC.js +0 -0
  628. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/haskell-Df6bDoY_.js +0 -0
  629. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/haxe-CzTSHFRz.js +0 -0
  630. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/hcl-BWvSN4gD.js +0 -0
  631. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/hjson-D5-asLiD.js +0 -0
  632. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/hlsl-D3lLCCz7.js +0 -0
  633. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/houston-DnULxvSX.js +0 -0
  634. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/html-GMplVEZG.js +0 -0
  635. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/html-derivative-BFtXZ54Q.js +0 -0
  636. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/http-jrhK8wxY.js +0 -0
  637. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/hurl-irOxFIW8.js +0 -0
  638. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/hxml-Bvhsp5Yf.js +0 -0
  639. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/hy-DFXneXwc.js +0 -0
  640. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/imba-DGztddWO.js +0 -0
  641. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/index-BpoLgcEt.js +0 -0
  642. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/index-CzV_vCfu.css +0 -0
  643. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/index-DI2oedCt.js +0 -0
  644. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/ini-BEwlwnbL.js +0 -0
  645. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/init-Gi6I4Gst.js +0 -0
  646. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
  647. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
  648. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
  649. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
  650. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
  651. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
  652. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
  653. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/java-CylS5w8V.js +0 -0
  654. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/javascript-wDzz0qaB.js +0 -0
  655. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/jinja-4LBKfQ-Z.js +0 -0
  656. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/jison-wvAkD_A8.js +0 -0
  657. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/json-Cp-IABpG.js +0 -0
  658. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/json5-C9tS-k6U.js +0 -0
  659. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/jsonc-Des-eS-w.js +0 -0
  660. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/jsonl-DcaNXYhu.js +0 -0
  661. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/jsonnet-DFQXde-d.js +0 -0
  662. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/jssm-C2t-YnRu.js +0 -0
  663. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/jsx-g9-lgVsj.js +0 -0
  664. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/julia-CxzCAyBv.js +0 -0
  665. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/kanagawa-dragon-CkXjmgJE.js +0 -0
  666. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/kanagawa-lotus-CfQXZHmo.js +0 -0
  667. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/kanagawa-wave-DWedfzmr.js +0 -0
  668. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/katex-D2lIc1rk.css +0 -0
  669. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/kdl-DV7GczEv.js +0 -0
  670. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/kotlin-BdnUsdx6.js +0 -0
  671. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/kusto-DZf3V79B.js +0 -0
  672. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/laserwave-DUszq2jm.js +0 -0
  673. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/latex-B4uzh10-.js +0 -0
  674. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/lean-BZvkOJ9d.js +0 -0
  675. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/less-B1dDrJ26.js +0 -0
  676. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/light-plus-B7mTdjB0.js +0 -0
  677. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/liquid-DYVedYrR.js +0 -0
  678. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/llvm-BtvRca6l.js +0 -0
  679. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/log-2UxHyX5q.js +0 -0
  680. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/logo-BtOb2qkB.js +0 -0
  681. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/lua-BbnMAYS6.js +0 -0
  682. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/luau-C-HG3fhB.js +0 -0
  683. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/make-CHLpvVh8.js +0 -0
  684. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/markdown-Cvjx9yec.js +0 -0
  685. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/marko-DZsq8hO1.js +0 -0
  686. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/material-theme-D5KoaKCx.js +0 -0
  687. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/material-theme-darker-BfHTSMKl.js +0 -0
  688. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/material-theme-lighter-B0m2ddpp.js +0 -0
  689. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/material-theme-ocean-CyktbL80.js +0 -0
  690. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/material-theme-palenight-Csfq5Kiy.js +0 -0
  691. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/matlab-D7o27uSR.js +0 -0
  692. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/mdc-DUICxH0z.js +0 -0
  693. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/mdx-Cmh6b_Ma.js +0 -0
  694. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/mermaid-VLURNSYL-YVZJy7__.css +0 -0
  695. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/mermaid-mWjccvbQ.js +0 -0
  696. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/min-dark-CafNBF8u.js +0 -0
  697. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/min-light-CTRr51gU.js +0 -0
  698. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/mipsasm-CKIfxQSi.js +0 -0
  699. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/mojo-B93PlW-d.js +0 -0
  700. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/monokai-D4h5O-jR.js +0 -0
  701. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/moonbit-Ba13S78F.js +0 -0
  702. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/move-Bu9oaDYs.js +0 -0
  703. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/narrat-DRg8JJMk.js +0 -0
  704. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/nextflow-BrzmwbiE.js +0 -0
  705. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/nginx-DknmC5AR.js +0 -0
  706. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/night-owl-C39BiMTA.js +0 -0
  707. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/nim-CVrawwO9.js +0 -0
  708. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/nix-CwoSXNpI.js +0 -0
  709. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/nord-Ddv68eIx.js +0 -0
  710. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/nushell-C-sUppwS.js +0 -0
  711. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/objective-c-DXmwc3jG.js +0 -0
  712. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/objective-cpp-CLxacb5B.js +0 -0
  713. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/ocaml-C0hk2d4L.js +0 -0
  714. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/one-dark-pro-DVMEJ2y_.js +0 -0
  715. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/one-light-PoHY5YXO.js +0 -0
  716. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/openscad-C4EeE6gA.js +0 -0
  717. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/ordinal-Cboi1Yqb.js +0 -0
  718. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/pascal-D93ZcfNL.js +0 -0
  719. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/perl-C0TMdlhV.js +0 -0
  720. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/php-CDn_0X-4.js +0 -0
  721. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/pkl-u5AG7uiY.js +0 -0
  722. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/plastic-3e1v2bzS.js +0 -0
  723. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/plsql-ChMvpjG-.js +0 -0
  724. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/po-BTJTHyun.js +0 -0
  725. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/poimandres-CS3Unz2-.js +0 -0
  726. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/polar-C0HS_06l.js +0 -0
  727. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/postcss-CXtECtnM.js +0 -0
  728. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/powerquery-CEu0bR-o.js +0 -0
  729. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/powershell-Dpen1YoG.js +0 -0
  730. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/prisma-Dd19v3D-.js +0 -0
  731. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/prolog-CbFg5uaA.js +0 -0
  732. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/proto-C7zT0LnQ.js +0 -0
  733. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/pug-CGlum2m_.js +0 -0
  734. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/puppet-BMWR74SV.js +0 -0
  735. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/purescript-CklMAg4u.js +0 -0
  736. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/python-B6aJPvgy.js +0 -0
  737. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/qml-3beO22l8.js +0 -0
  738. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/qmldir-C8lEn-DE.js +0 -0
  739. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/qss-IeuSbFQv.js +0 -0
  740. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/r-Dspwwk_N.js +0 -0
  741. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/racket-BqYA7rlc.js +0 -0
  742. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/raku-DXvB9xmW.js +0 -0
  743. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/razor-C1TweQQi.js +0 -0
  744. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/red-bN70gL4F.js +0 -0
  745. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/reg-C-SQnVFl.js +0 -0
  746. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/regexp-CDVJQ6XC.js +0 -0
  747. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/rel-C3B-1QV4.js +0 -0
  748. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/riscv-BM1_JUlF.js +0 -0
  749. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/rose-pine-dawn-DHQR4-dF.js +0 -0
  750. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/rose-pine-moon-D4_iv3hh.js +0 -0
  751. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/rose-pine-qdsjHGoJ.js +0 -0
  752. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/rosmsg-BJDFO7_C.js +0 -0
  753. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/rst-B0xPkSld.js +0 -0
  754. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/ruby-BvKwtOVI.js +0 -0
  755. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/rust-B1yitclQ.js +0 -0
  756. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/sas-cz2c8ADy.js +0 -0
  757. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/sass-Cj5Yp3dK.js +0 -0
  758. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/scala-C151Ov-r.js +0 -0
  759. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/scheme-C98Dy4si.js +0 -0
  760. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/scss-OYdSNvt2.js +0 -0
  761. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/sdbl-DVxCFoDh.js +0 -0
  762. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/shaderlab-Dg9Lc6iA.js +0 -0
  763. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/shellscript-Yzrsuije.js +0 -0
  764. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/shellsession-BADoaaVG.js +0 -0
  765. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/slack-dark-BthQWCQV.js +0 -0
  766. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/slack-ochin-DqwNpetd.js +0 -0
  767. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/smalltalk-BERRCDM3.js +0 -0
  768. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/snazzy-light-Bw305WKR.js +0 -0
  769. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/solarized-dark-DXbdFlpD.js +0 -0
  770. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/solarized-light-L9t79GZl.js +0 -0
  771. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/solidity-rGO070M0.js +0 -0
  772. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/soy-Brmx7dQM.js +0 -0
  773. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/sparql-rVzFXLq3.js +0 -0
  774. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/splunk-BtCnVYZw.js +0 -0
  775. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/sql-BLtJtn59.js +0 -0
  776. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/ssh-config-_ykCGR6B.js +0 -0
  777. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/stata-BH5u7GGu.js +0 -0
  778. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/stylus-BEDo0Tqx.js +0 -0
  779. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/svelte-zxCyuUbr.js +0 -0
  780. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/swift-Dg5xB15N.js +0 -0
  781. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/synthwave-84-CbfX1IO0.js +0 -0
  782. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/system-verilog-CnnmHF94.js +0 -0
  783. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/systemd-4A_iFExJ.js +0 -0
  784. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/talonscript-CkByrt1z.js +0 -0
  785. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/tasl-QIJgUcNo.js +0 -0
  786. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/tcl-dwOrl1Do.js +0 -0
  787. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/templ-W15q3VgB.js +0 -0
  788. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/terraform-BETggiCN.js +0 -0
  789. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/tex-CvyZ59Mk.js +0 -0
  790. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/tokyo-night-hegEt444.js +0 -0
  791. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/toml-vGWfd6FD.js +0 -0
  792. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/ts-tags-zn1MmPIZ.js +0 -0
  793. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/tsv-B_m7g4N7.js +0 -0
  794. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/tsx-COt5Ahok.js +0 -0
  795. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/turtle-BsS91CYL.js +0 -0
  796. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/twig-CO9l9SDP.js +0 -0
  797. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/typescript-BPQ3VLAy.js +0 -0
  798. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/typespec-BGHnOYBU.js +0 -0
  799. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/typst-DHCkPAjA.js +0 -0
  800. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/v-BcVCzyr7.js +0 -0
  801. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/vala-CsfeWuGM.js +0 -0
  802. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/vb-D17OF-Vu.js +0 -0
  803. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/verilog-BQ8w6xss.js +0 -0
  804. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/vesper-DU1UobuO.js +0 -0
  805. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/vhdl-CeAyd5Ju.js +0 -0
  806. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/viml-CJc9bBzg.js +0 -0
  807. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/vitesse-black-Bkuqu6BP.js +0 -0
  808. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/vitesse-dark-D0r3Knsf.js +0 -0
  809. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/vitesse-light-CVO1_9PV.js +0 -0
  810. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/vue-DN_0RTcg.js +0 -0
  811. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/vue-html-AaS7Mt5G.js +0 -0
  812. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/vue-vine-CQOfvN7w.js +0 -0
  813. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/vyper-CDx5xZoG.js +0 -0
  814. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/wasm-CG6Dc4jp.js +0 -0
  815. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/wasm-MzD3tlZU.js +0 -0
  816. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/wenyan-BV7otONQ.js +0 -0
  817. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/wgsl-Dx-B1_4e.js +0 -0
  818. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/wikitext-BhOHFoWU.js +0 -0
  819. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/wit-5i3qLPDT.js +0 -0
  820. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/wolfram-lXgVvXCa.js +0 -0
  821. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/xml-sdJ4AIDG.js +0 -0
  822. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/xsl-CtQFsRM5.js +0 -0
  823. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/yaml-Buea-lGh.js +0 -0
  824. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/zenscript-DVFEvuxE.js +0 -0
  825. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/assets/zig-VOosw3JB.js +0 -0
  826. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/brand/apple-touch-icon.png +0 -0
  827. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/brand/arctecture.webp +0 -0
  828. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/brand/bimi-logo.svg +0 -0
  829. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/brand/favicon.ico +0 -0
  830. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/brand/fonts/dm-sans-latin-ext.woff2 +0 -0
  831. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/brand/fonts/dm-sans-latin.woff2 +0 -0
  832. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/brand/fonts/instrument-sans-latin-ext.woff2 +0 -0
  833. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/brand/fonts/instrument-sans-latin.woff2 +0 -0
  834. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/brand/fonts/instrument-serif-latin-ext.woff2 +0 -0
  835. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/brand/fonts/instrument-serif-latin.woff2 +0 -0
  836. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-italic-latin-ext.woff2 +0 -0
  837. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-italic-latin.woff2 +0 -0
  838. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-latin-ext.woff2 +0 -0
  839. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-latin.woff2 +0 -0
  840. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/brand/fonts/roboto-latin-ext.woff2 +0 -0
  841. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/brand/fonts/roboto-latin.woff2 +0 -0
  842. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/brand/icon-192.png +0 -0
  843. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/brand/icon-512.png +0 -0
  844. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/brand/icon.svg +0 -0
  845. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/brand/logo.png +0 -0
  846. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/brand/pythinker_animated.svg +0 -0
  847. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/brand/robots.txt +0 -0
  848. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/install.ps1 +0 -0
  849. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/install.sh +0 -0
  850. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/static/logo.png +0 -0
  851. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/store/__init__.py +0 -0
  852. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/web/store/sessions.py +0 -0
  853. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/wire/file.py +0 -0
  854. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/wire/jsonrpc.py +0 -0
  855. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/wire/protocol.py +0 -0
  856. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/wire/root_hub.py +0 -0
  857. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/wire/serde.py +0 -0
  858. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/wire/server.py +0 -0
  859. {pythinker_code-0.30.0 → pythinker_code-0.32.0}/src/pythinker_code/wire/types.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pythinker-code
3
- Version: 0.30.0
3
+ Version: 0.32.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
@@ -79,7 +79,7 @@ Description-Content-Type: text/markdown
79
79
  [![License: Apache-2.0](https://img.shields.io/badge/License-Apache--2.0-16a34a.svg?style=for-the-badge)](https://github.com/Pythoughts-labs/pythinker-code/blob/main/LICENSE)
80
80
  [![CI](https://img.shields.io/github/actions/workflow/status/Pythoughts-labs/pythinker-code/ci-pythinker-cli.yml?branch=main&label=CI&style=for-the-badge&logo=githubactions&logoColor=white)](https://github.com/Pythoughts-labs/pythinker-code/actions/workflows/ci-pythinker-cli.yml?query=branch%3Amain)
81
81
 
82
- [![PyPI downloads](https://assets.piptrends.com/get-last-month-downloads-badge/pythinker-code.svg)](https://piptrends.com/package/pythinker-code)
82
+ [![PyPI Downloads](https://static.pepy.tech/personalized-badge/pythinker-code?period=total&units=INTERNATIONAL_SYSTEM&left_color=BLACK&right_color=GREEN&left_text=downloads)](https://pepy.tech/projects/pythinker-code)
83
83
  [![Code style: Ruff](https://img.shields.io/badge/code%20style-ruff-f59e0b.svg?style=flat-square&logo=ruff&logoColor=white)](https://docs.astral.sh/ruff/)
84
84
  [![ACP ready](https://img.shields.io/badge/ACP-ready-7c3aed.svg?style=flat-square)](https://github.com/agentclientprotocol/agent-client-protocol)
85
85
  [![MCP tools](https://img.shields.io/badge/MCP-tools-0891b2.svg?style=flat-square)](https://modelcontextprotocol.io/)
@@ -115,14 +115,14 @@ It speaks the [**Agent Client Protocol (ACP)**](https://github.com/agentclientpr
115
115
 
116
116
  ---
117
117
 
118
- ## 🆕 What's New in 0.30.0
118
+ ## 🆕 What's New in 0.32.0
119
119
 
120
- - **ACP session close and auth errors are spec-compliant.** `session/close` now cancels in-flight work and frees session resources before dropping the session; `authenticate` failures serialize correctly so the JSON-RPC error no longer raises `TypeError` on encode.
121
- - **Auto-mode destructive actions deliberate per turn and context.** Destructive-command one-shots are scoped to the active execution context; duplicate calls keep bouncing while later deliberate retries and isolated subagent calls are handled independently. Missing turn context now fails closed instead of auto-approving.
122
- - **Release packaging keeps SDK/core pins in lockstep.** The SDK's `pythinker-core` dependency is updated by release automation and checked by CI, preventing binary builds from resolving against a stale core pin.
123
- - **Routine dependency bumps.** Upgrades `agent-client-protocol` to 0.10.1, `aiohttp` to 3.14.0, and `typer` to 0.26.5 with full ACP 0.10 auth schema migration and restored `--session`/`--resume` optional-value behaviour.
120
+ - **`pythinker mcp add` no longer crashes on Windows and Linux native builds.** `copy_metadata()` replaces the fragile `collect_data_files()` approach in all three PyInstaller specs, so `fastmcp` and `mcp` dist-info are bundled and `importlib.metadata` resolves correctly in frozen binaries.
121
+ - **Pythinker work directories are automatically gitignored on startup.** `.pythinker/`, `.pythinker-review/`, and `.pythinker-review-flow/` are silently added to the project's `.gitignore` when the agent starts inside a git repo, keeping the working tree clean.
122
+ - **Old sessions and plan files are swept on startup.** Archives older than `session_retention_days` (default 30) are removed non-interactively at launch. Set `session_retention_days = 0` to disable.
123
+ - **Windows upgrade version display fix.** Inno Setup now wipes `_internal` before installing new files, so in-place upgrades no longer show a stale version number or re-trigger the update prompt.
124
124
 
125
- Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.30.0`, or use the native installer for your platform from the [Releases page](https://github.com/Pythoughts-labs/pythinker-code/releases/latest).
125
+ Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.32.0`, or use the native installer for your platform from the [Releases page](https://github.com/Pythoughts-labs/pythinker-code/releases/latest).
126
126
 
127
127
 
128
128
  ---
@@ -212,7 +212,7 @@ matches your OS — no Python, Node, or `uv` prerequisite.
212
212
 
213
213
  | Platform | Recommended install | Artifact source |
214
214
  |---|---|---|
215
- | **🪟 Windows** | `irm https://pythinker.com/install.ps1 \| iex` | `PythinkerSetup-0.30.0.exe` from [Releases](https://github.com/Pythoughts-labs/pythinker-code/releases/latest) |
215
+ | **🪟 Windows** | `irm https://pythinker.com/install.ps1 \| iex` | `PythinkerSetup-0.32.0.exe` from [Releases](https://github.com/Pythoughts-labs/pythinker-code/releases/latest) |
216
216
  | **<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) |
217
217
  | **<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 |
218
218
  | **🐳 Docker** | `docker run --rm -it ghcr.io/pythoughts-labs/pythinker-code` | GHCR multi-arch image |
@@ -240,7 +240,7 @@ pythinker # start the interactive TUI
240
240
 
241
241
  ### 🪟 Windows — native installer
242
242
 
243
- `PythinkerSetup-0.30.0.exe` is a signed* Inno Setup wizard. Installs per-user
243
+ `PythinkerSetup-0.32.0.exe` is a signed* Inno Setup wizard. Installs per-user
244
244
  into `%LOCALAPPDATA%\Programs\Pythinker`, registers `pythinker` on your user
245
245
  PATH (`HKCU\Environment`), broadcasts `WM_SETTINGCHANGE` so new shells see
246
246
  the change. **No UAC prompt.**
@@ -251,13 +251,13 @@ irm https://pythinker.com/install.ps1 | iex
251
251
 
252
252
  # Or manually download the installer + checksum from the Releases page,
253
253
  # verify with Get-FileHash, then run:
254
- .\PythinkerSetup-0.30.0.exe
254
+ .\PythinkerSetup-0.32.0.exe
255
255
 
256
256
  # Open a fresh PowerShell
257
257
  pythinker --version
258
258
  ```
259
259
 
260
- **Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.30.0.exe /ALLUSERS`
260
+ **Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.32.0.exe /ALLUSERS`
261
261
  installs to `%ProgramFiles%\Pythinker` and writes PATH to HKLM (requires admin).
262
262
 
263
263
  **Upgrade:** `pythinker update` from inside the running app — it downloads
@@ -308,26 +308,26 @@ attached to every GitHub Release.
308
308
 
309
309
  ```sh
310
310
  # Debian / Ubuntu (x86_64)
311
- sudo dpkg -i pythinker-code_0.30.0_amd64.deb
311
+ sudo dpkg -i pythinker-code_0.32.0_amd64.deb
312
312
  sudo apt-get install -f # only if dpkg reports missing deps
313
313
 
314
314
  # Debian / Ubuntu (ARM64)
315
- sudo dpkg -i pythinker-code_0.30.0_arm64.deb
315
+ sudo dpkg -i pythinker-code_0.32.0_arm64.deb
316
316
 
317
317
  # Fedora / RHEL / openSUSE (x86_64)
318
- curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.30.0/pythinker-code-0.30.0.x86_64.rpm
319
- curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.30.0/pythinker-code-0.30.0.x86_64.rpm.sha256
320
- sha256sum -c pythinker-code-0.30.0.x86_64.rpm.sha256
318
+ curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.32.0/pythinker-code-0.32.0.x86_64.rpm
319
+ curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.32.0/pythinker-code-0.32.0.x86_64.rpm.sha256
320
+ sha256sum -c pythinker-code-0.32.0.x86_64.rpm.sha256
321
321
  # Fedora / RHEL:
322
- sudo dnf install ./pythinker-code-0.30.0.x86_64.rpm
322
+ sudo dnf install ./pythinker-code-0.32.0.x86_64.rpm
323
323
  # openSUSE:
324
- sudo zypper install ./pythinker-code-0.30.0.x86_64.rpm
324
+ sudo zypper install ./pythinker-code-0.32.0.x86_64.rpm
325
325
 
326
326
  # Fedora / RHEL (aarch64)
327
- curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.30.0/pythinker-code-0.30.0.aarch64.rpm
328
- curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.30.0/pythinker-code-0.30.0.aarch64.rpm.sha256
329
- sha256sum -c pythinker-code-0.30.0.aarch64.rpm.sha256
330
- sudo dnf install ./pythinker-code-0.30.0.aarch64.rpm
327
+ curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.32.0/pythinker-code-0.32.0.aarch64.rpm
328
+ curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.32.0/pythinker-code-0.32.0.aarch64.rpm.sha256
329
+ sha256sum -c pythinker-code-0.32.0.aarch64.rpm.sha256
330
+ sudo dnf install ./pythinker-code-0.32.0.aarch64.rpm
331
331
  ```
332
332
 
333
333
  Both packages drop a small `/usr/bin/pythinker` launcher that execs the real
@@ -336,8 +336,8 @@ binary under `/usr/lib/pythinker/`, so your `$PATH` stays tidy.
336
336
  **Verify before install:**
337
337
 
338
338
  ```sh
339
- sha256sum -c pythinker-code_0.30.0_amd64.deb.sha256 # Debian/Ubuntu
340
- sha256sum -c pythinker-code-0.30.0.x86_64.rpm.sha256 # Fedora/RHEL
339
+ sha256sum -c pythinker-code_0.32.0_amd64.deb.sha256 # Debian/Ubuntu
340
+ sha256sum -c pythinker-code-0.32.0.x86_64.rpm.sha256 # Fedora/RHEL
341
341
  ```
342
342
 
343
343
  **Upgrade:** download the new `.deb`/`.rpm` from Releases and `dpkg -i` /
@@ -14,7 +14,7 @@
14
14
  [![License: Apache-2.0](https://img.shields.io/badge/License-Apache--2.0-16a34a.svg?style=for-the-badge)](https://github.com/Pythoughts-labs/pythinker-code/blob/main/LICENSE)
15
15
  [![CI](https://img.shields.io/github/actions/workflow/status/Pythoughts-labs/pythinker-code/ci-pythinker-cli.yml?branch=main&label=CI&style=for-the-badge&logo=githubactions&logoColor=white)](https://github.com/Pythoughts-labs/pythinker-code/actions/workflows/ci-pythinker-cli.yml?query=branch%3Amain)
16
16
 
17
- [![PyPI downloads](https://assets.piptrends.com/get-last-month-downloads-badge/pythinker-code.svg)](https://piptrends.com/package/pythinker-code)
17
+ [![PyPI Downloads](https://static.pepy.tech/personalized-badge/pythinker-code?period=total&units=INTERNATIONAL_SYSTEM&left_color=BLACK&right_color=GREEN&left_text=downloads)](https://pepy.tech/projects/pythinker-code)
18
18
  [![Code style: Ruff](https://img.shields.io/badge/code%20style-ruff-f59e0b.svg?style=flat-square&logo=ruff&logoColor=white)](https://docs.astral.sh/ruff/)
19
19
  [![ACP ready](https://img.shields.io/badge/ACP-ready-7c3aed.svg?style=flat-square)](https://github.com/agentclientprotocol/agent-client-protocol)
20
20
  [![MCP tools](https://img.shields.io/badge/MCP-tools-0891b2.svg?style=flat-square)](https://modelcontextprotocol.io/)
@@ -50,14 +50,14 @@ It speaks the [**Agent Client Protocol (ACP)**](https://github.com/agentclientpr
50
50
 
51
51
  ---
52
52
 
53
- ## 🆕 What's New in 0.30.0
53
+ ## 🆕 What's New in 0.32.0
54
54
 
55
- - **ACP session close and auth errors are spec-compliant.** `session/close` now cancels in-flight work and frees session resources before dropping the session; `authenticate` failures serialize correctly so the JSON-RPC error no longer raises `TypeError` on encode.
56
- - **Auto-mode destructive actions deliberate per turn and context.** Destructive-command one-shots are scoped to the active execution context; duplicate calls keep bouncing while later deliberate retries and isolated subagent calls are handled independently. Missing turn context now fails closed instead of auto-approving.
57
- - **Release packaging keeps SDK/core pins in lockstep.** The SDK's `pythinker-core` dependency is updated by release automation and checked by CI, preventing binary builds from resolving against a stale core pin.
58
- - **Routine dependency bumps.** Upgrades `agent-client-protocol` to 0.10.1, `aiohttp` to 3.14.0, and `typer` to 0.26.5 with full ACP 0.10 auth schema migration and restored `--session`/`--resume` optional-value behaviour.
55
+ - **`pythinker mcp add` no longer crashes on Windows and Linux native builds.** `copy_metadata()` replaces the fragile `collect_data_files()` approach in all three PyInstaller specs, so `fastmcp` and `mcp` dist-info are bundled and `importlib.metadata` resolves correctly in frozen binaries.
56
+ - **Pythinker work directories are automatically gitignored on startup.** `.pythinker/`, `.pythinker-review/`, and `.pythinker-review-flow/` are silently added to the project's `.gitignore` when the agent starts inside a git repo, keeping the working tree clean.
57
+ - **Old sessions and plan files are swept on startup.** Archives older than `session_retention_days` (default 30) are removed non-interactively at launch. Set `session_retention_days = 0` to disable.
58
+ - **Windows upgrade version display fix.** Inno Setup now wipes `_internal` before installing new files, so in-place upgrades no longer show a stale version number or re-trigger the update prompt.
59
59
 
60
- Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.30.0`, or use the native installer for your platform from the [Releases page](https://github.com/Pythoughts-labs/pythinker-code/releases/latest).
60
+ Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.32.0`, or use the native installer for your platform from the [Releases page](https://github.com/Pythoughts-labs/pythinker-code/releases/latest).
61
61
 
62
62
 
63
63
  ---
@@ -147,7 +147,7 @@ matches your OS — no Python, Node, or `uv` prerequisite.
147
147
 
148
148
  | Platform | Recommended install | Artifact source |
149
149
  |---|---|---|
150
- | **🪟 Windows** | `irm https://pythinker.com/install.ps1 \| iex` | `PythinkerSetup-0.30.0.exe` from [Releases](https://github.com/Pythoughts-labs/pythinker-code/releases/latest) |
150
+ | **🪟 Windows** | `irm https://pythinker.com/install.ps1 \| iex` | `PythinkerSetup-0.32.0.exe` from [Releases](https://github.com/Pythoughts-labs/pythinker-code/releases/latest) |
151
151
  | **<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) |
152
152
  | **<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 |
153
153
  | **🐳 Docker** | `docker run --rm -it ghcr.io/pythoughts-labs/pythinker-code` | GHCR multi-arch image |
@@ -175,7 +175,7 @@ pythinker # start the interactive TUI
175
175
 
176
176
  ### 🪟 Windows — native installer
177
177
 
178
- `PythinkerSetup-0.30.0.exe` is a signed* Inno Setup wizard. Installs per-user
178
+ `PythinkerSetup-0.32.0.exe` is a signed* Inno Setup wizard. Installs per-user
179
179
  into `%LOCALAPPDATA%\Programs\Pythinker`, registers `pythinker` on your user
180
180
  PATH (`HKCU\Environment`), broadcasts `WM_SETTINGCHANGE` so new shells see
181
181
  the change. **No UAC prompt.**
@@ -186,13 +186,13 @@ irm https://pythinker.com/install.ps1 | iex
186
186
 
187
187
  # Or manually download the installer + checksum from the Releases page,
188
188
  # verify with Get-FileHash, then run:
189
- .\PythinkerSetup-0.30.0.exe
189
+ .\PythinkerSetup-0.32.0.exe
190
190
 
191
191
  # Open a fresh PowerShell
192
192
  pythinker --version
193
193
  ```
194
194
 
195
- **Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.30.0.exe /ALLUSERS`
195
+ **Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.32.0.exe /ALLUSERS`
196
196
  installs to `%ProgramFiles%\Pythinker` and writes PATH to HKLM (requires admin).
197
197
 
198
198
  **Upgrade:** `pythinker update` from inside the running app — it downloads
@@ -243,26 +243,26 @@ attached to every GitHub Release.
243
243
 
244
244
  ```sh
245
245
  # Debian / Ubuntu (x86_64)
246
- sudo dpkg -i pythinker-code_0.30.0_amd64.deb
246
+ sudo dpkg -i pythinker-code_0.32.0_amd64.deb
247
247
  sudo apt-get install -f # only if dpkg reports missing deps
248
248
 
249
249
  # Debian / Ubuntu (ARM64)
250
- sudo dpkg -i pythinker-code_0.30.0_arm64.deb
250
+ sudo dpkg -i pythinker-code_0.32.0_arm64.deb
251
251
 
252
252
  # Fedora / RHEL / openSUSE (x86_64)
253
- curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.30.0/pythinker-code-0.30.0.x86_64.rpm
254
- curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.30.0/pythinker-code-0.30.0.x86_64.rpm.sha256
255
- sha256sum -c pythinker-code-0.30.0.x86_64.rpm.sha256
253
+ curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.32.0/pythinker-code-0.32.0.x86_64.rpm
254
+ curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.32.0/pythinker-code-0.32.0.x86_64.rpm.sha256
255
+ sha256sum -c pythinker-code-0.32.0.x86_64.rpm.sha256
256
256
  # Fedora / RHEL:
257
- sudo dnf install ./pythinker-code-0.30.0.x86_64.rpm
257
+ sudo dnf install ./pythinker-code-0.32.0.x86_64.rpm
258
258
  # openSUSE:
259
- sudo zypper install ./pythinker-code-0.30.0.x86_64.rpm
259
+ sudo zypper install ./pythinker-code-0.32.0.x86_64.rpm
260
260
 
261
261
  # Fedora / RHEL (aarch64)
262
- curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.30.0/pythinker-code-0.30.0.aarch64.rpm
263
- curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.30.0/pythinker-code-0.30.0.aarch64.rpm.sha256
264
- sha256sum -c pythinker-code-0.30.0.aarch64.rpm.sha256
265
- sudo dnf install ./pythinker-code-0.30.0.aarch64.rpm
262
+ curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.32.0/pythinker-code-0.32.0.aarch64.rpm
263
+ curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.32.0/pythinker-code-0.32.0.aarch64.rpm.sha256
264
+ sha256sum -c pythinker-code-0.32.0.aarch64.rpm.sha256
265
+ sudo dnf install ./pythinker-code-0.32.0.aarch64.rpm
266
266
  ```
267
267
 
268
268
  Both packages drop a small `/usr/bin/pythinker` launcher that execs the real
@@ -271,8 +271,8 @@ binary under `/usr/lib/pythinker/`, so your `$PATH` stays tidy.
271
271
  **Verify before install:**
272
272
 
273
273
  ```sh
274
- sha256sum -c pythinker-code_0.30.0_amd64.deb.sha256 # Debian/Ubuntu
275
- sha256sum -c pythinker-code-0.30.0.x86_64.rpm.sha256 # Fedora/RHEL
274
+ sha256sum -c pythinker-code_0.32.0_amd64.deb.sha256 # Debian/Ubuntu
275
+ sha256sum -c pythinker-code-0.32.0.x86_64.rpm.sha256 # Fedora/RHEL
276
276
  ```
277
277
 
278
278
  **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.30.0"
3
+ version = "0.32.0"
4
4
  description = "Pythinker Code is your next CLI agent."
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.12"
@@ -15,6 +15,29 @@ GitHub Releases page; `0.8.0` is the new starting line.
15
15
 
16
16
  ## Unreleased
17
17
 
18
+ ## 0.32.0 (2026-06-03)
19
+
20
+ ### What changed in this release
21
+
22
+ - **`pythinker mcp add` no longer crashes on Windows and Linux native builds.** The PyInstaller specs were using `collect_data_files()` which silently omits the `fastmcp-*.dist-info/` sibling directory; fastmcp calls `importlib.metadata.version("fastmcp")` at import time, so every `mcp add` / `mcp list` invocation raised `PackageNotFoundError`. Switched all three specs (Windows installer, Linux installer, macOS/tarball) to `copy_metadata()` — the PyInstaller-standard hook for bundling dist-info.
23
+ - **Pythinker work directories are automatically gitignored on startup.** When the agent starts inside a git repository, `.pythinker/`, `.pythinker-review/`, and `.pythinker-review-flow/` are silently appended to the project's `.gitignore` if missing, preventing local agent state from making the working tree dirty.
24
+ - **Old sessions and plan files are swept on startup.** Archived session directories under `~/.pythinker/sessions/` and hero-name plan files under `~/.pythinker/plans/` older than `session_retention_days` (default 30) are removed non-interactively at startup. Set `session_retention_days = 0` to disable.
25
+ - **Windows upgrade version display fix.** In-place upgrades no longer show a stale version number or re-trigger the update prompt. Inno Setup now wipes `_internal` before installing new files, preventing old `dist-info` directories from accumulating and causing `importlib.metadata` to report the previous version.
26
+
27
+ Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.32.0`, or use the native installer for your OS (see the README install table).
28
+
29
+ ## 0.31.0 (2026-06-02)
30
+
31
+ ### What changed in this release
32
+
33
+ - **Release promotion no longer stalls when the Homebrew tap is broken.** The `promote-release` workflow now gates only on platform assets and PyPI; a lagging or broken Homebrew tap emits a warning annotation and step summary note but no longer blocks the GitHub Release from reaching Latest.
34
+ - **Calmer, theme-aligned TUI rendering.** Transcript, recap, and tool-header output now use theme-standardized activity colors instead of hardcoded values, and Markdown tables render as a bordered grid (wide tables no longer collapse into a stacked-record list).
35
+ - **Auto-mode tool approval fails closed when unattended.** In auto/non-interactive runs, an action that still needs approval under the active safe-mode/trust policy is denied with guidance instead of waiting indefinitely for an absent user, and outside-workspace writes are never auto-approved. A destructive auto-approved action is now bounced once for deliberation whenever no user is present (regardless of config), so the obvious `--yolo --auto` combination is no longer more dangerous than the `autonomous_coding` profile; the `auto_deliberate_destructive_actions` setting extends that backstop to interactive `--yolo` sessions, where a user is present but approvals are skipped.
36
+ - **Yolo + auto mode hardened against silent over-reach.** Entering plan mode now requires confirmation in an interactive `--yolo` session (matching exit), so the plan-review checkpoint is preserved when a user is present. A `--yolo` run no longer clears or persists the workspace's safe-mode/trust state. A new `--no-yolo` flag forces yolo off for a run — overriding the `--yolo` flag, the `default_yolo` config, and any resumed session state. Resuming a session that restores yolo and/or auto now surfaces a startup warning so it is never silent.
37
+ - **`pythinker review` validates finding evidence.** Reviewflow assembles prompts from a shared security-knowledge manifest and validates findings, handling invalid ones without failing the whole review.
38
+
39
+ Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.31.0`, or use the native installer for your OS (see the README install table).
40
+
18
41
  ## 0.30.0 (2026-06-02)
19
42
 
20
43
  ### What changed in this release
@@ -215,7 +215,7 @@ class ACPSession:
215
215
  case _:
216
216
  pass
217
217
  except LLMNotSet as e:
218
- logger.exception("LLM not set:")
218
+ logger.warning("LLM not set — user has no provider configured")
219
219
  raise acp.RequestError.auth_required() from e
220
220
  except LLMNotSupported as e:
221
221
  logger.exception("LLM not supported:")
@@ -7,20 +7,22 @@ agent:
7
7
 
8
8
  Role and scope:
9
9
  - Perform read-only, evidence-first review of the current repository diff.
10
- - Use `pythinker review diff` by default; add `--with-security` when the parent requests security coverage.
10
+ - Use `pythinker review diff` by default for bounded branch/diff review; add `--with-security` when the parent requests security coverage.
11
+ - For repo-wide, long-running, resumable, or feature-slice review requests, prefer the stateful flow: `pythinker review init`, `pythinker review map`, then `pythinker review review --limit <n> --jobs <n>` followed by `report`/`next`/`show`/`triage` as needed.
11
12
  - Use `pythinker review describe`, `suggest`/`improve`, `ask`, `ask-line`, `labels`, `changelog`, `docs`, `compliance`, `help-docs`, `similar-issues`, `tools`, or `config` only when the parent explicitly asks for that artifact/helper.
12
13
  - For code-reviewr parity requests, prefer local read-only options such as `--labels-file`, `--extra-instructions`, `--best-practices-file`, `--min-score`, `--docs-style`, `--symbol`, `--pr-url`, and `--issues-dir` instead of provider publishing.
13
14
  - Do not edit files, commit, stage, push, approve, merge, or publish provider comments.
14
15
 
15
16
  Tool policy:
16
- - Prefer `pythinker review diff --format json --no-save` so results are structured and do not write run state.
17
+ - Prefer `pythinker review diff --format json --no-save` for one-shot diff review so results are structured and do not write run state.
18
+ - Use stateful Reviewflow only when persistence, resumability, feature-slice coverage, or explicit fix/revalidate follow-up is part of the task.
17
19
  - If persistence is requested, omit `--no-save` and report where run state was written.
18
20
  - If the requested base ref fails, report the exact blocker instead of guessing another branch unless the parent gave fallback instructions.
19
21
  - Read files only to verify a load-bearing finding or command failure.
20
22
 
21
23
  Review discipline:
22
24
  - If `.pythinker/review-guidelines.md` exists, read it before scoring findings.
23
- - Build a review context packet: base ref/diff scope, changed behavior, likely tests, user-visible impact, and validation evidence.
25
+ - Build a review context packet: base ref/diff scope or Reviewflow feature IDs, changed behavior, likely tests, user-visible impact, valid evidence paths, omitted/truncated context, and validation evidence.
24
26
  - Flag only issues introduced or made reachable by the diff.
25
27
  - Prefer no finding over vague speculation. Every finding must cite concrete evidence and a failure mode.
26
28
 
@@ -16,9 +16,12 @@ agent:
16
16
  Operating rules:
17
17
  - If `.pythinker/review-guidelines.md` exists, read it before scoring findings.
18
18
  - Read-only by convention. You may run secscan/security-scan CLI commands and read outputs, but do not edit source files.
19
- - Diff mode default: `pythinker secscan diff --format json --no-save`.
20
- - Repo-wide mode default: `pythinker security-scan scan --json`, then only run `pythinker security-scan process` when the parent explicitly asks for model-backed investigation.
21
- - Use `--fail-on critical` for triage runs unless the parent specifies otherwise.
19
+ - Choose the smallest scan mode that answers the parent: diff review for changed code, repo-wide scan for discovery, process/revalidate only for model-backed investigation.
20
+ - Diff mode default: `pythinker secscan diff --format json --no-save --fail-on critical`.
21
+ - Repo-wide discovery default: `pythinker security-scan scan --json`; if the project mirror is missing, run `pythinker security-scan init` first.
22
+ - Before deep repo-wide processing, preview state with `pythinker security-scan status` or `pythinker security-scan prompt --limit 1`; keep INFO.md project context short and specific if the parent asks you to improve it.
23
+ - Only run `pythinker security-scan process`, `revalidate`, or `triage` when the parent explicitly asks for model-backed investigation or deep validation; use `--limit`/`--jobs` to bound cost unless told otherwise.
24
+ - Treat matcher hits as leads, not findings. Framework and slug notes are reviewer instincts; still verify source → sink → missing mitigation in code.
22
25
  - Check graceful degradation, observability/logging, recovery behavior, structured result/status correctness, and approval/policy mismatches when they affect security posture.
23
26
  - Translate JSON output into the structured response block below.
24
27
 
@@ -63,6 +63,23 @@ def _safe_git_branch(cwd: str | Path | HostPath) -> str | None:
63
63
  return branch or None
64
64
 
65
65
 
66
+ def _resumed_unsupervised_notice(*, resumed: bool, yolo: bool, auto: bool) -> str | None:
67
+ """Welcome-banner warning when a resumed session is running unsupervised.
68
+
69
+ Resuming restores ``yolo``/``auto`` from persisted state, so a session can come back
70
+ unattended and, under YOLO, auto-approving actions with no prompt. Surface that
71
+ prominently at startup (it also fires when the modes were passed explicitly on the
72
+ resume command — acceptable over-notification). ``None`` when not a resume or no
73
+ unsupervised mode is active.
74
+ """
75
+ if not resumed or not (yolo or auto):
76
+ return None
77
+ modes = " + ".join(name for name, active in (("YOLO", yolo), ("auto", auto)) if active)
78
+ if yolo:
79
+ return f"{modes} active — actions auto-approved; toggle with /yolo /auto"
80
+ return "auto active — interactive approvals still required; toggle with /auto"
81
+
82
+
66
83
  def _patch_session_id(record: dict[str, Any]) -> None:
67
84
  """Inject the current session ID (from ContextVar) into log records."""
68
85
  try:
@@ -153,6 +170,7 @@ class PythinkerCLI:
153
170
  thinking_effort: ThinkingEffort | None = None,
154
171
  # Run mode
155
172
  yolo: bool = False,
173
+ no_yolo: bool = False,
156
174
  auto: bool = False,
157
175
  runtime_auto: bool = False,
158
176
  plan_mode: bool = False,
@@ -183,6 +201,8 @@ class PythinkerCLI:
183
201
  Defaults to None.
184
202
  yolo (bool, optional): Dangerously skip permission approvals. The user is still
185
203
  reachable via ``AskUserQuestion``. Defaults to False.
204
+ no_yolo (bool, optional): Force yolo OFF for this run, overriding the ``yolo``
205
+ flag, config ``default_yolo``, and persisted session state. Defaults to False.
186
206
  auto (bool, optional): Invocation-level auto mode (no user is present to answer
187
207
  questions or approve actions). Implies auto-approve. Defaults to False.
188
208
  runtime_auto (bool, optional): Internal invocation-only auto-mode overlay, used by
@@ -307,6 +327,7 @@ class PythinkerCLI:
307
327
  yolo,
308
328
  auto=auto,
309
329
  runtime_auto=runtime_auto,
330
+ no_yolo=no_yolo,
310
331
  skills_dirs=skills_dirs,
311
332
  scratchpad_section=scratchpad_section,
312
333
  )
@@ -783,6 +804,14 @@ class PythinkerCLI:
783
804
  if branch_name:
784
805
  welcome_info.append(WelcomeInfoItem(name="Branch", value=branch_name))
785
806
  welcome_info.append(WelcomeInfoItem(name="Session", value=self._runtime.session.id))
807
+ if notice := _resumed_unsupervised_notice(
808
+ resumed=self._runtime.resumed,
809
+ yolo=self._runtime.approval.is_yolo(),
810
+ auto=self._runtime.approval.is_auto(),
811
+ ):
812
+ welcome_info.append(
813
+ WelcomeInfoItem(name="Mode", value=notice, level=WelcomeInfoItem.Level.WARN)
814
+ )
786
815
  try:
787
816
  auto_save_path = str(
788
817
  shorten_home(HostPath.unsafe_from_local_path(self._runtime.session.context_file))
@@ -378,6 +378,16 @@ def pythinker(
378
378
  help="Automatically approve all actions. Default: no.",
379
379
  ),
380
380
  ] = False,
381
+ no_yolo: Annotated[
382
+ bool,
383
+ typer.Option(
384
+ "--no-yolo",
385
+ help=(
386
+ "Force yolo OFF for this run, overriding --yolo, config default_yolo, and "
387
+ "any persisted/resumed yolo state. Default: no."
388
+ ),
389
+ ),
390
+ ] = False,
381
391
  plan: Annotated[
382
392
  bool,
383
393
  typer.Option(
@@ -390,9 +400,11 @@ def pythinker(
390
400
  typer.Option(
391
401
  "--auto",
392
402
  help=(
393
- "Run in auto mode: no user is present, AskUserQuestion is auto-dismissed, "
394
- "and tool calls are auto-approved. Use when running unattended "
395
- "(scripts, CI, scheduled jobs). Default: no."
403
+ "Run in auto mode: no user is present and AskUserQuestion is "
404
+ "auto-dismissed. Tool calls are auto-approved only when current "
405
+ "trust/safe-mode policy permits; otherwise approval-required actions "
406
+ "fail closed. Use when running unattended (scripts, CI, scheduled jobs). "
407
+ "Default: no."
396
408
  ),
397
409
  ),
398
410
  ] = False,
@@ -412,7 +424,9 @@ def pythinker(
412
424
  "--print",
413
425
  help=(
414
426
  "Run in print mode (non-interactive). Print mode auto-dismisses "
415
- "AskUserQuestion and auto-approves tool calls for this invocation."
427
+ "AskUserQuestion and enables invocation-only auto mode; approval-required "
428
+ "tool calls still follow trust/safe-mode policy and fail closed when "
429
+ "approval is unavailable."
416
430
  ),
417
431
  ),
418
432
  ] = False,
@@ -789,8 +803,20 @@ def pythinker(
789
803
  render_scratchpad_section,
790
804
  scratch_file_exists,
791
805
  )
806
+ from pythinker_code.session_cleanup import (
807
+ sweep_old_plans,
808
+ sweep_old_sessions,
809
+ sweep_stale_work_dirs,
810
+ )
792
811
 
793
812
  scratchpad_status = await ensure_git_excluded(work_dir)
813
+
814
+ # Sweep accumulated state on startup (best-effort, non-blocking).
815
+ # Mirrors Claude Code's cleanupPeriodDays=30 model.
816
+ _retention = config.session_retention_days if isinstance(config, Config) else 30
817
+ await asyncio.to_thread(sweep_old_sessions, _retention)
818
+ await asyncio.to_thread(sweep_old_plans, _retention)
819
+ await asyncio.to_thread(sweep_stale_work_dirs)
794
820
  scratch_exists_before_start = scratch_file_exists(work_dir)
795
821
  if scratchpad_status.available:
796
822
  session_source = "resume" if resumed else "startup"
@@ -840,6 +866,7 @@ def pythinker(
840
866
  thinking=thinking,
841
867
  thinking_effort=normalized_thinking_effort,
842
868
  yolo=yolo,
869
+ no_yolo=no_yolo,
843
870
  auto=auto,
844
871
  runtime_auto=ui == "print",
845
872
  plan_mode=plan,
@@ -328,6 +328,39 @@ class TUIConfig(BaseModel):
328
328
  default=True,
329
329
  description="Show a compact recap line after completed interactive shell turns.",
330
330
  )
331
+ code_theme: str = Field(
332
+ default="pythinker-ansi",
333
+ description=(
334
+ "Syntax-highlighting theme for assistant code blocks. Default "
335
+ "'pythinker-ansi' keeps the terminal-adaptive, transparent look. "
336
+ "Set to any Pygments style name (e.g. 'monokai', 'material', "
337
+ "'dracula', 'one-dark') to render code fences with that style on a "
338
+ "solid dark background block."
339
+ ),
340
+ )
341
+ smooth_streaming: bool = Field(
342
+ default=True,
343
+ description=(
344
+ "Pace streamed assistant text so it reveals smoothly instead of "
345
+ "landing in bursty delta-sized clumps. Keeps up with the model "
346
+ "(bounded catch-up). Set false to reveal each delta immediately."
347
+ ),
348
+ )
349
+
350
+ @field_validator("code_theme")
351
+ @classmethod
352
+ def _validate_code_theme(cls, value: str) -> str:
353
+ from pythinker_code.utils.rich.syntax import available_code_themes
354
+
355
+ allowed = available_code_themes()
356
+ if value in allowed:
357
+ return value
358
+ if value.lower() in allowed:
359
+ return value.lower()
360
+ raise ValueError(
361
+ f"Unknown code_theme {value!r}. Choose 'pythinker-ansi' or a Pygments "
362
+ f"style name. Available: {', '.join(allowed)}"
363
+ )
331
364
 
332
365
 
333
366
  class MCPConfig(BaseModel):
@@ -374,11 +407,17 @@ class Config(BaseModel):
374
407
  description=(
375
408
  "Controls AskUserQuestion behavior: always ask, ask except in auto mode, "
376
409
  "never pause (best judgment), or auto_deliberate (in auto mode, run an "
377
- "advisor-assisted self-decision instead of dismissing, and bounce "
378
- "destructive actions once for deliberation)."
410
+ "advisor-assisted self-decision instead of dismissing)."
379
411
  ),
380
412
  )
381
413
  )
414
+ auto_deliberate_destructive_actions: bool = Field(
415
+ default=False,
416
+ description=(
417
+ "When true, destructive auto-approved actions are bounced once for agent "
418
+ "deliberation before running. This is independent of AskUserQuestion policy."
419
+ ),
420
+ )
382
421
  skip_auto_prompt_injection: bool = Field(
383
422
  default=False,
384
423
  description=(
@@ -458,6 +497,15 @@ class Config(BaseModel):
458
497
  "Enable anonymous telemetry to help improve pythinker-code. Set to false to opt out."
459
498
  ),
460
499
  )
500
+ session_retention_days: int = Field(
501
+ default=30,
502
+ ge=0,
503
+ description=(
504
+ "Archived session directories in ~/.pythinker/sessions/ older than this many days "
505
+ "are removed on startup. Plan files older than this many days are also pruned. "
506
+ "0 disables cleanup."
507
+ ),
508
+ )
461
509
 
462
510
  @model_validator(mode="after")
463
511
  def validate_model(self) -> Self:
@@ -481,12 +529,10 @@ class Config(BaseModel):
481
529
  if "default_yolo" not in fields_set:
482
530
  self.default_yolo = True
483
531
  if "ask_user_question_policy" not in fields_set:
484
- # NOTE: spec §6 #1 proposes shifting this to "auto_deliberate", but
485
- # that is only safe once the profile also enables auto mode (so
486
- # AskUserQuestion's Entry A self-decision engages and never blocks a
487
- # headless run waiting for an absent user). Until that auto-from-
488
- # profile path exists, keep the robust "never" (always dismiss).
532
+ # Preserve no-human AskUserQuestion behavior for headless autonomy.
489
533
  self.ask_user_question_policy = "never"
534
+ if "auto_deliberate_destructive_actions" not in fields_set:
535
+ self.auto_deliberate_destructive_actions = True
490
536
  elif profile == "plan_only":
491
537
  if "default_plan_mode" not in fields_set:
492
538
  self.default_plan_mode = True