pythinker-code 0.50.0__tar.gz → 0.51.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 (1047) hide show
  1. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/PKG-INFO +26 -22
  2. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/README.md +25 -21
  3. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/pyproject.toml +1 -1
  4. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/CHANGELOG.md +35 -0
  5. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/app.py +11 -2
  6. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/cli/__init__.py +21 -3
  7. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/llm.py +62 -1
  8. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/soul/pythinkersoul.py +6 -1
  9. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/__init__.py +12 -5
  10. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/prompt.py +10 -7
  11. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/slash.py +5 -4
  12. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/update.py +15 -1
  13. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/terminal_capabilities.py +13 -1
  14. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/utils/rich/diff_render.py +32 -2
  15. pythinker_code-0.51.0/src/pythinker_code/web/static/assets/architecture-7EHR7CIX-BAIjZ1OY.js +1 -0
  16. pythinker_code-0.50.0/src/pythinker_code/web/static/assets/architectureDiagram-3BPJPVTR-BtlQ9wMo.js → pythinker_code-0.51.0/src/pythinker_code/web/static/assets/architectureDiagram-3BPJPVTR-X_oHUYO1.js +1 -1
  17. pythinker_code-0.50.0/src/pythinker_code/web/static/assets/blockDiagram-GPEHLZMM-pChzMWgu.js → pythinker_code-0.51.0/src/pythinker_code/web/static/assets/blockDiagram-GPEHLZMM-2zLgN0bS.js +1 -1
  18. pythinker_code-0.50.0/src/pythinker_code/web/static/assets/bootstrap-BFeiSQNA.js → pythinker_code-0.51.0/src/pythinker_code/web/static/assets/bootstrap-BSt4IsKh.js +5 -5
  19. pythinker_code-0.50.0/src/pythinker_code/web/static/assets/c4Diagram-AAUBKEIU-B0VtZ4LT.js → pythinker_code-0.51.0/src/pythinker_code/web/static/assets/c4Diagram-AAUBKEIU-DzBGLsx8.js +1 -1
  20. pythinker_code-0.51.0/src/pythinker_code/web/static/assets/channel-CmYAmtsI.js +1 -0
  21. pythinker_code-0.50.0/src/pythinker_code/web/static/assets/chunk-2J33WTMH-zlKMk14A.js → pythinker_code-0.51.0/src/pythinker_code/web/static/assets/chunk-2J33WTMH-FPSU5QaJ.js +1 -1
  22. pythinker_code-0.50.0/src/pythinker_code/web/static/assets/chunk-3OPIFGDE-DDoUJziC.js → pythinker_code-0.51.0/src/pythinker_code/web/static/assets/chunk-3OPIFGDE-D_AIrjRF.js +1 -1
  23. pythinker_code-0.50.0/src/pythinker_code/web/static/assets/chunk-5ZQYHXKU-BVGDalrl.js → pythinker_code-0.51.0/src/pythinker_code/web/static/assets/chunk-5ZQYHXKU-CkynCyNs.js +1 -1
  24. pythinker_code-0.50.0/src/pythinker_code/web/static/assets/chunk-727SXJPM-B40eBuzy.js → pythinker_code-0.51.0/src/pythinker_code/web/static/assets/chunk-727SXJPM-Dr6tFoBV.js +1 -1
  25. pythinker_code-0.50.0/src/pythinker_code/web/static/assets/chunk-AQP2D5EJ-Bjy9cEcL.js → pythinker_code-0.51.0/src/pythinker_code/web/static/assets/chunk-AQP2D5EJ-Bj1KY-58.js +1 -1
  26. pythinker_code-0.50.0/src/pythinker_code/web/static/assets/chunk-CSCIHK7Q-wEnjLHCK.js → pythinker_code-0.51.0/src/pythinker_code/web/static/assets/chunk-CSCIHK7Q-D38wt_PS.js +1 -1
  27. pythinker_code-0.50.0/src/pythinker_code/web/static/assets/chunk-JAPRZBRM-D7mf7095.js → pythinker_code-0.51.0/src/pythinker_code/web/static/assets/chunk-JAPRZBRM-YeVubvkM.js +4 -4
  28. pythinker_code-0.50.0/src/pythinker_code/web/static/assets/chunk-KSCS5N6A-B8C4Qo3S.js → pythinker_code-0.51.0/src/pythinker_code/web/static/assets/chunk-KSCS5N6A-DrGH79o7.js +1 -1
  29. pythinker_code-0.50.0/src/pythinker_code/web/static/assets/chunk-L5ZTLDWV-B6zR5vOT.js → pythinker_code-0.51.0/src/pythinker_code/web/static/assets/chunk-L5ZTLDWV-J3LkyD5q.js +1 -1
  30. pythinker_code-0.50.0/src/pythinker_code/web/static/assets/chunk-LZXEDZCA-E3COZolu.js → pythinker_code-0.51.0/src/pythinker_code/web/static/assets/chunk-LZXEDZCA-CKgXoi0f.js +2 -2
  31. pythinker_code-0.50.0/src/pythinker_code/web/static/assets/chunk-ND2GUHAM-BMUb9pNq.js → pythinker_code-0.51.0/src/pythinker_code/web/static/assets/chunk-ND2GUHAM-DHx_WFtN.js +1 -1
  32. pythinker_code-0.50.0/src/pythinker_code/web/static/assets/chunk-NZK2D7GU-lue24LQy.js → pythinker_code-0.51.0/src/pythinker_code/web/static/assets/chunk-NZK2D7GU-DSLSgJfA.js +1 -1
  33. pythinker_code-0.50.0/src/pythinker_code/web/static/assets/chunk-O5CBEL6O-DZnhYM8W.js → pythinker_code-0.51.0/src/pythinker_code/web/static/assets/chunk-O5CBEL6O-wpjhg9ym.js +1 -1
  34. pythinker_code-0.50.0/src/pythinker_code/web/static/assets/chunk-WU5MYG2G-Cs_Jps3h.js → pythinker_code-0.51.0/src/pythinker_code/web/static/assets/chunk-WU5MYG2G-BLq7E7Qg.js +1 -1
  35. pythinker_code-0.51.0/src/pythinker_code/web/static/assets/classDiagram-4FO5ZUOK-DcdRX25I.js +1 -0
  36. pythinker_code-0.51.0/src/pythinker_code/web/static/assets/classDiagram-v2-Q7XG4LA2-DcdRX25I.js +1 -0
  37. pythinker_code-0.50.0/src/pythinker_code/web/static/assets/code-block-IT6T5CEO-DaJkz64F.js → pythinker_code-0.51.0/src/pythinker_code/web/static/assets/code-block-IT6T5CEO-Dx4cRVQ_.js +1 -1
  38. pythinker_code-0.50.0/src/pythinker_code/web/static/assets/dagre-BM42HDAG-D_p-zlC5.js → pythinker_code-0.51.0/src/pythinker_code/web/static/assets/dagre-BM42HDAG-DRlm8MQJ.js +1 -1
  39. pythinker_code-0.50.0/src/pythinker_code/web/static/assets/diagram-2AECGRRQ-CRfkF_rs.js → pythinker_code-0.51.0/src/pythinker_code/web/static/assets/diagram-2AECGRRQ-BEfjBQLI.js +1 -1
  40. pythinker_code-0.50.0/src/pythinker_code/web/static/assets/diagram-5GNKFQAL-CBiaQLBW.js → pythinker_code-0.51.0/src/pythinker_code/web/static/assets/diagram-5GNKFQAL-Ci0HEJWT.js +1 -1
  41. pythinker_code-0.50.0/src/pythinker_code/web/static/assets/diagram-KO2AKTUF-Dmvj9htg.js → pythinker_code-0.51.0/src/pythinker_code/web/static/assets/diagram-KO2AKTUF-zYONKSY6.js +1 -1
  42. pythinker_code-0.50.0/src/pythinker_code/web/static/assets/diagram-LMA3HP47-Ch0BqHT8.js → pythinker_code-0.51.0/src/pythinker_code/web/static/assets/diagram-LMA3HP47-DQ4T4lCx.js +1 -1
  43. pythinker_code-0.50.0/src/pythinker_code/web/static/assets/diagram-OG6HWLK6-B2o6fWB6.js → pythinker_code-0.51.0/src/pythinker_code/web/static/assets/diagram-OG6HWLK6-CrV-9Ra-.js +1 -1
  44. pythinker_code-0.50.0/src/pythinker_code/web/static/assets/dist-CGayAiNU.js → pythinker_code-0.51.0/src/pythinker_code/web/static/assets/dist-npKuNvtv.js +1 -1
  45. pythinker_code-0.50.0/src/pythinker_code/web/static/assets/erDiagram-TEJ5UH35-DlA5Xc3P.js → pythinker_code-0.51.0/src/pythinker_code/web/static/assets/erDiagram-TEJ5UH35-0lIyRbv9.js +1 -1
  46. pythinker_code-0.51.0/src/pythinker_code/web/static/assets/eventmodeling-FCH6USID-D8j82yTe.js +1 -0
  47. pythinker_code-0.50.0/src/pythinker_code/web/static/assets/flowDiagram-I6XJVG4X-kUWABNTK.js → pythinker_code-0.51.0/src/pythinker_code/web/static/assets/flowDiagram-I6XJVG4X-86rTWOtS.js +1 -1
  48. pythinker_code-0.50.0/src/pythinker_code/web/static/assets/ganttDiagram-6RSMTGT7-YX6-BoSq.js → pythinker_code-0.51.0/src/pythinker_code/web/static/assets/ganttDiagram-6RSMTGT7-DIe58hAf.js +1 -1
  49. pythinker_code-0.50.0/src/pythinker_code/web/static/assets/gitGraph-WXDBUCRP-C5UlYMXv.js → pythinker_code-0.51.0/src/pythinker_code/web/static/assets/gitGraph-WXDBUCRP-MrGKOHQS.js +1 -1
  50. pythinker_code-0.50.0/src/pythinker_code/web/static/assets/gitGraphDiagram-PVQCEYII-DuBE87Qy.js → pythinker_code-0.51.0/src/pythinker_code/web/static/assets/gitGraphDiagram-PVQCEYII-CbxdWdr-.js +1 -1
  51. pythinker_code-0.50.0/src/pythinker_code/web/static/assets/index-BMV1Ud3J.js → pythinker_code-0.51.0/src/pythinker_code/web/static/assets/index-Csj5xlwo.js +2 -2
  52. pythinker_code-0.50.0/src/pythinker_code/web/static/assets/info-J43DQDTF-DVQzXsUk.js → pythinker_code-0.51.0/src/pythinker_code/web/static/assets/info-J43DQDTF-ICUzUEU3.js +1 -1
  53. pythinker_code-0.50.0/src/pythinker_code/web/static/assets/infoDiagram-5YYISTIA-DLBRYCxD.js → pythinker_code-0.51.0/src/pythinker_code/web/static/assets/infoDiagram-5YYISTIA-DJXqNoxd.js +1 -1
  54. pythinker_code-0.50.0/src/pythinker_code/web/static/assets/ishikawaDiagram-YF4QCWOH-BbEtfJML.js → pythinker_code-0.51.0/src/pythinker_code/web/static/assets/ishikawaDiagram-YF4QCWOH-1JFbxySp.js +1 -1
  55. pythinker_code-0.50.0/src/pythinker_code/web/static/assets/journeyDiagram-JHISSGLW-B-8ADsM8.js → pythinker_code-0.51.0/src/pythinker_code/web/static/assets/journeyDiagram-JHISSGLW-COQF3o6_.js +1 -1
  56. pythinker_code-0.50.0/src/pythinker_code/web/static/assets/kanban-definition-UN3LZRKU-DfsCNzSd.js → pythinker_code-0.51.0/src/pythinker_code/web/static/assets/kanban-definition-UN3LZRKU-D423FO9N.js +1 -1
  57. pythinker_code-0.50.0/src/pythinker_code/web/static/assets/line-DkTdvYY0.js → pythinker_code-0.51.0/src/pythinker_code/web/static/assets/line-u46X678h.js +1 -1
  58. pythinker_code-0.51.0/src/pythinker_code/web/static/assets/mermaid-VLURNSYL-69jhIuwd.js +1 -0
  59. pythinker_code-0.50.0/src/pythinker_code/web/static/assets/mermaid-parser.core-MA0k1ZCT.js → pythinker_code-0.51.0/src/pythinker_code/web/static/assets/mermaid-parser.core-C9rzL2kO.js +2 -2
  60. pythinker_code-0.50.0/src/pythinker_code/web/static/assets/mermaid.core-acFcYxBT.js → pythinker_code-0.51.0/src/pythinker_code/web/static/assets/mermaid.core-9_tLDRHh.js +3 -3
  61. pythinker_code-0.50.0/src/pythinker_code/web/static/assets/mindmap-definition-RKZ34NQL-BGBf4V3D.js → pythinker_code-0.51.0/src/pythinker_code/web/static/assets/mindmap-definition-RKZ34NQL-DTtZqqkw.js +1 -1
  62. pythinker_code-0.50.0/src/pythinker_code/web/static/assets/packet-YPE3B663-D7dp38ZY.js → pythinker_code-0.51.0/src/pythinker_code/web/static/assets/packet-YPE3B663-B6LMWa1u.js +1 -1
  63. pythinker_code-0.50.0/src/pythinker_code/web/static/assets/pie-LRSECV5Y-BQu4CDOE.js → pythinker_code-0.51.0/src/pythinker_code/web/static/assets/pie-LRSECV5Y-CMHowp3u.js +1 -1
  64. pythinker_code-0.50.0/src/pythinker_code/web/static/assets/pieDiagram-4H26LBE5-B7rhR3x4.js → pythinker_code-0.51.0/src/pythinker_code/web/static/assets/pieDiagram-4H26LBE5-B01DYhfB.js +1 -1
  65. pythinker_code-0.50.0/src/pythinker_code/web/static/assets/quadrantDiagram-W4KKPZXB-Bt28YYzI.js → pythinker_code-0.51.0/src/pythinker_code/web/static/assets/quadrantDiagram-W4KKPZXB-C66dg48I.js +1 -1
  66. pythinker_code-0.50.0/src/pythinker_code/web/static/assets/radar-GUYGQ44K-BNCJkAg0.js → pythinker_code-0.51.0/src/pythinker_code/web/static/assets/radar-GUYGQ44K-DTCBzdz2.js +1 -1
  67. pythinker_code-0.50.0/src/pythinker_code/web/static/assets/requirementDiagram-4Y6WPE33-BLkwlWmt.js → pythinker_code-0.51.0/src/pythinker_code/web/static/assets/requirementDiagram-4Y6WPE33-nNGWXMs_.js +1 -1
  68. pythinker_code-0.50.0/src/pythinker_code/web/static/assets/sankeyDiagram-5OEKKPKP-lPWBpzo-.js → pythinker_code-0.51.0/src/pythinker_code/web/static/assets/sankeyDiagram-5OEKKPKP-Qb_nK7Gb.js +1 -1
  69. pythinker_code-0.50.0/src/pythinker_code/web/static/assets/sequenceDiagram-3UESZ5HK-TYMLWnFf.js → pythinker_code-0.51.0/src/pythinker_code/web/static/assets/sequenceDiagram-3UESZ5HK-z3RBHyMA.js +1 -1
  70. pythinker_code-0.50.0/src/pythinker_code/web/static/assets/stateDiagram-AJRCARHV-DSPmGaVQ.js → pythinker_code-0.51.0/src/pythinker_code/web/static/assets/stateDiagram-AJRCARHV-C-G3lcYY.js +1 -1
  71. pythinker_code-0.51.0/src/pythinker_code/web/static/assets/stateDiagram-v2-BHNVJYJU-BSsLK9GJ.js +1 -0
  72. pythinker_code-0.50.0/src/pythinker_code/web/static/assets/timeline-definition-PNZ67QCA-CvP_yVPz.js → pythinker_code-0.51.0/src/pythinker_code/web/static/assets/timeline-definition-PNZ67QCA-DXVndtCG.js +1 -1
  73. pythinker_code-0.50.0/src/pythinker_code/web/static/assets/treeView-BLDUP644-CJQwlV6p.js → pythinker_code-0.51.0/src/pythinker_code/web/static/assets/treeView-BLDUP644-CSfnlEh1.js +1 -1
  74. pythinker_code-0.50.0/src/pythinker_code/web/static/assets/treemap-LRROVOQU-C3lHTEMi.js → pythinker_code-0.51.0/src/pythinker_code/web/static/assets/treemap-LRROVOQU-DSDCVrgU.js +1 -1
  75. pythinker_code-0.50.0/src/pythinker_code/web/static/assets/vennDiagram-CIIHVFJN-Br1IKWOD.js → pythinker_code-0.51.0/src/pythinker_code/web/static/assets/vennDiagram-CIIHVFJN-B0Ef6p6-.js +1 -1
  76. pythinker_code-0.50.0/src/pythinker_code/web/static/assets/wardley-L42UT6IY-CYgdmfE4.js → pythinker_code-0.51.0/src/pythinker_code/web/static/assets/wardley-L42UT6IY-wr5KeEdQ.js +1 -1
  77. pythinker_code-0.50.0/src/pythinker_code/web/static/assets/wardleyDiagram-YWT4CUSO-Cb_9nYBc.js → pythinker_code-0.51.0/src/pythinker_code/web/static/assets/wardleyDiagram-YWT4CUSO-B3B0a_Mc.js +1 -1
  78. pythinker_code-0.50.0/src/pythinker_code/web/static/assets/xychartDiagram-2RQKCTM6-CIdBR3kz.js → pythinker_code-0.51.0/src/pythinker_code/web/static/assets/xychartDiagram-2RQKCTM6-CsHCuQhe.js +1 -1
  79. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/index.html +1 -1
  80. pythinker_code-0.50.0/src/pythinker_code/web/static/assets/architecture-7EHR7CIX-CiJci_kb.js +0 -1
  81. pythinker_code-0.50.0/src/pythinker_code/web/static/assets/channel-2cmWmtiR.js +0 -1
  82. pythinker_code-0.50.0/src/pythinker_code/web/static/assets/classDiagram-4FO5ZUOK-Bss_rOtf.js +0 -1
  83. pythinker_code-0.50.0/src/pythinker_code/web/static/assets/classDiagram-v2-Q7XG4LA2-Bss_rOtf.js +0 -1
  84. pythinker_code-0.50.0/src/pythinker_code/web/static/assets/eventmodeling-FCH6USID-94_6GtjE.js +0 -1
  85. pythinker_code-0.50.0/src/pythinker_code/web/static/assets/mermaid-VLURNSYL-otzZqrpj.js +0 -1
  86. pythinker_code-0.50.0/src/pythinker_code/web/static/assets/stateDiagram-v2-BHNVJYJU-C6UIoI0l.js +0 -1
  87. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/LICENSE +0 -0
  88. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/NOTICE +0 -0
  89. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/__init__.py +0 -0
  90. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/__main__.py +0 -0
  91. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/acp/AGENTS.md +0 -0
  92. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/acp/__init__.py +0 -0
  93. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/acp/convert.py +0 -0
  94. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/acp/host.py +0 -0
  95. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/acp/mcp.py +0 -0
  96. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/acp/server.py +0 -0
  97. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/acp/session.py +0 -0
  98. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/acp/tools.py +0 -0
  99. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/acp/types.py +0 -0
  100. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/acp/version.py +0 -0
  101. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/agents/default/agent.yaml +0 -0
  102. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/agents/default/ask.yaml +0 -0
  103. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/agents/default/code_reviewer.yaml +0 -0
  104. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/agents/default/coder.yaml +0 -0
  105. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/agents/default/debug.yaml +0 -0
  106. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/agents/default/debugger.yaml +0 -0
  107. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/agents/default/explore.yaml +0 -0
  108. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/agents/default/implementer.yaml +0 -0
  109. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/agents/default/judge.yaml +0 -0
  110. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/agents/default/plan.yaml +0 -0
  111. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/agents/default/planner.yaml +0 -0
  112. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/agents/default/review.yaml +0 -0
  113. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/agents/default/scout.yaml +0 -0
  114. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/agents/default/security_reviewer.yaml +0 -0
  115. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/agents/default/system.md +0 -0
  116. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/agents/default/verifier.yaml +0 -0
  117. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/agents/okabe/agent.yaml +0 -0
  118. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/agentspec.py +0 -0
  119. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/approval_runtime/__init__.py +0 -0
  120. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/approval_runtime/models.py +0 -0
  121. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/approval_runtime/runtime.py +0 -0
  122. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/auth/__init__.py +0 -0
  123. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/auth/alibaba.py +0 -0
  124. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/auth/anthropic_direct.py +0 -0
  125. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/auth/browser_login_page.py +0 -0
  126. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/auth/deepseek.py +0 -0
  127. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/auth/github_feedback.py +0 -0
  128. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/auth/kimi.py +0 -0
  129. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/auth/lm_studio.py +0 -0
  130. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/auth/minimax.py +0 -0
  131. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/auth/moonshot.py +0 -0
  132. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/auth/oauth.py +0 -0
  133. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/auth/ollama.py +0 -0
  134. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/auth/openai/__init__.py +0 -0
  135. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/auth/openai/_shared.py +0 -0
  136. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/auth/openai/browser_flow.py +0 -0
  137. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/auth/openai/catalog.py +0 -0
  138. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/auth/openai/config_apply.py +0 -0
  139. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/auth/openai/constants.py +0 -0
  140. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/auth/openai/login.py +0 -0
  141. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/auth/openai/models.py +0 -0
  142. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/auth/openai/oauth_client.py +0 -0
  143. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/auth/opencode_go.py +0 -0
  144. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/auth/openrouter.py +0 -0
  145. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/auth/platforms.py +0 -0
  146. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/auth/z_ai.py +0 -0
  147. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/background/__init__.py +0 -0
  148. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/background/agent_runner.py +0 -0
  149. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/background/ids.py +0 -0
  150. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/background/manager.py +0 -0
  151. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/background/models.py +0 -0
  152. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/background/store.py +0 -0
  153. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/background/summary.py +0 -0
  154. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/background/worker.py +0 -0
  155. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/cli/__main__.py +0 -0
  156. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/cli/_lazy_group.py +0 -0
  157. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/cli/dashboard.py +0 -0
  158. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/cli/debug.py +0 -0
  159. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/cli/export.py +0 -0
  160. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/cli/info.py +0 -0
  161. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/cli/mcp.py +0 -0
  162. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/cli/plugin.py +0 -0
  163. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/cli/review.py +0 -0
  164. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/cli/secscan.py +0 -0
  165. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/cli/security_scan.py +0 -0
  166. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/cli/skill.py +0 -0
  167. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/cli/system_prompt.py +0 -0
  168. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/cli/toad.py +0 -0
  169. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/cli/update.py +0 -0
  170. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/cli/web.py +0 -0
  171. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/config.py +0 -0
  172. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/constant.py +0 -0
  173. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/dashboard/__init__.py +0 -0
  174. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/dashboard/api/__init__.py +0 -0
  175. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/dashboard/api/sessions.py +0 -0
  176. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/dashboard/api/statistics.py +0 -0
  177. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/dashboard/api/system.py +0 -0
  178. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/dashboard/app.py +0 -0
  179. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/dashboard/static/assets/highlighted-body-OFNGDK62-BxVUIXn9.js +0 -0
  180. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/dashboard/static/assets/index-DAN_VzOP.css +0 -0
  181. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/dashboard/static/assets/index-DYyxzHPY.js +0 -0
  182. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/dashboard/static/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
  183. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/dashboard/static/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
  184. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/dashboard/static/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
  185. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/dashboard/static/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
  186. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/dashboard/static/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
  187. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/dashboard/static/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
  188. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/dashboard/static/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
  189. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/dashboard/static/assets/mermaid-GHXKKRXX-BR6KjYwB.js +0 -0
  190. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/dashboard/static/index.html +0 -0
  191. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/events.py +0 -0
  192. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/exception.py +0 -0
  193. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/execution_profiles.py +0 -0
  194. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/extensions.py +0 -0
  195. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/feedback.py +0 -0
  196. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/feedback_repo.py +0 -0
  197. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/file_restore.py +0 -0
  198. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/hooks/__init__.py +0 -0
  199. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/hooks/config.py +0 -0
  200. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/hooks/engine.py +0 -0
  201. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/hooks/events.py +0 -0
  202. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/hooks/runner.py +0 -0
  203. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/lsp/__init__.py +0 -0
  204. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/lsp/client.py +0 -0
  205. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/lsp/diagnostics.py +0 -0
  206. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/lsp/framing.py +0 -0
  207. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/lsp/instance.py +0 -0
  208. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/lsp/manager.py +0 -0
  209. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/lsp/plugin_servers.py +0 -0
  210. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/lsp/protocol.py +0 -0
  211. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/lsp/recommend.py +0 -0
  212. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/lsp/service.py +0 -0
  213. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/memory/__init__.py +0 -0
  214. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/memory/consolidation.py +0 -0
  215. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/memory/harvest.py +0 -0
  216. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/memory/recall.py +0 -0
  217. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/memory/recap.py +0 -0
  218. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/memory/retriever.py +0 -0
  219. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/memory/sanitize.py +0 -0
  220. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/metadata.py +0 -0
  221. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/models_dev.py +0 -0
  222. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/native.py +0 -0
  223. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/notifications/__init__.py +0 -0
  224. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/notifications/llm.py +0 -0
  225. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/notifications/manager.py +0 -0
  226. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/notifications/models.py +0 -0
  227. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/notifications/notifier.py +0 -0
  228. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/notifications/store.py +0 -0
  229. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/notifications/wire.py +0 -0
  230. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/plugin/__init__.py +0 -0
  231. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/plugin/artifacts.py +0 -0
  232. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/plugin/dependency.py +0 -0
  233. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/plugin/directories.py +0 -0
  234. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/plugin/install.py +0 -0
  235. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/plugin/installed.py +0 -0
  236. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/plugin/integration.py +0 -0
  237. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/plugin/loader.py +0 -0
  238. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/plugin/manager.py +0 -0
  239. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/plugin/manifest.py +0 -0
  240. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/plugin/marketplace.py +0 -0
  241. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/plugin/options.py +0 -0
  242. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/plugin/policy.py +0 -0
  243. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/plugin/tool.py +0 -0
  244. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/project_memory.py +0 -0
  245. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/project_trust.py +0 -0
  246. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/prompt_templates.py +0 -0
  247. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/prompts/__init__.py +0 -0
  248. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/prompts/best_practices.md +0 -0
  249. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/prompts/compact.md +0 -0
  250. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/prompts/goal_continuation.md +0 -0
  251. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/prompts/goal_set.md +0 -0
  252. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/prompts/goal_wrap_up.md +0 -0
  253. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/prompts/init.md +0 -0
  254. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/prompts/learn.md +0 -0
  255. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/py.typed +0 -0
  256. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/scratchpad.py +0 -0
  257. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/session.py +0 -0
  258. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/session_cleanup.py +0 -0
  259. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/session_fork.py +0 -0
  260. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/session_recap.py +0 -0
  261. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/session_state.py +0 -0
  262. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/share.py +0 -0
  263. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/skill/__init__.py +0 -0
  264. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/skill/flow/__init__.py +0 -0
  265. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/skill/flow/d2.py +0 -0
  266. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/skill/flow/mermaid.py +0 -0
  267. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/skill/lockfile.py +0 -0
  268. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/skills/agent-creator/SKILL.md +0 -0
  269. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/skills/check-impl-against-spec/SKILL.md +0 -0
  270. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/skills/cleanup-audit/SKILL.md +0 -0
  271. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/skills/create-pr/SKILL.md +0 -0
  272. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/skills/customize-pythinker/SKILL.md +0 -0
  273. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/skills/designer-skill/SKILL.md +0 -0
  274. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/skills/diagnose-ci-failures/SKILL.md +0 -0
  275. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/skills/fix-errors/SKILL.md +0 -0
  276. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/skills/implement-specs/SKILL.md +0 -0
  277. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/skills/pr-walkthrough/SKILL.md +0 -0
  278. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/skills/pythinker-code-help/SKILL.md +0 -0
  279. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/skills/reproduce-bug-report/SKILL.md +0 -0
  280. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/skills/resolve-merge-conflicts/SKILL.md +0 -0
  281. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/skills/review-pr/SKILL.md +0 -0
  282. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/skills/skill-creator/SKILL.md +0 -0
  283. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/skills/spec-driven-implementation/SKILL.md +0 -0
  284. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/skills/write-product-spec/SKILL.md +0 -0
  285. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/skills/write-tech-spec/SKILL.md +0 -0
  286. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/soul/__init__.py +0 -0
  287. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/soul/agent.py +0 -0
  288. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/soul/api_errors.py +0 -0
  289. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/soul/approval.py +0 -0
  290. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/soul/btw.py +0 -0
  291. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/soul/compaction.py +0 -0
  292. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/soul/compaction_restore.py +0 -0
  293. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/soul/context.py +0 -0
  294. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/soul/deliberation.py +0 -0
  295. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/soul/denwarenji.py +0 -0
  296. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/soul/dynamic_injection.py +0 -0
  297. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/soul/dynamic_injections/__init__.py +0 -0
  298. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/soul/dynamic_injections/agent_list.py +0 -0
  299. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/soul/dynamic_injections/auto_mode.py +0 -0
  300. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/soul/dynamic_injections/git_status.py +0 -0
  301. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/soul/dynamic_injections/goal_mode.py +0 -0
  302. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/soul/dynamic_injections/inline_commands.py +0 -0
  303. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/soul/dynamic_injections/lsp_diagnostics.py +0 -0
  304. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/soul/dynamic_injections/model_defense.py +0 -0
  305. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/soul/dynamic_injections/orchestration.py +0 -0
  306. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/soul/dynamic_injections/permissions_state.py +0 -0
  307. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/soul/dynamic_injections/plan_mode.py +0 -0
  308. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/soul/flow_runner.py +0 -0
  309. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/soul/live_tokens.py +0 -0
  310. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/soul/message.py +0 -0
  311. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/soul/permission.py +0 -0
  312. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/soul/slash.py +0 -0
  313. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/soul/toolset.py +0 -0
  314. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/subagents/__init__.py +0 -0
  315. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/subagents/builder.py +0 -0
  316. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/subagents/codenames.py +0 -0
  317. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/subagents/core.py +0 -0
  318. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/subagents/discovery.py +0 -0
  319. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/subagents/git_context.py +0 -0
  320. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/subagents/models.py +0 -0
  321. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/subagents/output.py +0 -0
  322. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/subagents/registry.py +0 -0
  323. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/subagents/runner.py +0 -0
  324. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/subagents/store.py +0 -0
  325. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/subagents/usage.py +0 -0
  326. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/subagents/worktree.py +0 -0
  327. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/telemetry/__init__.py +0 -0
  328. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/telemetry/config.py +0 -0
  329. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/telemetry/crash.py +0 -0
  330. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/telemetry/errors.py +0 -0
  331. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/telemetry/metrics.py +0 -0
  332. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/telemetry/names.py +0 -0
  333. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/telemetry/otel.py +0 -0
  334. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/telemetry/sentry.py +0 -0
  335. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/telemetry/sink.py +0 -0
  336. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/thinking.py +0 -0
  337. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/tools/AGENTS.md +0 -0
  338. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/tools/__init__.py +0 -0
  339. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/tools/agent/__init__.py +0 -0
  340. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/tools/agent/description.md +0 -0
  341. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/tools/ask_user/__init__.py +0 -0
  342. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/tools/ask_user/description.md +0 -0
  343. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/tools/background/__init__.py +0 -0
  344. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/tools/background/handoff.md +0 -0
  345. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/tools/background/input.md +0 -0
  346. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/tools/background/list.md +0 -0
  347. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/tools/background/output.md +0 -0
  348. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/tools/background/stop.md +0 -0
  349. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/tools/display.py +0 -0
  350. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/tools/dmail/__init__.py +0 -0
  351. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/tools/dmail/dmail.md +0 -0
  352. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/tools/file/__init__.py +0 -0
  353. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/tools/file/glob.md +0 -0
  354. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/tools/file/glob.py +0 -0
  355. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/tools/file/grep.md +0 -0
  356. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/tools/file/grep_local.py +0 -0
  357. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/tools/file/plan_mode.py +0 -0
  358. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/tools/file/read.md +0 -0
  359. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/tools/file/read.py +0 -0
  360. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/tools/file/read_media.md +0 -0
  361. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/tools/file/read_media.py +0 -0
  362. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/tools/file/replace.md +0 -0
  363. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/tools/file/replace.py +0 -0
  364. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/tools/file/utils.py +0 -0
  365. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/tools/file/write.md +0 -0
  366. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/tools/file/write.py +0 -0
  367. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/tools/goal/__init__.py +0 -0
  368. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/tools/goal/update_goal.md +0 -0
  369. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/tools/lsp/__init__.py +0 -0
  370. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/tools/lsp/formatters.py +0 -0
  371. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/tools/lsp/schemas.py +0 -0
  372. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/tools/lsp/symbol_context.py +0 -0
  373. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/tools/lsp/tool.md +0 -0
  374. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/tools/lsp/tool.py +0 -0
  375. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/tools/mcp_resource/__init__.py +0 -0
  376. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/tools/mcp_resource/list_description.md +0 -0
  377. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/tools/mcp_resource/prompt_description.md +0 -0
  378. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/tools/mcp_resource/read_description.md +0 -0
  379. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/tools/memory/__init__.py +0 -0
  380. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/tools/memory/memory.md +0 -0
  381. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/tools/memory/routing_guard.py +0 -0
  382. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/tools/plan/__init__.py +0 -0
  383. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/tools/plan/description.md +0 -0
  384. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/tools/plan/enter.py +0 -0
  385. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/tools/plan/enter_description.md +0 -0
  386. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/tools/plan/handoff.py +0 -0
  387. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/tools/plan/heroes.py +0 -0
  388. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/tools/progress/__init__.py +0 -0
  389. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/tools/progress/description.md +0 -0
  390. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/tools/recall/__init__.py +0 -0
  391. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/tools/recall/description.md +0 -0
  392. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/tools/scratchpad/__init__.py +0 -0
  393. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/tools/scratchpad/scratchpad_tool.md +0 -0
  394. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/tools/shell/__init__.py +0 -0
  395. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/tools/shell/bash.md +0 -0
  396. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/tools/shell/powershell.md +0 -0
  397. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/tools/skill/__init__.py +0 -0
  398. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/tools/skill/_mcp_bridge.py +0 -0
  399. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/tools/skill/description.md +0 -0
  400. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/tools/suggest/__init__.py +0 -0
  401. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/tools/suggest/description.md +0 -0
  402. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/tools/test.py +0 -0
  403. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/tools/think/__init__.py +0 -0
  404. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/tools/think/think.md +0 -0
  405. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/tools/todo/__init__.py +0 -0
  406. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/tools/todo/set_todo_list.md +0 -0
  407. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/tools/tool_search/__init__.py +0 -0
  408. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/tools/tool_search/tool_search.md +0 -0
  409. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/tools/utils.py +0 -0
  410. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/tools/web/__init__.py +0 -0
  411. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/tools/web/_allowlist.py +0 -0
  412. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/tools/web/fetch.md +0 -0
  413. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/tools/web/fetch.py +0 -0
  414. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/tools/web/search.md +0 -0
  415. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/tools/web/search.py +0 -0
  416. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/tools/worktree/__init__.py +0 -0
  417. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/tools/worktree/enter_worktree.md +0 -0
  418. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/tools/worktree/exit_worktree.md +0 -0
  419. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/__init__.py +0 -0
  420. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/acp/__init__.py +0 -0
  421. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/color_utils.py +0 -0
  422. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/print/__init__.py +0 -0
  423. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/print/visualize.py +0 -0
  424. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/components/__init__.py +0 -0
  425. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/components/base.py +0 -0
  426. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/components/bash_execution.py +0 -0
  427. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/components/bordered_loader.py +0 -0
  428. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/components/diff.py +0 -0
  429. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/components/dynamic_border.py +0 -0
  430. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/components/footer.py +0 -0
  431. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/components/key_hints.py +0 -0
  432. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/components/markdown.py +0 -0
  433. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/components/messages.py +0 -0
  434. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/components/panel.py +0 -0
  435. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/components/render_utils.py +0 -0
  436. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/components/report.py +0 -0
  437. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/components/report_prose_blocks.py +0 -0
  438. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/components/report_update.py +0 -0
  439. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/components/settings_list.py +0 -0
  440. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/components/special_messages.py +0 -0
  441. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/components/tool_execution.py +0 -0
  442. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/console.py +0 -0
  443. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/debug.py +0 -0
  444. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/design_system.py +0 -0
  445. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/echo.py +0 -0
  446. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/export_import.py +0 -0
  447. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/glyphs.py +0 -0
  448. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/keyboard.py +0 -0
  449. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/keymap.py +0 -0
  450. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/markdown/__init__.py +0 -0
  451. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/markdown/audit.py +0 -0
  452. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/markdown/elements.py +0 -0
  453. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/markdown/fences.py +0 -0
  454. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/markdown/normalizers.py +0 -0
  455. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/markdown/renderer.py +0 -0
  456. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/markdown/streaming.py +0 -0
  457. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/mcp_status.py +0 -0
  458. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/model_picker.py +0 -0
  459. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/motion.py +0 -0
  460. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/oauth.py +0 -0
  461. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/placeholders.py +0 -0
  462. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/render_constants.py +0 -0
  463. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/replay.py +0 -0
  464. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/selector.py +0 -0
  465. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/selectors/__init__.py +0 -0
  466. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/selectors/code_theme.py +0 -0
  467. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/selectors/extension.py +0 -0
  468. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/selectors/oauth.py +0 -0
  469. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/selectors/settings.py +0 -0
  470. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/selectors/show_images.py +0 -0
  471. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/selectors/theme.py +0 -0
  472. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/selectors/thinking.py +0 -0
  473. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/session_picker.py +0 -0
  474. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/setup.py +0 -0
  475. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/spacing.py +0 -0
  476. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/spinner_words.py +0 -0
  477. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/startup.py +0 -0
  478. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/stats.py +0 -0
  479. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/stats_collector.py +0 -0
  480. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/stats_pricing.py +0 -0
  481. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/statusline.py +0 -0
  482. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/sync_output.py +0 -0
  483. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/task_browser.py +0 -0
  484. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/tips.py +0 -0
  485. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/tool_renderers/__init__.py +0 -0
  486. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/tool_renderers/_file_diff.py +0 -0
  487. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/tool_renderers/_render_utils.py +0 -0
  488. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/tool_renderers/agent.py +0 -0
  489. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/tool_renderers/ask_user.py +0 -0
  490. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/tool_renderers/background.py +0 -0
  491. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/tool_renderers/bash.py +0 -0
  492. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/tool_renderers/edit.py +0 -0
  493. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/tool_renderers/find.py +0 -0
  494. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/tool_renderers/generic.py +0 -0
  495. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/tool_renderers/grep.py +0 -0
  496. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/tool_renderers/lsp.py +0 -0
  497. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/tool_renderers/mcp_resource.py +0 -0
  498. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/tool_renderers/memory.py +0 -0
  499. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/tool_renderers/plan.py +0 -0
  500. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/tool_renderers/read.py +0 -0
  501. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/tool_renderers/read_media.py +0 -0
  502. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/tool_renderers/skill.py +0 -0
  503. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/tool_renderers/smart_search.py +0 -0
  504. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/tool_renderers/think.py +0 -0
  505. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/tool_renderers/todo.py +0 -0
  506. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/tool_renderers/tool_search.py +0 -0
  507. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/tool_renderers/web.py +0 -0
  508. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/tool_renderers/worktree.py +0 -0
  509. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/tool_renderers/write.py +0 -0
  510. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/update_orchestrator.py +0 -0
  511. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/usage.py +0 -0
  512. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/usage_activity.py +0 -0
  513. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/usage_adapters/__init__.py +0 -0
  514. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/usage_adapters/alibaba.py +0 -0
  515. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/usage_adapters/anthropic_admin.py +0 -0
  516. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/usage_adapters/base.py +0 -0
  517. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/usage_adapters/deepseek.py +0 -0
  518. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/usage_adapters/minimax.py +0 -0
  519. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/usage_adapters/openai_admin.py +0 -0
  520. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/usage_adapters/openai_chatgpt.py +0 -0
  521. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/usage_adapters/opencode_go.py +0 -0
  522. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/usage_adapters/openrouter.py +0 -0
  523. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/usage_adapters/pythinker.py +0 -0
  524. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/usage_adapters/pythinker_ai.py +0 -0
  525. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/usage_render.py +0 -0
  526. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/visualize/__init__.py +0 -0
  527. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/visualize/_activity_tree.py +0 -0
  528. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/visualize/_approval_panel.py +0 -0
  529. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/visualize/_blocks.py +0 -0
  530. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/visualize/_btw_panel.py +0 -0
  531. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/visualize/_dialog_shell.py +0 -0
  532. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/visualize/_diff_live.py +0 -0
  533. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/visualize/_input_router.py +0 -0
  534. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/visualize/_interactive.py +0 -0
  535. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/visualize/_live_view.py +0 -0
  536. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/visualize/_question_panel.py +0 -0
  537. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/visualize/_transcript.py +0 -0
  538. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/shell/visualize/_worklog.py +0 -0
  539. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/terminal_background.py +0 -0
  540. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/theme/__init__.py +0 -0
  541. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/theme/adapters/__init__.py +0 -0
  542. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/theme/adapters/markdown.py +0 -0
  543. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/theme/adapters/task_browser.py +0 -0
  544. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/theme/capabilities.py +0 -0
  545. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/theme/palettes.py +0 -0
  546. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/theme/pythinker_themes.py +0 -0
  547. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/theme/registry.py +0 -0
  548. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/theme/resolver.py +0 -0
  549. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/theme/spec.py +0 -0
  550. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/ui/tui_config.py +0 -0
  551. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/update_policy.py +0 -0
  552. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/usage_ratelimit_cache.py +0 -0
  553. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/utils/__init__.py +0 -0
  554. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/utils/aiohttp.py +0 -0
  555. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/utils/aioqueue.py +0 -0
  556. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/utils/artifacts.py +0 -0
  557. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/utils/broadcast.py +0 -0
  558. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/utils/changelog.py +0 -0
  559. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/utils/clipboard.py +0 -0
  560. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/utils/datetime.py +0 -0
  561. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/utils/diff.py +0 -0
  562. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/utils/editor.py +0 -0
  563. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/utils/environment.py +0 -0
  564. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/utils/envvar.py +0 -0
  565. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/utils/export.py +0 -0
  566. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/utils/file_filter.py +0 -0
  567. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/utils/file_read_cache.py +0 -0
  568. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/utils/frontmatter.py +0 -0
  569. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/utils/gitignore.py +0 -0
  570. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/utils/io.py +0 -0
  571. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/utils/logging.py +0 -0
  572. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/utils/mcp_names.py +0 -0
  573. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/utils/media_limits.py +0 -0
  574. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/utils/media_tags.py +0 -0
  575. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/utils/message.py +0 -0
  576. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/utils/path.py +0 -0
  577. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/utils/proctitle.py +0 -0
  578. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/utils/proxy.py +0 -0
  579. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/utils/pyinstaller.py +0 -0
  580. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/utils/rich/__init__.py +0 -0
  581. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/utils/rich/columns.py +0 -0
  582. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/utils/rich/markdown.py +0 -0
  583. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/utils/rich/markdown_sample.md +0 -0
  584. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/utils/rich/markdown_sample_short.md +0 -0
  585. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/utils/rich/syntax.py +0 -0
  586. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/utils/sensitive.py +0 -0
  587. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/utils/server.py +0 -0
  588. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/utils/signals.py +0 -0
  589. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/utils/slashcmd.py +0 -0
  590. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/utils/sleep_inhibitor.py +0 -0
  591. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/utils/string.py +0 -0
  592. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/utils/subprocess_env.py +0 -0
  593. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/utils/term.py +0 -0
  594. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/utils/trust.py +0 -0
  595. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/utils/typing.py +0 -0
  596. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/__init__.py +0 -0
  597. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/api/__init__.py +0 -0
  598. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/api/config.py +0 -0
  599. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/api/open_in.py +0 -0
  600. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/api/sessions.py +0 -0
  601. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/app.py +0 -0
  602. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/auth.py +0 -0
  603. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/models.py +0 -0
  604. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/runner/__init__.py +0 -0
  605. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/runner/messages.py +0 -0
  606. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/runner/process.py +0 -0
  607. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/runner/worker.py +0 -0
  608. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/_headers +0 -0
  609. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  610. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  611. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  612. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  613. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  614. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  615. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  616. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  617. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  618. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  619. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  620. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  621. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  622. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  623. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  624. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  625. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  626. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  627. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  628. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  629. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  630. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  631. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  632. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  633. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  634. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  635. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  636. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  637. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  638. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  639. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  640. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  641. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  642. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  643. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  644. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  645. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  646. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  647. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  648. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  649. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  650. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  651. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  652. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  653. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  654. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  655. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  656. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  657. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  658. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  659. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  660. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  661. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  662. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  663. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  664. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  665. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  666. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  667. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  668. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/abap-CLvhMVsD.js +0 -0
  669. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/actionscript-3--17pq3dv.js +0 -0
  670. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/ada-C5qYipkI.js +0 -0
  671. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/andromeeda-vGVdxbeo.js +0 -0
  672. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/angular-html-BKhkKBsm.js +0 -0
  673. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/angular-ts-CYPbMJCA.js +0 -0
  674. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/apache-U0d_L8uA.js +0 -0
  675. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/apex-CGTLDQj6.js +0 -0
  676. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/apl-D7bENxmy.js +0 -0
  677. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/applescript-CCn79oCD.js +0 -0
  678. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/ara-4CJ0cIlV.js +0 -0
  679. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/arc-8BWbC-0s.js +0 -0
  680. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/array-BifhSqXX.js +0 -0
  681. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/asciidoc-DE70LPWp.js +0 -0
  682. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/asm-Cmm7eHzH.js +0 -0
  683. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/astro-B1l9MDUT.js +0 -0
  684. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/aurora-x-CDeNXAV0.js +0 -0
  685. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/awk-BWXHIvNe.js +0 -0
  686. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/ayu-dark-DluEY0Gj.js +0 -0
  687. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/ayu-light-C3h-C4tm.js +0 -0
  688. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/ayu-mirage-Bqwy1Gya.js +0 -0
  689. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/ballerina-B7ZEbQpA.js +0 -0
  690. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/bat-Bo4NYOV-.js +0 -0
  691. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/beancount-D-usSTwE.js +0 -0
  692. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/berry-DKpUyyne.js +0 -0
  693. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/bibtex-Ci_nEsc7.js +0 -0
  694. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/bicep-CUHmPFLl.js +0 -0
  695. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/bird2-C2hNVINV.js +0 -0
  696. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/blade-BlkqRXu6.js +0 -0
  697. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/bootstrap-BhLLvBaE.css +0 -0
  698. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/bsl-BkkzgIyY.js +0 -0
  699. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/c-PpPxyn8g.js +0 -0
  700. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/c3-CnJL0r0V.js +0 -0
  701. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/cadence-CQ2zXKGN.js +0 -0
  702. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/cairo-DLTphjLi.js +0 -0
  703. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/catppuccin-frappe-3VR1Za6u.js +0 -0
  704. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/catppuccin-latte-DwIHMF0Q.js +0 -0
  705. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/catppuccin-macchiato-DYnBP6_5.js +0 -0
  706. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/catppuccin-mocha-DYhrFGRu.js +0 -0
  707. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/character-entities-legacy-Wut6vMuj.js +0 -0
  708. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/chevrons-up-down-Dwo0Il5v.js +0 -0
  709. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/chunk-4BX2VUAB-C0kf5ycP.js +0 -0
  710. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/chunk-55IACEB6-QyFAFTWp.js +0 -0
  711. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/chunk-BSJP7CBP-DIpfLhEz.js +0 -0
  712. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/chunk-Cyuzqnbw.js +0 -0
  713. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/chunk-FMBD7UC4-C9D6P7Uq.js +0 -0
  714. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/chunk-NNHCCRGN-DmZbXBJw.js +0 -0
  715. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/chunk-QZHKN3VN-CyVdgm44.js +0 -0
  716. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/chunk-XPW4576I-ru3A962d.js +0 -0
  717. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/clarity-SemFz856.js +0 -0
  718. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/clojure-DqKBuwfJ.js +0 -0
  719. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/cmake-Bj61d0ZC.js +0 -0
  720. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/cobol-BoXxFQjh.js +0 -0
  721. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/codeowners-C8r90Shi.js +0 -0
  722. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/codeql-oeQT6MSM.js +0 -0
  723. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/coffee-B5TREocO.js +0 -0
  724. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/common-lisp-Cv5bFMCO.js +0 -0
  725. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/coq-BrsZFFmf.js +0 -0
  726. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/cose-bilkent-S5V4N54A-PjRvINHM.js +0 -0
  727. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/cpp-CVIk4zoB.js +0 -0
  728. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/crystal-CvUuUt6_.js +0 -0
  729. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/csharp-Ct8U2NOr.js +0 -0
  730. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/css-D7o5g6xi.js +0 -0
  731. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/csv-Dx-8-gkx.js +0 -0
  732. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/cue-CE9AQfxI.js +0 -0
  733. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/cypher-ClKdZ_lG.js +0 -0
  734. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/cytoscape.esm-jXPf2pm4.js +0 -0
  735. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/d-qD-0Kul2.js +0 -0
  736. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/dagre-Uyq5yTtG.js +0 -0
  737. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/dark-plus-Cs2F2srj.js +0 -0
  738. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/dart-DkHntEIa.js +0 -0
  739. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/dax-BkyTk9wS.js +0 -0
  740. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/defaultLocale-C8Fc0cco.js +0 -0
  741. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/desktop-Dlh5hvp9.js +0 -0
  742. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/diff-BDNflWRl.js +0 -0
  743. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/diff-Dvab7kiv.css +0 -0
  744. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/diff-woXpYk--.js +0 -0
  745. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/dist-B7jLwIkG.js +0 -0
  746. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/dist-D4B_Bs5p.js +0 -0
  747. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/dist-reBDvVlc.js +0 -0
  748. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/docker-IyjqRm3v.js +0 -0
  749. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/dotenv-_5a1GRtc.js +0 -0
  750. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/dracula-BHWKrbxM.js +0 -0
  751. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/dracula-soft-5eyTD99u.js +0 -0
  752. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/dream-maker-DW3nJb8Q.js +0 -0
  753. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/edge-CmXZi-az.js +0 -0
  754. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/elixir-BoRIkjDi.js +0 -0
  755. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/elm-Cm7sFdI1.js +0 -0
  756. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/emacs-lisp-C9PiwqqW.js +0 -0
  757. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/erb-DuMAGb6i.js +0 -0
  758. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/erlang-Cphh6RMH.js +0 -0
  759. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/everforest-dark-sB-x3p7T.js +0 -0
  760. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/everforest-light-Df2xbC6M.js +0 -0
  761. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/fennel-DQxkIbk2.js +0 -0
  762. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/fish-BJitypiv.js +0 -0
  763. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/fluent-C03EYrpw.js +0 -0
  764. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/fortran-fixed-form-DEKoE2YW.js +0 -0
  765. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/fortran-free-form-CYNrtFtB.js +0 -0
  766. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/fsharp-D13ZGOAj.js +0 -0
  767. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/gdresource-C0sCabJj.js +0 -0
  768. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/gdscript-Cp2uCuqX.js +0 -0
  769. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/gdshader-CBce3t8t.js +0 -0
  770. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/genie-CV2tkWYe.js +0 -0
  771. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/gherkin-DExj1W_8.js +0 -0
  772. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/git-commit-BSykSTBG.js +0 -0
  773. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/git-rebase-D2tSwjJb.js +0 -0
  774. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/github-dark-C-LZuMrd.js +0 -0
  775. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/github-dark-default-DXG-b-1a.js +0 -0
  776. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/github-dark-dimmed-Bx1FflLF.js +0 -0
  777. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/github-dark-high-contrast-B_tTalzw.js +0 -0
  778. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/github-light-EUqPIrTm.js +0 -0
  779. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/github-light-default-BXViO-2h.js +0 -0
  780. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/github-light-high-contrast-B68TUdTA.js +0 -0
  781. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/gleam-CSRkHgEL.js +0 -0
  782. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/glimmer-js--VVKNatA.js +0 -0
  783. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/glimmer-ts-Bfa_wiNC.js +0 -0
  784. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/glsl-MPwHyiXQ.js +0 -0
  785. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/gn-ilITqXS6.js +0 -0
  786. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/gnuplot-7GGW24-e.js +0 -0
  787. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/go-BJwz_mda.js +0 -0
  788. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/graphlib-C22s9MDV.js +0 -0
  789. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/graphql-NW854Khs.js +0 -0
  790. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/groovy-CacY0gHj.js +0 -0
  791. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/gruvbox-dark-hard-C820rvS2.js +0 -0
  792. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/gruvbox-dark-medium-BPjhmG05.js +0 -0
  793. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/gruvbox-dark-soft-MrdJrrXF.js +0 -0
  794. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/gruvbox-light-hard-BC_s9l72.js +0 -0
  795. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/gruvbox-light-medium-BAWPOn9u.js +0 -0
  796. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/gruvbox-light-soft-BSMLrYjP.js +0 -0
  797. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/hack-CSl79E5u.js +0 -0
  798. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/haml-Dmb1YmHj.js +0 -0
  799. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/handlebars-Du8DtnRB.js +0 -0
  800. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/haskell-D8IpX4py.js +0 -0
  801. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/haxe-OTjmBuCE.js +0 -0
  802. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/hcl-Dh228itO.js +0 -0
  803. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/hjson-CxZEssPk.js +0 -0
  804. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/hlsl-Cvrh5tZx.js +0 -0
  805. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/horizon-CE9ld1lL.js +0 -0
  806. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/horizon-bright-Br1oVSNq.js +0 -0
  807. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/houston-CsvMBhTu.js +0 -0
  808. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/html-Kpl3bQKd.js +0 -0
  809. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/html-derivative-BEEWNZ8Y.js +0 -0
  810. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/http-HvMG3K54.js +0 -0
  811. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/hurl-CLh1t2ES.js +0 -0
  812. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/hxml-B0Qn7Nwc.js +0 -0
  813. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/hy-CZbG8q4J.js +0 -0
  814. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/imba-DsUTQ-LC.js +0 -0
  815. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/ini-B5eOa1yu.js +0 -0
  816. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/init-D6jRqBbL.js +0 -0
  817. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
  818. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
  819. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
  820. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
  821. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
  822. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
  823. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
  824. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/java-Cst_eZTE.js +0 -0
  825. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/javascript-i_rUTyCW.js +0 -0
  826. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/jinja-CaXggA6f.js +0 -0
  827. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/jison-D9Fg2JgN.js +0 -0
  828. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/json-DS5j4FfK.js +0 -0
  829. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/json5-BR5RXkoi.js +0 -0
  830. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/jsonc-CYpm1nAK.js +0 -0
  831. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/jsonl-CmCQp5Yx.js +0 -0
  832. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/jsonnet-CJTPZ8u_.js +0 -0
  833. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/jssm-DXw9l8Rf.js +0 -0
  834. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/jsx-CFyhNHav.js +0 -0
  835. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/jsx-runtime-wSvXh6gi.js +0 -0
  836. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/julia-R8NNmfP1.js +0 -0
  837. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/just-BhhHYlS8.js +0 -0
  838. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/kanagawa-dragon-CXtmUGW6.js +0 -0
  839. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/kanagawa-lotus-BN08jTvb.js +0 -0
  840. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/kanagawa-wave-CTweb8Dz.js +0 -0
  841. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/katex-BGaDVET_.js +0 -0
  842. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/katex-BorAY7qD.css +0 -0
  843. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/kdl-CsD5j6eV.js +0 -0
  844. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/kotlin-DhhofPvG.js +0 -0
  845. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/kusto-BUv0MjJC.js +0 -0
  846. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/laserwave-C_8bwKvT.js +0 -0
  847. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/latex-D5k_uhWv.js +0 -0
  848. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/lean-CewbzKMR.js +0 -0
  849. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/less-DVTAwKKz.js +0 -0
  850. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/lib-BLxG8W6T.js +0 -0
  851. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/libesm-8-2luV-1.js +0 -0
  852. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/light-plus-DVQuIRkW.js +0 -0
  853. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/linear-BktLjFGX.js +0 -0
  854. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/liquid-Q0_hzjly.js +0 -0
  855. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/llvm-Cm23YOpf.js +0 -0
  856. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/log-BNLmms1o.js +0 -0
  857. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/logo-Cluzi2Zq.js +0 -0
  858. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/lua-VoGSg0xb.js +0 -0
  859. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/luau-CNKltnaQ.js +0 -0
  860. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/make-Dixweg8N.js +0 -0
  861. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/markdown-BYOwaDjH.js +0 -0
  862. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/marked.esm-DLdcrU5H.js +0 -0
  863. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/marko-D_aeUD__.js +0 -0
  864. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/material-theme-Bm3Qr25_.js +0 -0
  865. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/material-theme-darker-2IIEA8gg.js +0 -0
  866. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/material-theme-lighter-uhdI0v04.js +0 -0
  867. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/material-theme-ocean-CHQ94UKr.js +0 -0
  868. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/material-theme-palenight-B5W6OYN7.js +0 -0
  869. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/matlab-D7qyCx1q.js +0 -0
  870. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/mdc-BSifqehP.js +0 -0
  871. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/mdx-DQZ5AkYe.js +0 -0
  872. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/mermaid-Bk4SNUv9.js +0 -0
  873. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/min-dark-BSWPekZh.js +0 -0
  874. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/min-light-DDpmG2fV.js +0 -0
  875. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/mipsasm-BMqwQI7S.js +0 -0
  876. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/mojo-BgCJLMeH.js +0 -0
  877. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/monokai-CdkpiU2Y.js +0 -0
  878. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/moonbit-CaWjb8XO.js +0 -0
  879. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/move-B1IS1UjX.js +0 -0
  880. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/narrat-_X_XdTYD.js +0 -0
  881. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/nextflow-Bbiyy34d.js +0 -0
  882. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/nextflow-groovy-Dc_ddanL.js +0 -0
  883. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/nginx-CgHaWcsO.js +0 -0
  884. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/night-owl-DhmEMT88.js +0 -0
  885. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/night-owl-light-eJ-hLW7d.js +0 -0
  886. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/nim-BuixXxPS.js +0 -0
  887. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/nix-IvuFDN5E.js +0 -0
  888. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/nord-Cb4Vim4T.js +0 -0
  889. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/nushell-DcLAeLz5.js +0 -0
  890. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/objective-c-D1A_Heim.js +0 -0
  891. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/objective-cpp-BsSzOQcm.js +0 -0
  892. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/ocaml-O90oeIOV.js +0 -0
  893. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/odin-B1RWQWA5.js +0 -0
  894. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/one-dark-pro-CLwyXe_n.js +0 -0
  895. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/one-light-D7Lr4KcI.js +0 -0
  896. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/openscad-BUDT5pXO.js +0 -0
  897. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/ordinal-hYBb2elL.js +0 -0
  898. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/pascal-4ZHwLPI5.js +0 -0
  899. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/path-BWPyau1x.js +0 -0
  900. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/perl-BLMySlFJ.js +0 -0
  901. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/php-Czf_fybR.js +0 -0
  902. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/pkl-ot-7Btpt.js +0 -0
  903. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/plastic-DQwYfKfQ.js +0 -0
  904. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/plsql-DGHpHOYJ.js +0 -0
  905. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/po-BiJDBrnU.js +0 -0
  906. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/poimandres-DRFjx7u4.js +0 -0
  907. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/polar-C7UOKdEL.js +0 -0
  908. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/postcss-BXeXVLqQ.js +0 -0
  909. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/powerquery-DNMTfnFr.js +0 -0
  910. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/powershell-DshXNtvi.js +0 -0
  911. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/prisma-BsRQq5mF.js +0 -0
  912. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/prolog-iXnhIJG7.js +0 -0
  913. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/proto-DB4EqR-F.js +0 -0
  914. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/pug-CsZglf8T.js +0 -0
  915. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/puppet-CDv2pdJW.js +0 -0
  916. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/purescript-9MfHhQsQ.js +0 -0
  917. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/python-gzcpVVnB.js +0 -0
  918. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/qml-DcW_sT3t.js +0 -0
  919. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/qmldir-DCQb3MpD.js +0 -0
  920. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/qss-Fe1Jh2GI.js +0 -0
  921. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/r-D2d3McyU.js +0 -0
  922. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/racket-DcIDlBhZ.js +0 -0
  923. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/raku-B3gFvitq.js +0 -0
  924. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/razor-oFpUW61Z.js +0 -0
  925. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/red-CJ3rzSJv.js +0 -0
  926. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/reg-CRGYupPL.js +0 -0
  927. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/regexp-Bu0flJgP.js +0 -0
  928. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/rel-BtDbiS_P.js +0 -0
  929. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/riscv-Ckw8ddFX.js +0 -0
  930. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/ron-VUp2lXgN.js +0 -0
  931. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/rose-pine-BthvhNj6.js +0 -0
  932. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/rose-pine-dawn-Dg85fqjY.js +0 -0
  933. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/rose-pine-moon-hon4tzzS.js +0 -0
  934. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/rosmsg-CAekHB0j.js +0 -0
  935. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/rough.esm-CSKSodPl.js +0 -0
  936. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/rst-U6Eu7ipE.js +0 -0
  937. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/ruby-CUQsVT6d.js +0 -0
  938. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/rust-Cfkwpbl8.js +0 -0
  939. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/sas-CNBFrLhc.js +0 -0
  940. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/sass-DXrisJhu.js +0 -0
  941. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/scala-DKOlJaKm.js +0 -0
  942. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/scheme-DQCgrYNe.js +0 -0
  943. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/scss-CPnU-uuv.js +0 -0
  944. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/sdbl-bTVj8UrX.js +0 -0
  945. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/shaderlab-TOUzSsQk.js +0 -0
  946. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/shellscript-BbTp1yjG.js +0 -0
  947. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/shellsession-BmAC8SMF.js +0 -0
  948. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/slack-dark-DnToyrRv.js +0 -0
  949. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/slack-ochin-B2OO5cIa.js +0 -0
  950. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/smalltalk-B16xEiuN.js +0 -0
  951. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/snazzy-light-4G7pJPwS.js +0 -0
  952. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/solarized-dark-DV17i1UV.js +0 -0
  953. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/solarized-light-DSh2HLQt.js +0 -0
  954. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/solidity-CKzVLygQ.js +0 -0
  955. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/soy-CdbyEXp6.js +0 -0
  956. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/space-separated-tokens-DpjE5PGy.js +0 -0
  957. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/sparql-D_iOobhT.js +0 -0
  958. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/splunk-BC2Px7Mm.js +0 -0
  959. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/sql-hpBkusIy.js +0 -0
  960. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/src-D-NMWEou.js +0 -0
  961. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/ssh-config-BgfXC-Er.js +0 -0
  962. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/stata-DVbvk3qH.js +0 -0
  963. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/stylus-B6D30XZt.js +0 -0
  964. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/surrealql-DxccxuMd.js +0 -0
  965. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/svelte-DzNm5V2w.js +0 -0
  966. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/swift-DonLKvLd.js +0 -0
  967. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/synthwave-84-nFMaYfgc.js +0 -0
  968. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/system-verilog-DJ5XKQeo.js +0 -0
  969. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/systemd-BxMlprV5.js +0 -0
  970. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/talonscript-CohzipZa.js +0 -0
  971. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/tasl-DMoTqEGO.js +0 -0
  972. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/tcl-CZd0xW_V.js +0 -0
  973. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/templ-CsM0tTsw.js +0 -0
  974. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/terraform-DswuEJGm.js +0 -0
  975. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/tex-B0f_hYr8.js +0 -0
  976. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/tokyo-night-oM2G3aXe.js +0 -0
  977. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/toml-CcmNWLt0.js +0 -0
  978. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/ts-tags-Bf-FGGvT.js +0 -0
  979. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/tsv-sltzmVWM.js +0 -0
  980. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/tsx-DFvk7AwW.js +0 -0
  981. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/turtle-ByJddavk.js +0 -0
  982. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/twig-VJ4-Ntm0.js +0 -0
  983. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/typescript-DHTLvXzV.js +0 -0
  984. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/typespec-B88KGewJ.js +0 -0
  985. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/typst-DI99ib-x.js +0 -0
  986. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/v-DETTlOr0.js +0 -0
  987. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/v4-DqR3yzBO.js +0 -0
  988. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/vala-zf12oZj6.js +0 -0
  989. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/vb-Djn5o6TS.js +0 -0
  990. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/verilog-CiiDBU1e.js +0 -0
  991. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/vesper-D5bVUKB1.js +0 -0
  992. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/vhdl-BroJfC0k.js +0 -0
  993. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/viml-DvXPmvsu.js +0 -0
  994. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/vitesse-black-fwtXNY1n.js +0 -0
  995. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/vitesse-dark-BZCL-v6S.js +0 -0
  996. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/vitesse-light-VbXTXTou.js +0 -0
  997. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/vue-D3dSYZKz.js +0 -0
  998. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/vue-html-DQch_7VQ.js +0 -0
  999. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/vue-vine-B67Dz05t.js +0 -0
  1000. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/vyper-CgoNMtux.js +0 -0
  1001. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/wasm-BnjxR4X6.js +0 -0
  1002. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/wasm-ByWQv1Qj.js +0 -0
  1003. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/wenyan-C8pVoKbM.js +0 -0
  1004. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/wgsl-BsKzXJz4.js +0 -0
  1005. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/wikitext-ClFFjSW2.js +0 -0
  1006. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/wit-DdvCle-K.js +0 -0
  1007. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/wolfram-DLL8P-h_.js +0 -0
  1008. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/xml-C33zriiW.js +0 -0
  1009. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/xsl-BFS2wyMt.js +0 -0
  1010. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/yaml-w0rMsuN4.js +0 -0
  1011. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/zenscript-BnlCZFoB.js +0 -0
  1012. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/assets/zig-CMLA9XwU.js +0 -0
  1013. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/brand/apple-touch-icon.png +0 -0
  1014. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/brand/arctecture.webp +0 -0
  1015. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/brand/bimi-logo.svg +0 -0
  1016. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/brand/favicon.ico +0 -0
  1017. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/brand/fonts/dm-sans-latin-ext.woff2 +0 -0
  1018. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/brand/fonts/dm-sans-latin.woff2 +0 -0
  1019. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/brand/fonts/instrument-sans-latin-ext.woff2 +0 -0
  1020. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/brand/fonts/instrument-sans-latin.woff2 +0 -0
  1021. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/brand/fonts/instrument-serif-latin-ext.woff2 +0 -0
  1022. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/brand/fonts/instrument-serif-latin.woff2 +0 -0
  1023. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-italic-latin-ext.woff2 +0 -0
  1024. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-italic-latin.woff2 +0 -0
  1025. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-latin-ext.woff2 +0 -0
  1026. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-latin.woff2 +0 -0
  1027. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/brand/fonts/roboto-latin-ext.woff2 +0 -0
  1028. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/brand/fonts/roboto-latin.woff2 +0 -0
  1029. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/brand/icon-192.png +0 -0
  1030. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/brand/icon-512.png +0 -0
  1031. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/brand/icon.svg +0 -0
  1032. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/brand/logo.png +0 -0
  1033. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/brand/pythinker_animated.svg +0 -0
  1034. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/brand/robots.txt +0 -0
  1035. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/install.ps1 +0 -0
  1036. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/install.sh +0 -0
  1037. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/static/logo.png +0 -0
  1038. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/store/__init__.py +0 -0
  1039. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/web/store/sessions.py +0 -0
  1040. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/wire/__init__.py +0 -0
  1041. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/wire/file.py +0 -0
  1042. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/wire/jsonrpc.py +0 -0
  1043. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/wire/protocol.py +0 -0
  1044. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/wire/root_hub.py +0 -0
  1045. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/wire/serde.py +0 -0
  1046. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/wire/server.py +0 -0
  1047. {pythinker_code-0.50.0 → pythinker_code-0.51.0}/src/pythinker_code/wire/types.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pythinker-code
