pythinker-code 0.27.0__tar.gz → 0.28.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 (855) hide show
  1. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/PKG-INFO +59 -52
  2. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/README.md +53 -46
  3. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/pyproject.toml +6 -6
  4. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/CHANGELOG.md +21 -3
  5. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/__main__.py +2 -2
  6. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/agents/default/agent.yaml +3 -0
  7. pythinker_code-0.28.0/src/pythinker_code/agents/default/judge.yaml +56 -0
  8. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/agents/default/plan.yaml +1 -1
  9. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/agents/default/system.md +17 -5
  10. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/app.py +5 -9
  11. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/auth/openai.py +272 -30
  12. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/auth/platforms.py +43 -5
  13. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/cli/__init__.py +2 -2
  14. pythinker_code-0.28.0/src/pythinker_code/cli/update.py +69 -0
  15. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/config.py +10 -1
  16. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/execution_profiles.py +2 -0
  17. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/feedback.py +20 -3
  18. pythinker_code-0.28.0/src/pythinker_code/feedback_repo.py +23 -0
  19. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/llm.py +8 -1
  20. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/native.py +1 -1
  21. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/skills/pythinker-code-help/SKILL.md +4 -4
  22. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/soul/agent.py +7 -22
  23. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/soul/permission.py +53 -5
  24. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/subagents/runner.py +1 -0
  25. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/agent/description.md +4 -3
  26. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/__init__.py +125 -40
  27. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/components/bash_execution.py +2 -2
  28. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/components/bordered_loader.py +6 -1
  29. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/components/tool_execution.py +2 -2
  30. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/design_system.py +3 -2
  31. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/glyphs.py +30 -13
  32. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/mcp_status.py +16 -10
  33. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/motion.py +9 -8
  34. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/prompt.py +8 -4
  35. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/slash.py +23 -11
  36. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/tool_renderers/_render_utils.py +8 -3
  37. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/tool_renderers/agent.py +5 -5
  38. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/update.py +222 -160
  39. pythinker_code-0.28.0/src/pythinker_code/ui/shell/update_orchestrator.py +485 -0
  40. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/visualize/_activity_tree.py +14 -4
  41. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/visualize/_blocks.py +156 -7
  42. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/visualize/_btw_panel.py +6 -1
  43. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/visualize/_live_view.py +36 -3
  44. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/visualize/_worklog.py +11 -2
  45. pythinker_code-0.28.0/src/pythinker_code/ui/terminal_capabilities.py +90 -0
  46. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/theme.py +99 -47
  47. pythinker_code-0.27.0/src/pythinker_code/web/static/assets/_baseUniq-DMfW9l69.js → pythinker_code-0.28.0/src/pythinker_code/web/static/assets/_baseUniq-GashHLgw.js +1 -1
  48. pythinker_code-0.27.0/src/pythinker_code/web/static/assets/arc-CNnQ_qgI.js → pythinker_code-0.28.0/src/pythinker_code/web/static/assets/arc-DEWPFwW9.js +1 -1
  49. pythinker_code-0.27.0/src/pythinker_code/web/static/assets/architectureDiagram-VXUJARFQ-PQYSR_Co.js → pythinker_code-0.28.0/src/pythinker_code/web/static/assets/architectureDiagram-VXUJARFQ-Dwj_75SA.js +1 -1
  50. pythinker_code-0.27.0/src/pythinker_code/web/static/assets/blockDiagram-VD42YOAC-dWpUsIm1.js → pythinker_code-0.28.0/src/pythinker_code/web/static/assets/blockDiagram-VD42YOAC-BimuzGAk.js +1 -1
  51. pythinker_code-0.27.0/src/pythinker_code/web/static/assets/c4Diagram-YG6GDRKO-FAUDt5mg.js → pythinker_code-0.28.0/src/pythinker_code/web/static/assets/c4Diagram-YG6GDRKO-B8L7fvII.js +1 -1
  52. pythinker_code-0.28.0/src/pythinker_code/web/static/assets/channel-B_RyZ3Hg.js +1 -0
  53. pythinker_code-0.27.0/src/pythinker_code/web/static/assets/chunk-4BX2VUAB-DRApifnv.js → pythinker_code-0.28.0/src/pythinker_code/web/static/assets/chunk-4BX2VUAB-qrOmRQpW.js +1 -1
  54. pythinker_code-0.27.0/src/pythinker_code/web/static/assets/chunk-55IACEB6-C176nFT5.js → pythinker_code-0.28.0/src/pythinker_code/web/static/assets/chunk-55IACEB6-tr65WtB9.js +1 -1
  55. pythinker_code-0.27.0/src/pythinker_code/web/static/assets/chunk-B4BG7PRW-DRkAssSa.js → pythinker_code-0.28.0/src/pythinker_code/web/static/assets/chunk-B4BG7PRW-BIL16yOB.js +1 -1
  56. pythinker_code-0.27.0/src/pythinker_code/web/static/assets/chunk-DI55MBZ5-B0_beBOr.js → pythinker_code-0.28.0/src/pythinker_code/web/static/assets/chunk-DI55MBZ5-BhTHAnWR.js +1 -1
  57. pythinker_code-0.27.0/src/pythinker_code/web/static/assets/chunk-FMBD7UC4-C1rSyssd.js → pythinker_code-0.28.0/src/pythinker_code/web/static/assets/chunk-FMBD7UC4-CJGXTY-C.js +1 -1
  58. pythinker_code-0.27.0/src/pythinker_code/web/static/assets/chunk-QN33PNHL-WrQm9ejt.js → pythinker_code-0.28.0/src/pythinker_code/web/static/assets/chunk-QN33PNHL-BEdYgE4-.js +1 -1
  59. pythinker_code-0.27.0/src/pythinker_code/web/static/assets/chunk-QZHKN3VN-Df-UuTwz.js → pythinker_code-0.28.0/src/pythinker_code/web/static/assets/chunk-QZHKN3VN-CcwBy9_m.js +1 -1
  60. pythinker_code-0.27.0/src/pythinker_code/web/static/assets/chunk-TZMSLE5B-BjFtBBPf.js → pythinker_code-0.28.0/src/pythinker_code/web/static/assets/chunk-TZMSLE5B-BubpIDxH.js +1 -1
  61. pythinker_code-0.28.0/src/pythinker_code/web/static/assets/classDiagram-2ON5EDUG-Bq3OpdHm.js +1 -0
  62. pythinker_code-0.28.0/src/pythinker_code/web/static/assets/classDiagram-v2-WZHVMYZB-Bq3OpdHm.js +1 -0
  63. pythinker_code-0.28.0/src/pythinker_code/web/static/assets/clone-GvlpQ0ej.js +1 -0
  64. pythinker_code-0.27.0/src/pythinker_code/web/static/assets/code-block-IT6T5CEO-BRYo-pOg.js → pythinker_code-0.28.0/src/pythinker_code/web/static/assets/code-block-IT6T5CEO-D04qHW6c.js +1 -1
  65. pythinker_code-0.27.0/src/pythinker_code/web/static/assets/cose-bilkent-S5V4N54A-DhRlqauq.js → pythinker_code-0.28.0/src/pythinker_code/web/static/assets/cose-bilkent-S5V4N54A-BPawTe1E.js +1 -1
  66. pythinker_code-0.27.0/src/pythinker_code/web/static/assets/cytoscape.esm-BFVia8Ox.js → pythinker_code-0.28.0/src/pythinker_code/web/static/assets/cytoscape.esm-RnhU_9Wa.js +1 -1
  67. pythinker_code-0.27.0/src/pythinker_code/web/static/assets/dagre-6UL2VRFP-Ch9fNJcv.js → pythinker_code-0.28.0/src/pythinker_code/web/static/assets/dagre-6UL2VRFP-UWFQqM0K.js +1 -1
  68. pythinker_code-0.27.0/src/pythinker_code/web/static/assets/diagram-PSM6KHXK-CSI-D5SY.js → pythinker_code-0.28.0/src/pythinker_code/web/static/assets/diagram-PSM6KHXK-CLjjfotY.js +1 -1
  69. pythinker_code-0.27.0/src/pythinker_code/web/static/assets/diagram-QEK2KX5R-PZR1OjEn.js → pythinker_code-0.28.0/src/pythinker_code/web/static/assets/diagram-QEK2KX5R-qpL5YNE7.js +1 -1
  70. pythinker_code-0.27.0/src/pythinker_code/web/static/assets/diagram-S2PKOQOG-VR2QNfAH.js → pythinker_code-0.28.0/src/pythinker_code/web/static/assets/diagram-S2PKOQOG-CbFvh8Cw.js +1 -1
  71. pythinker_code-0.27.0/src/pythinker_code/web/static/assets/erDiagram-Q2GNP2WA-B4HWjVZz.js → pythinker_code-0.28.0/src/pythinker_code/web/static/assets/erDiagram-Q2GNP2WA-CjYV8vm9.js +1 -1
  72. pythinker_code-0.27.0/src/pythinker_code/web/static/assets/flowDiagram-NV44I4VS-DQcqtixb.js → pythinker_code-0.28.0/src/pythinker_code/web/static/assets/flowDiagram-NV44I4VS-C2fVr1_G.js +1 -1
  73. pythinker_code-0.27.0/src/pythinker_code/web/static/assets/ganttDiagram-JELNMOA3-B9f8DQ6x.js → pythinker_code-0.28.0/src/pythinker_code/web/static/assets/ganttDiagram-JELNMOA3-DLZrDPZ0.js +1 -1
  74. pythinker_code-0.27.0/src/pythinker_code/web/static/assets/gitGraphDiagram-NY62KEGX-Bg4pzbTs.js → pythinker_code-0.28.0/src/pythinker_code/web/static/assets/gitGraphDiagram-NY62KEGX-DuEcFZx1.js +1 -1
  75. pythinker_code-0.27.0/src/pythinker_code/web/static/assets/graph-C9kGixri.js → pythinker_code-0.28.0/src/pythinker_code/web/static/assets/graph-B2G9FUQn.js +1 -1
  76. pythinker_code-0.27.0/src/pythinker_code/web/static/assets/index--efV__RQ.js → pythinker_code-0.28.0/src/pythinker_code/web/static/assets/index-B87_cLpx.js +1 -1
  77. pythinker_code-0.27.0/src/pythinker_code/web/static/assets/index-2vWeToDr.js → pythinker_code-0.28.0/src/pythinker_code/web/static/assets/index-CWw7hKJL.js +1 -1
  78. pythinker_code-0.27.0/src/pythinker_code/web/static/assets/index-Dn_nK-59.js → pythinker_code-0.28.0/src/pythinker_code/web/static/assets/index-DaTrJm4j.js +2 -2
  79. pythinker_code-0.27.0/src/pythinker_code/web/static/assets/infoDiagram-WHAUD3N6-Bhq_AB7C.js → pythinker_code-0.28.0/src/pythinker_code/web/static/assets/infoDiagram-WHAUD3N6-BP4wXDgY.js +1 -1
  80. pythinker_code-0.27.0/src/pythinker_code/web/static/assets/journeyDiagram-XKPGCS4Q-DIRspuBf.js → pythinker_code-0.28.0/src/pythinker_code/web/static/assets/journeyDiagram-XKPGCS4Q-DRoRmtcl.js +1 -1
  81. pythinker_code-0.27.0/src/pythinker_code/web/static/assets/kanban-definition-3W4ZIXB7-Dio69EXI.js → pythinker_code-0.28.0/src/pythinker_code/web/static/assets/kanban-definition-3W4ZIXB7-ChS3i5hy.js +1 -1
  82. pythinker_code-0.27.0/src/pythinker_code/web/static/assets/layout-D297gqp3.js → pythinker_code-0.28.0/src/pythinker_code/web/static/assets/layout-Ci-xrvgb.js +1 -1
  83. pythinker_code-0.27.0/src/pythinker_code/web/static/assets/linear-DqxkCJMI.js → pythinker_code-0.28.0/src/pythinker_code/web/static/assets/linear-B2P_3hKc.js +1 -1
  84. pythinker_code-0.27.0/src/pythinker_code/web/static/assets/mermaid-VLURNSYL-D5Ytdlln.js → pythinker_code-0.28.0/src/pythinker_code/web/static/assets/mermaid-VLURNSYL-DT1aPIMQ.js +37 -37
  85. pythinker_code-0.28.0/src/pythinker_code/web/static/assets/mermaid-VLURNSYL-YVZJy7__.css +1 -0
  86. pythinker_code-0.27.0/src/pythinker_code/web/static/assets/mermaid.core-D8hbsme0.js → pythinker_code-0.28.0/src/pythinker_code/web/static/assets/mermaid.core-CIXBcBwk.js +5 -5
  87. pythinker_code-0.27.0/src/pythinker_code/web/static/assets/min-Bh6x6hFE.js → pythinker_code-0.28.0/src/pythinker_code/web/static/assets/min-CXhhlW7H.js +1 -1
  88. pythinker_code-0.27.0/src/pythinker_code/web/static/assets/mindmap-definition-VGOIOE7T-Pz_BTd5r.js → pythinker_code-0.28.0/src/pythinker_code/web/static/assets/mindmap-definition-VGOIOE7T-DTIinMnI.js +1 -1
  89. pythinker_code-0.27.0/src/pythinker_code/web/static/assets/pieDiagram-ADFJNKIX-CnlRsjSR.js → pythinker_code-0.28.0/src/pythinker_code/web/static/assets/pieDiagram-ADFJNKIX-CIBCliKO.js +1 -1
  90. pythinker_code-0.27.0/src/pythinker_code/web/static/assets/quadrantDiagram-AYHSOK5B-fnwm0VTI.js → pythinker_code-0.28.0/src/pythinker_code/web/static/assets/quadrantDiagram-AYHSOK5B-CxSjcZcX.js +1 -1
  91. pythinker_code-0.27.0/src/pythinker_code/web/static/assets/requirementDiagram-UZGBJVZJ-DHMgAblB.js → pythinker_code-0.28.0/src/pythinker_code/web/static/assets/requirementDiagram-UZGBJVZJ-DAAVV1OD.js +1 -1
  92. pythinker_code-0.27.0/src/pythinker_code/web/static/assets/sankeyDiagram-TZEHDZUN-CZHPPGSM.js → pythinker_code-0.28.0/src/pythinker_code/web/static/assets/sankeyDiagram-TZEHDZUN-DFebIFvN.js +1 -1
  93. pythinker_code-0.27.0/src/pythinker_code/web/static/assets/sequenceDiagram-WL72ISMW-CTSHj8Ll.js → pythinker_code-0.28.0/src/pythinker_code/web/static/assets/sequenceDiagram-WL72ISMW-DioeBndC.js +1 -1
  94. pythinker_code-0.27.0/src/pythinker_code/web/static/assets/stateDiagram-FKZM4ZOC-BHXHgUPH.js → pythinker_code-0.28.0/src/pythinker_code/web/static/assets/stateDiagram-FKZM4ZOC-QgkZgi2p.js +1 -1
  95. pythinker_code-0.28.0/src/pythinker_code/web/static/assets/stateDiagram-v2-4FDKWEC3-sBpGXbnZ.js +1 -0
  96. pythinker_code-0.27.0/src/pythinker_code/web/static/assets/timeline-definition-IT6M3QCI-Dngdul0S.js → pythinker_code-0.28.0/src/pythinker_code/web/static/assets/timeline-definition-IT6M3QCI-BDygaett.js +1 -1
  97. pythinker_code-0.27.0/src/pythinker_code/web/static/assets/treemap-KMMF4GRG-RF3499L1.js → pythinker_code-0.28.0/src/pythinker_code/web/static/assets/treemap-KMMF4GRG-B-glFAnf.js +1 -1
  98. pythinker_code-0.27.0/src/pythinker_code/web/static/assets/xychartDiagram-PRI3JC2R-Di8-sSQy.js → pythinker_code-0.28.0/src/pythinker_code/web/static/assets/xychartDiagram-PRI3JC2R-DAXy-uTd.js +1 -1
  99. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/index.html +1 -1
  100. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/install.ps1 +63 -27
  101. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/install.sh +14 -5
  102. pythinker_code-0.27.0/src/pythinker_code/cli/update.py +0 -26
  103. pythinker_code-0.27.0/src/pythinker_code/web/static/assets/channel-d_JMQytX.js +0 -1
  104. pythinker_code-0.27.0/src/pythinker_code/web/static/assets/classDiagram-2ON5EDUG-MtuanyI0.js +0 -1
  105. pythinker_code-0.27.0/src/pythinker_code/web/static/assets/classDiagram-v2-WZHVMYZB-MtuanyI0.js +0 -1
  106. pythinker_code-0.27.0/src/pythinker_code/web/static/assets/clone-Va3amHzi.js +0 -1
  107. pythinker_code-0.27.0/src/pythinker_code/web/static/assets/mermaid-VLURNSYL-B2P5VJ9v.css +0 -1
  108. pythinker_code-0.27.0/src/pythinker_code/web/static/assets/stateDiagram-v2-4FDKWEC3-BGInGpxc.js +0 -1
  109. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/LICENSE +0 -0
  110. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/NOTICE +0 -0
  111. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/__init__.py +0 -0
  112. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/acp/AGENTS.md +0 -0
  113. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/acp/__init__.py +0 -0
  114. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/acp/convert.py +0 -0
  115. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/acp/host.py +0 -0
  116. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/acp/mcp.py +0 -0
  117. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/acp/server.py +0 -0
  118. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/acp/session.py +0 -0
  119. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/acp/tools.py +0 -0
  120. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/acp/types.py +0 -0
  121. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/acp/version.py +0 -0
  122. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/agents/default/code_reviewer.yaml +0 -0
  123. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/agents/default/coder.yaml +0 -0
  124. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/agents/default/debugger.yaml +0 -0
  125. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/agents/default/explore.yaml +0 -0
  126. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/agents/default/implementer.yaml +0 -0
  127. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/agents/default/review.yaml +0 -0
  128. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/agents/default/security_reviewer.yaml +0 -0
  129. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/agents/default/verifier.yaml +0 -0
  130. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/agents/okabe/agent.yaml +0 -0
  131. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/agentspec.py +0 -0
  132. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/approval_runtime/__init__.py +0 -0
  133. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/approval_runtime/models.py +0 -0
  134. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/approval_runtime/runtime.py +0 -0
  135. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/auth/__init__.py +0 -0
  136. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/auth/anthropic_direct.py +0 -0
  137. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/auth/deepseek.py +0 -0
  138. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/auth/github_feedback.py +0 -0
  139. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/auth/lm_studio.py +0 -0
  140. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/auth/minimax.py +0 -0
  141. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/auth/oauth.py +0 -0
  142. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/auth/ollama.py +0 -0
  143. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/auth/opencode_go.py +0 -0
  144. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/auth/openrouter.py +0 -0
  145. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/background/__init__.py +0 -0
  146. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/background/agent_runner.py +0 -0
  147. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/background/ids.py +0 -0
  148. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/background/manager.py +0 -0
  149. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/background/models.py +0 -0
  150. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/background/store.py +0 -0
  151. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/background/summary.py +0 -0
  152. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/background/worker.py +0 -0
  153. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/cli/__main__.py +0 -0
  154. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/cli/_lazy_group.py +0 -0
  155. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/cli/debug.py +0 -0
  156. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/cli/export.py +0 -0
  157. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/cli/info.py +0 -0
  158. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/cli/mcp.py +0 -0
  159. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/cli/plugin.py +0 -0
  160. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/cli/review.py +0 -0
  161. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/cli/secscan.py +0 -0
  162. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/cli/security_scan.py +0 -0
  163. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/cli/skill.py +0 -0
  164. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/cli/toad.py +0 -0
  165. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/cli/vis.py +0 -0
  166. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/cli/web.py +0 -0
  167. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/constant.py +0 -0
  168. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/events.py +0 -0
  169. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/exception.py +0 -0
  170. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/extensions.py +0 -0
  171. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/file_restore.py +0 -0
  172. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/hooks/__init__.py +0 -0
  173. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/hooks/config.py +0 -0
  174. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/hooks/engine.py +0 -0
  175. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/hooks/events.py +0 -0
  176. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/hooks/runner.py +0 -0
  177. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/memory/__init__.py +0 -0
  178. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/memory/consolidation.py +0 -0
  179. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/memory/harvest.py +0 -0
  180. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/memory/recall.py +0 -0
  181. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/memory/recap.py +0 -0
  182. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/memory/retriever.py +0 -0
  183. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/memory/sanitize.py +0 -0
  184. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/metadata.py +0 -0
  185. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/notifications/__init__.py +0 -0
  186. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/notifications/llm.py +0 -0
  187. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/notifications/manager.py +0 -0
  188. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/notifications/models.py +0 -0
  189. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/notifications/notifier.py +0 -0
  190. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/notifications/store.py +0 -0
  191. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/notifications/wire.py +0 -0
  192. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/plugin/__init__.py +0 -0
  193. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/plugin/manager.py +0 -0
  194. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/plugin/tool.py +0 -0
  195. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/project_memory.py +0 -0
  196. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/prompt_templates.py +0 -0
  197. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/prompts/__init__.py +0 -0
  198. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/prompts/compact.md +0 -0
  199. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/prompts/init.md +0 -0
  200. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/py.typed +0 -0
  201. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/scratchpad.py +0 -0
  202. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/session.py +0 -0
  203. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/session_fork.py +0 -0
  204. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/session_state.py +0 -0
  205. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/share.py +0 -0
  206. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/skill/__init__.py +0 -0
  207. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/skill/flow/__init__.py +0 -0
  208. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/skill/flow/d2.py +0 -0
  209. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/skill/flow/mermaid.py +0 -0
  210. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/skill/lockfile.py +0 -0
  211. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/skills/check-impl-against-spec/SKILL.md +0 -0
  212. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/skills/create-pr/SKILL.md +0 -0
  213. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/skills/diagnose-ci-failures/SKILL.md +0 -0
  214. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/skills/fix-errors/SKILL.md +0 -0
  215. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/skills/implement-specs/SKILL.md +0 -0
  216. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/skills/pr-walkthrough/SKILL.md +0 -0
  217. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/skills/reproduce-bug-report/SKILL.md +0 -0
  218. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/skills/resolve-merge-conflicts/SKILL.md +0 -0
  219. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/skills/review-pr/SKILL.md +0 -0
  220. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/skills/skill-creator/SKILL.md +0 -0
  221. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/skills/spec-driven-implementation/SKILL.md +0 -0
  222. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/skills/write-product-spec/SKILL.md +0 -0
  223. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/skills/write-tech-spec/SKILL.md +0 -0
  224. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/soul/__init__.py +0 -0
  225. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/soul/approval.py +0 -0
  226. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/soul/btw.py +0 -0
  227. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/soul/compaction.py +0 -0
  228. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/soul/compaction_restore.py +0 -0
  229. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/soul/context.py +0 -0
  230. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/soul/denwarenji.py +0 -0
  231. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/soul/dynamic_injection.py +0 -0
  232. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/soul/dynamic_injections/__init__.py +0 -0
  233. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/soul/dynamic_injections/auto_mode.py +0 -0
  234. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/soul/dynamic_injections/plan_mode.py +0 -0
  235. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/soul/message.py +0 -0
  236. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/soul/pythinkersoul.py +0 -0
  237. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/soul/slash.py +0 -0
  238. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/soul/toolset.py +0 -0
  239. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/subagents/__init__.py +0 -0
  240. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/subagents/builder.py +0 -0
  241. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/subagents/core.py +0 -0
  242. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/subagents/discovery.py +0 -0
  243. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/subagents/git_context.py +0 -0
  244. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/subagents/models.py +0 -0
  245. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/subagents/output.py +0 -0
  246. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/subagents/registry.py +0 -0
  247. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/subagents/store.py +0 -0
  248. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/telemetry/__init__.py +0 -0
  249. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/telemetry/config.py +0 -0
  250. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/telemetry/crash.py +0 -0
  251. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/telemetry/errors.py +0 -0
  252. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/telemetry/metrics.py +0 -0
  253. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/telemetry/otel.py +0 -0
  254. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/telemetry/sentry.py +0 -0
  255. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/telemetry/sink.py +0 -0
  256. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/AGENTS.md +0 -0
  257. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/__init__.py +0 -0
  258. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/agent/__init__.py +0 -0
  259. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/ask_user/__init__.py +0 -0
  260. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/ask_user/description.md +0 -0
  261. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/background/__init__.py +0 -0
  262. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/background/handoff.md +0 -0
  263. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/background/input.md +0 -0
  264. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/background/list.md +0 -0
  265. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/background/output.md +0 -0
  266. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/background/stop.md +0 -0
  267. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/display.py +0 -0
  268. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/dmail/__init__.py +0 -0
  269. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/dmail/dmail.md +0 -0
  270. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/file/__init__.py +0 -0
  271. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/file/glob.md +0 -0
  272. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/file/glob.py +0 -0
  273. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/file/grep.md +0 -0
  274. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/file/grep_local.py +0 -0
  275. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/file/plan_mode.py +0 -0
  276. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/file/read.md +0 -0
  277. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/file/read.py +0 -0
  278. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/file/read_media.md +0 -0
  279. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/file/read_media.py +0 -0
  280. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/file/replace.md +0 -0
  281. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/file/replace.py +0 -0
  282. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/file/utils.py +0 -0
  283. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/file/write.md +0 -0
  284. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/file/write.py +0 -0
  285. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/memory/__init__.py +0 -0
  286. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/memory/memory.md +0 -0
  287. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/plan/__init__.py +0 -0
  288. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/plan/description.md +0 -0
  289. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/plan/enter.py +0 -0
  290. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/plan/enter_description.md +0 -0
  291. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/plan/handoff.py +0 -0
  292. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/plan/heroes.py +0 -0
  293. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/scratchpad/__init__.py +0 -0
  294. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/scratchpad/scratchpad_tool.md +0 -0
  295. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/shell/__init__.py +0 -0
  296. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/shell/bash.md +0 -0
  297. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/shell/powershell.md +0 -0
  298. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/skill/__init__.py +0 -0
  299. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/skill/description.md +0 -0
  300. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/test.py +0 -0
  301. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/think/__init__.py +0 -0
  302. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/think/think.md +0 -0
  303. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/todo/__init__.py +0 -0
  304. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/todo/set_todo_list.md +0 -0
  305. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/utils.py +0 -0
  306. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/web/__init__.py +0 -0
  307. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/web/_allowlist.py +0 -0
  308. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/web/fetch.md +0 -0
  309. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/web/fetch.py +0 -0
  310. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/web/search.md +0 -0
  311. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/tools/web/search.py +0 -0
  312. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/__init__.py +0 -0
  313. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/acp/__init__.py +0 -0
  314. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/print/__init__.py +0 -0
  315. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/print/visualize.py +0 -0
  316. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/components/__init__.py +0 -0
  317. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/components/base.py +0 -0
  318. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/components/diff.py +0 -0
  319. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/components/dynamic_border.py +0 -0
  320. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/components/footer.py +0 -0
  321. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/components/key_hints.py +0 -0
  322. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/components/markdown.py +0 -0
  323. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/components/messages.py +0 -0
  324. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/components/panel.py +0 -0
  325. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/components/render_utils.py +0 -0
  326. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/components/report.py +0 -0
  327. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/components/settings_list.py +0 -0
  328. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/components/special_messages.py +0 -0
  329. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/console.py +0 -0
  330. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/debug.py +0 -0
  331. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/echo.py +0 -0
  332. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/export_import.py +0 -0
  333. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/keyboard.py +0 -0
  334. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/keymap.py +0 -0
  335. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/model_picker.py +0 -0
  336. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/oauth.py +0 -0
  337. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/placeholders.py +0 -0
  338. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/render_constants.py +0 -0
  339. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/replay.py +0 -0
  340. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/selector.py +0 -0
  341. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/selectors/__init__.py +0 -0
  342. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/selectors/extension.py +0 -0
  343. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/selectors/oauth.py +0 -0
  344. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/selectors/settings.py +0 -0
  345. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/selectors/show_images.py +0 -0
  346. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/selectors/theme.py +0 -0
  347. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/selectors/thinking.py +0 -0
  348. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/session_picker.py +0 -0
  349. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/setup.py +0 -0
  350. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/spacing.py +0 -0
  351. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/spinner_words.py +0 -0
  352. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/startup.py +0 -0
  353. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/task_browser.py +0 -0
  354. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/tips.py +0 -0
  355. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/tool_renderers/__init__.py +0 -0
  356. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/tool_renderers/_file_diff.py +0 -0
  357. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/tool_renderers/ask_user.py +0 -0
  358. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/tool_renderers/background.py +0 -0
  359. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/tool_renderers/bash.py +0 -0
  360. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/tool_renderers/edit.py +0 -0
  361. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/tool_renderers/find.py +0 -0
  362. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/tool_renderers/generic.py +0 -0
  363. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/tool_renderers/grep.py +0 -0
  364. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/tool_renderers/plan.py +0 -0
  365. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/tool_renderers/read.py +0 -0
  366. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/tool_renderers/think.py +0 -0
  367. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/tool_renderers/todo.py +0 -0
  368. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/tool_renderers/web.py +0 -0
  369. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/tool_renderers/write.py +0 -0
  370. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/usage.py +0 -0
  371. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/usage_adapters/__init__.py +0 -0
  372. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/usage_adapters/anthropic_admin.py +0 -0
  373. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/usage_adapters/base.py +0 -0
  374. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/usage_adapters/deepseek.py +0 -0
  375. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/usage_adapters/minimax.py +0 -0
  376. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/usage_adapters/openai_admin.py +0 -0
  377. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/usage_adapters/openai_chatgpt.py +0 -0
  378. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/usage_adapters/opencode_go.py +0 -0
  379. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/usage_adapters/openrouter.py +0 -0
  380. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/usage_adapters/pythinker.py +0 -0
  381. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/usage_adapters/pythinker_ai.py +0 -0
  382. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/usage_render.py +0 -0
  383. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/visualize/__init__.py +0 -0
  384. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/visualize/_approval_panel.py +0 -0
  385. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/visualize/_dialog_shell.py +0 -0
  386. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/visualize/_input_router.py +0 -0
  387. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/visualize/_interactive.py +0 -0
  388. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/visualize/_question_panel.py +0 -0
  389. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/shell/visualize/_transcript.py +0 -0
  390. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/ui/tui_config.py +0 -0
  391. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/usage_ratelimit_cache.py +0 -0
  392. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/utils/__init__.py +0 -0
  393. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/utils/aiohttp.py +0 -0
  394. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/utils/aioqueue.py +0 -0
  395. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/utils/broadcast.py +0 -0
  396. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/utils/changelog.py +0 -0
  397. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/utils/clipboard.py +0 -0
  398. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/utils/datetime.py +0 -0
  399. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/utils/diff.py +0 -0
  400. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/utils/editor.py +0 -0
  401. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/utils/environment.py +0 -0
  402. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/utils/envvar.py +0 -0
  403. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/utils/export.py +0 -0
  404. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/utils/file_filter.py +0 -0
  405. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/utils/frontmatter.py +0 -0
  406. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/utils/io.py +0 -0
  407. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/utils/logging.py +0 -0
  408. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/utils/media_tags.py +0 -0
  409. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/utils/message.py +0 -0
  410. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/utils/path.py +0 -0
  411. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/utils/proctitle.py +0 -0
  412. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/utils/proxy.py +0 -0
  413. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/utils/pyinstaller.py +0 -0
  414. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/utils/rich/__init__.py +0 -0
  415. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/utils/rich/columns.py +0 -0
  416. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/utils/rich/diff_render.py +0 -0
  417. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/utils/rich/markdown.py +0 -0
  418. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/utils/rich/markdown_sample.md +0 -0
  419. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/utils/rich/markdown_sample_short.md +0 -0
  420. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/utils/rich/syntax.py +0 -0
  421. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/utils/sensitive.py +0 -0
  422. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/utils/server.py +0 -0
  423. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/utils/signals.py +0 -0
  424. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/utils/slashcmd.py +0 -0
  425. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/utils/sleep_inhibitor.py +0 -0
  426. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/utils/string.py +0 -0
  427. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/utils/subprocess_env.py +0 -0
  428. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/utils/term.py +0 -0
  429. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/utils/typing.py +0 -0
  430. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/vis/__init__.py +0 -0
  431. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/vis/api/__init__.py +0 -0
  432. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/vis/api/sessions.py +0 -0
  433. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/vis/api/statistics.py +0 -0
  434. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/vis/api/system.py +0 -0
  435. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/vis/app.py +0 -0
  436. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/vis/static/assets/highlighted-body-B3W2YXNL-CY1rtwrX.js +0 -0
  437. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/vis/static/assets/index-DSRInNnm.css +0 -0
  438. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/vis/static/assets/index-DgmTI2M_.js +0 -0
  439. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/vis/static/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
  440. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/vis/static/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
  441. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/vis/static/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
  442. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/vis/static/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
  443. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/vis/static/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
  444. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/vis/static/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
  445. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/vis/static/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
  446. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/vis/static/index.html +0 -0
  447. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/__init__.py +0 -0
  448. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/api/__init__.py +0 -0
  449. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/api/config.py +0 -0
  450. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/api/open_in.py +0 -0
  451. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/api/sessions.py +0 -0
  452. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/app.py +0 -0
  453. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/auth.py +0 -0
  454. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/models.py +0 -0
  455. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/runner/__init__.py +0 -0
  456. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/runner/messages.py +0 -0
  457. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/runner/process.py +0 -0
  458. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/runner/worker.py +0 -0
  459. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/_headers +0 -0
  460. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  461. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  462. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  463. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  464. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  465. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  466. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  467. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  468. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  469. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  470. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  471. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  472. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  473. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  474. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  475. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  476. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  477. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  478. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  479. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  480. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  481. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  482. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  483. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  484. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  485. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  486. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  487. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  488. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  489. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  490. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  491. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  492. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  493. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  494. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  495. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  496. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  497. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  498. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  499. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  500. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  501. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  502. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  503. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  504. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  505. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  506. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  507. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  508. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  509. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  510. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  511. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  512. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  513. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  514. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  515. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  516. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  517. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  518. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  519. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/abap-BdImnpbu.js +0 -0
  520. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/actionscript-3-CfeIJUat.js +0 -0
  521. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/ada-bCR0ucgS.js +0 -0
  522. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/andromeeda-C-Jbm3Hp.js +0 -0
  523. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/angular-html-CU67Zn6k.js +0 -0
  524. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/angular-ts-BwZT4LLn.js +0 -0
  525. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/apache-Pmp26Uib.js +0 -0
  526. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/apex-D8_7TLub.js +0 -0
  527. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/apl-dKokRX4l.js +0 -0
  528. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/applescript-Co6uUVPk.js +0 -0
  529. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/ara-BRHolxvo.js +0 -0
  530. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/asciidoc-Dv7Oe6Be.js +0 -0
  531. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/asm-D_Q5rh1f.js +0 -0
  532. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/astro-CbQHKStN.js +0 -0
  533. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/aurora-x-D-2ljcwZ.js +0 -0
  534. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/awk-DMzUqQB5.js +0 -0
  535. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/ayu-dark-CmMr59Fi.js +0 -0
  536. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/ballerina-BFfxhgS-.js +0 -0
  537. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/bat-BkioyH1T.js +0 -0
  538. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/beancount-k_qm7-4y.js +0 -0
  539. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/berry-uYugtg8r.js +0 -0
  540. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/bibtex-CHM0blh-.js +0 -0
  541. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/bicep-Bmn6On1c.js +0 -0
  542. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/blade-D4QpJJKB.js +0 -0
  543. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/bsl-BO_Y6i37.js +0 -0
  544. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/c-BIGW1oBm.js +0 -0
  545. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/c3-VCDPK7BO.js +0 -0
  546. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/cadence-Bv_4Rxtq.js +0 -0
  547. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/cairo-KRGpt6FW.js +0 -0
  548. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/catppuccin-frappe-DFWUc33u.js +0 -0
  549. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/catppuccin-latte-C9dUb6Cb.js +0 -0
  550. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/catppuccin-macchiato-DQyhUUbL.js +0 -0
  551. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/catppuccin-mocha-D87Tk5Gz.js +0 -0
  552. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/clarity-D53aC0YG.js +0 -0
  553. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/clojure-P80f7IUj.js +0 -0
  554. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/cmake-D1j8_8rp.js +0 -0
  555. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/cobol-nwyudZeR.js +0 -0
  556. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/codeowners-Bp6g37R7.js +0 -0
  557. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/codeql-DsOJ9woJ.js +0 -0
  558. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/coffee-Ch7k5sss.js +0 -0
  559. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/common-lisp-Cg-RD9OK.js +0 -0
  560. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/coq-DkFqJrB1.js +0 -0
  561. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/cpp-CofmeUqb.js +0 -0
  562. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/crystal-tKQVLTB8.js +0 -0
  563. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/csharp-K5feNrxe.js +0 -0
  564. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/css-DPfMkruS.js +0 -0
  565. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/csv-fuZLfV_i.js +0 -0
  566. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/cue-D82EKSYY.js +0 -0
  567. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/cypher-COkxafJQ.js +0 -0
  568. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/d-85-TOEBH.js +0 -0
  569. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/dark-plus-C3mMm8J8.js +0 -0
  570. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/dart-CF10PKvl.js +0 -0
  571. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/dax-CEL-wOlO.js +0 -0
  572. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/defaultLocale-DX6XiGOO.js +0 -0
  573. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/desktop-BmXAJ9_W.js +0 -0
  574. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/diff-D97Zzqfu.js +0 -0
  575. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/docker-BcOcwvcX.js +0 -0
  576. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/dotenv-Da5cRb03.js +0 -0
  577. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/dracula-BzJJZx-M.js +0 -0
  578. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/dracula-soft-BXkSAIEj.js +0 -0
  579. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/dream-maker-BtqSS_iP.js +0 -0
  580. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/edge-BkV0erSs.js +0 -0
  581. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/elixir-CDX3lj18.js +0 -0
  582. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/elm-DbKCFpqz.js +0 -0
  583. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/emacs-lisp-C9XAeP06.js +0 -0
  584. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/erb-BOJIQeun.js +0 -0
  585. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/erlang-DsQrWhSR.js +0 -0
  586. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/everforest-dark-BgDCqdQA.js +0 -0
  587. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/everforest-light-C8M2exoo.js +0 -0
  588. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/fennel-BYunw83y.js +0 -0
  589. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/fish-BvzEVeQv.js +0 -0
  590. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/fluent-C4IJs8-o.js +0 -0
  591. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/fortran-fixed-form-CkoXwp7k.js +0 -0
  592. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/fortran-free-form-BxgE0vQu.js +0 -0
  593. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/fsharp-CXgrBDvD.js +0 -0
  594. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/gdresource-B7Tvp0Sc.js +0 -0
  595. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/gdscript-DTMYz4Jt.js +0 -0
  596. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/gdshader-DkwncUOv.js +0 -0
  597. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/genie-D0YGMca9.js +0 -0
  598. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/gherkin-DyxjwDmM.js +0 -0
  599. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/git-commit-F4YmCXRG.js +0 -0
  600. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/git-rebase-r7XF79zn.js +0 -0
  601. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/github-dark-DHJKELXO.js +0 -0
  602. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/github-dark-default-Cuk6v7N8.js +0 -0
  603. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/github-dark-dimmed-DH5Ifo-i.js +0 -0
  604. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/github-dark-high-contrast-E3gJ1_iC.js +0 -0
  605. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/github-light-DAi9KRSo.js +0 -0
  606. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/github-light-default-D7oLnXFd.js +0 -0
  607. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/github-light-high-contrast-BfjtVDDH.js +0 -0
  608. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/gleam-BspZqrRM.js +0 -0
  609. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/glimmer-js-Rg0-pVw9.js +0 -0
  610. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/glimmer-ts-U6CK756n.js +0 -0
  611. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/glsl-DplSGwfg.js +0 -0
  612. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/gn-n2N0HUVH.js +0 -0
  613. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/gnuplot-DdkO51Og.js +0 -0
  614. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/go-Dn2_MT6a.js +0 -0
  615. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/graphql-ChdNCCLP.js +0 -0
  616. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/groovy-gcz8RCvz.js +0 -0
  617. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/gruvbox-dark-hard-CFHQjOhq.js +0 -0
  618. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/gruvbox-dark-medium-GsRaNv29.js +0 -0
  619. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/gruvbox-dark-soft-CVdnzihN.js +0 -0
  620. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/gruvbox-light-hard-CH1njM8p.js +0 -0
  621. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/gruvbox-light-medium-DRw_LuNl.js +0 -0
  622. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/gruvbox-light-soft-hJgmCMqR.js +0 -0
  623. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/hack-CaT9iCJl.js +0 -0
  624. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/haml-B8DHNrY2.js +0 -0
  625. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/handlebars-BL8al0AC.js +0 -0
  626. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/haskell-Df6bDoY_.js +0 -0
  627. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/haxe-CzTSHFRz.js +0 -0
  628. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/hcl-BWvSN4gD.js +0 -0
  629. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/hjson-D5-asLiD.js +0 -0
  630. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/hlsl-D3lLCCz7.js +0 -0
  631. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/houston-DnULxvSX.js +0 -0
  632. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/html-GMplVEZG.js +0 -0
  633. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/html-derivative-BFtXZ54Q.js +0 -0
  634. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/http-jrhK8wxY.js +0 -0
  635. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/hurl-irOxFIW8.js +0 -0
  636. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/hxml-Bvhsp5Yf.js +0 -0
  637. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/hy-DFXneXwc.js +0 -0
  638. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/imba-DGztddWO.js +0 -0
  639. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/index-BpoLgcEt.js +0 -0
  640. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/index-CzV_vCfu.css +0 -0
  641. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/index-DI2oedCt.js +0 -0
  642. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/ini-BEwlwnbL.js +0 -0
  643. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/init-Gi6I4Gst.js +0 -0
  644. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
  645. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
  646. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
  647. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
  648. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
  649. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
  650. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
  651. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/java-CylS5w8V.js +0 -0
  652. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/javascript-wDzz0qaB.js +0 -0
  653. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/jinja-4LBKfQ-Z.js +0 -0
  654. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/jison-wvAkD_A8.js +0 -0
  655. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/json-Cp-IABpG.js +0 -0
  656. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/json5-C9tS-k6U.js +0 -0
  657. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/jsonc-Des-eS-w.js +0 -0
  658. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/jsonl-DcaNXYhu.js +0 -0
  659. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/jsonnet-DFQXde-d.js +0 -0
  660. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/jssm-C2t-YnRu.js +0 -0
  661. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/jsx-g9-lgVsj.js +0 -0
  662. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/julia-CxzCAyBv.js +0 -0
  663. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/kanagawa-dragon-CkXjmgJE.js +0 -0
  664. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/kanagawa-lotus-CfQXZHmo.js +0 -0
  665. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/kanagawa-wave-DWedfzmr.js +0 -0
  666. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/katex-D2lIc1rk.css +0 -0
  667. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/kdl-DV7GczEv.js +0 -0
  668. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/kotlin-BdnUsdx6.js +0 -0
  669. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/kusto-DZf3V79B.js +0 -0
  670. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/laserwave-DUszq2jm.js +0 -0
  671. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/latex-B4uzh10-.js +0 -0
  672. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/lean-BZvkOJ9d.js +0 -0
  673. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/less-B1dDrJ26.js +0 -0
  674. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/light-plus-B7mTdjB0.js +0 -0
  675. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/liquid-DYVedYrR.js +0 -0
  676. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/llvm-BtvRca6l.js +0 -0
  677. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/log-2UxHyX5q.js +0 -0
  678. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/logo-BtOb2qkB.js +0 -0
  679. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/lua-BbnMAYS6.js +0 -0
  680. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/luau-C-HG3fhB.js +0 -0
  681. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/make-CHLpvVh8.js +0 -0
  682. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/markdown-Cvjx9yec.js +0 -0
  683. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/marko-DZsq8hO1.js +0 -0
  684. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/material-theme-D5KoaKCx.js +0 -0
  685. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/material-theme-darker-BfHTSMKl.js +0 -0
  686. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/material-theme-lighter-B0m2ddpp.js +0 -0
  687. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/material-theme-ocean-CyktbL80.js +0 -0
  688. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/material-theme-palenight-Csfq5Kiy.js +0 -0
  689. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/matlab-D7o27uSR.js +0 -0
  690. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/mdc-DUICxH0z.js +0 -0
  691. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/mdx-Cmh6b_Ma.js +0 -0
  692. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/mermaid-mWjccvbQ.js +0 -0
  693. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/min-dark-CafNBF8u.js +0 -0
  694. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/min-light-CTRr51gU.js +0 -0
  695. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/mipsasm-CKIfxQSi.js +0 -0
  696. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/mojo-B93PlW-d.js +0 -0
  697. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/monokai-D4h5O-jR.js +0 -0
  698. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/moonbit-Ba13S78F.js +0 -0
  699. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/move-Bu9oaDYs.js +0 -0
  700. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/narrat-DRg8JJMk.js +0 -0
  701. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/nextflow-BrzmwbiE.js +0 -0
  702. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/nginx-DknmC5AR.js +0 -0
  703. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/night-owl-C39BiMTA.js +0 -0
  704. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/nim-CVrawwO9.js +0 -0
  705. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/nix-CwoSXNpI.js +0 -0
  706. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/nord-Ddv68eIx.js +0 -0
  707. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/nushell-C-sUppwS.js +0 -0
  708. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/objective-c-DXmwc3jG.js +0 -0
  709. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/objective-cpp-CLxacb5B.js +0 -0
  710. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/ocaml-C0hk2d4L.js +0 -0
  711. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/one-dark-pro-DVMEJ2y_.js +0 -0
  712. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/one-light-PoHY5YXO.js +0 -0
  713. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/openscad-C4EeE6gA.js +0 -0
  714. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/ordinal-Cboi1Yqb.js +0 -0
  715. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/pascal-D93ZcfNL.js +0 -0
  716. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/perl-C0TMdlhV.js +0 -0
  717. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/php-CDn_0X-4.js +0 -0
  718. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/pkl-u5AG7uiY.js +0 -0
  719. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/plastic-3e1v2bzS.js +0 -0
  720. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/plsql-ChMvpjG-.js +0 -0
  721. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/po-BTJTHyun.js +0 -0
  722. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/poimandres-CS3Unz2-.js +0 -0
  723. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/polar-C0HS_06l.js +0 -0
  724. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/postcss-CXtECtnM.js +0 -0
  725. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/powerquery-CEu0bR-o.js +0 -0
  726. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/powershell-Dpen1YoG.js +0 -0
  727. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/prisma-Dd19v3D-.js +0 -0
  728. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/prolog-CbFg5uaA.js +0 -0
  729. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/proto-C7zT0LnQ.js +0 -0
  730. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/pug-CGlum2m_.js +0 -0
  731. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/puppet-BMWR74SV.js +0 -0
  732. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/purescript-CklMAg4u.js +0 -0
  733. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/python-B6aJPvgy.js +0 -0
  734. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/qml-3beO22l8.js +0 -0
  735. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/qmldir-C8lEn-DE.js +0 -0
  736. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/qss-IeuSbFQv.js +0 -0
  737. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/r-Dspwwk_N.js +0 -0
  738. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/racket-BqYA7rlc.js +0 -0
  739. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/raku-DXvB9xmW.js +0 -0
  740. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/razor-C1TweQQi.js +0 -0
  741. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/red-bN70gL4F.js +0 -0
  742. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/reg-C-SQnVFl.js +0 -0
  743. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/regexp-CDVJQ6XC.js +0 -0
  744. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/rel-C3B-1QV4.js +0 -0
  745. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/riscv-BM1_JUlF.js +0 -0
  746. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/rose-pine-dawn-DHQR4-dF.js +0 -0
  747. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/rose-pine-moon-D4_iv3hh.js +0 -0
  748. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/rose-pine-qdsjHGoJ.js +0 -0
  749. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/rosmsg-BJDFO7_C.js +0 -0
  750. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/rst-B0xPkSld.js +0 -0
  751. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/ruby-BvKwtOVI.js +0 -0
  752. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/rust-B1yitclQ.js +0 -0
  753. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/sas-cz2c8ADy.js +0 -0
  754. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/sass-Cj5Yp3dK.js +0 -0
  755. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/scala-C151Ov-r.js +0 -0
  756. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/scheme-C98Dy4si.js +0 -0
  757. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/scss-OYdSNvt2.js +0 -0
  758. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/sdbl-DVxCFoDh.js +0 -0
  759. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/shaderlab-Dg9Lc6iA.js +0 -0
  760. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/shellscript-Yzrsuije.js +0 -0
  761. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/shellsession-BADoaaVG.js +0 -0
  762. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/slack-dark-BthQWCQV.js +0 -0
  763. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/slack-ochin-DqwNpetd.js +0 -0
  764. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/smalltalk-BERRCDM3.js +0 -0
  765. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/snazzy-light-Bw305WKR.js +0 -0
  766. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/solarized-dark-DXbdFlpD.js +0 -0
  767. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/solarized-light-L9t79GZl.js +0 -0
  768. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/solidity-rGO070M0.js +0 -0
  769. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/soy-Brmx7dQM.js +0 -0
  770. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/sparql-rVzFXLq3.js +0 -0
  771. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/splunk-BtCnVYZw.js +0 -0
  772. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/sql-BLtJtn59.js +0 -0
  773. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/ssh-config-_ykCGR6B.js +0 -0
  774. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/stata-BH5u7GGu.js +0 -0
  775. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/stylus-BEDo0Tqx.js +0 -0
  776. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/svelte-zxCyuUbr.js +0 -0
  777. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/swift-Dg5xB15N.js +0 -0
  778. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/synthwave-84-CbfX1IO0.js +0 -0
  779. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/system-verilog-CnnmHF94.js +0 -0
  780. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/systemd-4A_iFExJ.js +0 -0
  781. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/talonscript-CkByrt1z.js +0 -0
  782. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/tasl-QIJgUcNo.js +0 -0
  783. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/tcl-dwOrl1Do.js +0 -0
  784. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/templ-W15q3VgB.js +0 -0
  785. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/terraform-BETggiCN.js +0 -0
  786. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/tex-CvyZ59Mk.js +0 -0
  787. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/tokyo-night-hegEt444.js +0 -0
  788. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/toml-vGWfd6FD.js +0 -0
  789. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/ts-tags-zn1MmPIZ.js +0 -0
  790. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/tsv-B_m7g4N7.js +0 -0
  791. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/tsx-COt5Ahok.js +0 -0
  792. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/turtle-BsS91CYL.js +0 -0
  793. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/twig-CO9l9SDP.js +0 -0
  794. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/typescript-BPQ3VLAy.js +0 -0
  795. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/typespec-BGHnOYBU.js +0 -0
  796. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/typst-DHCkPAjA.js +0 -0
  797. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/v-BcVCzyr7.js +0 -0
  798. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/vala-CsfeWuGM.js +0 -0
  799. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/vb-D17OF-Vu.js +0 -0
  800. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/verilog-BQ8w6xss.js +0 -0
  801. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/vesper-DU1UobuO.js +0 -0
  802. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/vhdl-CeAyd5Ju.js +0 -0
  803. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/viml-CJc9bBzg.js +0 -0
  804. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/vitesse-black-Bkuqu6BP.js +0 -0
  805. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/vitesse-dark-D0r3Knsf.js +0 -0
  806. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/vitesse-light-CVO1_9PV.js +0 -0
  807. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/vue-DN_0RTcg.js +0 -0
  808. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/vue-html-AaS7Mt5G.js +0 -0
  809. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/vue-vine-CQOfvN7w.js +0 -0
  810. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/vyper-CDx5xZoG.js +0 -0
  811. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/wasm-CG6Dc4jp.js +0 -0
  812. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/wasm-MzD3tlZU.js +0 -0
  813. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/wenyan-BV7otONQ.js +0 -0
  814. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/wgsl-Dx-B1_4e.js +0 -0
  815. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/wikitext-BhOHFoWU.js +0 -0
  816. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/wit-5i3qLPDT.js +0 -0
  817. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/wolfram-lXgVvXCa.js +0 -0
  818. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/xml-sdJ4AIDG.js +0 -0
  819. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/xsl-CtQFsRM5.js +0 -0
  820. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/yaml-Buea-lGh.js +0 -0
  821. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/zenscript-DVFEvuxE.js +0 -0
  822. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/assets/zig-VOosw3JB.js +0 -0
  823. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/brand/apple-touch-icon.png +0 -0
  824. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/brand/arctecture.webp +0 -0
  825. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/brand/bimi-logo.svg +0 -0
  826. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/brand/favicon.ico +0 -0
  827. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/brand/fonts/dm-sans-latin-ext.woff2 +0 -0
  828. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/brand/fonts/dm-sans-latin.woff2 +0 -0
  829. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/brand/fonts/instrument-sans-latin-ext.woff2 +0 -0
  830. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/brand/fonts/instrument-sans-latin.woff2 +0 -0
  831. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/brand/fonts/instrument-serif-latin-ext.woff2 +0 -0
  832. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/brand/fonts/instrument-serif-latin.woff2 +0 -0
  833. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-italic-latin-ext.woff2 +0 -0
  834. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-italic-latin.woff2 +0 -0
  835. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-latin-ext.woff2 +0 -0
  836. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-latin.woff2 +0 -0
  837. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/brand/fonts/roboto-latin-ext.woff2 +0 -0
  838. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/brand/fonts/roboto-latin.woff2 +0 -0
  839. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/brand/icon-192.png +0 -0
  840. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/brand/icon-512.png +0 -0
  841. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/brand/icon.svg +0 -0
  842. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/brand/logo.png +0 -0
  843. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/brand/pythinker_animated.svg +0 -0
  844. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/brand/robots.txt +0 -0
  845. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/static/logo.png +0 -0
  846. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/store/__init__.py +0 -0
  847. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/web/store/sessions.py +0 -0
  848. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/wire/__init__.py +0 -0
  849. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/wire/file.py +0 -0
  850. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/wire/jsonrpc.py +0 -0
  851. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/wire/protocol.py +0 -0
  852. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/wire/root_hub.py +0 -0
  853. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/wire/serde.py +0 -0
  854. {pythinker_code-0.27.0 → pythinker_code-0.28.0}/src/pythinker_code/wire/server.py +0 -0
  855. {pythinker_code-0.27.0 → pythinker_code-0.28.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.27.0
3
+ Version: 0.28.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
@@ -56,16 +56,16 @@ Requires-Dist: opentelemetry-api>=1.30,<2
56
56
  Requires-Dist: opentelemetry-sdk>=1.30,<2
57
57
  Requires-Dist: opentelemetry-exporter-otlp-proto-http>=1.30,<2
58
58
  Requires-Python: >=3.12
59
- Project-URL: Changelog, https://github.com/TechMatrix-labs/pythinker-code/blob/main/CHANGELOG.md
60
- Project-URL: Documentation, https://github.com/TechMatrix-labs/pythinker-code#readme
61
- Project-URL: Homepage, https://github.com/TechMatrix-labs/pythinker-code
62
- Project-URL: Issues, https://github.com/TechMatrix-labs/pythinker-code/issues
63
- Project-URL: Repository, https://github.com/TechMatrix-labs/pythinker-code
59
+ Project-URL: Changelog, https://github.com/Pythoughts-labs/pythinker-code/blob/main/CHANGELOG.md
60
+ Project-URL: Documentation, https://github.com/Pythoughts-labs/pythinker-code#readme
61
+ Project-URL: Homepage, https://github.com/Pythoughts-labs/pythinker-code
62
+ Project-URL: Issues, https://github.com/Pythoughts-labs/pythinker-code/issues
63
+ Project-URL: Repository, https://github.com/Pythoughts-labs/pythinker-code
64
64
  Description-Content-Type: text/markdown
65
65
 
66
66
  <div align="center">
67
67
 
68
- # <img src="https://raw.githubusercontent.com/TechMatrix-labs/pythinker-code/main/docs/media/logo.png" alt="Pythinker logo" width="42" align="top"> Pythinker Code
68
+ # <img src="https://raw.githubusercontent.com/Pythoughts-labs/pythinker-code/main/docs/media/logo.png" alt="Pythinker logo" width="42" align="top"> Pythinker Code
69
69
 
70
70
  ### *Think first, then code. Your terminal-native review-first AI engineering agent.*
71
71
 
@@ -75,9 +75,9 @@ Description-Content-Type: text/markdown
75
75
  <br />
76
76
 
77
77
  [![PyPI](https://img.shields.io/pypi/v/pythinker-code?style=for-the-badge&logo=pypi&logoColor=white&color=2563eb&label=pythinker-code&cacheSeconds=60)](https://pypi.org/project/pythinker-code/)
78
- [![Python](https://img.shields.io/badge/Python-3.12%2B-3776ab?style=for-the-badge&logo=python&logoColor=white)](https://github.com/TechMatrix-labs/pythinker-code/blob/main/pyproject.toml)
79
- [![License: Apache-2.0](https://img.shields.io/badge/License-Apache--2.0-16a34a.svg?style=for-the-badge)](https://github.com/TechMatrix-labs/pythinker-code/blob/main/LICENSE)
80
- [![CI](https://img.shields.io/github/actions/workflow/status/TechMatrix-labs/pythinker-code/ci-pythinker-cli.yml?branch=main&label=CI&style=for-the-badge&logo=githubactions&logoColor=white)](https://github.com/TechMatrix-labs/pythinker-code/actions/workflows/ci-pythinker-cli.yml?query=branch%3Amain)
78
+ [![Python](https://img.shields.io/badge/Python-3.12%2B-3776ab?style=for-the-badge&logo=python&logoColor=white)](https://github.com/Pythoughts-labs/pythinker-code/blob/main/pyproject.toml)
79
+ [![License: Apache-2.0](https://img.shields.io/badge/License-Apache--2.0-16a34a.svg?style=for-the-badge)](https://github.com/Pythoughts-labs/pythinker-code/blob/main/LICENSE)
80
+ [![CI](https://img.shields.io/github/actions/workflow/status/Pythoughts-labs/pythinker-code/ci-pythinker-cli.yml?branch=main&label=CI&style=for-the-badge&logo=githubactions&logoColor=white)](https://github.com/Pythoughts-labs/pythinker-code/actions/workflows/ci-pythinker-cli.yml?query=branch%3Amain)
81
81
 
82
82
  [![PyPI downloads](https://assets.piptrends.com/get-last-month-downloads-badge/pythinker-code.svg)](https://piptrends.com/package/pythinker-code)
83
83
  [![Code style: Ruff](https://img.shields.io/badge/code%20style-ruff-f59e0b.svg?style=flat-square&logo=ruff&logoColor=white)](https://docs.astral.sh/ruff/)
@@ -97,7 +97,7 @@ Description-Content-Type: text/markdown
97
97
 
98
98
  <br /><br />
99
99
 
100
- <img src="https://raw.githubusercontent.com/TechMatrix-labs/pythinker-code/main/docs/media/pythinker-cli.gif" alt="Pythinker Code terminal demo" width="860">
100
+ <img src="https://raw.githubusercontent.com/Pythoughts-labs/pythinker-code/main/docs/media/pythinker-cli.gif" alt="Pythinker Code terminal demo" width="860">
101
101
 
102
102
  </div>
103
103
 
@@ -115,15 +115,15 @@ It speaks the [**Agent Client Protocol (ACP)**](https://github.com/agentclientpr
115
115
 
116
116
  ---
117
117
 
118
- ## 🆕 What's New in 0.27.0
118
+ ## 🆕 What's New in 0.28.0
119
119
 
120
- - **`/feedback` submits structured reports with redacted session context.** A new `/feedback [bug|feature|ux|wrong] [message]` command collects recent session context, strips sensitive file contents before sending, shows a confirmation preview, and falls back to a prefilled GitHub issue when direct submission is unavailable.
121
- - **Fresh releases surface in the startup update prompt immediately.** The pre-start update prompt revalidates a cached "already current" answer with a bounded conditional request instead of waiting for the 24-hour throttle, and release promotion now waits for the native assets, PyPI, and the Homebrew tap before marking a version latest — so clients never resolve a release before its install channel is ready.
122
- - **Background agent recovery preserves terminal task state.** Recovery re-reads task runtime under the store update lock before marking orphaned agent work recoverable, so a stale snapshot can no longer clobber a task that already completed.
123
- - **Shell prompt echoes and background todo rows are clearer.** Transcript echoes now show the resolved submitted text for pasted-content placeholders, and background todo rows align continuation icons with the first row.
124
- - **StrReplaceFile refuses ambiguous single replacements.** A non-`replace_all` edit now errors when `old` matches more than once instead of silently editing the first match add surrounding context to make it unique, or pass `replace_all=true` when every occurrence should change.
120
+ - **Redesigned startup welcome banner.** A cleaner footer-chip layout the "What's new / Update available" chip now sits on the panel's bottom border, the headline/strapline/help lines align beside the robot logo, and the info grid drops its vertical separator.
121
+ - **Terminal-aware rendering for minimal and CI terminals.** The shell UI adapts to your terminal ASCII glyph fallbacks for `TERM=dumb` and legacy Windows code pages, a reduced-motion mode (`PYTHINKER_REDUCED_MOTION`), and `NO_COLOR`/`CLICOLOR` support — so output stays readable in CI logs, SSH panes, and bare terminals.
122
+ - **Windows updates avoid encoded PowerShell.** Native updates launch the signed Inno installer directly with Restart Manager flags instead of a `powershell.exe -EncodedCommand` helper, reducing antivirus false positives, and bootstrap installs show visible `/SILENT` progress.
123
+ - **More distribution channels.** Releases now include best-effort Docker/GHCR, Scoop, Nix, and manual WinGet plumbing, with channel-native update guidance where the install format supports it.
124
+ - **Repository moved to the Pythoughts-labs GitHub org.** All GitHub URLs, install scripts, CI configuration, and the default `/feedback` repository now point to `github.com/Pythoughts-labs/pythinker-code`; configs that still reference the previous owner are auto-migrated.
125
125
 
126
- Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.27.0`, or use the native installer for your platform from the [Releases page](https://github.com/TechMatrix-labs/pythinker-code/releases/latest).
126
+ Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.28.0`, or use the native installer for your platform from the [Releases page](https://github.com/Pythoughts-labs/pythinker-code/releases/latest).
127
127
 
128
128
 
129
129
  ---
@@ -201,7 +201,7 @@ Swap providers and models per-session: `--model openai/gpt-5.5`, hosted Pythinke
201
201
  > Built-in shell commands such as `cd` are not yet supported in shell command mode.
202
202
 
203
203
  <div align="center">
204
- <img src="https://raw.githubusercontent.com/TechMatrix-labs/pythinker-code/main/docs/media/shell-mode.gif" alt="Shell command mode demo" width="860">
204
+ <img src="https://raw.githubusercontent.com/Pythoughts-labs/pythinker-code/main/docs/media/shell-mode.gif" alt="Shell command mode demo" width="860">
205
205
  </div>
206
206
 
207
207
  ---
@@ -213,10 +213,13 @@ matches your OS — no Python, Node, or `uv` prerequisite.
213
213
 
214
214
  | Platform | Recommended install | Artifact source |
215
215
  |---|---|---|
216
- | **🪟 Windows** | `irm https://pythinker.com/install.ps1 \| iex` | `PythinkerSetup-0.27.0.exe` from [Releases](https://github.com/TechMatrix-labs/pythinker-code/releases/latest) |
217
- | **<img src="https://img.shields.io/badge/-macOS-000000?style=flat-square&logo=apple&logoColor=white" alt="macOS"> / <img src="https://img.shields.io/badge/-Linux-FCC624?style=flat-square&logo=linux&logoColor=black" alt="Linux">** | `curl -fsSL https://pythinker.com/install.sh \| bash` | native tarball from [Releases](https://github.com/TechMatrix-labs/pythinker-code/releases/latest) |
218
- | **<img src="https://img.shields.io/badge/-macOS-000000?style=flat-square&logo=apple&logoColor=white" alt="macOS"> — Homebrew** | `brew install TechMatrix-labs/pythinker/pythinker-code` | auto-published Homebrew tap |
219
- | **<img src="https://img.shields.io/badge/-Linux-FCC624?style=flat-square&logo=linux&logoColor=black" alt="Linux"> — system package** | Download the `.deb` or `.rpm` for your distro below | [Releases](https://github.com/TechMatrix-labs/pythinker-code/releases/latest) |
216
+ | **🪟 Windows** | `irm https://pythinker.com/install.ps1 \| iex` | `PythinkerSetup-0.28.0.exe` from [Releases](https://github.com/Pythoughts-labs/pythinker-code/releases/latest) |
217
+ | **<img src="https://img.shields.io/badge/-macOS-000000?style=flat-square&logo=apple&logoColor=white" alt="macOS"> / <img src="https://img.shields.io/badge/-Linux-FCC624?style=flat-square&logo=linux&logoColor=black" alt="Linux">** | `curl -fsSL https://pythinker.com/install.sh \| bash` | native tarball from [Releases](https://github.com/Pythoughts-labs/pythinker-code/releases/latest) |
218
+ | **<img src="https://img.shields.io/badge/-macOS-000000?style=flat-square&logo=apple&logoColor=white" alt="macOS"> — Homebrew** | `brew install Pythoughts-labs/pythinker/pythinker-code` | auto-published Homebrew tap |
219
+ | **🐳 Docker** | `docker run --rm -it ghcr.io/pythoughts-labs/pythinker-code` | GHCR multi-arch image |
220
+ | **🪟 Windows — Scoop** | `scoop bucket add pythinker https://github.com/Pythoughts-labs/scoop-pythinker && scoop install pythinker-code` | auto-published Scoop bucket |
221
+ | **❄️ Nix** | `nix run github:Pythoughts-labs/pythinker-code` | flake `apps.default` |
222
+ | **<img src="https://img.shields.io/badge/-Linux-FCC624?style=flat-square&logo=linux&logoColor=black" alt="Linux"> — system package** | Download the `.deb` or `.rpm` for your distro below | [Releases](https://github.com/Pythoughts-labs/pythinker-code/releases/latest) |
220
223
  | **🐍 Python fallback** | `pip install pythinker-code` | PyPI |
221
224
 
222
225
  Every artifact ships with a matching `.sha256` file — verify before install on
@@ -238,7 +241,7 @@ pythinker # start the interactive TUI
238
241
 
239
242
  ### 🪟 Windows — native installer
240
243
 
241
- `PythinkerSetup-0.27.0.exe` is a signed* Inno Setup wizard. Installs per-user
244
+ `PythinkerSetup-0.28.0.exe` is a signed* Inno Setup wizard. Installs per-user
242
245
  into `%LOCALAPPDATA%\Programs\Pythinker`, registers `pythinker` on your user
243
246
  PATH (`HKCU\Environment`), broadcasts `WM_SETTINGCHANGE` so new shells see
244
247
  the change. **No UAC prompt.**
@@ -249,18 +252,18 @@ irm https://pythinker.com/install.ps1 | iex
249
252
 
250
253
  # Or manually download the installer + checksum from the Releases page,
251
254
  # verify with Get-FileHash, then run:
252
- .\PythinkerSetup-0.27.0.exe
255
+ .\PythinkerSetup-0.28.0.exe
253
256
 
254
257
  # Open a fresh PowerShell
255
258
  pythinker --version
256
259
  ```
257
260
 
258
- **Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.27.0.exe /ALLUSERS`
261
+ **Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.28.0.exe /ALLUSERS`
259
262
  installs to `%ProgramFiles%\Pythinker` and writes PATH to HKLM (requires admin).
260
263
 
261
264
  **Upgrade:** `pythinker update` from inside the running app — it downloads
262
- the newest installer, verifies SHA-256, and re-runs it silently
263
- (`/VERYSILENT /SUPPRESSMSGBOXES /NORESTART`).
265
+ the newest installer, verifies SHA-256, and launches the signed Inno installer
266
+ with visible progress (`/SILENT /NORESTART /CURRENTUSER /CLOSEAPPLICATIONS /NORESTARTAPPLICATIONS`).
264
267
 
265
268
  **Uninstall:** Apps & Features → *Pythinker Code* → Uninstall reverts both
266
269
  the files and the PATH edit.
@@ -276,7 +279,7 @@ the files and the PATH edit.
276
279
 
277
280
  ```sh
278
281
  # 1. Install
279
- brew install TechMatrix-labs/pythinker/pythinker-code
282
+ brew install Pythoughts-labs/pythinker/pythinker-code
280
283
 
281
284
  # 2. Verify
282
285
  pythinker --version
@@ -292,9 +295,9 @@ latest version.
292
295
  **Upgrade:** `brew upgrade pythinker-code` (Homebrew packages don't
293
296
  auto-update; run this whenever you want the latest).
294
297
 
295
- **Uninstall:** `brew uninstall pythinker-code && brew untap TechMatrix-labs/pythinker`.
298
+ **Uninstall:** `brew uninstall pythinker-code && brew untap Pythoughts-labs/pythinker`.
296
299
 
297
- > The tap repo is [TechMatrix-labs/homebrew-pythinker](https://github.com/TechMatrix-labs/homebrew-pythinker)
300
+ > The tap repo is [Pythoughts-labs/homebrew-pythinker](https://github.com/Pythoughts-labs/homebrew-pythinker)
298
301
  > — auto-maintained, do not hand-edit.
299
302
 
300
303
  ---
@@ -306,26 +309,26 @@ attached to every GitHub Release.
306
309
 
307
310
  ```sh
308
311
  # Debian / Ubuntu (x86_64)
309
- sudo dpkg -i pythinker-code_0.27.0_amd64.deb
312
+ sudo dpkg -i pythinker-code_0.28.0_amd64.deb
310
313
  sudo apt-get install -f # only if dpkg reports missing deps
311
314
 
312
315
  # Debian / Ubuntu (ARM64)
313
- sudo dpkg -i pythinker-code_0.27.0_arm64.deb
316
+ sudo dpkg -i pythinker-code_0.28.0_arm64.deb
314
317
 
315
318
  # Fedora / RHEL / openSUSE (x86_64)
316
- curl -LO https://github.com/TechMatrix-labs/pythinker-code/releases/download/v0.27.0/pythinker-code-0.27.0.x86_64.rpm
317
- curl -LO https://github.com/TechMatrix-labs/pythinker-code/releases/download/v0.27.0/pythinker-code-0.27.0.x86_64.rpm.sha256
318
- sha256sum -c pythinker-code-0.27.0.x86_64.rpm.sha256
319
+ curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.28.0/pythinker-code-0.28.0.x86_64.rpm
320
+ curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.28.0/pythinker-code-0.28.0.x86_64.rpm.sha256
321
+ sha256sum -c pythinker-code-0.28.0.x86_64.rpm.sha256
319
322
  # Fedora / RHEL:
320
- sudo dnf install ./pythinker-code-0.27.0.x86_64.rpm
323
+ sudo dnf install ./pythinker-code-0.28.0.x86_64.rpm
321
324
  # openSUSE:
322
- sudo zypper install ./pythinker-code-0.27.0.x86_64.rpm
325
+ sudo zypper install ./pythinker-code-0.28.0.x86_64.rpm
323
326
 
324
327
  # Fedora / RHEL (aarch64)
325
- curl -LO https://github.com/TechMatrix-labs/pythinker-code/releases/download/v0.27.0/pythinker-code-0.27.0.aarch64.rpm
326
- curl -LO https://github.com/TechMatrix-labs/pythinker-code/releases/download/v0.27.0/pythinker-code-0.27.0.aarch64.rpm.sha256
327
- sha256sum -c pythinker-code-0.27.0.aarch64.rpm.sha256
328
- sudo dnf install ./pythinker-code-0.27.0.aarch64.rpm
328
+ curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.28.0/pythinker-code-0.28.0.aarch64.rpm
329
+ curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.28.0/pythinker-code-0.28.0.aarch64.rpm.sha256
330
+ sha256sum -c pythinker-code-0.28.0.aarch64.rpm.sha256
331
+ sudo dnf install ./pythinker-code-0.28.0.aarch64.rpm
329
332
  ```
330
333
 
331
334
  Both packages drop a small `/usr/bin/pythinker` launcher that execs the real
@@ -334,8 +337,8 @@ binary under `/usr/lib/pythinker/`, so your `$PATH` stays tidy.
334
337
  **Verify before install:**
335
338
 
336
339
  ```sh
337
- sha256sum -c pythinker-code_0.27.0_amd64.deb.sha256 # Debian/Ubuntu
338
- sha256sum -c pythinker-code-0.27.0.x86_64.rpm.sha256 # Fedora/RHEL
340
+ sha256sum -c pythinker-code_0.28.0_amd64.deb.sha256 # Debian/Ubuntu
341
+ sha256sum -c pythinker-code-0.28.0.x86_64.rpm.sha256 # Fedora/RHEL
339
342
  ```
340
343
 
341
344
  **Upgrade:** download the new `.deb`/`.rpm` from Releases and `dpkg -i` /
@@ -606,7 +609,7 @@ The ACP server provides:
606
609
  | 🔄 **Hot model swap** | Change models for a running ACP session |
607
610
 
608
611
  <div align="center">
609
- <img src="https://raw.githubusercontent.com/TechMatrix-labs/pythinker-code/main/docs/media/acp-integration.gif" alt="ACP IDE integration demo" width="860">
612
+ <img src="https://raw.githubusercontent.com/Pythoughts-labs/pythinker-code/main/docs/media/acp-integration.gif" alt="ACP IDE integration demo" width="860">
610
613
  </div>
611
614
 
612
615
  ---
@@ -681,7 +684,7 @@ Pythinker is a small, extensible runtime — not a monolith. Build on it.
681
684
  ## 🏗️ Architecture
682
685
 
683
686
  <div align="center">
684
- <img src="https://raw.githubusercontent.com/TechMatrix-labs/pythinker-code/main/docs/media/Architecture.webp" alt="Pythinker Code architecture diagram" width="860">
687
+ <img src="https://raw.githubusercontent.com/Pythoughts-labs/pythinker-code/main/docs/media/Architecture.webp" alt="Pythinker Code architecture diagram" width="860">
685
688
  </div>
686
689
 
687
690
  ---
@@ -761,7 +764,7 @@ are used automatically unless you turn telemetry off.
761
764
  ### 🏁 Prepare the workspace
762
765
 
763
766
  ```sh
764
- git clone https://github.com/TechMatrix-labs/pythinker-code.git
767
+ git clone https://github.com/Pythoughts-labs/pythinker-code.git
765
768
  cd pythinker-code
766
769
  make prepare
767
770
  ```
@@ -842,9 +845,9 @@ pythinker-code/
842
845
 
843
846
  Contributions are warmly welcome — bug reports, PRs, plugins, skills, and docs all help.
844
847
 
845
- - 📖 Start with [`CONTRIBUTING.md`](https://github.com/TechMatrix-labs/pythinker-code/blob/main/CONTRIBUTING.md)
846
- - 🔐 See [`SECURITY.md`](https://github.com/TechMatrix-labs/pythinker-code/blob/main/SECURITY.md) for responsible disclosure
847
- - 📜 Skim [`AGENTS.md`](https://github.com/TechMatrix-labs/pythinker-code/blob/main/AGENTS.md) for the agent design notes
848
+ - 📖 Start with [`CONTRIBUTING.md`](https://github.com/Pythoughts-labs/pythinker-code/blob/main/CONTRIBUTING.md)
849
+ - 🔐 See [`SECURITY.md`](https://github.com/Pythoughts-labs/pythinker-code/blob/main/SECURITY.md) for responsible disclosure
850
+ - 📜 Skim [`AGENTS.md`](https://github.com/Pythoughts-labs/pythinker-code/blob/main/AGENTS.md) for the agent design notes
848
851
 
849
852
  If Pythinker helps you, **a ⭐ on GitHub goes a long way.**
850
853
 
@@ -852,7 +855,7 @@ If Pythinker helps you, **a ⭐ on GitHub goes a long way.**
852
855
 
853
856
  ## 📜 License
854
857
 
855
- Distributed under the **Apache-2.0 License**. See [`LICENSE`](https://github.com/TechMatrix-labs/pythinker-code/blob/main/LICENSE) for the full text and [`NOTICE`](https://github.com/TechMatrix-labs/pythinker-code/blob/main/NOTICE) for attributions.
858
+ Distributed under the **Apache-2.0 License**. See [`LICENSE`](https://github.com/Pythoughts-labs/pythinker-code/blob/main/LICENSE) for the full text and [`NOTICE`](https://github.com/Pythoughts-labs/pythinker-code/blob/main/NOTICE) for attributions.
856
859
 
857
860
  <br />
858
861
 
@@ -862,8 +865,12 @@ Distributed under the **Apache-2.0 License**. See [`LICENSE`](https://github.com
862
865
 
863
866
  [🌐 pythinker.com](https://pythinker.com) &nbsp;·&nbsp;
864
867
  [📦 PyPI](https://pypi.org/project/pythinker-code/) &nbsp;·&nbsp;
865
- [🐙 GitHub](https://github.com/TechMatrix-labs/pythinker-code) &nbsp;·&nbsp;
868
+ [🐙 GitHub](https://github.com/Pythoughts-labs/pythinker-code) &nbsp;·&nbsp;
866
869
  [🧩 ACP](https://github.com/agentclientprotocol/agent-client-protocol) &nbsp;·&nbsp;
867
870
  [🔌 MCP](https://modelcontextprotocol.io/)
868
871
 
872
+ <p align="center">
873
+ <em>Thanks for visiting ✨ Pythinker! Viewing this README does not trigger telemetry.</em>
874
+ </p>
875
+
869
876
  </div>
@@ -1,6 +1,6 @@
1
1
  <div align="center">
2
2
 
3
- # <img src="https://raw.githubusercontent.com/TechMatrix-labs/pythinker-code/main/docs/media/logo.png" alt="Pythinker logo" width="42" align="top"> Pythinker Code
3
+ # <img src="https://raw.githubusercontent.com/Pythoughts-labs/pythinker-code/main/docs/media/logo.png" alt="Pythinker logo" width="42" align="top"> Pythinker Code
4
4
 
5
5
  ### *Think first, then code. Your terminal-native review-first AI engineering agent.*
6
6
 
@@ -10,9 +10,9 @@
10
10
  <br />
11
11
 
12
12
  [![PyPI](https://img.shields.io/pypi/v/pythinker-code?style=for-the-badge&logo=pypi&logoColor=white&color=2563eb&label=pythinker-code&cacheSeconds=60)](https://pypi.org/project/pythinker-code/)
13
- [![Python](https://img.shields.io/badge/Python-3.12%2B-3776ab?style=for-the-badge&logo=python&logoColor=white)](https://github.com/TechMatrix-labs/pythinker-code/blob/main/pyproject.toml)
14
- [![License: Apache-2.0](https://img.shields.io/badge/License-Apache--2.0-16a34a.svg?style=for-the-badge)](https://github.com/TechMatrix-labs/pythinker-code/blob/main/LICENSE)
15
- [![CI](https://img.shields.io/github/actions/workflow/status/TechMatrix-labs/pythinker-code/ci-pythinker-cli.yml?branch=main&label=CI&style=for-the-badge&logo=githubactions&logoColor=white)](https://github.com/TechMatrix-labs/pythinker-code/actions/workflows/ci-pythinker-cli.yml?query=branch%3Amain)
13
+ [![Python](https://img.shields.io/badge/Python-3.12%2B-3776ab?style=for-the-badge&logo=python&logoColor=white)](https://github.com/Pythoughts-labs/pythinker-code/blob/main/pyproject.toml)
14
+ [![License: Apache-2.0](https://img.shields.io/badge/License-Apache--2.0-16a34a.svg?style=for-the-badge)](https://github.com/Pythoughts-labs/pythinker-code/blob/main/LICENSE)
15
+ [![CI](https://img.shields.io/github/actions/workflow/status/Pythoughts-labs/pythinker-code/ci-pythinker-cli.yml?branch=main&label=CI&style=for-the-badge&logo=githubactions&logoColor=white)](https://github.com/Pythoughts-labs/pythinker-code/actions/workflows/ci-pythinker-cli.yml?query=branch%3Amain)
16
16
 
17
17
  [![PyPI downloads](https://assets.piptrends.com/get-last-month-downloads-badge/pythinker-code.svg)](https://piptrends.com/package/pythinker-code)
18
18
  [![Code style: Ruff](https://img.shields.io/badge/code%20style-ruff-f59e0b.svg?style=flat-square&logo=ruff&logoColor=white)](https://docs.astral.sh/ruff/)
@@ -32,7 +32,7 @@
32
32
 
33
33
  <br /><br />
34
34
 
35
- <img src="https://raw.githubusercontent.com/TechMatrix-labs/pythinker-code/main/docs/media/pythinker-cli.gif" alt="Pythinker Code terminal demo" width="860">
35
+ <img src="https://raw.githubusercontent.com/Pythoughts-labs/pythinker-code/main/docs/media/pythinker-cli.gif" alt="Pythinker Code terminal demo" width="860">
36
36
 
37
37
  </div>
38
38
 
@@ -50,15 +50,15 @@ It speaks the [**Agent Client Protocol (ACP)**](https://github.com/agentclientpr
50
50
 
51
51
  ---
52
52
 
53
- ## 🆕 What's New in 0.27.0
53
+ ## 🆕 What's New in 0.28.0
54
54
 
55
- - **`/feedback` submits structured reports with redacted session context.** A new `/feedback [bug|feature|ux|wrong] [message]` command collects recent session context, strips sensitive file contents before sending, shows a confirmation preview, and falls back to a prefilled GitHub issue when direct submission is unavailable.
56
- - **Fresh releases surface in the startup update prompt immediately.** The pre-start update prompt revalidates a cached "already current" answer with a bounded conditional request instead of waiting for the 24-hour throttle, and release promotion now waits for the native assets, PyPI, and the Homebrew tap before marking a version latest — so clients never resolve a release before its install channel is ready.
57
- - **Background agent recovery preserves terminal task state.** Recovery re-reads task runtime under the store update lock before marking orphaned agent work recoverable, so a stale snapshot can no longer clobber a task that already completed.
58
- - **Shell prompt echoes and background todo rows are clearer.** Transcript echoes now show the resolved submitted text for pasted-content placeholders, and background todo rows align continuation icons with the first row.
59
- - **StrReplaceFile refuses ambiguous single replacements.** A non-`replace_all` edit now errors when `old` matches more than once instead of silently editing the first match add surrounding context to make it unique, or pass `replace_all=true` when every occurrence should change.
55
+ - **Redesigned startup welcome banner.** A cleaner footer-chip layout the "What's new / Update available" chip now sits on the panel's bottom border, the headline/strapline/help lines align beside the robot logo, and the info grid drops its vertical separator.
56
+ - **Terminal-aware rendering for minimal and CI terminals.** The shell UI adapts to your terminal ASCII glyph fallbacks for `TERM=dumb` and legacy Windows code pages, a reduced-motion mode (`PYTHINKER_REDUCED_MOTION`), and `NO_COLOR`/`CLICOLOR` support — so output stays readable in CI logs, SSH panes, and bare terminals.
57
+ - **Windows updates avoid encoded PowerShell.** Native updates launch the signed Inno installer directly with Restart Manager flags instead of a `powershell.exe -EncodedCommand` helper, reducing antivirus false positives, and bootstrap installs show visible `/SILENT` progress.
58
+ - **More distribution channels.** Releases now include best-effort Docker/GHCR, Scoop, Nix, and manual WinGet plumbing, with channel-native update guidance where the install format supports it.
59
+ - **Repository moved to the Pythoughts-labs GitHub org.** All GitHub URLs, install scripts, CI configuration, and the default `/feedback` repository now point to `github.com/Pythoughts-labs/pythinker-code`; configs that still reference the previous owner are auto-migrated.
60
60
 
61
- Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.27.0`, or use the native installer for your platform from the [Releases page](https://github.com/TechMatrix-labs/pythinker-code/releases/latest).
61
+ Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.28.0`, or use the native installer for your platform from the [Releases page](https://github.com/Pythoughts-labs/pythinker-code/releases/latest).
62
62
 
63
63
 
64
64
  ---
@@ -136,7 +136,7 @@ Swap providers and models per-session: `--model openai/gpt-5.5`, hosted Pythinke
136
136
  > Built-in shell commands such as `cd` are not yet supported in shell command mode.
137
137
 
138
138
  <div align="center">
139
- <img src="https://raw.githubusercontent.com/TechMatrix-labs/pythinker-code/main/docs/media/shell-mode.gif" alt="Shell command mode demo" width="860">
139
+ <img src="https://raw.githubusercontent.com/Pythoughts-labs/pythinker-code/main/docs/media/shell-mode.gif" alt="Shell command mode demo" width="860">
140
140
  </div>
141
141
 
142
142
  ---
@@ -148,10 +148,13 @@ matches your OS — no Python, Node, or `uv` prerequisite.
148
148
 
149
149
  | Platform | Recommended install | Artifact source |
150
150
  |---|---|---|
151
- | **🪟 Windows** | `irm https://pythinker.com/install.ps1 \| iex` | `PythinkerSetup-0.27.0.exe` from [Releases](https://github.com/TechMatrix-labs/pythinker-code/releases/latest) |
152
- | **<img src="https://img.shields.io/badge/-macOS-000000?style=flat-square&logo=apple&logoColor=white" alt="macOS"> / <img src="https://img.shields.io/badge/-Linux-FCC624?style=flat-square&logo=linux&logoColor=black" alt="Linux">** | `curl -fsSL https://pythinker.com/install.sh \| bash` | native tarball from [Releases](https://github.com/TechMatrix-labs/pythinker-code/releases/latest) |
153
- | **<img src="https://img.shields.io/badge/-macOS-000000?style=flat-square&logo=apple&logoColor=white" alt="macOS"> — Homebrew** | `brew install TechMatrix-labs/pythinker/pythinker-code` | auto-published Homebrew tap |
154
- | **<img src="https://img.shields.io/badge/-Linux-FCC624?style=flat-square&logo=linux&logoColor=black" alt="Linux"> — system package** | Download the `.deb` or `.rpm` for your distro below | [Releases](https://github.com/TechMatrix-labs/pythinker-code/releases/latest) |
151
+ | **🪟 Windows** | `irm https://pythinker.com/install.ps1 \| iex` | `PythinkerSetup-0.28.0.exe` from [Releases](https://github.com/Pythoughts-labs/pythinker-code/releases/latest) |
152
+ | **<img src="https://img.shields.io/badge/-macOS-000000?style=flat-square&logo=apple&logoColor=white" alt="macOS"> / <img src="https://img.shields.io/badge/-Linux-FCC624?style=flat-square&logo=linux&logoColor=black" alt="Linux">** | `curl -fsSL https://pythinker.com/install.sh \| bash` | native tarball from [Releases](https://github.com/Pythoughts-labs/pythinker-code/releases/latest) |
153
+ | **<img src="https://img.shields.io/badge/-macOS-000000?style=flat-square&logo=apple&logoColor=white" alt="macOS"> — Homebrew** | `brew install Pythoughts-labs/pythinker/pythinker-code` | auto-published Homebrew tap |
154
+ | **🐳 Docker** | `docker run --rm -it ghcr.io/pythoughts-labs/pythinker-code` | GHCR multi-arch image |
155
+ | **🪟 Windows — Scoop** | `scoop bucket add pythinker https://github.com/Pythoughts-labs/scoop-pythinker && scoop install pythinker-code` | auto-published Scoop bucket |
156
+ | **❄️ Nix** | `nix run github:Pythoughts-labs/pythinker-code` | flake `apps.default` |
157
+ | **<img src="https://img.shields.io/badge/-Linux-FCC624?style=flat-square&logo=linux&logoColor=black" alt="Linux"> — system package** | Download the `.deb` or `.rpm` for your distro below | [Releases](https://github.com/Pythoughts-labs/pythinker-code/releases/latest) |
155
158
  | **🐍 Python fallback** | `pip install pythinker-code` | PyPI |
156
159
 
157
160
  Every artifact ships with a matching `.sha256` file — verify before install on
@@ -173,7 +176,7 @@ pythinker # start the interactive TUI
173
176
 
174
177
  ### 🪟 Windows — native installer
175
178
 
176
- `PythinkerSetup-0.27.0.exe` is a signed* Inno Setup wizard. Installs per-user
179
+ `PythinkerSetup-0.28.0.exe` is a signed* Inno Setup wizard. Installs per-user
177
180
  into `%LOCALAPPDATA%\Programs\Pythinker`, registers `pythinker` on your user
178
181
  PATH (`HKCU\Environment`), broadcasts `WM_SETTINGCHANGE` so new shells see
179
182
  the change. **No UAC prompt.**
@@ -184,18 +187,18 @@ irm https://pythinker.com/install.ps1 | iex
184
187
 
185
188
  # Or manually download the installer + checksum from the Releases page,
186
189
  # verify with Get-FileHash, then run:
187
- .\PythinkerSetup-0.27.0.exe
190
+ .\PythinkerSetup-0.28.0.exe
188
191
 
189
192
  # Open a fresh PowerShell
190
193
  pythinker --version
191
194
  ```
192
195
 
193
- **Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.27.0.exe /ALLUSERS`
196
+ **Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.28.0.exe /ALLUSERS`
194
197
  installs to `%ProgramFiles%\Pythinker` and writes PATH to HKLM (requires admin).
195
198
 
196
199
  **Upgrade:** `pythinker update` from inside the running app — it downloads
197
- the newest installer, verifies SHA-256, and re-runs it silently
198
- (`/VERYSILENT /SUPPRESSMSGBOXES /NORESTART`).
200
+ the newest installer, verifies SHA-256, and launches the signed Inno installer
201
+ with visible progress (`/SILENT /NORESTART /CURRENTUSER /CLOSEAPPLICATIONS /NORESTARTAPPLICATIONS`).
199
202
 
200
203
  **Uninstall:** Apps & Features → *Pythinker Code* → Uninstall reverts both
201
204
  the files and the PATH edit.
@@ -211,7 +214,7 @@ the files and the PATH edit.
211
214
 
212
215
  ```sh
213
216
  # 1. Install
214
- brew install TechMatrix-labs/pythinker/pythinker-code
217
+ brew install Pythoughts-labs/pythinker/pythinker-code
215
218
 
216
219
  # 2. Verify
217
220
  pythinker --version
@@ -227,9 +230,9 @@ latest version.
227
230
  **Upgrade:** `brew upgrade pythinker-code` (Homebrew packages don't
228
231
  auto-update; run this whenever you want the latest).
229
232
 
230
- **Uninstall:** `brew uninstall pythinker-code && brew untap TechMatrix-labs/pythinker`.
233
+ **Uninstall:** `brew uninstall pythinker-code && brew untap Pythoughts-labs/pythinker`.
231
234
 
232
- > The tap repo is [TechMatrix-labs/homebrew-pythinker](https://github.com/TechMatrix-labs/homebrew-pythinker)
235
+ > The tap repo is [Pythoughts-labs/homebrew-pythinker](https://github.com/Pythoughts-labs/homebrew-pythinker)
233
236
  > — auto-maintained, do not hand-edit.
234
237
 
235
238
  ---
@@ -241,26 +244,26 @@ attached to every GitHub Release.
241
244
 
242
245
  ```sh
243
246
  # Debian / Ubuntu (x86_64)
244
- sudo dpkg -i pythinker-code_0.27.0_amd64.deb
247
+ sudo dpkg -i pythinker-code_0.28.0_amd64.deb
245
248
  sudo apt-get install -f # only if dpkg reports missing deps
246
249
 
247
250
  # Debian / Ubuntu (ARM64)
248
- sudo dpkg -i pythinker-code_0.27.0_arm64.deb
251
+ sudo dpkg -i pythinker-code_0.28.0_arm64.deb
249
252
 
250
253
  # Fedora / RHEL / openSUSE (x86_64)
251
- curl -LO https://github.com/TechMatrix-labs/pythinker-code/releases/download/v0.27.0/pythinker-code-0.27.0.x86_64.rpm
252
- curl -LO https://github.com/TechMatrix-labs/pythinker-code/releases/download/v0.27.0/pythinker-code-0.27.0.x86_64.rpm.sha256
253
- sha256sum -c pythinker-code-0.27.0.x86_64.rpm.sha256
254
+ curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.28.0/pythinker-code-0.28.0.x86_64.rpm
255
+ curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.28.0/pythinker-code-0.28.0.x86_64.rpm.sha256
256
+ sha256sum -c pythinker-code-0.28.0.x86_64.rpm.sha256
254
257
  # Fedora / RHEL:
255
- sudo dnf install ./pythinker-code-0.27.0.x86_64.rpm
258
+ sudo dnf install ./pythinker-code-0.28.0.x86_64.rpm
256
259
  # openSUSE:
257
- sudo zypper install ./pythinker-code-0.27.0.x86_64.rpm
260
+ sudo zypper install ./pythinker-code-0.28.0.x86_64.rpm
258
261
 
259
262
  # Fedora / RHEL (aarch64)
260
- curl -LO https://github.com/TechMatrix-labs/pythinker-code/releases/download/v0.27.0/pythinker-code-0.27.0.aarch64.rpm
261
- curl -LO https://github.com/TechMatrix-labs/pythinker-code/releases/download/v0.27.0/pythinker-code-0.27.0.aarch64.rpm.sha256
262
- sha256sum -c pythinker-code-0.27.0.aarch64.rpm.sha256
263
- sudo dnf install ./pythinker-code-0.27.0.aarch64.rpm
263
+ curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.28.0/pythinker-code-0.28.0.aarch64.rpm
264
+ curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.28.0/pythinker-code-0.28.0.aarch64.rpm.sha256
265
+ sha256sum -c pythinker-code-0.28.0.aarch64.rpm.sha256
266
+ sudo dnf install ./pythinker-code-0.28.0.aarch64.rpm
264
267
  ```
265
268
 
266
269
  Both packages drop a small `/usr/bin/pythinker` launcher that execs the real
@@ -269,8 +272,8 @@ binary under `/usr/lib/pythinker/`, so your `$PATH` stays tidy.
269
272
  **Verify before install:**
270
273
 
271
274
  ```sh
272
- sha256sum -c pythinker-code_0.27.0_amd64.deb.sha256 # Debian/Ubuntu
273
- sha256sum -c pythinker-code-0.27.0.x86_64.rpm.sha256 # Fedora/RHEL
275
+ sha256sum -c pythinker-code_0.28.0_amd64.deb.sha256 # Debian/Ubuntu
276
+ sha256sum -c pythinker-code-0.28.0.x86_64.rpm.sha256 # Fedora/RHEL
274
277
  ```
275
278
 
276
279
  **Upgrade:** download the new `.deb`/`.rpm` from Releases and `dpkg -i` /
@@ -541,7 +544,7 @@ The ACP server provides:
541
544
  | 🔄 **Hot model swap** | Change models for a running ACP session |
542
545
 
543
546
  <div align="center">
544
- <img src="https://raw.githubusercontent.com/TechMatrix-labs/pythinker-code/main/docs/media/acp-integration.gif" alt="ACP IDE integration demo" width="860">
547
+ <img src="https://raw.githubusercontent.com/Pythoughts-labs/pythinker-code/main/docs/media/acp-integration.gif" alt="ACP IDE integration demo" width="860">
545
548
  </div>
546
549
 
547
550
  ---
@@ -616,7 +619,7 @@ Pythinker is a small, extensible runtime — not a monolith. Build on it.
616
619
  ## 🏗️ Architecture
617
620
 
618
621
  <div align="center">
619
- <img src="https://raw.githubusercontent.com/TechMatrix-labs/pythinker-code/main/docs/media/Architecture.webp" alt="Pythinker Code architecture diagram" width="860">
622
+ <img src="https://raw.githubusercontent.com/Pythoughts-labs/pythinker-code/main/docs/media/Architecture.webp" alt="Pythinker Code architecture diagram" width="860">
620
623
  </div>
621
624
 
622
625
  ---
@@ -696,7 +699,7 @@ are used automatically unless you turn telemetry off.
696
699
  ### 🏁 Prepare the workspace
697
700
 
698
701
  ```sh
699
- git clone https://github.com/TechMatrix-labs/pythinker-code.git
702
+ git clone https://github.com/Pythoughts-labs/pythinker-code.git
700
703
  cd pythinker-code
701
704
  make prepare
702
705
  ```
@@ -777,9 +780,9 @@ pythinker-code/
777
780
 
778
781
  Contributions are warmly welcome — bug reports, PRs, plugins, skills, and docs all help.
779
782
 
780
- - 📖 Start with [`CONTRIBUTING.md`](https://github.com/TechMatrix-labs/pythinker-code/blob/main/CONTRIBUTING.md)
781
- - 🔐 See [`SECURITY.md`](https://github.com/TechMatrix-labs/pythinker-code/blob/main/SECURITY.md) for responsible disclosure
782
- - 📜 Skim [`AGENTS.md`](https://github.com/TechMatrix-labs/pythinker-code/blob/main/AGENTS.md) for the agent design notes
783
+ - 📖 Start with [`CONTRIBUTING.md`](https://github.com/Pythoughts-labs/pythinker-code/blob/main/CONTRIBUTING.md)
784
+ - 🔐 See [`SECURITY.md`](https://github.com/Pythoughts-labs/pythinker-code/blob/main/SECURITY.md) for responsible disclosure
785
+ - 📜 Skim [`AGENTS.md`](https://github.com/Pythoughts-labs/pythinker-code/blob/main/AGENTS.md) for the agent design notes
783
786
 
784
787
  If Pythinker helps you, **a ⭐ on GitHub goes a long way.**
785
788
 
@@ -787,7 +790,7 @@ If Pythinker helps you, **a ⭐ on GitHub goes a long way.**
787
790
 
788
791
  ## 📜 License
789
792
 
790
- Distributed under the **Apache-2.0 License**. See [`LICENSE`](https://github.com/TechMatrix-labs/pythinker-code/blob/main/LICENSE) for the full text and [`NOTICE`](https://github.com/TechMatrix-labs/pythinker-code/blob/main/NOTICE) for attributions.
793
+ Distributed under the **Apache-2.0 License**. See [`LICENSE`](https://github.com/Pythoughts-labs/pythinker-code/blob/main/LICENSE) for the full text and [`NOTICE`](https://github.com/Pythoughts-labs/pythinker-code/blob/main/NOTICE) for attributions.
791
794
 
792
795
  <br />
793
796
 
@@ -797,8 +800,12 @@ Distributed under the **Apache-2.0 License**. See [`LICENSE`](https://github.com
797
800
 
798
801
  [🌐 pythinker.com](https://pythinker.com) &nbsp;·&nbsp;
799
802
  [📦 PyPI](https://pypi.org/project/pythinker-code/) &nbsp;·&nbsp;
800
- [🐙 GitHub](https://github.com/TechMatrix-labs/pythinker-code) &nbsp;·&nbsp;
803
+ [🐙 GitHub](https://github.com/Pythoughts-labs/pythinker-code) &nbsp;·&nbsp;
801
804
  [🧩 ACP](https://github.com/agentclientprotocol/agent-client-protocol) &nbsp;·&nbsp;
802
805
  [🔌 MCP](https://modelcontextprotocol.io/)
803
806
 
807
+ <p align="center">
808
+ <em>Thanks for visiting ✨ Pythinker! Viewing this README does not trigger telemetry.</em>
809
+ </p>
810
+
804
811
  </div>
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "pythinker-code"
3
- version = "0.27.0"
3
+ version = "0.28.0"
4
4
  description = "Pythinker Code is your next CLI agent."
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.12"
@@ -102,11 +102,11 @@ pythinker = "pythinker_code.__main__:main"
102
102
  pythinker-code = "pythinker_code.__main__:main"
103
103
 
104
104
  [project.urls]
105
- Homepage = "https://github.com/TechMatrix-labs/pythinker-code"
106
- Repository = "https://github.com/TechMatrix-labs/pythinker-code"
107
- Issues = "https://github.com/TechMatrix-labs/pythinker-code/issues"
108
- Changelog = "https://github.com/TechMatrix-labs/pythinker-code/blob/main/CHANGELOG.md"
109
- Documentation = "https://github.com/TechMatrix-labs/pythinker-code#readme"
105
+ Homepage = "https://github.com/Pythoughts-labs/pythinker-code"
106
+ Repository = "https://github.com/Pythoughts-labs/pythinker-code"
107
+ Issues = "https://github.com/Pythoughts-labs/pythinker-code/issues"
108
+ Changelog = "https://github.com/Pythoughts-labs/pythinker-code/blob/main/CHANGELOG.md"
109
+ Documentation = "https://github.com/Pythoughts-labs/pythinker-code#readme"
110
110
 
111
111
  [tool.ruff]
112
112
  line-length = 100
@@ -15,6 +15,24 @@ GitHub Releases page; `0.8.0` is the new starting line.
15
15
 
16
16
  ## Unreleased
17
17
 
18
+ ## 0.28.0 (2026-05-31)
19
+
20
+ ### What changed in this release
21
+
22
+ - **Repository moved to the Pythoughts-labs GitHub org.** All GitHub URLs, install scripts, CI configuration, and the default `/feedback` repository now point to `github.com/Pythoughts-labs/pythinker-code`; existing configs that still reference the previous owner are auto-migrated to the new default.
23
+ - **Broadened distribution channels for releases.** Releases now include best-effort Docker/GHCR, Scoop, Nix, and manual WinGet distribution plumbing with channel-native update markers where the installer format supports them.
24
+ - **Release preparation now uses a version single source of truth.** `scripts/release.py` rewrites derived release files from `pyproject.toml`, verifies version lockstep on every PR, enforces the frozen `pythinker-review==0.1.0` pin, and managed-channel installs now show channel-native update guidance instead of trying to self-update.
25
+ - **Node.js 24 CI with pinned, credential-checked workflows.** CI and release workflows now run on Node.js 24-backed GitHub Actions, pin action revisions to immutable commits, and preflight optional website/tap GitHub App credentials with clear errors or notices instead of opaque token failures.
26
+ - **Release pipeline hardening.** Migrate the pythinker-home website-sync dispatch to the org-owned `pythinker-release-bot` GitHub App and fail loud on an empty token; retire the dead pythinker-core API-docs gh-pages publish step; add exponential backoff to the native install scripts and fix the Windows installer's release-pagination cliff.
27
+ - **Redesigned startup welcome banner.** The banner now uses a cleaner footer-chip layout: the "What's new / Update available" chip sits on the panel's bottom border, the headline/strapline/help lines align beside the robot logo, and the info grid drops its vertical separator. The robot art and palette are unchanged.
28
+ - **Terminal-aware rendering for minimal and CI terminals.** The shell UI adapts to the terminal — ASCII glyph fallbacks for `TERM=dumb` and legacy Windows code pages, reduced-motion mode (`PYTHINKER_REDUCED_MOTION`), and `NO_COLOR`/`CLICOLOR` support that strips color cleanly — so output stays readable in CI logs, SSH panes, and bare terminals.
29
+ - **Windows updates avoid encoded PowerShell.** Native updates now launch the signed Inno installer directly with Restart Manager flags instead of a `powershell.exe -EncodedCommand` helper, reducing antivirus command-line heuristic false positives. Windows bootstrap installs use visible `/SILENT` progress instead of fully suppressed setup, and the installer build signs bundled PE files plus Inno's setup/uninstaller/temp copies when signing credentials are configured.
30
+ - **New `judge` subagent and redesigned default prompts.** Adds an independent LLM-as-judge quality-gate subagent — a cheap single spot-checking pass for high-stakes deliverables, after deterministic gates — and rewrites the default agent, plan, and system prompts for clearer, more efficient guidance.
31
+ - **`.pythinker/AGENTS.md` is no longer loaded as project instructions.** Only `AGENTS.md`/`agents.md` from the project root down to the working directory are merged. Move any instructions kept solely in `.pythinker/AGENTS.md` to a root or directory-level `AGENTS.md` (see breaking changes).
32
+ - **Read-only subagent profiles block network and git config-injection shell commands.** The `read_only`/`plan`/`review`/`verify` permission profiles now deny network clients (`curl`/`wget`/`ssh`/`git fetch`) and unsafe `git -c`/`--config-env`/`--exec-path` options that can execute arbitrary commands (for example via `core.pager`/`core.sshCommand`), closing a Shell-tool bypass of a read-only agent's no-web-tools intent.
33
+
34
+ Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.28.0`, or use the native installer for your OS (see the README install table).
35
+
18
36
  ## 0.27.0 (2026-05-31)
19
37
 
20
38
  ### What changed in this release
@@ -80,7 +98,7 @@ Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.25.0`,
80
98
  - **Complete native installer `Fetch` fix.** The 0.23.0 release bundled trafilatura's data files but missed `justext`'s stoplists directory, so the `Fetch` tool still crashed with `FileNotFoundError: ./_MEIxxxx/justext/stoplists` on `.exe`, `.deb`, and `.rpm` installs. All three installer specs now bundle both `trafilatura` and `justext` data files. PyPI / `pip install` was unaffected.
81
99
  - **Atomic "latest" release gating.** The GitHub Release is no longer marked "latest" until every platform asset (4 archives, 1 `.exe`, 4 `.deb`/`.rpm`) is attached. A dispatch workflow polls for completeness before flipping the flag, so `/releases/latest` and the in-app updater no longer serve a partially-built release during the publish window.
82
100
  - **Smarter `/update` command.** `run_update_prompt` now routes through `do_update(check_only=True)` to get a fresh PyPI version before showing the update modal, and verifies that the expected binary asset for your platform exists on the GitHub Release before initiating a native upgrade.
83
- - **Repository transferred to TechMatrix-labs.** All GitHub URLs, install script references, and CI configuration now point to `github.com/TechMatrix-labs/pythinker-code`.
101
+ - **Repository transferred to Pythoughts-labs.** All GitHub URLs, install script references, and CI configuration now point to `github.com/Pythoughts-labs/pythinker-code`.
84
102
 
85
103
  Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.24.0`, or use the native installer for your OS (see the README install table).
86
104
 
@@ -193,8 +211,8 @@ Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.14.0`,
193
211
 
194
212
  ### What changed in this release
195
213
 
196
- - **Native installers for macOS and Linux.** `brew install TechMatrix-labs/pythinker/pythinker-code` (Homebrew tap) covers both macOS (Intel + Apple Silicon) and Linux brew installs from a single auto-generated formula. Debian/Ubuntu users get `pythinker-code_x.y.z_<arch>.deb` and Fedora/RHEL/openSUSE users get `pythinker-code-x.y.z.<arch>.rpm`, both attached to every GitHub Release for `x86_64` and `aarch64`. Together with the Windows `PythinkerSetup-x.y.z.exe` shipped in 0.12.0, Pythinker now ships native installers for every supported platform — no Python, Node, or `uv` prerequisite.
197
- - **Cross-OS curl-bash native installer.** `curl -fsSL https://raw.githubusercontent.com/TechMatrix-labs/pythinker-code/main/scripts/install-native.sh | bash` detects your OS + arch, downloads the matching PyInstaller-frozen tarball from the latest Release, verifies its SHA-256, and lands the binary at `~/.local/bin/pythinker`. Supports `linux-x86_64`, `linux-aarch64`, and `macos-arm64`. Honors `--version`, `--prefix`, and `NO_COLOR`.
214
+ - **Native installers for macOS and Linux.** `brew install Pythoughts-labs/pythinker/pythinker-code` (Homebrew tap) covers both macOS (Intel + Apple Silicon) and Linux brew installs from a single auto-generated formula. Debian/Ubuntu users get `pythinker-code_x.y.z_<arch>.deb` and Fedora/RHEL/openSUSE users get `pythinker-code-x.y.z.<arch>.rpm`, both attached to every GitHub Release for `x86_64` and `aarch64`. Together with the Windows `PythinkerSetup-x.y.z.exe` shipped in 0.12.0, Pythinker now ships native installers for every supported platform — no Python, Node, or `uv` prerequisite.
215
+ - **Cross-OS curl-bash native installer.** `curl -fsSL https://raw.githubusercontent.com/Pythoughts-labs/pythinker-code/main/scripts/install-native.sh | bash` detects your OS + arch, downloads the matching PyInstaller-frozen tarball from the latest Release, verifies its SHA-256, and lands the binary at `~/.local/bin/pythinker`. Supports `linux-x86_64`, `linux-aarch64`, and `macos-arm64`. Honors `--version`, `--prefix`, and `NO_COLOR`.
198
216
  - **Homebrew tap auto-published on every release.** A new `.github/workflows/homebrew-tap.yml` waits for the PyPI publish to land, runs an in-tree formula generator (replaces the unmaintained `homebrew-pypi-poet` — see release notes for the why), and pushes `Formula/pythinker-code.rb` to the `homebrew-pythinker` tap repo. 132 transitive deps are enumerated automatically — no hand-curation per release.
199
217
  - **Tag-triggered Linux package pipeline.** A new `.github/workflows/linux-installer.yml` matrix-builds `.deb` and `.rpm` for `x86_64` and `aarch64` (the latter via QEMU on `ubuntu-latest`), then uploads all six artifacts to the GitHub Release via `softprops/action-gh-release@v2`.
200
218
  - **Frozen-binary data-files fix.** The PyInstaller specs for both the Windows and Linux pipelines now call `collect_data_files(pkg, include_py_files=False)` per package, so `pythinker_code/prompts/*.md`, `agents/default/*.yaml`, `tools/*/description.md`, `skills/*/SKILL.md`, and similar package resources are bundled into `_internal/`. Without this fix the frozen binary crashed the first time it tried to load `init.md` or an agent yaml. The Windows installer that shipped in 0.12.0 is affected; users on that build should upgrade to 0.13.0.