pythinker-code 0.8.0__tar.gz → 0.9.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 (795) hide show
  1. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/PKG-INFO +9 -11
  2. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/README.md +8 -10
  3. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/pyproject.toml +7 -1
  4. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/CHANGELOG.md +38 -6
  5. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/app.py +32 -4
  6. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/ui/shell/__init__.py +4 -0
  7. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/ui/shell/components/bash_execution.py +15 -2
  8. pythinker_code-0.9.0/src/pythinker_code/ui/shell/components/markdown.py +233 -0
  9. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/ui/shell/components/messages.py +5 -5
  10. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/ui/shell/components/tool_execution.py +37 -12
  11. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/ui/theme.py +75 -0
  12. pythinker_code-0.8.0/src/pythinker_code/web/static/assets/_baseUniq-DpSMr1jx.js → pythinker_code-0.9.0/src/pythinker_code/web/static/assets/_baseUniq-CLYo-eYc.js +1 -1
  13. pythinker_code-0.8.0/src/pythinker_code/web/static/assets/arc-DpsahJyV.js → pythinker_code-0.9.0/src/pythinker_code/web/static/assets/arc-mC4g2zfg.js +1 -1
  14. pythinker_code-0.8.0/src/pythinker_code/web/static/assets/architectureDiagram-VXUJARFQ-DqiRv9Eg.js → pythinker_code-0.9.0/src/pythinker_code/web/static/assets/architectureDiagram-VXUJARFQ-FmgnYRJb.js +1 -1
  15. pythinker_code-0.8.0/src/pythinker_code/web/static/assets/blockDiagram-VD42YOAC-WgtUvqbp.js → pythinker_code-0.9.0/src/pythinker_code/web/static/assets/blockDiagram-VD42YOAC-C0qpB9e0.js +1 -1
  16. pythinker_code-0.8.0/src/pythinker_code/web/static/assets/c4Diagram-YG6GDRKO-rK0RPuZd.js → pythinker_code-0.9.0/src/pythinker_code/web/static/assets/c4Diagram-YG6GDRKO-ByVx8Ywn.js +1 -1
  17. pythinker_code-0.9.0/src/pythinker_code/web/static/assets/channel-tCyj3CPG.js +1 -0
  18. pythinker_code-0.8.0/src/pythinker_code/web/static/assets/chunk-4BX2VUAB-DIkMuLV-.js → pythinker_code-0.9.0/src/pythinker_code/web/static/assets/chunk-4BX2VUAB-wZ1dc8_P.js +1 -1
  19. pythinker_code-0.8.0/src/pythinker_code/web/static/assets/chunk-55IACEB6-CORdm4k4.js → pythinker_code-0.9.0/src/pythinker_code/web/static/assets/chunk-55IACEB6-ylcVoZDW.js +1 -1
  20. pythinker_code-0.8.0/src/pythinker_code/web/static/assets/chunk-B4BG7PRW-D9xDhwHO.js → pythinker_code-0.9.0/src/pythinker_code/web/static/assets/chunk-B4BG7PRW-B3zDYjiB.js +1 -1
  21. pythinker_code-0.8.0/src/pythinker_code/web/static/assets/chunk-DI55MBZ5-BDmF9Bh-.js → pythinker_code-0.9.0/src/pythinker_code/web/static/assets/chunk-DI55MBZ5-Byycj1Wy.js +1 -1
  22. pythinker_code-0.8.0/src/pythinker_code/web/static/assets/chunk-FMBD7UC4-BCse_HmM.js → pythinker_code-0.9.0/src/pythinker_code/web/static/assets/chunk-FMBD7UC4-Cgro0Pqg.js +1 -1
  23. pythinker_code-0.8.0/src/pythinker_code/web/static/assets/chunk-QN33PNHL-DCpBmTzA.js → pythinker_code-0.9.0/src/pythinker_code/web/static/assets/chunk-QN33PNHL-BdU7uRdS.js +1 -1
  24. pythinker_code-0.8.0/src/pythinker_code/web/static/assets/chunk-QZHKN3VN-BqLuqobw.js → pythinker_code-0.9.0/src/pythinker_code/web/static/assets/chunk-QZHKN3VN-qD4PdXAn.js +1 -1
  25. pythinker_code-0.8.0/src/pythinker_code/web/static/assets/chunk-TZMSLE5B-8K2ogOKS.js → pythinker_code-0.9.0/src/pythinker_code/web/static/assets/chunk-TZMSLE5B-BqnSmzp_.js +1 -1
  26. pythinker_code-0.9.0/src/pythinker_code/web/static/assets/classDiagram-2ON5EDUG-OEjNCjm2.js +1 -0
  27. pythinker_code-0.9.0/src/pythinker_code/web/static/assets/classDiagram-v2-WZHVMYZB-OEjNCjm2.js +1 -0
  28. pythinker_code-0.9.0/src/pythinker_code/web/static/assets/clone-Dz5N6JGI.js +1 -0
  29. pythinker_code-0.8.0/src/pythinker_code/web/static/assets/code-block-IT6T5CEO-DWTFYA28.js → pythinker_code-0.9.0/src/pythinker_code/web/static/assets/code-block-IT6T5CEO-D-cRJHCv.js +1 -1
  30. pythinker_code-0.8.0/src/pythinker_code/web/static/assets/cose-bilkent-S5V4N54A-BRI7ES-N.js → pythinker_code-0.9.0/src/pythinker_code/web/static/assets/cose-bilkent-S5V4N54A-DWFwWp_z.js +1 -1
  31. pythinker_code-0.8.0/src/pythinker_code/web/static/assets/cytoscape.esm-B6BxUuKW.js → pythinker_code-0.9.0/src/pythinker_code/web/static/assets/cytoscape.esm-u8DpDuAe.js +1 -1
  32. pythinker_code-0.8.0/src/pythinker_code/web/static/assets/dagre-6UL2VRFP-Ci5GdWfi.js → pythinker_code-0.9.0/src/pythinker_code/web/static/assets/dagre-6UL2VRFP-CSPpX_7_.js +1 -1
  33. pythinker_code-0.8.0/src/pythinker_code/web/static/assets/diagram-PSM6KHXK-0hhAylV4.js → pythinker_code-0.9.0/src/pythinker_code/web/static/assets/diagram-PSM6KHXK-DUq5-xrG.js +1 -1
  34. pythinker_code-0.8.0/src/pythinker_code/web/static/assets/diagram-QEK2KX5R-8fxgaW6d.js → pythinker_code-0.9.0/src/pythinker_code/web/static/assets/diagram-QEK2KX5R-kzcEBaU4.js +1 -1
  35. pythinker_code-0.8.0/src/pythinker_code/web/static/assets/diagram-S2PKOQOG-FRr0_atE.js → pythinker_code-0.9.0/src/pythinker_code/web/static/assets/diagram-S2PKOQOG-7geS4IkB.js +1 -1
  36. pythinker_code-0.8.0/src/pythinker_code/web/static/assets/erDiagram-Q2GNP2WA-B3T-hJUM.js → pythinker_code-0.9.0/src/pythinker_code/web/static/assets/erDiagram-Q2GNP2WA-zVuDNqu7.js +1 -1
  37. pythinker_code-0.8.0/src/pythinker_code/web/static/assets/flowDiagram-NV44I4VS-D0S3u7ot.js → pythinker_code-0.9.0/src/pythinker_code/web/static/assets/flowDiagram-NV44I4VS-DG_-c07q.js +1 -1
  38. pythinker_code-0.8.0/src/pythinker_code/web/static/assets/ganttDiagram-JELNMOA3-CHrN2a23.js → pythinker_code-0.9.0/src/pythinker_code/web/static/assets/ganttDiagram-JELNMOA3-MSVeqymQ.js +1 -1
  39. pythinker_code-0.8.0/src/pythinker_code/web/static/assets/gitGraphDiagram-NY62KEGX-CfcXZWg0.js → pythinker_code-0.9.0/src/pythinker_code/web/static/assets/gitGraphDiagram-NY62KEGX-BlbwPpDQ.js +1 -1
  40. pythinker_code-0.8.0/src/pythinker_code/web/static/assets/graph-8jMJwCqE.js → pythinker_code-0.9.0/src/pythinker_code/web/static/assets/graph-BbW0SHBo.js +1 -1
  41. pythinker_code-0.8.0/src/pythinker_code/web/static/assets/index-BrfQJnRD.js → pythinker_code-0.9.0/src/pythinker_code/web/static/assets/index-3X9fT2mZ.js +1 -1
  42. pythinker_code-0.8.0/src/pythinker_code/web/static/assets/index-C4gFzubz.js → pythinker_code-0.9.0/src/pythinker_code/web/static/assets/index-CRxnqkbf.js +2 -2
  43. pythinker_code-0.8.0/src/pythinker_code/web/static/assets/index-BXrFnzMy.js → pythinker_code-0.9.0/src/pythinker_code/web/static/assets/index-E_AGlbef.js +1 -1
  44. pythinker_code-0.8.0/src/pythinker_code/web/static/assets/infoDiagram-WHAUD3N6-DdxonBf3.js → pythinker_code-0.9.0/src/pythinker_code/web/static/assets/infoDiagram-WHAUD3N6-B0KZTmoa.js +1 -1
  45. pythinker_code-0.8.0/src/pythinker_code/web/static/assets/journeyDiagram-XKPGCS4Q-BXf4aQei.js → pythinker_code-0.9.0/src/pythinker_code/web/static/assets/journeyDiagram-XKPGCS4Q-BvlOjkBR.js +1 -1
  46. pythinker_code-0.8.0/src/pythinker_code/web/static/assets/kanban-definition-3W4ZIXB7-DLpPPOu8.js → pythinker_code-0.9.0/src/pythinker_code/web/static/assets/kanban-definition-3W4ZIXB7-B8ybpTIE.js +1 -1
  47. pythinker_code-0.8.0/src/pythinker_code/web/static/assets/layout-DH73UoAH.js → pythinker_code-0.9.0/src/pythinker_code/web/static/assets/layout-D_Rax6Qq.js +1 -1
  48. pythinker_code-0.8.0/src/pythinker_code/web/static/assets/linear-bAer2-sK.js → pythinker_code-0.9.0/src/pythinker_code/web/static/assets/linear-Cs4yIP8t.js +1 -1
  49. pythinker_code-0.8.0/src/pythinker_code/web/static/assets/mermaid-VLURNSYL-CuqbwKXv.js → pythinker_code-0.9.0/src/pythinker_code/web/static/assets/mermaid-VLURNSYL-CFV6Atto.js +7 -7
  50. pythinker_code-0.8.0/src/pythinker_code/web/static/assets/mermaid.core-Nx-rTKiV.js → pythinker_code-0.9.0/src/pythinker_code/web/static/assets/mermaid.core-BY0ELBvq.js +5 -5
  51. pythinker_code-0.8.0/src/pythinker_code/web/static/assets/min-DbfD8Ywu.js → pythinker_code-0.9.0/src/pythinker_code/web/static/assets/min-Bs8jBXMW.js +1 -1
  52. pythinker_code-0.8.0/src/pythinker_code/web/static/assets/mindmap-definition-VGOIOE7T-C6l761Ue.js → pythinker_code-0.9.0/src/pythinker_code/web/static/assets/mindmap-definition-VGOIOE7T-Cg3rLEXy.js +1 -1
  53. pythinker_code-0.8.0/src/pythinker_code/web/static/assets/pieDiagram-ADFJNKIX-fNg41mT9.js → pythinker_code-0.9.0/src/pythinker_code/web/static/assets/pieDiagram-ADFJNKIX-DwQ97SEk.js +1 -1
  54. pythinker_code-0.8.0/src/pythinker_code/web/static/assets/quadrantDiagram-AYHSOK5B-DJz3Kx87.js → pythinker_code-0.9.0/src/pythinker_code/web/static/assets/quadrantDiagram-AYHSOK5B-D-pKdvp1.js +1 -1
  55. pythinker_code-0.8.0/src/pythinker_code/web/static/assets/requirementDiagram-UZGBJVZJ-B4SbrfE9.js → pythinker_code-0.9.0/src/pythinker_code/web/static/assets/requirementDiagram-UZGBJVZJ-M7yGkeOP.js +1 -1
  56. pythinker_code-0.8.0/src/pythinker_code/web/static/assets/sankeyDiagram-TZEHDZUN-CoSUjLAG.js → pythinker_code-0.9.0/src/pythinker_code/web/static/assets/sankeyDiagram-TZEHDZUN-VXTqg5Sd.js +1 -1
  57. pythinker_code-0.8.0/src/pythinker_code/web/static/assets/sequenceDiagram-WL72ISMW-PjhBNHi3.js → pythinker_code-0.9.0/src/pythinker_code/web/static/assets/sequenceDiagram-WL72ISMW-BjVjf4_O.js +1 -1
  58. pythinker_code-0.8.0/src/pythinker_code/web/static/assets/stateDiagram-FKZM4ZOC-DOwESt8-.js → pythinker_code-0.9.0/src/pythinker_code/web/static/assets/stateDiagram-FKZM4ZOC-BUkn1DGi.js +1 -1
  59. pythinker_code-0.9.0/src/pythinker_code/web/static/assets/stateDiagram-v2-4FDKWEC3-CWssh2Re.js +1 -0
  60. pythinker_code-0.8.0/src/pythinker_code/web/static/assets/timeline-definition-IT6M3QCI-CkCLnAgi.js → pythinker_code-0.9.0/src/pythinker_code/web/static/assets/timeline-definition-IT6M3QCI-D58FWsX4.js +1 -1
  61. pythinker_code-0.8.0/src/pythinker_code/web/static/assets/treemap-KMMF4GRG-CZS5XwTf.js → pythinker_code-0.9.0/src/pythinker_code/web/static/assets/treemap-KMMF4GRG-ky_39j1t.js +1 -1
  62. pythinker_code-0.8.0/src/pythinker_code/web/static/assets/xychartDiagram-PRI3JC2R-DkqqHNLh.js → pythinker_code-0.9.0/src/pythinker_code/web/static/assets/xychartDiagram-PRI3JC2R-DXAaaG9C.js +1 -1
  63. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/index.html +1 -1
  64. pythinker_code-0.8.0/src/pythinker_code/web/static/assets/channel-B0rlvkH-.js +0 -1
  65. pythinker_code-0.8.0/src/pythinker_code/web/static/assets/classDiagram-2ON5EDUG-D_ZHSii2.js +0 -1
  66. pythinker_code-0.8.0/src/pythinker_code/web/static/assets/classDiagram-v2-WZHVMYZB-D_ZHSii2.js +0 -1
  67. pythinker_code-0.8.0/src/pythinker_code/web/static/assets/clone-GSXejyY1.js +0 -1
  68. pythinker_code-0.8.0/src/pythinker_code/web/static/assets/stateDiagram-v2-4FDKWEC3-yl3OHWiP.js +0 -1
  69. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/LICENSE +0 -0
  70. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/NOTICE +0 -0
  71. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/__init__.py +0 -0
  72. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/__main__.py +0 -0
  73. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/acp/AGENTS.md +0 -0
  74. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/acp/__init__.py +0 -0
  75. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/acp/convert.py +0 -0
  76. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/acp/host.py +0 -0
  77. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/acp/mcp.py +0 -0
  78. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/acp/server.py +0 -0
  79. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/acp/session.py +0 -0
  80. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/acp/tools.py +0 -0
  81. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/acp/types.py +0 -0
  82. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/acp/version.py +0 -0
  83. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/agents/default/agent.yaml +0 -0
  84. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/agents/default/code_reviewer.yaml +0 -0
  85. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/agents/default/coder.yaml +0 -0
  86. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/agents/default/debugger.yaml +0 -0
  87. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/agents/default/explore.yaml +0 -0
  88. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/agents/default/implementer.yaml +0 -0
  89. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/agents/default/plan.yaml +0 -0
  90. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/agents/default/review.yaml +0 -0
  91. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/agents/default/security_reviewer.yaml +0 -0
  92. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/agents/default/system.md +0 -0
  93. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/agents/default/verifier.yaml +0 -0
  94. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/agents/okabe/agent.yaml +0 -0
  95. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/agentspec.py +0 -0
  96. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/approval_runtime/__init__.py +0 -0
  97. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/approval_runtime/models.py +0 -0
  98. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/approval_runtime/runtime.py +0 -0
  99. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/auth/__init__.py +0 -0
  100. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/auth/anthropic_direct.py +0 -0
  101. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/auth/deepseek.py +0 -0
  102. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/auth/github_feedback.py +0 -0
  103. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/auth/lm_studio.py +0 -0
  104. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/auth/minimax.py +0 -0
  105. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/auth/oauth.py +0 -0
  106. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/auth/ollama.py +0 -0
  107. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/auth/openai.py +0 -0
  108. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/auth/opencode_go.py +0 -0
  109. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/auth/openrouter.py +0 -0
  110. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/auth/platforms.py +0 -0
  111. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/background/__init__.py +0 -0
  112. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/background/agent_runner.py +0 -0
  113. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/background/ids.py +0 -0
  114. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/background/manager.py +0 -0
  115. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/background/models.py +0 -0
  116. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/background/store.py +0 -0
  117. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/background/summary.py +0 -0
  118. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/background/worker.py +0 -0
  119. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/cli/__init__.py +0 -0
  120. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/cli/__main__.py +0 -0
  121. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/cli/_lazy_group.py +0 -0
  122. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/cli/debug.py +0 -0
  123. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/cli/export.py +0 -0
  124. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/cli/info.py +0 -0
  125. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/cli/mcp.py +0 -0
  126. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/cli/plugin.py +0 -0
  127. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/cli/review.py +0 -0
  128. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/cli/secscan.py +0 -0
  129. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/cli/security_scan.py +0 -0
  130. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/cli/toad.py +0 -0
  131. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/cli/update.py +0 -0
  132. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/cli/vis.py +0 -0
  133. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/cli/web.py +0 -0
  134. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/config.py +0 -0
  135. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/constant.py +0 -0
  136. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/events.py +0 -0
  137. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/exception.py +0 -0
  138. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/extensions.py +0 -0
  139. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/hooks/__init__.py +0 -0
  140. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/hooks/config.py +0 -0
  141. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/hooks/engine.py +0 -0
  142. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/hooks/events.py +0 -0
  143. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/hooks/runner.py +0 -0
  144. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/llm.py +0 -0
  145. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/metadata.py +0 -0
  146. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/notifications/__init__.py +0 -0
  147. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/notifications/llm.py +0 -0
  148. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/notifications/manager.py +0 -0
  149. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/notifications/models.py +0 -0
  150. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/notifications/notifier.py +0 -0
  151. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/notifications/store.py +0 -0
  152. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/notifications/wire.py +0 -0
  153. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/plugin/__init__.py +0 -0
  154. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/plugin/manager.py +0 -0
  155. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/plugin/tool.py +0 -0
  156. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/prompt_templates.py +0 -0
  157. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/prompts/__init__.py +0 -0
  158. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/prompts/compact.md +0 -0
  159. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/prompts/init.md +0 -0
  160. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/py.typed +0 -0
  161. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/session.py +0 -0
  162. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/session_fork.py +0 -0
  163. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/session_state.py +0 -0
  164. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/share.py +0 -0
  165. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/skill/__init__.py +0 -0
  166. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/skill/flow/__init__.py +0 -0
  167. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/skill/flow/d2.py +0 -0
  168. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/skill/flow/mermaid.py +0 -0
  169. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/skills/pythinker-code-help/SKILL.md +0 -0
  170. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/skills/skill-creator/SKILL.md +0 -0
  171. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/soul/__init__.py +0 -0
  172. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/soul/agent.py +0 -0
  173. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/soul/approval.py +0 -0
  174. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/soul/btw.py +0 -0
  175. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/soul/compaction.py +0 -0
  176. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/soul/context.py +0 -0
  177. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/soul/denwarenji.py +0 -0
  178. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/soul/dynamic_injection.py +0 -0
  179. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/soul/dynamic_injections/__init__.py +0 -0
  180. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/soul/dynamic_injections/auto_mode.py +0 -0
  181. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/soul/dynamic_injections/plan_mode.py +0 -0
  182. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/soul/message.py +0 -0
  183. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/soul/permission.py +0 -0
  184. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/soul/pythinkersoul.py +0 -0
  185. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/soul/slash.py +0 -0
  186. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/soul/toolset.py +0 -0
  187. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/subagents/__init__.py +0 -0
  188. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/subagents/builder.py +0 -0
  189. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/subagents/core.py +0 -0
  190. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/subagents/discovery.py +0 -0
  191. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/subagents/git_context.py +0 -0
  192. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/subagents/models.py +0 -0
  193. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/subagents/output.py +0 -0
  194. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/subagents/registry.py +0 -0
  195. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/subagents/runner.py +0 -0
  196. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/subagents/store.py +0 -0
  197. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/telemetry/__init__.py +0 -0
  198. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/telemetry/config.py +0 -0
  199. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/telemetry/crash.py +0 -0
  200. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/telemetry/errors.py +0 -0
  201. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/telemetry/metrics.py +0 -0
  202. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/telemetry/otel.py +0 -0
  203. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/telemetry/sentry.py +0 -0
  204. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/telemetry/sink.py +0 -0
  205. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/tools/AGENTS.md +0 -0
  206. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/tools/__init__.py +0 -0
  207. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/tools/agent/__init__.py +0 -0
  208. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/tools/agent/description.md +0 -0
  209. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/tools/ask_user/__init__.py +0 -0
  210. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/tools/ask_user/description.md +0 -0
  211. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/tools/background/__init__.py +0 -0
  212. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/tools/background/list.md +0 -0
  213. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/tools/background/output.md +0 -0
  214. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/tools/background/stop.md +0 -0
  215. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/tools/display.py +0 -0
  216. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/tools/dmail/__init__.py +0 -0
  217. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/tools/dmail/dmail.md +0 -0
  218. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/tools/file/__init__.py +0 -0
  219. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/tools/file/glob.md +0 -0
  220. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/tools/file/glob.py +0 -0
  221. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/tools/file/grep.md +0 -0
  222. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/tools/file/grep_local.py +0 -0
  223. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/tools/file/plan_mode.py +0 -0
  224. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/tools/file/read.md +0 -0
  225. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/tools/file/read.py +0 -0
  226. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/tools/file/read_media.md +0 -0
  227. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/tools/file/read_media.py +0 -0
  228. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/tools/file/replace.md +0 -0
  229. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/tools/file/replace.py +0 -0
  230. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/tools/file/utils.py +0 -0
  231. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/tools/file/write.md +0 -0
  232. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/tools/file/write.py +0 -0
  233. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/tools/plan/__init__.py +0 -0
  234. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/tools/plan/description.md +0 -0
  235. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/tools/plan/enter.py +0 -0
  236. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/tools/plan/enter_description.md +0 -0
  237. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/tools/plan/handoff.py +0 -0
  238. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/tools/plan/heroes.py +0 -0
  239. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/tools/shell/__init__.py +0 -0
  240. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/tools/shell/bash.md +0 -0
  241. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/tools/shell/powershell.md +0 -0
  242. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/tools/test.py +0 -0
  243. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/tools/think/__init__.py +0 -0
  244. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/tools/think/think.md +0 -0
  245. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/tools/todo/__init__.py +0 -0
  246. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/tools/todo/set_todo_list.md +0 -0
  247. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/tools/utils.py +0 -0
  248. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/tools/web/__init__.py +0 -0
  249. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/tools/web/fetch.md +0 -0
  250. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/tools/web/fetch.py +0 -0
  251. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/tools/web/search.md +0 -0
  252. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/tools/web/search.py +0 -0
  253. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/ui/__init__.py +0 -0
  254. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/ui/acp/__init__.py +0 -0
  255. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/ui/print/__init__.py +0 -0
  256. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/ui/print/visualize.py +0 -0
  257. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/ui/shell/components/__init__.py +0 -0
  258. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/ui/shell/components/base.py +0 -0
  259. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/ui/shell/components/bordered_loader.py +0 -0
  260. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/ui/shell/components/diff.py +0 -0
  261. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/ui/shell/components/footer.py +0 -0
  262. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/ui/shell/components/key_hints.py +0 -0
  263. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/ui/shell/components/render_utils.py +0 -0
  264. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/ui/shell/components/settings_list.py +0 -0
  265. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/ui/shell/components/special_messages.py +0 -0
  266. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/ui/shell/console.py +0 -0
  267. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/ui/shell/debug.py +0 -0
  268. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/ui/shell/echo.py +0 -0
  269. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/ui/shell/export_import.py +0 -0
  270. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/ui/shell/keyboard.py +0 -0
  271. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/ui/shell/keymap.py +0 -0
  272. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/ui/shell/mcp_status.py +0 -0
  273. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/ui/shell/model_picker.py +0 -0
  274. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/ui/shell/oauth.py +0 -0
  275. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/ui/shell/placeholders.py +0 -0
  276. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/ui/shell/prompt.py +0 -0
  277. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/ui/shell/replay.py +0 -0
  278. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/ui/shell/selector.py +0 -0
  279. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/ui/shell/selectors/__init__.py +0 -0
  280. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/ui/shell/selectors/extension.py +0 -0
  281. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/ui/shell/selectors/oauth.py +0 -0
  282. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/ui/shell/selectors/settings.py +0 -0
  283. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/ui/shell/selectors/show_images.py +0 -0
  284. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/ui/shell/selectors/theme.py +0 -0
  285. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/ui/shell/selectors/thinking.py +0 -0
  286. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/ui/shell/session_picker.py +0 -0
  287. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/ui/shell/setup.py +0 -0
  288. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/ui/shell/slash.py +0 -0
  289. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/ui/shell/spinner_words.py +0 -0
  290. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/ui/shell/startup.py +0 -0
  291. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/ui/shell/task_browser.py +0 -0
  292. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/ui/shell/tool_renderers/__init__.py +0 -0
  293. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/ui/shell/tool_renderers/_render_utils.py +0 -0
  294. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/ui/shell/tool_renderers/agent.py +0 -0
  295. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/ui/shell/tool_renderers/ask_user.py +0 -0
  296. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/ui/shell/tool_renderers/background.py +0 -0
  297. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/ui/shell/tool_renderers/bash.py +0 -0
  298. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/ui/shell/tool_renderers/edit.py +0 -0
  299. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/ui/shell/tool_renderers/find.py +0 -0
  300. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/ui/shell/tool_renderers/generic.py +0 -0
  301. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/ui/shell/tool_renderers/grep.py +0 -0
  302. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/ui/shell/tool_renderers/plan.py +0 -0
  303. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/ui/shell/tool_renderers/read.py +0 -0
  304. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/ui/shell/tool_renderers/think.py +0 -0
  305. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/ui/shell/tool_renderers/todo.py +0 -0
  306. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/ui/shell/tool_renderers/web.py +0 -0
  307. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/ui/shell/tool_renderers/write.py +0 -0
  308. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/ui/shell/update.py +0 -0
  309. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/ui/shell/usage.py +0 -0
  310. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/ui/shell/usage_adapters/__init__.py +0 -0
  311. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/ui/shell/usage_adapters/anthropic_admin.py +0 -0
  312. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/ui/shell/usage_adapters/base.py +0 -0
  313. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/ui/shell/usage_adapters/deepseek.py +0 -0
  314. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/ui/shell/usage_adapters/minimax.py +0 -0
  315. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/ui/shell/usage_adapters/openai_admin.py +0 -0
  316. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/ui/shell/usage_adapters/openai_chatgpt.py +0 -0
  317. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/ui/shell/usage_adapters/opencode_go.py +0 -0
  318. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/ui/shell/usage_adapters/openrouter.py +0 -0
  319. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/ui/shell/usage_adapters/pythinker.py +0 -0
  320. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/ui/shell/usage_adapters/pythinker_ai.py +0 -0
  321. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/ui/shell/usage_render.py +0 -0
  322. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/ui/shell/visualize/__init__.py +0 -0
  323. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/ui/shell/visualize/_approval_panel.py +0 -0
  324. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/ui/shell/visualize/_blocks.py +0 -0
  325. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/ui/shell/visualize/_btw_panel.py +0 -0
  326. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/ui/shell/visualize/_input_router.py +0 -0
  327. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/ui/shell/visualize/_interactive.py +0 -0
  328. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/ui/shell/visualize/_live_view.py +0 -0
  329. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/ui/shell/visualize/_question_panel.py +0 -0
  330. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/ui/shell/visualize/_worklog.py +0 -0
  331. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/ui/tui_config.py +0 -0
  332. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/usage_ratelimit_cache.py +0 -0
  333. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/utils/__init__.py +0 -0
  334. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/utils/aiohttp.py +0 -0
  335. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/utils/aioqueue.py +0 -0
  336. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/utils/broadcast.py +0 -0
  337. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/utils/changelog.py +0 -0
  338. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/utils/clipboard.py +0 -0
  339. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/utils/datetime.py +0 -0
  340. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/utils/diff.py +0 -0
  341. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/utils/editor.py +0 -0
  342. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/utils/environment.py +0 -0
  343. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/utils/envvar.py +0 -0
  344. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/utils/export.py +0 -0
  345. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/utils/file_filter.py +0 -0
  346. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/utils/frontmatter.py +0 -0
  347. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/utils/io.py +0 -0
  348. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/utils/logging.py +0 -0
  349. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/utils/media_tags.py +0 -0
  350. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/utils/message.py +0 -0
  351. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/utils/path.py +0 -0
  352. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/utils/proctitle.py +0 -0
  353. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/utils/proxy.py +0 -0
  354. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/utils/pyinstaller.py +0 -0
  355. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/utils/rich/__init__.py +0 -0
  356. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/utils/rich/columns.py +0 -0
  357. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/utils/rich/diff_render.py +0 -0
  358. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/utils/rich/markdown.py +0 -0
  359. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/utils/rich/markdown_sample.md +0 -0
  360. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/utils/rich/markdown_sample_short.md +0 -0
  361. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/utils/rich/syntax.py +0 -0
  362. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/utils/sensitive.py +0 -0
  363. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/utils/server.py +0 -0
  364. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/utils/signals.py +0 -0
  365. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/utils/slashcmd.py +0 -0
  366. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/utils/string.py +0 -0
  367. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/utils/subprocess_env.py +0 -0
  368. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/utils/term.py +0 -0
  369. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/utils/typing.py +0 -0
  370. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/vis/__init__.py +0 -0
  371. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/vis/api/__init__.py +0 -0
  372. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/vis/api/sessions.py +0 -0
  373. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/vis/api/statistics.py +0 -0
  374. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/vis/api/system.py +0 -0
  375. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/vis/app.py +0 -0
  376. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/vis/static/assets/highlighted-body-B3W2YXNL-CY1rtwrX.js +0 -0
  377. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/vis/static/assets/index-DSRInNnm.css +0 -0
  378. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/vis/static/assets/index-DgmTI2M_.js +0 -0
  379. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/vis/static/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
  380. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/vis/static/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
  381. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/vis/static/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
  382. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/vis/static/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
  383. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/vis/static/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
  384. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/vis/static/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
  385. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/vis/static/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
  386. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/vis/static/index.html +0 -0
  387. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/__init__.py +0 -0
  388. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/api/__init__.py +0 -0
  389. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/api/config.py +0 -0
  390. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/api/open_in.py +0 -0
  391. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/api/sessions.py +0 -0
  392. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/app.py +0 -0
  393. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/auth.py +0 -0
  394. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/models.py +0 -0
  395. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/runner/__init__.py +0 -0
  396. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/runner/messages.py +0 -0
  397. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/runner/process.py +0 -0
  398. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/runner/worker.py +0 -0
  399. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  400. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  401. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  402. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  403. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  404. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  405. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  406. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  407. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  408. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  409. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  410. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  411. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  412. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  413. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  414. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  415. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  416. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  417. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  418. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  419. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  420. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  421. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  422. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  423. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  424. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  425. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  426. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  427. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  428. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  429. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  430. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  431. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  432. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  433. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  434. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  435. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  436. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  437. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  438. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  439. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  440. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  441. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  442. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  443. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  444. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  445. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  446. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  447. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  448. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  449. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  450. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  451. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  452. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  453. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  454. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  455. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  456. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  457. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  458. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/abap-BdImnpbu.js +0 -0
  459. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/actionscript-3-CfeIJUat.js +0 -0
  460. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/ada-bCR0ucgS.js +0 -0
  461. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/andromeeda-C-Jbm3Hp.js +0 -0
  462. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/angular-html-CU67Zn6k.js +0 -0
  463. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/angular-ts-BwZT4LLn.js +0 -0
  464. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/apache-Pmp26Uib.js +0 -0
  465. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/apex-D8_7TLub.js +0 -0
  466. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/apl-dKokRX4l.js +0 -0
  467. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/applescript-Co6uUVPk.js +0 -0
  468. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/ara-BRHolxvo.js +0 -0
  469. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/asciidoc-Dv7Oe6Be.js +0 -0
  470. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/asm-D_Q5rh1f.js +0 -0
  471. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/astro-CbQHKStN.js +0 -0
  472. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/aurora-x-D-2ljcwZ.js +0 -0
  473. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/awk-DMzUqQB5.js +0 -0
  474. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/ayu-dark-CmMr59Fi.js +0 -0
  475. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/ballerina-BFfxhgS-.js +0 -0
  476. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/bat-BkioyH1T.js +0 -0
  477. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/beancount-k_qm7-4y.js +0 -0
  478. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/berry-uYugtg8r.js +0 -0
  479. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/bibtex-CHM0blh-.js +0 -0
  480. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/bicep-Bmn6On1c.js +0 -0
  481. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/blade-D4QpJJKB.js +0 -0
  482. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/bsl-BO_Y6i37.js +0 -0
  483. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/c-BIGW1oBm.js +0 -0
  484. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/c3-VCDPK7BO.js +0 -0
  485. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/cadence-Bv_4Rxtq.js +0 -0
  486. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/cairo-KRGpt6FW.js +0 -0
  487. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/catppuccin-frappe-DFWUc33u.js +0 -0
  488. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/catppuccin-latte-C9dUb6Cb.js +0 -0
  489. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/catppuccin-macchiato-DQyhUUbL.js +0 -0
  490. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/catppuccin-mocha-D87Tk5Gz.js +0 -0
  491. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/clarity-D53aC0YG.js +0 -0
  492. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/clojure-P80f7IUj.js +0 -0
  493. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/cmake-D1j8_8rp.js +0 -0
  494. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/cobol-nwyudZeR.js +0 -0
  495. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/codeowners-Bp6g37R7.js +0 -0
  496. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/codeql-DsOJ9woJ.js +0 -0
  497. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/coffee-Ch7k5sss.js +0 -0
  498. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/common-lisp-Cg-RD9OK.js +0 -0
  499. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/coq-DkFqJrB1.js +0 -0
  500. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/cpp-CofmeUqb.js +0 -0
  501. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/crystal-tKQVLTB8.js +0 -0
  502. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/csharp-K5feNrxe.js +0 -0
  503. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/css-DPfMkruS.js +0 -0
  504. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/csv-fuZLfV_i.js +0 -0
  505. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/cue-D82EKSYY.js +0 -0
  506. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/cypher-COkxafJQ.js +0 -0
  507. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/d-85-TOEBH.js +0 -0
  508. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/dark-plus-C3mMm8J8.js +0 -0
  509. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/dart-CF10PKvl.js +0 -0
  510. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/dax-CEL-wOlO.js +0 -0
  511. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/defaultLocale-DX6XiGOO.js +0 -0
  512. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/desktop-BmXAJ9_W.js +0 -0
  513. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/diff-D97Zzqfu.js +0 -0
  514. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/docker-BcOcwvcX.js +0 -0
  515. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/dotenv-Da5cRb03.js +0 -0
  516. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/dracula-BzJJZx-M.js +0 -0
  517. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/dracula-soft-BXkSAIEj.js +0 -0
  518. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/dream-maker-BtqSS_iP.js +0 -0
  519. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/edge-BkV0erSs.js +0 -0
  520. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/elixir-CDX3lj18.js +0 -0
  521. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/elm-DbKCFpqz.js +0 -0
  522. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/emacs-lisp-C9XAeP06.js +0 -0
  523. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/erb-BOJIQeun.js +0 -0
  524. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/erlang-DsQrWhSR.js +0 -0
  525. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/everforest-dark-BgDCqdQA.js +0 -0
  526. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/everforest-light-C8M2exoo.js +0 -0
  527. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/fennel-BYunw83y.js +0 -0
  528. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/fish-BvzEVeQv.js +0 -0
  529. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/fluent-C4IJs8-o.js +0 -0
  530. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/fortran-fixed-form-CkoXwp7k.js +0 -0
  531. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/fortran-free-form-BxgE0vQu.js +0 -0
  532. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/fsharp-CXgrBDvD.js +0 -0
  533. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/gdresource-B7Tvp0Sc.js +0 -0
  534. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/gdscript-DTMYz4Jt.js +0 -0
  535. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/gdshader-DkwncUOv.js +0 -0
  536. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/genie-D0YGMca9.js +0 -0
  537. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/gherkin-DyxjwDmM.js +0 -0
  538. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/git-commit-F4YmCXRG.js +0 -0
  539. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/git-rebase-r7XF79zn.js +0 -0
  540. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/github-dark-DHJKELXO.js +0 -0
  541. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/github-dark-default-Cuk6v7N8.js +0 -0
  542. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/github-dark-dimmed-DH5Ifo-i.js +0 -0
  543. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/github-dark-high-contrast-E3gJ1_iC.js +0 -0
  544. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/github-light-DAi9KRSo.js +0 -0
  545. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/github-light-default-D7oLnXFd.js +0 -0
  546. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/github-light-high-contrast-BfjtVDDH.js +0 -0
  547. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/gleam-BspZqrRM.js +0 -0
  548. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/glimmer-js-Rg0-pVw9.js +0 -0
  549. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/glimmer-ts-U6CK756n.js +0 -0
  550. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/glsl-DplSGwfg.js +0 -0
  551. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/gn-n2N0HUVH.js +0 -0
  552. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/gnuplot-DdkO51Og.js +0 -0
  553. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/go-Dn2_MT6a.js +0 -0
  554. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/graphql-ChdNCCLP.js +0 -0
  555. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/groovy-gcz8RCvz.js +0 -0
  556. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/gruvbox-dark-hard-CFHQjOhq.js +0 -0
  557. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/gruvbox-dark-medium-GsRaNv29.js +0 -0
  558. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/gruvbox-dark-soft-CVdnzihN.js +0 -0
  559. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/gruvbox-light-hard-CH1njM8p.js +0 -0
  560. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/gruvbox-light-medium-DRw_LuNl.js +0 -0
  561. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/gruvbox-light-soft-hJgmCMqR.js +0 -0
  562. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/hack-CaT9iCJl.js +0 -0
  563. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/haml-B8DHNrY2.js +0 -0
  564. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/handlebars-BL8al0AC.js +0 -0
  565. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/haskell-Df6bDoY_.js +0 -0
  566. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/haxe-CzTSHFRz.js +0 -0
  567. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/hcl-BWvSN4gD.js +0 -0
  568. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/hjson-D5-asLiD.js +0 -0
  569. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/hlsl-D3lLCCz7.js +0 -0
  570. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/houston-DnULxvSX.js +0 -0
  571. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/html-GMplVEZG.js +0 -0
  572. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/html-derivative-BFtXZ54Q.js +0 -0
  573. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/http-jrhK8wxY.js +0 -0
  574. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/hurl-irOxFIW8.js +0 -0
  575. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/hxml-Bvhsp5Yf.js +0 -0
  576. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/hy-DFXneXwc.js +0 -0
  577. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/imba-DGztddWO.js +0 -0
  578. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/index-BpoLgcEt.js +0 -0
  579. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/index-CzV_vCfu.css +0 -0
  580. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/index-DI2oedCt.js +0 -0
  581. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/ini-BEwlwnbL.js +0 -0
  582. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/init-Gi6I4Gst.js +0 -0
  583. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
  584. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
  585. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
  586. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
  587. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
  588. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
  589. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
  590. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/java-CylS5w8V.js +0 -0
  591. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/javascript-wDzz0qaB.js +0 -0
  592. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/jinja-4LBKfQ-Z.js +0 -0
  593. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/jison-wvAkD_A8.js +0 -0
  594. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/json-Cp-IABpG.js +0 -0
  595. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/json5-C9tS-k6U.js +0 -0
  596. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/jsonc-Des-eS-w.js +0 -0
  597. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/jsonl-DcaNXYhu.js +0 -0
  598. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/jsonnet-DFQXde-d.js +0 -0
  599. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/jssm-C2t-YnRu.js +0 -0
  600. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/jsx-g9-lgVsj.js +0 -0
  601. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/julia-CxzCAyBv.js +0 -0
  602. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/kanagawa-dragon-CkXjmgJE.js +0 -0
  603. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/kanagawa-lotus-CfQXZHmo.js +0 -0
  604. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/kanagawa-wave-DWedfzmr.js +0 -0
  605. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/katex-D2lIc1rk.css +0 -0
  606. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/kdl-DV7GczEv.js +0 -0
  607. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/kotlin-BdnUsdx6.js +0 -0
  608. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/kusto-DZf3V79B.js +0 -0
  609. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/laserwave-DUszq2jm.js +0 -0
  610. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/latex-B4uzh10-.js +0 -0
  611. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/lean-BZvkOJ9d.js +0 -0
  612. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/less-B1dDrJ26.js +0 -0
  613. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/light-plus-B7mTdjB0.js +0 -0
  614. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/liquid-DYVedYrR.js +0 -0
  615. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/llvm-BtvRca6l.js +0 -0
  616. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/log-2UxHyX5q.js +0 -0
  617. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/logo-BtOb2qkB.js +0 -0
  618. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/lua-BbnMAYS6.js +0 -0
  619. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/luau-C-HG3fhB.js +0 -0
  620. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/make-CHLpvVh8.js +0 -0
  621. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/markdown-Cvjx9yec.js +0 -0
  622. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/marko-DZsq8hO1.js +0 -0
  623. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/material-theme-D5KoaKCx.js +0 -0
  624. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/material-theme-darker-BfHTSMKl.js +0 -0
  625. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/material-theme-lighter-B0m2ddpp.js +0 -0
  626. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/material-theme-ocean-CyktbL80.js +0 -0
  627. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/material-theme-palenight-Csfq5Kiy.js +0 -0
  628. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/matlab-D7o27uSR.js +0 -0
  629. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/mdc-DUICxH0z.js +0 -0
  630. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/mdx-Cmh6b_Ma.js +0 -0
  631. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/mermaid-VLURNSYL-B2P5VJ9v.css +0 -0
  632. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/mermaid-mWjccvbQ.js +0 -0
  633. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/min-dark-CafNBF8u.js +0 -0
  634. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/min-light-CTRr51gU.js +0 -0
  635. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/mipsasm-CKIfxQSi.js +0 -0
  636. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/mojo-B93PlW-d.js +0 -0
  637. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/monokai-D4h5O-jR.js +0 -0
  638. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/moonbit-Ba13S78F.js +0 -0
  639. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/move-Bu9oaDYs.js +0 -0
  640. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/narrat-DRg8JJMk.js +0 -0
  641. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/nextflow-BrzmwbiE.js +0 -0
  642. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/nginx-DknmC5AR.js +0 -0
  643. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/night-owl-C39BiMTA.js +0 -0
  644. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/nim-CVrawwO9.js +0 -0
  645. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/nix-CwoSXNpI.js +0 -0
  646. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/nord-Ddv68eIx.js +0 -0
  647. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/nushell-C-sUppwS.js +0 -0
  648. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/objective-c-DXmwc3jG.js +0 -0
  649. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/objective-cpp-CLxacb5B.js +0 -0
  650. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/ocaml-C0hk2d4L.js +0 -0
  651. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/one-dark-pro-DVMEJ2y_.js +0 -0
  652. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/one-light-PoHY5YXO.js +0 -0
  653. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/openscad-C4EeE6gA.js +0 -0
  654. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/ordinal-Cboi1Yqb.js +0 -0
  655. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/pascal-D93ZcfNL.js +0 -0
  656. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/perl-C0TMdlhV.js +0 -0
  657. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/php-CDn_0X-4.js +0 -0
  658. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/pkl-u5AG7uiY.js +0 -0
  659. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/plastic-3e1v2bzS.js +0 -0
  660. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/plsql-ChMvpjG-.js +0 -0
  661. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/po-BTJTHyun.js +0 -0
  662. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/poimandres-CS3Unz2-.js +0 -0
  663. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/polar-C0HS_06l.js +0 -0
  664. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/postcss-CXtECtnM.js +0 -0
  665. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/powerquery-CEu0bR-o.js +0 -0
  666. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/powershell-Dpen1YoG.js +0 -0
  667. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/prisma-Dd19v3D-.js +0 -0
  668. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/prolog-CbFg5uaA.js +0 -0
  669. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/proto-C7zT0LnQ.js +0 -0
  670. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/pug-CGlum2m_.js +0 -0
  671. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/puppet-BMWR74SV.js +0 -0
  672. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/purescript-CklMAg4u.js +0 -0
  673. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/python-B6aJPvgy.js +0 -0
  674. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/qml-3beO22l8.js +0 -0
  675. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/qmldir-C8lEn-DE.js +0 -0
  676. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/qss-IeuSbFQv.js +0 -0
  677. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/r-Dspwwk_N.js +0 -0
  678. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/racket-BqYA7rlc.js +0 -0
  679. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/raku-DXvB9xmW.js +0 -0
  680. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/razor-C1TweQQi.js +0 -0
  681. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/red-bN70gL4F.js +0 -0
  682. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/reg-C-SQnVFl.js +0 -0
  683. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/regexp-CDVJQ6XC.js +0 -0
  684. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/rel-C3B-1QV4.js +0 -0
  685. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/riscv-BM1_JUlF.js +0 -0
  686. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/rose-pine-dawn-DHQR4-dF.js +0 -0
  687. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/rose-pine-moon-D4_iv3hh.js +0 -0
  688. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/rose-pine-qdsjHGoJ.js +0 -0
  689. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/rosmsg-BJDFO7_C.js +0 -0
  690. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/rst-B0xPkSld.js +0 -0
  691. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/ruby-BvKwtOVI.js +0 -0
  692. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/rust-B1yitclQ.js +0 -0
  693. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/sas-cz2c8ADy.js +0 -0
  694. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/sass-Cj5Yp3dK.js +0 -0
  695. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/scala-C151Ov-r.js +0 -0
  696. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/scheme-C98Dy4si.js +0 -0
  697. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/scss-OYdSNvt2.js +0 -0
  698. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/sdbl-DVxCFoDh.js +0 -0
  699. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/shaderlab-Dg9Lc6iA.js +0 -0
  700. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/shellscript-Yzrsuije.js +0 -0
  701. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/shellsession-BADoaaVG.js +0 -0
  702. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/slack-dark-BthQWCQV.js +0 -0
  703. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/slack-ochin-DqwNpetd.js +0 -0
  704. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/smalltalk-BERRCDM3.js +0 -0
  705. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/snazzy-light-Bw305WKR.js +0 -0
  706. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/solarized-dark-DXbdFlpD.js +0 -0
  707. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/solarized-light-L9t79GZl.js +0 -0
  708. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/solidity-rGO070M0.js +0 -0
  709. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/soy-Brmx7dQM.js +0 -0
  710. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/sparql-rVzFXLq3.js +0 -0
  711. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/splunk-BtCnVYZw.js +0 -0
  712. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/sql-BLtJtn59.js +0 -0
  713. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/ssh-config-_ykCGR6B.js +0 -0
  714. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/stata-BH5u7GGu.js +0 -0
  715. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/stylus-BEDo0Tqx.js +0 -0
  716. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/svelte-zxCyuUbr.js +0 -0
  717. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/swift-Dg5xB15N.js +0 -0
  718. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/synthwave-84-CbfX1IO0.js +0 -0
  719. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/system-verilog-CnnmHF94.js +0 -0
  720. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/systemd-4A_iFExJ.js +0 -0
  721. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/talonscript-CkByrt1z.js +0 -0
  722. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/tasl-QIJgUcNo.js +0 -0
  723. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/tcl-dwOrl1Do.js +0 -0
  724. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/templ-W15q3VgB.js +0 -0
  725. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/terraform-BETggiCN.js +0 -0
  726. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/tex-CvyZ59Mk.js +0 -0
  727. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/tokyo-night-hegEt444.js +0 -0
  728. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/toml-vGWfd6FD.js +0 -0
  729. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/ts-tags-zn1MmPIZ.js +0 -0
  730. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/tsv-B_m7g4N7.js +0 -0
  731. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/tsx-COt5Ahok.js +0 -0
  732. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/turtle-BsS91CYL.js +0 -0
  733. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/twig-CO9l9SDP.js +0 -0
  734. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/typescript-BPQ3VLAy.js +0 -0
  735. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/typespec-BGHnOYBU.js +0 -0
  736. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/typst-DHCkPAjA.js +0 -0
  737. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/v-BcVCzyr7.js +0 -0
  738. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/vala-CsfeWuGM.js +0 -0
  739. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/vb-D17OF-Vu.js +0 -0
  740. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/verilog-BQ8w6xss.js +0 -0
  741. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/vesper-DU1UobuO.js +0 -0
  742. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/vhdl-CeAyd5Ju.js +0 -0
  743. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/viml-CJc9bBzg.js +0 -0
  744. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/vitesse-black-Bkuqu6BP.js +0 -0
  745. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/vitesse-dark-D0r3Knsf.js +0 -0
  746. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/vitesse-light-CVO1_9PV.js +0 -0
  747. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/vue-DN_0RTcg.js +0 -0
  748. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/vue-html-AaS7Mt5G.js +0 -0
  749. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/vue-vine-CQOfvN7w.js +0 -0
  750. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/vyper-CDx5xZoG.js +0 -0
  751. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/wasm-CG6Dc4jp.js +0 -0
  752. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/wasm-MzD3tlZU.js +0 -0
  753. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/wenyan-BV7otONQ.js +0 -0
  754. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/wgsl-Dx-B1_4e.js +0 -0
  755. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/wikitext-BhOHFoWU.js +0 -0
  756. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/wit-5i3qLPDT.js +0 -0
  757. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/wolfram-lXgVvXCa.js +0 -0
  758. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/xml-sdJ4AIDG.js +0 -0
  759. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/xsl-CtQFsRM5.js +0 -0
  760. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/yaml-Buea-lGh.js +0 -0
  761. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/zenscript-DVFEvuxE.js +0 -0
  762. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/assets/zig-VOosw3JB.js +0 -0
  763. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/brand/apple-touch-icon.png +0 -0
  764. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/brand/arctecture.webp +0 -0
  765. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/brand/bimi-logo.svg +0 -0
  766. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/brand/favicon.ico +0 -0
  767. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/brand/fonts/dm-sans-latin-ext.woff2 +0 -0
  768. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/brand/fonts/dm-sans-latin.woff2 +0 -0
  769. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/brand/fonts/instrument-sans-latin-ext.woff2 +0 -0
  770. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/brand/fonts/instrument-sans-latin.woff2 +0 -0
  771. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/brand/fonts/instrument-serif-latin-ext.woff2 +0 -0
  772. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/brand/fonts/instrument-serif-latin.woff2 +0 -0
  773. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-italic-latin-ext.woff2 +0 -0
  774. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-italic-latin.woff2 +0 -0
  775. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-latin-ext.woff2 +0 -0
  776. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-latin.woff2 +0 -0
  777. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/brand/fonts/roboto-latin-ext.woff2 +0 -0
  778. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/brand/fonts/roboto-latin.woff2 +0 -0
  779. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/brand/icon-192.png +0 -0
  780. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/brand/icon-512.png +0 -0
  781. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/brand/icon.svg +0 -0
  782. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/brand/logo.png +0 -0
  783. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/brand/pythinker_animated.svg +0 -0
  784. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/brand/robots.txt +0 -0
  785. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/static/logo.png +0 -0
  786. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/store/__init__.py +0 -0
  787. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/web/store/sessions.py +0 -0
  788. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/wire/__init__.py +0 -0
  789. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/wire/file.py +0 -0
  790. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/wire/jsonrpc.py +0 -0
  791. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/wire/protocol.py +0 -0
  792. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/wire/root_hub.py +0 -0
  793. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/wire/serde.py +0 -0
  794. {pythinker_code-0.8.0 → pythinker_code-0.9.0}/src/pythinker_code/wire/server.py +0 -0
  795. {pythinker_code-0.8.0 → pythinker_code-0.9.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.8.0
3
+ Version: 0.9.0
4
4
  Summary: Pythinker Code is your next CLI agent.
5
5
  Keywords: cli,agent,ai,coding-assistant,llm,claude,openai,terminal
6
6
  Author: Mohamed Elkholy
@@ -115,18 +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.8.0
118
+ ## 🆕 What's New in 0.9.0
119
119
 
120
- Version-scheme reset. Pythinker Code moves to a `0.MINOR.PATCH` line; `0.8.0` is the new starting release, replacing the prior 1.x/2.x lineage.
120
+ - **Cleaner TUI tool card backgrounds removed.** The grey pending/running overlay behind tool execution cards (subagents, bash, reads, etc.) is gone. Only user-message blocks keep a background tint, keeping visual focus on your input.
121
+ - **Welcome screen enhancements.** The startup panel now shows the current git branch (highlighted in magenta) and the session auto-save path alongside the working directory and session ID.
122
+ - **Bash header strip styling.** The `$ command` strip in bash execution headers now uses the `tool_pending_bg` theme token, matching the reference renderer across light and dark themes.
123
+ - **Pythinker markdown renderer in all messages.** User, assistant, and custom messages now render through `pythinker_markdown` for consistent heading, code-block, and table styling.
124
+ - **Expanded theme palette.** A new `MarkdownColors` / `markdown_rich_style` subsystem in `theme.py` covers headings, emphasis, inline code, links, blockquotes, table borders, code-block backgrounds, and spinner states with separate dark and light palettes.
125
+ - **Improved tool fallback renderers.** Call fallbacks now show a status glyph (`✔`/`✘`/`●`); result fallbacks truncate at 60 lines / 4000 chars with an italicised note and use correct theme tokens.
121
126
 
122
- - **New version line — `0.MINOR.PATCH`.** `MINOR` is a monotonically increasing release counter; `PATCH` is reserved for hotfixes. No `1.0.0` milestone is planned on this line.
123
- - **PyPI reset.** All prior `pythinker-code` 1.x/2.x releases have been **yanked** from PyPI. New installs (`pip install pythinker-code`, `pip install --upgrade pythinker-code`, `uv tool install pythinker-code`, and `pythinker update`) resolve to `0.8.0`.
124
- - **GitHub reset.** All pre-`0.8.0` GitHub Releases and matching git tags have been removed. `v0.8.0` is the first tag on the new line.
125
- - **Tag scheme.** Release tags are now `v<MAJOR>.<MINOR>.<PATCH>` (e.g. `v0.8.0`). The release workflow trigger and `scripts/check_version_tag.py` both expect the `v` prefix.
126
- - **No app-level regressions.** All functionality shipped through 2.7.0 is preserved: review-first workflows (`pythinker review`, `pythinker secscan`, `pythinker security-scan`, `pythinker debug`), Reviewflow stateful review/fix workflows, the `code-reviewer` / `security-reviewer` / `debugger` subagent roles, hardened review-output validation, and the read-only PR artifact helpers.
127
- - **History preserved in-repo.** The detailed 1.x/2.x release notes are archived at [`docs/history/CHANGELOG-pre-0.8.0.md`](docs/history/CHANGELOG-pre-0.8.0.md).
128
-
129
- Upgrade with `pythinker update` or `pip install --upgrade pythinker-code==0.8.0`.
127
+ Upgrade with `pythinker update` or `pip install --upgrade pythinker-code==0.9.0`.
130
128
 
131
129
 
132
130
  ---
@@ -50,18 +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.8.0
53
+ ## 🆕 What's New in 0.9.0
54
54
 
55
- Version-scheme reset. Pythinker Code moves to a `0.MINOR.PATCH` line; `0.8.0` is the new starting release, replacing the prior 1.x/2.x lineage.
55
+ - **Cleaner TUI tool card backgrounds removed.** The grey pending/running overlay behind tool execution cards (subagents, bash, reads, etc.) is gone. Only user-message blocks keep a background tint, keeping visual focus on your input.
56
+ - **Welcome screen enhancements.** The startup panel now shows the current git branch (highlighted in magenta) and the session auto-save path alongside the working directory and session ID.
57
+ - **Bash header strip styling.** The `$ command` strip in bash execution headers now uses the `tool_pending_bg` theme token, matching the reference renderer across light and dark themes.
58
+ - **Pythinker markdown renderer in all messages.** User, assistant, and custom messages now render through `pythinker_markdown` for consistent heading, code-block, and table styling.
59
+ - **Expanded theme palette.** A new `MarkdownColors` / `markdown_rich_style` subsystem in `theme.py` covers headings, emphasis, inline code, links, blockquotes, table borders, code-block backgrounds, and spinner states with separate dark and light palettes.
60
+ - **Improved tool fallback renderers.** Call fallbacks now show a status glyph (`✔`/`✘`/`●`); result fallbacks truncate at 60 lines / 4000 chars with an italicised note and use correct theme tokens.
56
61
 
57
- - **New version line — `0.MINOR.PATCH`.** `MINOR` is a monotonically increasing release counter; `PATCH` is reserved for hotfixes. No `1.0.0` milestone is planned on this line.
58
- - **PyPI reset.** All prior `pythinker-code` 1.x/2.x releases have been **yanked** from PyPI. New installs (`pip install pythinker-code`, `pip install --upgrade pythinker-code`, `uv tool install pythinker-code`, and `pythinker update`) resolve to `0.8.0`.
59
- - **GitHub reset.** All pre-`0.8.0` GitHub Releases and matching git tags have been removed. `v0.8.0` is the first tag on the new line.
60
- - **Tag scheme.** Release tags are now `v<MAJOR>.<MINOR>.<PATCH>` (e.g. `v0.8.0`). The release workflow trigger and `scripts/check_version_tag.py` both expect the `v` prefix.
61
- - **No app-level regressions.** All functionality shipped through 2.7.0 is preserved: review-first workflows (`pythinker review`, `pythinker secscan`, `pythinker security-scan`, `pythinker debug`), Reviewflow stateful review/fix workflows, the `code-reviewer` / `security-reviewer` / `debugger` subagent roles, hardened review-output validation, and the read-only PR artifact helpers.
62
- - **History preserved in-repo.** The detailed 1.x/2.x release notes are archived at [`docs/history/CHANGELOG-pre-0.8.0.md`](docs/history/CHANGELOG-pre-0.8.0.md).
63
-
64
- Upgrade with `pythinker update` or `pip install --upgrade pythinker-code==0.8.0`.
62
+ Upgrade with `pythinker update` or `pip install --upgrade pythinker-code==0.9.0`.
65
63
 
66
64
 
67
65
  ---
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "pythinker-code"
3
- version = "0.8.0"
3
+ version = "0.9.0"
4
4
  description = "Pythinker Code is your next CLI agent."
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.12"
@@ -158,3 +158,9 @@ seeked = "seeked"
158
158
  iterm = "iterm"
159
159
  # Verbatim pyright CLI output ("0 informations") quoted in docs.
160
160
  informations = "informations"
161
+ # Project/domain-specific names and generated IDs.
162
+ reviewr = "reviewr"
163
+ fnd = "fnd"
164
+ edn = "edn"
165
+ Encrypter = "Encrypter"
166
+ uest = "uest"
@@ -15,14 +15,46 @@ GitHub Releases page; `0.8.0` is the new starting line.
15
15
 
16
16
  ## Unreleased
17
17
 
18
+ ## 0.9.0 (2026-05-21)
19
+
20
+ ### What changed in this release
21
+
22
+ - **Cleaner TUI — tool card backgrounds removed.** The grey pending/running
23
+ background overlay that appeared behind every tool execution card (subagents,
24
+ bash executions, reads, etc.) has been removed. Only user-message blocks
25
+ retain a background tint, keeping the visual hierarchy focused on your input.
26
+ - **Welcome screen enhancements.** The startup info panel now shows the current
27
+ git branch (when inside a git repo) and the session auto-save path alongside
28
+ the working directory and session ID. Branch name is highlighted in magenta
29
+ for quick scanning.
30
+ - **Bash header strip styling.** The `$ command` portion of bash execution
31
+ headers now picks up the `tool_pending_bg` token for the strip background,
32
+ matching the reference renderer style and providing consistent visual weight
33
+ across themes.
34
+ - **Pythinker markdown renderer wired into message components.** User messages,
35
+ assistant messages, and custom messages now render through `pythinker_markdown`
36
+ (the project's own Markdown renderer) instead of raw `rich.markdown.Markdown`,
37
+ giving consistent heading, code-block, and table styling everywhere.
38
+ - **Expanded theme palette.** `theme.py` gains a full `MarkdownColors` /
39
+ `markdown_rich_style` subsystem with dark and light palettes covering headings,
40
+ emphasis, inline code, links, blockquotes, table borders, code-block borders
41
+ and backgrounds, and spinner states (active/done/failed).
42
+ - **Improved tool fallback renderers.** The call fallback now emits a
43
+ status-glyph header (`✔`/`✘`/`●`) instead of a bare label. The result
44
+ fallback now truncates long outputs at 60 lines / 4000 chars with an
45
+ italicised note (matching the card renderer's behaviour), and applies the
46
+ correct theme tokens for error vs. muted output.
47
+
48
+ Upgrade with `pythinker update` or `pip install --upgrade pythinker-code==0.9.0`.
49
+
18
50
  ## 0.8.0 (2026-05-21)
19
51
 
20
- Version-scheme reset. The next release after `pythinker-code` 2.7.0 ships as
21
- `0.8.0` under the new `0.MINOR.PATCH` line.
52
+ Version-scheme reset. `pythinker-code` now ships as `0.8.0` under the new
53
+ `0.MINOR.PATCH` line.
22
54
 
23
55
  ### What changed in this release
24
56
 
25
- - **Version line reset.** `pyproject.toml` `version` moves from `2.7.0` to `0.8.0`.
57
+ - **Version line reset.** `pyproject.toml` `version` is `0.8.0` under the new release design.
26
58
  All prior `pythinker-code` 1.x/2.x releases have been yanked from PyPI and
27
59
  removed from the GitHub Releases page. New installs of
28
60
  `pip install --upgrade pythinker-code==0.8.0` resolve to the `0.x` line.
@@ -44,9 +76,9 @@ Version-scheme reset. The next release after `pythinker-code` 2.7.0 ships as
44
76
  instead of a hard-coded string, so future version bumps don't require a test
45
77
  edit.
46
78
 
47
- ### Carried forward from 2.7.0
79
+ ### Included in 0.8.0
48
80
 
49
- All functionality shipped through `pythinker-code` 2.7.0 is preserved:
81
+ All functionality included in `pythinker-code` 0.8.0 is preserved:
50
82
  review-first workflows (`pythinker review`, `pythinker secscan`,
51
83
  `pythinker security-scan`, `pythinker debug`), Reviewflow stateful
52
84
  review/fix workflows, the new `code-reviewer` / `security-reviewer` /
@@ -55,6 +87,6 @@ read-only PR artifact helpers (`describe`, `improve` / `suggest`, `ask`,
55
87
  `labels`, `changelog`, `docs`, `compliance`, etc.).
56
88
 
57
89
  See [`docs/history/CHANGELOG-pre-0.8.0.md`](docs/history/CHANGELOG-pre-0.8.0.md)
58
- for the detailed 2.x release-by-release notes.
90
+ for the archived pre-reset release-by-release notes.
59
91
 
60
92
  Upgrade with `pythinker update` or `pip install --upgrade pythinker-code==0.8.0`.
@@ -41,6 +41,26 @@ if TYPE_CHECKING:
41
41
  _CWD_LOCK = asyncio.Lock()
42
42
 
43
43
 
44
+ def _safe_git_branch(cwd: str | Path) -> str | None:
45
+ """Return the current git branch name, or ``None`` outside a repo / on error."""
46
+ import subprocess
47
+
48
+ try:
49
+ result = subprocess.run(
50
+ ["git", "-C", str(cwd), "branch", "--show-current"],
51
+ capture_output=True,
52
+ text=True,
53
+ timeout=1.0,
54
+ check=False,
55
+ )
56
+ except (OSError, subprocess.SubprocessError):
57
+ return None
58
+ if result.returncode != 0:
59
+ return None
60
+ branch = result.stdout.strip()
61
+ return branch or None
62
+
63
+
44
64
  def _patch_session_id(record: dict[str, Any]) -> None:
45
65
  """Inject the current session ID (from ContextVar) into log records."""
46
66
  try:
@@ -723,12 +743,20 @@ class PythinkerCLI:
723
743
  print_update_banner()
724
744
  schedule_auto_update_check()
725
745
 
746
+ work_dir = self._runtime.session.work_dir
726
747
  welcome_info = [
727
- WelcomeInfoItem(
728
- name="Directory", value=str(shorten_home(self._runtime.session.work_dir))
729
- ),
730
- WelcomeInfoItem(name="Session", value=self._runtime.session.id),
748
+ WelcomeInfoItem(name="Directory", value=str(shorten_home(work_dir))),
731
749
  ]
750
+ branch_name = _safe_git_branch(work_dir)
751
+ if branch_name:
752
+ welcome_info.append(WelcomeInfoItem(name="Branch", value=branch_name))
753
+ welcome_info.append(WelcomeInfoItem(name="Session", value=self._runtime.session.id))
754
+ try:
755
+ auto_save_path = str(shorten_home(self._runtime.session.context_file))
756
+ except Exception:
757
+ auto_save_path = ""
758
+ if auto_save_path:
759
+ welcome_info.append(WelcomeInfoItem(name="Auto-save", value=auto_save_path))
732
760
  if base_url := self._env_overrides.get("PYTHINKER_BASE_URL"):
733
761
  welcome_info.append(
734
762
  WelcomeInfoItem(
@@ -1735,6 +1735,10 @@ def _value_style_for_label(label: str, level: WelcomeInfoItem.Level) -> str:
1735
1735
  return "grey39"
1736
1736
  if label == "Model":
1737
1737
  return "bold bright_white"
1738
+ if label == "Branch":
1739
+ return "magenta"
1740
+ if label == "Auto-save":
1741
+ return "grey50"
1738
1742
  return level.value
1739
1743
 
1740
1744
 
@@ -76,6 +76,18 @@ def _accent_style(state: BashExecutionState) -> RichStyle:
76
76
  return tui_rich_style("muted" if state.exclude_from_context else "bash_mode")
77
77
 
78
78
 
79
+ def _command_strip_style(state: BashExecutionState) -> RichStyle:
80
+ """Background tint for the ``$ cmd`` portion of the bash header.
81
+
82
+ Mirrors the dark 256-color strip used by the reference renderer; on light
83
+ themes we use the tool pending background so the strip still reads as a
84
+ contiguous run rather than blending into the surrounding card.
85
+ """
86
+ accent = _accent_style(state)
87
+ bg = tui_rich_style("tool_pending_bg")
88
+ return accent + bg + RichStyle(bold=True)
89
+
90
+
79
91
  def _output_lines(output: str) -> list[str]:
80
92
  cleaned = sanitize_ansi(output).replace("\r\n", "\n").replace("\r", "\n")
81
93
  if cleaned == "":
@@ -136,11 +148,12 @@ def _status_header(state: BashExecutionState) -> Text:
136
148
  header = Text("✔ ", style=tui_rich_style("success"))
137
149
  header.append("Ran", style=tui_rich_style("success") + RichStyle(bold=True))
138
150
 
151
+ strip = _command_strip_style(state)
139
152
  header.append(" ")
140
- header.append("$ ", style=accent + RichStyle(bold=True))
153
+ header.append("$ ", style=strip)
141
154
  header.append(
142
155
  format_bash_command_for_header(state.command, expanded=state.expanded),
143
- style=accent + RichStyle(bold=True),
156
+ style=strip,
144
157
  )
145
158
  if state.header_suffix:
146
159
  header.append(state.header_suffix, style=tui_rich_style("muted"))
@@ -0,0 +1,233 @@
1
+ """Pythinker markdown renderer with bordered code blocks and themed accents.
2
+
3
+ Wraps Rich's ``Markdown`` element with three changes:
4
+
5
+ 1. Fenced code blocks are framed by ``╭─ {lang}`` / ``╰─`` rules in the
6
+ markdown palette's ``code_block_border`` color and tinted with the
7
+ ``code_block_bg`` background.
8
+ 2. Inline elements (headings, strong, emphasis, links, inline code, block
9
+ quotes) resolve against ``pythinker_code.ui.theme.get_markdown_colors``
10
+ so dark/light themes share the same renderer.
11
+ 3. A small streaming helper, :class:`PythinkerMarkdownStream`, buffers
12
+ incoming deltas and flushes when a safe boundary appears — either a
13
+ blank line *or* a sentence-final character outside of any open fence,
14
+ so long paragraphs no longer stall the visible stream.
15
+ """
16
+
17
+ from __future__ import annotations
18
+
19
+ from dataclasses import dataclass, field
20
+
21
+ from rich.console import Console, ConsoleOptions, Group, RenderResult, RenderableType
22
+ from rich.markdown import CodeBlock, Markdown
23
+ from rich.padding import Padding
24
+ from rich.rule import Rule
25
+ from rich.style import Style as RichStyle
26
+ from rich.syntax import Syntax
27
+ from rich.text import Text
28
+
29
+ from pythinker_code.ui.theme import ThemeName, get_markdown_colors
30
+
31
+ __all__ = [
32
+ "PythinkerMarkdown",
33
+ "PythinkerMarkdownStream",
34
+ "pythinker_markdown",
35
+ ]
36
+
37
+
38
+ class _BorderedCodeBlock(CodeBlock):
39
+ """Code block with ``╭─ lang`` / ``╰─`` border rules and background tint."""
40
+
41
+ def __rich_console__(
42
+ self, console: Console, options: ConsoleOptions
43
+ ) -> RenderResult:
44
+ colors = get_markdown_colors()
45
+ border_style = RichStyle(color=colors.code_block_border, bold=True)
46
+ bg_style = RichStyle(bgcolor=colors.code_block_bg) if colors.code_block_bg else RichStyle()
47
+
48
+ label = self.lexer_name.strip() or "code"
49
+ opener = Rule(
50
+ title=Text(f" {label} ", style=border_style),
51
+ characters="─",
52
+ style=border_style,
53
+ align="left",
54
+ )
55
+ code_text = str(self.text).rstrip("\n")
56
+ body: RenderableType = Syntax(
57
+ code_text,
58
+ self.lexer_name,
59
+ theme=self.theme,
60
+ word_wrap=True,
61
+ padding=(0, 1),
62
+ background_color=colors.code_block_bg or None,
63
+ )
64
+ if bg_style:
65
+ body = Padding(body, (0, 0), style=bg_style)
66
+ closer = Rule(characters="─", style=border_style)
67
+ yield opener
68
+ yield body
69
+ yield closer
70
+
71
+
72
+ def _markdown_style_overrides(theme: ThemeName | None = None) -> dict[str, RichStyle]:
73
+ """Translate the active markdown palette into Rich style names."""
74
+ colors = get_markdown_colors(theme)
75
+ return {
76
+ "markdown.h1": RichStyle(color=colors.heading, bold=True),
77
+ "markdown.h1.border": RichStyle(color=colors.heading),
78
+ "markdown.h2": RichStyle(bold=True, underline=True),
79
+ "markdown.h3": RichStyle(color=colors.heading, bold=True),
80
+ "markdown.h4": RichStyle(color=colors.heading, bold=True, dim=True),
81
+ "markdown.strong": RichStyle(color=colors.strong, bold=True),
82
+ "markdown.em": RichStyle(color=colors.emphasis, italic=True),
83
+ "markdown.emph": RichStyle(color=colors.emphasis, italic=True),
84
+ "markdown.code": RichStyle(color=colors.inline_code, bold=True),
85
+ "markdown.link": RichStyle(color=colors.link, underline=True),
86
+ "markdown.link_url": RichStyle(color=colors.link, underline=True),
87
+ "markdown.block_quote": RichStyle(color=colors.quote, italic=True),
88
+ "markdown.hr": RichStyle(color=colors.code_block_border),
89
+ "markdown.item.bullet": RichStyle(color=colors.strong, bold=True),
90
+ "markdown.item.number": RichStyle(color=colors.strong, bold=True),
91
+ }
92
+
93
+
94
+ class PythinkerMarkdown(Markdown):
95
+ """Drop-in replacement for ``rich.markdown.Markdown`` with the Pythinker palette."""
96
+
97
+ elements = {**Markdown.elements, "fence": _BorderedCodeBlock, "code_block": _BorderedCodeBlock}
98
+
99
+ def __rich_console__(
100
+ self, console: Console, options: ConsoleOptions
101
+ ) -> RenderResult:
102
+ overrides = _markdown_style_overrides()
103
+ with console.use_theme(_PythinkerMarkdownTheme(overrides)):
104
+ yield from super().__rich_console__(console, options)
105
+
106
+
107
+ class _PythinkerMarkdownTheme:
108
+ """Lightweight Rich ``Theme`` shim — only enough to satisfy ``Console.use_theme``."""
109
+
110
+ def __init__(self, styles: dict[str, RichStyle]) -> None:
111
+ from rich.theme import Theme
112
+
113
+ self._theme = Theme(styles, inherit=True)
114
+
115
+ def __getattr__(self, name: str): # type: ignore[no-untyped-def]
116
+ return getattr(self._theme, name)
117
+
118
+
119
+ def pythinker_markdown(text: str, *, code_theme: str = "monokai") -> PythinkerMarkdown:
120
+ """Build a :class:`PythinkerMarkdown` with the palette pre-wired."""
121
+ return PythinkerMarkdown(text, code_theme=code_theme)
122
+
123
+
124
+ # ---------------------------------------------------------------------------
125
+ # Streaming boundary helper
126
+ # ---------------------------------------------------------------------------
127
+
128
+
129
+ _FENCE_CHARS = ("`", "~")
130
+ _SENTENCE_END = (".", "!", "?", ";", ":")
131
+
132
+
133
+ @dataclass(slots=True)
134
+ class _FenceMarker:
135
+ char: str
136
+ length: int
137
+
138
+
139
+ def _parse_fence_opener(line: str) -> _FenceMarker | None:
140
+ stripped = line.lstrip(" ")
141
+ indent = len(line) - len(stripped)
142
+ if indent > 3 or not stripped:
143
+ return None
144
+ ch = stripped[0]
145
+ if ch not in _FENCE_CHARS:
146
+ return None
147
+ length = 0
148
+ for c in stripped:
149
+ if c == ch:
150
+ length += 1
151
+ else:
152
+ break
153
+ if length < 3:
154
+ return None
155
+ info = stripped[length:]
156
+ if ch == "`" and "`" in info:
157
+ return None
158
+ return _FenceMarker(char=ch, length=length)
159
+
160
+
161
+ def _line_closes_fence(line: str, opener: _FenceMarker) -> bool:
162
+ stripped = line.lstrip(" ")
163
+ indent = len(line) - len(stripped)
164
+ if indent > 3:
165
+ return False
166
+ length = 0
167
+ for c in stripped:
168
+ if c == opener.char:
169
+ length += 1
170
+ else:
171
+ break
172
+ if length < opener.length:
173
+ return False
174
+ rest = stripped[length:]
175
+ return all(c in " \t" for c in rest)
176
+
177
+
178
+ def _find_stream_safe_boundary(text: str) -> int | None:
179
+ """Return an index in ``text`` that is safe to flush, or ``None``.
180
+
181
+ Safe boundaries are blank lines outside any open code fence, or — to avoid
182
+ the well-known long-paragraph stall — the end of a non-fenced line that
183
+ ends in sentence-final punctuation.
184
+ """
185
+ open_fence: _FenceMarker | None = None
186
+ last_boundary: int | None = None
187
+ cursor = 0
188
+ for line in text.splitlines(keepends=True):
189
+ line_end = cursor + len(line)
190
+ content = line.rstrip("\n")
191
+ if open_fence is not None:
192
+ if _line_closes_fence(content, open_fence):
193
+ open_fence = None
194
+ last_boundary = line_end
195
+ cursor = line_end
196
+ continue
197
+ opener = _parse_fence_opener(content)
198
+ if opener is not None:
199
+ open_fence = opener
200
+ cursor = line_end
201
+ continue
202
+ if not content.strip():
203
+ last_boundary = line_end
204
+ elif content.rstrip().endswith(_SENTENCE_END):
205
+ last_boundary = line_end
206
+ cursor = line_end
207
+ return last_boundary
208
+
209
+
210
+ @dataclass(slots=True)
211
+ class PythinkerMarkdownStream:
212
+ """Buffer streamed markdown deltas and yield safe-to-render slices."""
213
+
214
+ pending: str = field(default="")
215
+
216
+ def push(self, delta: str) -> str | None:
217
+ """Append ``delta`` and return the next ready slice, or ``None``."""
218
+ self.pending += delta
219
+ cut = _find_stream_safe_boundary(self.pending)
220
+ if cut is None or cut == 0:
221
+ return None
222
+ ready = self.pending[:cut]
223
+ self.pending = self.pending[cut:]
224
+ return ready
225
+
226
+ def flush(self) -> str | None:
227
+ """Return any remaining buffered markdown, clearing the buffer."""
228
+ if not self.pending.strip():
229
+ self.pending = ""
230
+ return None
231
+ pending = self.pending
232
+ self.pending = ""
233
+ return pending
@@ -19,11 +19,11 @@ from dataclasses import dataclass
19
19
  from typing import Literal
20
20
 
21
21
  from rich.console import Group, RenderableType
22
- from rich.markdown import Markdown
23
22
  from rich.padding import Padding
24
23
  from rich.style import Style as RichStyle
25
24
  from rich.text import Text
26
25
 
26
+ from pythinker_code.ui.shell.components.markdown import pythinker_markdown
27
27
  from pythinker_code.ui.theme import tui_rich_style
28
28
 
29
29
  __all__ = [
@@ -64,7 +64,7 @@ def render_user_message(text: str) -> RenderableType:
64
64
  and one cell of right padding. Avoid vertical padding so submitted prompts
65
65
  do not look like standalone panels.
66
66
  """
67
- md = Markdown(text)
67
+ md = pythinker_markdown(text)
68
68
  bg = tui_rich_style("user_message_bg")
69
69
  fg = tui_rich_style("user_message_text")
70
70
  style = bg + fg if fg else bg
@@ -96,7 +96,7 @@ def render_assistant_message(
96
96
  for i, item in enumerate(items):
97
97
  next_visible = i + 1 < len(items)
98
98
  if item.kind == "text":
99
- blocks.append(Markdown(item.text.strip()))
99
+ blocks.append(pythinker_markdown(item.text.strip()))
100
100
  elif item.kind == "thinking":
101
101
  if hide_thinking:
102
102
  blocks.append(Text(hidden_thinking_label, style=thinking_style))
@@ -141,9 +141,9 @@ def render_custom_message(message: CustomMessageInput) -> RenderableType:
141
141
  bg_style = tui_rich_style("custom_message_bg")
142
142
 
143
143
  label = Text(f"[{message.custom_type}]", style=label_style)
144
- body = Markdown(message.text) if message.text.strip() else Text("")
144
+ body = pythinker_markdown(message.text) if message.text.strip() else Text("")
145
145
 
146
- if isinstance(body, Markdown):
146
+ if not isinstance(body, Text):
147
147
  block = Group(label, Text(""), body)
148
148
  elif text_style:
149
149
  block = Group(label, Text(""), Text(message.text, style=text_style))
@@ -52,6 +52,9 @@ class ToolExecutionStatus(Enum):
52
52
 
53
53
  _PENDING_LIKE = frozenset({ToolExecutionStatus.PENDING, ToolExecutionStatus.RUNNING})
54
54
 
55
+ _MAX_RESULT_LINES = 60
56
+ _MAX_RESULT_CHARS = 4000
57
+
55
58
 
56
59
  @dataclass(slots=True)
57
60
  class _CallState:
@@ -232,25 +235,47 @@ class ToolExecutionComponent:
232
235
  return None
233
236
 
234
237
  def _background_style(self) -> Style | None:
235
- if self._status == ToolExecutionStatus.SUCCESS:
236
- return None
237
- if self._status == ToolExecutionStatus.ERROR or self._status == ToolExecutionStatus.DENIED:
238
- token = "tool_error_bg"
239
- elif self._status in _PENDING_LIKE:
240
- token = "tool_pending_bg"
241
- else:
242
- token = "tool_pending_bg"
243
- return tui_rich_style(token)
238
+ return None
244
239
 
245
240
  def _call_fallback(self) -> RenderableType:
246
- return Text(self._definition.label or self._state.tool_name, style="bold")
241
+ label = self._definition.label or self._state.tool_name
242
+ if self._status == ToolExecutionStatus.SUCCESS:
243
+ glyph = "✔ "
244
+ glyph_style = tui_rich_style("success") + Style(bold=True)
245
+ elif self._status in (ToolExecutionStatus.ERROR, ToolExecutionStatus.DENIED):
246
+ glyph = "✘ "
247
+ glyph_style = tui_rich_style("error") + Style(bold=True)
248
+ elif self._status == ToolExecutionStatus.CANCELLED:
249
+ glyph = "● "
250
+ glyph_style = tui_rich_style("warning") + Style(bold=True)
251
+ else:
252
+ glyph = "● "
253
+ glyph_style = tui_rich_style("muted") + Style(bold=True)
254
+ header = Text()
255
+ header.append(glyph, style=glyph_style)
256
+ header.append(label, style=Style(bold=True))
257
+ return header
247
258
 
248
259
  def _result_fallback(self) -> RenderableType | None:
249
260
  result = self._state.result
250
261
  if result is None or not result.text:
251
262
  return None
252
- style = "red" if result.is_error else "grey70"
253
- return Text(result.text, style=style)
263
+ text = result.text
264
+ truncated = False
265
+ if not self._state.expanded:
266
+ lines = text.splitlines()
267
+ if len(lines) > _MAX_RESULT_LINES or len(text) > _MAX_RESULT_CHARS:
268
+ lines = lines[:_MAX_RESULT_LINES]
269
+ text = "\n".join(lines)[:_MAX_RESULT_CHARS]
270
+ truncated = True
271
+ style = tui_rich_style("error") if result.is_error else tui_rich_style("muted")
272
+ body = Text(text, style=style)
273
+ if truncated:
274
+ body.append(
275
+ "\n… output truncated for display; full result preserved in session.",
276
+ style=tui_rich_style("muted") + Style(italic=True),
277
+ )
278
+ return body
254
279
 
255
280
  def _is_truncatable(self) -> bool:
256
281
  """Heuristic: only show the expand hint when there's likely more to see."""