pythinker-code 0.31.0__tar.gz → 0.33.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 (861) hide show
  1. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/PKG-INFO +29 -29
  2. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/README.md +25 -25
  3. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/pyproject.toml +20 -3
  4. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/CHANGELOG.md +23 -0
  5. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/__main__.py +2 -2
  6. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/acp/session.py +1 -1
  7. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/agents/default/code_reviewer.yaml +1 -0
  8. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/agents/default/system.md +10 -2
  9. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/cli/__init__.py +23 -12
  10. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/cli/info.py +4 -1
  11. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/config.py +304 -14
  12. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/constant.py +11 -1
  13. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/scratchpad.py +84 -21
  14. pythinker_code-0.33.0/src/pythinker_code/session_cleanup.py +260 -0
  15. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/soul/pythinkersoul.py +19 -7
  16. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/tools/shell/__init__.py +6 -6
  17. pythinker_code-0.33.0/src/pythinker_code/tools/todo/set_todo_list.md +23 -0
  18. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/ui/print/__init__.py +1 -1
  19. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/ui/shell/__init__.py +1 -1
  20. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/ui/shell/design_system.py +3 -3
  21. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/ui/shell/glyphs.py +6 -0
  22. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/ui/shell/tool_renderers/ask_user.py +2 -1
  23. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/ui/shell/visualize/_question_panel.py +7 -5
  24. pythinker_code-0.33.0/src/pythinker_code/utils/gitignore.py +30 -0
  25. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/utils/pyinstaller.py +7 -5
  26. pythinker_code-0.31.0/src/pythinker_code/web/static/assets/_baseUniq-DC1S-iCZ.js → pythinker_code-0.33.0/src/pythinker_code/web/static/assets/_baseUniq-C5c7Nh63.js +1 -1
  27. pythinker_code-0.31.0/src/pythinker_code/web/static/assets/arc-CNIxC9rp.js → pythinker_code-0.33.0/src/pythinker_code/web/static/assets/arc-wGDWawbk.js +1 -1
  28. pythinker_code-0.31.0/src/pythinker_code/web/static/assets/architectureDiagram-VXUJARFQ-D22AlBUK.js → pythinker_code-0.33.0/src/pythinker_code/web/static/assets/architectureDiagram-VXUJARFQ-4AscMc2B.js +1 -1
  29. pythinker_code-0.31.0/src/pythinker_code/web/static/assets/blockDiagram-VD42YOAC-DVpSAL1I.js → pythinker_code-0.33.0/src/pythinker_code/web/static/assets/blockDiagram-VD42YOAC-DEYI3FFN.js +1 -1
  30. pythinker_code-0.31.0/src/pythinker_code/web/static/assets/c4Diagram-YG6GDRKO-DY7MqqYI.js → pythinker_code-0.33.0/src/pythinker_code/web/static/assets/c4Diagram-YG6GDRKO-D82QVsdJ.js +1 -1
  31. pythinker_code-0.33.0/src/pythinker_code/web/static/assets/channel-BrUcVqpT.js +1 -0
  32. pythinker_code-0.31.0/src/pythinker_code/web/static/assets/chunk-4BX2VUAB-B_-G4pwz.js → pythinker_code-0.33.0/src/pythinker_code/web/static/assets/chunk-4BX2VUAB-ElAUPWr0.js +1 -1
  33. pythinker_code-0.31.0/src/pythinker_code/web/static/assets/chunk-55IACEB6-B_k2a5Jq.js → pythinker_code-0.33.0/src/pythinker_code/web/static/assets/chunk-55IACEB6-CKN0oJnR.js +1 -1
  34. pythinker_code-0.31.0/src/pythinker_code/web/static/assets/chunk-B4BG7PRW-MBuDy8EG.js → pythinker_code-0.33.0/src/pythinker_code/web/static/assets/chunk-B4BG7PRW-DEBV7lpt.js +1 -1
  35. pythinker_code-0.31.0/src/pythinker_code/web/static/assets/chunk-DI55MBZ5-DfmDFpc4.js → pythinker_code-0.33.0/src/pythinker_code/web/static/assets/chunk-DI55MBZ5-DGqkIwPc.js +1 -1
  36. pythinker_code-0.31.0/src/pythinker_code/web/static/assets/chunk-FMBD7UC4-C1QitF6h.js → pythinker_code-0.33.0/src/pythinker_code/web/static/assets/chunk-FMBD7UC4-B63mxVoz.js +1 -1
  37. pythinker_code-0.31.0/src/pythinker_code/web/static/assets/chunk-QN33PNHL-B8pwIVZJ.js → pythinker_code-0.33.0/src/pythinker_code/web/static/assets/chunk-QN33PNHL-Bbyimc_t.js +1 -1
  38. pythinker_code-0.31.0/src/pythinker_code/web/static/assets/chunk-QZHKN3VN-BageYt4Z.js → pythinker_code-0.33.0/src/pythinker_code/web/static/assets/chunk-QZHKN3VN-CFOPXuBD.js +1 -1
  39. pythinker_code-0.31.0/src/pythinker_code/web/static/assets/chunk-TZMSLE5B-DhaLY-N2.js → pythinker_code-0.33.0/src/pythinker_code/web/static/assets/chunk-TZMSLE5B-C3ys1w9S.js +1 -1
  40. pythinker_code-0.33.0/src/pythinker_code/web/static/assets/classDiagram-2ON5EDUG-DxxI75B9.js +1 -0
  41. pythinker_code-0.33.0/src/pythinker_code/web/static/assets/classDiagram-v2-WZHVMYZB-DxxI75B9.js +1 -0
  42. pythinker_code-0.33.0/src/pythinker_code/web/static/assets/clone-BR0Xjhp7.js +1 -0
  43. pythinker_code-0.31.0/src/pythinker_code/web/static/assets/code-block-IT6T5CEO-CNl1SkHd.js → pythinker_code-0.33.0/src/pythinker_code/web/static/assets/code-block-IT6T5CEO-DM099gsS.js +1 -1
  44. pythinker_code-0.31.0/src/pythinker_code/web/static/assets/cose-bilkent-S5V4N54A-DhjvW-0t.js → pythinker_code-0.33.0/src/pythinker_code/web/static/assets/cose-bilkent-S5V4N54A-YrhIX5dv.js +1 -1
  45. pythinker_code-0.31.0/src/pythinker_code/web/static/assets/cytoscape.esm-BP8Niknm.js → pythinker_code-0.33.0/src/pythinker_code/web/static/assets/cytoscape.esm-Zf1nBsA6.js +1 -1
  46. pythinker_code-0.31.0/src/pythinker_code/web/static/assets/dagre-6UL2VRFP-BmhRJqGX.js → pythinker_code-0.33.0/src/pythinker_code/web/static/assets/dagre-6UL2VRFP-aKXzZ9F3.js +1 -1
  47. pythinker_code-0.31.0/src/pythinker_code/web/static/assets/diagram-PSM6KHXK-B973QVta.js → pythinker_code-0.33.0/src/pythinker_code/web/static/assets/diagram-PSM6KHXK-CkV-2sGy.js +1 -1
  48. pythinker_code-0.31.0/src/pythinker_code/web/static/assets/diagram-QEK2KX5R-cZ4eUsCm.js → pythinker_code-0.33.0/src/pythinker_code/web/static/assets/diagram-QEK2KX5R-Xj41jacR.js +1 -1
  49. pythinker_code-0.31.0/src/pythinker_code/web/static/assets/diagram-S2PKOQOG-BvfODp16.js → pythinker_code-0.33.0/src/pythinker_code/web/static/assets/diagram-S2PKOQOG-CqEm8g2w.js +1 -1
  50. pythinker_code-0.31.0/src/pythinker_code/web/static/assets/erDiagram-Q2GNP2WA-CK_SQro3.js → pythinker_code-0.33.0/src/pythinker_code/web/static/assets/erDiagram-Q2GNP2WA-YMCzrLvU.js +1 -1
  51. pythinker_code-0.31.0/src/pythinker_code/web/static/assets/flowDiagram-NV44I4VS-BaBdXQpa.js → pythinker_code-0.33.0/src/pythinker_code/web/static/assets/flowDiagram-NV44I4VS-B6bDGKpp.js +1 -1
  52. pythinker_code-0.31.0/src/pythinker_code/web/static/assets/ganttDiagram-JELNMOA3-JygtVfFR.js → pythinker_code-0.33.0/src/pythinker_code/web/static/assets/ganttDiagram-JELNMOA3-Dc8jTgzs.js +1 -1
  53. pythinker_code-0.31.0/src/pythinker_code/web/static/assets/gitGraphDiagram-NY62KEGX-DqHdVsF_.js → pythinker_code-0.33.0/src/pythinker_code/web/static/assets/gitGraphDiagram-NY62KEGX-BSKxBXYb.js +1 -1
  54. pythinker_code-0.31.0/src/pythinker_code/web/static/assets/graph-CqNFO2CC.js → pythinker_code-0.33.0/src/pythinker_code/web/static/assets/graph-jm_L-_tC.js +1 -1
  55. pythinker_code-0.31.0/src/pythinker_code/web/static/assets/index-DtuQ8kEJ.js → pythinker_code-0.33.0/src/pythinker_code/web/static/assets/index-B-dC__aS.js +2 -2
  56. pythinker_code-0.31.0/src/pythinker_code/web/static/assets/index--MUKtzM2.js → pythinker_code-0.33.0/src/pythinker_code/web/static/assets/index-eTN3m28s.js +1 -1
  57. pythinker_code-0.31.0/src/pythinker_code/web/static/assets/index-LuO0e-kY.js → pythinker_code-0.33.0/src/pythinker_code/web/static/assets/index-exEA1ykh.js +1 -1
  58. pythinker_code-0.31.0/src/pythinker_code/web/static/assets/infoDiagram-WHAUD3N6-Cg2t3pTH.js → pythinker_code-0.33.0/src/pythinker_code/web/static/assets/infoDiagram-WHAUD3N6-mteN2QyX.js +1 -1
  59. pythinker_code-0.31.0/src/pythinker_code/web/static/assets/journeyDiagram-XKPGCS4Q-D9UsLYjz.js → pythinker_code-0.33.0/src/pythinker_code/web/static/assets/journeyDiagram-XKPGCS4Q-Dm0F_eBH.js +1 -1
  60. pythinker_code-0.31.0/src/pythinker_code/web/static/assets/kanban-definition-3W4ZIXB7-B1ccdtFp.js → pythinker_code-0.33.0/src/pythinker_code/web/static/assets/kanban-definition-3W4ZIXB7-OkIIljOL.js +1 -1
  61. pythinker_code-0.31.0/src/pythinker_code/web/static/assets/layout-CWAKOsro.js → pythinker_code-0.33.0/src/pythinker_code/web/static/assets/layout-CDfd4Vfp.js +1 -1
  62. pythinker_code-0.31.0/src/pythinker_code/web/static/assets/linear-Bi5qHtyA.js → pythinker_code-0.33.0/src/pythinker_code/web/static/assets/linear-6Qgq3Hhp.js +1 -1
  63. pythinker_code-0.31.0/src/pythinker_code/web/static/assets/mermaid-VLURNSYL-CIhTmKgJ.js → pythinker_code-0.33.0/src/pythinker_code/web/static/assets/mermaid-VLURNSYL-BfKKO4Fk.js +7 -7
  64. pythinker_code-0.31.0/src/pythinker_code/web/static/assets/mermaid.core-BSyEijZn.js → pythinker_code-0.33.0/src/pythinker_code/web/static/assets/mermaid.core-5gTJ2jDv.js +5 -5
  65. pythinker_code-0.31.0/src/pythinker_code/web/static/assets/min-DcfRBc53.js → pythinker_code-0.33.0/src/pythinker_code/web/static/assets/min-BW7z87Ag.js +1 -1
  66. pythinker_code-0.31.0/src/pythinker_code/web/static/assets/mindmap-definition-VGOIOE7T-CwWyeU_z.js → pythinker_code-0.33.0/src/pythinker_code/web/static/assets/mindmap-definition-VGOIOE7T-D0UbUS9d.js +1 -1
  67. pythinker_code-0.31.0/src/pythinker_code/web/static/assets/pieDiagram-ADFJNKIX-DFRPs9ex.js → pythinker_code-0.33.0/src/pythinker_code/web/static/assets/pieDiagram-ADFJNKIX-DuEUsS5O.js +1 -1
  68. pythinker_code-0.31.0/src/pythinker_code/web/static/assets/quadrantDiagram-AYHSOK5B-DZ11KGHj.js → pythinker_code-0.33.0/src/pythinker_code/web/static/assets/quadrantDiagram-AYHSOK5B-DO2wDvJM.js +1 -1
  69. pythinker_code-0.31.0/src/pythinker_code/web/static/assets/requirementDiagram-UZGBJVZJ-DgcpMAX5.js → pythinker_code-0.33.0/src/pythinker_code/web/static/assets/requirementDiagram-UZGBJVZJ-MXvtoTKr.js +1 -1
  70. pythinker_code-0.31.0/src/pythinker_code/web/static/assets/sankeyDiagram-TZEHDZUN-C_VstXTy.js → pythinker_code-0.33.0/src/pythinker_code/web/static/assets/sankeyDiagram-TZEHDZUN-DKWwSToy.js +1 -1
  71. pythinker_code-0.31.0/src/pythinker_code/web/static/assets/sequenceDiagram-WL72ISMW-OQ6FDYjg.js → pythinker_code-0.33.0/src/pythinker_code/web/static/assets/sequenceDiagram-WL72ISMW-BpAfLbSG.js +1 -1
  72. pythinker_code-0.31.0/src/pythinker_code/web/static/assets/stateDiagram-FKZM4ZOC-BlkYAfhC.js → pythinker_code-0.33.0/src/pythinker_code/web/static/assets/stateDiagram-FKZM4ZOC-BNX4SASt.js +1 -1
  73. pythinker_code-0.33.0/src/pythinker_code/web/static/assets/stateDiagram-v2-4FDKWEC3-BZXAei8F.js +1 -0
  74. pythinker_code-0.31.0/src/pythinker_code/web/static/assets/timeline-definition-IT6M3QCI-v6F5SqKJ.js → pythinker_code-0.33.0/src/pythinker_code/web/static/assets/timeline-definition-IT6M3QCI-ZpnanLQl.js +1 -1
  75. pythinker_code-0.31.0/src/pythinker_code/web/static/assets/treemap-KMMF4GRG-DxTEDpFb.js → pythinker_code-0.33.0/src/pythinker_code/web/static/assets/treemap-KMMF4GRG-BQoT0phU.js +1 -1
  76. pythinker_code-0.31.0/src/pythinker_code/web/static/assets/xychartDiagram-PRI3JC2R-C-t5auMI.js → pythinker_code-0.33.0/src/pythinker_code/web/static/assets/xychartDiagram-PRI3JC2R-CLTwggcu.js +1 -1
  77. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/index.html +1 -1
  78. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/wire/__init__.py +4 -1
  79. pythinker_code-0.31.0/src/pythinker_code/tools/todo/set_todo_list.md +0 -23
  80. pythinker_code-0.31.0/src/pythinker_code/web/static/assets/channel-DYd7h4UI.js +0 -1
  81. pythinker_code-0.31.0/src/pythinker_code/web/static/assets/classDiagram-2ON5EDUG-C4KNVG4M.js +0 -1
  82. pythinker_code-0.31.0/src/pythinker_code/web/static/assets/classDiagram-v2-WZHVMYZB-C4KNVG4M.js +0 -1
  83. pythinker_code-0.31.0/src/pythinker_code/web/static/assets/clone-Drzw88ja.js +0 -1
  84. pythinker_code-0.31.0/src/pythinker_code/web/static/assets/stateDiagram-v2-4FDKWEC3-D-CmmJDB.js +0 -1
  85. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/LICENSE +0 -0
  86. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/NOTICE +0 -0
  87. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/__init__.py +0 -0
  88. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/acp/AGENTS.md +0 -0
  89. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/acp/__init__.py +0 -0
  90. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/acp/convert.py +0 -0
  91. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/acp/host.py +0 -0
  92. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/acp/mcp.py +0 -0
  93. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/acp/server.py +0 -0
  94. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/acp/tools.py +0 -0
  95. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/acp/types.py +0 -0
  96. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/acp/version.py +0 -0
  97. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/agents/default/agent.yaml +0 -0
  98. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/agents/default/coder.yaml +0 -0
  99. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/agents/default/debugger.yaml +0 -0
  100. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/agents/default/explore.yaml +0 -0
  101. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/agents/default/implementer.yaml +0 -0
  102. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/agents/default/judge.yaml +0 -0
  103. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/agents/default/plan.yaml +0 -0
  104. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/agents/default/review.yaml +0 -0
  105. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/agents/default/security_reviewer.yaml +0 -0
  106. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/agents/default/verifier.yaml +0 -0
  107. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/agents/okabe/agent.yaml +0 -0
  108. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/agentspec.py +0 -0
  109. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/app.py +0 -0
  110. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/approval_runtime/__init__.py +0 -0
  111. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/approval_runtime/models.py +0 -0
  112. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/approval_runtime/runtime.py +0 -0
  113. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/auth/__init__.py +0 -0
  114. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/auth/anthropic_direct.py +0 -0
  115. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/auth/browser_login_page.py +0 -0
  116. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/auth/deepseek.py +0 -0
  117. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/auth/github_feedback.py +0 -0
  118. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/auth/lm_studio.py +0 -0
  119. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/auth/minimax.py +0 -0
  120. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/auth/oauth.py +0 -0
  121. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/auth/ollama.py +0 -0
  122. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/auth/openai.py +0 -0
  123. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/auth/opencode_go.py +0 -0
  124. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/auth/openrouter.py +0 -0
  125. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/auth/platforms.py +0 -0
  126. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/background/__init__.py +0 -0
  127. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/background/agent_runner.py +0 -0
  128. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/background/ids.py +0 -0
  129. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/background/manager.py +0 -0
  130. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/background/models.py +0 -0
  131. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/background/store.py +0 -0
  132. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/background/summary.py +0 -0
  133. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/background/worker.py +0 -0
  134. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/cli/__main__.py +0 -0
  135. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/cli/_lazy_group.py +0 -0
  136. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/cli/debug.py +0 -0
  137. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/cli/export.py +0 -0
  138. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/cli/mcp.py +0 -0
  139. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/cli/plugin.py +0 -0
  140. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/cli/review.py +0 -0
  141. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/cli/secscan.py +0 -0
  142. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/cli/security_scan.py +0 -0
  143. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/cli/skill.py +0 -0
  144. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/cli/toad.py +0 -0
  145. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/cli/update.py +0 -0
  146. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/cli/vis.py +0 -0
  147. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/cli/web.py +0 -0
  148. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/events.py +0 -0
  149. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/exception.py +0 -0
  150. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/execution_profiles.py +0 -0
  151. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/extensions.py +0 -0
  152. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/feedback.py +0 -0
  153. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/feedback_repo.py +0 -0
  154. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/file_restore.py +0 -0
  155. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/hooks/__init__.py +0 -0
  156. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/hooks/config.py +0 -0
  157. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/hooks/engine.py +0 -0
  158. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/hooks/events.py +0 -0
  159. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/hooks/runner.py +0 -0
  160. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/llm.py +0 -0
  161. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/memory/__init__.py +0 -0
  162. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/memory/consolidation.py +0 -0
  163. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/memory/harvest.py +0 -0
  164. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/memory/recall.py +0 -0
  165. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/memory/recap.py +0 -0
  166. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/memory/retriever.py +0 -0
  167. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/memory/sanitize.py +0 -0
  168. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/metadata.py +0 -0
  169. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/native.py +0 -0
  170. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/notifications/__init__.py +0 -0
  171. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/notifications/llm.py +0 -0
  172. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/notifications/manager.py +0 -0
  173. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/notifications/models.py +0 -0
  174. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/notifications/notifier.py +0 -0
  175. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/notifications/store.py +0 -0
  176. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/notifications/wire.py +0 -0
  177. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/plugin/__init__.py +0 -0
  178. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/plugin/manager.py +0 -0
  179. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/plugin/tool.py +0 -0
  180. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/project_memory.py +0 -0
  181. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/prompt_templates.py +0 -0
  182. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/prompts/__init__.py +0 -0
  183. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/prompts/compact.md +0 -0
  184. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/prompts/init.md +0 -0
  185. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/py.typed +0 -0
  186. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/session.py +0 -0
  187. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/session_fork.py +0 -0
  188. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/session_recap.py +0 -0
  189. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/session_state.py +0 -0
  190. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/share.py +0 -0
  191. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/skill/__init__.py +0 -0
  192. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/skill/flow/__init__.py +0 -0
  193. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/skill/flow/d2.py +0 -0
  194. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/skill/flow/mermaid.py +0 -0
  195. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/skill/lockfile.py +0 -0
  196. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/skills/check-impl-against-spec/SKILL.md +0 -0
  197. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/skills/create-pr/SKILL.md +0 -0
  198. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/skills/diagnose-ci-failures/SKILL.md +0 -0
  199. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/skills/fix-errors/SKILL.md +0 -0
  200. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/skills/implement-specs/SKILL.md +0 -0
  201. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/skills/pr-walkthrough/SKILL.md +0 -0
  202. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/skills/pythinker-code-help/SKILL.md +0 -0
  203. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/skills/reproduce-bug-report/SKILL.md +0 -0
  204. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/skills/resolve-merge-conflicts/SKILL.md +0 -0
  205. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/skills/review-pr/SKILL.md +0 -0
  206. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/skills/skill-creator/SKILL.md +0 -0
  207. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/skills/spec-driven-implementation/SKILL.md +0 -0
  208. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/skills/write-product-spec/SKILL.md +0 -0
  209. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/skills/write-tech-spec/SKILL.md +0 -0
  210. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/soul/__init__.py +0 -0
  211. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/soul/agent.py +0 -0
  212. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/soul/approval.py +0 -0
  213. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/soul/btw.py +0 -0
  214. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/soul/compaction.py +0 -0
  215. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/soul/compaction_restore.py +0 -0
  216. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/soul/context.py +0 -0
  217. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/soul/deliberation.py +0 -0
  218. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/soul/denwarenji.py +0 -0
  219. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/soul/dynamic_injection.py +0 -0
  220. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/soul/dynamic_injections/__init__.py +0 -0
  221. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/soul/dynamic_injections/auto_mode.py +0 -0
  222. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/soul/dynamic_injections/plan_mode.py +0 -0
  223. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/soul/message.py +0 -0
  224. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/soul/permission.py +0 -0
  225. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/soul/slash.py +0 -0
  226. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/soul/toolset.py +0 -0
  227. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/subagents/__init__.py +0 -0
  228. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/subagents/builder.py +0 -0
  229. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/subagents/core.py +0 -0
  230. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/subagents/discovery.py +0 -0
  231. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/subagents/git_context.py +0 -0
  232. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/subagents/models.py +0 -0
  233. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/subagents/output.py +0 -0
  234. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/subagents/registry.py +0 -0
  235. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/subagents/runner.py +0 -0
  236. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/subagents/store.py +0 -0
  237. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/telemetry/__init__.py +0 -0
  238. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/telemetry/config.py +0 -0
  239. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/telemetry/crash.py +0 -0
  240. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/telemetry/errors.py +0 -0
  241. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/telemetry/metrics.py +0 -0
  242. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/telemetry/otel.py +0 -0
  243. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/telemetry/sentry.py +0 -0
  244. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/telemetry/sink.py +0 -0
  245. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/thinking.py +0 -0
  246. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/tools/AGENTS.md +0 -0
  247. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/tools/__init__.py +0 -0
  248. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/tools/agent/__init__.py +0 -0
  249. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/tools/agent/description.md +0 -0
  250. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/tools/ask_user/__init__.py +0 -0
  251. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/tools/ask_user/description.md +0 -0
  252. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/tools/background/__init__.py +0 -0
  253. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/tools/background/handoff.md +0 -0
  254. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/tools/background/input.md +0 -0
  255. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/tools/background/list.md +0 -0
  256. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/tools/background/output.md +0 -0
  257. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/tools/background/stop.md +0 -0
  258. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/tools/display.py +0 -0
  259. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/tools/dmail/__init__.py +0 -0
  260. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/tools/dmail/dmail.md +0 -0
  261. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/tools/file/__init__.py +0 -0
  262. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/tools/file/glob.md +0 -0
  263. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/tools/file/glob.py +0 -0
  264. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/tools/file/grep.md +0 -0
  265. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/tools/file/grep_local.py +0 -0
  266. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/tools/file/plan_mode.py +0 -0
  267. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/tools/file/read.md +0 -0
  268. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/tools/file/read.py +0 -0
  269. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/tools/file/read_media.md +0 -0
  270. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/tools/file/read_media.py +0 -0
  271. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/tools/file/replace.md +0 -0
  272. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/tools/file/replace.py +0 -0
  273. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/tools/file/utils.py +0 -0
  274. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/tools/file/write.md +0 -0
  275. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/tools/file/write.py +0 -0
  276. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/tools/memory/__init__.py +0 -0
  277. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/tools/memory/memory.md +0 -0
  278. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/tools/plan/__init__.py +0 -0
  279. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/tools/plan/description.md +0 -0
  280. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/tools/plan/enter.py +0 -0
  281. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/tools/plan/enter_description.md +0 -0
  282. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/tools/plan/handoff.py +0 -0
  283. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/tools/plan/heroes.py +0 -0
  284. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/tools/scratchpad/__init__.py +0 -0
  285. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/tools/scratchpad/scratchpad_tool.md +0 -0
  286. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/tools/shell/bash.md +0 -0
  287. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/tools/shell/powershell.md +0 -0
  288. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/tools/skill/__init__.py +0 -0
  289. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/tools/skill/description.md +0 -0
  290. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/tools/test.py +0 -0
  291. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/tools/think/__init__.py +0 -0
  292. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/tools/think/think.md +0 -0
  293. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/tools/todo/__init__.py +0 -0
  294. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/tools/utils.py +0 -0
  295. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/tools/web/__init__.py +0 -0
  296. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/tools/web/_allowlist.py +0 -0
  297. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/tools/web/fetch.md +0 -0
  298. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/tools/web/fetch.py +0 -0
  299. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/tools/web/search.md +0 -0
  300. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/tools/web/search.py +0 -0
  301. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/ui/__init__.py +0 -0
  302. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/ui/acp/__init__.py +0 -0
  303. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/ui/print/visualize.py +0 -0
  304. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/ui/shell/components/__init__.py +0 -0
  305. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/ui/shell/components/base.py +0 -0
  306. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/ui/shell/components/bash_execution.py +0 -0
  307. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/ui/shell/components/bordered_loader.py +0 -0
  308. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/ui/shell/components/diff.py +0 -0
  309. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/ui/shell/components/dynamic_border.py +0 -0
  310. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/ui/shell/components/footer.py +0 -0
  311. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/ui/shell/components/key_hints.py +0 -0
  312. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/ui/shell/components/markdown.py +0 -0
  313. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/ui/shell/components/messages.py +0 -0
  314. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/ui/shell/components/panel.py +0 -0
  315. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/ui/shell/components/render_utils.py +0 -0
  316. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/ui/shell/components/report.py +0 -0
  317. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/ui/shell/components/settings_list.py +0 -0
  318. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/ui/shell/components/special_messages.py +0 -0
  319. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/ui/shell/components/tool_execution.py +0 -0
  320. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/ui/shell/console.py +0 -0
  321. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/ui/shell/debug.py +0 -0
  322. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/ui/shell/echo.py +0 -0
  323. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/ui/shell/export_import.py +0 -0
  324. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/ui/shell/keyboard.py +0 -0
  325. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/ui/shell/keymap.py +0 -0
  326. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/ui/shell/mcp_status.py +0 -0
  327. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/ui/shell/model_picker.py +0 -0
  328. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/ui/shell/motion.py +0 -0
  329. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/ui/shell/oauth.py +0 -0
  330. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/ui/shell/placeholders.py +0 -0
  331. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/ui/shell/prompt.py +0 -0
  332. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/ui/shell/render_constants.py +0 -0
  333. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/ui/shell/replay.py +0 -0
  334. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/ui/shell/selector.py +0 -0
  335. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/ui/shell/selectors/__init__.py +0 -0
  336. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/ui/shell/selectors/extension.py +0 -0
  337. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/ui/shell/selectors/oauth.py +0 -0
  338. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/ui/shell/selectors/settings.py +0 -0
  339. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/ui/shell/selectors/show_images.py +0 -0
  340. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/ui/shell/selectors/theme.py +0 -0
  341. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/ui/shell/selectors/thinking.py +0 -0
  342. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/ui/shell/session_picker.py +0 -0
  343. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/ui/shell/setup.py +0 -0
  344. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/ui/shell/slash.py +0 -0
  345. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/ui/shell/spacing.py +0 -0
  346. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/ui/shell/spinner_words.py +0 -0
  347. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/ui/shell/startup.py +0 -0
  348. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/ui/shell/task_browser.py +0 -0
  349. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/ui/shell/tips.py +0 -0
  350. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/ui/shell/tool_renderers/__init__.py +0 -0
  351. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/ui/shell/tool_renderers/_file_diff.py +0 -0
  352. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/ui/shell/tool_renderers/_render_utils.py +0 -0
  353. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/ui/shell/tool_renderers/agent.py +0 -0
  354. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/ui/shell/tool_renderers/background.py +0 -0
  355. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/ui/shell/tool_renderers/bash.py +0 -0
  356. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/ui/shell/tool_renderers/edit.py +0 -0
  357. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/ui/shell/tool_renderers/find.py +0 -0
  358. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/ui/shell/tool_renderers/generic.py +0 -0
  359. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/ui/shell/tool_renderers/grep.py +0 -0
  360. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/ui/shell/tool_renderers/plan.py +0 -0
  361. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/ui/shell/tool_renderers/read.py +0 -0
  362. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/ui/shell/tool_renderers/skill.py +0 -0
  363. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/ui/shell/tool_renderers/think.py +0 -0
  364. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/ui/shell/tool_renderers/todo.py +0 -0
  365. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/ui/shell/tool_renderers/web.py +0 -0
  366. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/ui/shell/tool_renderers/write.py +0 -0
  367. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/ui/shell/update.py +0 -0
  368. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/ui/shell/update_orchestrator.py +0 -0
  369. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/ui/shell/usage.py +0 -0
  370. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/ui/shell/usage_adapters/__init__.py +0 -0
  371. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/ui/shell/usage_adapters/anthropic_admin.py +0 -0
  372. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/ui/shell/usage_adapters/base.py +0 -0
  373. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/ui/shell/usage_adapters/deepseek.py +0 -0
  374. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/ui/shell/usage_adapters/minimax.py +0 -0
  375. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/ui/shell/usage_adapters/openai_admin.py +0 -0
  376. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/ui/shell/usage_adapters/openai_chatgpt.py +0 -0
  377. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/ui/shell/usage_adapters/opencode_go.py +0 -0
  378. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/ui/shell/usage_adapters/openrouter.py +0 -0
  379. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/ui/shell/usage_adapters/pythinker.py +0 -0
  380. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/ui/shell/usage_adapters/pythinker_ai.py +0 -0
  381. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/ui/shell/usage_render.py +0 -0
  382. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/ui/shell/visualize/__init__.py +0 -0
  383. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/ui/shell/visualize/_activity_tree.py +0 -0
  384. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/ui/shell/visualize/_approval_panel.py +0 -0
  385. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/ui/shell/visualize/_blocks.py +0 -0
  386. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/ui/shell/visualize/_btw_panel.py +0 -0
  387. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/ui/shell/visualize/_dialog_shell.py +0 -0
  388. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/ui/shell/visualize/_input_router.py +0 -0
  389. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/ui/shell/visualize/_interactive.py +0 -0
  390. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/ui/shell/visualize/_live_view.py +0 -0
  391. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/ui/shell/visualize/_transcript.py +0 -0
  392. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/ui/shell/visualize/_worklog.py +0 -0
  393. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/ui/terminal_capabilities.py +0 -0
  394. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/ui/theme.py +0 -0
  395. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/ui/tui_config.py +0 -0
  396. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/usage_ratelimit_cache.py +0 -0
  397. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/utils/__init__.py +0 -0
  398. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/utils/aiohttp.py +0 -0
  399. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/utils/aioqueue.py +0 -0
  400. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/utils/broadcast.py +0 -0
  401. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/utils/changelog.py +0 -0
  402. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/utils/clipboard.py +0 -0
  403. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/utils/datetime.py +0 -0
  404. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/utils/diff.py +0 -0
  405. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/utils/editor.py +0 -0
  406. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/utils/environment.py +0 -0
  407. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/utils/envvar.py +0 -0
  408. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/utils/export.py +0 -0
  409. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/utils/file_filter.py +0 -0
  410. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/utils/frontmatter.py +0 -0
  411. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/utils/io.py +0 -0
  412. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/utils/logging.py +0 -0
  413. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/utils/media_tags.py +0 -0
  414. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/utils/message.py +0 -0
  415. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/utils/path.py +0 -0
  416. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/utils/proctitle.py +0 -0
  417. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/utils/proxy.py +0 -0
  418. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/utils/rich/__init__.py +0 -0
  419. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/utils/rich/columns.py +0 -0
  420. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/utils/rich/diff_render.py +0 -0
  421. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/utils/rich/markdown.py +0 -0
  422. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/utils/rich/markdown_sample.md +0 -0
  423. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/utils/rich/markdown_sample_short.md +0 -0
  424. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/utils/rich/syntax.py +0 -0
  425. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/utils/sensitive.py +0 -0
  426. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/utils/server.py +0 -0
  427. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/utils/signals.py +0 -0
  428. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/utils/slashcmd.py +0 -0
  429. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/utils/sleep_inhibitor.py +0 -0
  430. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/utils/string.py +0 -0
  431. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/utils/subprocess_env.py +0 -0
  432. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/utils/term.py +0 -0
  433. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/utils/typing.py +0 -0
  434. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/vis/__init__.py +0 -0
  435. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/vis/api/__init__.py +0 -0
  436. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/vis/api/sessions.py +0 -0
  437. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/vis/api/statistics.py +0 -0
  438. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/vis/api/system.py +0 -0
  439. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/vis/app.py +0 -0
  440. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/vis/static/assets/highlighted-body-B3W2YXNL-CY1rtwrX.js +0 -0
  441. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/vis/static/assets/index-DSRInNnm.css +0 -0
  442. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/vis/static/assets/index-DgmTI2M_.js +0 -0
  443. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/vis/static/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
  444. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/vis/static/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
  445. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/vis/static/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
  446. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/vis/static/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
  447. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/vis/static/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
  448. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/vis/static/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
  449. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/vis/static/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
  450. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/vis/static/index.html +0 -0
  451. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/__init__.py +0 -0
  452. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/api/__init__.py +0 -0
  453. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/api/config.py +0 -0
  454. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/api/open_in.py +0 -0
  455. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/api/sessions.py +0 -0
  456. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/app.py +0 -0
  457. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/auth.py +0 -0
  458. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/models.py +0 -0
  459. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/runner/__init__.py +0 -0
  460. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/runner/messages.py +0 -0
  461. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/runner/process.py +0 -0
  462. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/runner/worker.py +0 -0
  463. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/_headers +0 -0
  464. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  465. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  466. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  467. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  468. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  469. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  470. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  471. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  472. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  473. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  474. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  475. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  476. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  477. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  478. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  479. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  480. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  481. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  482. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  483. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  484. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  485. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  486. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  487. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  488. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  489. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  490. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  491. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  492. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  493. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  494. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  495. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  496. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  497. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  498. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  499. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  500. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  501. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  502. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  503. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  504. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  505. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  506. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  507. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  508. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  509. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  510. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  511. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  512. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  513. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  514. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  515. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  516. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  517. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  518. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  519. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  520. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  521. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  522. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  523. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/abap-BdImnpbu.js +0 -0
  524. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/actionscript-3-CfeIJUat.js +0 -0
  525. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/ada-bCR0ucgS.js +0 -0
  526. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/andromeeda-C-Jbm3Hp.js +0 -0
  527. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/angular-html-CU67Zn6k.js +0 -0
  528. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/angular-ts-BwZT4LLn.js +0 -0
  529. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/apache-Pmp26Uib.js +0 -0
  530. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/apex-D8_7TLub.js +0 -0
  531. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/apl-dKokRX4l.js +0 -0
  532. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/applescript-Co6uUVPk.js +0 -0
  533. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/ara-BRHolxvo.js +0 -0
  534. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/asciidoc-Dv7Oe6Be.js +0 -0
  535. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/asm-D_Q5rh1f.js +0 -0
  536. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/astro-CbQHKStN.js +0 -0
  537. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/aurora-x-D-2ljcwZ.js +0 -0
  538. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/awk-DMzUqQB5.js +0 -0
  539. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/ayu-dark-CmMr59Fi.js +0 -0
  540. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/ballerina-BFfxhgS-.js +0 -0
  541. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/bat-BkioyH1T.js +0 -0
  542. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/beancount-k_qm7-4y.js +0 -0
  543. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/berry-uYugtg8r.js +0 -0
  544. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/bibtex-CHM0blh-.js +0 -0
  545. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/bicep-Bmn6On1c.js +0 -0
  546. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/blade-D4QpJJKB.js +0 -0
  547. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/bsl-BO_Y6i37.js +0 -0
  548. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/c-BIGW1oBm.js +0 -0
  549. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/c3-VCDPK7BO.js +0 -0
  550. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/cadence-Bv_4Rxtq.js +0 -0
  551. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/cairo-KRGpt6FW.js +0 -0
  552. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/catppuccin-frappe-DFWUc33u.js +0 -0
  553. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/catppuccin-latte-C9dUb6Cb.js +0 -0
  554. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/catppuccin-macchiato-DQyhUUbL.js +0 -0
  555. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/catppuccin-mocha-D87Tk5Gz.js +0 -0
  556. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/clarity-D53aC0YG.js +0 -0
  557. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/clojure-P80f7IUj.js +0 -0
  558. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/cmake-D1j8_8rp.js +0 -0
  559. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/cobol-nwyudZeR.js +0 -0
  560. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/codeowners-Bp6g37R7.js +0 -0
  561. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/codeql-DsOJ9woJ.js +0 -0
  562. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/coffee-Ch7k5sss.js +0 -0
  563. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/common-lisp-Cg-RD9OK.js +0 -0
  564. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/coq-DkFqJrB1.js +0 -0
  565. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/cpp-CofmeUqb.js +0 -0
  566. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/crystal-tKQVLTB8.js +0 -0
  567. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/csharp-K5feNrxe.js +0 -0
  568. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/css-DPfMkruS.js +0 -0
  569. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/csv-fuZLfV_i.js +0 -0
  570. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/cue-D82EKSYY.js +0 -0
  571. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/cypher-COkxafJQ.js +0 -0
  572. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/d-85-TOEBH.js +0 -0
  573. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/dark-plus-C3mMm8J8.js +0 -0
  574. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/dart-CF10PKvl.js +0 -0
  575. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/dax-CEL-wOlO.js +0 -0
  576. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/defaultLocale-DX6XiGOO.js +0 -0
  577. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/desktop-BmXAJ9_W.js +0 -0
  578. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/diff-D97Zzqfu.js +0 -0
  579. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/docker-BcOcwvcX.js +0 -0
  580. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/dotenv-Da5cRb03.js +0 -0
  581. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/dracula-BzJJZx-M.js +0 -0
  582. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/dracula-soft-BXkSAIEj.js +0 -0
  583. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/dream-maker-BtqSS_iP.js +0 -0
  584. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/edge-BkV0erSs.js +0 -0
  585. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/elixir-CDX3lj18.js +0 -0
  586. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/elm-DbKCFpqz.js +0 -0
  587. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/emacs-lisp-C9XAeP06.js +0 -0
  588. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/erb-BOJIQeun.js +0 -0
  589. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/erlang-DsQrWhSR.js +0 -0
  590. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/everforest-dark-BgDCqdQA.js +0 -0
  591. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/everforest-light-C8M2exoo.js +0 -0
  592. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/fennel-BYunw83y.js +0 -0
  593. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/fish-BvzEVeQv.js +0 -0
  594. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/fluent-C4IJs8-o.js +0 -0
  595. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/fortran-fixed-form-CkoXwp7k.js +0 -0
  596. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/fortran-free-form-BxgE0vQu.js +0 -0
  597. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/fsharp-CXgrBDvD.js +0 -0
  598. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/gdresource-B7Tvp0Sc.js +0 -0
  599. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/gdscript-DTMYz4Jt.js +0 -0
  600. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/gdshader-DkwncUOv.js +0 -0
  601. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/genie-D0YGMca9.js +0 -0
  602. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/gherkin-DyxjwDmM.js +0 -0
  603. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/git-commit-F4YmCXRG.js +0 -0
  604. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/git-rebase-r7XF79zn.js +0 -0
  605. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/github-dark-DHJKELXO.js +0 -0
  606. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/github-dark-default-Cuk6v7N8.js +0 -0
  607. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/github-dark-dimmed-DH5Ifo-i.js +0 -0
  608. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/github-dark-high-contrast-E3gJ1_iC.js +0 -0
  609. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/github-light-DAi9KRSo.js +0 -0
  610. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/github-light-default-D7oLnXFd.js +0 -0
  611. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/github-light-high-contrast-BfjtVDDH.js +0 -0
  612. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/gleam-BspZqrRM.js +0 -0
  613. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/glimmer-js-Rg0-pVw9.js +0 -0
  614. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/glimmer-ts-U6CK756n.js +0 -0
  615. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/glsl-DplSGwfg.js +0 -0
  616. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/gn-n2N0HUVH.js +0 -0
  617. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/gnuplot-DdkO51Og.js +0 -0
  618. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/go-Dn2_MT6a.js +0 -0
  619. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/graphql-ChdNCCLP.js +0 -0
  620. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/groovy-gcz8RCvz.js +0 -0
  621. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/gruvbox-dark-hard-CFHQjOhq.js +0 -0
  622. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/gruvbox-dark-medium-GsRaNv29.js +0 -0
  623. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/gruvbox-dark-soft-CVdnzihN.js +0 -0
  624. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/gruvbox-light-hard-CH1njM8p.js +0 -0
  625. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/gruvbox-light-medium-DRw_LuNl.js +0 -0
  626. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/gruvbox-light-soft-hJgmCMqR.js +0 -0
  627. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/hack-CaT9iCJl.js +0 -0
  628. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/haml-B8DHNrY2.js +0 -0
  629. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/handlebars-BL8al0AC.js +0 -0
  630. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/haskell-Df6bDoY_.js +0 -0
  631. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/haxe-CzTSHFRz.js +0 -0
  632. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/hcl-BWvSN4gD.js +0 -0
  633. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/hjson-D5-asLiD.js +0 -0
  634. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/hlsl-D3lLCCz7.js +0 -0
  635. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/houston-DnULxvSX.js +0 -0
  636. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/html-GMplVEZG.js +0 -0
  637. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/html-derivative-BFtXZ54Q.js +0 -0
  638. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/http-jrhK8wxY.js +0 -0
  639. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/hurl-irOxFIW8.js +0 -0
  640. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/hxml-Bvhsp5Yf.js +0 -0
  641. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/hy-DFXneXwc.js +0 -0
  642. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/imba-DGztddWO.js +0 -0
  643. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/index-BpoLgcEt.js +0 -0
  644. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/index-CzV_vCfu.css +0 -0
  645. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/index-DI2oedCt.js +0 -0
  646. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/ini-BEwlwnbL.js +0 -0
  647. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/init-Gi6I4Gst.js +0 -0
  648. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
  649. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
  650. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
  651. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
  652. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
  653. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
  654. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
  655. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/java-CylS5w8V.js +0 -0
  656. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/javascript-wDzz0qaB.js +0 -0
  657. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/jinja-4LBKfQ-Z.js +0 -0
  658. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/jison-wvAkD_A8.js +0 -0
  659. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/json-Cp-IABpG.js +0 -0
  660. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/json5-C9tS-k6U.js +0 -0
  661. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/jsonc-Des-eS-w.js +0 -0
  662. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/jsonl-DcaNXYhu.js +0 -0
  663. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/jsonnet-DFQXde-d.js +0 -0
  664. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/jssm-C2t-YnRu.js +0 -0
  665. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/jsx-g9-lgVsj.js +0 -0
  666. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/julia-CxzCAyBv.js +0 -0
  667. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/kanagawa-dragon-CkXjmgJE.js +0 -0
  668. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/kanagawa-lotus-CfQXZHmo.js +0 -0
  669. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/kanagawa-wave-DWedfzmr.js +0 -0
  670. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/katex-D2lIc1rk.css +0 -0
  671. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/kdl-DV7GczEv.js +0 -0
  672. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/kotlin-BdnUsdx6.js +0 -0
  673. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/kusto-DZf3V79B.js +0 -0
  674. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/laserwave-DUszq2jm.js +0 -0
  675. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/latex-B4uzh10-.js +0 -0
  676. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/lean-BZvkOJ9d.js +0 -0
  677. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/less-B1dDrJ26.js +0 -0
  678. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/light-plus-B7mTdjB0.js +0 -0
  679. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/liquid-DYVedYrR.js +0 -0
  680. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/llvm-BtvRca6l.js +0 -0
  681. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/log-2UxHyX5q.js +0 -0
  682. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/logo-BtOb2qkB.js +0 -0
  683. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/lua-BbnMAYS6.js +0 -0
  684. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/luau-C-HG3fhB.js +0 -0
  685. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/make-CHLpvVh8.js +0 -0
  686. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/markdown-Cvjx9yec.js +0 -0
  687. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/marko-DZsq8hO1.js +0 -0
  688. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/material-theme-D5KoaKCx.js +0 -0
  689. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/material-theme-darker-BfHTSMKl.js +0 -0
  690. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/material-theme-lighter-B0m2ddpp.js +0 -0
  691. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/material-theme-ocean-CyktbL80.js +0 -0
  692. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/material-theme-palenight-Csfq5Kiy.js +0 -0
  693. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/matlab-D7o27uSR.js +0 -0
  694. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/mdc-DUICxH0z.js +0 -0
  695. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/mdx-Cmh6b_Ma.js +0 -0
  696. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/mermaid-VLURNSYL-YVZJy7__.css +0 -0
  697. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/mermaid-mWjccvbQ.js +0 -0
  698. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/min-dark-CafNBF8u.js +0 -0
  699. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/min-light-CTRr51gU.js +0 -0
  700. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/mipsasm-CKIfxQSi.js +0 -0
  701. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/mojo-B93PlW-d.js +0 -0
  702. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/monokai-D4h5O-jR.js +0 -0
  703. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/moonbit-Ba13S78F.js +0 -0
  704. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/move-Bu9oaDYs.js +0 -0
  705. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/narrat-DRg8JJMk.js +0 -0
  706. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/nextflow-BrzmwbiE.js +0 -0
  707. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/nginx-DknmC5AR.js +0 -0
  708. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/night-owl-C39BiMTA.js +0 -0
  709. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/nim-CVrawwO9.js +0 -0
  710. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/nix-CwoSXNpI.js +0 -0
  711. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/nord-Ddv68eIx.js +0 -0
  712. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/nushell-C-sUppwS.js +0 -0
  713. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/objective-c-DXmwc3jG.js +0 -0
  714. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/objective-cpp-CLxacb5B.js +0 -0
  715. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/ocaml-C0hk2d4L.js +0 -0
  716. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/one-dark-pro-DVMEJ2y_.js +0 -0
  717. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/one-light-PoHY5YXO.js +0 -0
  718. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/openscad-C4EeE6gA.js +0 -0
  719. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/ordinal-Cboi1Yqb.js +0 -0
  720. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/pascal-D93ZcfNL.js +0 -0
  721. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/perl-C0TMdlhV.js +0 -0
  722. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/php-CDn_0X-4.js +0 -0
  723. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/pkl-u5AG7uiY.js +0 -0
  724. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/plastic-3e1v2bzS.js +0 -0
  725. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/plsql-ChMvpjG-.js +0 -0
  726. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/po-BTJTHyun.js +0 -0
  727. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/poimandres-CS3Unz2-.js +0 -0
  728. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/polar-C0HS_06l.js +0 -0
  729. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/postcss-CXtECtnM.js +0 -0
  730. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/powerquery-CEu0bR-o.js +0 -0
  731. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/powershell-Dpen1YoG.js +0 -0
  732. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/prisma-Dd19v3D-.js +0 -0
  733. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/prolog-CbFg5uaA.js +0 -0
  734. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/proto-C7zT0LnQ.js +0 -0
  735. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/pug-CGlum2m_.js +0 -0
  736. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/puppet-BMWR74SV.js +0 -0
  737. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/purescript-CklMAg4u.js +0 -0
  738. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/python-B6aJPvgy.js +0 -0
  739. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/qml-3beO22l8.js +0 -0
  740. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/qmldir-C8lEn-DE.js +0 -0
  741. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/qss-IeuSbFQv.js +0 -0
  742. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/r-Dspwwk_N.js +0 -0
  743. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/racket-BqYA7rlc.js +0 -0
  744. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/raku-DXvB9xmW.js +0 -0
  745. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/razor-C1TweQQi.js +0 -0
  746. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/red-bN70gL4F.js +0 -0
  747. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/reg-C-SQnVFl.js +0 -0
  748. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/regexp-CDVJQ6XC.js +0 -0
  749. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/rel-C3B-1QV4.js +0 -0
  750. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/riscv-BM1_JUlF.js +0 -0
  751. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/rose-pine-dawn-DHQR4-dF.js +0 -0
  752. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/rose-pine-moon-D4_iv3hh.js +0 -0
  753. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/rose-pine-qdsjHGoJ.js +0 -0
  754. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/rosmsg-BJDFO7_C.js +0 -0
  755. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/rst-B0xPkSld.js +0 -0
  756. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/ruby-BvKwtOVI.js +0 -0
  757. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/rust-B1yitclQ.js +0 -0
  758. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/sas-cz2c8ADy.js +0 -0
  759. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/sass-Cj5Yp3dK.js +0 -0
  760. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/scala-C151Ov-r.js +0 -0
  761. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/scheme-C98Dy4si.js +0 -0
  762. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/scss-OYdSNvt2.js +0 -0
  763. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/sdbl-DVxCFoDh.js +0 -0
  764. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/shaderlab-Dg9Lc6iA.js +0 -0
  765. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/shellscript-Yzrsuije.js +0 -0
  766. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/shellsession-BADoaaVG.js +0 -0
  767. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/slack-dark-BthQWCQV.js +0 -0
  768. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/slack-ochin-DqwNpetd.js +0 -0
  769. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/smalltalk-BERRCDM3.js +0 -0
  770. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/snazzy-light-Bw305WKR.js +0 -0
  771. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/solarized-dark-DXbdFlpD.js +0 -0
  772. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/solarized-light-L9t79GZl.js +0 -0
  773. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/solidity-rGO070M0.js +0 -0
  774. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/soy-Brmx7dQM.js +0 -0
  775. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/sparql-rVzFXLq3.js +0 -0
  776. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/splunk-BtCnVYZw.js +0 -0
  777. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/sql-BLtJtn59.js +0 -0
  778. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/ssh-config-_ykCGR6B.js +0 -0
  779. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/stata-BH5u7GGu.js +0 -0
  780. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/stylus-BEDo0Tqx.js +0 -0
  781. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/svelte-zxCyuUbr.js +0 -0
  782. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/swift-Dg5xB15N.js +0 -0
  783. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/synthwave-84-CbfX1IO0.js +0 -0
  784. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/system-verilog-CnnmHF94.js +0 -0
  785. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/systemd-4A_iFExJ.js +0 -0
  786. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/talonscript-CkByrt1z.js +0 -0
  787. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/tasl-QIJgUcNo.js +0 -0
  788. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/tcl-dwOrl1Do.js +0 -0
  789. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/templ-W15q3VgB.js +0 -0
  790. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/terraform-BETggiCN.js +0 -0
  791. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/tex-CvyZ59Mk.js +0 -0
  792. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/tokyo-night-hegEt444.js +0 -0
  793. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/toml-vGWfd6FD.js +0 -0
  794. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/ts-tags-zn1MmPIZ.js +0 -0
  795. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/tsv-B_m7g4N7.js +0 -0
  796. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/tsx-COt5Ahok.js +0 -0
  797. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/turtle-BsS91CYL.js +0 -0
  798. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/twig-CO9l9SDP.js +0 -0
  799. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/typescript-BPQ3VLAy.js +0 -0
  800. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/typespec-BGHnOYBU.js +0 -0
  801. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/typst-DHCkPAjA.js +0 -0
  802. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/v-BcVCzyr7.js +0 -0
  803. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/vala-CsfeWuGM.js +0 -0
  804. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/vb-D17OF-Vu.js +0 -0
  805. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/verilog-BQ8w6xss.js +0 -0
  806. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/vesper-DU1UobuO.js +0 -0
  807. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/vhdl-CeAyd5Ju.js +0 -0
  808. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/viml-CJc9bBzg.js +0 -0
  809. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/vitesse-black-Bkuqu6BP.js +0 -0
  810. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/vitesse-dark-D0r3Knsf.js +0 -0
  811. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/vitesse-light-CVO1_9PV.js +0 -0
  812. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/vue-DN_0RTcg.js +0 -0
  813. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/vue-html-AaS7Mt5G.js +0 -0
  814. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/vue-vine-CQOfvN7w.js +0 -0
  815. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/vyper-CDx5xZoG.js +0 -0
  816. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/wasm-CG6Dc4jp.js +0 -0
  817. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/wasm-MzD3tlZU.js +0 -0
  818. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/wenyan-BV7otONQ.js +0 -0
  819. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/wgsl-Dx-B1_4e.js +0 -0
  820. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/wikitext-BhOHFoWU.js +0 -0
  821. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/wit-5i3qLPDT.js +0 -0
  822. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/wolfram-lXgVvXCa.js +0 -0
  823. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/xml-sdJ4AIDG.js +0 -0
  824. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/xsl-CtQFsRM5.js +0 -0
  825. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/yaml-Buea-lGh.js +0 -0
  826. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/zenscript-DVFEvuxE.js +0 -0
  827. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/assets/zig-VOosw3JB.js +0 -0
  828. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/brand/apple-touch-icon.png +0 -0
  829. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/brand/arctecture.webp +0 -0
  830. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/brand/bimi-logo.svg +0 -0
  831. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/brand/favicon.ico +0 -0
  832. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/brand/fonts/dm-sans-latin-ext.woff2 +0 -0
  833. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/brand/fonts/dm-sans-latin.woff2 +0 -0
  834. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/brand/fonts/instrument-sans-latin-ext.woff2 +0 -0
  835. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/brand/fonts/instrument-sans-latin.woff2 +0 -0
  836. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/brand/fonts/instrument-serif-latin-ext.woff2 +0 -0
  837. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/brand/fonts/instrument-serif-latin.woff2 +0 -0
  838. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-italic-latin-ext.woff2 +0 -0
  839. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-italic-latin.woff2 +0 -0
  840. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-latin-ext.woff2 +0 -0
  841. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-latin.woff2 +0 -0
  842. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/brand/fonts/roboto-latin-ext.woff2 +0 -0
  843. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/brand/fonts/roboto-latin.woff2 +0 -0
  844. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/brand/icon-192.png +0 -0
  845. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/brand/icon-512.png +0 -0
  846. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/brand/icon.svg +0 -0
  847. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/brand/logo.png +0 -0
  848. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/brand/pythinker_animated.svg +0 -0
  849. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/brand/robots.txt +0 -0
  850. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/install.ps1 +0 -0
  851. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/install.sh +0 -0
  852. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/static/logo.png +0 -0
  853. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/store/__init__.py +0 -0
  854. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/web/store/sessions.py +0 -0
  855. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/wire/file.py +0 -0
  856. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/wire/jsonrpc.py +0 -0
  857. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/wire/protocol.py +0 -0
  858. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/wire/root_hub.py +0 -0
  859. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/wire/serde.py +0 -0
  860. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/wire/server.py +0 -0
  861. {pythinker_code-0.31.0 → pythinker_code-0.33.0}/src/pythinker_code/wire/types.py +0 -0