3
- Version: 0.50.0
3
+ Version: 0.51.0
4
4
  Summary: Pythinker — an agentic CLI developed by Pythoughts-labs.
5
5
  Keywords: cli,agent,ai,coding-assistant,llm,claude,openai,terminal
6
6
  Author: Pythoughts-labs
@@ -115,12 +115,16 @@ It speaks the [**Agent Client Protocol (ACP)**](https://github.com/agentclientpr
115
115
 
116
116
  ---
117
117
 
118
- ## 🆕 What's New in 0.50.0
118
+ ## 🆕 What's New in 0.51.0
119
119
 
120
- - **Safer silent updates.** The downloaded build is now staged beside the running executable and promoted at exit, instead of overwriting the live onefile bundle in place eliminating mid-session `zlib: incorrect header check` crashes after a background update.
121
- - **Cleaner update notice.** The "Updated vX. Restart to apply." line renders below the prompt's bottom border, not inside the input area.
120
+ - **Model-aware thinking levels.** The thinking selector and Shift+Tab cycle now scope reasoning effort to what the active GPT-5-family model accepts; unsupported persisted levels are clamped before the API call.
121
+ - **Cleaner diff cards.** Diff syntax highlighting no longer paints an opaque code-theme background over green/red row tints tints show through on every terminal.
122
+ - **Truecolor in VS Code terminals.** Integrated terminals reporting `TERM_PROGRAM=vscode` (and forks) are promoted to truecolor so diff tints don't fall back to 16-color mode.
123
+ - **No duplicate welcome banner on reload.** Same-session reloads (`/model`, `/theme`, `/thinking`, …) keep the existing banner instead of stacking a second splash.
124
+ - **Update notice moved to footer.** The persistent "Restart to apply" / "Update available" line renders below the status/clock row, clear of the input box.
125
+ - **Safer Homebrew self-upgrades.** Silent `brew upgrade` runs with cleanup/auto-update disabled so the in-use Cellar version isn't deleted mid-session.
122
126
 
123
- Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.50.0`, or use the native installer for your platform from the [Releases page](https://github.com/Pythoughts-labs/pythinker-code/releases/latest).
127
+ Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.51.0`, or use the native installer for your platform from the [Releases page](https://github.com/Pythoughts-labs/pythinker-code/releases/latest).
124
128
 
125
129
 
126
130
  ---
@@ -210,7 +214,7 @@ matches your OS — no Python, Node, or `uv` prerequisite.
210
214
 
211
215
  | Platform | Recommended install | Artifact source |
212
216
  |---|---|---|
213
- | **🪟 Windows** | `irm https://pythinker.com/install.ps1 \| iex` | `PythinkerSetup-0.50.0.exe` from [Releases](https://github.com/Pythoughts-labs/pythinker-code/releases/latest) |
217
+ | **🪟 Windows** | `irm https://pythinker.com/install.ps1 \| iex` | `PythinkerSetup-0.51.0.exe` from [Releases](https://github.com/Pythoughts-labs/pythinker-code/releases/latest) |
214
218
  | **<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) |
215
219
  | **<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 |
216
220
  | **🐳 Docker** | `docker run --rm -it ghcr.io/pythoughts-labs/pythinker-code` | GHCR multi-arch image |
@@ -238,7 +242,7 @@ pythinker # start the interactive TUI
238
242
 
239
243
  ### 🪟 Windows — native installer
240
244
 
241
- `PythinkerSetup-0.50.0.exe` is a signed* Inno Setup wizard. Installs per-user
245
+ `PythinkerSetup-0.51.0.exe` is a signed* Inno Setup wizard. Installs per-user
242
246
  into `%LOCALAPPDATA%\Programs\Pythinker`, registers `pythinker` on your user
243
247
  PATH (`HKCU\Environment`), broadcasts `WM_SETTINGCHANGE` so new shells see
244
248
  the change. **No UAC prompt.**
@@ -249,13 +253,13 @@ irm https://pythinker.com/install.ps1 | iex
249
253
 
250
254
  # Or manually download the installer + checksum from the Releases page,
251
255
  # verify with Get-FileHash, then run:
252
- .\PythinkerSetup-0.50.0.exe
256
+ .\PythinkerSetup-0.51.0.exe
253
257
 
254
258
  # Open a fresh PowerShell
255
259
  pythinker --version
256
260
  ```
257
261
 
258
- **Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.50.0.exe /ALLUSERS`
262
+ **Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.51.0.exe /ALLUSERS`
259
263
  installs to `%ProgramFiles%\Pythinker` and writes PATH to HKLM (requires admin).
260
264
 
261
265
  **Upgrade:** `pythinker update` from inside the running app — it downloads
@@ -313,26 +317,26 @@ attached to every GitHub Release.
313
317
 
314
318
  ```sh
315
319
  # Debian / Ubuntu (x86_64)
316
- sudo dpkg -i pythinker-code_0.50.0_amd64.deb
320
+ sudo dpkg -i pythinker-code_0.51.0_amd64.deb
317
321
  sudo apt-get install -f # only if dpkg reports missing deps
318
322
 
319
323
  # Debian / Ubuntu (ARM64)
320
- sudo dpkg -i pythinker-code_0.50.0_arm64.deb
324
+ sudo dpkg -i pythinker-code_0.51.0_arm64.deb
321
325
 
322
326
  # Fedora / RHEL / openSUSE (x86_64)
323
- curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.50.0/pythinker-code-0.50.0.x86_64.rpm
324
- curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.50.0/pythinker-code-0.50.0.x86_64.rpm.sha256
325
- sha256sum -c pythinker-code-0.50.0.x86_64.rpm.sha256
327
+ curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.51.0/pythinker-code-0.51.0.x86_64.rpm
328
+ curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.51.0/pythinker-code-0.51.0.x86_64.rpm.sha256
329
+ sha256sum -c pythinker-code-0.51.0.x86_64.rpm.sha256
326
330
  # Fedora / RHEL:
327
- sudo dnf install ./pythinker-code-0.50.0.x86_64.rpm
331
+ sudo dnf install ./pythinker-code-0.51.0.x86_64.rpm
328
332
  # openSUSE:
329
- sudo zypper install ./pythinker-code-0.50.0.x86_64.rpm
333
+ sudo zypper install ./pythinker-code-0.51.0.x86_64.rpm
330
334
 
331
335
  # Fedora / RHEL (aarch64)
332
- curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.50.0/pythinker-code-0.50.0.aarch64.rpm
333
- curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.50.0/pythinker-code-0.50.0.aarch64.rpm.sha256
334
- sha256sum -c pythinker-code-0.50.0.aarch64.rpm.sha256
335
- sudo dnf install ./pythinker-code-0.50.0.aarch64.rpm
336
+ curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.51.0/pythinker-code-0.51.0.aarch64.rpm
337
+ curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.51.0/pythinker-code-0.51.0.aarch64.rpm.sha256
338
+ sha256sum -c pythinker-code-0.51.0.aarch64.rpm.sha256
339
+ sudo dnf install ./pythinker-code-0.51.0.aarch64.rpm
336
340
  ```
337
341
 
338
342
  Both packages drop a small `/usr/bin/pythinker` launcher that execs the real
@@ -341,8 +345,8 @@ binary under `/usr/lib/pythinker/`, so your `$PATH` stays tidy.
341
345
  **Verify before install:**
342
346
 
343
347
  ```sh
344
- sha256sum -c pythinker-code_0.50.0_amd64.deb.sha256 # Debian/Ubuntu
345
- sha256sum -c pythinker-code-0.50.0.x86_64.rpm.sha256 # Fedora/RHEL
348
+ sha256sum -c pythinker-code_0.51.0_amd64.deb.sha256 # Debian/Ubuntu
349
+ sha256sum -c pythinker-code-0.51.0.x86_64.rpm.sha256 # Fedora/RHEL
346
350
  ```
347
351
 
348
352
  **Upgrade:** download the new `.deb`/`.rpm` from Releases and `dpkg -i` /
@@ -50,12 +50,16 @@ It speaks the [**Agent Client Protocol (ACP)**](https://github.com/agentclientpr
50
50
 
51
51
  ---
52
52
 
53
- ## 🆕 What's New in 0.50.0
53
+ ## 🆕 What's New in 0.51.0
54
54
 
55
- - **Safer silent updates.** The downloaded build is now staged beside the running executable and promoted at exit, instead of overwriting the live onefile bundle in place eliminating mid-session `zlib: incorrect header check` crashes after a background update.
56
- - **Cleaner update notice.** The "Updated vX. Restart to apply." line renders below the prompt's bottom border, not inside the input area.
55
+ - **Model-aware thinking levels.** The thinking selector and Shift+Tab cycle now scope reasoning effort to what the active GPT-5-family model accepts; unsupported persisted levels are clamped before the API call.
56
+ - **Cleaner diff cards.** Diff syntax highlighting no longer paints an opaque code-theme background over green/red row tints tints show through on every terminal.
57
+ - **Truecolor in VS Code terminals.** Integrated terminals reporting `TERM_PROGRAM=vscode` (and forks) are promoted to truecolor so diff tints don't fall back to 16-color mode.
58
+ - **No duplicate welcome banner on reload.** Same-session reloads (`/model`, `/theme`, `/thinking`, …) keep the existing banner instead of stacking a second splash.
59
+ - **Update notice moved to footer.** The persistent "Restart to apply" / "Update available" line renders below the status/clock row, clear of the input box.
60
+ - **Safer Homebrew self-upgrades.** Silent `brew upgrade` runs with cleanup/auto-update disabled so the in-use Cellar version isn't deleted mid-session.
57
61
 
58
- Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.50.0`, or use the native installer for your platform from the [Releases page](https://github.com/Pythoughts-labs/pythinker-code/releases/latest).
62
+ Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.51.0`, or use the native installer for your platform from the [Releases page](https://github.com/Pythoughts-labs/pythinker-code/releases/latest).
59
63
 
60
64
 
61
65
  ---
@@ -145,7 +149,7 @@ matches your OS — no Python, Node, or `uv` prerequisite.
145
149
 
146
150
  | Platform | Recommended install | Artifact source |
147
151
  |---|---|---|
148
- | **🪟 Windows** | `irm https://pythinker.com/install.ps1 \| iex` | `PythinkerSetup-0.50.0.exe` from [Releases](https://github.com/Pythoughts-labs/pythinker-code/releases/latest) |
152
+ | **🪟 Windows** | `irm https://pythinker.com/install.ps1 \| iex` | `PythinkerSetup-0.51.0.exe` from [Releases](https://github.com/Pythoughts-labs/pythinker-code/releases/latest) |
149
153
  | **<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) |
150
154
  | **<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 |
151
155
  | **🐳 Docker** | `docker run --rm -it ghcr.io/pythoughts-labs/pythinker-code` | GHCR multi-arch image |
@@ -173,7 +177,7 @@ pythinker # start the interactive TUI
173
177
 
174
178
  ### 🪟 Windows — native installer
175
179
 
176
- `PythinkerSetup-0.50.0.exe` is a signed* Inno Setup wizard. Installs per-user
180
+ `PythinkerSetup-0.51.0.exe` is a signed* Inno Setup wizard. Installs per-user
177
181
  into `%LOCALAPPDATA%\Programs\Pythinker`, registers `pythinker` on your user
178
182
  PATH (`HKCU\Environment`), broadcasts `WM_SETTINGCHANGE` so new shells see
179
183
  the change. **No UAC prompt.**
@@ -184,13 +188,13 @@ irm https://pythinker.com/install.ps1 | iex
184
188
 
185
189
  # Or manually download the installer + checksum from the Releases page,
186
190
  # verify with Get-FileHash, then run:
187
- .\PythinkerSetup-0.50.0.exe
191
+ .\PythinkerSetup-0.51.0.exe
188
192
 
189
193
  # Open a fresh PowerShell
190
194
  pythinker --version
191
195
  ```
192
196
 
193
- **Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.50.0.exe /ALLUSERS`
197
+ **Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.51.0.exe /ALLUSERS`
194
198
  installs to `%ProgramFiles%\Pythinker` and writes PATH to HKLM (requires admin).
195
199
 
196
200
  **Upgrade:** `pythinker update` from inside the running app — it downloads
@@ -248,26 +252,26 @@ attached to every GitHub Release.
248
252
 
249
253
  ```sh
250
254
  # Debian / Ubuntu (x86_64)
251
- sudo dpkg -i pythinker-code_0.50.0_amd64.deb
255
+ sudo dpkg -i pythinker-code_0.51.0_amd64.deb
252
256
  sudo apt-get install -f # only if dpkg reports missing deps
253
257
 
254
258
  # Debian / Ubuntu (ARM64)
255
- sudo dpkg -i pythinker-code_0.50.0_arm64.deb
259
+ sudo dpkg -i pythinker-code_0.51.0_arm64.deb
256
260
 
257
261
  # Fedora / RHEL / openSUSE (x86_64)
258
- curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.50.0/pythinker-code-0.50.0.x86_64.rpm
259
- curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.50.0/pythinker-code-0.50.0.x86_64.rpm.sha256
260
- sha256sum -c pythinker-code-0.50.0.x86_64.rpm.sha256
262
+ curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.51.0/pythinker-code-0.51.0.x86_64.rpm
263
+ curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.51.0/pythinker-code-0.51.0.x86_64.rpm.sha256
264
+ sha256sum -c pythinker-code-0.51.0.x86_64.rpm.sha256
261
265
  # Fedora / RHEL:
262
- sudo dnf install ./pythinker-code-0.50.0.x86_64.rpm
266
+ sudo dnf install ./pythinker-code-0.51.0.x86_64.rpm
263
267
  # openSUSE:
264
- sudo zypper install ./pythinker-code-0.50.0.x86_64.rpm
268
+ sudo zypper install ./pythinker-code-0.51.0.x86_64.rpm
265
269
 
266
270
  # Fedora / RHEL (aarch64)
267
- curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.50.0/pythinker-code-0.50.0.aarch64.rpm
268
- curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.50.0/pythinker-code-0.50.0.aarch64.rpm.sha256
269
- sha256sum -c pythinker-code-0.50.0.aarch64.rpm.sha256
270
- sudo dnf install ./pythinker-code-0.50.0.aarch64.rpm
271
+ curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.51.0/pythinker-code-0.51.0.aarch64.rpm
272
+ curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.51.0/pythinker-code-0.51.0.aarch64.rpm.sha256
273
+ sha256sum -c pythinker-code-0.51.0.aarch64.rpm.sha256
274
+ sudo dnf install ./pythinker-code-0.51.0.aarch64.rpm
271
275
  ```
272
276
 
273
277
  Both packages drop a small `/usr/bin/pythinker` launcher that execs the real
@@ -276,8 +280,8 @@ binary under `/usr/lib/pythinker/`, so your `$PATH` stays tidy.
276
280
  **Verify before install:**
277
281
 
278
282
  ```sh
279
- sha256sum -c pythinker-code_0.50.0_amd64.deb.sha256 # Debian/Ubuntu
280
- sha256sum -c pythinker-code-0.50.0.x86_64.rpm.sha256 # Fedora/RHEL
283
+ sha256sum -c pythinker-code_0.51.0_amd64.deb.sha256 # Debian/Ubuntu
284
+ sha256sum -c pythinker-code-0.51.0.x86_64.rpm.sha256 # Fedora/RHEL
281
285
  ```
282
286
 
283
287
  **Upgrade:** download the new `.deb`/`.rpm` from Releases and `dpkg -i` /
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "pythinker-code"
3
- version = "0.50.0"
3
+ version = "0.51.0"
4
4
  description = "Pythinker — an agentic CLI developed by Pythoughts-labs."
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.12"
@@ -15,6 +15,41 @@ GitHub Releases page; `0.8.0` is the new starting line.
15
15
 
16
16
  ## Unreleased
17
17
 
18
+ ## 0.51.0 (2026-06-22)
19
+
20
+ - **Reasoning levels now match each GPT model.** The thinking selector and
21
+ Shift+Tab cycle scope reasoning effort to what the active OpenAI GPT-5-family
22
+ model actually accepts — e.g. gpt-5.4/gpt-5.5 no longer offer `minimal`
23
+ (which they reject) and keep `xhigh`, while gpt-5.0 keeps `minimal`. A
24
+ persisted unsupported level is clamped to the nearest supported one before
25
+ it is sent, so the API never rejects it.
26
+ - **Diff cards no longer show a "blue overlay".** The syntax highlighter no
27
+ longer paints the code theme's opaque background (e.g. catppuccin `#1E1E2E`)
28
+ onto diff lines, so the green/red row tints — and the terminal background on
29
+ context lines — show through on every terminal. Previously that code-theme
30
+ block masked the row tints and only blended where the terminal background
31
+ happened to match it.
32
+ - **VS Code-family terminals are detected as truecolor.** `color_depth()` now
33
+ promotes integrated terminals reporting `TERM_PROGRAM=vscode` (including forks
34
+ built on it) to truecolor — like the existing Windows Terminal promotion — so
35
+ diff tints don't fall back to the colorless 16-color path when the terminal
36
+ doesn't advertise `COLORTERM`.
37
+ - **Model/theme switches no longer reprint the welcome banner.** A same-session
38
+ reload (`/model`, `/theme`, `/thinking`, `/new`, fork, …) now keeps the
39
+ existing banner and shows only its own "Switched to… / Reloading…"
40
+ confirmation, instead of stacking a redundant second welcome splash below it.
41
+ `/clear` and `/reload` still wipe the screen and reprint the banner.
42
+ - **Update notice no longer crowds the prompt.** The persistent "Restart to apply"
43
+ / "Update available" line now renders as the last footer row — below the
44
+ status/clock line — instead of directly under the input box, keeping the input
45
+ area clear.
46
+ - **Homebrew self-upgrades no longer risk the live session.** The updater now runs
47
+ `brew upgrade` with `HOMEBREW_NO_INSTALL_CLEANUP` and `HOMEBREW_NO_AUTO_UPDATE`,
48
+ so brew can't delete the in-use Cellar version mid-session; the new build is
49
+ staged side-by-side and goes live on restart.
50
+
51
+ Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.51.0`, or use the native installer for your platform from the [Releases page](https://github.com/Pythoughts-labs/pythinker-code/releases/latest).
52
+
18
53
  ## 0.50.0 (2026-06-20)
19
54
 
20
55
  - **Silent native updates no longer crash a running session.** The downloaded
@@ -832,7 +832,11 @@ class PythinkerCLI:
832
832
  await external_cancel_task
833
833
 
834
834
  async def run_shell(
835
- self, command: str | None = None, *, prefill_text: str | None = None
835
+ self,
836
+ command: str | None = None,
837
+ *,
838
+ prefill_text: str | None = None,
839
+ suppress_banner: bool = False,
836
840
  ) -> bool:
837
841
  """Run the Pythinker CLI instance with shell UI."""
838
842
  from pythinker_code.ui.shell import Shell, WelcomeInfoItem
@@ -953,7 +957,12 @@ class PythinkerCLI:
953
957
  )
954
958
  )
955
959
  async with self._env():
956
- shell = Shell(self._soul, welcome_info=welcome_info, prefill_text=prefill_text)
960
+ shell = Shell(
961
+ self._soul,
962
+ welcome_info=welcome_info,
963
+ prefill_text=prefill_text,
964
+ suppress_banner=suppress_banner,
965
+ )
957
966
  return await shell.run(command)
958
967
 
959
968
  async def run_print(
@@ -862,7 +862,12 @@ def pythinker(
862
862
  # exception handler can clean it up even when _run() fails before returning.
863
863
  _latest_created_session: Session | None = None
864
864
 
865
- async def _run(session_id: str | None, prefill_text: str | None = None) -> tuple[Session, int]:
865
+ async def _run(
866
+ session_id: str | None,
867
+ prefill_text: str | None = None,
868
+ *,
869
+ suppress_banner: bool = False,
870
+ ) -> tuple[Session, int]:
866
871
  """
867
872
  Create/load session and run the CLI instance.
868
873
 
@@ -1056,7 +1061,11 @@ def pythinker(
1056
1061
  try:
1057
1062
  match ui:
1058
1063
  case "shell":
1059
- shell_ok = await instance.run_shell(prompt, prefill_text=prefill_text)
1064
+ shell_ok = await instance.run_shell(
1065
+ prompt,
1066
+ prefill_text=prefill_text,
1067
+ suppress_banner=suppress_banner,
1068
+ )
1060
1069
  exit_code = ExitCode.SUCCESS if shell_ok else ExitCode.FAILURE
1061
1070
  case "print":
1062
1071
  exit_code = await instance.run_print(
@@ -1190,10 +1199,15 @@ def pythinker(
1190
1199
  """
1191
1200
  last_session: Session | None = None
1192
1201
  prefill_text: str | None = None
1202
+ suppress_banner = False
1193
1203
  try:
1194
1204
  while True:
1195
1205
  try:
1196
- last_session, exit_code = await _run(session_id, prefill_text=prefill_text)
1206
+ last_session, exit_code = await _run(
1207
+ session_id,
1208
+ prefill_text=prefill_text,
1209
+ suppress_banner=suppress_banner,
1210
+ )
1197
1211
  break
1198
1212
  except Reload as e:
1199
1213
  if e.clear_screen:
@@ -1220,6 +1234,10 @@ def pythinker(
1220
1234
  _print_resume_hint(old)
1221
1235
  session_id = e.session_id
1222
1236
  prefill_text = e.prefill_text
1237
+ # A non-clearing reload (/model, /theme, /new, fork, …) leaves
1238
+ # the previous banner on screen, so skip reprinting the splash.
1239
+ # /clear and /reload wiped the screen above and want it back.
1240
+ suppress_banner = not e.clear_screen
1223
1241
  continue
1224
1242
  except SwitchToWeb as e:
1225
1243
  # The web worker subprocess becomes the session's writer.
@@ -3,6 +3,8 @@ from __future__ import annotations
3
3
  import contextlib
4
4
  import json
5
5
  import os
6
+ import re
7
+ from collections.abc import Collection
6
8
  from dataclasses import dataclass
7
9
  from pathlib import Path
8
10
  from typing import TYPE_CHECKING, Any, Literal, cast, get_args
@@ -12,7 +14,9 @@ from pythinker_core.chat_provider import ChatProvider, ThinkingEffort
12
14
  from pythinker_code.constant import USER_AGENT
13
15
  from pythinker_code.thinking import (
14
16
  DEFAULT_THINKING_EFFORT,
17
+ available_thinking_levels,
15
18
  bool_to_thinking_effort,
19
+ clamp_thinking_effort,
16
20
  normalize_thinking_effort,
17
21
  thinking_effort_enabled,
18
22
  )
@@ -457,7 +461,15 @@ def create_llm(
457
461
  else DEFAULT_THINKING_EFFORT
458
462
  )
459
463
  elif supports_thinking:
460
- effective_effort = requested_effort
464
+ # Clamp to the model's actually-supported levels so a persisted effort
465
+ # the model rejects (e.g. ``minimal`` on gpt-5.4/5.5) is never sent.
466
+ effective_effort = (
467
+ clamp_thinking_effort(
468
+ requested_effort, available_model_thinking_levels(model, capabilities)
469
+ )
470
+ if requested_effort is not None
471
+ else None
472
+ )
461
473
  else:
462
474
  # Clamp to the model's supported levels: non-reasoning models have
463
475
  # only the off level, so explicit non-off requests become off instead of
@@ -594,6 +606,55 @@ def derive_model_capabilities(model: LLMModel) -> set[ModelCapability]:
594
606
  return capabilities
595
607
 
596
608
 
609
+ _GPT5_REASONING_RE = re.compile(r"gpt-5(?:\.(\d+))?", re.IGNORECASE)
610
+
611
+
612
+ def openai_gpt_reasoning_levels(model_id: str) -> tuple[ThinkingEffort, ...] | None:
613
+ """Reasoning-effort levels an OpenAI GPT-5-family model actually accepts.
614
+
615
+ OpenAI's ``reasoning_effort`` set is model-dependent and has drifted across
616
+ the GPT-5 line, so the provider-neutral ladder over-offers levels a given
617
+ model rejects (e.g. ``minimal`` on gpt-5.4/5.5). Returns the supported
618
+ levels low->high including ``off`` (OpenAI ``none``), or ``None`` when
619
+ *model_id* is not a recognized GPT-5 reasoning model.
620
+
621
+ Matrix (OpenAI docs):
622
+
623
+ * ``5.0`` -> minimal, low, medium, high
624
+ * ``5.1`` / ``5.2`` / ``5.3`` -> low, medium, high (``minimal`` replaced by ``none``)
625
+ * ``5.1-codex-max``, ``5.4+`` -> low, medium, high, xhigh (``minimal`` dropped)
626
+ """
627
+ match = _GPT5_REASONING_RE.search(model_id)
628
+ if match is None:
629
+ return None
630
+ minor = int(match.group(1)) if match.group(1) else 0
631
+ if minor == 0:
632
+ return ("off", "minimal", "low", "medium", "high")
633
+ if minor >= 4 or "codex-max" in model_id.lower():
634
+ return ("off", "low", "medium", "high", "xhigh")
635
+ return ("off", "low", "medium", "high")
636
+
637
+
638
+ def available_model_thinking_levels(
639
+ model: LLMModel, capabilities: Collection[str] | None
640
+ ) -> tuple[ThinkingEffort, ...]:
641
+ """Selectable thinking levels for *model*, scoped to provider-specific support.
642
+
643
+ Starts from the capability-derived ladder, then narrows to a provider's
644
+ actually-accepted set when known (currently the OpenAI GPT-5 family) so the
645
+ selector never offers — and :func:`create_llm` never sends — a level the
646
+ model rejects. Falls back to the full ladder for models without a known
647
+ per-model rule.
648
+ """
649
+ base = available_thinking_levels(capabilities)
650
+ gpt_levels = openai_gpt_reasoning_levels(model.model)
651
+ if gpt_levels is None:
652
+ return base
653
+ allowed = set(gpt_levels)
654
+ scoped: tuple[ThinkingEffort, ...] = tuple(level for level in base if level in allowed)
655
+ return scoped or base
656
+
657
+
597
658
  def _is_kimi_k2_model(model_name: str) -> bool:
598
659
  return "kimi-k2" in model_name.lower().replace("_", "-")
599
660
 
@@ -924,7 +924,12 @@ class PythinkerSoul:
924
924
  """Selectable thinking levels for the current model."""
925
925
  if self._runtime.llm is None:
926
926
  return ("off",)
927
- return available_thinking_levels(self._runtime.llm.capabilities)
927
+ model = self._runtime.llm.model_config
928
+ if model is None:
929
+ return available_thinking_levels(self._runtime.llm.capabilities)
930
+ from pythinker_code.llm import available_model_thinking_levels
931
+
932
+ return available_model_thinking_levels(model, self._runtime.llm.capabilities)
928
933
 
929
934
  def set_thinking_effort_from_manual(self, effort: ThinkingEffort) -> ThinkingEffort | None:
930
935
  """Apply a user-selected thinking level to the live runtime.
@@ -560,10 +560,16 @@ class Shell:
560
560
  soul: Soul,
561
561
  welcome_info: list[WelcomeInfoItem] | None = None,
562
562
  prefill_text: str | None = None,
563
+ suppress_banner: bool = False,
563
564
  ):
564
565
  self.soul = soul
565
566
  self._welcome_info = list(welcome_info or [])
566
567
  self._prefill_text = prefill_text
568
+ # Skip the full welcome splash on an in-session reload (/model, /theme,
569
+ # /new, fork, …): the screen still shows the previous banner and each
570
+ # reload path prints its own "Switched to… / Reloading…" confirmation,
571
+ # so reprinting the splash just stacks a redundant copy below it.
572
+ self._suppress_banner = suppress_banner
567
573
  self._background_tasks: set[asyncio.Task[Any]] = set()
568
574
  self._prompt_session: CustomPromptSession | None = None
569
575
  # (timestamp, text) memo for the under-input update line; refreshed on a
@@ -839,11 +845,12 @@ class Shell:
839
845
  # carries the blinking "connecting" heartbeat without ever
840
846
  # blocking input.
841
847
  await self.soul.start_background_mcp_loading()
842
- _print_welcome_info(
843
- self.soul.name or "Pythinker CLI",
844
- self._welcome_info,
845
- banner=_welcome_banner_chip(),
846
- )
848
+ if not self._suppress_banner:
849
+ _print_welcome_info(
850
+ self.soul.name or "Pythinker CLI",
851
+ self._welcome_info,
852
+ banner=_welcome_banner_chip(),
853
+ )
847
854
 
848
855
  # Start telemetry periodic flush and disk retry
849
856
  from pythinker_code.telemetry import get_sink
@@ -3916,10 +3916,13 @@ class CustomPromptSession:
3916
3916
  )
3917
3917
 
3918
3918
  def _append_update_notice(self, fragments: list[tuple[str, str]], columns: int) -> None:
3919
- """Append a persistent yellow 'update available' line *below* the footer
3920
- separator, so it renders underneath the prompt input box rather than
3921
- inside it. Call this right after the separator rule. No-op when no update
3922
- is pending; style-agnostic across both toolbar layouts."""
3919
+ """Append a persistent yellow 'update available' line as the *last* footer
3920
+ row — below the status/clock line — so it sits fully clear of the prompt
3921
+ input box instead of glued to it. Call this last, after the status lines
3922
+ are assembled: it prepends its own newline (the prior footer line carries
3923
+ none) and adds no trailing newline, so it never leaves a blank row at the
3924
+ bottom. No-op when no update is pending; style-agnostic across both
3925
+ toolbar layouts."""
3923
3926
  provider = getattr(self, "_update_notice_provider", None)
3924
3927
  if provider is None:
3925
3928
  return
@@ -3931,7 +3934,7 @@ class CustomPromptSession:
3931
3934
  return
3932
3935
  tokens = _get_tui_tokens()
3933
3936
  style = f"fg:{tokens.warning or 'ansiyellow'} bold"
3934
- fragments.extend([(style, line), ("", "\n")])
3937
+ fragments.extend([("", "\n"), (style, line)])
3935
3938
 
3936
3939
  def _render_bottom_toolbar(self) -> FormattedText:
3937
3940
  if (
@@ -3957,7 +3960,6 @@ class CustomPromptSession:
3957
3960
 
3958
3961
  fragments.append((self._prompt_separator_style(tc.separator), _prompt_rule(columns)))
3959
3962
  fragments.append(("", "\n"))
3960
- self._append_update_notice(fragments, columns)
3961
3963
 
3962
3964
  remaining = columns
3963
3965
 
@@ -4077,6 +4079,7 @@ class CustomPromptSession:
4077
4079
  fragments.append(("", " " * max(0, columns - left_width - right_width)))
4078
4080
  fragments.append((secondary_style, right_text))
4079
4081
 
4082
+ self._append_update_notice(fragments, columns)
4080
4083
  return FormattedText(fragments)
4081
4084
 
4082
4085
  def _build_statusline_context(self, columns: int) -> StatusLineContext:
@@ -4188,7 +4191,6 @@ class CustomPromptSession:
4188
4191
  fragments: list[tuple[str, str]] = []
4189
4192
  fragments.append((self._prompt_separator_style(tc.separator), _prompt_rule(columns)))
4190
4193
  fragments.append(("", "\n"))
4191
- self._append_update_notice(fragments, columns)
4192
4194
 
4193
4195
  try:
4194
4196
  ctx = self._build_statusline_context(columns)
@@ -4251,6 +4253,7 @@ class CustomPromptSession:
4251
4253
 
4252
4254
  fragments.append(("", " " * max(0, usable - left_width - right_width)))
4253
4255
  fragments.extend(line2_right)
4256
+ self._append_update_notice(fragments, columns)
4254
4257
  return FormattedText(fragments)
4255
4258
 
4256
4259
  def _get_two_rotating_tips(self) -> str | None:
@@ -303,11 +303,12 @@ async def model(app: Shell, args: str):
303
303
 
304
304
  # Step 2: Determine thinking effort
305
305
  capabilities = derive_model_capabilities(selected_model_cfg)
306
- from pythinker_code.thinking import available_thinking_levels, clamp_thinking_effort
306
+ from pythinker_code.llm import available_model_thinking_levels
307
+ from pythinker_code.thinking import clamp_thinking_effort
307
308
  from pythinker_code.ui.shell.selectors.thinking import ThinkingLevel, run_thinking_selector
308
309
 
309
310
  native_thinking = model_uses_native_thinking(capabilities)
310
- available_efforts = available_thinking_levels(capabilities)
311
+ available_efforts = available_model_thinking_levels(selected_model_cfg, capabilities)
311
312
  if native_thinking or available_efforts == ("off",):
312
313
  new_effort = "off"
313
314
  else:
@@ -1224,7 +1225,6 @@ async def thinking(app: Shell, args: str) -> None:
1224
1225
  return
1225
1226
 
1226
1227
  from pythinker_code.thinking import (
1227
- available_thinking_levels,
1228
1228
  clamp_thinking_effort,
1229
1229
  model_uses_native_thinking,
1230
1230
  )
@@ -1237,7 +1237,8 @@ async def thinking(app: Shell, args: str) -> None:
1237
1237
  console.print(f"[{_t_think.error}]LLM is not set.[/]")
1238
1238
  return
1239
1239
  capabilities = soul.runtime.llm.capabilities
1240
- available_efforts = available_thinking_levels(capabilities)
1240
+ # Model-aware levels (scopes e.g. gpt-5.4/5.5 away from unsupported 'minimal').
1241
+ available_efforts = soul.available_thinking_efforts()
1241
1242
  if available_efforts == ("off",):
1242
1243
  if model_uses_native_thinking(capabilities):
1243
1244
  console.print(
@@ -1262,6 +1262,20 @@ def _run_upgrade_command(
1262
1262
  if print_output:
1263
1263
  console.print(text, markup=False)
1264
1264
 
1265
+ env = get_clean_env()
1266
+ if command[:1] == ["brew"]:
1267
+ # Self-upgrade hardening: pythinker is the running Homebrew formula.
1268
+ # `brew upgrade` installs the new version side-by-side, but its
1269
+ # post-upgrade cleanup would delete the in-use old Cellar version that
1270
+ # `sys.executable` resolves through — crashing the live session before the
1271
+ # user restarts. Suppress cleanup so the swap only takes effect on the next
1272
+ # launch (matching the "Restart to apply" notice). Also skip brew's
1273
+ # implicit pre-command auto-update: `_refresh_brew_metadata` already
1274
+ # refreshed the tap explicitly, so the implicit pass is only redundant
1275
+ # network/lock work during the user's session.
1276
+ env["HOMEBREW_NO_INSTALL_CLEANUP"] = "1"
1277
+ env["HOMEBREW_NO_AUTO_UPDATE"] = "1"
1278
+
1265
1279
  proc = subprocess.Popen(
1266
1280
  command,
1267
1281
  stdout=subprocess.PIPE,
@@ -1269,7 +1283,7 @@ def _run_upgrade_command(
1269
1283
  text=True,
1270
1284
  encoding="utf-8",
1271
1285
  errors="replace",
1272
- env=get_clean_env(),
1286
+ env=env,
1273
1287
  bufsize=1,
1274
1288
  )
1275
1289