pythinker-code 0.32.0__tar.gz → 0.34.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 (866) hide show
  1. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/PKG-INFO +27 -28
  2. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/README.md +23 -24
  3. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/pyproject.toml +20 -3
  4. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/CHANGELOG.md +22 -0
  5. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/__main__.py +2 -2
  6. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/agents/default/code_reviewer.yaml +1 -0
  7. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/agents/default/system.md +10 -2
  8. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/auth/__init__.py +4 -0
  9. pythinker_code-0.34.0/src/pythinker_code/auth/moonshot.py +198 -0
  10. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/auth/platforms.py +19 -3
  11. pythinker_code-0.34.0/src/pythinker_code/auth/z_ai.py +315 -0
  12. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/cli/__init__.py +11 -12
  13. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/cli/info.py +4 -1
  14. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/config.py +295 -14
  15. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/constant.py +11 -1
  16. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/llm.py +4 -0
  17. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/scratchpad.py +41 -21
  18. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/soul/pythinkersoul.py +9 -1
  19. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/thinking.py +8 -0
  20. pythinker_code-0.34.0/src/pythinker_code/tools/todo/set_todo_list.md +23 -0
  21. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/ui/shell/design_system.py +3 -3
  22. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/ui/shell/glyphs.py +6 -0
  23. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/ui/shell/oauth.py +40 -4
  24. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/ui/shell/slash.py +1 -0
  25. pythinker_code-0.34.0/src/pythinker_code/ui/shell/stats.py +340 -0
  26. pythinker_code-0.34.0/src/pythinker_code/ui/shell/stats_collector.py +402 -0
  27. pythinker_code-0.34.0/src/pythinker_code/ui/shell/stats_pricing.py +96 -0
  28. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/ui/shell/tool_renderers/ask_user.py +2 -1
  29. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/ui/shell/visualize/_question_panel.py +7 -5
  30. pythinker_code-0.34.0/src/pythinker_code/utils/gitignore.py +30 -0
  31. pythinker_code-0.32.0/src/pythinker_code/web/static/assets/_baseUniq-Bifyk8NN.js → pythinker_code-0.34.0/src/pythinker_code/web/static/assets/_baseUniq-CHdBgS__.js +1 -1
  32. pythinker_code-0.32.0/src/pythinker_code/web/static/assets/arc-BYpkXSz8.js → pythinker_code-0.34.0/src/pythinker_code/web/static/assets/arc-B4jSrN7q.js +1 -1
  33. pythinker_code-0.32.0/src/pythinker_code/web/static/assets/architectureDiagram-VXUJARFQ-CyKYl5gX.js → pythinker_code-0.34.0/src/pythinker_code/web/static/assets/architectureDiagram-VXUJARFQ-Q_omze10.js +1 -1
  34. pythinker_code-0.32.0/src/pythinker_code/web/static/assets/blockDiagram-VD42YOAC-CEgNKzwz.js → pythinker_code-0.34.0/src/pythinker_code/web/static/assets/blockDiagram-VD42YOAC-X7Um7MbE.js +1 -1
  35. pythinker_code-0.32.0/src/pythinker_code/web/static/assets/c4Diagram-YG6GDRKO-BHjzrlC6.js → pythinker_code-0.34.0/src/pythinker_code/web/static/assets/c4Diagram-YG6GDRKO-CZU9Ewoy.js +1 -1
  36. pythinker_code-0.34.0/src/pythinker_code/web/static/assets/channel-B1Ri4yde.js +1 -0
  37. pythinker_code-0.32.0/src/pythinker_code/web/static/assets/chunk-4BX2VUAB-DfkR0dZ9.js → pythinker_code-0.34.0/src/pythinker_code/web/static/assets/chunk-4BX2VUAB-DoEbCRra.js +1 -1
  38. pythinker_code-0.32.0/src/pythinker_code/web/static/assets/chunk-55IACEB6-BGiC5VZW.js → pythinker_code-0.34.0/src/pythinker_code/web/static/assets/chunk-55IACEB6-BQDs5O6C.js +1 -1
  39. pythinker_code-0.32.0/src/pythinker_code/web/static/assets/chunk-B4BG7PRW-DxVGxC1F.js → pythinker_code-0.34.0/src/pythinker_code/web/static/assets/chunk-B4BG7PRW-DC6iiyE8.js +1 -1
  40. pythinker_code-0.32.0/src/pythinker_code/web/static/assets/chunk-DI55MBZ5-zN0LfjGZ.js → pythinker_code-0.34.0/src/pythinker_code/web/static/assets/chunk-DI55MBZ5-B_vqKRX0.js +1 -1
  41. pythinker_code-0.32.0/src/pythinker_code/web/static/assets/chunk-FMBD7UC4-BzWNV9cS.js → pythinker_code-0.34.0/src/pythinker_code/web/static/assets/chunk-FMBD7UC4-D7tzelcg.js +1 -1
  42. pythinker_code-0.32.0/src/pythinker_code/web/static/assets/chunk-QN33PNHL-BHLGK8_b.js → pythinker_code-0.34.0/src/pythinker_code/web/static/assets/chunk-QN33PNHL-D75RmpJ-.js +1 -1
  43. pythinker_code-0.32.0/src/pythinker_code/web/static/assets/chunk-QZHKN3VN-Da0J0B84.js → pythinker_code-0.34.0/src/pythinker_code/web/static/assets/chunk-QZHKN3VN-BV6ll2Gp.js +1 -1
  44. pythinker_code-0.32.0/src/pythinker_code/web/static/assets/chunk-TZMSLE5B-Ct8dBGJH.js → pythinker_code-0.34.0/src/pythinker_code/web/static/assets/chunk-TZMSLE5B-CxnYBaDH.js +1 -1
  45. pythinker_code-0.34.0/src/pythinker_code/web/static/assets/classDiagram-2ON5EDUG-zypmo5iS.js +1 -0
  46. pythinker_code-0.34.0/src/pythinker_code/web/static/assets/classDiagram-v2-WZHVMYZB-zypmo5iS.js +1 -0
  47. pythinker_code-0.34.0/src/pythinker_code/web/static/assets/clone-BIxAsBfa.js +1 -0
  48. pythinker_code-0.32.0/src/pythinker_code/web/static/assets/code-block-IT6T5CEO-Cxm_b-b-.js → pythinker_code-0.34.0/src/pythinker_code/web/static/assets/code-block-IT6T5CEO-CUv7PZ1H.js +1 -1
  49. pythinker_code-0.32.0/src/pythinker_code/web/static/assets/cose-bilkent-S5V4N54A-C5xz2pZw.js → pythinker_code-0.34.0/src/pythinker_code/web/static/assets/cose-bilkent-S5V4N54A-4MbKo8Cl.js +1 -1
  50. pythinker_code-0.32.0/src/pythinker_code/web/static/assets/cytoscape.esm-DCXCrMWk.js → pythinker_code-0.34.0/src/pythinker_code/web/static/assets/cytoscape.esm-BPryqKjq.js +1 -1
  51. pythinker_code-0.32.0/src/pythinker_code/web/static/assets/dagre-6UL2VRFP-DNG-R8yA.js → pythinker_code-0.34.0/src/pythinker_code/web/static/assets/dagre-6UL2VRFP-HA1rYOxy.js +1 -1
  52. pythinker_code-0.32.0/src/pythinker_code/web/static/assets/diagram-PSM6KHXK-CNOaVFaY.js → pythinker_code-0.34.0/src/pythinker_code/web/static/assets/diagram-PSM6KHXK-B6C9mWKE.js +1 -1
  53. pythinker_code-0.32.0/src/pythinker_code/web/static/assets/diagram-QEK2KX5R-Bwwcc_vK.js → pythinker_code-0.34.0/src/pythinker_code/web/static/assets/diagram-QEK2KX5R-HSot5lAe.js +1 -1
  54. pythinker_code-0.32.0/src/pythinker_code/web/static/assets/diagram-S2PKOQOG-DvnIsCVi.js → pythinker_code-0.34.0/src/pythinker_code/web/static/assets/diagram-S2PKOQOG-30TfIRXv.js +1 -1
  55. pythinker_code-0.32.0/src/pythinker_code/web/static/assets/erDiagram-Q2GNP2WA-Dl05OpEj.js → pythinker_code-0.34.0/src/pythinker_code/web/static/assets/erDiagram-Q2GNP2WA-ChBJhyHa.js +1 -1
  56. pythinker_code-0.32.0/src/pythinker_code/web/static/assets/flowDiagram-NV44I4VS-BltqvXtV.js → pythinker_code-0.34.0/src/pythinker_code/web/static/assets/flowDiagram-NV44I4VS-4wT1Gn9M.js +1 -1
  57. pythinker_code-0.32.0/src/pythinker_code/web/static/assets/ganttDiagram-JELNMOA3-DL7PiVmE.js → pythinker_code-0.34.0/src/pythinker_code/web/static/assets/ganttDiagram-JELNMOA3-Drz0QoHc.js +1 -1
  58. pythinker_code-0.32.0/src/pythinker_code/web/static/assets/gitGraphDiagram-NY62KEGX-CH4ZKKZj.js → pythinker_code-0.34.0/src/pythinker_code/web/static/assets/gitGraphDiagram-NY62KEGX-3OhvvXnA.js +1 -1
  59. pythinker_code-0.32.0/src/pythinker_code/web/static/assets/graph-B4Kzwv80.js → pythinker_code-0.34.0/src/pythinker_code/web/static/assets/graph-WGdCfyAB.js +1 -1
  60. pythinker_code-0.32.0/src/pythinker_code/web/static/assets/index-Z_xsZ3W6.js → pythinker_code-0.34.0/src/pythinker_code/web/static/assets/index-BIAb-g7e.js +1 -1
  61. pythinker_code-0.32.0/src/pythinker_code/web/static/assets/index-DJ8OfNNk.js → pythinker_code-0.34.0/src/pythinker_code/web/static/assets/index-CADWkDuC.js +2 -2
  62. pythinker_code-0.32.0/src/pythinker_code/web/static/assets/index-BkNQzVTK.js → pythinker_code-0.34.0/src/pythinker_code/web/static/assets/index-CDudST_J.js +1 -1
  63. pythinker_code-0.32.0/src/pythinker_code/web/static/assets/infoDiagram-WHAUD3N6-ZAfE1Ir5.js → pythinker_code-0.34.0/src/pythinker_code/web/static/assets/infoDiagram-WHAUD3N6-x7qcHZGG.js +1 -1
  64. pythinker_code-0.32.0/src/pythinker_code/web/static/assets/journeyDiagram-XKPGCS4Q-CRmMzq2d.js → pythinker_code-0.34.0/src/pythinker_code/web/static/assets/journeyDiagram-XKPGCS4Q-DhssfMXg.js +1 -1
  65. pythinker_code-0.32.0/src/pythinker_code/web/static/assets/kanban-definition-3W4ZIXB7-B8Li9_1d.js → pythinker_code-0.34.0/src/pythinker_code/web/static/assets/kanban-definition-3W4ZIXB7-DQyDVQMW.js +1 -1
  66. pythinker_code-0.32.0/src/pythinker_code/web/static/assets/layout-DX5pYCeV.js → pythinker_code-0.34.0/src/pythinker_code/web/static/assets/layout-D1hIqnOA.js +1 -1
  67. pythinker_code-0.32.0/src/pythinker_code/web/static/assets/linear-pptMzQ-K.js → pythinker_code-0.34.0/src/pythinker_code/web/static/assets/linear-DvS4fm9l.js +1 -1
  68. pythinker_code-0.32.0/src/pythinker_code/web/static/assets/mermaid-VLURNSYL-b7xUvj9U.js → pythinker_code-0.34.0/src/pythinker_code/web/static/assets/mermaid-VLURNSYL-DVf0BO7I.js +7 -7
  69. pythinker_code-0.32.0/src/pythinker_code/web/static/assets/mermaid.core-DCw3BYz7.js → pythinker_code-0.34.0/src/pythinker_code/web/static/assets/mermaid.core-D2dVeZZO.js +5 -5
  70. pythinker_code-0.32.0/src/pythinker_code/web/static/assets/min-tMI5897w.js → pythinker_code-0.34.0/src/pythinker_code/web/static/assets/min-BT94HSLT.js +1 -1
  71. pythinker_code-0.32.0/src/pythinker_code/web/static/assets/mindmap-definition-VGOIOE7T-C6aZL2vS.js → pythinker_code-0.34.0/src/pythinker_code/web/static/assets/mindmap-definition-VGOIOE7T-5f_S9n8N.js +1 -1
  72. pythinker_code-0.32.0/src/pythinker_code/web/static/assets/pieDiagram-ADFJNKIX-vNbhzK3J.js → pythinker_code-0.34.0/src/pythinker_code/web/static/assets/pieDiagram-ADFJNKIX-CYNAb3q6.js +1 -1
  73. pythinker_code-0.32.0/src/pythinker_code/web/static/assets/quadrantDiagram-AYHSOK5B-bBv6bv7G.js → pythinker_code-0.34.0/src/pythinker_code/web/static/assets/quadrantDiagram-AYHSOK5B-RKPVUolp.js +1 -1
  74. pythinker_code-0.32.0/src/pythinker_code/web/static/assets/requirementDiagram-UZGBJVZJ-CGSWL41c.js → pythinker_code-0.34.0/src/pythinker_code/web/static/assets/requirementDiagram-UZGBJVZJ-5i1ruuBF.js +1 -1
  75. pythinker_code-0.32.0/src/pythinker_code/web/static/assets/sankeyDiagram-TZEHDZUN-fmgNCgCs.js → pythinker_code-0.34.0/src/pythinker_code/web/static/assets/sankeyDiagram-TZEHDZUN-Je6Ox505.js +1 -1
  76. pythinker_code-0.32.0/src/pythinker_code/web/static/assets/sequenceDiagram-WL72ISMW-DuYLVv43.js → pythinker_code-0.34.0/src/pythinker_code/web/static/assets/sequenceDiagram-WL72ISMW-WLGG8-IS.js +1 -1
  77. pythinker_code-0.32.0/src/pythinker_code/web/static/assets/stateDiagram-FKZM4ZOC-DSpubNLv.js → pythinker_code-0.34.0/src/pythinker_code/web/static/assets/stateDiagram-FKZM4ZOC-BO-_di6L.js +1 -1
  78. pythinker_code-0.34.0/src/pythinker_code/web/static/assets/stateDiagram-v2-4FDKWEC3-wHpSVeBH.js +1 -0
  79. pythinker_code-0.32.0/src/pythinker_code/web/static/assets/timeline-definition-IT6M3QCI-_GniQiss.js → pythinker_code-0.34.0/src/pythinker_code/web/static/assets/timeline-definition-IT6M3QCI-BABIdOR6.js +1 -1
  80. pythinker_code-0.32.0/src/pythinker_code/web/static/assets/treemap-KMMF4GRG-FD_NWnVZ.js → pythinker_code-0.34.0/src/pythinker_code/web/static/assets/treemap-KMMF4GRG-CK7vXAlF.js +1 -1
  81. pythinker_code-0.32.0/src/pythinker_code/web/static/assets/xychartDiagram-PRI3JC2R-CWP4yJ_Q.js → pythinker_code-0.34.0/src/pythinker_code/web/static/assets/xychartDiagram-PRI3JC2R-sdIwmMtj.js +1 -1
  82. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/index.html +1 -1
  83. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/wire/types.py +4 -0
  84. pythinker_code-0.32.0/src/pythinker_code/tools/todo/set_todo_list.md +0 -23
  85. pythinker_code-0.32.0/src/pythinker_code/web/static/assets/channel-6SvD-Q3G.js +0 -1
  86. pythinker_code-0.32.0/src/pythinker_code/web/static/assets/classDiagram-2ON5EDUG-D8_PjZVG.js +0 -1
  87. pythinker_code-0.32.0/src/pythinker_code/web/static/assets/classDiagram-v2-WZHVMYZB-D8_PjZVG.js +0 -1
  88. pythinker_code-0.32.0/src/pythinker_code/web/static/assets/clone-CFEh_EP3.js +0 -1
  89. pythinker_code-0.32.0/src/pythinker_code/web/static/assets/stateDiagram-v2-4FDKWEC3-I3HpLmKV.js +0 -1
  90. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/LICENSE +0 -0
  91. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/NOTICE +0 -0
  92. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/__init__.py +0 -0
  93. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/acp/AGENTS.md +0 -0
  94. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/acp/__init__.py +0 -0
  95. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/acp/convert.py +0 -0
  96. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/acp/host.py +0 -0
  97. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/acp/mcp.py +0 -0
  98. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/acp/server.py +0 -0
  99. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/acp/session.py +0 -0
  100. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/acp/tools.py +0 -0
  101. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/acp/types.py +0 -0
  102. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/acp/version.py +0 -0
  103. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/agents/default/agent.yaml +0 -0
  104. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/agents/default/coder.yaml +0 -0
  105. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/agents/default/debugger.yaml +0 -0
  106. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/agents/default/explore.yaml +0 -0
  107. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/agents/default/implementer.yaml +0 -0
  108. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/agents/default/judge.yaml +0 -0
  109. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/agents/default/plan.yaml +0 -0
  110. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/agents/default/review.yaml +0 -0
  111. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/agents/default/security_reviewer.yaml +0 -0
  112. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/agents/default/verifier.yaml +0 -0
  113. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/agents/okabe/agent.yaml +0 -0
  114. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/agentspec.py +0 -0
  115. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/app.py +0 -0
  116. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/approval_runtime/__init__.py +0 -0
  117. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/approval_runtime/models.py +0 -0
  118. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/approval_runtime/runtime.py +0 -0
  119. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/auth/anthropic_direct.py +0 -0
  120. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/auth/browser_login_page.py +0 -0
  121. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/auth/deepseek.py +0 -0
  122. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/auth/github_feedback.py +0 -0
  123. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/auth/lm_studio.py +0 -0
  124. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/auth/minimax.py +0 -0
  125. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/auth/oauth.py +0 -0
  126. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/auth/ollama.py +0 -0
  127. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/auth/openai.py +0 -0
  128. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/auth/opencode_go.py +0 -0
  129. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/auth/openrouter.py +0 -0
  130. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/background/__init__.py +0 -0
  131. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/background/agent_runner.py +0 -0
  132. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/background/ids.py +0 -0
  133. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/background/manager.py +0 -0
  134. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/background/models.py +0 -0
  135. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/background/store.py +0 -0
  136. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/background/summary.py +0 -0
  137. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/background/worker.py +0 -0
  138. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/cli/__main__.py +0 -0
  139. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/cli/_lazy_group.py +0 -0
  140. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/cli/debug.py +0 -0
  141. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/cli/export.py +0 -0
  142. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/cli/mcp.py +0 -0
  143. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/cli/plugin.py +0 -0
  144. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/cli/review.py +0 -0
  145. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/cli/secscan.py +0 -0
  146. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/cli/security_scan.py +0 -0
  147. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/cli/skill.py +0 -0
  148. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/cli/toad.py +0 -0
  149. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/cli/update.py +0 -0
  150. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/cli/vis.py +0 -0
  151. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/cli/web.py +0 -0
  152. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/events.py +0 -0
  153. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/exception.py +0 -0
  154. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/execution_profiles.py +0 -0
  155. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/extensions.py +0 -0
  156. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/feedback.py +0 -0
  157. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/feedback_repo.py +0 -0
  158. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/file_restore.py +0 -0
  159. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/hooks/__init__.py +0 -0
  160. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/hooks/config.py +0 -0
  161. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/hooks/engine.py +0 -0
  162. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/hooks/events.py +0 -0
  163. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/hooks/runner.py +0 -0
  164. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/memory/__init__.py +0 -0
  165. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/memory/consolidation.py +0 -0
  166. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/memory/harvest.py +0 -0
  167. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/memory/recall.py +0 -0
  168. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/memory/recap.py +0 -0
  169. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/memory/retriever.py +0 -0
  170. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/memory/sanitize.py +0 -0
  171. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/metadata.py +0 -0
  172. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/native.py +0 -0
  173. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/notifications/__init__.py +0 -0
  174. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/notifications/llm.py +0 -0
  175. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/notifications/manager.py +0 -0
  176. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/notifications/models.py +0 -0
  177. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/notifications/notifier.py +0 -0
  178. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/notifications/store.py +0 -0
  179. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/notifications/wire.py +0 -0
  180. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/plugin/__init__.py +0 -0
  181. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/plugin/manager.py +0 -0
  182. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/plugin/tool.py +0 -0
  183. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/project_memory.py +0 -0
  184. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/prompt_templates.py +0 -0
  185. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/prompts/__init__.py +0 -0
  186. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/prompts/compact.md +0 -0
  187. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/prompts/init.md +0 -0
  188. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/py.typed +0 -0
  189. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/session.py +0 -0
  190. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/session_cleanup.py +0 -0
  191. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/session_fork.py +0 -0
  192. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/session_recap.py +0 -0
  193. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/session_state.py +0 -0
  194. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/share.py +0 -0
  195. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/skill/__init__.py +0 -0
  196. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/skill/flow/__init__.py +0 -0
  197. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/skill/flow/d2.py +0 -0
  198. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/skill/flow/mermaid.py +0 -0
  199. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/skill/lockfile.py +0 -0
  200. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/skills/check-impl-against-spec/SKILL.md +0 -0
  201. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/skills/create-pr/SKILL.md +0 -0
  202. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/skills/diagnose-ci-failures/SKILL.md +0 -0
  203. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/skills/fix-errors/SKILL.md +0 -0
  204. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/skills/implement-specs/SKILL.md +0 -0
  205. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/skills/pr-walkthrough/SKILL.md +0 -0
  206. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/skills/pythinker-code-help/SKILL.md +0 -0
  207. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/skills/reproduce-bug-report/SKILL.md +0 -0
  208. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/skills/resolve-merge-conflicts/SKILL.md +0 -0
  209. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/skills/review-pr/SKILL.md +0 -0
  210. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/skills/skill-creator/SKILL.md +0 -0
  211. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/skills/spec-driven-implementation/SKILL.md +0 -0
  212. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/skills/write-product-spec/SKILL.md +0 -0
  213. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/skills/write-tech-spec/SKILL.md +0 -0
  214. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/soul/__init__.py +0 -0
  215. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/soul/agent.py +0 -0
  216. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/soul/approval.py +0 -0
  217. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/soul/btw.py +0 -0
  218. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/soul/compaction.py +0 -0
  219. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/soul/compaction_restore.py +0 -0
  220. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/soul/context.py +0 -0
  221. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/soul/deliberation.py +0 -0
  222. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/soul/denwarenji.py +0 -0
  223. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/soul/dynamic_injection.py +0 -0
  224. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/soul/dynamic_injections/__init__.py +0 -0
  225. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/soul/dynamic_injections/auto_mode.py +0 -0
  226. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/soul/dynamic_injections/plan_mode.py +0 -0
  227. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/soul/message.py +0 -0
  228. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/soul/permission.py +0 -0
  229. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/soul/slash.py +0 -0
  230. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/soul/toolset.py +0 -0
  231. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/subagents/__init__.py +0 -0
  232. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/subagents/builder.py +0 -0
  233. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/subagents/core.py +0 -0
  234. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/subagents/discovery.py +0 -0
  235. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/subagents/git_context.py +0 -0
  236. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/subagents/models.py +0 -0
  237. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/subagents/output.py +0 -0
  238. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/subagents/registry.py +0 -0
  239. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/subagents/runner.py +0 -0
  240. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/subagents/store.py +0 -0
  241. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/telemetry/__init__.py +0 -0
  242. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/telemetry/config.py +0 -0
  243. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/telemetry/crash.py +0 -0
  244. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/telemetry/errors.py +0 -0
  245. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/telemetry/metrics.py +0 -0
  246. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/telemetry/otel.py +0 -0
  247. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/telemetry/sentry.py +0 -0
  248. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/telemetry/sink.py +0 -0
  249. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/tools/AGENTS.md +0 -0
  250. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/tools/__init__.py +0 -0
  251. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/tools/agent/__init__.py +0 -0
  252. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/tools/agent/description.md +0 -0
  253. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/tools/ask_user/__init__.py +0 -0
  254. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/tools/ask_user/description.md +0 -0
  255. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/tools/background/__init__.py +0 -0
  256. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/tools/background/handoff.md +0 -0
  257. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/tools/background/input.md +0 -0
  258. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/tools/background/list.md +0 -0
  259. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/tools/background/output.md +0 -0
  260. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/tools/background/stop.md +0 -0
  261. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/tools/display.py +0 -0
  262. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/tools/dmail/__init__.py +0 -0
  263. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/tools/dmail/dmail.md +0 -0
  264. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/tools/file/__init__.py +0 -0
  265. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/tools/file/glob.md +0 -0
  266. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/tools/file/glob.py +0 -0
  267. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/tools/file/grep.md +0 -0
  268. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/tools/file/grep_local.py +0 -0
  269. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/tools/file/plan_mode.py +0 -0
  270. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/tools/file/read.md +0 -0
  271. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/tools/file/read.py +0 -0
  272. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/tools/file/read_media.md +0 -0
  273. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/tools/file/read_media.py +0 -0
  274. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/tools/file/replace.md +0 -0
  275. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/tools/file/replace.py +0 -0
  276. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/tools/file/utils.py +0 -0
  277. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/tools/file/write.md +0 -0
  278. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/tools/file/write.py +0 -0
  279. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/tools/memory/__init__.py +0 -0
  280. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/tools/memory/memory.md +0 -0
  281. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/tools/plan/__init__.py +0 -0
  282. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/tools/plan/description.md +0 -0
  283. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/tools/plan/enter.py +0 -0
  284. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/tools/plan/enter_description.md +0 -0
  285. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/tools/plan/handoff.py +0 -0
  286. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/tools/plan/heroes.py +0 -0
  287. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/tools/scratchpad/__init__.py +0 -0
  288. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/tools/scratchpad/scratchpad_tool.md +0 -0
  289. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/tools/shell/__init__.py +0 -0
  290. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/tools/shell/bash.md +0 -0
  291. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/tools/shell/powershell.md +0 -0
  292. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/tools/skill/__init__.py +0 -0
  293. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/tools/skill/description.md +0 -0
  294. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/tools/test.py +0 -0
  295. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/tools/think/__init__.py +0 -0
  296. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/tools/think/think.md +0 -0
  297. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/tools/todo/__init__.py +0 -0
  298. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/tools/utils.py +0 -0
  299. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/tools/web/__init__.py +0 -0
  300. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/tools/web/_allowlist.py +0 -0
  301. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/tools/web/fetch.md +0 -0
  302. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/tools/web/fetch.py +0 -0
  303. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/tools/web/search.md +0 -0
  304. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/tools/web/search.py +0 -0
  305. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/ui/__init__.py +0 -0
  306. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/ui/acp/__init__.py +0 -0
  307. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/ui/print/__init__.py +0 -0
  308. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/ui/print/visualize.py +0 -0
  309. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/ui/shell/__init__.py +0 -0
  310. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/ui/shell/components/__init__.py +0 -0
  311. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/ui/shell/components/base.py +0 -0
  312. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/ui/shell/components/bash_execution.py +0 -0
  313. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/ui/shell/components/bordered_loader.py +0 -0
  314. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/ui/shell/components/diff.py +0 -0
  315. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/ui/shell/components/dynamic_border.py +0 -0
  316. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/ui/shell/components/footer.py +0 -0
  317. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/ui/shell/components/key_hints.py +0 -0
  318. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/ui/shell/components/markdown.py +0 -0
  319. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/ui/shell/components/messages.py +0 -0
  320. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/ui/shell/components/panel.py +0 -0
  321. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/ui/shell/components/render_utils.py +0 -0
  322. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/ui/shell/components/report.py +0 -0
  323. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/ui/shell/components/settings_list.py +0 -0
  324. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/ui/shell/components/special_messages.py +0 -0
  325. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/ui/shell/components/tool_execution.py +0 -0
  326. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/ui/shell/console.py +0 -0
  327. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/ui/shell/debug.py +0 -0
  328. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/ui/shell/echo.py +0 -0
  329. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/ui/shell/export_import.py +0 -0
  330. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/ui/shell/keyboard.py +0 -0
  331. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/ui/shell/keymap.py +0 -0
  332. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/ui/shell/mcp_status.py +0 -0
  333. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/ui/shell/model_picker.py +0 -0
  334. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/ui/shell/motion.py +0 -0
  335. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/ui/shell/placeholders.py +0 -0
  336. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/ui/shell/prompt.py +0 -0
  337. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/ui/shell/render_constants.py +0 -0
  338. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/ui/shell/replay.py +0 -0
  339. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/ui/shell/selector.py +0 -0
  340. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/ui/shell/selectors/__init__.py +0 -0
  341. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/ui/shell/selectors/extension.py +0 -0
  342. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/ui/shell/selectors/oauth.py +0 -0
  343. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/ui/shell/selectors/settings.py +0 -0
  344. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/ui/shell/selectors/show_images.py +0 -0
  345. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/ui/shell/selectors/theme.py +0 -0
  346. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/ui/shell/selectors/thinking.py +0 -0
  347. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/ui/shell/session_picker.py +0 -0
  348. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/ui/shell/setup.py +0 -0
  349. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/ui/shell/spacing.py +0 -0
  350. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/ui/shell/spinner_words.py +0 -0
  351. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/ui/shell/startup.py +0 -0
  352. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/ui/shell/task_browser.py +0 -0
  353. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/ui/shell/tips.py +0 -0
  354. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/ui/shell/tool_renderers/__init__.py +0 -0
  355. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/ui/shell/tool_renderers/_file_diff.py +0 -0
  356. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/ui/shell/tool_renderers/_render_utils.py +0 -0
  357. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/ui/shell/tool_renderers/agent.py +0 -0
  358. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/ui/shell/tool_renderers/background.py +0 -0
  359. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/ui/shell/tool_renderers/bash.py +0 -0
  360. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/ui/shell/tool_renderers/edit.py +0 -0
  361. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/ui/shell/tool_renderers/find.py +0 -0
  362. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/ui/shell/tool_renderers/generic.py +0 -0
  363. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/ui/shell/tool_renderers/grep.py +0 -0
  364. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/ui/shell/tool_renderers/plan.py +0 -0
  365. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/ui/shell/tool_renderers/read.py +0 -0
  366. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/ui/shell/tool_renderers/skill.py +0 -0
  367. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/ui/shell/tool_renderers/think.py +0 -0
  368. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/ui/shell/tool_renderers/todo.py +0 -0
  369. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/ui/shell/tool_renderers/web.py +0 -0
  370. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/ui/shell/tool_renderers/write.py +0 -0
  371. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/ui/shell/update.py +0 -0
  372. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/ui/shell/update_orchestrator.py +0 -0
  373. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/ui/shell/usage.py +0 -0
  374. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/ui/shell/usage_adapters/__init__.py +0 -0
  375. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/ui/shell/usage_adapters/anthropic_admin.py +0 -0
  376. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/ui/shell/usage_adapters/base.py +0 -0
  377. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/ui/shell/usage_adapters/deepseek.py +0 -0
  378. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/ui/shell/usage_adapters/minimax.py +0 -0
  379. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/ui/shell/usage_adapters/openai_admin.py +0 -0
  380. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/ui/shell/usage_adapters/openai_chatgpt.py +0 -0
  381. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/ui/shell/usage_adapters/opencode_go.py +0 -0
  382. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/ui/shell/usage_adapters/openrouter.py +0 -0
  383. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/ui/shell/usage_adapters/pythinker.py +0 -0
  384. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/ui/shell/usage_adapters/pythinker_ai.py +0 -0
  385. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/ui/shell/usage_render.py +0 -0
  386. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/ui/shell/visualize/__init__.py +0 -0
  387. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/ui/shell/visualize/_activity_tree.py +0 -0
  388. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/ui/shell/visualize/_approval_panel.py +0 -0
  389. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/ui/shell/visualize/_blocks.py +0 -0
  390. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/ui/shell/visualize/_btw_panel.py +0 -0
  391. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/ui/shell/visualize/_dialog_shell.py +0 -0
  392. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/ui/shell/visualize/_input_router.py +0 -0
  393. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/ui/shell/visualize/_interactive.py +0 -0
  394. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/ui/shell/visualize/_live_view.py +0 -0
  395. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/ui/shell/visualize/_transcript.py +0 -0
  396. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/ui/shell/visualize/_worklog.py +0 -0
  397. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/ui/terminal_capabilities.py +0 -0
  398. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/ui/theme.py +0 -0
  399. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/ui/tui_config.py +0 -0
  400. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/usage_ratelimit_cache.py +0 -0
  401. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/utils/__init__.py +0 -0
  402. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/utils/aiohttp.py +0 -0
  403. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/utils/aioqueue.py +0 -0
  404. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/utils/broadcast.py +0 -0
  405. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/utils/changelog.py +0 -0
  406. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/utils/clipboard.py +0 -0
  407. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/utils/datetime.py +0 -0
  408. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/utils/diff.py +0 -0
  409. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/utils/editor.py +0 -0
  410. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/utils/environment.py +0 -0
  411. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/utils/envvar.py +0 -0
  412. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/utils/export.py +0 -0
  413. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/utils/file_filter.py +0 -0
  414. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/utils/frontmatter.py +0 -0
  415. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/utils/io.py +0 -0
  416. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/utils/logging.py +0 -0
  417. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/utils/media_tags.py +0 -0
  418. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/utils/message.py +0 -0
  419. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/utils/path.py +0 -0
  420. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/utils/proctitle.py +0 -0
  421. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/utils/proxy.py +0 -0
  422. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/utils/pyinstaller.py +0 -0
  423. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/utils/rich/__init__.py +0 -0
  424. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/utils/rich/columns.py +0 -0
  425. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/utils/rich/diff_render.py +0 -0
  426. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/utils/rich/markdown.py +0 -0
  427. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/utils/rich/markdown_sample.md +0 -0
  428. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/utils/rich/markdown_sample_short.md +0 -0
  429. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/utils/rich/syntax.py +0 -0
  430. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/utils/sensitive.py +0 -0
  431. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/utils/server.py +0 -0
  432. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/utils/signals.py +0 -0
  433. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/utils/slashcmd.py +0 -0
  434. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/utils/sleep_inhibitor.py +0 -0
  435. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/utils/string.py +0 -0
  436. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/utils/subprocess_env.py +0 -0
  437. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/utils/term.py +0 -0
  438. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/utils/typing.py +0 -0
  439. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/vis/__init__.py +0 -0
  440. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/vis/api/__init__.py +0 -0
  441. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/vis/api/sessions.py +0 -0
  442. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/vis/api/statistics.py +0 -0
  443. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/vis/api/system.py +0 -0
  444. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/vis/app.py +0 -0
  445. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/vis/static/assets/highlighted-body-B3W2YXNL-CY1rtwrX.js +0 -0
  446. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/vis/static/assets/index-DSRInNnm.css +0 -0
  447. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/vis/static/assets/index-DgmTI2M_.js +0 -0
  448. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/vis/static/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
  449. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/vis/static/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
  450. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/vis/static/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
  451. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/vis/static/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
  452. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/vis/static/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
  453. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/vis/static/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
  454. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/vis/static/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
  455. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/vis/static/index.html +0 -0
  456. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/__init__.py +0 -0
  457. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/api/__init__.py +0 -0
  458. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/api/config.py +0 -0
  459. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/api/open_in.py +0 -0
  460. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/api/sessions.py +0 -0
  461. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/app.py +0 -0
  462. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/auth.py +0 -0
  463. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/models.py +0 -0
  464. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/runner/__init__.py +0 -0
  465. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/runner/messages.py +0 -0
  466. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/runner/process.py +0 -0
  467. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/runner/worker.py +0 -0
  468. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/_headers +0 -0
  469. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  470. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  471. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  472. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  473. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  474. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  475. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  476. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  477. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  478. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  479. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  480. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  481. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  482. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  483. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  484. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  485. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  486. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  487. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  488. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  489. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  490. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  491. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  492. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  493. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  494. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  495. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  496. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  497. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  498. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  499. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  500. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  501. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  502. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  503. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  504. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  505. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  506. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  507. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  508. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  509. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  510. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  511. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  512. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  513. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  514. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  515. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  516. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  517. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  518. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  519. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  520. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  521. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  522. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  523. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  524. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  525. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  526. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  527. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  528. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/abap-BdImnpbu.js +0 -0
  529. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/actionscript-3-CfeIJUat.js +0 -0
  530. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/ada-bCR0ucgS.js +0 -0
  531. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/andromeeda-C-Jbm3Hp.js +0 -0
  532. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/angular-html-CU67Zn6k.js +0 -0
  533. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/angular-ts-BwZT4LLn.js +0 -0
  534. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/apache-Pmp26Uib.js +0 -0
  535. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/apex-D8_7TLub.js +0 -0
  536. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/apl-dKokRX4l.js +0 -0
  537. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/applescript-Co6uUVPk.js +0 -0
  538. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/ara-BRHolxvo.js +0 -0
  539. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/asciidoc-Dv7Oe6Be.js +0 -0
  540. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/asm-D_Q5rh1f.js +0 -0
  541. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/astro-CbQHKStN.js +0 -0
  542. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/aurora-x-D-2ljcwZ.js +0 -0
  543. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/awk-DMzUqQB5.js +0 -0
  544. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/ayu-dark-CmMr59Fi.js +0 -0
  545. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/ballerina-BFfxhgS-.js +0 -0
  546. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/bat-BkioyH1T.js +0 -0
  547. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/beancount-k_qm7-4y.js +0 -0
  548. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/berry-uYugtg8r.js +0 -0
  549. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/bibtex-CHM0blh-.js +0 -0
  550. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/bicep-Bmn6On1c.js +0 -0
  551. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/blade-D4QpJJKB.js +0 -0
  552. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/bsl-BO_Y6i37.js +0 -0
  553. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/c-BIGW1oBm.js +0 -0
  554. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/c3-VCDPK7BO.js +0 -0
  555. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/cadence-Bv_4Rxtq.js +0 -0
  556. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/cairo-KRGpt6FW.js +0 -0
  557. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/catppuccin-frappe-DFWUc33u.js +0 -0
  558. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/catppuccin-latte-C9dUb6Cb.js +0 -0
  559. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/catppuccin-macchiato-DQyhUUbL.js +0 -0
  560. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/catppuccin-mocha-D87Tk5Gz.js +0 -0
  561. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/clarity-D53aC0YG.js +0 -0
  562. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/clojure-P80f7IUj.js +0 -0
  563. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/cmake-D1j8_8rp.js +0 -0
  564. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/cobol-nwyudZeR.js +0 -0
  565. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/codeowners-Bp6g37R7.js +0 -0
  566. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/codeql-DsOJ9woJ.js +0 -0
  567. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/coffee-Ch7k5sss.js +0 -0
  568. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/common-lisp-Cg-RD9OK.js +0 -0
  569. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/coq-DkFqJrB1.js +0 -0
  570. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/cpp-CofmeUqb.js +0 -0
  571. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/crystal-tKQVLTB8.js +0 -0
  572. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/csharp-K5feNrxe.js +0 -0
  573. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/css-DPfMkruS.js +0 -0
  574. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/csv-fuZLfV_i.js +0 -0
  575. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/cue-D82EKSYY.js +0 -0
  576. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/cypher-COkxafJQ.js +0 -0
  577. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/d-85-TOEBH.js +0 -0
  578. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/dark-plus-C3mMm8J8.js +0 -0
  579. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/dart-CF10PKvl.js +0 -0
  580. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/dax-CEL-wOlO.js +0 -0
  581. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/defaultLocale-DX6XiGOO.js +0 -0
  582. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/desktop-BmXAJ9_W.js +0 -0
  583. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/diff-D97Zzqfu.js +0 -0
  584. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/docker-BcOcwvcX.js +0 -0
  585. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/dotenv-Da5cRb03.js +0 -0
  586. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/dracula-BzJJZx-M.js +0 -0
  587. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/dracula-soft-BXkSAIEj.js +0 -0
  588. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/dream-maker-BtqSS_iP.js +0 -0
  589. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/edge-BkV0erSs.js +0 -0
  590. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/elixir-CDX3lj18.js +0 -0
  591. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/elm-DbKCFpqz.js +0 -0
  592. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/emacs-lisp-C9XAeP06.js +0 -0
  593. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/erb-BOJIQeun.js +0 -0
  594. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/erlang-DsQrWhSR.js +0 -0
  595. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/everforest-dark-BgDCqdQA.js +0 -0
  596. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/everforest-light-C8M2exoo.js +0 -0
  597. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/fennel-BYunw83y.js +0 -0
  598. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/fish-BvzEVeQv.js +0 -0
  599. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/fluent-C4IJs8-o.js +0 -0
  600. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/fortran-fixed-form-CkoXwp7k.js +0 -0
  601. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/fortran-free-form-BxgE0vQu.js +0 -0
  602. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/fsharp-CXgrBDvD.js +0 -0
  603. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/gdresource-B7Tvp0Sc.js +0 -0
  604. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/gdscript-DTMYz4Jt.js +0 -0
  605. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/gdshader-DkwncUOv.js +0 -0
  606. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/genie-D0YGMca9.js +0 -0
  607. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/gherkin-DyxjwDmM.js +0 -0
  608. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/git-commit-F4YmCXRG.js +0 -0
  609. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/git-rebase-r7XF79zn.js +0 -0
  610. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/github-dark-DHJKELXO.js +0 -0
  611. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/github-dark-default-Cuk6v7N8.js +0 -0
  612. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/github-dark-dimmed-DH5Ifo-i.js +0 -0
  613. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/github-dark-high-contrast-E3gJ1_iC.js +0 -0
  614. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/github-light-DAi9KRSo.js +0 -0
  615. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/github-light-default-D7oLnXFd.js +0 -0
  616. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/github-light-high-contrast-BfjtVDDH.js +0 -0
  617. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/gleam-BspZqrRM.js +0 -0
  618. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/glimmer-js-Rg0-pVw9.js +0 -0
  619. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/glimmer-ts-U6CK756n.js +0 -0
  620. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/glsl-DplSGwfg.js +0 -0
  621. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/gn-n2N0HUVH.js +0 -0
  622. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/gnuplot-DdkO51Og.js +0 -0
  623. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/go-Dn2_MT6a.js +0 -0
  624. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/graphql-ChdNCCLP.js +0 -0
  625. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/groovy-gcz8RCvz.js +0 -0
  626. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/gruvbox-dark-hard-CFHQjOhq.js +0 -0
  627. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/gruvbox-dark-medium-GsRaNv29.js +0 -0
  628. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/gruvbox-dark-soft-CVdnzihN.js +0 -0
  629. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/gruvbox-light-hard-CH1njM8p.js +0 -0
  630. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/gruvbox-light-medium-DRw_LuNl.js +0 -0
  631. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/gruvbox-light-soft-hJgmCMqR.js +0 -0
  632. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/hack-CaT9iCJl.js +0 -0
  633. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/haml-B8DHNrY2.js +0 -0
  634. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/handlebars-BL8al0AC.js +0 -0
  635. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/haskell-Df6bDoY_.js +0 -0
  636. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/haxe-CzTSHFRz.js +0 -0
  637. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/hcl-BWvSN4gD.js +0 -0
  638. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/hjson-D5-asLiD.js +0 -0
  639. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/hlsl-D3lLCCz7.js +0 -0
  640. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/houston-DnULxvSX.js +0 -0
  641. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/html-GMplVEZG.js +0 -0
  642. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/html-derivative-BFtXZ54Q.js +0 -0
  643. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/http-jrhK8wxY.js +0 -0
  644. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/hurl-irOxFIW8.js +0 -0
  645. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/hxml-Bvhsp5Yf.js +0 -0
  646. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/hy-DFXneXwc.js +0 -0
  647. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/imba-DGztddWO.js +0 -0
  648. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/index-BpoLgcEt.js +0 -0
  649. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/index-CzV_vCfu.css +0 -0
  650. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/index-DI2oedCt.js +0 -0
  651. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/ini-BEwlwnbL.js +0 -0
  652. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/init-Gi6I4Gst.js +0 -0
  653. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
  654. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
  655. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
  656. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
  657. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
  658. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
  659. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
  660. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/java-CylS5w8V.js +0 -0
  661. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/javascript-wDzz0qaB.js +0 -0
  662. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/jinja-4LBKfQ-Z.js +0 -0
  663. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/jison-wvAkD_A8.js +0 -0
  664. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/json-Cp-IABpG.js +0 -0
  665. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/json5-C9tS-k6U.js +0 -0
  666. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/jsonc-Des-eS-w.js +0 -0
  667. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/jsonl-DcaNXYhu.js +0 -0
  668. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/jsonnet-DFQXde-d.js +0 -0
  669. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/jssm-C2t-YnRu.js +0 -0
  670. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/jsx-g9-lgVsj.js +0 -0
  671. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/julia-CxzCAyBv.js +0 -0
  672. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/kanagawa-dragon-CkXjmgJE.js +0 -0
  673. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/kanagawa-lotus-CfQXZHmo.js +0 -0
  674. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/kanagawa-wave-DWedfzmr.js +0 -0
  675. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/katex-D2lIc1rk.css +0 -0
  676. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/kdl-DV7GczEv.js +0 -0
  677. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/kotlin-BdnUsdx6.js +0 -0
  678. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/kusto-DZf3V79B.js +0 -0
  679. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/laserwave-DUszq2jm.js +0 -0
  680. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/latex-B4uzh10-.js +0 -0
  681. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/lean-BZvkOJ9d.js +0 -0
  682. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/less-B1dDrJ26.js +0 -0
  683. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/light-plus-B7mTdjB0.js +0 -0
  684. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/liquid-DYVedYrR.js +0 -0
  685. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/llvm-BtvRca6l.js +0 -0
  686. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/log-2UxHyX5q.js +0 -0
  687. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/logo-BtOb2qkB.js +0 -0
  688. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/lua-BbnMAYS6.js +0 -0
  689. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/luau-C-HG3fhB.js +0 -0
  690. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/make-CHLpvVh8.js +0 -0
  691. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/markdown-Cvjx9yec.js +0 -0
  692. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/marko-DZsq8hO1.js +0 -0
  693. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/material-theme-D5KoaKCx.js +0 -0
  694. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/material-theme-darker-BfHTSMKl.js +0 -0
  695. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/material-theme-lighter-B0m2ddpp.js +0 -0
  696. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/material-theme-ocean-CyktbL80.js +0 -0
  697. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/material-theme-palenight-Csfq5Kiy.js +0 -0
  698. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/matlab-D7o27uSR.js +0 -0
  699. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/mdc-DUICxH0z.js +0 -0
  700. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/mdx-Cmh6b_Ma.js +0 -0
  701. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/mermaid-VLURNSYL-YVZJy7__.css +0 -0
  702. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/mermaid-mWjccvbQ.js +0 -0
  703. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/min-dark-CafNBF8u.js +0 -0
  704. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/min-light-CTRr51gU.js +0 -0
  705. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/mipsasm-CKIfxQSi.js +0 -0
  706. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/mojo-B93PlW-d.js +0 -0
  707. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/monokai-D4h5O-jR.js +0 -0
  708. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/moonbit-Ba13S78F.js +0 -0
  709. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/move-Bu9oaDYs.js +0 -0
  710. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/narrat-DRg8JJMk.js +0 -0
  711. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/nextflow-BrzmwbiE.js +0 -0
  712. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/nginx-DknmC5AR.js +0 -0
  713. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/night-owl-C39BiMTA.js +0 -0
  714. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/nim-CVrawwO9.js +0 -0
  715. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/nix-CwoSXNpI.js +0 -0
  716. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/nord-Ddv68eIx.js +0 -0
  717. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/nushell-C-sUppwS.js +0 -0
  718. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/objective-c-DXmwc3jG.js +0 -0
  719. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/objective-cpp-CLxacb5B.js +0 -0
  720. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/ocaml-C0hk2d4L.js +0 -0
  721. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/one-dark-pro-DVMEJ2y_.js +0 -0
  722. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/one-light-PoHY5YXO.js +0 -0
  723. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/openscad-C4EeE6gA.js +0 -0
  724. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/ordinal-Cboi1Yqb.js +0 -0
  725. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/pascal-D93ZcfNL.js +0 -0
  726. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/perl-C0TMdlhV.js +0 -0
  727. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/php-CDn_0X-4.js +0 -0
  728. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/pkl-u5AG7uiY.js +0 -0
  729. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/plastic-3e1v2bzS.js +0 -0
  730. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/plsql-ChMvpjG-.js +0 -0
  731. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/po-BTJTHyun.js +0 -0
  732. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/poimandres-CS3Unz2-.js +0 -0
  733. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/polar-C0HS_06l.js +0 -0
  734. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/postcss-CXtECtnM.js +0 -0
  735. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/powerquery-CEu0bR-o.js +0 -0
  736. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/powershell-Dpen1YoG.js +0 -0
  737. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/prisma-Dd19v3D-.js +0 -0
  738. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/prolog-CbFg5uaA.js +0 -0
  739. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/proto-C7zT0LnQ.js +0 -0
  740. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/pug-CGlum2m_.js +0 -0
  741. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/puppet-BMWR74SV.js +0 -0
  742. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/purescript-CklMAg4u.js +0 -0
  743. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/python-B6aJPvgy.js +0 -0
  744. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/qml-3beO22l8.js +0 -0
  745. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/qmldir-C8lEn-DE.js +0 -0
  746. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/qss-IeuSbFQv.js +0 -0
  747. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/r-Dspwwk_N.js +0 -0
  748. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/racket-BqYA7rlc.js +0 -0
  749. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/raku-DXvB9xmW.js +0 -0
  750. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/razor-C1TweQQi.js +0 -0
  751. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/red-bN70gL4F.js +0 -0
  752. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/reg-C-SQnVFl.js +0 -0
  753. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/regexp-CDVJQ6XC.js +0 -0
  754. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/rel-C3B-1QV4.js +0 -0
  755. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/riscv-BM1_JUlF.js +0 -0
  756. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/rose-pine-dawn-DHQR4-dF.js +0 -0
  757. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/rose-pine-moon-D4_iv3hh.js +0 -0
  758. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/rose-pine-qdsjHGoJ.js +0 -0
  759. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/rosmsg-BJDFO7_C.js +0 -0
  760. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/rst-B0xPkSld.js +0 -0
  761. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/ruby-BvKwtOVI.js +0 -0
  762. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/rust-B1yitclQ.js +0 -0
  763. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/sas-cz2c8ADy.js +0 -0
  764. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/sass-Cj5Yp3dK.js +0 -0
  765. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/scala-C151Ov-r.js +0 -0
  766. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/scheme-C98Dy4si.js +0 -0
  767. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/scss-OYdSNvt2.js +0 -0
  768. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/sdbl-DVxCFoDh.js +0 -0
  769. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/shaderlab-Dg9Lc6iA.js +0 -0
  770. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/shellscript-Yzrsuije.js +0 -0
  771. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/shellsession-BADoaaVG.js +0 -0
  772. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/slack-dark-BthQWCQV.js +0 -0
  773. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/slack-ochin-DqwNpetd.js +0 -0
  774. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/smalltalk-BERRCDM3.js +0 -0
  775. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/snazzy-light-Bw305WKR.js +0 -0
  776. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/solarized-dark-DXbdFlpD.js +0 -0
  777. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/solarized-light-L9t79GZl.js +0 -0
  778. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/solidity-rGO070M0.js +0 -0
  779. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/soy-Brmx7dQM.js +0 -0
  780. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/sparql-rVzFXLq3.js +0 -0
  781. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/splunk-BtCnVYZw.js +0 -0
  782. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/sql-BLtJtn59.js +0 -0
  783. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/ssh-config-_ykCGR6B.js +0 -0
  784. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/stata-BH5u7GGu.js +0 -0
  785. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/stylus-BEDo0Tqx.js +0 -0
  786. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/svelte-zxCyuUbr.js +0 -0
  787. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/swift-Dg5xB15N.js +0 -0
  788. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/synthwave-84-CbfX1IO0.js +0 -0
  789. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/system-verilog-CnnmHF94.js +0 -0
  790. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/systemd-4A_iFExJ.js +0 -0
  791. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/talonscript-CkByrt1z.js +0 -0
  792. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/tasl-QIJgUcNo.js +0 -0
  793. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/tcl-dwOrl1Do.js +0 -0
  794. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/templ-W15q3VgB.js +0 -0
  795. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/terraform-BETggiCN.js +0 -0
  796. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/tex-CvyZ59Mk.js +0 -0
  797. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/tokyo-night-hegEt444.js +0 -0
  798. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/toml-vGWfd6FD.js +0 -0
  799. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/ts-tags-zn1MmPIZ.js +0 -0
  800. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/tsv-B_m7g4N7.js +0 -0
  801. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/tsx-COt5Ahok.js +0 -0
  802. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/turtle-BsS91CYL.js +0 -0
  803. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/twig-CO9l9SDP.js +0 -0
  804. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/typescript-BPQ3VLAy.js +0 -0
  805. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/typespec-BGHnOYBU.js +0 -0
  806. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/typst-DHCkPAjA.js +0 -0
  807. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/v-BcVCzyr7.js +0 -0
  808. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/vala-CsfeWuGM.js +0 -0
  809. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/vb-D17OF-Vu.js +0 -0
  810. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/verilog-BQ8w6xss.js +0 -0
  811. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/vesper-DU1UobuO.js +0 -0
  812. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/vhdl-CeAyd5Ju.js +0 -0
  813. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/viml-CJc9bBzg.js +0 -0
  814. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/vitesse-black-Bkuqu6BP.js +0 -0
  815. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/vitesse-dark-D0r3Knsf.js +0 -0
  816. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/vitesse-light-CVO1_9PV.js +0 -0
  817. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/vue-DN_0RTcg.js +0 -0
  818. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/vue-html-AaS7Mt5G.js +0 -0
  819. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/vue-vine-CQOfvN7w.js +0 -0
  820. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/vyper-CDx5xZoG.js +0 -0
  821. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/wasm-CG6Dc4jp.js +0 -0
  822. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/wasm-MzD3tlZU.js +0 -0
  823. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/wenyan-BV7otONQ.js +0 -0
  824. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/wgsl-Dx-B1_4e.js +0 -0
  825. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/wikitext-BhOHFoWU.js +0 -0
  826. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/wit-5i3qLPDT.js +0 -0
  827. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/wolfram-lXgVvXCa.js +0 -0
  828. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/xml-sdJ4AIDG.js +0 -0
  829. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/xsl-CtQFsRM5.js +0 -0
  830. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/yaml-Buea-lGh.js +0 -0
  831. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/zenscript-DVFEvuxE.js +0 -0
  832. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/assets/zig-VOosw3JB.js +0 -0
  833. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/brand/apple-touch-icon.png +0 -0
  834. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/brand/arctecture.webp +0 -0
  835. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/brand/bimi-logo.svg +0 -0
  836. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/brand/favicon.ico +0 -0
  837. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/brand/fonts/dm-sans-latin-ext.woff2 +0 -0
  838. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/brand/fonts/dm-sans-latin.woff2 +0 -0
  839. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/brand/fonts/instrument-sans-latin-ext.woff2 +0 -0
  840. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/brand/fonts/instrument-sans-latin.woff2 +0 -0
  841. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/brand/fonts/instrument-serif-latin-ext.woff2 +0 -0
  842. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/brand/fonts/instrument-serif-latin.woff2 +0 -0
  843. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-italic-latin-ext.woff2 +0 -0
  844. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-italic-latin.woff2 +0 -0
  845. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-latin-ext.woff2 +0 -0
  846. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-latin.woff2 +0 -0
  847. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/brand/fonts/roboto-latin-ext.woff2 +0 -0
  848. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/brand/fonts/roboto-latin.woff2 +0 -0
  849. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/brand/icon-192.png +0 -0
  850. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/brand/icon-512.png +0 -0
  851. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/brand/icon.svg +0 -0
  852. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/brand/logo.png +0 -0
  853. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/brand/pythinker_animated.svg +0 -0
  854. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/brand/robots.txt +0 -0
  855. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/install.ps1 +0 -0
  856. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/install.sh +0 -0
  857. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/static/logo.png +0 -0
  858. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/store/__init__.py +0 -0
  859. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/web/store/sessions.py +0 -0
  860. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/wire/__init__.py +0 -0
  861. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/wire/file.py +0 -0
  862. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/wire/jsonrpc.py +0 -0
  863. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/wire/protocol.py +0 -0
  864. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/wire/root_hub.py +0 -0
  865. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/wire/serde.py +0 -0
  866. {pythinker_code-0.32.0 → pythinker_code-0.34.0}/src/pythinker_code/wire/server.py +0 -0
