pythinker-code 0.28.0__tar.gz → 0.30.0__tar.gz

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