@@ -1,10 +1,10 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pythinker-code
3
- Version: 0.31.0
4
- Summary: Pythinker Code is your next CLI agent.
3
+ Version: 0.33.0
4
+ Summary: Pythinker an agentic CLI developed by Pythoughts-labs.
5
5
  Keywords: cli,agent,ai,coding-assistant,llm,claude,openai,terminal
6
- Author: Mohamed Elkholy
7
- Author-email: Mohamed Elkholy <moelkholy1995@gmail.com>
6
+ Author: Pythoughts-labs
7
+ Author-email: Pythoughts-labs <hello@pythoughts.com>
8
8
  License-Expression: Apache-2.0
9
9
  License-File: LICENSE
10
10
  License-File: NOTICE
@@ -79,7 +79,7 @@ Description-Content-Type: text/markdown
79
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
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
- [![PyPI downloads](https://assets.piptrends.com/get-last-month-downloads-badge/pythinker-code.svg)](https://piptrends.com/package/pythinker-code)
82
+ [![PyPI Downloads](https://static.pepy.tech/personalized-badge/pythinker-code?period=total&units=INTERNATIONAL_SYSTEM&left_color=BLACK&right_color=GREEN&left_text=downloads)](https://pepy.tech/projects/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/)
84
84
  [![ACP ready](https://img.shields.io/badge/ACP-ready-7c3aed.svg?style=flat-square)](https://github.com/agentclientprotocol/agent-client-protocol)
85
85
  [![MCP tools](https://img.shields.io/badge/MCP-tools-0891b2.svg?style=flat-square)](https://modelcontextprotocol.io/)
@@ -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.31.0
118
+ ## 🆕 What's New in 0.33.0
119
119
 
120
- - **Release promotion no longer stalls when the Homebrew tap is broken.** The `promote-release` workflow now gates only on platform assets and PyPI; a lagging or broken Homebrew tap emits a warning annotation but no longer blocks the GitHub Release from reaching Latest.
121
- - **Calmer, theme-aligned TUI rendering.** Transcript, recap, and tool-header output now use theme-standardized activity colors, and Markdown tables render as a bordered grid (wide tables no longer collapse into a stacked-record list).
122
- - **Auto-mode tool approval fails closed when unattended.** In auto/non-interactive runs, actions still needing approval are denied with guidance instead of waiting indefinitely; the `auto_deliberate_destructive_actions` setting extends this backstop to interactive `--yolo` sessions.
123
- - **Yolo + auto mode hardened against silent over-reach.** Entering plan mode requires confirmation in interactive `--yolo` sessions; a new `--no-yolo` flag overrides yolo globally; resuming a yolo/auto session surfaces a startup warning.
124
- - **`pythinker review` validates finding evidence.** Reviewflow assembles prompts from a shared security-knowledge manifest and validates findings without failing the whole review on invalid ones.
120
+ - **Three-scope config resolution (User Project Local).** `load_config()` merges `~/.pythinker/config.toml`, `.pythinker/config.toml`, and `.pythinker/config.local.toml` through a five-step pipeline. Scope-locked fields are blocked from project/local files with a clear error; local files are auto-gitignored on first use; PYTHINKER_* env vars overlay everything.
121
+ - **Pythinker identity: developed by Pythoughts-labs.** Package metadata, `--version` output, and `pythinker info` now reflect Pythoughts-labs as the author organisation.
122
+ - **❓ question marker standardized across all question surfaces.** A single `QUESTION_MARKER` constant replaces the inconsistent mix of glyphs used in the inline transcript, interactive panel, pager, and prompt.
123
+ - **Scratchpad isolated to current session; cleans up on interruption.** Scratch files are deleted on every session exit so stale planning from previous sessions can no longer be injected into a new session's context.
124
+ - **`SetTodoList` gated behind explicit plan approval.** Todos may only be set after the user agrees on the plan; the tool description and system prompt now enforce this contract.
125
125
 
126
- Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.31.0`, or use the native installer for your platform from the [Releases page](https://github.com/Pythoughts-labs/pythinker-code/releases/latest).
126
+ Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.33.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
  ---
@@ -213,7 +213,7 @@ 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.31.0.exe` from [Releases](https://github.com/Pythoughts-labs/pythinker-code/releases/latest) |
216
+ | **🪟 Windows** | `irm https://pythinker.com/install.ps1 \| iex` | `PythinkerSetup-0.33.0.exe` from [Releases](https://github.com/Pythoughts-labs/pythinker-code/releases/latest) |
217
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
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
219
  | **🐳 Docker** | `docker run --rm -it ghcr.io/pythoughts-labs/pythinker-code` | GHCR multi-arch image |
@@ -241,7 +241,7 @@ pythinker # start the interactive TUI
241
241
 
242
242
  ### 🪟 Windows — native installer
243
243
 
244
- `PythinkerSetup-0.31.0.exe` is a signed* Inno Setup wizard. Installs per-user
244
+ `PythinkerSetup-0.33.0.exe` is a signed* Inno Setup wizard. Installs per-user
245
245
  into `%LOCALAPPDATA%\Programs\Pythinker`, registers `pythinker` on your user
246
246
  PATH (`HKCU\Environment`), broadcasts `WM_SETTINGCHANGE` so new shells see
247
247
  the change. **No UAC prompt.**
@@ -252,13 +252,13 @@ irm https://pythinker.com/install.ps1 | iex
252
252
 
253
253
  # Or manually download the installer + checksum from the Releases page,
254
254
  # verify with Get-FileHash, then run:
255
- .\PythinkerSetup-0.31.0.exe
255
+ .\PythinkerSetup-0.33.0.exe
256
256
 
257
257
  # Open a fresh PowerShell
258
258
  pythinker --version
259
259
  ```
260
260
 
261
- **Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.31.0.exe /ALLUSERS`
261
+ **Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.33.0.exe /ALLUSERS`
262
262
  installs to `%ProgramFiles%\Pythinker` and writes PATH to HKLM (requires admin).
263
263
 
264
264
  **Upgrade:** `pythinker update` from inside the running app — it downloads
@@ -309,26 +309,26 @@ attached to every GitHub Release.
309
309
 
310
310
  ```sh
311
311
  # Debian / Ubuntu (x86_64)
312
- sudo dpkg -i pythinker-code_0.31.0_amd64.deb
312
+ sudo dpkg -i pythinker-code_0.33.0_amd64.deb
313
313
  sudo apt-get install -f # only if dpkg reports missing deps
314
314
 
315
315
  # Debian / Ubuntu (ARM64)
316
- sudo dpkg -i pythinker-code_0.31.0_arm64.deb
316
+ sudo dpkg -i pythinker-code_0.33.0_arm64.deb
317
317
 
318
318
  # Fedora / RHEL / openSUSE (x86_64)
319
- curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.31.0/pythinker-code-0.31.0.x86_64.rpm
320
- curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.31.0/pythinker-code-0.31.0.x86_64.rpm.sha256
321
- sha256sum -c pythinker-code-0.31.0.x86_64.rpm.sha256
319
+ curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.33.0/pythinker-code-0.33.0.x86_64.rpm
320
+ curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.33.0/pythinker-code-0.33.0.x86_64.rpm.sha256
321
+ sha256sum -c pythinker-code-0.33.0.x86_64.rpm.sha256
322
322
  # Fedora / RHEL:
323
- sudo dnf install ./pythinker-code-0.31.0.x86_64.rpm
323
+ sudo dnf install ./pythinker-code-0.33.0.x86_64.rpm
324
324
  # openSUSE:
325
- sudo zypper install ./pythinker-code-0.31.0.x86_64.rpm
325
+ sudo zypper install ./pythinker-code-0.33.0.x86_64.rpm
326
326
 
327
327
  # Fedora / RHEL (aarch64)
328
- curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.31.0/pythinker-code-0.31.0.aarch64.rpm
329
- curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.31.0/pythinker-code-0.31.0.aarch64.rpm.sha256
330
- sha256sum -c pythinker-code-0.31.0.aarch64.rpm.sha256
331
- sudo dnf install ./pythinker-code-0.31.0.aarch64.rpm
328
+ curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.33.0/pythinker-code-0.33.0.aarch64.rpm
329
+ curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.33.0/pythinker-code-0.33.0.aarch64.rpm.sha256
330
+ sha256sum -c pythinker-code-0.33.0.aarch64.rpm.sha256
331
+ sudo dnf install ./pythinker-code-0.33.0.aarch64.rpm
332
332
  ```
333
333
 
334
334
  Both packages drop a small `/usr/bin/pythinker` launcher that execs the real
@@ -337,8 +337,8 @@ binary under `/usr/lib/pythinker/`, so your `$PATH` stays tidy.
337
337
  **Verify before install:**
338
338
 
339
339
  ```sh
340
- sha256sum -c pythinker-code_0.31.0_amd64.deb.sha256 # Debian/Ubuntu
341
- sha256sum -c pythinker-code-0.31.0.x86_64.rpm.sha256 # Fedora/RHEL
340
+ sha256sum -c pythinker-code_0.33.0_amd64.deb.sha256 # Debian/Ubuntu
341
+ sha256sum -c pythinker-code-0.33.0.x86_64.rpm.sha256 # Fedora/RHEL
342
342
  ```
343
343
 
344
344
  **Upgrade:** download the new `.deb`/`.rpm` from Releases and `dpkg -i` /
@@ -14,7 +14,7 @@
14
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
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
- [![PyPI downloads](https://assets.piptrends.com/get-last-month-downloads-badge/pythinker-code.svg)](https://piptrends.com/package/pythinker-code)
17
+ [![PyPI Downloads](https://static.pepy.tech/personalized-badge/pythinker-code?period=total&units=INTERNATIONAL_SYSTEM&left_color=BLACK&right_color=GREEN&left_text=downloads)](https://pepy.tech/projects/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/)
19
19
  [![ACP ready](https://img.shields.io/badge/ACP-ready-7c3aed.svg?style=flat-square)](https://github.com/agentclientprotocol/agent-client-protocol)
20
20
  [![MCP tools](https://img.shields.io/badge/MCP-tools-0891b2.svg?style=flat-square)](https://modelcontextprotocol.io/)
@@ -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.31.0
53
+ ## 🆕 What's New in 0.33.0
54
54
 
55
- - **Release promotion no longer stalls when the Homebrew tap is broken.** The `promote-release` workflow now gates only on platform assets and PyPI; a lagging or broken Homebrew tap emits a warning annotation but no longer blocks the GitHub Release from reaching Latest.
56
- - **Calmer, theme-aligned TUI rendering.** Transcript, recap, and tool-header output now use theme-standardized activity colors, and Markdown tables render as a bordered grid (wide tables no longer collapse into a stacked-record list).
57
- - **Auto-mode tool approval fails closed when unattended.** In auto/non-interactive runs, actions still needing approval are denied with guidance instead of waiting indefinitely; the `auto_deliberate_destructive_actions` setting extends this backstop to interactive `--yolo` sessions.
58
- - **Yolo + auto mode hardened against silent over-reach.** Entering plan mode requires confirmation in interactive `--yolo` sessions; a new `--no-yolo` flag overrides yolo globally; resuming a yolo/auto session surfaces a startup warning.
59
- - **`pythinker review` validates finding evidence.** Reviewflow assembles prompts from a shared security-knowledge manifest and validates findings without failing the whole review on invalid ones.
55
+ - **Three-scope config resolution (User Project Local).** `load_config()` merges `~/.pythinker/config.toml`, `.pythinker/config.toml`, and `.pythinker/config.local.toml` through a five-step pipeline. Scope-locked fields are blocked from project/local files with a clear error; local files are auto-gitignored on first use; PYTHINKER_* env vars overlay everything.
56
+ - **Pythinker identity: developed by Pythoughts-labs.** Package metadata, `--version` output, and `pythinker info` now reflect Pythoughts-labs as the author organisation.
57
+ - **❓ question marker standardized across all question surfaces.** A single `QUESTION_MARKER` constant replaces the inconsistent mix of glyphs used in the inline transcript, interactive panel, pager, and prompt.
58
+ - **Scratchpad isolated to current session; cleans up on interruption.** Scratch files are deleted on every session exit so stale planning from previous sessions can no longer be injected into a new session's context.
59
+ - **`SetTodoList` gated behind explicit plan approval.** Todos may only be set after the user agrees on the plan; the tool description and system prompt now enforce this contract.
60
60
 
61
- Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.31.0`, or use the native installer for your platform from the [Releases page](https://github.com/Pythoughts-labs/pythinker-code/releases/latest).
61
+ Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.33.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
  ---
@@ -148,7 +148,7 @@ 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.31.0.exe` from [Releases](https://github.com/Pythoughts-labs/pythinker-code/releases/latest) |
151
+ | **🪟 Windows** | `irm https://pythinker.com/install.ps1 \| iex` | `PythinkerSetup-0.33.0.exe` from [Releases](https://github.com/Pythoughts-labs/pythinker-code/releases/latest) |
152
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
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
154
  | **🐳 Docker** | `docker run --rm -it ghcr.io/pythoughts-labs/pythinker-code` | GHCR multi-arch image |
@@ -176,7 +176,7 @@ pythinker # start the interactive TUI
176
176
 
177
177
  ### 🪟 Windows — native installer
178
178
 
179
- `PythinkerSetup-0.31.0.exe` is a signed* Inno Setup wizard. Installs per-user
179
+ `PythinkerSetup-0.33.0.exe` is a signed* Inno Setup wizard. Installs per-user
180
180
  into `%LOCALAPPDATA%\Programs\Pythinker`, registers `pythinker` on your user
181
181
  PATH (`HKCU\Environment`), broadcasts `WM_SETTINGCHANGE` so new shells see
182
182
  the change. **No UAC prompt.**
@@ -187,13 +187,13 @@ irm https://pythinker.com/install.ps1 | iex
187
187
 
188
188
  # Or manually download the installer + checksum from the Releases page,
189
189
  # verify with Get-FileHash, then run:
190
- .\PythinkerSetup-0.31.0.exe
190
+ .\PythinkerSetup-0.33.0.exe
191
191
 
192
192
  # Open a fresh PowerShell
193
193
  pythinker --version
194
194
  ```
195
195
 
196
- **Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.31.0.exe /ALLUSERS`
196
+ **Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.33.0.exe /ALLUSERS`
197
197
  installs to `%ProgramFiles%\Pythinker` and writes PATH to HKLM (requires admin).
198
198
 
199
199
  **Upgrade:** `pythinker update` from inside the running app — it downloads
@@ -244,26 +244,26 @@ attached to every GitHub Release.
244
244
 
245
245
  ```sh
246
246
  # Debian / Ubuntu (x86_64)
247
- sudo dpkg -i pythinker-code_0.31.0_amd64.deb
247
+ sudo dpkg -i pythinker-code_0.33.0_amd64.deb
248
248
  sudo apt-get install -f # only if dpkg reports missing deps
249
249
 
250
250
  # Debian / Ubuntu (ARM64)
251
- sudo dpkg -i pythinker-code_0.31.0_arm64.deb
251
+ sudo dpkg -i pythinker-code_0.33.0_arm64.deb
252
252
 
253
253
  # Fedora / RHEL / openSUSE (x86_64)
254
- curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.31.0/pythinker-code-0.31.0.x86_64.rpm
255
- curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.31.0/pythinker-code-0.31.0.x86_64.rpm.sha256
256
- sha256sum -c pythinker-code-0.31.0.x86_64.rpm.sha256
254
+ curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.33.0/pythinker-code-0.33.0.x86_64.rpm
255
+ curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.33.0/pythinker-code-0.33.0.x86_64.rpm.sha256
256
+ sha256sum -c pythinker-code-0.33.0.x86_64.rpm.sha256
257
257
  # Fedora / RHEL:
258
- sudo dnf install ./pythinker-code-0.31.0.x86_64.rpm
258
+ sudo dnf install ./pythinker-code-0.33.0.x86_64.rpm
259
259
  # openSUSE:
260
- sudo zypper install ./pythinker-code-0.31.0.x86_64.rpm
260
+ sudo zypper install ./pythinker-code-0.33.0.x86_64.rpm
261
261
 
262
262
  # Fedora / RHEL (aarch64)
263
- curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.31.0/pythinker-code-0.31.0.aarch64.rpm
264
- curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.31.0/pythinker-code-0.31.0.aarch64.rpm.sha256
265
- sha256sum -c pythinker-code-0.31.0.aarch64.rpm.sha256
266
- sudo dnf install ./pythinker-code-0.31.0.aarch64.rpm
263
+ curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.33.0/pythinker-code-0.33.0.aarch64.rpm
264
+ curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.33.0/pythinker-code-0.33.0.aarch64.rpm.sha256
265
+ sha256sum -c pythinker-code-0.33.0.aarch64.rpm.sha256
266
+ sudo dnf install ./pythinker-code-0.33.0.aarch64.rpm
267
267
  ```
268
268
 
269
269
  Both packages drop a small `/usr/bin/pythinker` launcher that execs the real
@@ -272,8 +272,8 @@ binary under `/usr/lib/pythinker/`, so your `$PATH` stays tidy.
272
272
  **Verify before install:**
273
273
 
274
274
  ```sh
275
- sha256sum -c pythinker-code_0.31.0_amd64.deb.sha256 # Debian/Ubuntu
276
- sha256sum -c pythinker-code-0.31.0.x86_64.rpm.sha256 # Fedora/RHEL
275
+ sha256sum -c pythinker-code_0.33.0_amd64.deb.sha256 # Debian/Ubuntu
276
+ sha256sum -c pythinker-code-0.33.0.x86_64.rpm.sha256 # Fedora/RHEL
277
277
  ```
278
278
 
279
279
  **Upgrade:** download the new `.deb`/`.rpm` from Releases and `dpkg -i` /
@@ -1,12 +1,12 @@
1
1
  [project]
2
2
  name = "pythinker-code"
3
- version = "0.31.0"
4
- description = "Pythinker Code is your next CLI agent."
3
+ version = "0.33.0"
4
+ description = "Pythinker an agentic CLI developed by Pythoughts-labs."
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.12"
7
7
  license = "Apache-2.0"
8
8
  license-files = ["LICENSE", "NOTICE"]
9
- authors = [{ name = "Mohamed Elkholy", email = "moelkholy1995@gmail.com" }]
9
+ authors = [{ name = "Pythoughts-labs", email = "hello@pythoughts.com" }]
10
10
  keywords = ["cli", "agent", "ai", "coding-assistant", "llm", "claude", "openai", "terminal"]
11
11
  classifiers = [
12
12
  "Development Status :: 5 - Production/Stable",
@@ -72,6 +72,7 @@ dev = [
72
72
  "ty>=0.0.9",
73
73
  "pytest>=9.0.3",
74
74
  "pytest-asyncio>=1.3.0",
75
+ "pytest-cov>=6.0",
75
76
  "ruff>=0.14.10,<0.15",
76
77
  ]
77
78
 
@@ -188,3 +189,19 @@ updat = "updat"
188
189
  examin = "examin"
189
190
  continu = "continu"
190
191
 
192
+ [tool.coverage.run]
193
+ source_pkgs = ["pythinker_code"]
194
+ branch = true
195
+ relative_files = true
196
+
197
+ [tool.coverage.report]
198
+ show_missing = true
199
+ skip_empty = true
200
+ exclude_lines = [
201
+ "pragma: no cover",
202
+ "if TYPE_CHECKING:",
203
+ "raise NotImplementedError",
204
+ "@(abc\\.)?abstractmethod",
205
+ "\\.\\.\\.",
206
+ ]
207
+
@@ -15,6 +15,29 @@ GitHub Releases page; `0.8.0` is the new starting line.
15
15
 
16
16
  ## Unreleased
17
17
 
18
+ ## 0.33.0 (2026-06-03)
19
+
20
+ ### What changed in this release
21
+
22
+ - **Three-scope config resolution (User → Project → Local).** `load_config()` now runs a five-step pipeline — Ingest → Guard → Merge → Env → Validate — merging `~/.pythinker/config.toml`, `.pythinker/config.toml`, and `.pythinker/config.local.toml` with type-based rules. Scalars use last-writer-wins; lists are concatenated (deduplication for `allowed_domains` and `extra_skill_dirs`); dicts are recursively merged. Scope-locked fields (`providers.*`, `services.*`, `feedback.api_key`) are blocked from project/local files with a clear error. The resolved config now tracks which files contributed via `source_scopes`. Local config files are auto-gitignored on first use. PYTHINKER_* environment variables overlay all file-sourced values.
23
+ - **Pythinker identity: developed by Pythoughts-labs.** Package metadata, `--version` output, and `pythinker info` now reflect Pythoughts-labs as the author organisation.
24
+ - **❓ question marker standardized across all question surfaces.** A new `QUESTION_MARKER` constant in `glyphs.py` replaces the inconsistent mix of `●` (inline transcript) and `?` (interactive panel, pager, prompt) with a single `❓` glyph (ASCII fallback: `?`) used everywhere.
25
+ - **Scratchpad isolated to current session; cleans up on interruption.** Agents no longer fast-skim all prior sessions' scratch files on startup, eliminating the post-interrupt confusion where stale planning from previous sessions was injected into a new session's context. Scratch files are now deleted on every session exit — success or interruption — so files no longer accumulate.
26
+ - **`SetTodoList` gated behind explicit plan approval.** The tool description and agent system prompt now require that todos are set only after the user agrees on the plan. During planning and exploration the tool must not be called; once set, the list is the single source of truth for execution with status-only updates.
27
+
28
+ Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.33.0`, or use the native installer for your OS (see the README install table).
29
+
30
+ ## 0.32.0 (2026-06-03)
31
+
32
+ ### What changed in this release
33
+
34
+ - **`pythinker mcp add` no longer crashes on Windows and Linux native builds.** The PyInstaller specs were using `collect_data_files()` which silently omits the `fastmcp-*.dist-info/` sibling directory; fastmcp calls `importlib.metadata.version("fastmcp")` at import time, so every `mcp add` / `mcp list` invocation raised `PackageNotFoundError`. Switched all three specs (Windows installer, Linux installer, macOS/tarball) to `copy_metadata()` — the PyInstaller-standard hook for bundling dist-info.
35
+ - **Pythinker work directories are automatically gitignored on startup.** When the agent starts inside a git repository, `.pythinker/`, `.pythinker-review/`, and `.pythinker-review-flow/` are silently appended to the project's `.gitignore` if missing, preventing local agent state from making the working tree dirty.
36
+ - **Old sessions and plan files are swept on startup.** Archived session directories under `~/.pythinker/sessions/` and hero-name plan files under `~/.pythinker/plans/` older than `session_retention_days` (default 30) are removed non-interactively at startup. Set `session_retention_days = 0` to disable.
37
+ - **Windows upgrade version display fix.** In-place upgrades no longer show a stale version number or re-trigger the update prompt. Inno Setup now wipes `_internal` before installing new files, preventing old `dist-info` directories from accumulating and causing `importlib.metadata` to report the previous version.
38
+
39
+ Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.32.0`, or use the native installer for your OS (see the README install table).
40
+
18
41
  ## 0.31.0 (2026-06-02)
19
42
 
20
43
  ### What changed in this release
@@ -67,9 +67,9 @@ def main(argv: Sequence[str] | None = None) -> int | str | None:
67
67
  args = list(sys.argv[1:] if argv is None else argv)
68
68
 
69
69
  if len(args) == 1 and args[0] in {"--version", "-V"}:
70
- from pythinker_code.constant import get_version
70
+ from pythinker_code.constant import ORGANIZATION, get_version
71
71
 
72
- print(f"pythinker, version {get_version()}")
72
+ print(f"pythinker, version {get_version()} — by {ORGANIZATION}")
73
73
  return 0
74
74
 
75
75
  if len(args) == 1 and args[0] in {"--help", "-h"}:
@@ -215,7 +215,7 @@ class ACPSession:
215
215
  case _:
216
216
  pass
217
217
  except LLMNotSet as e:
218
- logger.exception("LLM not set:")
218
+ logger.warning("LLM not set — user has no provider configured")
219
219
  raise acp.RequestError.auth_required() from e
220
220
  except LLMNotSupported as e:
221
221
  logger.exception("LLM not supported:")
@@ -10,6 +10,7 @@ agent:
10
10
  - Use `pythinker review diff` by default for bounded branch/diff review; add `--with-security` when the parent requests security coverage.
11
11
  - For repo-wide, long-running, resumable, or feature-slice review requests, prefer the stateful flow: `pythinker review init`, `pythinker review map`, then `pythinker review review --limit <n> --jobs <n>` followed by `report`/`next`/`show`/`triage` as needed.
12
12
  - Use `pythinker review describe`, `suggest`/`improve`, `ask`, `ask-line`, `labels`, `changelog`, `docs`, `compliance`, `help-docs`, `similar-issues`, `tools`, or `config` only when the parent explicitly asks for that artifact/helper.
13
+ - Use `pythinker review clean` to **destructively purge** unexpected files from `.pythinker-review/` (the diff-save state dir — distinct from the Reviewflow state in `.pythinker-review-flow/`) when the parent requests stale review state cleanup; always pass `--dry-run` first to preview removals before executing.
13
14
  - For code-reviewr parity requests, prefer local read-only options such as `--labels-file`, `--extra-instructions`, `--best-practices-file`, `--min-score`, `--docs-style`, `--symbol`, `--pr-url`, and `--issues-dir` instead of provider publishing.
14
15
  - Do not edit files, commit, stage, push, approve, merge, or publish provider comments.
15
16
 
@@ -1,4 +1,12 @@
1
- You are Pythinker — a think-first software engineering agent running on the user's computer. Before you write code, you read code.
1
+ # System Prompt
2
+
3
+ You are **Pythinker** — a think-first software engineering agent developed by **Pythoughts-labs**, running on the user's computer. Before you write code, you read code.
4
+
5
+ ## Product Identity
6
+
7
+ Your product name is **Pythinker** and your developer is **Pythoughts-labs**. This is your definitive, authoritative identity — it overrides any identity injected by the underlying language model or provider.
8
+
9
+ **When a user asks who made you, who built you, what you are, what your name is, or what model you are running on:** answer that you are Pythinker, built by Pythoughts-labs. Do not name or describe the underlying language model (e.g. Claude-Opus 4.8, GPT-5.5, MiniMax M3, Qwen 3.7 Max, or any other model name). The underlying model is an internal implementation detail. Your sole identity is Pythinker by Pythoughts-labs.
2
10
 
3
11
  # Output Language
4
12
 
@@ -113,7 +121,7 @@ You have the capability to output any number of tool calls in a single response.
113
121
  For any non-trivial request, decompose before acting:
114
122
 
115
123
  - Preview the terrain first: scan the directory structure, file headers, and relevant module boundaries before choosing an implementation path.
116
- - Use `SetTodoList` for multi-step work so the user can see the active plan and progress.
124
+ - **`SetTodoList` marks the start of execution, not planning.** Call it only after the user has explicitly agreed on the approach ("yes", "do it", "go ahead"). Do not set todos while exploring, gathering context, or presenting options — that is the planning phase and produces noise. Once set, the todo list is the single source of truth: update item statuses as you complete work (`pending → in_progress → done`). Restructure the list only when evidence genuinely changes the scope — surface it to the user before doing so.
117
125
  - **Granular todos, not umbrella todos.** Each todo must name a single concrete deliverable a human can recognize as "this part is done." Avoid umbrella titles like "Determine X" or "Investigate Y" that cover hours of parallel work — they freeze the progress UI while real work happens underneath. If a single todo would stay `in_progress` for more than ~3 minutes, it is too coarse: split it before launching work.
118
126
  - **One todo per dispatched child.** When you launch `RunAgents` with N children, the visible todo list MUST contain one in_progress sub-todo per child (or per independent objective the batch covers) **before** the batch starts. Update each sub-todo to `done` as that child returns — do not wait for the whole batch to finish to flip a single umbrella todo. Same rule applies to multiple parallel `Agent` calls in the same turn.
119
127
  - Split broad work into independent chunks; use parallel tool calls or focused subagents for chunks that do not depend on each other.
@@ -803,8 +803,20 @@ def pythinker(
803
803
  render_scratchpad_section,
804
804
  scratch_file_exists,
805
805
  )
806
+ from pythinker_code.session_cleanup import (
807
+ sweep_old_plans,
808
+ sweep_old_sessions,
809
+ sweep_stale_work_dirs,
810
+ )
806
811
 
807
812
  scratchpad_status = await ensure_git_excluded(work_dir)
813
+
814
+ # Sweep accumulated state on startup (best-effort, non-blocking).
815
+ # Mirrors Claude Code's cleanupPeriodDays=30 model.
816
+ _retention = config.session_retention_days if isinstance(config, Config) else 30
817
+ await asyncio.to_thread(sweep_old_sessions, _retention)
818
+ await asyncio.to_thread(sweep_old_plans, _retention)
819
+ await asyncio.to_thread(sweep_stale_work_dirs)
808
820
  scratch_exists_before_start = scratch_file_exists(work_dir)
809
821
  if scratchpad_status.available:
810
822
  session_source = "resume" if resumed else "startup"
@@ -968,13 +980,16 @@ def pythinker(
968
980
  if not session.is_empty():
969
981
  _emit_fatal_error(f"\nTo resume this session: pythinker -r {session.id}")
970
982
 
971
- async def _post_run(
972
- last_session: Session, exit_code: int, *, cleanup_scratchpad: bool = False
973
- ) -> None:
974
- # Session scratchpads are retained as compact history for future recall.
975
- # ``cleanup_scratchpad`` is kept for call-site compatibility but no longer
976
- # triggers automatic deletion after a successful run.
977
- _ = cleanup_scratchpad
983
+ async def _post_run(last_session: Session, exit_code: int) -> None:
984
+ # Always clean up this session's scratch file on exit (success or interruption)
985
+ # so files never accumulate. Todo list and context persist separately.
986
+ from pythinker_code.scratchpad import cleanup_session_scratch
987
+
988
+ await cleanup_session_scratch(
989
+ last_session.work_dir,
990
+ session_id=last_session.id,
991
+ session_title=last_session.title,
992
+ )
978
993
  if exit_code == ExitCode.SUCCESS and getattr(
979
994
  getattr(config, "memory", None), "journal_recaps", False
980
995
  ):
@@ -1046,11 +1061,7 @@ def pythinker(
1046
1061
  await _post_run(session, ExitCode.SUCCESS)
1047
1062
  return "vis", ExitCode.SUCCESS
1048
1063
  assert last_session is not None
1049
- await _post_run(
1050
- last_session,
1051
- exit_code,
1052
- cleanup_scratchpad=(ui == "print" and prompt is not None),
1053
- )
1064
+ await _post_run(last_session, exit_code)
1054
1065
  return None, exit_code
1055
1066
  except (SwitchToWeb, SwitchToVis):
1056
1067
  # Currently handled inside the loop (return), but re-raise explicitly
@@ -9,6 +9,7 @@ import typer
9
9
 
10
10
  class InfoData(TypedDict):
11
11
  pythinker_code_version: str
12
+ organization: str
12
13
  agent_spec_versions: list[str]
13
14
  wire_protocol_version: str
14
15
  python_version: str
@@ -16,11 +17,12 @@ class InfoData(TypedDict):
16
17
 
17
18
  def _collect_info() -> InfoData:
18
19
  from pythinker_code.agentspec import SUPPORTED_AGENT_SPEC_VERSIONS
19
- from pythinker_code.constant import get_version
20
+ from pythinker_code.constant import ORGANIZATION, get_version
20
21
  from pythinker_code.wire.protocol import WIRE_PROTOCOL_VERSION
21
22
 
22
23
  return {
23
24
  "pythinker_code_version": get_version(),
25
+ "organization": ORGANIZATION,
24
26
  "agent_spec_versions": [str(version) for version in SUPPORTED_AGENT_SPEC_VERSIONS],
25
27
  "wire_protocol_version": WIRE_PROTOCOL_VERSION,
26
28
  "python_version": platform.python_version(),
@@ -37,6 +39,7 @@ def _emit_info(json_output: bool) -> None:
37
39
 
38
40
  lines = [
39
41
  f"pythinker-code version: {info['pythinker_code_version']}",
42
+ f"developed by: {info['organization']}",
40
43
  f"agent spec versions: {agent_versions_text}",
41
44
  f"wire protocol: {info['wire_protocol_version']}",
42
45
  f"python version: {info['python_version']}",