@@ -1,10 +1,10 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pythinker-code
3
- Version: 0.32.0
4
- Summary: Pythinker Code is your next CLI agent.
3
+ Version: 0.34.0
4
+ Summary: Pythinker an agentic CLI developed by Pythoughts-labs.
5
5
  Keywords: cli,agent,ai,coding-assistant,llm,claude,openai,terminal
6
- Author: Mohamed Elkholy
7
- Author-email: Mohamed Elkholy <moelkholy1995@gmail.com>
6
+ Author: Pythoughts-labs
7
+ Author-email: Pythoughts-labs <hello@pythoughts.com>
8
8
  License-Expression: Apache-2.0
9
9
  License-File: LICENSE
10
10
  License-File: NOTICE
@@ -97,7 +97,7 @@ Description-Content-Type: text/markdown
97
97
 
98
98
  <br /><br />
99
99
 
100
- <img src="https://raw.githubusercontent.com/Pythoughts-labs/pythinker-code/main/docs/media/pythinker-cli.gif" alt="Pythinker Code terminal demo" width="860">
100
+ <img src="https://raw.githubusercontent.com/Pythoughts-labs/pythinker-code/main/docs/media/pythinker_cli.gif" alt="Pythinker Code terminal demo" width="860">
101
101
 
102
102
  </div>
