pythinker-code 0.10.0__tar.gz → 0.12.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 (802) hide show
  1. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/PKG-INFO +58 -11
  2. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/README.md +56 -9
  3. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/pyproject.toml +2 -2
  4. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/CHANGELOG.md +24 -0
  5. pythinker_code-0.12.0/src/pythinker_code/native.py +38 -0
  6. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/components/footer.py +10 -21
  7. pythinker_code-0.12.0/src/pythinker_code/ui/shell/design_system.py +105 -0
  8. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/echo.py +3 -3
  9. pythinker_code-0.12.0/src/pythinker_code/ui/shell/motion.py +90 -0
  10. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/spinner_words.py +1 -1
  11. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/tool_renderers/bash.py +29 -1
  12. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/tool_renderers/generic.py +1 -1
  13. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/tool_renderers/todo.py +3 -1
  14. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/update.py +151 -1
  15. pythinker_code-0.12.0/src/pythinker_code/ui/shell/visualize/_activity_tree.py +47 -0
  16. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/visualize/_approval_panel.py +29 -36
  17. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/visualize/_blocks.py +28 -68
  18. pythinker_code-0.12.0/src/pythinker_code/ui/shell/visualize/_dialog_shell.py +60 -0
  19. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/visualize/_interactive.py +2 -0
  20. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/visualize/_live_view.py +32 -28
  21. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/visualize/_question_panel.py +34 -41
  22. pythinker_code-0.12.0/src/pythinker_code/ui/shell/visualize/_transcript.py +40 -0
  23. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/visualize/_worklog.py +18 -17
  24. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/theme.py +27 -9
  25. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/utils/rich/markdown.py +15 -1
  26. pythinker_code-0.10.0/src/pythinker_code/web/static/assets/_baseUniq-W400tXC7.js → pythinker_code-0.12.0/src/pythinker_code/web/static/assets/_baseUniq-DW5pW6hO.js +1 -1
  27. pythinker_code-0.10.0/src/pythinker_code/web/static/assets/arc-34EJCxo9.js → pythinker_code-0.12.0/src/pythinker_code/web/static/assets/arc-z2Y2jvOB.js +1 -1
  28. pythinker_code-0.10.0/src/pythinker_code/web/static/assets/architectureDiagram-VXUJARFQ-DwaRWLiC.js → pythinker_code-0.12.0/src/pythinker_code/web/static/assets/architectureDiagram-VXUJARFQ-Bn9DboBt.js +1 -1
  29. pythinker_code-0.10.0/src/pythinker_code/web/static/assets/blockDiagram-VD42YOAC-BRSNRd25.js → pythinker_code-0.12.0/src/pythinker_code/web/static/assets/blockDiagram-VD42YOAC-BdPOJMCX.js +1 -1
  30. pythinker_code-0.10.0/src/pythinker_code/web/static/assets/c4Diagram-YG6GDRKO-DD0UYjmm.js → pythinker_code-0.12.0/src/pythinker_code/web/static/assets/c4Diagram-YG6GDRKO-05czCYL9.js +1 -1
  31. pythinker_code-0.12.0/src/pythinker_code/web/static/assets/channel-McQWqovU.js +1 -0
  32. pythinker_code-0.10.0/src/pythinker_code/web/static/assets/chunk-4BX2VUAB-DHgDfkME.js → pythinker_code-0.12.0/src/pythinker_code/web/static/assets/chunk-4BX2VUAB-CnPVDLQZ.js +1 -1
  33. pythinker_code-0.10.0/src/pythinker_code/web/static/assets/chunk-55IACEB6-BImVKHaT.js → pythinker_code-0.12.0/src/pythinker_code/web/static/assets/chunk-55IACEB6-1RjredC-.js +1 -1
  34. pythinker_code-0.10.0/src/pythinker_code/web/static/assets/chunk-B4BG7PRW-BI_7MRlj.js → pythinker_code-0.12.0/src/pythinker_code/web/static/assets/chunk-B4BG7PRW-DeuKNN5_.js +1 -1
  35. pythinker_code-0.10.0/src/pythinker_code/web/static/assets/chunk-DI55MBZ5-WJQkxwt1.js → pythinker_code-0.12.0/src/pythinker_code/web/static/assets/chunk-DI55MBZ5-BP6yPgV0.js +1 -1
  36. pythinker_code-0.10.0/src/pythinker_code/web/static/assets/chunk-FMBD7UC4-DhLSSn1H.js → pythinker_code-0.12.0/src/pythinker_code/web/static/assets/chunk-FMBD7UC4-DwDivipT.js +1 -1
  37. pythinker_code-0.10.0/src/pythinker_code/web/static/assets/chunk-QN33PNHL-zZjGr-26.js → pythinker_code-0.12.0/src/pythinker_code/web/static/assets/chunk-QN33PNHL-C9m2p4ww.js +1 -1
  38. pythinker_code-0.10.0/src/pythinker_code/web/static/assets/chunk-QZHKN3VN-BS3aXYU5.js → pythinker_code-0.12.0/src/pythinker_code/web/static/assets/chunk-QZHKN3VN-CtoRKz4G.js +1 -1
  39. pythinker_code-0.10.0/src/pythinker_code/web/static/assets/chunk-TZMSLE5B-DwZ3sgQz.js → pythinker_code-0.12.0/src/pythinker_code/web/static/assets/chunk-TZMSLE5B-humsq0yN.js +1 -1
  40. pythinker_code-0.12.0/src/pythinker_code/web/static/assets/classDiagram-2ON5EDUG-BUaiSEMD.js +1 -0
  41. pythinker_code-0.12.0/src/pythinker_code/web/static/assets/classDiagram-v2-WZHVMYZB-BUaiSEMD.js +1 -0
  42. pythinker_code-0.12.0/src/pythinker_code/web/static/assets/clone-CXz8Xc9z.js +1 -0
  43. pythinker_code-0.10.0/src/pythinker_code/web/static/assets/code-block-IT6T5CEO-Bb_0wCjb.js → pythinker_code-0.12.0/src/pythinker_code/web/static/assets/code-block-IT6T5CEO-CwccqIQ0.js +1 -1
  44. pythinker_code-0.10.0/src/pythinker_code/web/static/assets/cose-bilkent-S5V4N54A-DIEVeUwy.js → pythinker_code-0.12.0/src/pythinker_code/web/static/assets/cose-bilkent-S5V4N54A-DeuvZfEf.js +1 -1
  45. pythinker_code-0.10.0/src/pythinker_code/web/static/assets/cytoscape.esm-Dn1K7hBl.js → pythinker_code-0.12.0/src/pythinker_code/web/static/assets/cytoscape.esm-VZbeKTj-.js +1 -1
  46. pythinker_code-0.10.0/src/pythinker_code/web/static/assets/dagre-6UL2VRFP-CkgSwIWx.js → pythinker_code-0.12.0/src/pythinker_code/web/static/assets/dagre-6UL2VRFP-DcduErgX.js +1 -1
  47. pythinker_code-0.10.0/src/pythinker_code/web/static/assets/diagram-PSM6KHXK-CtQrWdyR.js → pythinker_code-0.12.0/src/pythinker_code/web/static/assets/diagram-PSM6KHXK-2MLKk55a.js +1 -1
  48. pythinker_code-0.10.0/src/pythinker_code/web/static/assets/diagram-QEK2KX5R-CSDDBGRj.js → pythinker_code-0.12.0/src/pythinker_code/web/static/assets/diagram-QEK2KX5R-W0wG02Gs.js +1 -1
  49. pythinker_code-0.10.0/src/pythinker_code/web/static/assets/diagram-S2PKOQOG-CYxMVXhs.js → pythinker_code-0.12.0/src/pythinker_code/web/static/assets/diagram-S2PKOQOG-DtiMGd96.js +1 -1
  50. pythinker_code-0.10.0/src/pythinker_code/web/static/assets/erDiagram-Q2GNP2WA-BTnrd59H.js → pythinker_code-0.12.0/src/pythinker_code/web/static/assets/erDiagram-Q2GNP2WA-zmP8JSbT.js +1 -1
  51. pythinker_code-0.10.0/src/pythinker_code/web/static/assets/flowDiagram-NV44I4VS-CEy_PjLC.js → pythinker_code-0.12.0/src/pythinker_code/web/static/assets/flowDiagram-NV44I4VS-6LUnKiOb.js +1 -1
  52. pythinker_code-0.10.0/src/pythinker_code/web/static/assets/ganttDiagram-JELNMOA3-36ZRuSR4.js → pythinker_code-0.12.0/src/pythinker_code/web/static/assets/ganttDiagram-JELNMOA3-DqBp88HY.js +1 -1
  53. pythinker_code-0.10.0/src/pythinker_code/web/static/assets/gitGraphDiagram-NY62KEGX-CRuujZbj.js → pythinker_code-0.12.0/src/pythinker_code/web/static/assets/gitGraphDiagram-NY62KEGX-DjCTO3dv.js +1 -1
  54. pythinker_code-0.10.0/src/pythinker_code/web/static/assets/graph-BKh6X7Dn.js → pythinker_code-0.12.0/src/pythinker_code/web/static/assets/graph-wUeZ000p.js +1 -1
  55. pythinker_code-0.10.0/src/pythinker_code/web/static/assets/index-Cn2hJgP_.js → pythinker_code-0.12.0/src/pythinker_code/web/static/assets/index-Ce6cvllw.js +1 -1
  56. pythinker_code-0.10.0/src/pythinker_code/web/static/assets/index-CC2lLT6r.js → pythinker_code-0.12.0/src/pythinker_code/web/static/assets/index-DoZOmOmM.js +2 -2
  57. pythinker_code-0.10.0/src/pythinker_code/web/static/assets/index-DzK6T3bK.js → pythinker_code-0.12.0/src/pythinker_code/web/static/assets/index-sXlK_dAN.js +1 -1
  58. pythinker_code-0.10.0/src/pythinker_code/web/static/assets/infoDiagram-WHAUD3N6-BdpB_TgQ.js → pythinker_code-0.12.0/src/pythinker_code/web/static/assets/infoDiagram-WHAUD3N6-BSUmig3U.js +1 -1
  59. pythinker_code-0.10.0/src/pythinker_code/web/static/assets/journeyDiagram-XKPGCS4Q-B-Ueb6_0.js → pythinker_code-0.12.0/src/pythinker_code/web/static/assets/journeyDiagram-XKPGCS4Q-D8PkppLb.js +1 -1
  60. pythinker_code-0.10.0/src/pythinker_code/web/static/assets/kanban-definition-3W4ZIXB7-D4mjpd4e.js → pythinker_code-0.12.0/src/pythinker_code/web/static/assets/kanban-definition-3W4ZIXB7-DP76gagV.js +1 -1
  61. pythinker_code-0.10.0/src/pythinker_code/web/static/assets/layout-s1vkLXlV.js → pythinker_code-0.12.0/src/pythinker_code/web/static/assets/layout-DCpkmDhI.js +1 -1
  62. pythinker_code-0.10.0/src/pythinker_code/web/static/assets/linear-maaL09f0.js → pythinker_code-0.12.0/src/pythinker_code/web/static/assets/linear-P0RpqhFQ.js +1 -1
  63. pythinker_code-0.10.0/src/pythinker_code/web/static/assets/mermaid-VLURNSYL-Du-05kut.js → pythinker_code-0.12.0/src/pythinker_code/web/static/assets/mermaid-VLURNSYL-DfJ5IhQM.js +7 -7
  64. pythinker_code-0.10.0/src/pythinker_code/web/static/assets/mermaid.core-YI5xJESq.js → pythinker_code-0.12.0/src/pythinker_code/web/static/assets/mermaid.core-D2jP1-oT.js +5 -5
  65. pythinker_code-0.10.0/src/pythinker_code/web/static/assets/min-C-visb5z.js → pythinker_code-0.12.0/src/pythinker_code/web/static/assets/min-vrRf7DTj.js +1 -1
  66. pythinker_code-0.10.0/src/pythinker_code/web/static/assets/mindmap-definition-VGOIOE7T-BtL7H-jO.js → pythinker_code-0.12.0/src/pythinker_code/web/static/assets/mindmap-definition-VGOIOE7T-GDbyNMac.js +1 -1
  67. pythinker_code-0.10.0/src/pythinker_code/web/static/assets/pieDiagram-ADFJNKIX-DzCJMgpy.js → pythinker_code-0.12.0/src/pythinker_code/web/static/assets/pieDiagram-ADFJNKIX-D-26Kio_.js +1 -1
  68. pythinker_code-0.10.0/src/pythinker_code/web/static/assets/quadrantDiagram-AYHSOK5B-QxkFve7t.js → pythinker_code-0.12.0/src/pythinker_code/web/static/assets/quadrantDiagram-AYHSOK5B-Cf9SP7Vp.js +1 -1
  69. pythinker_code-0.10.0/src/pythinker_code/web/static/assets/requirementDiagram-UZGBJVZJ-CaigVcFF.js → pythinker_code-0.12.0/src/pythinker_code/web/static/assets/requirementDiagram-UZGBJVZJ-CukOiyWf.js +1 -1
  70. pythinker_code-0.10.0/src/pythinker_code/web/static/assets/sankeyDiagram-TZEHDZUN-BpueXMqU.js → pythinker_code-0.12.0/src/pythinker_code/web/static/assets/sankeyDiagram-TZEHDZUN-DC_7mEmx.js +1 -1
  71. pythinker_code-0.10.0/src/pythinker_code/web/static/assets/sequenceDiagram-WL72ISMW-DF4777Nm.js → pythinker_code-0.12.0/src/pythinker_code/web/static/assets/sequenceDiagram-WL72ISMW-a57q9Neq.js +1 -1
  72. pythinker_code-0.10.0/src/pythinker_code/web/static/assets/stateDiagram-FKZM4ZOC-B_zFmVzG.js → pythinker_code-0.12.0/src/pythinker_code/web/static/assets/stateDiagram-FKZM4ZOC-Uv7w1fHu.js +1 -1
  73. pythinker_code-0.12.0/src/pythinker_code/web/static/assets/stateDiagram-v2-4FDKWEC3-Bb3FpiXV.js +1 -0
  74. pythinker_code-0.10.0/src/pythinker_code/web/static/assets/timeline-definition-IT6M3QCI-BYaJbz91.js → pythinker_code-0.12.0/src/pythinker_code/web/static/assets/timeline-definition-IT6M3QCI-Ca1hNW_F.js +1 -1
  75. pythinker_code-0.10.0/src/pythinker_code/web/static/assets/treemap-KMMF4GRG-BxgG9HnC.js → pythinker_code-0.12.0/src/pythinker_code/web/static/assets/treemap-KMMF4GRG-DZX3UyDt.js +1 -1
  76. pythinker_code-0.10.0/src/pythinker_code/web/static/assets/xychartDiagram-PRI3JC2R-87KaLLq9.js → pythinker_code-0.12.0/src/pythinker_code/web/static/assets/xychartDiagram-PRI3JC2R-DvAo5KoB.js +1 -1
  77. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/index.html +1 -1
  78. pythinker_code-0.10.0/src/pythinker_code/web/static/assets/channel-BGRpA8iD.js +0 -1
  79. pythinker_code-0.10.0/src/pythinker_code/web/static/assets/classDiagram-2ON5EDUG-BK5t0xBQ.js +0 -1
  80. pythinker_code-0.10.0/src/pythinker_code/web/static/assets/classDiagram-v2-WZHVMYZB-BK5t0xBQ.js +0 -1
  81. pythinker_code-0.10.0/src/pythinker_code/web/static/assets/clone-Dg1GHx6t.js +0 -1
  82. pythinker_code-0.10.0/src/pythinker_code/web/static/assets/stateDiagram-v2-4FDKWEC3-9CQoRlCH.js +0 -1
  83. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/LICENSE +0 -0
  84. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/NOTICE +0 -0
  85. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/__init__.py +0 -0
  86. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/__main__.py +0 -0
  87. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/acp/AGENTS.md +0 -0
  88. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/acp/__init__.py +0 -0
  89. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/acp/convert.py +0 -0
  90. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/acp/host.py +0 -0
  91. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/acp/mcp.py +0 -0
  92. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/acp/server.py +0 -0
  93. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/acp/session.py +0 -0
  94. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/acp/tools.py +0 -0
  95. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/acp/types.py +0 -0
  96. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/acp/version.py +0 -0
  97. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/agents/default/agent.yaml +0 -0
  98. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/agents/default/code_reviewer.yaml +0 -0
  99. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/agents/default/coder.yaml +0 -0
  100. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/agents/default/debugger.yaml +0 -0
  101. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/agents/default/explore.yaml +0 -0
  102. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/agents/default/implementer.yaml +0 -0
  103. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/agents/default/plan.yaml +0 -0
  104. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/agents/default/review.yaml +0 -0
  105. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/agents/default/security_reviewer.yaml +0 -0
  106. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/agents/default/system.md +0 -0
  107. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/agents/default/verifier.yaml +0 -0
  108. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/agents/okabe/agent.yaml +0 -0
  109. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/agentspec.py +0 -0
  110. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/app.py +0 -0
  111. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/approval_runtime/__init__.py +0 -0
  112. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/approval_runtime/models.py +0 -0
  113. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/approval_runtime/runtime.py +0 -0
  114. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/auth/__init__.py +0 -0
  115. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/auth/anthropic_direct.py +0 -0
  116. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/auth/deepseek.py +0 -0
  117. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/auth/github_feedback.py +0 -0
  118. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/auth/lm_studio.py +0 -0
  119. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/auth/minimax.py +0 -0
  120. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/auth/oauth.py +0 -0
  121. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/auth/ollama.py +0 -0
  122. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/auth/openai.py +0 -0
  123. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/auth/opencode_go.py +0 -0
  124. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/auth/openrouter.py +0 -0
  125. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/auth/platforms.py +0 -0
  126. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/background/__init__.py +0 -0
  127. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/background/agent_runner.py +0 -0
  128. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/background/ids.py +0 -0
  129. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/background/manager.py +0 -0
  130. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/background/models.py +0 -0
  131. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/background/store.py +0 -0
  132. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/background/summary.py +0 -0
  133. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/background/worker.py +0 -0
  134. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/cli/__init__.py +0 -0
  135. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/cli/__main__.py +0 -0
  136. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/cli/_lazy_group.py +0 -0
  137. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/cli/debug.py +0 -0
  138. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/cli/export.py +0 -0
  139. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/cli/info.py +0 -0
  140. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/cli/mcp.py +0 -0
  141. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/cli/plugin.py +0 -0
  142. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/cli/review.py +0 -0
  143. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/cli/secscan.py +0 -0
  144. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/cli/security_scan.py +0 -0
  145. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/cli/toad.py +0 -0
  146. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/cli/update.py +0 -0
  147. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/cli/vis.py +0 -0
  148. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/cli/web.py +0 -0
  149. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/config.py +0 -0
  150. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/constant.py +0 -0
  151. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/events.py +0 -0
  152. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/exception.py +0 -0
  153. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/extensions.py +0 -0
  154. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/file_restore.py +0 -0
  155. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/hooks/__init__.py +0 -0
  156. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/hooks/config.py +0 -0
  157. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/hooks/engine.py +0 -0
  158. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/hooks/events.py +0 -0
  159. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/hooks/runner.py +0 -0
  160. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/llm.py +0 -0
  161. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/metadata.py +0 -0
  162. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/notifications/__init__.py +0 -0
  163. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/notifications/llm.py +0 -0
  164. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/notifications/manager.py +0 -0
  165. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/notifications/models.py +0 -0
  166. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/notifications/notifier.py +0 -0
  167. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/notifications/store.py +0 -0
  168. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/notifications/wire.py +0 -0
  169. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/plugin/__init__.py +0 -0
  170. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/plugin/manager.py +0 -0
  171. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/plugin/tool.py +0 -0
  172. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/prompt_templates.py +0 -0
  173. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/prompts/__init__.py +0 -0
  174. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/prompts/compact.md +0 -0
  175. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/prompts/init.md +0 -0
  176. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/py.typed +0 -0
  177. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/session.py +0 -0
  178. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/session_fork.py +0 -0
  179. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/session_state.py +0 -0
  180. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/share.py +0 -0
  181. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/skill/__init__.py +0 -0
  182. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/skill/flow/__init__.py +0 -0
  183. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/skill/flow/d2.py +0 -0
  184. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/skill/flow/mermaid.py +0 -0
  185. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/skills/pythinker-code-help/SKILL.md +0 -0
  186. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/skills/skill-creator/SKILL.md +0 -0
  187. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/soul/__init__.py +0 -0
  188. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/soul/agent.py +0 -0
  189. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/soul/approval.py +0 -0
  190. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/soul/btw.py +0 -0
  191. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/soul/compaction.py +0 -0
  192. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/soul/context.py +0 -0
  193. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/soul/denwarenji.py +0 -0
  194. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/soul/dynamic_injection.py +0 -0
  195. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/soul/dynamic_injections/__init__.py +0 -0
  196. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/soul/dynamic_injections/auto_mode.py +0 -0
  197. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/soul/dynamic_injections/plan_mode.py +0 -0
  198. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/soul/message.py +0 -0
  199. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/soul/permission.py +0 -0
  200. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/soul/pythinkersoul.py +0 -0
  201. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/soul/slash.py +0 -0
  202. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/soul/toolset.py +0 -0
  203. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/subagents/__init__.py +0 -0
  204. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/subagents/builder.py +0 -0
  205. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/subagents/core.py +0 -0
  206. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/subagents/discovery.py +0 -0
  207. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/subagents/git_context.py +0 -0
  208. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/subagents/models.py +0 -0
  209. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/subagents/output.py +0 -0
  210. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/subagents/registry.py +0 -0
  211. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/subagents/runner.py +0 -0
  212. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/subagents/store.py +0 -0
  213. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/telemetry/__init__.py +0 -0
  214. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/telemetry/config.py +0 -0
  215. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/telemetry/crash.py +0 -0
  216. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/telemetry/errors.py +0 -0
  217. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/telemetry/metrics.py +0 -0
  218. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/telemetry/otel.py +0 -0
  219. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/telemetry/sentry.py +0 -0
  220. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/telemetry/sink.py +0 -0
  221. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/tools/AGENTS.md +0 -0
  222. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/tools/__init__.py +0 -0
  223. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/tools/agent/__init__.py +0 -0
  224. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/tools/agent/description.md +0 -0
  225. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/tools/ask_user/__init__.py +0 -0
  226. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/tools/ask_user/description.md +0 -0
  227. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/tools/background/__init__.py +0 -0
  228. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/tools/background/list.md +0 -0
  229. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/tools/background/output.md +0 -0
  230. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/tools/background/stop.md +0 -0
  231. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/tools/display.py +0 -0
  232. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/tools/dmail/__init__.py +0 -0
  233. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/tools/dmail/dmail.md +0 -0
  234. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/tools/file/__init__.py +0 -0
  235. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/tools/file/glob.md +0 -0
  236. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/tools/file/glob.py +0 -0
  237. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/tools/file/grep.md +0 -0
  238. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/tools/file/grep_local.py +0 -0
  239. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/tools/file/plan_mode.py +0 -0
  240. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/tools/file/read.md +0 -0
  241. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/tools/file/read.py +0 -0
  242. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/tools/file/read_media.md +0 -0
  243. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/tools/file/read_media.py +0 -0
  244. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/tools/file/replace.md +0 -0
  245. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/tools/file/replace.py +0 -0
  246. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/tools/file/utils.py +0 -0
  247. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/tools/file/write.md +0 -0
  248. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/tools/file/write.py +0 -0
  249. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/tools/plan/__init__.py +0 -0
  250. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/tools/plan/description.md +0 -0
  251. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/tools/plan/enter.py +0 -0
  252. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/tools/plan/enter_description.md +0 -0
  253. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/tools/plan/handoff.py +0 -0
  254. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/tools/plan/heroes.py +0 -0
  255. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/tools/shell/__init__.py +0 -0
  256. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/tools/shell/bash.md +0 -0
  257. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/tools/shell/powershell.md +0 -0
  258. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/tools/test.py +0 -0
  259. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/tools/think/__init__.py +0 -0
  260. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/tools/think/think.md +0 -0
  261. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/tools/todo/__init__.py +0 -0
  262. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/tools/todo/set_todo_list.md +0 -0
  263. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/tools/utils.py +0 -0
  264. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/tools/web/__init__.py +0 -0
  265. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/tools/web/fetch.md +0 -0
  266. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/tools/web/fetch.py +0 -0
  267. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/tools/web/search.md +0 -0
  268. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/tools/web/search.py +0 -0
  269. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/__init__.py +0 -0
  270. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/acp/__init__.py +0 -0
  271. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/print/__init__.py +0 -0
  272. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/print/visualize.py +0 -0
  273. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/__init__.py +0 -0
  274. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/components/__init__.py +0 -0
  275. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/components/base.py +0 -0
  276. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/components/bash_execution.py +0 -0
  277. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/components/bordered_loader.py +0 -0
  278. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/components/diff.py +0 -0
  279. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/components/key_hints.py +0 -0
  280. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/components/markdown.py +0 -0
  281. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/components/messages.py +0 -0
  282. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/components/render_utils.py +0 -0
  283. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/components/settings_list.py +0 -0
  284. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/components/special_messages.py +0 -0
  285. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/components/tool_execution.py +0 -0
  286. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/console.py +0 -0
  287. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/debug.py +0 -0
  288. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/export_import.py +0 -0
  289. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/keyboard.py +0 -0
  290. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/keymap.py +0 -0
  291. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/mcp_status.py +0 -0
  292. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/model_picker.py +0 -0
  293. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/oauth.py +0 -0
  294. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/placeholders.py +0 -0
  295. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/prompt.py +0 -0
  296. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/replay.py +0 -0
  297. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/selector.py +0 -0
  298. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/selectors/__init__.py +0 -0
  299. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/selectors/extension.py +0 -0
  300. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/selectors/oauth.py +0 -0
  301. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/selectors/settings.py +0 -0
  302. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/selectors/show_images.py +0 -0
  303. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/selectors/theme.py +0 -0
  304. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/selectors/thinking.py +0 -0
  305. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/session_picker.py +0 -0
  306. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/setup.py +0 -0
  307. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/slash.py +0 -0
  308. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/startup.py +0 -0
  309. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/task_browser.py +0 -0
  310. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/tool_renderers/__init__.py +0 -0
  311. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/tool_renderers/_render_utils.py +0 -0
  312. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/tool_renderers/agent.py +0 -0
  313. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/tool_renderers/ask_user.py +0 -0
  314. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/tool_renderers/background.py +0 -0
  315. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/tool_renderers/edit.py +0 -0
  316. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/tool_renderers/find.py +0 -0
  317. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/tool_renderers/grep.py +0 -0
  318. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/tool_renderers/plan.py +0 -0
  319. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/tool_renderers/read.py +0 -0
  320. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/tool_renderers/think.py +0 -0
  321. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/tool_renderers/web.py +0 -0
  322. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/tool_renderers/write.py +0 -0
  323. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/usage.py +0 -0
  324. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/usage_adapters/__init__.py +0 -0
  325. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/usage_adapters/anthropic_admin.py +0 -0
  326. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/usage_adapters/base.py +0 -0
  327. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/usage_adapters/deepseek.py +0 -0
  328. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/usage_adapters/minimax.py +0 -0
  329. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/usage_adapters/openai_admin.py +0 -0
  330. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/usage_adapters/openai_chatgpt.py +0 -0
  331. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/usage_adapters/opencode_go.py +0 -0
  332. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/usage_adapters/openrouter.py +0 -0
  333. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/usage_adapters/pythinker.py +0 -0
  334. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/usage_adapters/pythinker_ai.py +0 -0
  335. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/usage_render.py +0 -0
  336. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/visualize/__init__.py +0 -0
  337. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/visualize/_btw_panel.py +0 -0
  338. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/shell/visualize/_input_router.py +0 -0
  339. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/ui/tui_config.py +0 -0
  340. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/usage_ratelimit_cache.py +0 -0
  341. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/utils/__init__.py +0 -0
  342. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/utils/aiohttp.py +0 -0
  343. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/utils/aioqueue.py +0 -0
  344. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/utils/broadcast.py +0 -0
  345. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/utils/changelog.py +0 -0
  346. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/utils/clipboard.py +0 -0
  347. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/utils/datetime.py +0 -0
  348. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/utils/diff.py +0 -0
  349. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/utils/editor.py +0 -0
  350. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/utils/environment.py +0 -0
  351. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/utils/envvar.py +0 -0
  352. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/utils/export.py +0 -0
  353. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/utils/file_filter.py +0 -0
  354. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/utils/frontmatter.py +0 -0
  355. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/utils/io.py +0 -0
  356. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/utils/logging.py +0 -0
  357. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/utils/media_tags.py +0 -0
  358. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/utils/message.py +0 -0
  359. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/utils/path.py +0 -0
  360. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/utils/proctitle.py +0 -0
  361. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/utils/proxy.py +0 -0
  362. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/utils/pyinstaller.py +0 -0
  363. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/utils/rich/__init__.py +0 -0
  364. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/utils/rich/columns.py +0 -0
  365. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/utils/rich/diff_render.py +0 -0
  366. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/utils/rich/markdown_sample.md +0 -0
  367. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/utils/rich/markdown_sample_short.md +0 -0
  368. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/utils/rich/syntax.py +0 -0
  369. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/utils/sensitive.py +0 -0
  370. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/utils/server.py +0 -0
  371. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/utils/signals.py +0 -0
  372. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/utils/slashcmd.py +0 -0
  373. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/utils/string.py +0 -0
  374. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/utils/subprocess_env.py +0 -0
  375. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/utils/term.py +0 -0
  376. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/utils/typing.py +0 -0
  377. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/vis/__init__.py +0 -0
  378. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/vis/api/__init__.py +0 -0
  379. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/vis/api/sessions.py +0 -0
  380. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/vis/api/statistics.py +0 -0
  381. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/vis/api/system.py +0 -0
  382. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/vis/app.py +0 -0
  383. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/vis/static/assets/highlighted-body-B3W2YXNL-CY1rtwrX.js +0 -0
  384. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/vis/static/assets/index-DSRInNnm.css +0 -0
  385. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/vis/static/assets/index-DgmTI2M_.js +0 -0
  386. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/vis/static/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
  387. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/vis/static/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
  388. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/vis/static/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
  389. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/vis/static/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
  390. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/vis/static/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
  391. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/vis/static/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
  392. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/vis/static/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
  393. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/vis/static/index.html +0 -0
  394. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/__init__.py +0 -0
  395. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/api/__init__.py +0 -0
  396. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/api/config.py +0 -0
  397. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/api/open_in.py +0 -0
  398. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/api/sessions.py +0 -0
  399. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/app.py +0 -0
  400. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/auth.py +0 -0
  401. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/models.py +0 -0
  402. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/runner/__init__.py +0 -0
  403. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/runner/messages.py +0 -0
  404. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/runner/process.py +0 -0
  405. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/runner/worker.py +0 -0
  406. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  407. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  408. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  409. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  410. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  411. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  412. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  413. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  414. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  415. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  416. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  417. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  418. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  419. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  420. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  421. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  422. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  423. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  424. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  425. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  426. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  427. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  428. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  429. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  430. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  431. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  432. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  433. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  434. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  435. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  436. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  437. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  438. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  439. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  440. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  441. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  442. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  443. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  444. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  445. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  446. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  447. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  448. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  449. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  450. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  451. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  452. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  453. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  454. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  455. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  456. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  457. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  458. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  459. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  460. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  461. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  462. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  463. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  464. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  465. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/abap-BdImnpbu.js +0 -0
  466. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/actionscript-3-CfeIJUat.js +0 -0
  467. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/ada-bCR0ucgS.js +0 -0
  468. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/andromeeda-C-Jbm3Hp.js +0 -0
  469. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/angular-html-CU67Zn6k.js +0 -0
  470. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/angular-ts-BwZT4LLn.js +0 -0
  471. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/apache-Pmp26Uib.js +0 -0
  472. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/apex-D8_7TLub.js +0 -0
  473. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/apl-dKokRX4l.js +0 -0
  474. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/applescript-Co6uUVPk.js +0 -0
  475. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/ara-BRHolxvo.js +0 -0
  476. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/asciidoc-Dv7Oe6Be.js +0 -0
  477. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/asm-D_Q5rh1f.js +0 -0
  478. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/astro-CbQHKStN.js +0 -0
  479. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/aurora-x-D-2ljcwZ.js +0 -0
  480. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/awk-DMzUqQB5.js +0 -0
  481. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/ayu-dark-CmMr59Fi.js +0 -0
  482. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/ballerina-BFfxhgS-.js +0 -0
  483. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/bat-BkioyH1T.js +0 -0
  484. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/beancount-k_qm7-4y.js +0 -0
  485. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/berry-uYugtg8r.js +0 -0
  486. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/bibtex-CHM0blh-.js +0 -0
  487. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/bicep-Bmn6On1c.js +0 -0
  488. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/blade-D4QpJJKB.js +0 -0
  489. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/bsl-BO_Y6i37.js +0 -0
  490. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/c-BIGW1oBm.js +0 -0
  491. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/c3-VCDPK7BO.js +0 -0
  492. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/cadence-Bv_4Rxtq.js +0 -0
  493. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/cairo-KRGpt6FW.js +0 -0
  494. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/catppuccin-frappe-DFWUc33u.js +0 -0
  495. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/catppuccin-latte-C9dUb6Cb.js +0 -0
  496. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/catppuccin-macchiato-DQyhUUbL.js +0 -0
  497. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/catppuccin-mocha-D87Tk5Gz.js +0 -0
  498. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/clarity-D53aC0YG.js +0 -0
  499. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/clojure-P80f7IUj.js +0 -0
  500. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/cmake-D1j8_8rp.js +0 -0
  501. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/cobol-nwyudZeR.js +0 -0
  502. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/codeowners-Bp6g37R7.js +0 -0
  503. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/codeql-DsOJ9woJ.js +0 -0
  504. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/coffee-Ch7k5sss.js +0 -0
  505. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/common-lisp-Cg-RD9OK.js +0 -0
  506. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/coq-DkFqJrB1.js +0 -0
  507. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/cpp-CofmeUqb.js +0 -0
  508. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/crystal-tKQVLTB8.js +0 -0
  509. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/csharp-K5feNrxe.js +0 -0
  510. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/css-DPfMkruS.js +0 -0
  511. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/csv-fuZLfV_i.js +0 -0
  512. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/cue-D82EKSYY.js +0 -0
  513. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/cypher-COkxafJQ.js +0 -0
  514. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/d-85-TOEBH.js +0 -0
  515. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/dark-plus-C3mMm8J8.js +0 -0
  516. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/dart-CF10PKvl.js +0 -0
  517. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/dax-CEL-wOlO.js +0 -0
  518. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/defaultLocale-DX6XiGOO.js +0 -0
  519. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/desktop-BmXAJ9_W.js +0 -0
  520. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/diff-D97Zzqfu.js +0 -0
  521. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/docker-BcOcwvcX.js +0 -0
  522. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/dotenv-Da5cRb03.js +0 -0
  523. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/dracula-BzJJZx-M.js +0 -0
  524. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/dracula-soft-BXkSAIEj.js +0 -0
  525. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/dream-maker-BtqSS_iP.js +0 -0
  526. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/edge-BkV0erSs.js +0 -0
  527. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/elixir-CDX3lj18.js +0 -0
  528. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/elm-DbKCFpqz.js +0 -0
  529. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/emacs-lisp-C9XAeP06.js +0 -0
  530. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/erb-BOJIQeun.js +0 -0
  531. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/erlang-DsQrWhSR.js +0 -0
  532. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/everforest-dark-BgDCqdQA.js +0 -0
  533. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/everforest-light-C8M2exoo.js +0 -0
  534. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/fennel-BYunw83y.js +0 -0
  535. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/fish-BvzEVeQv.js +0 -0
  536. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/fluent-C4IJs8-o.js +0 -0
  537. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/fortran-fixed-form-CkoXwp7k.js +0 -0
  538. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/fortran-free-form-BxgE0vQu.js +0 -0
  539. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/fsharp-CXgrBDvD.js +0 -0
  540. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/gdresource-B7Tvp0Sc.js +0 -0
  541. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/gdscript-DTMYz4Jt.js +0 -0
  542. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/gdshader-DkwncUOv.js +0 -0
  543. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/genie-D0YGMca9.js +0 -0
  544. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/gherkin-DyxjwDmM.js +0 -0
  545. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/git-commit-F4YmCXRG.js +0 -0
  546. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/git-rebase-r7XF79zn.js +0 -0
  547. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/github-dark-DHJKELXO.js +0 -0
  548. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/github-dark-default-Cuk6v7N8.js +0 -0
  549. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/github-dark-dimmed-DH5Ifo-i.js +0 -0
  550. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/github-dark-high-contrast-E3gJ1_iC.js +0 -0
  551. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/github-light-DAi9KRSo.js +0 -0
  552. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/github-light-default-D7oLnXFd.js +0 -0
  553. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/github-light-high-contrast-BfjtVDDH.js +0 -0
  554. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/gleam-BspZqrRM.js +0 -0
  555. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/glimmer-js-Rg0-pVw9.js +0 -0
  556. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/glimmer-ts-U6CK756n.js +0 -0
  557. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/glsl-DplSGwfg.js +0 -0
  558. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/gn-n2N0HUVH.js +0 -0
  559. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/gnuplot-DdkO51Og.js +0 -0
  560. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/go-Dn2_MT6a.js +0 -0
  561. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/graphql-ChdNCCLP.js +0 -0
  562. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/groovy-gcz8RCvz.js +0 -0
  563. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/gruvbox-dark-hard-CFHQjOhq.js +0 -0
  564. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/gruvbox-dark-medium-GsRaNv29.js +0 -0
  565. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/gruvbox-dark-soft-CVdnzihN.js +0 -0
  566. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/gruvbox-light-hard-CH1njM8p.js +0 -0
  567. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/gruvbox-light-medium-DRw_LuNl.js +0 -0
  568. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/gruvbox-light-soft-hJgmCMqR.js +0 -0
  569. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/hack-CaT9iCJl.js +0 -0
  570. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/haml-B8DHNrY2.js +0 -0
  571. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/handlebars-BL8al0AC.js +0 -0
  572. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/haskell-Df6bDoY_.js +0 -0
  573. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/haxe-CzTSHFRz.js +0 -0
  574. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/hcl-BWvSN4gD.js +0 -0
  575. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/hjson-D5-asLiD.js +0 -0
  576. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/hlsl-D3lLCCz7.js +0 -0
  577. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/houston-DnULxvSX.js +0 -0
  578. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/html-GMplVEZG.js +0 -0
  579. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/html-derivative-BFtXZ54Q.js +0 -0
  580. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/http-jrhK8wxY.js +0 -0
  581. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/hurl-irOxFIW8.js +0 -0
  582. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/hxml-Bvhsp5Yf.js +0 -0
  583. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/hy-DFXneXwc.js +0 -0
  584. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/imba-DGztddWO.js +0 -0
  585. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/index-BpoLgcEt.js +0 -0
  586. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/index-CzV_vCfu.css +0 -0
  587. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/index-DI2oedCt.js +0 -0
  588. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/ini-BEwlwnbL.js +0 -0
  589. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/init-Gi6I4Gst.js +0 -0
  590. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
  591. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
  592. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
  593. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
  594. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
  595. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
  596. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
  597. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/java-CylS5w8V.js +0 -0
  598. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/javascript-wDzz0qaB.js +0 -0
  599. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/jinja-4LBKfQ-Z.js +0 -0
  600. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/jison-wvAkD_A8.js +0 -0
  601. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/json-Cp-IABpG.js +0 -0
  602. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/json5-C9tS-k6U.js +0 -0
  603. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/jsonc-Des-eS-w.js +0 -0
  604. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/jsonl-DcaNXYhu.js +0 -0
  605. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/jsonnet-DFQXde-d.js +0 -0
  606. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/jssm-C2t-YnRu.js +0 -0
  607. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/jsx-g9-lgVsj.js +0 -0
  608. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/julia-CxzCAyBv.js +0 -0
  609. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/kanagawa-dragon-CkXjmgJE.js +0 -0
  610. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/kanagawa-lotus-CfQXZHmo.js +0 -0
  611. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/kanagawa-wave-DWedfzmr.js +0 -0
  612. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/katex-D2lIc1rk.css +0 -0
  613. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/kdl-DV7GczEv.js +0 -0
  614. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/kotlin-BdnUsdx6.js +0 -0
  615. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/kusto-DZf3V79B.js +0 -0
  616. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/laserwave-DUszq2jm.js +0 -0
  617. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/latex-B4uzh10-.js +0 -0
  618. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/lean-BZvkOJ9d.js +0 -0
  619. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/less-B1dDrJ26.js +0 -0
  620. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/light-plus-B7mTdjB0.js +0 -0
  621. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/liquid-DYVedYrR.js +0 -0
  622. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/llvm-BtvRca6l.js +0 -0
  623. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/log-2UxHyX5q.js +0 -0
  624. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/logo-BtOb2qkB.js +0 -0
  625. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/lua-BbnMAYS6.js +0 -0
  626. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/luau-C-HG3fhB.js +0 -0
  627. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/make-CHLpvVh8.js +0 -0
  628. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/markdown-Cvjx9yec.js +0 -0
  629. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/marko-DZsq8hO1.js +0 -0
  630. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/material-theme-D5KoaKCx.js +0 -0
  631. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/material-theme-darker-BfHTSMKl.js +0 -0
  632. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/material-theme-lighter-B0m2ddpp.js +0 -0
  633. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/material-theme-ocean-CyktbL80.js +0 -0
  634. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/material-theme-palenight-Csfq5Kiy.js +0 -0
  635. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/matlab-D7o27uSR.js +0 -0
  636. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/mdc-DUICxH0z.js +0 -0
  637. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/mdx-Cmh6b_Ma.js +0 -0
  638. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/mermaid-VLURNSYL-B2P5VJ9v.css +0 -0
  639. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/mermaid-mWjccvbQ.js +0 -0
  640. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/min-dark-CafNBF8u.js +0 -0
  641. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/min-light-CTRr51gU.js +0 -0
  642. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/mipsasm-CKIfxQSi.js +0 -0
  643. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/mojo-B93PlW-d.js +0 -0
  644. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/monokai-D4h5O-jR.js +0 -0
  645. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/moonbit-Ba13S78F.js +0 -0
  646. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/move-Bu9oaDYs.js +0 -0
  647. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/narrat-DRg8JJMk.js +0 -0
  648. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/nextflow-BrzmwbiE.js +0 -0
  649. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/nginx-DknmC5AR.js +0 -0
  650. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/night-owl-C39BiMTA.js +0 -0
  651. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/nim-CVrawwO9.js +0 -0
  652. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/nix-CwoSXNpI.js +0 -0
  653. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/nord-Ddv68eIx.js +0 -0
  654. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/nushell-C-sUppwS.js +0 -0
  655. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/objective-c-DXmwc3jG.js +0 -0
  656. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/objective-cpp-CLxacb5B.js +0 -0
  657. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/ocaml-C0hk2d4L.js +0 -0
  658. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/one-dark-pro-DVMEJ2y_.js +0 -0
  659. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/one-light-PoHY5YXO.js +0 -0
  660. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/openscad-C4EeE6gA.js +0 -0
  661. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/ordinal-Cboi1Yqb.js +0 -0
  662. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/pascal-D93ZcfNL.js +0 -0
  663. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/perl-C0TMdlhV.js +0 -0
  664. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/php-CDn_0X-4.js +0 -0
  665. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/pkl-u5AG7uiY.js +0 -0
  666. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/plastic-3e1v2bzS.js +0 -0
  667. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/plsql-ChMvpjG-.js +0 -0
  668. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/po-BTJTHyun.js +0 -0
  669. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/poimandres-CS3Unz2-.js +0 -0
  670. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/polar-C0HS_06l.js +0 -0
  671. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/postcss-CXtECtnM.js +0 -0
  672. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/powerquery-CEu0bR-o.js +0 -0
  673. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/powershell-Dpen1YoG.js +0 -0
  674. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/prisma-Dd19v3D-.js +0 -0
  675. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/prolog-CbFg5uaA.js +0 -0
  676. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/proto-C7zT0LnQ.js +0 -0
  677. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/pug-CGlum2m_.js +0 -0
  678. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/puppet-BMWR74SV.js +0 -0
  679. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/purescript-CklMAg4u.js +0 -0
  680. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/python-B6aJPvgy.js +0 -0
  681. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/qml-3beO22l8.js +0 -0
  682. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/qmldir-C8lEn-DE.js +0 -0
  683. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/qss-IeuSbFQv.js +0 -0
  684. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/r-Dspwwk_N.js +0 -0
  685. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/racket-BqYA7rlc.js +0 -0
  686. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/raku-DXvB9xmW.js +0 -0
  687. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/razor-C1TweQQi.js +0 -0
  688. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/red-bN70gL4F.js +0 -0
  689. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/reg-C-SQnVFl.js +0 -0
  690. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/regexp-CDVJQ6XC.js +0 -0
  691. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/rel-C3B-1QV4.js +0 -0
  692. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/riscv-BM1_JUlF.js +0 -0
  693. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/rose-pine-dawn-DHQR4-dF.js +0 -0
  694. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/rose-pine-moon-D4_iv3hh.js +0 -0
  695. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/rose-pine-qdsjHGoJ.js +0 -0
  696. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/rosmsg-BJDFO7_C.js +0 -0
  697. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/rst-B0xPkSld.js +0 -0
  698. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/ruby-BvKwtOVI.js +0 -0
  699. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/rust-B1yitclQ.js +0 -0
  700. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/sas-cz2c8ADy.js +0 -0
  701. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/sass-Cj5Yp3dK.js +0 -0
  702. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/scala-C151Ov-r.js +0 -0
  703. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/scheme-C98Dy4si.js +0 -0
  704. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/scss-OYdSNvt2.js +0 -0
  705. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/sdbl-DVxCFoDh.js +0 -0
  706. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/shaderlab-Dg9Lc6iA.js +0 -0
  707. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/shellscript-Yzrsuije.js +0 -0
  708. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/shellsession-BADoaaVG.js +0 -0
  709. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/slack-dark-BthQWCQV.js +0 -0
  710. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/slack-ochin-DqwNpetd.js +0 -0
  711. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/smalltalk-BERRCDM3.js +0 -0
  712. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/snazzy-light-Bw305WKR.js +0 -0
  713. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/solarized-dark-DXbdFlpD.js +0 -0
  714. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/solarized-light-L9t79GZl.js +0 -0
  715. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/solidity-rGO070M0.js +0 -0
  716. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/soy-Brmx7dQM.js +0 -0
  717. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/sparql-rVzFXLq3.js +0 -0
  718. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/splunk-BtCnVYZw.js +0 -0
  719. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/sql-BLtJtn59.js +0 -0
  720. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/ssh-config-_ykCGR6B.js +0 -0
  721. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/stata-BH5u7GGu.js +0 -0
  722. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/stylus-BEDo0Tqx.js +0 -0
  723. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/svelte-zxCyuUbr.js +0 -0
  724. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/swift-Dg5xB15N.js +0 -0
  725. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/synthwave-84-CbfX1IO0.js +0 -0
  726. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/system-verilog-CnnmHF94.js +0 -0
  727. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/systemd-4A_iFExJ.js +0 -0
  728. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/talonscript-CkByrt1z.js +0 -0
  729. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/tasl-QIJgUcNo.js +0 -0
  730. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/tcl-dwOrl1Do.js +0 -0
  731. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/templ-W15q3VgB.js +0 -0
  732. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/terraform-BETggiCN.js +0 -0
  733. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/tex-CvyZ59Mk.js +0 -0
  734. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/tokyo-night-hegEt444.js +0 -0
  735. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/toml-vGWfd6FD.js +0 -0
  736. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/ts-tags-zn1MmPIZ.js +0 -0
  737. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/tsv-B_m7g4N7.js +0 -0
  738. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/tsx-COt5Ahok.js +0 -0
  739. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/turtle-BsS91CYL.js +0 -0
  740. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/twig-CO9l9SDP.js +0 -0
  741. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/typescript-BPQ3VLAy.js +0 -0
  742. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/typespec-BGHnOYBU.js +0 -0
  743. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/typst-DHCkPAjA.js +0 -0
  744. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/v-BcVCzyr7.js +0 -0
  745. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/vala-CsfeWuGM.js +0 -0
  746. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/vb-D17OF-Vu.js +0 -0
  747. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/verilog-BQ8w6xss.js +0 -0
  748. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/vesper-DU1UobuO.js +0 -0
  749. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/vhdl-CeAyd5Ju.js +0 -0
  750. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/viml-CJc9bBzg.js +0 -0
  751. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/vitesse-black-Bkuqu6BP.js +0 -0
  752. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/vitesse-dark-D0r3Knsf.js +0 -0
  753. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/vitesse-light-CVO1_9PV.js +0 -0
  754. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/vue-DN_0RTcg.js +0 -0
  755. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/vue-html-AaS7Mt5G.js +0 -0
  756. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/vue-vine-CQOfvN7w.js +0 -0
  757. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/vyper-CDx5xZoG.js +0 -0
  758. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/wasm-CG6Dc4jp.js +0 -0
  759. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/wasm-MzD3tlZU.js +0 -0
  760. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/wenyan-BV7otONQ.js +0 -0
  761. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/wgsl-Dx-B1_4e.js +0 -0
  762. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/wikitext-BhOHFoWU.js +0 -0
  763. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/wit-5i3qLPDT.js +0 -0
  764. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/wolfram-lXgVvXCa.js +0 -0
  765. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/xml-sdJ4AIDG.js +0 -0
  766. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/xsl-CtQFsRM5.js +0 -0
  767. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/yaml-Buea-lGh.js +0 -0
  768. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/zenscript-DVFEvuxE.js +0 -0
  769. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/assets/zig-VOosw3JB.js +0 -0
  770. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/brand/apple-touch-icon.png +0 -0
  771. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/brand/arctecture.webp +0 -0
  772. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/brand/bimi-logo.svg +0 -0
  773. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/brand/favicon.ico +0 -0
  774. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/brand/fonts/dm-sans-latin-ext.woff2 +0 -0
  775. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/brand/fonts/dm-sans-latin.woff2 +0 -0
  776. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/brand/fonts/instrument-sans-latin-ext.woff2 +0 -0
  777. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/brand/fonts/instrument-sans-latin.woff2 +0 -0
  778. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/brand/fonts/instrument-serif-latin-ext.woff2 +0 -0
  779. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/brand/fonts/instrument-serif-latin.woff2 +0 -0
  780. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-italic-latin-ext.woff2 +0 -0
  781. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-italic-latin.woff2 +0 -0
  782. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-latin-ext.woff2 +0 -0
  783. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-latin.woff2 +0 -0
  784. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/brand/fonts/roboto-latin-ext.woff2 +0 -0
  785. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/brand/fonts/roboto-latin.woff2 +0 -0
  786. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/brand/icon-192.png +0 -0
  787. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/brand/icon-512.png +0 -0
  788. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/brand/icon.svg +0 -0
  789. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/brand/logo.png +0 -0
  790. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/brand/pythinker_animated.svg +0 -0
  791. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/brand/robots.txt +0 -0
  792. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/static/logo.png +0 -0
  793. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/store/__init__.py +0 -0
  794. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/web/store/sessions.py +0 -0
  795. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/wire/__init__.py +0 -0
  796. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/wire/file.py +0 -0
  797. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/wire/jsonrpc.py +0 -0
  798. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/wire/protocol.py +0 -0
  799. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/wire/root_hub.py +0 -0
  800. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/wire/serde.py +0 -0
  801. {pythinker_code-0.10.0 → pythinker_code-0.12.0}/src/pythinker_code/wire/server.py +0 -0
  802. {pythinker_code-0.10.0 → pythinker_code-0.12.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.10.0
3
+ Version: 0.12.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
@@ -23,7 +23,7 @@ Requires-Dist: agent-client-protocol==0.8.0
23
23
  Requires-Dist: aiofiles>=24.0,<26.0
24
24
  Requires-Dist: aiohttp==3.13.4
25
25
  Requires-Dist: typer==0.21.1
26
- Requires-Dist: pythinker-core[contrib]==1.1.0
26
+ Requires-Dist: pythinker-core[contrib]==1.1.1
27
27
  Requires-Dist: loguru>=0.6.0,<0.7
28
28
  Requires-Dist: prompt-toolkit==3.0.52
29
29
  Requires-Dist: pillow==12.2.0
@@ -115,17 +115,14 @@ It speaks the [**Agent Client Protocol (ACP)**](https://github.com/agentclientpr
115
115
 
116
116
  ---
117
117
 
118
- ## 🆕 What's New in 0.10.0
118
+ ## 🆕 What's New in 0.12.0
119
119
 
120
- - **Tool failure recovery improvements.** The agent loop now handles malformed or empty tool-call responses more gracefully and can continue the session instead of leaving the UI stuck after a bad provider turn.
121
- - **Safer file edits.** File write and replace tools now create restore points before mutating files, giving sessions a clearer recovery path after risky changes.
122
- - **Session UX state tracking.** Runtime session state now records additional UX metadata so shell surfaces can provide better continuity across long-running work.
123
- - **Shell command enhancements.** New shell slash-command plumbing improves discoverability and keeps interactive workflows smoother.
124
- - **TUI renderer polish.** Tool cards now share more consistent status glyphs, truncation behavior, and result summaries across bash, read, write, edit, grep, find, web, subagent, background, ask-user, and think renderers.
125
- - **Clipboard handling hardening.** Clipboard helpers now degrade more cleanly when platform clipboard access is unavailable.
126
- - **Release and TUI specs.** The repository now includes the blackbox TUI port design and a visual smoke-test criterion for future terminal UI work.
120
+ - **Native Windows installer.** A `PythinkerSetup-0.12.0.exe` is now attached to every GitHub Release. One double-click installs Pythinker per-user with no UAC prompt, no Python / Node / uv prerequisite, and registers `pythinker` on your PATH automatically. Uninstall via Apps & Features reverses every change. See the new *Windows native installer* section in Quick Start for details.
121
+ - **In-app updates for the native build.** `pythinker update` from inside the native installer detects the build, fetches the latest installer from GitHub Releases, verifies its SHA-256, and re-runs it silently. The existing `PYTHINKER_CLI_NO_AUTO_UPDATE` env var now gates both the PyPI and native update flows — one opt-out, both paths.
122
+ - **Tag-triggered Windows CI.** A new `.github/workflows/windows-installer.yml` runs on every `pythinker-code-v*` tag, freezes `pythinker` via PyInstaller (`--onedir`), compiles the Inno Setup script, signs the result when the Authenticode cert is available, and uploads the `.exe` + SHA-256 to the Release.
123
+ - **Shell terminal rhythm refinements.** Tone tokens, motion timing, and the sky-blue accent palette (`#7dd3fc` / `#93c5fd`) were retuned so transcript rows, motion status, and dialog surfaces breathe consistently. UI snapshot tests updated to lock the new rhythm in place.
127
124
 
128
- Upgrade with `pythinker update` or `pip install --upgrade pythinker-code==0.10.0`.
125
+ Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.12.0`, or — on Windows — download `PythinkerSetup-0.12.0.exe` from the [Releases page](https://github.com/mohamed-elkholy95/Pythinker-Code/releases/latest).
129
126
 
130
127
 
131
128
  ---
@@ -210,6 +207,56 @@ Swap providers and models per-session: `--model openai/gpt-5.5`, hosted Pythinke
210
207
 
211
208
  ## ⚡ Quick Start
212
209
 
210
+ ### 🪟 Windows — native installer (recommended)
211
+
212
+ `PythinkerSetup-x.y.z.exe` is attached to every GitHub Release. It bundles
213
+ Pythinker as a self-contained executable — **you do not need Python, Node, or
214
+ uv installed**, and there is no UAC / admin prompt.
215
+
216
+ **Install in three steps:**
217
+
218
+ 1. Download `PythinkerSetup-x.y.z.exe` and its `.sha256` companion from the
219
+ [latest Release](https://github.com/mohamed-elkholy95/Pythinker-Code/releases/latest).
220
+ 2. (Optional, recommended) Verify the SHA-256:
221
+ ```powershell
222
+ Get-FileHash .\PythinkerSetup-x.y.z.exe -Algorithm SHA256
223
+ Get-Content .\PythinkerSetup-x.y.z.exe.sha256
224
+ ```
225
+ The hash from `Get-FileHash` must match the one in the `.sha256` file.
226
+ 3. Double-click the installer. It writes to `%LOCALAPPDATA%\Programs\Pythinker`,
227
+ registers `pythinker` on your user PATH (`HKCU\Environment`), and broadcasts
228
+ `WM_SETTINGCHANGE` so any new shell window picks it up.
229
+
230
+ Open a fresh PowerShell and run `pythinker --version` to confirm.
231
+
232
+ > 🛡 **First-launch SmartScreen warning** — until the Authenticode signing
233
+ > cert is wired into the CI pipeline (see [build.ps1](./packages/windows-installer/build.ps1)
234
+ > and the `WINDOWS_CERT_PFX_BASE64` / `WINDOWS_CERT_PASSWORD` secrets), the
235
+ > installer ships unsigned and Windows SmartScreen will show *"Windows
236
+ > protected your PC."* Click **More info → Run anyway**. The published
237
+ > `.sha256` is your integrity check in the meantime.
238
+
239
+ **Built-in auto-update:** running `pythinker update` from inside the native
240
+ build queries the GitHub Releases API, downloads the newest installer,
241
+ verifies its SHA-256, and re-runs it silently (`/VERYSILENT /SUPPRESSMSGBOXES
242
+ /NORESTART`). Set `PYTHINKER_CLI_NO_AUTO_UPDATE=1` to disable the proactive
243
+ update check on shell startup (this is the same opt-out the PyPI/uv install
244
+ path uses — one knob, both flows).
245
+
246
+ **Uninstall:** Apps & Features → *Pythinker Code* → Uninstall. The uninstaller
247
+ removes the install directory and reverts the user-PATH edit. A new shell will
248
+ no longer find `pythinker`.
249
+
250
+ **Per-machine install** (multi-user / IT-managed boxes): pass `/ALLUSERS` to
251
+ the installer from an admin console:
252
+
253
+ ```powershell
254
+ .\PythinkerSetup-x.y.z.exe /ALLUSERS
255
+ ```
256
+
257
+ This installs to `%ProgramFiles%\Pythinker` and registers PATH at the HKLM
258
+ scope. The default (no flag) remains per-user.
259
+
213
260
  ### ✨ Recommended install (clean, with logo)
214
261
 
215
262
  ```sh
@@ -50,17 +50,14 @@ It speaks the [**Agent Client Protocol (ACP)**](https://github.com/agentclientpr
50
50
 
51
51
  ---
52
52
 
53
- ## 🆕 What's New in 0.10.0
53
+ ## 🆕 What's New in 0.12.0
54
54
 
55
- - **Tool failure recovery improvements.** The agent loop now handles malformed or empty tool-call responses more gracefully and can continue the session instead of leaving the UI stuck after a bad provider turn.
56
- - **Safer file edits.** File write and replace tools now create restore points before mutating files, giving sessions a clearer recovery path after risky changes.
57
- - **Session UX state tracking.** Runtime session state now records additional UX metadata so shell surfaces can provide better continuity across long-running work.
58
- - **Shell command enhancements.** New shell slash-command plumbing improves discoverability and keeps interactive workflows smoother.
59
- - **TUI renderer polish.** Tool cards now share more consistent status glyphs, truncation behavior, and result summaries across bash, read, write, edit, grep, find, web, subagent, background, ask-user, and think renderers.
60
- - **Clipboard handling hardening.** Clipboard helpers now degrade more cleanly when platform clipboard access is unavailable.
61
- - **Release and TUI specs.** The repository now includes the blackbox TUI port design and a visual smoke-test criterion for future terminal UI work.
55
+ - **Native Windows installer.** A `PythinkerSetup-0.12.0.exe` is now attached to every GitHub Release. One double-click installs Pythinker per-user with no UAC prompt, no Python / Node / uv prerequisite, and registers `pythinker` on your PATH automatically. Uninstall via Apps & Features reverses every change. See the new *Windows native installer* section in Quick Start for details.
56
+ - **In-app updates for the native build.** `pythinker update` from inside the native installer detects the build, fetches the latest installer from GitHub Releases, verifies its SHA-256, and re-runs it silently. The existing `PYTHINKER_CLI_NO_AUTO_UPDATE` env var now gates both the PyPI and native update flows — one opt-out, both paths.
57
+ - **Tag-triggered Windows CI.** A new `.github/workflows/windows-installer.yml` runs on every `pythinker-code-v*` tag, freezes `pythinker` via PyInstaller (`--onedir`), compiles the Inno Setup script, signs the result when the Authenticode cert is available, and uploads the `.exe` + SHA-256 to the Release.
58
+ - **Shell terminal rhythm refinements.** Tone tokens, motion timing, and the sky-blue accent palette (`#7dd3fc` / `#93c5fd`) were retuned so transcript rows, motion status, and dialog surfaces breathe consistently. UI snapshot tests updated to lock the new rhythm in place.
62
59
 
63
- Upgrade with `pythinker update` or `pip install --upgrade pythinker-code==0.10.0`.
60
+ Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.12.0`, or — on Windows — download `PythinkerSetup-0.12.0.exe` from the [Releases page](https://github.com/mohamed-elkholy95/Pythinker-Code/releases/latest).
64
61
 
65
62
 
66
63
  ---
@@ -145,6 +142,56 @@ Swap providers and models per-session: `--model openai/gpt-5.5`, hosted Pythinke
145
142
 
146
143
  ## ⚡ Quick Start
147
144
 
145
+ ### 🪟 Windows — native installer (recommended)
146
+
147
+ `PythinkerSetup-x.y.z.exe` is attached to every GitHub Release. It bundles
148
+ Pythinker as a self-contained executable — **you do not need Python, Node, or
149
+ uv installed**, and there is no UAC / admin prompt.
150
+
151
+ **Install in three steps:**
152
+
153
+ 1. Download `PythinkerSetup-x.y.z.exe` and its `.sha256` companion from the
154
+ [latest Release](https://github.com/mohamed-elkholy95/Pythinker-Code/releases/latest).
155
+ 2. (Optional, recommended) Verify the SHA-256:
156
+ ```powershell
157
+ Get-FileHash .\PythinkerSetup-x.y.z.exe -Algorithm SHA256
158
+ Get-Content .\PythinkerSetup-x.y.z.exe.sha256
159
+ ```
160
+ The hash from `Get-FileHash` must match the one in the `.sha256` file.
161
+ 3. Double-click the installer. It writes to `%LOCALAPPDATA%\Programs\Pythinker`,
162
+ registers `pythinker` on your user PATH (`HKCU\Environment`), and broadcasts
163
+ `WM_SETTINGCHANGE` so any new shell window picks it up.
164
+
165
+ Open a fresh PowerShell and run `pythinker --version` to confirm.
166
+
167
+ > 🛡 **First-launch SmartScreen warning** — until the Authenticode signing
168
+ > cert is wired into the CI pipeline (see [build.ps1](./packages/windows-installer/build.ps1)
169
+ > and the `WINDOWS_CERT_PFX_BASE64` / `WINDOWS_CERT_PASSWORD` secrets), the
170
+ > installer ships unsigned and Windows SmartScreen will show *"Windows
171
+ > protected your PC."* Click **More info → Run anyway**. The published
172
+ > `.sha256` is your integrity check in the meantime.
173
+
174
+ **Built-in auto-update:** running `pythinker update` from inside the native
175
+ build queries the GitHub Releases API, downloads the newest installer,
176
+ verifies its SHA-256, and re-runs it silently (`/VERYSILENT /SUPPRESSMSGBOXES
177
+ /NORESTART`). Set `PYTHINKER_CLI_NO_AUTO_UPDATE=1` to disable the proactive
178
+ update check on shell startup (this is the same opt-out the PyPI/uv install
179
+ path uses — one knob, both flows).
180
+
181
+ **Uninstall:** Apps & Features → *Pythinker Code* → Uninstall. The uninstaller
182
+ removes the install directory and reverts the user-PATH edit. A new shell will
183
+ no longer find `pythinker`.
184
+
185
+ **Per-machine install** (multi-user / IT-managed boxes): pass `/ALLUSERS` to
186
+ the installer from an admin console:
187
+
188
+ ```powershell
189
+ .\PythinkerSetup-x.y.z.exe /ALLUSERS
190
+ ```
191
+
192
+ This installs to `%ProgramFiles%\Pythinker` and registers PATH at the HKLM
193
+ scope. The default (no flag) remains per-user.
194
+
148
195
  ### ✨ Recommended install (clean, with logo)
149
196
 
150
197
  ```sh
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "pythinker-code"
3
- version = "0.10.0"
3
+ version = "0.12.0"
4
4
  description = "Pythinker Code is your next CLI agent."
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.12"
@@ -26,7 +26,7 @@ dependencies = [
26
26
  "aiofiles>=24.0,<26.0",
27
27
  "aiohttp==3.13.4",
28
28
  "typer==0.21.1",
29
- "pythinker-core[contrib]==1.1.0",
29
+ "pythinker-core[contrib]==1.1.1",
30
30
  # notify-py (via batrachian-toad) caps loguru at <=0.6.0 on 3.14+.
31
31
  "loguru>=0.6.0,<0.7",
32
32
  "prompt-toolkit==3.0.52",
@@ -15,6 +15,30 @@ GitHub Releases page; `0.8.0` is the new starting line.
15
15
 
16
16
  ## Unreleased
17
17
 
18
+ ## 0.12.0 (2026-05-22)
19
+
20
+ ### What changed in this release
21
+
22
+ - **Native Windows installer.** A signed `PythinkerSetup-x.y.z.exe` is now attached to every GitHub Release — install Pythinker on Windows with one download, no Python / Node / uv prerequisite. The wizard installs per-user (no UAC) into `%LOCALAPPDATA%\Programs\Pythinker`, registers `pythinker` on the user PATH, and broadcasts `WM_SETTINGCHANGE` so new shells pick the change up immediately. Uninstall reverses the PATH edit. Code-signing is wired through `signtool` and ships unsigned until the Authenticode cert lands; from that point forward the same CI job produces signed installers with no code change required.
23
+ - **In-app updates for the native build.** `pythinker update` from a native install detects the build (via a `.pythinker-native` sentinel next to `pythinker.exe`), fetches the latest GitHub Release asset, verifies its SHA-256, and re-runs the installer silently (`/VERYSILENT /SUPPRESSMSGBOXES /NORESTART`). The `PYTHINKER_CLI_NO_AUTO_UPDATE` opt-out env var that the PyPI path already honors now also gates the native auto-update path — one knob, both flows. The update banner shows a human-readable `PythinkerSetup-x.y.z.exe` line instead of leaking internal markers.
24
+ - **Tag-triggered Windows build pipeline.** A new `.github/workflows/windows-installer.yml` runs on every `pythinker-code-v*` tag, freezes `pythinker` via PyInstaller (`--onedir` for faster startup and fewer AV false positives), compiles the Inno Setup script, signs the result if `WINDOWS_CERT_PFX_BASE64` / `WINDOWS_CERT_PASSWORD` secrets are populated, and uploads the `.exe` plus its `.sha256` to the corresponding Release.
25
+ - **Shell terminal rhythm refinements.** Tone tokens, motion timing, and theme palette were retuned (sky-blue `#7dd3fc` / `#93c5fd` accents) so transcript rows, motion status, and dialog surfaces breathe consistently. UI snapshot tests updated to lock the new rhythm in place.
26
+
27
+ Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.12.0`, or — on Windows — download `PythinkerSetup-0.12.0.exe` from the Releases page.
28
+
29
+ ## 0.11.0 (2026-05-22)
30
+
31
+ ### What changed in this release
32
+
33
+ - **Fixed PyPI install conflict (was failing on Windows and every other platform).** `pip install pythinker-code==0.10.0` failed with `fastmcp 3.2.0 depends on mcp<2.0 and >=1.24.0` vs `pythinker-core 1.1.0 depends on mcp<1.17 and >=1`. 0.11.0 pins the republished `pythinker-core 1.1.1`, whose widened `mcp>=1.23,<2` constraint lets the resolver pick a single `mcp` version compatible with `fastmcp==3.2.0`.
34
+ - **Blackbox-style TUI port — phase 1.** Shell design primitives, compact transcript activity rows, blackbox-style motion status, standardized shell dialogs, aligned footer status styling, and a restyled tool-result surface land together. The TUI now shares a coherent visual language across rows, dialogs, and motion.
35
+ - **Refreshed TUI accent palette.** Dark/light theme accent retuned to a cleaner sky-blue (`#7dd3fc` dark, `#0284c7` light) for better contrast against the new tool-result surfaces.
36
+ - **Markdown + report polish.** Report spacing and markdown code blocks render with improved breathing room and consistent fences.
37
+ - **Rotating thinking-word indicator restored** with a leading space before the live stream status so the spinner no longer abuts surrounding text.
38
+ - **Internal audit + smoke evaluation.** A blackbox TUI scope map, prompt/agent audit, and a recorded visual smoke evaluation join the repo to govern future TUI work.
39
+
40
+ Upgrade with `pythinker update` or `pip install --upgrade pythinker-code==0.11.0`.
41
+
18
42
  ## 0.10.0 (2026-05-22)
19
43
 
20
44
  ### What changed in this release
@@ -0,0 +1,38 @@
1
+ """Native-build detection + GitHub Releases lookup helpers.
2
+
3
+ The Windows native installer drops a sentinel file ``.pythinker-native`` next
4
+ to the PyInstaller-frozen ``pythinker.exe``. The runtime probes for that file
5
+ to decide whether ``pythinker update`` should re-run the native installer
6
+ instead of shelling out to ``uv tool upgrade``.
7
+ """
8
+
9
+ from __future__ import annotations
10
+
11
+ import sys
12
+ from pathlib import Path
13
+
14
+ GITHUB_REPO = "mohamed-elkholy95/Pythinker-Code"
15
+ SENTINEL_FILENAME = ".pythinker-native"
16
+
17
+
18
+ def is_native_build() -> bool:
19
+ """True iff this process is a Pythinker native (Inno Setup) install."""
20
+ if not getattr(sys, "frozen", False):
21
+ return False
22
+ try:
23
+ exe_dir = Path(sys.executable).resolve().parent
24
+ except OSError:
25
+ return False
26
+ return (exe_dir / SENTINEL_FILENAME).is_file()
27
+
28
+
29
+ def native_installer_release_url(channel: str = "latest") -> str:
30
+ """Return the GitHub API URL for the requested release channel."""
31
+ if channel == "latest":
32
+ return f"https://api.github.com/repos/{GITHUB_REPO}/releases/latest"
33
+ return f"https://api.github.com/repos/{GITHUB_REPO}/releases/tags/{channel}"
34
+
35
+
36
+ def native_installer_asset_name(version: str) -> str:
37
+ """Filename of the installer asset attached to a Release."""
38
+ return f"PythinkerSetup-{version}.exe"
@@ -19,10 +19,10 @@ from dataclasses import dataclass, field
19
19
  from pathlib import Path
20
20
 
21
21
  from rich.console import Group, RenderableType
22
- from rich.style import Style as RichStyle
23
22
  from rich.text import Text
24
23
 
25
24
  from pythinker_code.ui.shell.components.render_utils import truncate_to_width
25
+ from pythinker_code.ui.shell.design_system import ShellTone, render_segment_line
26
26
  from pythinker_code.ui.theme import tui_rich_style
27
27
 
28
28
  __all__ = [
@@ -196,31 +196,20 @@ def render_footer(state: FooterState, *, width: int) -> RenderableType:
196
196
  pwd_truncated = truncate_to_width(pwd, max(1, width))
197
197
  pwd_text = Text(pwd_truncated, style=dim)
198
198
 
199
- stats_left_text, stats_left_plain = _build_stats_left(state)
199
+ _, stats_left_plain = _build_stats_left(state)
200
200
  if len(stats_left_plain) > width:
201
201
  truncated = truncate_to_width(stats_left_plain, width)
202
- stats_left_text = Text(truncated, style=dim)
203
202
  stats_left_plain = truncated
204
203
 
205
204
  right = _build_right_side(state, plain_left_width=len(stats_left_plain), width=width)
206
- if right:
207
- space = max(2, width - len(stats_left_plain) - len(right))
208
- # If even the minimum 2-space gap plus right doesn't fit, truncate right.
209
- if len(stats_left_plain) + 2 + len(right) > width:
210
- avail = width - len(stats_left_plain) - 2
211
- if avail > 0:
212
- right = truncate_to_width(right, avail, ellipsis="")
213
- space = max(0, width - len(stats_left_plain) - len(right))
214
- else:
215
- right = ""
216
- space = 0
217
- stats_line = Text()
218
- stats_line.append_text(stats_left_text)
219
- if right:
220
- stats_line.append(" " * space, style=dim)
221
- stats_line.append(right, style=dim + RichStyle(bold=False))
222
- else:
223
- stats_line = stats_left_text
205
+ stats_line = render_segment_line(
206
+ left=[stats_left_plain],
207
+ right=[right],
208
+ width=width,
209
+ tone=ShellTone.MUTED,
210
+ )
211
+ if state.context_percent is not None and state.context_percent > 70:
212
+ stats_line.stylize(tui_rich_style("warning" if state.context_percent <= 90 else "error"))
224
213
 
225
214
  children: list[RenderableType] = [pwd_text, stats_line]
226
215
  if state.extension_statuses:
@@ -0,0 +1,105 @@
1
+ """Shared Rich primitives for the Pythinker shell TUI."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from enum import StrEnum
6
+ from typing import Literal
7
+
8
+ from rich.console import Group, RenderableType
9
+ from rich.style import Style
10
+ from rich.text import Text
11
+
12
+ from pythinker_code.ui.shell.components.render_utils import cell_width, truncate_to_width
13
+
14
+
15
+ class ShellTone(StrEnum):
16
+ NORMAL = "normal"
17
+ MUTED = "muted"
18
+ ACCENT = "accent"
19
+ SUCCESS = "success"
20
+ WARNING = "warning"
21
+ ERROR = "error"
22
+ INFO = "info"
23
+
24
+
25
+ StatusName = Literal[
26
+ "running",
27
+ "completed",
28
+ "failed",
29
+ "denied",
30
+ "interrupted",
31
+ "waiting",
32
+ "question",
33
+ "approval",
34
+ ]
35
+
36
+
37
+ _TONE_STYLES: dict[ShellTone, Style] = {
38
+ ShellTone.NORMAL: Style(color="default"),
39
+ ShellTone.MUTED: Style(color="grey50"),
40
+ ShellTone.ACCENT: Style(color="#7dd3fc"),
41
+ ShellTone.SUCCESS: Style(color="green"),
42
+ ShellTone.WARNING: Style(color="yellow"),
43
+ ShellTone.ERROR: Style(color="red"),
44
+ ShellTone.INFO: Style(color="#93c5fd"),
45
+ }
46
+
47
+ _STATUS: dict[StatusName, tuple[str, ShellTone]] = {
48
+ "running": ("●", ShellTone.ACCENT),
49
+ "completed": ("✓", ShellTone.SUCCESS),
50
+ "failed": ("!", ShellTone.ERROR),
51
+ "denied": ("×", ShellTone.WARNING),
52
+ "interrupted": ("■", ShellTone.MUTED),
53
+ "waiting": ("○", ShellTone.MUTED),
54
+ "question": ("?", ShellTone.WARNING),
55
+ "approval": ("?", ShellTone.ACCENT),
56
+ }
57
+
58
+
59
+ def shell_style(tone: ShellTone) -> Style:
60
+ return _TONE_STYLES[tone]
61
+
62
+
63
+ def status_icon(name: StatusName) -> Text:
64
+ icon, tone = _STATUS[name]
65
+ return Text(icon, style=shell_style(tone))
66
+
67
+
68
+ def keyboard_hint(key: str, label: str) -> Text:
69
+ text = Text()
70
+ text.append(key, style=Style(color="cyan", bold=True))
71
+ if label:
72
+ text.append(f" {label}", style=shell_style(ShellTone.MUTED))
73
+ return text
74
+
75
+
76
+ def dialog_title(kind: StatusName, title: str) -> Text:
77
+ text = Text()
78
+ text.append_text(status_icon(kind))
79
+ text.append(f" {title}", style=Style(bold=True))
80
+ return text
81
+
82
+
83
+ def render_segment_line(
84
+ *,
85
+ left: list[str],
86
+ right: list[str],
87
+ width: int,
88
+ tone: ShellTone = ShellTone.MUTED,
89
+ ) -> Text:
90
+ left_text = " | ".join(part for part in left if part)
91
+ right_parts = [part for part in right if part]
92
+ right_text = " | ".join(right_parts)
93
+ if width <= 0:
94
+ return Text("")
95
+ while right_parts and cell_width(left_text) + 2 + cell_width(right_text) > width:
96
+ right_parts.pop()
97
+ right_text = " | ".join(right_parts)
98
+ if not right_text:
99
+ return Text(truncate_to_width(left_text, width), style=shell_style(tone))
100
+ gap = max(2, width - cell_width(left_text) - cell_width(right_text))
101
+ return Text(left_text + (" " * gap) + right_text, style=shell_style(tone))
102
+
103
+
104
+ def render_row(icon: str | Text, content: RenderableType) -> RenderableType:
105
+ return Group(Text.assemble(icon, " "), content)
@@ -5,7 +5,7 @@ from rich.console import RenderableType
5
5
  from rich.text import Text
6
6
 
7
7
  from pythinker_code.ui.shell.components import render_user_message
8
- from pythinker_code.ui.shell.prompt import PROMPT_SYMBOL
8
+ from pythinker_code.ui.shell.prompt import PROMPT_SYMBOL_AGENT_INPUT
9
9
  from pythinker_code.ui.tui_config import is_card_style
10
10
  from pythinker_code.utils.message import message_stringify
11
11
 
@@ -20,11 +20,11 @@ def render_user_echo(message: Message) -> RenderableType:
20
20
  text = message_stringify(message)
21
21
  if is_card_style():
22
22
  return render_user_message(text)
23
- return Text(f"{PROMPT_SYMBOL} {text}")
23
+ return Text(f"{PROMPT_SYMBOL_AGENT_INPUT} {text}")
24
24
 
25
25
 
26
26
  def render_user_echo_text(text: str) -> RenderableType:
27
27
  """Render the local prompt text exactly as the user saw it in the buffer."""
28
28
  if is_card_style():
29
29
  return render_user_message(text)
30
- return Text(f"{PROMPT_SYMBOL} {text}")
30
+ return Text(f"{PROMPT_SYMBOL_AGENT_INPUT} {text}")
@@ -0,0 +1,90 @@
1
+ """Blackbox-inspired motion helpers for the shell TUI."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import os
6
+ from dataclasses import dataclass
7
+
8
+ from rich.text import Text
9
+
10
+ from pythinker_code.soul import format_token_count
11
+ from pythinker_code.ui.shell.components.render_utils import cell_width
12
+ from pythinker_code.ui.shell.design_system import ShellTone, shell_style
13
+ from pythinker_code.utils.datetime import format_elapsed
14
+
15
+ _FRAMES = ("⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏")
16
+ _FRAME_INTERVAL_S = 0.08
17
+
18
+
19
+ @dataclass(frozen=True, slots=True)
20
+ class ActivitySnapshot:
21
+ label: str
22
+ elapsed_s: float
23
+ tokens: int = 0
24
+ token_rate: int | None = None
25
+ stalled: bool = False
26
+ interrupt_hint: str = ""
27
+ reduced_motion: bool = False
28
+
29
+
30
+ def reduced_motion_enabled() -> bool:
31
+ return os.environ.get("PYTHINKER_REDUCED_MOTION", "").strip().lower() in {
32
+ "1",
33
+ "true",
34
+ "yes",
35
+ "on",
36
+ }
37
+
38
+
39
+ def spinner_frame_at(elapsed_s: float, *, reduced_motion: bool = False) -> str:
40
+ if reduced_motion:
41
+ return "●"
42
+ index = int(max(0.0, elapsed_s) / _FRAME_INTERVAL_S) % len(_FRAMES)
43
+ return _FRAMES[index]
44
+
45
+
46
+ def _candidate_parts(snapshot: ActivitySnapshot) -> list[str]:
47
+ parts = [format_elapsed(snapshot.elapsed_s)]
48
+ if snapshot.tokens:
49
+ parts.append(f"↓ {format_token_count(snapshot.tokens)} tokens")
50
+ if snapshot.token_rate:
51
+ parts.append(f"{snapshot.token_rate} t/s")
52
+ if snapshot.interrupt_hint:
53
+ hint = "esc" if snapshot.interrupt_hint == "esc to interrupt" else snapshot.interrupt_hint
54
+ parts.append(hint)
55
+ return parts
56
+
57
+
58
+ def _activity_label(label: str) -> str:
59
+ stripped = label.rstrip()
60
+ if stripped.endswith(("…", "...")):
61
+ return stripped
62
+ return f"{stripped}…"
63
+
64
+
65
+ def activity_status_line(snapshot: ActivitySnapshot, *, width: int | None = None) -> Text:
66
+ reduced = snapshot.reduced_motion or reduced_motion_enabled()
67
+ glyph_style = ShellTone.WARNING if snapshot.stalled else ShellTone.ACCENT
68
+ text = Text(
69
+ spinner_frame_at(snapshot.elapsed_s, reduced_motion=reduced),
70
+ style=shell_style(glyph_style),
71
+ )
72
+ text.append(" ")
73
+ text.append(
74
+ _activity_label(snapshot.label),
75
+ style="italic" if snapshot.label.lower() == "thinking" else "",
76
+ )
77
+
78
+ parts = _candidate_parts(snapshot)
79
+ if width is not None:
80
+ base_width = cell_width(text.plain)
81
+ kept: list[str] = []
82
+ for part in parts:
83
+ candidate = " · ".join([*kept, part])
84
+ if base_width + 3 + cell_width(candidate) <= width:
85
+ kept.append(part)
86
+ parts = kept
87
+ if parts:
88
+ text.append(" ")
89
+ text.append(f"({' · '.join(parts)})", style=shell_style(ShellTone.MUTED))
90
+ return text
@@ -43,7 +43,7 @@ SPINNER_VERBS: tuple[str, ...] = (
43
43
  "Channelling",
44
44
  "Choreographing",
45
45
  "Churning",
46
- "Clauding",
46
+ "Pythinking",
47
47
  "Coalescing",
48
48
  "Cogitating",
49
49
  "Combobulating",
@@ -20,8 +20,10 @@ from pythinker_code.ui.shell.components.bash_execution import (
20
20
  BashExecutionState,
21
21
  BashStatus,
22
22
  format_bash_command_for_header,
23
+ render_bash_execution,
23
24
  render_bash_result_output,
24
25
  )
26
+ from pythinker_code.ui.shell.components.render_utils import sanitize_ansi
25
27
  from pythinker_code.ui.shell.tool_renderers import (
26
28
  ToolRenderContext,
27
29
  ToolRenderDefinition,
@@ -67,6 +69,8 @@ def _render_call(ctx: ToolRenderContext) -> RenderableType | None:
67
69
  description = as_str(args.get("description"))
68
70
  suffix = f" (background: {description})" if description else " (background)"
69
71
  line.append_text(fg("muted", suffix))
72
+ if ctx.has_result and command:
73
+ return None
70
74
  return running_spinner(line, execution_started=ctx.execution_started, has_result=ctx.has_result)
71
75
 
72
76
 
@@ -88,15 +92,39 @@ def _render_result(ctx: ToolRenderContext, result: ToolResultPayload) -> Rendera
88
92
  status: BashStatus = "error" if result.is_error else "complete"
89
93
  bash_state = BashExecutionState(
90
94
  command=command,
91
- output=result.text or "",
95
+ output=sanitize_ansi(result.text or ""),
92
96
  status=status,
93
97
  exit_code=None if not result.is_error else 1,
94
98
  expanded=ctx.expanded,
95
99
  header_suffix="".join(suffix_parts),
96
100
  )
101
+ if _is_short_inline_output(bash_state.output):
102
+ return _render_inline_completed_result(bash_state, is_error=result.is_error)
103
+ if ctx.has_result:
104
+ return render_bash_execution(bash_state, width=ctx.width)
97
105
  return render_bash_result_output(bash_state, width=ctx.width)
98
106
 
99
107
 
108
+ def _is_short_inline_output(output: str) -> bool:
109
+ text = output.strip()
110
+ return bool(text) and "\n" not in text and len(text) <= 80
111
+
112
+
113
+ def _render_inline_completed_result(state: BashExecutionState, *, is_error: bool) -> Text:
114
+ status_style = tui_rich_style("error" if is_error else "success")
115
+ line = Text("✘ " if is_error else "✔ ", style=status_style)
116
+ line.append("$ ", style=tui_rich_style("bash_mode") + RichStyle(bold=True))
117
+ line.append(
118
+ format_bash_command_for_header(state.command, expanded=state.expanded),
119
+ style=tui_rich_style("bash_mode") + RichStyle(bold=True),
120
+ )
121
+ if state.header_suffix:
122
+ line.append(state.header_suffix, style=tui_rich_style("muted"))
123
+ line.append(" · ", style=tui_rich_style("muted"))
124
+ line.append(state.output.strip(), style=tui_rich_style("error" if is_error else "muted"))
125
+ return line
126
+
127
+
100
128
  SHELL_RENDERER = ToolRenderDefinition(
101
129
  name=_TOOL_NAME,
102
130
  label="bash",
@@ -11,7 +11,7 @@ import json
11
11
  from rich.console import Group, RenderableType
12
12
  from rich.text import Text
13
13
 
14
- from pythinker_code.ui.shell.components import sanitize_ansi
14
+ from pythinker_code.ui.shell.components.render_utils import sanitize_ansi
15
15
  from pythinker_code.ui.shell.tool_renderers import (
16
16
  ToolRenderContext,
17
17
  ToolRenderDefinition,
@@ -152,7 +152,9 @@ def _render_result(ctx: ToolRenderContext, result: ToolResultPayload) -> Rendera
152
152
  collapsed_max_lines=0,
153
153
  style_token="error",
154
154
  )
155
- return body if body.plain else None
155
+ if not body.plain:
156
+ return None
157
+ return body
156
158
 
157
159
 
158
160
  TODO_RENDERER = ToolRenderDefinition(