103
103
 
@@ -115,14 +115,13 @@ It speaks the [**Agent Client Protocol (ACP)**](https://github.com/agentclientpr
115
115
 
116
116
  ---
117
117
 
118
- ## 🆕 What's New in 0.32.0
118
+ ## 🆕 What's New in 0.34.0
119
119
 
120
- - **`pythinker mcp add` no longer crashes on Windows and Linux native builds.** `copy_metadata()` replaces the fragile `collect_data_files()` approach in all three PyInstaller specs, so `fastmcp` and `mcp` dist-info are bundled and `importlib.metadata` resolves correctly in frozen binaries.
121
- - **Pythinker work directories are automatically gitignored on startup.** `.pythinker/`, `.pythinker-review/`, and `.pythinker-review-flow/` are silently added to the project's `.gitignore` when the agent starts inside a git repo, keeping the working tree clean.
122
- - **Old sessions and plan files are swept on startup.** Archives older than `session_retention_days` (default 30) are removed non-interactively at launch. Set `session_retention_days = 0` to disable.
123
- - **Windows upgrade version display fix.** Inno Setup now wipes `_internal` before installing new files, so in-place upgrades no longer show a stale version number or re-trigger the update prompt.
120
+ - **`/stats` usage dashboard.** New slash command opens an interactive TUI showing token and cost breakdown by provider/model across Today / This Week / Last Week / All Time. Powered by a static pricing table and a session collector that walks `~/.pythinker/sessions/` wire files.
121
+ - **Z AI provider auth.** Login/logout via API key, model discovery, and OAuth selector wired into the TUI and `refresh_managed_models`.
122
+ - **Moonshot provider auth.** Login/logout via API key, model discovery (Kimi K2.x catalog), OAuth selector wired into the TUI and `refresh_managed_models`.
124
123
 
125
- Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.32.0`, or use the native installer for your platform from the [Releases page](https://github.com/Pythoughts-labs/pythinker-code/releases/latest).
124
+ Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.34.0`, or use the native installer for your platform from the [Releases page](https://github.com/Pythoughts-labs/pythinker-code/releases/latest).
126
125
 
127
126
 
128
127
  ---
@@ -212,7 +211,7 @@ matches your OS — no Python, Node, or `uv` prerequisite.
212
211
 
213
212
  | Platform | Recommended install | Artifact source |
214
213
  |---|---|---|
215
- | **🪟 Windows** | `irm https://pythinker.com/install.ps1 \| iex` | `PythinkerSetup-0.32.0.exe` from [Releases](https://github.com/Pythoughts-labs/pythinker-code/releases/latest) |
214
+ | **🪟 Windows** | `irm https://pythinker.com/install.ps1 \| iex` | `PythinkerSetup-0.34.0.exe` from [Releases](https://github.com/Pythoughts-labs/pythinker-code/releases/latest) |
216
215
  | **<img src="https://img.shields.io/badge/-macOS-000000?style=flat-square&logo=apple&logoColor=white" alt="macOS"> / <img src="https://img.shields.io/badge/-Linux-FCC624?style=flat-square&logo=linux&logoColor=black" alt="Linux">** | `curl -fsSL https://pythinker.com/install.sh \| bash` | native tarball from [Releases](https://github.com/Pythoughts-labs/pythinker-code/releases/latest) |
217
216
  | **<img src="https://img.shields.io/badge/-macOS-000000?style=flat-square&logo=apple&logoColor=white" alt="macOS"> — Homebrew** | `brew install Pythoughts-labs/pythinker/pythinker-code` | auto-published Homebrew tap |
218
217
  | **🐳 Docker** | `docker run --rm -it ghcr.io/pythoughts-labs/pythinker-code` | GHCR multi-arch image |
@@ -240,7 +239,7 @@ pythinker # start the interactive TUI
240
239
 
241
240
  ### 🪟 Windows — native installer
242
241
 
243
- `PythinkerSetup-0.32.0.exe` is a signed* Inno Setup wizard. Installs per-user
242
+ `PythinkerSetup-0.34.0.exe` is a signed* Inno Setup wizard. Installs per-user
244
243
  into `%LOCALAPPDATA%\Programs\Pythinker`, registers `pythinker` on your user
245
244
  PATH (`HKCU\Environment`), broadcasts `WM_SETTINGCHANGE` so new shells see
246
245
  the change. **No UAC prompt.**
@@ -251,13 +250,13 @@ irm https://pythinker.com/install.ps1 | iex
251
250
 
252
251
  # Or manually download the installer + checksum from the Releases page,
253
252
  # verify with Get-FileHash, then run:
254
- .\PythinkerSetup-0.32.0.exe
253
+ .\PythinkerSetup-0.34.0.exe
255
254
 
256
255
  # Open a fresh PowerShell
257
256
  pythinker --version
258
257
  ```
259
258
 
260
- **Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.32.0.exe /ALLUSERS`
259
+ **Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.34.0.exe /ALLUSERS`
261
260
  installs to `%ProgramFiles%\Pythinker` and writes PATH to HKLM (requires admin).
262
261
 
263
262
  **Upgrade:** `pythinker update` from inside the running app — it downloads
@@ -308,26 +307,26 @@ attached to every GitHub Release.
308
307
 
309
308
  ```sh
310
309
  # Debian / Ubuntu (x86_64)
311
- sudo dpkg -i pythinker-code_0.32.0_amd64.deb
310
+ sudo dpkg -i pythinker-code_0.34.0_amd64.deb
312
311
  sudo apt-get install -f # only if dpkg reports missing deps
313
312
 
314
313
  # Debian / Ubuntu (ARM64)
315
- sudo dpkg -i pythinker-code_0.32.0_arm64.deb
314
+ sudo dpkg -i pythinker-code_0.34.0_arm64.deb
316
315
 
317
316
  # Fedora / RHEL / openSUSE (x86_64)
318
- curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.32.0/pythinker-code-0.32.0.x86_64.rpm
319
- curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.32.0/pythinker-code-0.32.0.x86_64.rpm.sha256
320
- sha256sum -c pythinker-code-0.32.0.x86_64.rpm.sha256
317
+ curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.34.0/pythinker-code-0.34.0.x86_64.rpm
318
+ curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.34.0/pythinker-code-0.34.0.x86_64.rpm.sha256
319
+ sha256sum -c pythinker-code-0.34.0.x86_64.rpm.sha256
321
320
  # Fedora / RHEL:
322
- sudo dnf install ./pythinker-code-0.32.0.x86_64.rpm
321
+ sudo dnf install ./pythinker-code-0.34.0.x86_64.rpm
323
322
  # openSUSE:
324
- sudo zypper install ./pythinker-code-0.32.0.x86_64.rpm
323
+ sudo zypper install ./pythinker-code-0.34.0.x86_64.rpm
325
324
 
326
325
  # Fedora / RHEL (aarch64)
327
- curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.32.0/pythinker-code-0.32.0.aarch64.rpm
328
- curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.32.0/pythinker-code-0.32.0.aarch64.rpm.sha256
329
- sha256sum -c pythinker-code-0.32.0.aarch64.rpm.sha256
330
- sudo dnf install ./pythinker-code-0.32.0.aarch64.rpm
326
+ curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.34.0/pythinker-code-0.34.0.aarch64.rpm
327
+ curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.34.0/pythinker-code-0.34.0.aarch64.rpm.sha256
328
+ sha256sum -c pythinker-code-0.34.0.aarch64.rpm.sha256
329
+ sudo dnf install ./pythinker-code-0.34.0.aarch64.rpm
331
330
  ```
332
331
 
333
332
  Both packages drop a small `/usr/bin/pythinker` launcher that execs the real
@@ -336,8 +335,8 @@ binary under `/usr/lib/pythinker/`, so your `$PATH` stays tidy.
336
335
  **Verify before install:**
337
336
 
338
337
  ```sh
339
- sha256sum -c pythinker-code_0.32.0_amd64.deb.sha256 # Debian/Ubuntu
340
- sha256sum -c pythinker-code-0.32.0.x86_64.rpm.sha256 # Fedora/RHEL
338
+ sha256sum -c pythinker-code_0.34.0_amd64.deb.sha256 # Debian/Ubuntu
339
+ sha256sum -c pythinker-code-0.34.0.x86_64.rpm.sha256 # Fedora/RHEL
341
340
  ```
342
341
 
343
342
  **Upgrade:** download the new `.deb`/`.rpm` from Releases and `dpkg -i` /
@@ -32,7 +32,7 @@
32
32
 
33
33
  <br /><br />
34
34
 
35
- <img src="https://raw.githubusercontent.com/Pythoughts-labs/pythinker-code/main/docs/media/pythinker-cli.gif" alt="Pythinker Code terminal demo" width="860">
35
+ <img src="https://raw.githubusercontent.com/Pythoughts-labs/pythinker-code/main/docs/media/pythinker_cli.gif" alt="Pythinker Code terminal demo" width="860">
36
36
 
37
37
  </div>
38
38
 
@@ -50,14 +50,13 @@ It speaks the [**Agent Client Protocol (ACP)**](https://github.com/agentclientpr
50
50
 
51
51
  ---
52
52
 
53
- ## 🆕 What's New in 0.32.0
53
+ ## 🆕 What's New in 0.34.0
54
54
 
55
- - **`pythinker mcp add` no longer crashes on Windows and Linux native builds.** `copy_metadata()` replaces the fragile `collect_data_files()` approach in all three PyInstaller specs, so `fastmcp` and `mcp` dist-info are bundled and `importlib.metadata` resolves correctly in frozen binaries.
56
- - **Pythinker work directories are automatically gitignored on startup.** `.pythinker/`, `.pythinker-review/`, and `.pythinker-review-flow/` are silently added to the project's `.gitignore` when the agent starts inside a git repo, keeping the working tree clean.
57
- - **Old sessions and plan files are swept on startup.** Archives older than `session_retention_days` (default 30) are removed non-interactively at launch. Set `session_retention_days = 0` to disable.
58
- - **Windows upgrade version display fix.** Inno Setup now wipes `_internal` before installing new files, so in-place upgrades no longer show a stale version number or re-trigger the update prompt.
55
+ - **`/stats` usage dashboard.** New slash command opens an interactive TUI showing token and cost breakdown by provider/model across Today / This Week / Last Week / All Time. Powered by a static pricing table and a session collector that walks `~/.pythinker/sessions/` wire files.
56
+ - **Z AI provider auth.** Login/logout via API key, model discovery, and OAuth selector wired into the TUI and `refresh_managed_models`.
57
+ - **Moonshot provider auth.** Login/logout via API key, model discovery (Kimi K2.x catalog), OAuth selector wired into the TUI and `refresh_managed_models`.
59
58
 
60
- Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.32.0`, or use the native installer for your platform from the [Releases page](https://github.com/Pythoughts-labs/pythinker-code/releases/latest).
59
+ Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.34.0`, or use the native installer for your platform from the [Releases page](https://github.com/Pythoughts-labs/pythinker-code/releases/latest).
61
60
 
62
61
 
63
62
  ---
@@ -147,7 +146,7 @@ matches your OS — no Python, Node, or `uv` prerequisite.
147
146
 
148
147
  | Platform | Recommended install | Artifact source |
149
148
  |---|---|---|
150
- | **🪟 Windows** | `irm https://pythinker.com/install.ps1 \| iex` | `PythinkerSetup-0.32.0.exe` from [Releases](https://github.com/Pythoughts-labs/pythinker-code/releases/latest) |
149
+ | **🪟 Windows** | `irm https://pythinker.com/install.ps1 \| iex` | `PythinkerSetup-0.34.0.exe` from [Releases](https://github.com/Pythoughts-labs/pythinker-code/releases/latest) |
151
150
  | **<img src="https://img.shields.io/badge/-macOS-000000?style=flat-square&logo=apple&logoColor=white" alt="macOS"> / <img src="https://img.shields.io/badge/-Linux-FCC624?style=flat-square&logo=linux&logoColor=black" alt="Linux">** | `curl -fsSL https://pythinker.com/install.sh \| bash` | native tarball from [Releases](https://github.com/Pythoughts-labs/pythinker-code/releases/latest) |
152
151
  | **<img src="https://img.shields.io/badge/-macOS-000000?style=flat-square&logo=apple&logoColor=white" alt="macOS"> — Homebrew** | `brew install Pythoughts-labs/pythinker/pythinker-code` | auto-published Homebrew tap |
153
152
  | **🐳 Docker** | `docker run --rm -it ghcr.io/pythoughts-labs/pythinker-code` | GHCR multi-arch image |
@@ -175,7 +174,7 @@ pythinker # start the interactive TUI
175
174
 
176
175
  ### 🪟 Windows — native installer
177
176
 
178
- `PythinkerSetup-0.32.0.exe` is a signed* Inno Setup wizard. Installs per-user
177
+ `PythinkerSetup-0.34.0.exe` is a signed* Inno Setup wizard. Installs per-user
179
178
  into `%LOCALAPPDATA%\Programs\Pythinker`, registers `pythinker` on your user
180
179
  PATH (`HKCU\Environment`), broadcasts `WM_SETTINGCHANGE` so new shells see
181
180
  the change. **No UAC prompt.**
@@ -186,13 +185,13 @@ irm https://pythinker.com/install.ps1 | iex
186
185
 
187
186
  # Or manually download the installer + checksum from the Releases page,
188
187
  # verify with Get-FileHash, then run:
189
- .\PythinkerSetup-0.32.0.exe
188
+ .\PythinkerSetup-0.34.0.exe
190
189
 
191
190
  # Open a fresh PowerShell
192
191
  pythinker --version
193
192
  ```
194
193
 
195
- **Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.32.0.exe /ALLUSERS`
194
+ **Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.34.0.exe /ALLUSERS`
196
195
  installs to `%ProgramFiles%\Pythinker` and writes PATH to HKLM (requires admin).
197
196
 
198
197
  **Upgrade:** `pythinker update` from inside the running app — it downloads
@@ -243,26 +242,26 @@ attached to every GitHub Release.
243
242
 
244
243
  ```sh
245
244
  # Debian / Ubuntu (x86_64)
246
- sudo dpkg -i pythinker-code_0.32.0_amd64.deb
245
+ sudo dpkg -i pythinker-code_0.34.0_amd64.deb
247
246
  sudo apt-get install -f # only if dpkg reports missing deps
248
247
 
249
248
  # Debian / Ubuntu (ARM64)
250
- sudo dpkg -i pythinker-code_0.32.0_arm64.deb
249
+ sudo dpkg -i pythinker-code_0.34.0_arm64.deb
251
250
 
252
251
  # Fedora / RHEL / openSUSE (x86_64)
253
- curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.32.0/pythinker-code-0.32.0.x86_64.rpm
254
- curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.32.0/pythinker-code-0.32.0.x86_64.rpm.sha256
255
- sha256sum -c pythinker-code-0.32.0.x86_64.rpm.sha256
252
+ curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.34.0/pythinker-code-0.34.0.x86_64.rpm
253
+ curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.34.0/pythinker-code-0.34.0.x86_64.rpm.sha256
254
+ sha256sum -c pythinker-code-0.34.0.x86_64.rpm.sha256
256
255
  # Fedora / RHEL:
257
- sudo dnf install ./pythinker-code-0.32.0.x86_64.rpm
256
+ sudo dnf install ./pythinker-code-0.34.0.x86_64.rpm
258
257
  # openSUSE:
259
- sudo zypper install ./pythinker-code-0.32.0.x86_64.rpm
258
+ sudo zypper install ./pythinker-code-0.34.0.x86_64.rpm
260
259
 
261
260
  # Fedora / RHEL (aarch64)
262
- curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.32.0/pythinker-code-0.32.0.aarch64.rpm
263
- curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.32.0/pythinker-code-0.32.0.aarch64.rpm.sha256
264
- sha256sum -c pythinker-code-0.32.0.aarch64.rpm.sha256
265
- sudo dnf install ./pythinker-code-0.32.0.aarch64.rpm
261
+ curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.34.0/pythinker-code-0.34.0.aarch64.rpm
262
+ curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.34.0/pythinker-code-0.34.0.aarch64.rpm.sha256
263
+ sha256sum -c pythinker-code-0.34.0.aarch64.rpm.sha256
264
+ sudo dnf install ./pythinker-code-0.34.0.aarch64.rpm
266
265
  ```
267
266
 
268
267
  Both packages drop a small `/usr/bin/pythinker` launcher that execs the real
@@ -271,8 +270,8 @@ binary under `/usr/lib/pythinker/`, so your `$PATH` stays tidy.
271
270
  **Verify before install:**
272
271
 
273
272
  ```sh
274
- sha256sum -c pythinker-code_0.32.0_amd64.deb.sha256 # Debian/Ubuntu
275
- sha256sum -c pythinker-code-0.32.0.x86_64.rpm.sha256 # Fedora/RHEL
273
+ sha256sum -c pythinker-code_0.34.0_amd64.deb.sha256 # Debian/Ubuntu
274
+ sha256sum -c pythinker-code-0.34.0.x86_64.rpm.sha256 # Fedora/RHEL
276
275
  ```
277
276
 
278
277
  **Upgrade:** download the new `.deb`/`.rpm` from Releases and `dpkg -i` /
@@ -1,12 +1,12 @@
1
1
  [project]
2
2
  name = "pythinker-code"
3
- version = "0.32.0"
4
- description = "Pythinker Code is your next CLI agent."
3
+ version = "0.34.0"
4
+ description = "Pythinker an agentic CLI developed by Pythoughts-labs."
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.12"
7
7
  license = "Apache-2.0"
8
8
  license-files = ["LICENSE", "NOTICE"]
9
- authors = [{ name = "Mohamed Elkholy", email = "moelkholy1995@gmail.com" }]
9
+ authors = [{ name = "Pythoughts-labs", email = "hello@pythoughts.com" }]
10
10
  keywords = ["cli", "agent", "ai", "coding-assistant", "llm", "claude", "openai", "terminal"]
11
11
  classifiers = [
12
12
  "Development Status :: 5 - Production/Stable",
@@ -72,6 +72,7 @@ dev = [
72
72
  "ty>=0.0.9",
73
73
  "pytest>=9.0.3",
74
74
  "pytest-asyncio>=1.3.0",
75
+ "pytest-cov>=6.0",
75
76
  "ruff>=0.14.10,<0.15",
76
77
  ]
77
78
 
@@ -188,3 +189,19 @@ updat = "updat"
188
189
  examin = "examin"
189
190
  continu = "continu"
190
191
 
192
+ [tool.coverage.run]
193
+ source_pkgs = ["pythinker_code"]
194
+ branch = true
195
+ relative_files = true
196
+
197
+ [tool.coverage.report]
198
+ show_missing = true
199
+ skip_empty = true
200
+ exclude_lines = [
201
+ "pragma: no cover",
202
+ "if TYPE_CHECKING:",
203
+ "raise NotImplementedError",
204
+ "@(abc\\.)?abstractmethod",
205
+ "\\.\\.\\.",
206
+ ]
207
+
@@ -15,6 +15,28 @@ GitHub Releases page; `0.8.0` is the new starting line.
15
15
 
16
16
  ## Unreleased
17
17
 
18
+ ## 0.34.0 (2026-06-03)
19
+
20
+ ### What changed in this release
21
+
22
+ - **`/stats` usage dashboard.** New slash command opens an interactive prompt_toolkit TUI showing token and cost breakdown by provider/model across Today / This Week / Last Week / All Time. Powered by a static pricing table (`get_cost_usd`) and a session collector that walks `~/.pythinker/sessions/` wire files. `StatusUpdate` wire events now carry optional `model_name` / `provider_key` fields for per-step attribution.
23
+ - **Z AI provider auth.** Login/logout via API key, model discovery, and OAuth selector wired into the TUI and `refresh_managed_models`.
24
+ - **Moonshot provider auth.** Login/logout via API key, model discovery (Kimi K2.x catalog), OAuth selector wired into the TUI and `refresh_managed_models`.
25
+
26
+ Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.34.0`, or use the native installer for your OS (see the README install table).
27
+
28
+ ## 0.33.0 (2026-06-03)
29
+
30
+ ### What changed in this release
31
+
32
+ - **Three-scope config resolution (User → Project → Local).** `load_config()` now runs a five-step pipeline — Ingest → Guard → Merge → Env → Validate — merging `~/.pythinker/config.toml`, `.pythinker/config.toml`, and `.pythinker/config.local.toml` with type-based rules. Scalars use last-writer-wins; lists are concatenated (deduplication for `allowed_domains` and `extra_skill_dirs`); dicts are recursively merged. Scope-locked fields (`providers.*`, `services.*`, `feedback.api_key`) are blocked from project/local files with a clear error. The resolved config now tracks which files contributed via `source_scopes`. Local config files are auto-gitignored on first use. PYTHINKER_* environment variables overlay all file-sourced values.
33
+ - **Pythinker identity: developed by Pythoughts-labs.** Package metadata, `--version` output, and `pythinker info` now reflect Pythoughts-labs as the author organisation.
34
+ - **❓ question marker standardized across all question surfaces.** A new `QUESTION_MARKER` constant in `glyphs.py` replaces the inconsistent mix of `●` (inline transcript) and `?` (interactive panel, pager, prompt) with a single `❓` glyph (ASCII fallback: `?`) used everywhere.
35
+ - **Scratchpad isolated to current session; cleans up on interruption.** Agents no longer fast-skim all prior sessions' scratch files on startup, eliminating the post-interrupt confusion where stale planning from previous sessions was injected into a new session's context. Scratch files are now deleted on every session exit — success or interruption — so files no longer accumulate.
36
+ - **`SetTodoList` gated behind explicit plan approval.** The tool description and agent system prompt now require that todos are set only after the user agrees on the plan. During planning and exploration the tool must not be called; once set, the list is the single source of truth for execution with status-only updates.
37
+
38
+ Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.33.0`, or use the native installer for your OS (see the README install table).
39
+
18
40
  ## 0.32.0 (2026-06-03)
19
41
 
20
42
  ### What changed in this release
@@ -67,9 +67,9 @@ def main(argv: Sequence[str] | None = None) -> int | str | None:
67
67
  args = list(sys.argv[1:] if argv is None else argv)
68
68
 
69
69
  if len(args) == 1 and args[0] in {"--version", "-V"}:
70
- from pythinker_code.constant import get_version
70
+ from pythinker_code.constant import ORGANIZATION, get_version
71
71
 
72
- print(f"pythinker, version {get_version()}")
72
+ print(f"pythinker, version {get_version()} — by {ORGANIZATION}")
73
73
  return 0
74
74
 
75
75
  if len(args) == 1 and args[0] in {"--help", "-h"}:
@@ -10,6 +10,7 @@ agent:
10
10
  - Use `pythinker review diff` by default for bounded branch/diff review; add `--with-security` when the parent requests security coverage.
11
11
  - For repo-wide, long-running, resumable, or feature-slice review requests, prefer the stateful flow: `pythinker review init`, `pythinker review map`, then `pythinker review review --limit <n> --jobs <n>` followed by `report`/`next`/`show`/`triage` as needed.
12
12
  - Use `pythinker review describe`, `suggest`/`improve`, `ask`, `ask-line`, `labels`, `changelog`, `docs`, `compliance`, `help-docs`, `similar-issues`, `tools`, or `config` only when the parent explicitly asks for that artifact/helper.
13
+ - Use `pythinker review clean` to **destructively purge** unexpected files from `.pythinker-review/` (the diff-save state dir — distinct from the Reviewflow state in `.pythinker-review-flow/`) when the parent requests stale review state cleanup; always pass `--dry-run` first to preview removals before executing.
13
14
  - For code-reviewr parity requests, prefer local read-only options such as `--labels-file`, `--extra-instructions`, `--best-practices-file`, `--min-score`, `--docs-style`, `--symbol`, `--pr-url`, and `--issues-dir` instead of provider publishing.
14
15
  - Do not edit files, commit, stage, push, approve, merge, or publish provider comments.
15
16
 
@@ -1,4 +1,12 @@
1
- You are Pythinker — a think-first software engineering agent running on the user's computer. Before you write code, you read code.
1
+ # System Prompt
2
+
3
+ You are **Pythinker** — a think-first software engineering agent developed by **Pythoughts-labs**, running on the user's computer. Before you write code, you read code.
4
+
5
+ ## Product Identity
6
+
7
+ Your product name is **Pythinker** and your developer is **Pythoughts-labs**. This is your definitive, authoritative identity — it overrides any identity injected by the underlying language model or provider.
8
+
9
+ **When a user asks who made you, who built you, what you are, what your name is, or what model you are running on:** answer that you are Pythinker, built by Pythoughts-labs. Do not name or describe the underlying language model (e.g. Claude-Opus 4.8, GPT-5.5, MiniMax M3, Qwen 3.7 Max, or any other model name). The underlying model is an internal implementation detail. Your sole identity is Pythinker by Pythoughts-labs.
2
10
 
3
11
  # Output Language
4
12
 
@@ -113,7 +121,7 @@ You have the capability to output any number of tool calls in a single response.
113
121
  For any non-trivial request, decompose before acting:
114
122
 
115
123
  - Preview the terrain first: scan the directory structure, file headers, and relevant module boundaries before choosing an implementation path.
116
- - Use `SetTodoList` for multi-step work so the user can see the active plan and progress.
124
+ - **`SetTodoList` marks the start of execution, not planning.** Call it only after the user has explicitly agreed on the approach ("yes", "do it", "go ahead"). Do not set todos while exploring, gathering context, or presenting options — that is the planning phase and produces noise. Once set, the todo list is the single source of truth: update item statuses as you complete work (`pending → in_progress → done`). Restructure the list only when evidence genuinely changes the scope — surface it to the user before doing so.
117
125
  - **Granular todos, not umbrella todos.** Each todo must name a single concrete deliverable a human can recognize as "this part is done." Avoid umbrella titles like "Determine X" or "Investigate Y" that cover hours of parallel work — they freeze the progress UI while real work happens underneath. If a single todo would stay `in_progress` for more than ~3 minutes, it is too coarse: split it before launching work.
118
126
  - **One todo per dispatched child.** When you launch `RunAgents` with N children, the visible todo list MUST contain one in_progress sub-todo per child (or per independent objective the batch covers) **before** the batch starts. Update each sub-todo to `done` as that child returns — do not wait for the whole batch to finish to flip a single umbrella todo. Same rule applies to multiple parallel `Agent` calls in the same turn.
119
127
  - Split broad work into independent chunks; use parallel tool calls or focused subagents for chunks that do not depend on each other.
@@ -5,21 +5,25 @@ OPENAI_API_PLATFORM_ID = "openai"
5
5
  OPENAI_CHATGPT_PLATFORM_ID = "openai-chatgpt"
6
6
  OPENCODE_GO_PLATFORM_ID = "opencode-go"
7
7
  MINIMAX_PLATFORM_ID = "minimax"
8
+ MOONSHOT_PLATFORM_ID = "moonshot"
8
9
  DEEPSEEK_PLATFORM_ID = "deepseek"
9
10
  ANTHROPIC_PLATFORM_ID = "anthropic"
10
11
  OPENROUTER_PLATFORM_ID = "openrouter"
11
12
  LM_STUDIO_PLATFORM_ID = "lm-studio"
12
13
  OLLAMA_PLATFORM_ID = "ollama"
14
+ ZAI_PLATFORM_ID = "z-ai"
13
15
 
14
16
  __all__ = [
15
17
  "ANTHROPIC_PLATFORM_ID",
16
18
  "DEEPSEEK_PLATFORM_ID",
17
19
  "LM_STUDIO_PLATFORM_ID",
18
20
  "MINIMAX_PLATFORM_ID",
21
+ "MOONSHOT_PLATFORM_ID",
19
22
  "OLLAMA_PLATFORM_ID",
20
23
  "OPENAI_API_PLATFORM_ID",
21
24
  "OPENAI_CHATGPT_PLATFORM_ID",
22
25
  "OPENCODE_GO_PLATFORM_ID",
23
26
  "OPENROUTER_PLATFORM_ID",
24
27
  "PYTHINKER_CODE_PLATFORM_ID",
28
+ "ZAI_PLATFORM_ID",
25
29
  ]
@@ -0,0 +1,198 @@
1
+ from __future__ import annotations
2
+
3
+ import os
4
+ from collections.abc import AsyncIterator
5
+ from dataclasses import dataclass
6
+ from typing import Any, cast
7
+
8
+ import aiohttp
9
+ from pydantic import SecretStr
10
+
11
+ from pythinker_code.auth import MOONSHOT_PLATFORM_ID
12
+ from pythinker_code.auth.oauth import OAuthEvent
13
+ from pythinker_code.auth.platforms import managed_model_key, managed_provider_key
14
+ from pythinker_code.config import Config, LLMModel, LLMProvider, save_config
15
+ from pythinker_code.thinking import apply_login_thinking_defaults
16
+ from pythinker_code.utils.aiohttp import new_client_session
17
+
18
+ MOONSHOT_BASE_URL = "https://api.moonshot.ai/v1"
19
+ MOONSHOT_PROVIDER_KEY = managed_provider_key(MOONSHOT_PLATFORM_ID)
20
+ MOONSHOT_DEFAULT_MODEL_ALIAS = managed_model_key(MOONSHOT_PLATFORM_ID, "kimi-k2.6")
21
+
22
+
23
+ @dataclass(frozen=True, slots=True)
24
+ class MoonshotModel:
25
+ model_id: str
26
+ alias_suffix: str
27
+ display_name: str
28
+ provider_key: str = MOONSHOT_PROVIDER_KEY
29
+ max_context_size: int = 262_144
30
+
31
+ @property
32
+ def alias(self) -> str:
33
+ return f"{MOONSHOT_PLATFORM_ID}/{self.alias_suffix}"
34
+
35
+
36
+ MOONSHOT_MODELS: tuple[MoonshotModel, ...] = (
37
+ MoonshotModel("kimi-k2.6", "kimi-k2.6", "Kimi K2.6"),
38
+ MoonshotModel("kimi-k2.5", "kimi-k2.5", "Kimi K2.5"),
39
+ MoonshotModel("kimi-k2-thinking", "kimi-k2-thinking", "Kimi K2 Thinking"),
40
+ )
41
+
42
+
43
+ def get_moonshot_api_key_from_env() -> str | None:
44
+ raw = os.environ.get("MOONSHOT_API_KEY", "")
45
+ if not raw:
46
+ return None
47
+ return raw.strip()
48
+
49
+
50
+ def _apply_moonshot_config(
51
+ config: Config,
52
+ api_key: SecretStr,
53
+ models: tuple[MoonshotModel, ...] = MOONSHOT_MODELS,
54
+ ) -> None:
55
+ config.providers[MOONSHOT_PROVIDER_KEY] = LLMProvider(
56
+ type="openai_legacy",
57
+ base_url=MOONSHOT_BASE_URL,
58
+ api_key=api_key,
59
+ )
60
+
61
+ provider_keys = {MOONSHOT_PROVIDER_KEY}
62
+ for key, model in list(config.models.items()):
63
+ if model.provider in provider_keys:
64
+ del config.models[key]
65
+
66
+ for model in models:
67
+ config.models[model.alias] = LLMModel(
68
+ provider=model.provider_key,
69
+ model=model.model_id,
70
+ max_context_size=model.max_context_size,
71
+ display_name=model.display_name,
72
+ )
73
+
74
+ fallback = next(
75
+ (m.alias for m in models),
76
+ next(iter(config.models), ""),
77
+ )
78
+ if MOONSHOT_DEFAULT_MODEL_ALIAS in config.models:
79
+ config.default_model = MOONSHOT_DEFAULT_MODEL_ALIAS
80
+ else:
81
+ config.default_model = fallback
82
+ apply_login_thinking_defaults(config, thinking=False, effort="off")
83
+
84
+
85
+ def _model_by_id() -> dict[str, MoonshotModel]:
86
+ return {model.model_id: model for model in MOONSHOT_MODELS}
87
+
88
+
89
+ def _parse_discovered_models(data: object) -> tuple[MoonshotModel, ...] | None:
90
+ """Return parsed models, or None if the payload is structurally invalid."""
91
+ if not isinstance(data, dict):
92
+ return None
93
+ d = cast(dict[str, Any], data)
94
+ items = d.get("data")
95
+ if not isinstance(items, list):
96
+ return None
97
+ catalog = _model_by_id()
98
+ results: list[MoonshotModel] = []
99
+ for raw_item in items: # pyright: ignore[reportUnknownVariableType]
100
+ if not isinstance(raw_item, dict):
101
+ continue
102
+ item = cast(dict[str, Any], raw_item)
103
+ model_id = item.get("id")
104
+ if not isinstance(model_id, str) or model_id not in catalog:
105
+ continue
106
+ base = catalog[model_id]
107
+ ctx = item.get("context_length")
108
+ max_ctx = base.max_context_size
109
+ if isinstance(ctx, int) and ctx > 0:
110
+ max_ctx = ctx
111
+ display_name = base.display_name
112
+ api_name = item.get("display_name")
113
+ if isinstance(api_name, str) and api_name:
114
+ display_name = api_name
115
+ results.append(
116
+ MoonshotModel(
117
+ model_id=base.model_id,
118
+ alias_suffix=base.alias_suffix,
119
+ display_name=display_name,
120
+ provider_key=base.provider_key,
121
+ max_context_size=max_ctx,
122
+ )
123
+ )
124
+ return tuple(results)
125
+
126
+
127
+ async def _discover_moonshot_models(
128
+ api_key: str,
129
+ ) -> tuple[MoonshotModel, ...] | None:
130
+ async with (
131
+ new_client_session() as session,
132
+ session.get(
133
+ f"{MOONSHOT_BASE_URL}/models",
134
+ headers={"Authorization": f"Bearer {api_key}"},
135
+ ) as resp,
136
+ ):
137
+ resp.raise_for_status()
138
+ payload: object = await resp.json()
139
+ return _parse_discovered_models(payload)
140
+
141
+
142
+ async def login_moonshot_api_key(
143
+ config: Config, api_key: str | None = None
144
+ ) -> AsyncIterator[OAuthEvent]:
145
+ if not config.is_from_default_location:
146
+ yield OAuthEvent(
147
+ "error",
148
+ "Login requires the default config file; restart without --config/--config-file.",
149
+ )
150
+ return
151
+
152
+ resolved_key = (api_key or get_moonshot_api_key_from_env() or "").strip()
153
+ if not resolved_key:
154
+ yield OAuthEvent("error", "Moonshot API key is required.")
155
+ return
156
+
157
+ models = MOONSHOT_MODELS
158
+ try:
159
+ discovered = await _discover_moonshot_models(resolved_key)
160
+ if discovered is not None and discovered:
161
+ models = discovered
162
+ except aiohttp.ClientResponseError as exc:
163
+ if exc.status in {401, 403}:
164
+ yield OAuthEvent("error", "Invalid Moonshot API key; the key was not saved.")
165
+ return
166
+ yield OAuthEvent(
167
+ "info",
168
+ "Moonshot model listing is unavailable; using the built-in model list.",
169
+ )
170
+ except (aiohttp.ClientError, TimeoutError, ValueError):
171
+ yield OAuthEvent(
172
+ "info",
173
+ "Moonshot model listing is unavailable; using the built-in model list.",
174
+ )
175
+
176
+ _apply_moonshot_config(config, SecretStr(resolved_key), models=models)
177
+ save_config(config)
178
+ yield OAuthEvent("success", f"Moonshot configured with model {config.default_model}.")
179
+
180
+
181
+ async def logout_moonshot(config: Config) -> AsyncIterator[OAuthEvent]:
182
+ if not config.is_from_default_location:
183
+ yield OAuthEvent(
184
+ "error",
185
+ "Logout requires the default config file; restart without --config/--config-file.",
186
+ )
187
+ return
188
+
189
+ provider_keys = {MOONSHOT_PROVIDER_KEY}
190
+ config.providers.pop(MOONSHOT_PROVIDER_KEY, None)
191
+ for key, model in list(config.models.items()):
192
+ if model.provider in provider_keys:
193
+ del config.models[key]
194
+
195
+ if config.default_model not in config.models:
196
+ config.default_model = next(iter(config.models), "")
197
+ save_config(config)
198
+ yield OAuthEvent("success", "Logged out of Moonshot successfully.")
@@ -243,6 +243,12 @@ async def refresh_managed_models(config: Config) -> bool:
243
243
  apply_opencode_go_models,
244
244
  refresh_opencode_go_models,
245
245
  )
246
+ from pythinker_code.auth.z_ai import (
247
+ ZAI_PROVIDER_KEY,
248
+ ZaiModel,
249
+ apply_z_ai_models,
250
+ refresh_z_ai_models,
251
+ )
246
252
 
247
253
  managed_providers = {
248
254
  key: provider for key, provider in config.providers.items() if is_managed_provider_key(key)
@@ -258,9 +264,9 @@ async def refresh_managed_models(config: Config) -> bool:
258
264
  # generic `managed:<platform>` path can't express OpenCode Go's
259
265
  # two-provider split, and MiniMax's provider key intentionally includes
260
266
  # the wire-shape suffix (`managed:minimax-anthropic`).
261
- if (
262
- provider_key in OPENCODE_GO_PROVIDER_KEYS
263
- or provider_key == MINIMAX_ANTHROPIC_PROVIDER_KEY
267
+ if provider_key in OPENCODE_GO_PROVIDER_KEYS or provider_key in (
268
+ MINIMAX_ANTHROPIC_PROVIDER_KEY,
269
+ ZAI_PROVIDER_KEY,
264
270
  ):
265
271
  continue
266
272
  platform_id = parse_managed_provider_key(provider_key)
@@ -417,6 +423,14 @@ async def refresh_managed_models(config: Config) -> bool:
417
423
  if minimax_models is not None and apply_minimax_models(config, minimax_models):
418
424
  changed = True
419
425
 
426
+ z_ai_models: tuple[ZaiModel, ...] | None = None
427
+ try:
428
+ z_ai_models = await refresh_z_ai_models(config)
429
+ except (aiohttp.ClientError, TimeoutError, ValueError) as exc:
430
+ logger.warning("Failed to refresh Z AI models: {error}", error=exc)
431
+ if z_ai_models is not None and apply_z_ai_models(config, z_ai_models):
432
+ changed = True
433
+
420
434
  if changed:
421
435
  config_for_save = load_config()
422
436
  save_changed = False
@@ -427,6 +441,8 @@ async def refresh_managed_models(config: Config) -> bool:
427
441
  save_changed = True
428
442
  if minimax_models is not None and apply_minimax_models(config_for_save, minimax_models):
429
443
  save_changed = True
444
+ if z_ai_models is not None and apply_z_ai_models(config_for_save, z_ai_models):
445
+ save_changed = True
430
446
  if save_changed:
431
447
  save_config(config_for_save)
432
448
  return changed