pythinker-code 0.48.0__tar.gz → 0.49.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1047) hide show
  1. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/PKG-INFO +23 -23
  2. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/README.md +22 -22
  3. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/pyproject.toml +1 -1
  4. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/CHANGELOG.md +19 -0
  5. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/agents/default/system.md +3 -1
  6. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/prompts/best_practices.md +1 -0
  7. pythinker_code-0.49.0/src/pythinker_code/skills/cleanup-audit/SKILL.md +50 -0
  8. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/__init__.py +19 -26
  9. pythinker_code-0.49.0/src/pythinker_code/web/static/assets/architecture-7EHR7CIX-Do98Lw91.js +1 -0
  10. pythinker_code-0.48.0/src/pythinker_code/web/static/assets/architectureDiagram-3BPJPVTR-CUrUO6PZ.js → pythinker_code-0.49.0/src/pythinker_code/web/static/assets/architectureDiagram-3BPJPVTR-8P7Dw-aw.js +1 -1
  11. pythinker_code-0.48.0/src/pythinker_code/web/static/assets/blockDiagram-GPEHLZMM-DqqZRSB4.js → pythinker_code-0.49.0/src/pythinker_code/web/static/assets/blockDiagram-GPEHLZMM-CypKTjfa.js +1 -1
  12. pythinker_code-0.48.0/src/pythinker_code/web/static/assets/bootstrap-rCQM9IPn.js → pythinker_code-0.49.0/src/pythinker_code/web/static/assets/bootstrap-BRrCAqKJ.js +5 -5
  13. pythinker_code-0.48.0/src/pythinker_code/web/static/assets/c4Diagram-AAUBKEIU-Ddtgkgc0.js → pythinker_code-0.49.0/src/pythinker_code/web/static/assets/c4Diagram-AAUBKEIU-D5hZJRzZ.js +1 -1
  14. pythinker_code-0.49.0/src/pythinker_code/web/static/assets/channel-BPxSSOqK.js +1 -0
  15. pythinker_code-0.48.0/src/pythinker_code/web/static/assets/chunk-2J33WTMH-Cu1UEa0U.js → pythinker_code-0.49.0/src/pythinker_code/web/static/assets/chunk-2J33WTMH-nTs3yxRo.js +1 -1
  16. pythinker_code-0.48.0/src/pythinker_code/web/static/assets/chunk-3OPIFGDE-BvW09x34.js → pythinker_code-0.49.0/src/pythinker_code/web/static/assets/chunk-3OPIFGDE-CvxSbMxc.js +1 -1
  17. pythinker_code-0.48.0/src/pythinker_code/web/static/assets/chunk-5ZQYHXKU-DFAbJYk3.js → pythinker_code-0.49.0/src/pythinker_code/web/static/assets/chunk-5ZQYHXKU-DckQgMEY.js +1 -1
  18. pythinker_code-0.48.0/src/pythinker_code/web/static/assets/chunk-727SXJPM-g-KAHCVh.js → pythinker_code-0.49.0/src/pythinker_code/web/static/assets/chunk-727SXJPM-Be3jJzVo.js +1 -1
  19. pythinker_code-0.48.0/src/pythinker_code/web/static/assets/chunk-AQP2D5EJ-BdbLq_iV.js → pythinker_code-0.49.0/src/pythinker_code/web/static/assets/chunk-AQP2D5EJ-Dx2Pp5Dq.js +1 -1
  20. pythinker_code-0.48.0/src/pythinker_code/web/static/assets/chunk-CSCIHK7Q-BbQDo5W4.js → pythinker_code-0.49.0/src/pythinker_code/web/static/assets/chunk-CSCIHK7Q-OaEZ-6uN.js +1 -1
  21. pythinker_code-0.48.0/src/pythinker_code/web/static/assets/chunk-JAPRZBRM-DX3Z6-Ej.js → pythinker_code-0.49.0/src/pythinker_code/web/static/assets/chunk-JAPRZBRM-CcRf5EDu.js +4 -4
  22. pythinker_code-0.48.0/src/pythinker_code/web/static/assets/chunk-KSCS5N6A-DRzsy3KH.js → pythinker_code-0.49.0/src/pythinker_code/web/static/assets/chunk-KSCS5N6A-B-mPOL85.js +1 -1
  23. pythinker_code-0.48.0/src/pythinker_code/web/static/assets/chunk-L5ZTLDWV-AhJH6S-7.js → pythinker_code-0.49.0/src/pythinker_code/web/static/assets/chunk-L5ZTLDWV-DcejFnL6.js +1 -1
  24. pythinker_code-0.48.0/src/pythinker_code/web/static/assets/chunk-LZXEDZCA-C3_yAZ2Q.js → pythinker_code-0.49.0/src/pythinker_code/web/static/assets/chunk-LZXEDZCA-DPrjBxrl.js +2 -2
  25. pythinker_code-0.48.0/src/pythinker_code/web/static/assets/chunk-ND2GUHAM-DrT8t-co.js → pythinker_code-0.49.0/src/pythinker_code/web/static/assets/chunk-ND2GUHAM-CEcqPWij.js +1 -1
  26. pythinker_code-0.48.0/src/pythinker_code/web/static/assets/chunk-NZK2D7GU-BW0obcBx.js → pythinker_code-0.49.0/src/pythinker_code/web/static/assets/chunk-NZK2D7GU-BwNMQT6J.js +1 -1
  27. pythinker_code-0.48.0/src/pythinker_code/web/static/assets/chunk-O5CBEL6O-9x-5dTLa.js → pythinker_code-0.49.0/src/pythinker_code/web/static/assets/chunk-O5CBEL6O-CXyebJGo.js +1 -1
  28. pythinker_code-0.48.0/src/pythinker_code/web/static/assets/chunk-WU5MYG2G-BrTKnUCb.js → pythinker_code-0.49.0/src/pythinker_code/web/static/assets/chunk-WU5MYG2G-BtCs4_b5.js +1 -1
  29. pythinker_code-0.49.0/src/pythinker_code/web/static/assets/classDiagram-4FO5ZUOK-DIJ9beSs.js +1 -0
  30. pythinker_code-0.49.0/src/pythinker_code/web/static/assets/classDiagram-v2-Q7XG4LA2-DIJ9beSs.js +1 -0
  31. pythinker_code-0.48.0/src/pythinker_code/web/static/assets/code-block-IT6T5CEO-D4iBD2uo.js → pythinker_code-0.49.0/src/pythinker_code/web/static/assets/code-block-IT6T5CEO-DfXuXuzr.js +1 -1
  32. pythinker_code-0.48.0/src/pythinker_code/web/static/assets/dagre-BM42HDAG-CwbOB22m.js → pythinker_code-0.49.0/src/pythinker_code/web/static/assets/dagre-BM42HDAG-Djt0Oj00.js +1 -1
  33. pythinker_code-0.48.0/src/pythinker_code/web/static/assets/diagram-2AECGRRQ-BH2GdvZS.js → pythinker_code-0.49.0/src/pythinker_code/web/static/assets/diagram-2AECGRRQ-Dfqwct61.js +1 -1
  34. pythinker_code-0.48.0/src/pythinker_code/web/static/assets/diagram-5GNKFQAL-04zLB7n6.js → pythinker_code-0.49.0/src/pythinker_code/web/static/assets/diagram-5GNKFQAL-Bv6aMU5Q.js +1 -1
  35. pythinker_code-0.48.0/src/pythinker_code/web/static/assets/diagram-KO2AKTUF-BoaneL5m.js → pythinker_code-0.49.0/src/pythinker_code/web/static/assets/diagram-KO2AKTUF-fmo7eunv.js +1 -1
  36. pythinker_code-0.48.0/src/pythinker_code/web/static/assets/diagram-LMA3HP47-DmhpyRJr.js → pythinker_code-0.49.0/src/pythinker_code/web/static/assets/diagram-LMA3HP47-8jpLa_GO.js +1 -1
  37. pythinker_code-0.48.0/src/pythinker_code/web/static/assets/diagram-OG6HWLK6-C4UMdCZA.js → pythinker_code-0.49.0/src/pythinker_code/web/static/assets/diagram-OG6HWLK6-DWpWgWg4.js +1 -1
  38. pythinker_code-0.48.0/src/pythinker_code/web/static/assets/dist-C3gosr9x.js → pythinker_code-0.49.0/src/pythinker_code/web/static/assets/dist-DzLFb5Ym.js +1 -1
  39. pythinker_code-0.48.0/src/pythinker_code/web/static/assets/erDiagram-TEJ5UH35-coUNnf5j.js → pythinker_code-0.49.0/src/pythinker_code/web/static/assets/erDiagram-TEJ5UH35-qRC0f43x.js +1 -1
  40. pythinker_code-0.49.0/src/pythinker_code/web/static/assets/eventmodeling-FCH6USID-BqcnucrD.js +1 -0
  41. pythinker_code-0.48.0/src/pythinker_code/web/static/assets/flowDiagram-I6XJVG4X-CXdKW96G.js → pythinker_code-0.49.0/src/pythinker_code/web/static/assets/flowDiagram-I6XJVG4X-BUegYc64.js +1 -1
  42. pythinker_code-0.48.0/src/pythinker_code/web/static/assets/ganttDiagram-6RSMTGT7-DideiVAp.js → pythinker_code-0.49.0/src/pythinker_code/web/static/assets/ganttDiagram-6RSMTGT7-3_jqrl5b.js +1 -1
  43. pythinker_code-0.48.0/src/pythinker_code/web/static/assets/gitGraph-WXDBUCRP-DUyPd8kP.js → pythinker_code-0.49.0/src/pythinker_code/web/static/assets/gitGraph-WXDBUCRP-Dptxzqkh.js +1 -1
  44. pythinker_code-0.48.0/src/pythinker_code/web/static/assets/gitGraphDiagram-PVQCEYII-brm3T9Uk.js → pythinker_code-0.49.0/src/pythinker_code/web/static/assets/gitGraphDiagram-PVQCEYII-BBgs0Srm.js +1 -1
  45. pythinker_code-0.48.0/src/pythinker_code/web/static/assets/index-1kmjAkaL.js → pythinker_code-0.49.0/src/pythinker_code/web/static/assets/index-BJm0fIR8.js +2 -2
  46. pythinker_code-0.48.0/src/pythinker_code/web/static/assets/info-J43DQDTF-CuqVhZPe.js → pythinker_code-0.49.0/src/pythinker_code/web/static/assets/info-J43DQDTF-BPNakArK.js +1 -1
  47. pythinker_code-0.48.0/src/pythinker_code/web/static/assets/infoDiagram-5YYISTIA-CB4vGN6v.js → pythinker_code-0.49.0/src/pythinker_code/web/static/assets/infoDiagram-5YYISTIA-DwQTFnFC.js +1 -1
  48. pythinker_code-0.48.0/src/pythinker_code/web/static/assets/ishikawaDiagram-YF4QCWOH-Cc2CInct.js → pythinker_code-0.49.0/src/pythinker_code/web/static/assets/ishikawaDiagram-YF4QCWOH-VNLWCphq.js +1 -1
  49. pythinker_code-0.48.0/src/pythinker_code/web/static/assets/journeyDiagram-JHISSGLW-sixbjax3.js → pythinker_code-0.49.0/src/pythinker_code/web/static/assets/journeyDiagram-JHISSGLW-CQpCZGl9.js +1 -1
  50. pythinker_code-0.48.0/src/pythinker_code/web/static/assets/kanban-definition-UN3LZRKU-BkWpYweG.js → pythinker_code-0.49.0/src/pythinker_code/web/static/assets/kanban-definition-UN3LZRKU-DGglk---.js +1 -1
  51. pythinker_code-0.48.0/src/pythinker_code/web/static/assets/line-DG62C0sI.js → pythinker_code-0.49.0/src/pythinker_code/web/static/assets/line-DHSR6621.js +1 -1
  52. pythinker_code-0.49.0/src/pythinker_code/web/static/assets/mermaid-VLURNSYL-CIokUM1h.js +1 -0
  53. pythinker_code-0.48.0/src/pythinker_code/web/static/assets/mermaid-parser.core-DtG8m5J_.js → pythinker_code-0.49.0/src/pythinker_code/web/static/assets/mermaid-parser.core-BrCjxUcy.js +2 -2
  54. pythinker_code-0.48.0/src/pythinker_code/web/static/assets/mermaid.core-CYVEwgHE.js → pythinker_code-0.49.0/src/pythinker_code/web/static/assets/mermaid.core-CcWhY1k6.js +3 -3
  55. pythinker_code-0.48.0/src/pythinker_code/web/static/assets/mindmap-definition-RKZ34NQL-DGLQlQ-3.js → pythinker_code-0.49.0/src/pythinker_code/web/static/assets/mindmap-definition-RKZ34NQL-CrT5EymU.js +1 -1
  56. pythinker_code-0.48.0/src/pythinker_code/web/static/assets/packet-YPE3B663-DSyfxZQu.js → pythinker_code-0.49.0/src/pythinker_code/web/static/assets/packet-YPE3B663-aeeN_vvA.js +1 -1
  57. pythinker_code-0.48.0/src/pythinker_code/web/static/assets/pie-LRSECV5Y-DU6kZ_2f.js → pythinker_code-0.49.0/src/pythinker_code/web/static/assets/pie-LRSECV5Y-BWLDg9TI.js +1 -1
  58. pythinker_code-0.48.0/src/pythinker_code/web/static/assets/pieDiagram-4H26LBE5-CRh8dmNJ.js → pythinker_code-0.49.0/src/pythinker_code/web/static/assets/pieDiagram-4H26LBE5-CAK-uMMx.js +1 -1
  59. pythinker_code-0.48.0/src/pythinker_code/web/static/assets/quadrantDiagram-W4KKPZXB-B_SHSaSa.js → pythinker_code-0.49.0/src/pythinker_code/web/static/assets/quadrantDiagram-W4KKPZXB-D8XZuCAc.js +1 -1
  60. pythinker_code-0.48.0/src/pythinker_code/web/static/assets/radar-GUYGQ44K-DMglnwpK.js → pythinker_code-0.49.0/src/pythinker_code/web/static/assets/radar-GUYGQ44K-DMvNjH0L.js +1 -1
  61. pythinker_code-0.48.0/src/pythinker_code/web/static/assets/requirementDiagram-4Y6WPE33-BsVz5N3I.js → pythinker_code-0.49.0/src/pythinker_code/web/static/assets/requirementDiagram-4Y6WPE33-x6sOUkN4.js +1 -1
  62. pythinker_code-0.48.0/src/pythinker_code/web/static/assets/sankeyDiagram-5OEKKPKP-Bpr_uqrj.js → pythinker_code-0.49.0/src/pythinker_code/web/static/assets/sankeyDiagram-5OEKKPKP-jtpFOSUV.js +1 -1
  63. pythinker_code-0.48.0/src/pythinker_code/web/static/assets/sequenceDiagram-3UESZ5HK-DM9m6PO5.js → pythinker_code-0.49.0/src/pythinker_code/web/static/assets/sequenceDiagram-3UESZ5HK-CfYp6bks.js +1 -1
  64. pythinker_code-0.48.0/src/pythinker_code/web/static/assets/stateDiagram-AJRCARHV-DZ0VJ_MH.js → pythinker_code-0.49.0/src/pythinker_code/web/static/assets/stateDiagram-AJRCARHV-DGUs0TTR.js +1 -1
  65. pythinker_code-0.49.0/src/pythinker_code/web/static/assets/stateDiagram-v2-BHNVJYJU-CqI3mto4.js +1 -0
  66. pythinker_code-0.48.0/src/pythinker_code/web/static/assets/timeline-definition-PNZ67QCA-D_uBSLDu.js → pythinker_code-0.49.0/src/pythinker_code/web/static/assets/timeline-definition-PNZ67QCA-E7RDe6Mw.js +1 -1
  67. pythinker_code-0.48.0/src/pythinker_code/web/static/assets/treeView-BLDUP644-DeKJ4uCa.js → pythinker_code-0.49.0/src/pythinker_code/web/static/assets/treeView-BLDUP644-CLRP_UjH.js +1 -1
  68. pythinker_code-0.48.0/src/pythinker_code/web/static/assets/treemap-LRROVOQU-CiGjpvUt.js → pythinker_code-0.49.0/src/pythinker_code/web/static/assets/treemap-LRROVOQU-BlA7JmGG.js +1 -1
  69. pythinker_code-0.48.0/src/pythinker_code/web/static/assets/vennDiagram-CIIHVFJN-BZTVj6zw.js → pythinker_code-0.49.0/src/pythinker_code/web/static/assets/vennDiagram-CIIHVFJN-DBNeq9PV.js +1 -1
  70. pythinker_code-0.48.0/src/pythinker_code/web/static/assets/wardley-L42UT6IY-DNmNjaYq.js → pythinker_code-0.49.0/src/pythinker_code/web/static/assets/wardley-L42UT6IY-DLJkcBVG.js +1 -1
  71. pythinker_code-0.48.0/src/pythinker_code/web/static/assets/wardleyDiagram-YWT4CUSO-Bo7PoGMZ.js → pythinker_code-0.49.0/src/pythinker_code/web/static/assets/wardleyDiagram-YWT4CUSO-G9kSoXJz.js +1 -1
  72. pythinker_code-0.48.0/src/pythinker_code/web/static/assets/xychartDiagram-2RQKCTM6-BilotHsD.js → pythinker_code-0.49.0/src/pythinker_code/web/static/assets/xychartDiagram-2RQKCTM6-C1SbDTz8.js +1 -1
  73. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/index.html +1 -1
  74. pythinker_code-0.48.0/src/pythinker_code/web/static/assets/architecture-7EHR7CIX-BYamRjh1.js +0 -1
  75. pythinker_code-0.48.0/src/pythinker_code/web/static/assets/channel-DcWGAel6.js +0 -1
  76. pythinker_code-0.48.0/src/pythinker_code/web/static/assets/classDiagram-4FO5ZUOK-nzIv4cHs.js +0 -1
  77. pythinker_code-0.48.0/src/pythinker_code/web/static/assets/classDiagram-v2-Q7XG4LA2-nzIv4cHs.js +0 -1
  78. pythinker_code-0.48.0/src/pythinker_code/web/static/assets/eventmodeling-FCH6USID-DPqNL9oG.js +0 -1
  79. pythinker_code-0.48.0/src/pythinker_code/web/static/assets/mermaid-VLURNSYL-B9_T5lZN.js +0 -1
  80. pythinker_code-0.48.0/src/pythinker_code/web/static/assets/stateDiagram-v2-BHNVJYJU-vN6RgvSr.js +0 -1
  81. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/LICENSE +0 -0
  82. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/NOTICE +0 -0
  83. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/__init__.py +0 -0
  84. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/__main__.py +0 -0
  85. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/acp/AGENTS.md +0 -0
  86. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/acp/__init__.py +0 -0
  87. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/acp/convert.py +0 -0
  88. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/acp/host.py +0 -0
  89. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/acp/mcp.py +0 -0
  90. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/acp/server.py +0 -0
  91. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/acp/session.py +0 -0
  92. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/acp/tools.py +0 -0
  93. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/acp/types.py +0 -0
  94. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/acp/version.py +0 -0
  95. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/agents/default/agent.yaml +0 -0
  96. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/agents/default/ask.yaml +0 -0
  97. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/agents/default/code_reviewer.yaml +0 -0
  98. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/agents/default/coder.yaml +0 -0
  99. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/agents/default/debug.yaml +0 -0
  100. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/agents/default/debugger.yaml +0 -0
  101. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/agents/default/explore.yaml +0 -0
  102. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/agents/default/implementer.yaml +0 -0
  103. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/agents/default/judge.yaml +0 -0
  104. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/agents/default/plan.yaml +0 -0
  105. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/agents/default/planner.yaml +0 -0
  106. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/agents/default/review.yaml +0 -0
  107. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/agents/default/scout.yaml +0 -0
  108. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/agents/default/security_reviewer.yaml +0 -0
  109. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/agents/default/verifier.yaml +0 -0
  110. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/agents/okabe/agent.yaml +0 -0
  111. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/agentspec.py +0 -0
  112. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/app.py +0 -0
  113. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/approval_runtime/__init__.py +0 -0
  114. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/approval_runtime/models.py +0 -0
  115. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/approval_runtime/runtime.py +0 -0
  116. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/auth/__init__.py +0 -0
  117. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/auth/alibaba.py +0 -0
  118. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/auth/anthropic_direct.py +0 -0
  119. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/auth/browser_login_page.py +0 -0
  120. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/auth/deepseek.py +0 -0
  121. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/auth/github_feedback.py +0 -0
  122. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/auth/kimi.py +0 -0
  123. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/auth/lm_studio.py +0 -0
  124. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/auth/minimax.py +0 -0
  125. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/auth/moonshot.py +0 -0
  126. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/auth/oauth.py +0 -0
  127. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/auth/ollama.py +0 -0
  128. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/auth/openai/__init__.py +0 -0
  129. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/auth/openai/_shared.py +0 -0
  130. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/auth/openai/browser_flow.py +0 -0
  131. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/auth/openai/catalog.py +0 -0
  132. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/auth/openai/config_apply.py +0 -0
  133. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/auth/openai/constants.py +0 -0
  134. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/auth/openai/login.py +0 -0
  135. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/auth/openai/models.py +0 -0
  136. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/auth/openai/oauth_client.py +0 -0
  137. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/auth/opencode_go.py +0 -0
  138. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/auth/openrouter.py +0 -0
  139. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/auth/platforms.py +0 -0
  140. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/auth/z_ai.py +0 -0
  141. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/background/__init__.py +0 -0
  142. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/background/agent_runner.py +0 -0
  143. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/background/ids.py +0 -0
  144. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/background/manager.py +0 -0
  145. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/background/models.py +0 -0
  146. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/background/store.py +0 -0
  147. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/background/summary.py +0 -0
  148. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/background/worker.py +0 -0
  149. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/cli/__init__.py +0 -0
  150. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/cli/__main__.py +0 -0
  151. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/cli/_lazy_group.py +0 -0
  152. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/cli/dashboard.py +0 -0
  153. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/cli/debug.py +0 -0
  154. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/cli/export.py +0 -0
  155. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/cli/info.py +0 -0
  156. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/cli/mcp.py +0 -0
  157. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/cli/plugin.py +0 -0
  158. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/cli/review.py +0 -0
  159. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/cli/secscan.py +0 -0
  160. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/cli/security_scan.py +0 -0
  161. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/cli/skill.py +0 -0
  162. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/cli/system_prompt.py +0 -0
  163. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/cli/toad.py +0 -0
  164. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/cli/update.py +0 -0
  165. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/cli/web.py +0 -0
  166. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/config.py +0 -0
  167. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/constant.py +0 -0
  168. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/dashboard/__init__.py +0 -0
  169. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/dashboard/api/__init__.py +0 -0
  170. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/dashboard/api/sessions.py +0 -0
  171. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/dashboard/api/statistics.py +0 -0
  172. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/dashboard/api/system.py +0 -0
  173. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/dashboard/app.py +0 -0
  174. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/dashboard/static/assets/highlighted-body-OFNGDK62-BxVUIXn9.js +0 -0
  175. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/dashboard/static/assets/index-DAN_VzOP.css +0 -0
  176. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/dashboard/static/assets/index-DYyxzHPY.js +0 -0
  177. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/dashboard/static/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
  178. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/dashboard/static/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
  179. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/dashboard/static/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
  180. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/dashboard/static/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
  181. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/dashboard/static/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
  182. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/dashboard/static/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
  183. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/dashboard/static/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
  184. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/dashboard/static/assets/mermaid-GHXKKRXX-BR6KjYwB.js +0 -0
  185. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/dashboard/static/index.html +0 -0
  186. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/events.py +0 -0
  187. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/exception.py +0 -0
  188. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/execution_profiles.py +0 -0
  189. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/extensions.py +0 -0
  190. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/feedback.py +0 -0
  191. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/feedback_repo.py +0 -0
  192. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/file_restore.py +0 -0
  193. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/hooks/__init__.py +0 -0
  194. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/hooks/config.py +0 -0
  195. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/hooks/engine.py +0 -0
  196. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/hooks/events.py +0 -0
  197. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/hooks/runner.py +0 -0
  198. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/llm.py +0 -0
  199. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/lsp/__init__.py +0 -0
  200. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/lsp/client.py +0 -0
  201. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/lsp/diagnostics.py +0 -0
  202. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/lsp/framing.py +0 -0
  203. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/lsp/instance.py +0 -0
  204. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/lsp/manager.py +0 -0
  205. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/lsp/plugin_servers.py +0 -0
  206. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/lsp/protocol.py +0 -0
  207. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/lsp/recommend.py +0 -0
  208. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/lsp/service.py +0 -0
  209. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/memory/__init__.py +0 -0
  210. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/memory/consolidation.py +0 -0
  211. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/memory/harvest.py +0 -0
  212. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/memory/recall.py +0 -0
  213. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/memory/recap.py +0 -0
  214. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/memory/retriever.py +0 -0
  215. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/memory/sanitize.py +0 -0
  216. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/metadata.py +0 -0
  217. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/models_dev.py +0 -0
  218. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/native.py +0 -0
  219. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/notifications/__init__.py +0 -0
  220. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/notifications/llm.py +0 -0
  221. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/notifications/manager.py +0 -0
  222. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/notifications/models.py +0 -0
  223. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/notifications/notifier.py +0 -0
  224. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/notifications/store.py +0 -0
  225. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/notifications/wire.py +0 -0
  226. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/plugin/__init__.py +0 -0
  227. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/plugin/artifacts.py +0 -0
  228. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/plugin/dependency.py +0 -0
  229. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/plugin/directories.py +0 -0
  230. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/plugin/install.py +0 -0
  231. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/plugin/installed.py +0 -0
  232. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/plugin/integration.py +0 -0
  233. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/plugin/loader.py +0 -0
  234. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/plugin/manager.py +0 -0
  235. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/plugin/manifest.py +0 -0
  236. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/plugin/marketplace.py +0 -0
  237. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/plugin/options.py +0 -0
  238. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/plugin/policy.py +0 -0
  239. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/plugin/tool.py +0 -0
  240. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/project_memory.py +0 -0
  241. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/project_trust.py +0 -0
  242. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/prompt_templates.py +0 -0
  243. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/prompts/__init__.py +0 -0
  244. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/prompts/compact.md +0 -0
  245. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/prompts/goal_continuation.md +0 -0
  246. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/prompts/goal_set.md +0 -0
  247. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/prompts/goal_wrap_up.md +0 -0
  248. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/prompts/init.md +0 -0
  249. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/prompts/learn.md +0 -0
  250. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/py.typed +0 -0
  251. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/scratchpad.py +0 -0
  252. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/session.py +0 -0
  253. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/session_cleanup.py +0 -0
  254. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/session_fork.py +0 -0
  255. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/session_recap.py +0 -0
  256. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/session_state.py +0 -0
  257. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/share.py +0 -0
  258. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/skill/__init__.py +0 -0
  259. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/skill/flow/__init__.py +0 -0
  260. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/skill/flow/d2.py +0 -0
  261. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/skill/flow/mermaid.py +0 -0
  262. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/skill/lockfile.py +0 -0
  263. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/skills/agent-creator/SKILL.md +0 -0
  264. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/skills/check-impl-against-spec/SKILL.md +0 -0
  265. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/skills/create-pr/SKILL.md +0 -0
  266. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/skills/customize-pythinker/SKILL.md +0 -0
  267. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/skills/designer-skill/SKILL.md +0 -0
  268. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/skills/diagnose-ci-failures/SKILL.md +0 -0
  269. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/skills/fix-errors/SKILL.md +0 -0
  270. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/skills/implement-specs/SKILL.md +0 -0
  271. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/skills/pr-walkthrough/SKILL.md +0 -0
  272. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/skills/pythinker-code-help/SKILL.md +0 -0
  273. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/skills/reproduce-bug-report/SKILL.md +0 -0
  274. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/skills/resolve-merge-conflicts/SKILL.md +0 -0
  275. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/skills/review-pr/SKILL.md +0 -0
  276. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/skills/skill-creator/SKILL.md +0 -0
  277. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/skills/spec-driven-implementation/SKILL.md +0 -0
  278. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/skills/write-product-spec/SKILL.md +0 -0
  279. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/skills/write-tech-spec/SKILL.md +0 -0
  280. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/soul/__init__.py +0 -0
  281. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/soul/agent.py +0 -0
  282. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/soul/api_errors.py +0 -0
  283. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/soul/approval.py +0 -0
  284. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/soul/btw.py +0 -0
  285. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/soul/compaction.py +0 -0
  286. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/soul/compaction_restore.py +0 -0
  287. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/soul/context.py +0 -0
  288. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/soul/deliberation.py +0 -0
  289. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/soul/denwarenji.py +0 -0
  290. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/soul/dynamic_injection.py +0 -0
  291. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/soul/dynamic_injections/__init__.py +0 -0
  292. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/soul/dynamic_injections/agent_list.py +0 -0
  293. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/soul/dynamic_injections/auto_mode.py +0 -0
  294. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/soul/dynamic_injections/git_status.py +0 -0
  295. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/soul/dynamic_injections/goal_mode.py +0 -0
  296. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/soul/dynamic_injections/inline_commands.py +0 -0
  297. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/soul/dynamic_injections/lsp_diagnostics.py +0 -0
  298. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/soul/dynamic_injections/model_defense.py +0 -0
  299. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/soul/dynamic_injections/orchestration.py +0 -0
  300. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/soul/dynamic_injections/permissions_state.py +0 -0
  301. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/soul/dynamic_injections/plan_mode.py +0 -0
  302. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/soul/flow_runner.py +0 -0
  303. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/soul/live_tokens.py +0 -0
  304. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/soul/message.py +0 -0
  305. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/soul/permission.py +0 -0
  306. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/soul/pythinkersoul.py +0 -0
  307. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/soul/slash.py +0 -0
  308. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/soul/toolset.py +0 -0
  309. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/subagents/__init__.py +0 -0
  310. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/subagents/builder.py +0 -0
  311. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/subagents/codenames.py +0 -0
  312. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/subagents/core.py +0 -0
  313. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/subagents/discovery.py +0 -0
  314. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/subagents/git_context.py +0 -0
  315. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/subagents/models.py +0 -0
  316. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/subagents/output.py +0 -0
  317. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/subagents/registry.py +0 -0
  318. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/subagents/runner.py +0 -0
  319. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/subagents/store.py +0 -0
  320. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/subagents/usage.py +0 -0
  321. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/subagents/worktree.py +0 -0
  322. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/telemetry/__init__.py +0 -0
  323. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/telemetry/config.py +0 -0
  324. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/telemetry/crash.py +0 -0
  325. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/telemetry/errors.py +0 -0
  326. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/telemetry/metrics.py +0 -0
  327. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/telemetry/names.py +0 -0
  328. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/telemetry/otel.py +0 -0
  329. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/telemetry/sentry.py +0 -0
  330. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/telemetry/sink.py +0 -0
  331. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/thinking.py +0 -0
  332. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/tools/AGENTS.md +0 -0
  333. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/tools/__init__.py +0 -0
  334. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/tools/agent/__init__.py +0 -0
  335. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/tools/agent/description.md +0 -0
  336. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/tools/ask_user/__init__.py +0 -0
  337. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/tools/ask_user/description.md +0 -0
  338. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/tools/background/__init__.py +0 -0
  339. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/tools/background/handoff.md +0 -0
  340. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/tools/background/input.md +0 -0
  341. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/tools/background/list.md +0 -0
  342. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/tools/background/output.md +0 -0
  343. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/tools/background/stop.md +0 -0
  344. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/tools/display.py +0 -0
  345. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/tools/dmail/__init__.py +0 -0
  346. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/tools/dmail/dmail.md +0 -0
  347. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/tools/file/__init__.py +0 -0
  348. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/tools/file/glob.md +0 -0
  349. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/tools/file/glob.py +0 -0
  350. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/tools/file/grep.md +0 -0
  351. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/tools/file/grep_local.py +0 -0
  352. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/tools/file/plan_mode.py +0 -0
  353. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/tools/file/read.md +0 -0
  354. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/tools/file/read.py +0 -0
  355. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/tools/file/read_media.md +0 -0
  356. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/tools/file/read_media.py +0 -0
  357. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/tools/file/replace.md +0 -0
  358. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/tools/file/replace.py +0 -0
  359. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/tools/file/utils.py +0 -0
  360. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/tools/file/write.md +0 -0
  361. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/tools/file/write.py +0 -0
  362. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/tools/goal/__init__.py +0 -0
  363. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/tools/goal/update_goal.md +0 -0
  364. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/tools/lsp/__init__.py +0 -0
  365. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/tools/lsp/formatters.py +0 -0
  366. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/tools/lsp/schemas.py +0 -0
  367. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/tools/lsp/symbol_context.py +0 -0
  368. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/tools/lsp/tool.md +0 -0
  369. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/tools/lsp/tool.py +0 -0
  370. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/tools/mcp_resource/__init__.py +0 -0
  371. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/tools/mcp_resource/list_description.md +0 -0
  372. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/tools/mcp_resource/prompt_description.md +0 -0
  373. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/tools/mcp_resource/read_description.md +0 -0
  374. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/tools/memory/__init__.py +0 -0
  375. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/tools/memory/memory.md +0 -0
  376. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/tools/memory/routing_guard.py +0 -0
  377. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/tools/plan/__init__.py +0 -0
  378. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/tools/plan/description.md +0 -0
  379. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/tools/plan/enter.py +0 -0
  380. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/tools/plan/enter_description.md +0 -0
  381. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/tools/plan/handoff.py +0 -0
  382. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/tools/plan/heroes.py +0 -0
  383. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/tools/progress/__init__.py +0 -0
  384. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/tools/progress/description.md +0 -0
  385. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/tools/recall/__init__.py +0 -0
  386. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/tools/recall/description.md +0 -0
  387. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/tools/scratchpad/__init__.py +0 -0
  388. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/tools/scratchpad/scratchpad_tool.md +0 -0
  389. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/tools/shell/__init__.py +0 -0
  390. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/tools/shell/bash.md +0 -0
  391. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/tools/shell/powershell.md +0 -0
  392. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/tools/skill/__init__.py +0 -0
  393. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/tools/skill/_mcp_bridge.py +0 -0
  394. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/tools/skill/description.md +0 -0
  395. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/tools/suggest/__init__.py +0 -0
  396. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/tools/suggest/description.md +0 -0
  397. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/tools/test.py +0 -0
  398. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/tools/think/__init__.py +0 -0
  399. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/tools/think/think.md +0 -0
  400. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/tools/todo/__init__.py +0 -0
  401. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/tools/todo/set_todo_list.md +0 -0
  402. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/tools/tool_search/__init__.py +0 -0
  403. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/tools/tool_search/tool_search.md +0 -0
  404. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/tools/utils.py +0 -0
  405. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/tools/web/__init__.py +0 -0
  406. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/tools/web/_allowlist.py +0 -0
  407. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/tools/web/fetch.md +0 -0
  408. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/tools/web/fetch.py +0 -0
  409. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/tools/web/search.md +0 -0
  410. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/tools/web/search.py +0 -0
  411. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/tools/worktree/__init__.py +0 -0
  412. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/tools/worktree/enter_worktree.md +0 -0
  413. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/tools/worktree/exit_worktree.md +0 -0
  414. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/__init__.py +0 -0
  415. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/acp/__init__.py +0 -0
  416. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/color_utils.py +0 -0
  417. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/print/__init__.py +0 -0
  418. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/print/visualize.py +0 -0
  419. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/components/__init__.py +0 -0
  420. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/components/base.py +0 -0
  421. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/components/bash_execution.py +0 -0
  422. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/components/bordered_loader.py +0 -0
  423. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/components/diff.py +0 -0
  424. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/components/dynamic_border.py +0 -0
  425. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/components/footer.py +0 -0
  426. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/components/key_hints.py +0 -0
  427. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/components/markdown.py +0 -0
  428. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/components/messages.py +0 -0
  429. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/components/panel.py +0 -0
  430. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/components/render_utils.py +0 -0
  431. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/components/report.py +0 -0
  432. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/components/report_prose_blocks.py +0 -0
  433. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/components/report_update.py +0 -0
  434. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/components/settings_list.py +0 -0
  435. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/components/special_messages.py +0 -0
  436. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/components/tool_execution.py +0 -0
  437. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/console.py +0 -0
  438. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/debug.py +0 -0
  439. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/design_system.py +0 -0
  440. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/echo.py +0 -0
  441. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/export_import.py +0 -0
  442. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/glyphs.py +0 -0
  443. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/keyboard.py +0 -0
  444. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/keymap.py +0 -0
  445. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/markdown/__init__.py +0 -0
  446. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/markdown/audit.py +0 -0
  447. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/markdown/elements.py +0 -0
  448. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/markdown/fences.py +0 -0
  449. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/markdown/normalizers.py +0 -0
  450. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/markdown/renderer.py +0 -0
  451. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/markdown/streaming.py +0 -0
  452. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/mcp_status.py +0 -0
  453. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/model_picker.py +0 -0
  454. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/motion.py +0 -0
  455. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/oauth.py +0 -0
  456. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/placeholders.py +0 -0
  457. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/prompt.py +0 -0
  458. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/render_constants.py +0 -0
  459. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/replay.py +0 -0
  460. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/selector.py +0 -0
  461. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/selectors/__init__.py +0 -0
  462. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/selectors/code_theme.py +0 -0
  463. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/selectors/extension.py +0 -0
  464. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/selectors/oauth.py +0 -0
  465. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/selectors/settings.py +0 -0
  466. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/selectors/show_images.py +0 -0
  467. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/selectors/theme.py +0 -0
  468. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/selectors/thinking.py +0 -0
  469. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/session_picker.py +0 -0
  470. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/setup.py +0 -0
  471. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/slash.py +0 -0
  472. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/spacing.py +0 -0
  473. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/spinner_words.py +0 -0
  474. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/startup.py +0 -0
  475. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/stats.py +0 -0
  476. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/stats_collector.py +0 -0
  477. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/stats_pricing.py +0 -0
  478. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/statusline.py +0 -0
  479. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/sync_output.py +0 -0
  480. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/task_browser.py +0 -0
  481. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/tips.py +0 -0
  482. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/tool_renderers/__init__.py +0 -0
  483. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/tool_renderers/_file_diff.py +0 -0
  484. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/tool_renderers/_render_utils.py +0 -0
  485. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/tool_renderers/agent.py +0 -0
  486. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/tool_renderers/ask_user.py +0 -0
  487. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/tool_renderers/background.py +0 -0
  488. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/tool_renderers/bash.py +0 -0
  489. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/tool_renderers/edit.py +0 -0
  490. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/tool_renderers/find.py +0 -0
  491. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/tool_renderers/generic.py +0 -0
  492. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/tool_renderers/grep.py +0 -0
  493. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/tool_renderers/lsp.py +0 -0
  494. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/tool_renderers/mcp_resource.py +0 -0
  495. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/tool_renderers/memory.py +0 -0
  496. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/tool_renderers/plan.py +0 -0
  497. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/tool_renderers/read.py +0 -0
  498. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/tool_renderers/read_media.py +0 -0
  499. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/tool_renderers/skill.py +0 -0
  500. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/tool_renderers/smart_search.py +0 -0
  501. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/tool_renderers/think.py +0 -0
  502. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/tool_renderers/todo.py +0 -0
  503. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/tool_renderers/tool_search.py +0 -0
  504. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/tool_renderers/web.py +0 -0
  505. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/tool_renderers/worktree.py +0 -0
  506. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/tool_renderers/write.py +0 -0
  507. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/update.py +0 -0
  508. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/update_orchestrator.py +0 -0
  509. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/usage.py +0 -0
  510. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/usage_activity.py +0 -0
  511. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/usage_adapters/__init__.py +0 -0
  512. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/usage_adapters/alibaba.py +0 -0
  513. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/usage_adapters/anthropic_admin.py +0 -0
  514. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/usage_adapters/base.py +0 -0
  515. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/usage_adapters/deepseek.py +0 -0
  516. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/usage_adapters/minimax.py +0 -0
  517. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/usage_adapters/openai_admin.py +0 -0
  518. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/usage_adapters/openai_chatgpt.py +0 -0
  519. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/usage_adapters/opencode_go.py +0 -0
  520. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/usage_adapters/openrouter.py +0 -0
  521. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/usage_adapters/pythinker.py +0 -0
  522. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/usage_adapters/pythinker_ai.py +0 -0
  523. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/usage_render.py +0 -0
  524. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/visualize/__init__.py +0 -0
  525. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/visualize/_activity_tree.py +0 -0
  526. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/visualize/_approval_panel.py +0 -0
  527. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/visualize/_blocks.py +0 -0
  528. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/visualize/_btw_panel.py +0 -0
  529. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/visualize/_dialog_shell.py +0 -0
  530. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/visualize/_diff_live.py +0 -0
  531. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/visualize/_input_router.py +0 -0
  532. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/visualize/_interactive.py +0 -0
  533. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/visualize/_live_view.py +0 -0
  534. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/visualize/_question_panel.py +0 -0
  535. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/visualize/_transcript.py +0 -0
  536. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/shell/visualize/_worklog.py +0 -0
  537. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/terminal_background.py +0 -0
  538. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/terminal_capabilities.py +0 -0
  539. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/theme/__init__.py +0 -0
  540. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/theme/adapters/__init__.py +0 -0
  541. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/theme/adapters/markdown.py +0 -0
  542. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/theme/adapters/task_browser.py +0 -0
  543. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/theme/capabilities.py +0 -0
  544. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/theme/palettes.py +0 -0
  545. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/theme/pythinker_themes.py +0 -0
  546. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/theme/registry.py +0 -0
  547. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/theme/resolver.py +0 -0
  548. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/theme/spec.py +0 -0
  549. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/ui/tui_config.py +0 -0
  550. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/update_policy.py +0 -0
  551. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/usage_ratelimit_cache.py +0 -0
  552. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/utils/__init__.py +0 -0
  553. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/utils/aiohttp.py +0 -0
  554. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/utils/aioqueue.py +0 -0
  555. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/utils/artifacts.py +0 -0
  556. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/utils/broadcast.py +0 -0
  557. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/utils/changelog.py +0 -0
  558. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/utils/clipboard.py +0 -0
  559. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/utils/datetime.py +0 -0
  560. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/utils/diff.py +0 -0
  561. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/utils/editor.py +0 -0
  562. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/utils/environment.py +0 -0
  563. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/utils/envvar.py +0 -0
  564. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/utils/export.py +0 -0
  565. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/utils/file_filter.py +0 -0
  566. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/utils/file_read_cache.py +0 -0
  567. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/utils/frontmatter.py +0 -0
  568. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/utils/gitignore.py +0 -0
  569. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/utils/io.py +0 -0
  570. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/utils/logging.py +0 -0
  571. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/utils/mcp_names.py +0 -0
  572. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/utils/media_limits.py +0 -0
  573. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/utils/media_tags.py +0 -0
  574. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/utils/message.py +0 -0
  575. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/utils/path.py +0 -0
  576. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/utils/proctitle.py +0 -0
  577. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/utils/proxy.py +0 -0
  578. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/utils/pyinstaller.py +0 -0
  579. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/utils/rich/__init__.py +0 -0
  580. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/utils/rich/columns.py +0 -0
  581. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/utils/rich/diff_render.py +0 -0
  582. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/utils/rich/markdown.py +0 -0
  583. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/utils/rich/markdown_sample.md +0 -0
  584. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/utils/rich/markdown_sample_short.md +0 -0
  585. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/utils/rich/syntax.py +0 -0
  586. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/utils/sensitive.py +0 -0
  587. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/utils/server.py +0 -0
  588. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/utils/signals.py +0 -0
  589. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/utils/slashcmd.py +0 -0
  590. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/utils/sleep_inhibitor.py +0 -0
  591. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/utils/string.py +0 -0
  592. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/utils/subprocess_env.py +0 -0
  593. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/utils/term.py +0 -0
  594. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/utils/trust.py +0 -0
  595. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/utils/typing.py +0 -0
  596. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/__init__.py +0 -0
  597. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/api/__init__.py +0 -0
  598. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/api/config.py +0 -0
  599. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/api/open_in.py +0 -0
  600. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/api/sessions.py +0 -0
  601. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/app.py +0 -0
  602. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/auth.py +0 -0
  603. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/models.py +0 -0
  604. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/runner/__init__.py +0 -0
  605. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/runner/messages.py +0 -0
  606. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/runner/process.py +0 -0
  607. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/runner/worker.py +0 -0
  608. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/_headers +0 -0
  609. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  610. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  611. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  612. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  613. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  614. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  615. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  616. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  617. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  618. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  619. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  620. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  621. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  622. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  623. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  624. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  625. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  626. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  627. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  628. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  629. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  630. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  631. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  632. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  633. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  634. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  635. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  636. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  637. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  638. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  639. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  640. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  641. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  642. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  643. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  644. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  645. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  646. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  647. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  648. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  649. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  650. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  651. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  652. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  653. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  654. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  655. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  656. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  657. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  658. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  659. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  660. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  661. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  662. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  663. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  664. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  665. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  666. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  667. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  668. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/abap-CLvhMVsD.js +0 -0
  669. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/actionscript-3--17pq3dv.js +0 -0
  670. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/ada-C5qYipkI.js +0 -0
  671. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/andromeeda-vGVdxbeo.js +0 -0
  672. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/angular-html-BKhkKBsm.js +0 -0
  673. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/angular-ts-CYPbMJCA.js +0 -0
  674. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/apache-U0d_L8uA.js +0 -0
  675. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/apex-CGTLDQj6.js +0 -0
  676. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/apl-D7bENxmy.js +0 -0
  677. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/applescript-CCn79oCD.js +0 -0
  678. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/ara-4CJ0cIlV.js +0 -0
  679. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/arc-8BWbC-0s.js +0 -0
  680. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/array-BifhSqXX.js +0 -0
  681. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/asciidoc-DE70LPWp.js +0 -0
  682. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/asm-Cmm7eHzH.js +0 -0
  683. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/astro-B1l9MDUT.js +0 -0
  684. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/aurora-x-CDeNXAV0.js +0 -0
  685. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/awk-BWXHIvNe.js +0 -0
  686. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/ayu-dark-DluEY0Gj.js +0 -0
  687. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/ayu-light-C3h-C4tm.js +0 -0
  688. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/ayu-mirage-Bqwy1Gya.js +0 -0
  689. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/ballerina-B7ZEbQpA.js +0 -0
  690. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/bat-Bo4NYOV-.js +0 -0
  691. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/beancount-D-usSTwE.js +0 -0
  692. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/berry-DKpUyyne.js +0 -0
  693. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/bibtex-Ci_nEsc7.js +0 -0
  694. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/bicep-CUHmPFLl.js +0 -0
  695. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/bird2-C2hNVINV.js +0 -0
  696. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/blade-BlkqRXu6.js +0 -0
  697. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/bootstrap-BhLLvBaE.css +0 -0
  698. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/bsl-BkkzgIyY.js +0 -0
  699. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/c-PpPxyn8g.js +0 -0
  700. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/c3-CnJL0r0V.js +0 -0
  701. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/cadence-CQ2zXKGN.js +0 -0
  702. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/cairo-DLTphjLi.js +0 -0
  703. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/catppuccin-frappe-3VR1Za6u.js +0 -0
  704. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/catppuccin-latte-DwIHMF0Q.js +0 -0
  705. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/catppuccin-macchiato-DYnBP6_5.js +0 -0
  706. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/catppuccin-mocha-DYhrFGRu.js +0 -0
  707. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/character-entities-legacy-Wut6vMuj.js +0 -0
  708. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/chevrons-up-down-Dwo0Il5v.js +0 -0
  709. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/chunk-4BX2VUAB-C0kf5ycP.js +0 -0
  710. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/chunk-55IACEB6-QyFAFTWp.js +0 -0
  711. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/chunk-BSJP7CBP-DIpfLhEz.js +0 -0
  712. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/chunk-Cyuzqnbw.js +0 -0
  713. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/chunk-FMBD7UC4-C9D6P7Uq.js +0 -0
  714. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/chunk-NNHCCRGN-DmZbXBJw.js +0 -0
  715. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/chunk-QZHKN3VN-CyVdgm44.js +0 -0
  716. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/chunk-XPW4576I-ru3A962d.js +0 -0
  717. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/clarity-SemFz856.js +0 -0
  718. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/clojure-DqKBuwfJ.js +0 -0
  719. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/cmake-Bj61d0ZC.js +0 -0
  720. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/cobol-BoXxFQjh.js +0 -0
  721. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/codeowners-C8r90Shi.js +0 -0
  722. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/codeql-oeQT6MSM.js +0 -0
  723. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/coffee-B5TREocO.js +0 -0
  724. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/common-lisp-Cv5bFMCO.js +0 -0
  725. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/coq-BrsZFFmf.js +0 -0
  726. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/cose-bilkent-S5V4N54A-PjRvINHM.js +0 -0
  727. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/cpp-CVIk4zoB.js +0 -0
  728. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/crystal-CvUuUt6_.js +0 -0
  729. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/csharp-Ct8U2NOr.js +0 -0
  730. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/css-D7o5g6xi.js +0 -0
  731. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/csv-Dx-8-gkx.js +0 -0
  732. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/cue-CE9AQfxI.js +0 -0
  733. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/cypher-ClKdZ_lG.js +0 -0
  734. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/cytoscape.esm-jXPf2pm4.js +0 -0
  735. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/d-qD-0Kul2.js +0 -0
  736. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/dagre-Uyq5yTtG.js +0 -0
  737. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/dark-plus-Cs2F2srj.js +0 -0
  738. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/dart-DkHntEIa.js +0 -0
  739. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/dax-BkyTk9wS.js +0 -0
  740. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/defaultLocale-C8Fc0cco.js +0 -0
  741. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/desktop-Dlh5hvp9.js +0 -0
  742. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/diff-BDNflWRl.js +0 -0
  743. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/diff-Dvab7kiv.css +0 -0
  744. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/diff-woXpYk--.js +0 -0
  745. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/dist-B7jLwIkG.js +0 -0
  746. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/dist-D4B_Bs5p.js +0 -0
  747. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/dist-reBDvVlc.js +0 -0
  748. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/docker-IyjqRm3v.js +0 -0
  749. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/dotenv-_5a1GRtc.js +0 -0
  750. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/dracula-BHWKrbxM.js +0 -0
  751. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/dracula-soft-5eyTD99u.js +0 -0
  752. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/dream-maker-DW3nJb8Q.js +0 -0
  753. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/edge-CmXZi-az.js +0 -0
  754. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/elixir-BoRIkjDi.js +0 -0
  755. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/elm-Cm7sFdI1.js +0 -0
  756. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/emacs-lisp-C9PiwqqW.js +0 -0
  757. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/erb-DuMAGb6i.js +0 -0
  758. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/erlang-Cphh6RMH.js +0 -0
  759. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/everforest-dark-sB-x3p7T.js +0 -0
  760. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/everforest-light-Df2xbC6M.js +0 -0
  761. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/fennel-DQxkIbk2.js +0 -0
  762. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/fish-BJitypiv.js +0 -0
  763. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/fluent-C03EYrpw.js +0 -0
  764. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/fortran-fixed-form-DEKoE2YW.js +0 -0
  765. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/fortran-free-form-CYNrtFtB.js +0 -0
  766. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/fsharp-D13ZGOAj.js +0 -0
  767. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/gdresource-C0sCabJj.js +0 -0
  768. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/gdscript-Cp2uCuqX.js +0 -0
  769. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/gdshader-CBce3t8t.js +0 -0
  770. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/genie-CV2tkWYe.js +0 -0
  771. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/gherkin-DExj1W_8.js +0 -0
  772. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/git-commit-BSykSTBG.js +0 -0
  773. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/git-rebase-D2tSwjJb.js +0 -0
  774. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/github-dark-C-LZuMrd.js +0 -0
  775. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/github-dark-default-DXG-b-1a.js +0 -0
  776. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/github-dark-dimmed-Bx1FflLF.js +0 -0
  777. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/github-dark-high-contrast-B_tTalzw.js +0 -0
  778. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/github-light-EUqPIrTm.js +0 -0
  779. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/github-light-default-BXViO-2h.js +0 -0
  780. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/github-light-high-contrast-B68TUdTA.js +0 -0
  781. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/gleam-CSRkHgEL.js +0 -0
  782. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/glimmer-js--VVKNatA.js +0 -0
  783. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/glimmer-ts-Bfa_wiNC.js +0 -0
  784. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/glsl-MPwHyiXQ.js +0 -0
  785. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/gn-ilITqXS6.js +0 -0
  786. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/gnuplot-7GGW24-e.js +0 -0
  787. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/go-BJwz_mda.js +0 -0
  788. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/graphlib-C22s9MDV.js +0 -0
  789. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/graphql-NW854Khs.js +0 -0
  790. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/groovy-CacY0gHj.js +0 -0
  791. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/gruvbox-dark-hard-C820rvS2.js +0 -0
  792. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/gruvbox-dark-medium-BPjhmG05.js +0 -0
  793. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/gruvbox-dark-soft-MrdJrrXF.js +0 -0
  794. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/gruvbox-light-hard-BC_s9l72.js +0 -0
  795. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/gruvbox-light-medium-BAWPOn9u.js +0 -0
  796. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/gruvbox-light-soft-BSMLrYjP.js +0 -0
  797. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/hack-CSl79E5u.js +0 -0
  798. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/haml-Dmb1YmHj.js +0 -0
  799. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/handlebars-Du8DtnRB.js +0 -0
  800. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/haskell-D8IpX4py.js +0 -0
  801. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/haxe-OTjmBuCE.js +0 -0
  802. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/hcl-Dh228itO.js +0 -0
  803. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/hjson-CxZEssPk.js +0 -0
  804. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/hlsl-Cvrh5tZx.js +0 -0
  805. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/horizon-CE9ld1lL.js +0 -0
  806. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/horizon-bright-Br1oVSNq.js +0 -0
  807. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/houston-CsvMBhTu.js +0 -0
  808. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/html-Kpl3bQKd.js +0 -0
  809. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/html-derivative-BEEWNZ8Y.js +0 -0
  810. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/http-HvMG3K54.js +0 -0
  811. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/hurl-CLh1t2ES.js +0 -0
  812. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/hxml-B0Qn7Nwc.js +0 -0
  813. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/hy-CZbG8q4J.js +0 -0
  814. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/imba-DsUTQ-LC.js +0 -0
  815. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/ini-B5eOa1yu.js +0 -0
  816. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/init-D6jRqBbL.js +0 -0
  817. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
  818. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
  819. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
  820. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
  821. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
  822. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
  823. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
  824. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/java-Cst_eZTE.js +0 -0
  825. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/javascript-i_rUTyCW.js +0 -0
  826. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/jinja-CaXggA6f.js +0 -0
  827. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/jison-D9Fg2JgN.js +0 -0
  828. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/json-DS5j4FfK.js +0 -0
  829. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/json5-BR5RXkoi.js +0 -0
  830. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/jsonc-CYpm1nAK.js +0 -0
  831. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/jsonl-CmCQp5Yx.js +0 -0
  832. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/jsonnet-CJTPZ8u_.js +0 -0
  833. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/jssm-DXw9l8Rf.js +0 -0
  834. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/jsx-CFyhNHav.js +0 -0
  835. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/jsx-runtime-wSvXh6gi.js +0 -0
  836. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/julia-R8NNmfP1.js +0 -0
  837. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/just-BhhHYlS8.js +0 -0
  838. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/kanagawa-dragon-CXtmUGW6.js +0 -0
  839. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/kanagawa-lotus-BN08jTvb.js +0 -0
  840. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/kanagawa-wave-CTweb8Dz.js +0 -0
  841. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/katex-BGaDVET_.js +0 -0
  842. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/katex-BorAY7qD.css +0 -0
  843. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/kdl-CsD5j6eV.js +0 -0
  844. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/kotlin-DhhofPvG.js +0 -0
  845. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/kusto-BUv0MjJC.js +0 -0
  846. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/laserwave-C_8bwKvT.js +0 -0
  847. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/latex-D5k_uhWv.js +0 -0
  848. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/lean-CewbzKMR.js +0 -0
  849. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/less-DVTAwKKz.js +0 -0
  850. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/lib-BLxG8W6T.js +0 -0
  851. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/libesm-8-2luV-1.js +0 -0
  852. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/light-plus-DVQuIRkW.js +0 -0
  853. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/linear-BktLjFGX.js +0 -0
  854. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/liquid-Q0_hzjly.js +0 -0
  855. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/llvm-Cm23YOpf.js +0 -0
  856. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/log-BNLmms1o.js +0 -0
  857. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/logo-Cluzi2Zq.js +0 -0
  858. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/lua-VoGSg0xb.js +0 -0
  859. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/luau-CNKltnaQ.js +0 -0
  860. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/make-Dixweg8N.js +0 -0
  861. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/markdown-BYOwaDjH.js +0 -0
  862. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/marked.esm-DLdcrU5H.js +0 -0
  863. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/marko-D_aeUD__.js +0 -0
  864. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/material-theme-Bm3Qr25_.js +0 -0
  865. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/material-theme-darker-2IIEA8gg.js +0 -0
  866. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/material-theme-lighter-uhdI0v04.js +0 -0
  867. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/material-theme-ocean-CHQ94UKr.js +0 -0
  868. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/material-theme-palenight-B5W6OYN7.js +0 -0
  869. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/matlab-D7qyCx1q.js +0 -0
  870. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/mdc-BSifqehP.js +0 -0
  871. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/mdx-DQZ5AkYe.js +0 -0
  872. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/mermaid-Bk4SNUv9.js +0 -0
  873. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/min-dark-BSWPekZh.js +0 -0
  874. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/min-light-DDpmG2fV.js +0 -0
  875. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/mipsasm-BMqwQI7S.js +0 -0
  876. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/mojo-BgCJLMeH.js +0 -0
  877. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/monokai-CdkpiU2Y.js +0 -0
  878. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/moonbit-CaWjb8XO.js +0 -0
  879. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/move-B1IS1UjX.js +0 -0
  880. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/narrat-_X_XdTYD.js +0 -0
  881. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/nextflow-Bbiyy34d.js +0 -0
  882. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/nextflow-groovy-Dc_ddanL.js +0 -0
  883. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/nginx-CgHaWcsO.js +0 -0
  884. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/night-owl-DhmEMT88.js +0 -0
  885. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/night-owl-light-eJ-hLW7d.js +0 -0
  886. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/nim-BuixXxPS.js +0 -0
  887. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/nix-IvuFDN5E.js +0 -0
  888. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/nord-Cb4Vim4T.js +0 -0
  889. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/nushell-DcLAeLz5.js +0 -0
  890. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/objective-c-D1A_Heim.js +0 -0
  891. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/objective-cpp-BsSzOQcm.js +0 -0
  892. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/ocaml-O90oeIOV.js +0 -0
  893. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/odin-B1RWQWA5.js +0 -0
  894. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/one-dark-pro-CLwyXe_n.js +0 -0
  895. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/one-light-D7Lr4KcI.js +0 -0
  896. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/openscad-BUDT5pXO.js +0 -0
  897. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/ordinal-hYBb2elL.js +0 -0
  898. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/pascal-4ZHwLPI5.js +0 -0
  899. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/path-BWPyau1x.js +0 -0
  900. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/perl-BLMySlFJ.js +0 -0
  901. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/php-Czf_fybR.js +0 -0
  902. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/pkl-ot-7Btpt.js +0 -0
  903. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/plastic-DQwYfKfQ.js +0 -0
  904. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/plsql-DGHpHOYJ.js +0 -0
  905. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/po-BiJDBrnU.js +0 -0
  906. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/poimandres-DRFjx7u4.js +0 -0
  907. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/polar-C7UOKdEL.js +0 -0
  908. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/postcss-BXeXVLqQ.js +0 -0
  909. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/powerquery-DNMTfnFr.js +0 -0
  910. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/powershell-DshXNtvi.js +0 -0
  911. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/prisma-BsRQq5mF.js +0 -0
  912. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/prolog-iXnhIJG7.js +0 -0
  913. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/proto-DB4EqR-F.js +0 -0
  914. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/pug-CsZglf8T.js +0 -0
  915. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/puppet-CDv2pdJW.js +0 -0
  916. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/purescript-9MfHhQsQ.js +0 -0
  917. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/python-gzcpVVnB.js +0 -0
  918. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/qml-DcW_sT3t.js +0 -0
  919. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/qmldir-DCQb3MpD.js +0 -0
  920. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/qss-Fe1Jh2GI.js +0 -0
  921. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/r-D2d3McyU.js +0 -0
  922. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/racket-DcIDlBhZ.js +0 -0
  923. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/raku-B3gFvitq.js +0 -0
  924. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/razor-oFpUW61Z.js +0 -0
  925. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/red-CJ3rzSJv.js +0 -0
  926. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/reg-CRGYupPL.js +0 -0
  927. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/regexp-Bu0flJgP.js +0 -0
  928. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/rel-BtDbiS_P.js +0 -0
  929. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/riscv-Ckw8ddFX.js +0 -0
  930. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/ron-VUp2lXgN.js +0 -0
  931. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/rose-pine-BthvhNj6.js +0 -0
  932. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/rose-pine-dawn-Dg85fqjY.js +0 -0
  933. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/rose-pine-moon-hon4tzzS.js +0 -0
  934. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/rosmsg-CAekHB0j.js +0 -0
  935. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/rough.esm-CSKSodPl.js +0 -0
  936. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/rst-U6Eu7ipE.js +0 -0
  937. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/ruby-CUQsVT6d.js +0 -0
  938. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/rust-Cfkwpbl8.js +0 -0
  939. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/sas-CNBFrLhc.js +0 -0
  940. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/sass-DXrisJhu.js +0 -0
  941. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/scala-DKOlJaKm.js +0 -0
  942. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/scheme-DQCgrYNe.js +0 -0
  943. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/scss-CPnU-uuv.js +0 -0
  944. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/sdbl-bTVj8UrX.js +0 -0
  945. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/shaderlab-TOUzSsQk.js +0 -0
  946. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/shellscript-BbTp1yjG.js +0 -0
  947. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/shellsession-BmAC8SMF.js +0 -0
  948. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/slack-dark-DnToyrRv.js +0 -0
  949. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/slack-ochin-B2OO5cIa.js +0 -0
  950. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/smalltalk-B16xEiuN.js +0 -0
  951. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/snazzy-light-4G7pJPwS.js +0 -0
  952. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/solarized-dark-DV17i1UV.js +0 -0
  953. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/solarized-light-DSh2HLQt.js +0 -0
  954. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/solidity-CKzVLygQ.js +0 -0
  955. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/soy-CdbyEXp6.js +0 -0
  956. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/space-separated-tokens-DpjE5PGy.js +0 -0
  957. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/sparql-D_iOobhT.js +0 -0
  958. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/splunk-BC2Px7Mm.js +0 -0
  959. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/sql-hpBkusIy.js +0 -0
  960. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/src-D-NMWEou.js +0 -0
  961. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/ssh-config-BgfXC-Er.js +0 -0
  962. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/stata-DVbvk3qH.js +0 -0
  963. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/stylus-B6D30XZt.js +0 -0
  964. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/surrealql-DxccxuMd.js +0 -0
  965. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/svelte-DzNm5V2w.js +0 -0
  966. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/swift-DonLKvLd.js +0 -0
  967. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/synthwave-84-nFMaYfgc.js +0 -0
  968. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/system-verilog-DJ5XKQeo.js +0 -0
  969. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/systemd-BxMlprV5.js +0 -0
  970. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/talonscript-CohzipZa.js +0 -0
  971. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/tasl-DMoTqEGO.js +0 -0
  972. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/tcl-CZd0xW_V.js +0 -0
  973. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/templ-CsM0tTsw.js +0 -0
  974. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/terraform-DswuEJGm.js +0 -0
  975. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/tex-B0f_hYr8.js +0 -0
  976. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/tokyo-night-oM2G3aXe.js +0 -0
  977. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/toml-CcmNWLt0.js +0 -0
  978. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/ts-tags-Bf-FGGvT.js +0 -0
  979. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/tsv-sltzmVWM.js +0 -0
  980. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/tsx-DFvk7AwW.js +0 -0
  981. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/turtle-ByJddavk.js +0 -0
  982. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/twig-VJ4-Ntm0.js +0 -0
  983. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/typescript-DHTLvXzV.js +0 -0
  984. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/typespec-B88KGewJ.js +0 -0
  985. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/typst-DI99ib-x.js +0 -0
  986. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/v-DETTlOr0.js +0 -0
  987. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/v4-DqR3yzBO.js +0 -0
  988. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/vala-zf12oZj6.js +0 -0
  989. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/vb-Djn5o6TS.js +0 -0
  990. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/verilog-CiiDBU1e.js +0 -0
  991. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/vesper-D5bVUKB1.js +0 -0
  992. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/vhdl-BroJfC0k.js +0 -0
  993. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/viml-DvXPmvsu.js +0 -0
  994. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/vitesse-black-fwtXNY1n.js +0 -0
  995. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/vitesse-dark-BZCL-v6S.js +0 -0
  996. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/vitesse-light-VbXTXTou.js +0 -0
  997. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/vue-D3dSYZKz.js +0 -0
  998. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/vue-html-DQch_7VQ.js +0 -0
  999. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/vue-vine-B67Dz05t.js +0 -0
  1000. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/vyper-CgoNMtux.js +0 -0
  1001. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/wasm-BnjxR4X6.js +0 -0
  1002. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/wasm-ByWQv1Qj.js +0 -0
  1003. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/wenyan-C8pVoKbM.js +0 -0
  1004. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/wgsl-BsKzXJz4.js +0 -0
  1005. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/wikitext-ClFFjSW2.js +0 -0
  1006. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/wit-DdvCle-K.js +0 -0
  1007. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/wolfram-DLL8P-h_.js +0 -0
  1008. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/xml-C33zriiW.js +0 -0
  1009. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/xsl-BFS2wyMt.js +0 -0
  1010. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/yaml-w0rMsuN4.js +0 -0
  1011. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/zenscript-BnlCZFoB.js +0 -0
  1012. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/assets/zig-CMLA9XwU.js +0 -0
  1013. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/brand/apple-touch-icon.png +0 -0
  1014. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/brand/arctecture.webp +0 -0
  1015. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/brand/bimi-logo.svg +0 -0
  1016. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/brand/favicon.ico +0 -0
  1017. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/brand/fonts/dm-sans-latin-ext.woff2 +0 -0
  1018. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/brand/fonts/dm-sans-latin.woff2 +0 -0
  1019. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/brand/fonts/instrument-sans-latin-ext.woff2 +0 -0
  1020. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/brand/fonts/instrument-sans-latin.woff2 +0 -0
  1021. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/brand/fonts/instrument-serif-latin-ext.woff2 +0 -0
  1022. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/brand/fonts/instrument-serif-latin.woff2 +0 -0
  1023. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-italic-latin-ext.woff2 +0 -0
  1024. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-italic-latin.woff2 +0 -0
  1025. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-latin-ext.woff2 +0 -0
  1026. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-latin.woff2 +0 -0
  1027. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/brand/fonts/roboto-latin-ext.woff2 +0 -0
  1028. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/brand/fonts/roboto-latin.woff2 +0 -0
  1029. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/brand/icon-192.png +0 -0
  1030. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/brand/icon-512.png +0 -0
  1031. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/brand/icon.svg +0 -0
  1032. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/brand/logo.png +0 -0
  1033. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/brand/pythinker_animated.svg +0 -0
  1034. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/brand/robots.txt +0 -0
  1035. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/install.ps1 +0 -0
  1036. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/install.sh +0 -0
  1037. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/static/logo.png +0 -0
  1038. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/store/__init__.py +0 -0
  1039. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/web/store/sessions.py +0 -0
  1040. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/wire/__init__.py +0 -0
  1041. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/wire/file.py +0 -0
  1042. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/wire/jsonrpc.py +0 -0
  1043. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/wire/protocol.py +0 -0
  1044. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/wire/root_hub.py +0 -0
  1045. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/wire/serde.py +0 -0
  1046. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/wire/server.py +0 -0
  1047. {pythinker_code-0.48.0 → pythinker_code-0.49.0}/src/pythinker_code/wire/types.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pythinker-code
3
- Version: 0.48.0
3
+ Version: 0.49.0
4
4
  Summary: Pythinker — an agentic CLI developed by Pythoughts-labs.
5
5
  Keywords: cli,agent,ai,coding-assistant,llm,claude,openai,terminal
6
6
  Author: Pythoughts-labs
@@ -115,13 +115,13 @@ It speaks the [**Agent Client Protocol (ACP)**](https://github.com/agentclientpr
115
115
 
116
116
  ---
117
117
 
118
- ## 🆕 What's New in 0.48.0
118
+ ## 🆕 What's New in 0.49.0
119
119
 
120
- - **LSP code intelligence.** New `LSP` tool (go-to-definition, references, hover, symbols, call hierarchy) with plugin-backed language servers, session-scoped lifecycle, passive diagnostics after edits, and structured errors when a server lacks `implementationProvider`.
121
- - **TUI theme and streaming overhaul.** Centralized theme system (`/theme`), 25 Hz paced streaming, syntax-highlighted diff cards, report panel polish, and smoother interactive/non-interactive live views no preamble ghosting, mid-stream scrollback flicker, or fossilized spinners during tool transitions.
122
- - **Proxy and tool-call hardening.** Tool results flatten for Anthropic-compatible proxies (fixes invisible GLM/z.ai outputs); `ToolSearch` is hidden from providers that cannot use deferred discovery; diff cards strip ANSI escapes; collapsed ReadFile cards show line counts and previews.
120
+ - **Cleaner code by default.** The agent now walks an explicit *reduction ladder* before writing code — does this need to exist at all, then the standard library, a native platform or framework feature, an already-installed dependency, one line, and only then the minimum custom code — so it reaches for the simplest working solution without trading away input validation, error handling, security, or accessibility. The same guidance layers into the `/best-practices` profile.
121
+ - **New `cleanup-audit` skill.** A read-only, whole-repo audit that ranks over-engineering what to delete, simplify, or replace with standard-library/platform equivalentsas the repo-wide complement to the diff-scoped `pythinker review diff --mode deslopify`. It applies no fixes.
122
+ - **Smoother startup.** Update notices no longer appear twice; the hint now renders once on the persistent under-input line instead of also flashing as a footer toast.
123
123
 
124
- Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.48.0`, or use the native installer for your platform from the [Releases page](https://github.com/Pythoughts-labs/pythinker-code/releases/latest).
124
+ Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.49.0`, or use the native installer for your platform from the [Releases page](https://github.com/Pythoughts-labs/pythinker-code/releases/latest).
125
125
 
126
126
 
127
127
  ---
@@ -211,7 +211,7 @@ matches your OS — no Python, Node, or `uv` prerequisite.
211
211
 
212
212
  | Platform | Recommended install | Artifact source |
213
213
  |---|---|---|
214
- | **🪟 Windows** | `irm https://pythinker.com/install.ps1 \| iex` | `PythinkerSetup-0.48.0.exe` from [Releases](https://github.com/Pythoughts-labs/pythinker-code/releases/latest) |
214
+ | **🪟 Windows** | `irm https://pythinker.com/install.ps1 \| iex` | `PythinkerSetup-0.49.0.exe` from [Releases](https://github.com/Pythoughts-labs/pythinker-code/releases/latest) |
215
215
  | **<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) |
216
216
  | **<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 |
217
217
  | **🐳 Docker** | `docker run --rm -it ghcr.io/pythoughts-labs/pythinker-code` | GHCR multi-arch image |
@@ -239,7 +239,7 @@ pythinker # start the interactive TUI
239
239
 
240
240
  ### 🪟 Windows — native installer
241
241
 
242
- `PythinkerSetup-0.48.0.exe` is a signed* Inno Setup wizard. Installs per-user
242
+ `PythinkerSetup-0.49.0.exe` is a signed* Inno Setup wizard. Installs per-user
243
243
  into `%LOCALAPPDATA%\Programs\Pythinker`, registers `pythinker` on your user
244
244
  PATH (`HKCU\Environment`), broadcasts `WM_SETTINGCHANGE` so new shells see
245
245
  the change. **No UAC prompt.**
@@ -250,13 +250,13 @@ irm https://pythinker.com/install.ps1 | iex
250
250
 
251
251
  # Or manually download the installer + checksum from the Releases page,
252
252
  # verify with Get-FileHash, then run:
253
- .\PythinkerSetup-0.48.0.exe
253
+ .\PythinkerSetup-0.49.0.exe
254
254
 
255
255
  # Open a fresh PowerShell
256
256
  pythinker --version
257
257
  ```
258
258
 
259
- **Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.48.0.exe /ALLUSERS`
259
+ **Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.49.0.exe /ALLUSERS`
260
260
  installs to `%ProgramFiles%\Pythinker` and writes PATH to HKLM (requires admin).
261
261
 
262
262
  **Upgrade:** `pythinker update` from inside the running app — it downloads
@@ -314,26 +314,26 @@ attached to every GitHub Release.
314
314
 
315
315
  ```sh
316
316
  # Debian / Ubuntu (x86_64)
317
- sudo dpkg -i pythinker-code_0.48.0_amd64.deb
317
+ sudo dpkg -i pythinker-code_0.49.0_amd64.deb
318
318
  sudo apt-get install -f # only if dpkg reports missing deps
319
319
 
320
320
  # Debian / Ubuntu (ARM64)
321
- sudo dpkg -i pythinker-code_0.48.0_arm64.deb
321
+ sudo dpkg -i pythinker-code_0.49.0_arm64.deb
322
322
 
323
323
  # Fedora / RHEL / openSUSE (x86_64)
324
- curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.48.0/pythinker-code-0.48.0.x86_64.rpm
325
- curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.48.0/pythinker-code-0.48.0.x86_64.rpm.sha256
326
- sha256sum -c pythinker-code-0.48.0.x86_64.rpm.sha256
324
+ curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.49.0/pythinker-code-0.49.0.x86_64.rpm
325
+ curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.49.0/pythinker-code-0.49.0.x86_64.rpm.sha256
326
+ sha256sum -c pythinker-code-0.49.0.x86_64.rpm.sha256
327
327
  # Fedora / RHEL:
328
- sudo dnf install ./pythinker-code-0.48.0.x86_64.rpm
328
+ sudo dnf install ./pythinker-code-0.49.0.x86_64.rpm
329
329
  # openSUSE:
330
- sudo zypper install ./pythinker-code-0.48.0.x86_64.rpm
330
+ sudo zypper install ./pythinker-code-0.49.0.x86_64.rpm
331
331
 
332
332
  # Fedora / RHEL (aarch64)
333
- curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.48.0/pythinker-code-0.48.0.aarch64.rpm
334
- curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.48.0/pythinker-code-0.48.0.aarch64.rpm.sha256
335
- sha256sum -c pythinker-code-0.48.0.aarch64.rpm.sha256
336
- sudo dnf install ./pythinker-code-0.48.0.aarch64.rpm
333
+ curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.49.0/pythinker-code-0.49.0.aarch64.rpm
334
+ curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.49.0/pythinker-code-0.49.0.aarch64.rpm.sha256
335
+ sha256sum -c pythinker-code-0.49.0.aarch64.rpm.sha256
336
+ sudo dnf install ./pythinker-code-0.49.0.aarch64.rpm
337
337
  ```
338
338
 
339
339
  Both packages drop a small `/usr/bin/pythinker` launcher that execs the real
@@ -342,8 +342,8 @@ binary under `/usr/lib/pythinker/`, so your `$PATH` stays tidy.
342
342
  **Verify before install:**
343
343
 
344
344
  ```sh
345
- sha256sum -c pythinker-code_0.48.0_amd64.deb.sha256 # Debian/Ubuntu
346
- sha256sum -c pythinker-code-0.48.0.x86_64.rpm.sha256 # Fedora/RHEL
345
+ sha256sum -c pythinker-code_0.49.0_amd64.deb.sha256 # Debian/Ubuntu
346
+ sha256sum -c pythinker-code-0.49.0.x86_64.rpm.sha256 # Fedora/RHEL
347
347
  ```
348
348
 
349
349
  **Upgrade:** download the new `.deb`/`.rpm` from Releases and `dpkg -i` /
@@ -50,13 +50,13 @@ It speaks the [**Agent Client Protocol (ACP)**](https://github.com/agentclientpr
50
50
 
51
51
  ---
52
52
 
53
- ## 🆕 What's New in 0.48.0
53
+ ## 🆕 What's New in 0.49.0
54
54
 
55
- - **LSP code intelligence.** New `LSP` tool (go-to-definition, references, hover, symbols, call hierarchy) with plugin-backed language servers, session-scoped lifecycle, passive diagnostics after edits, and structured errors when a server lacks `implementationProvider`.
56
- - **TUI theme and streaming overhaul.** Centralized theme system (`/theme`), 25 Hz paced streaming, syntax-highlighted diff cards, report panel polish, and smoother interactive/non-interactive live views no preamble ghosting, mid-stream scrollback flicker, or fossilized spinners during tool transitions.
57
- - **Proxy and tool-call hardening.** Tool results flatten for Anthropic-compatible proxies (fixes invisible GLM/z.ai outputs); `ToolSearch` is hidden from providers that cannot use deferred discovery; diff cards strip ANSI escapes; collapsed ReadFile cards show line counts and previews.
55
+ - **Cleaner code by default.** The agent now walks an explicit *reduction ladder* before writing code — does this need to exist at all, then the standard library, a native platform or framework feature, an already-installed dependency, one line, and only then the minimum custom code — so it reaches for the simplest working solution without trading away input validation, error handling, security, or accessibility. The same guidance layers into the `/best-practices` profile.
56
+ - **New `cleanup-audit` skill.** A read-only, whole-repo audit that ranks over-engineering what to delete, simplify, or replace with standard-library/platform equivalentsas the repo-wide complement to the diff-scoped `pythinker review diff --mode deslopify`. It applies no fixes.
57
+ - **Smoother startup.** Update notices no longer appear twice; the hint now renders once on the persistent under-input line instead of also flashing as a footer toast.
58
58
 
59
- Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.48.0`, or use the native installer for your platform from the [Releases page](https://github.com/Pythoughts-labs/pythinker-code/releases/latest).
59
+ Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.49.0`, or use the native installer for your platform from the [Releases page](https://github.com/Pythoughts-labs/pythinker-code/releases/latest).
60
60
 
61
61
 
62
62
  ---
@@ -146,7 +146,7 @@ matches your OS — no Python, Node, or `uv` prerequisite.
146
146
 
147
147
  | Platform | Recommended install | Artifact source |
148
148
  |---|---|---|
149
- | **🪟 Windows** | `irm https://pythinker.com/install.ps1 \| iex` | `PythinkerSetup-0.48.0.exe` from [Releases](https://github.com/Pythoughts-labs/pythinker-code/releases/latest) |
149
+ | **🪟 Windows** | `irm https://pythinker.com/install.ps1 \| iex` | `PythinkerSetup-0.49.0.exe` from [Releases](https://github.com/Pythoughts-labs/pythinker-code/releases/latest) |
150
150
  | **<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) |
151
151
  | **<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 |
152
152
  | **🐳 Docker** | `docker run --rm -it ghcr.io/pythoughts-labs/pythinker-code` | GHCR multi-arch image |
@@ -174,7 +174,7 @@ pythinker # start the interactive TUI
174
174
 
175
175
  ### 🪟 Windows — native installer
176
176
 
177
- `PythinkerSetup-0.48.0.exe` is a signed* Inno Setup wizard. Installs per-user
177
+ `PythinkerSetup-0.49.0.exe` is a signed* Inno Setup wizard. Installs per-user
178
178
  into `%LOCALAPPDATA%\Programs\Pythinker`, registers `pythinker` on your user
179
179
  PATH (`HKCU\Environment`), broadcasts `WM_SETTINGCHANGE` so new shells see
180
180
  the change. **No UAC prompt.**
@@ -185,13 +185,13 @@ irm https://pythinker.com/install.ps1 | iex
185
185
 
186
186
  # Or manually download the installer + checksum from the Releases page,
187
187
  # verify with Get-FileHash, then run:
188
- .\PythinkerSetup-0.48.0.exe
188
+ .\PythinkerSetup-0.49.0.exe
189
189
 
190
190
  # Open a fresh PowerShell
191
191
  pythinker --version
192
192
  ```
193
193
 
194
- **Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.48.0.exe /ALLUSERS`
194
+ **Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.49.0.exe /ALLUSERS`
195
195
  installs to `%ProgramFiles%\Pythinker` and writes PATH to HKLM (requires admin).
196
196
 
197
197
  **Upgrade:** `pythinker update` from inside the running app — it downloads
@@ -249,26 +249,26 @@ attached to every GitHub Release.
249
249
 
250
250
  ```sh
251
251
  # Debian / Ubuntu (x86_64)
252
- sudo dpkg -i pythinker-code_0.48.0_amd64.deb
252
+ sudo dpkg -i pythinker-code_0.49.0_amd64.deb
253
253
  sudo apt-get install -f # only if dpkg reports missing deps
254
254
 
255
255
  # Debian / Ubuntu (ARM64)
256
- sudo dpkg -i pythinker-code_0.48.0_arm64.deb
256
+ sudo dpkg -i pythinker-code_0.49.0_arm64.deb
257
257
 
258
258
  # Fedora / RHEL / openSUSE (x86_64)
259
- curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.48.0/pythinker-code-0.48.0.x86_64.rpm
260
- curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.48.0/pythinker-code-0.48.0.x86_64.rpm.sha256
261
- sha256sum -c pythinker-code-0.48.0.x86_64.rpm.sha256
259
+ curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.49.0/pythinker-code-0.49.0.x86_64.rpm
260
+ curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.49.0/pythinker-code-0.49.0.x86_64.rpm.sha256
261
+ sha256sum -c pythinker-code-0.49.0.x86_64.rpm.sha256
262
262
  # Fedora / RHEL:
263
- sudo dnf install ./pythinker-code-0.48.0.x86_64.rpm
263
+ sudo dnf install ./pythinker-code-0.49.0.x86_64.rpm
264
264
  # openSUSE:
265
- sudo zypper install ./pythinker-code-0.48.0.x86_64.rpm
265
+ sudo zypper install ./pythinker-code-0.49.0.x86_64.rpm
266
266
 
267
267
  # Fedora / RHEL (aarch64)
268
- curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.48.0/pythinker-code-0.48.0.aarch64.rpm
269
- curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.48.0/pythinker-code-0.48.0.aarch64.rpm.sha256
270
- sha256sum -c pythinker-code-0.48.0.aarch64.rpm.sha256
271
- sudo dnf install ./pythinker-code-0.48.0.aarch64.rpm
268
+ curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.49.0/pythinker-code-0.49.0.aarch64.rpm
269
+ curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.49.0/pythinker-code-0.49.0.aarch64.rpm.sha256
270
+ sha256sum -c pythinker-code-0.49.0.aarch64.rpm.sha256
271
+ sudo dnf install ./pythinker-code-0.49.0.aarch64.rpm
272
272
  ```
273
273
 
274
274
  Both packages drop a small `/usr/bin/pythinker` launcher that execs the real
@@ -277,8 +277,8 @@ binary under `/usr/lib/pythinker/`, so your `$PATH` stays tidy.
277
277
  **Verify before install:**
278
278
 
279
279
  ```sh
280
- sha256sum -c pythinker-code_0.48.0_amd64.deb.sha256 # Debian/Ubuntu
281
- sha256sum -c pythinker-code-0.48.0.x86_64.rpm.sha256 # Fedora/RHEL
280
+ sha256sum -c pythinker-code_0.49.0_amd64.deb.sha256 # Debian/Ubuntu
281
+ sha256sum -c pythinker-code-0.49.0.x86_64.rpm.sha256 # Fedora/RHEL
282
282
  ```
283
283
 
284
284
  **Upgrade:** download the new `.deb`/`.rpm` from Releases and `dpkg -i` /
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "pythinker-code"
3
- version = "0.48.0"
3
+ version = "0.49.0"
4
4
  description = "Pythinker — an agentic CLI developed by Pythoughts-labs."
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.12"
@@ -15,6 +15,25 @@ GitHub Releases page; `0.8.0` is the new starting line.
15
15
 
16
16
  ## Unreleased
17
17
 
18
+ ## 0.49.0 (2026-06-20)
19
+
20
+ - **Reduction ladder in the default agent prompt.** The agent now walks an explicit,
21
+ ordered ladder before writing code — does this need to exist at all, then the standard
22
+ library, a native platform or framework feature, an already-installed dependency, one
23
+ line, and only then the minimum custom code — so it reaches for the simplest working
24
+ solution by default. The same guidance is mirrored into the `/best-practices` profile,
25
+ and deliberate shortcuts with a known ceiling are flagged with a comment naming the
26
+ ceiling and the upgrade path. Input validation, error handling, security, and
27
+ accessibility are never traded away for fewer lines.
28
+ - **New `cleanup-audit` skill.** A read-only, whole-repo pass that ranks over-engineering
29
+ — what to delete, simplify, or replace with standard-library/platform equivalents — as
30
+ the repo-wide complement to the diff-scoped `pythinker review diff --mode deslopify`. It
31
+ applies no fixes and never proposes cutting validation, error handling, security, or
32
+ accessibility.
33
+ - **Fix: duplicate update notices at startup.** When a background install finishes
34
+ or a cached update is detected, the hint now renders only on the persistent
35
+ under-input line instead of also flashing as a footer toast.
36
+
18
37
  ## 0.48.0 (2026-06-17)
19
38
 
20
39
  - **Fix: tool outputs invisible on Anthropic-compatible proxies (GLM-5.2 via z.ai).**
@@ -149,7 +149,9 @@ ${PYTHINKER_SCRATCHPAD_SECTION}
149
149
 
150
150
  **Simplicity first — minimum code that solves the problem, nothing speculative.** No features beyond what was asked; no abstractions for single-use code; no unrequested configurability; no error handling for impossible scenarios — validate at boundaries only. If a 200-line draft could be 50 lines, rewrite it before showing it. Over-fragmentation is overcomplication too: don't scatter logic across tiny files or extra layers to satisfy a pattern — match the codebase's existing granularity. Self-check: *would a senior engineer call this over-engineered?* If yes, simplify.
151
151
 
152
- **Quality defaults** (unless project or domain rules override): focused, shallow, scannable functions with early exits over deep nesting; meaningful identifiers, no shadowing, the context's casing convention; avoid duplicate logic within a change without inventing broad abstractions for one-off repetition; comment only non-obvious algorithms, workarounds, business rules, and edge cases (`TODO:` for real debt; no self-evident comments; never add copyright or license headers unless requested); cohesive, testable modules; efficient data structures where they aid clarity or scale; wrap error-prone I/O, API, network, and resource operations with handling, timeouts/fallbacks, and cleanup; adopt stricter domain standards (e.g. MISRA-style C/C++) when relevant. Once correct, run the repo's formatter (up to 3 attempts); never add one where none exists.
152
+ **The reduction ladder walk it before writing code; stop at the first rung that holds.** (1) *Does this need to exist at all?* A speculative need is skipped, said so in one line. (2) *Does the standard library do it?* Use it. (3) *Does a native platform or framework feature cover it?* A database constraint over an app-level check, a built-in form control over a picker library, the language's own construct over a hand-rolled one — use it. (4) *Does a dependency already in the manifest solve it?* Use it; never add a new dependency for what a few lines cover. (5) *Can it be one line?* Make it one line. (6) *Only then* write the minimum code that works. When two rungs both hold, take the higher one and move on the ladder is a reflex, not a research project. None of this overrides the guards in this section: trust-boundary validation, error handling that prevents data loss, security, and accessibility stay in even at rung 5.
153
+
154
+ **Quality defaults** (unless project or domain rules override): focused, shallow, scannable functions with early exits over deep nesting; meaningful identifiers, no shadowing, the context's casing convention; avoid duplicate logic within a change without inventing broad abstractions for one-off repetition; comment only non-obvious algorithms, workarounds, business rules, edge cases, and deliberate simplifications whose ceiling matters — a coarse lock, an O(n²) scan, a naive heuristic — naming the ceiling and the upgrade path (`TODO:` for real debt; no self-evident comments; never add copyright or license headers unless requested); cohesive, testable modules; efficient data structures where they aid clarity or scale; wrap error-prone I/O, API, network, and resource operations with handling, timeouts/fallbacks, and cleanup; adopt stricter domain standards (e.g. MISRA-style C/C++) when relevant. Once correct, run the repo's formatter (up to 3 attempts); never add one where none exists.
153
155
 
154
156
  **Honest testing.** Verification per Rule 3, from the narrowest scope outward. Never game it: no weakened or deleted assertions, skipped tests, widened tolerances, overfitting to test cases, or mocking away the behavior under test. Keep tests deterministic — control time, randomness, and the network through the repo's existing patterns; never synchronize with sleeps.
155
157
 
@@ -30,6 +30,7 @@ The user ran `/best-practices`. Engineering best practices are now in effect: ap
30
30
  - Never invent APIs. Verify every external symbol — function signatures, config keys, CLI flags, library methods — against the actual source, installed package, or type definitions before using it. If you cannot verify it, look it up; if you still cannot, say so instead of guessing.
31
31
  - Prefer the standard library and dependencies already in the manifest. A new dependency is a design decision: justify it (maintenance, license, size, transitive risk), verify the exact package name exists in the registry (hallucinated names are a typosquatting vector), pin it per repo convention, and modify lockfiles only through the package manager — never by hand.
32
32
  - Apply YAGNI: no speculative abstractions, flags, generality, or extension points the request does not need.
33
+ - Before writing code, walk the reduction ladder and stop at the first rung that holds: (1) does this need to exist at all (YAGNI) — skip it and say so; (2) does the standard library do it; (3) does a native platform or framework feature cover it (a database constraint over app code, a built-in control over a library); (4) does a dependency already in the manifest solve it — never add a new one for what a few lines cover; (5) can it be one line; (6) only then the minimum code that works. When two rungs both hold, take the higher one and move on. The guards in this profile — trust-boundary validation, data-loss handling, security, accessibility — are never traded away for fewer lines.
33
34
  - No placeholders in completed work: no TODO stubs, commented-out blocks, empty handler bodies, or mock data presented as a real integration.
34
35
  - Fail loudly per the codebase's conventions. Never swallow exceptions, downgrade errors to warnings, or return fabricated defaults to make a failure disappear.
35
36
  - Preserve backward compatibility by default. Search the integration surfaces your change touches — public APIs, CLI parameters, configuration loading, persisted state, session and wire formats, database schemas — and if a break is unavoidable, call it out and migrate or gate it.
@@ -0,0 +1,50 @@
1
+ ---
2
+ name: cleanup-audit
3
+ description: Whole-repo audit for over-engineering and accidental complexity. Scans the entire codebase (not just a diff) and returns a ranked, read-only list of what to delete, simplify, or replace with standard-library or platform equivalents. Use when the user asks to "audit the codebase", "find bloat", "what can I delete", or wants a repo-wide simplification pass. For a diff-scoped pass use `pythinker review diff --mode deslopify` instead. One-shot report; applies no fixes.
4
+ ---
5
+
6
+ # Cleanup Audit
7
+
8
+ A read-only, whole-repo pass that hunts accidental complexity and over-engineering. The diff-scoped
9
+ version of this job already ships as `pythinker review diff --mode deslopify`; this skill is its
10
+ repo-wide complement — scan the whole tree, rank the biggest cut first.
11
+
12
+ Scope is complexity only. Correctness bugs, security holes, and performance belong to a normal
13
+ review or security pass — note them in one line if you trip over them, but do not chase them here.
14
+
15
+ ## What to hunt
16
+
17
+ - Dead code, unused flexibility, and speculative features no caller needs.
18
+ - Hand-rolled logic the standard library already ships — name the function that replaces it.
19
+ - A dependency (or hand-written code) doing what the language, runtime, or framework already does.
20
+ - Single-implementation interfaces, one-product factories, wrappers that only delegate, a module
21
+ that exports one trivial thing, dead flags and config nobody sets.
22
+ - The same logic spelled out long-hand where a shorter, equally clear form exists.
23
+
24
+ ## How to work
25
+
26
+ 1. Map before judging: read the tree, the manifest/lockfile, and entry points; use `Grep`/`Glob`
27
+ (or `LSP` for references and call hierarchy) to confirm a thing is actually unused before
28
+ proposing its deletion. A deletion proposed without checking callers is a guess.
29
+ 2. Rank findings biggest cut first.
30
+ 3. Apply nothing. This is a report.
31
+
32
+ ## Output
33
+
34
+ One line per finding, ranked, each tagged and citing a path:
35
+
36
+ - `delete:` — dead code / speculative feature. Replacement: nothing.
37
+ - `stdlib:` — hand-rolled thing the standard library ships. Name the function.
38
+ - `native:` — dependency or code doing what the platform/framework already does. Name the feature.
39
+ - `yagni:` — abstraction with one implementation, config nobody sets, layer with one caller.
40
+ - `shrink:` — same logic, fewer lines. Show the shorter form.
41
+
42
+ Format: `<tag> <what to cut>. <replacement>. [path:line]`
43
+ End with an estimate: `net: ~-<N> lines, -<M> deps possible.` Nothing to cut: `Lean already.`
44
+
45
+ ## Guardrails
46
+
47
+ Never propose cutting trust-boundary validation, error handling that prevents data loss, security
48
+ measures, or accessibility — minimal is not the same as unsafe. When a "simplification" would touch
49
+ one of those, leave it and say why. Verify each deletion candidate is truly unreferenced before
50
+ listing it; an audit that proposes deleting live code is worse than no audit.
@@ -2095,22 +2095,10 @@ class Shell:
2095
2095
  async def _auto_update(self) -> None:
2096
2096
  # Background-refresh the cached latest version (throttled); never blocks startup.
2097
2097
  await refresh_update_cache_if_due()
2098
- # Non-blocking shell notice based on the cached value.
2099
- notice = pending_update_notice()
2100
- if notice:
2101
- # Make version notices easy to see on macOS/Linux terminals too:
2102
- # put them at the front of the toast queue, keep them around long
2103
- # enough to survive startup redraws, and force a repaint if the
2104
- # prompt is already active.
2105
- toast(
2106
- notice,
2107
- topic="update",
2108
- duration=30.0,
2109
- immediate=True,
2110
- style="fg:ansibrightyellow bold",
2111
- )
2112
- if self._prompt_session is not None:
2113
- self._prompt_session.invalidate()
2098
+ # The persistent under-input line renders the cached update hint; refresh
2099
+ # it when the cache changes instead of duplicating the text as a toast.
2100
+ if pending_update_notice():
2101
+ self._refresh_update_notice_line()
2114
2102
 
2115
2103
  async def _silent_auto_update(self) -> None:
2116
2104
  """Install a newer release silently in the background at startup."""
@@ -2147,10 +2135,15 @@ class Shell:
2147
2135
  style="fg:ansiyellow",
2148
2136
  )
2149
2137
  return
2150
- self._update_toast(
2151
- self._installed_update_restart_notice(),
2152
- style="fg:ansibrightyellow bold",
2153
- )
2138
+ # The persistent under-input line (_prepend_update_notice) already renders
2139
+ # the restart message; a toast duplicates it on the footer's second row.
2140
+ self._refresh_update_notice_line()
2141
+
2142
+ def _refresh_update_notice_line(self) -> None:
2143
+ """Drop the update-notice memo and repaint so the footer picks up new text."""
2144
+ self._update_notice_cache = (0.0, None)
2145
+ if self._prompt_session is not None:
2146
+ self._prompt_session.invalidate()
2154
2147
 
2155
2148
  def _installed_update_smoke_check_failed(self) -> bool:
2156
2149
  status = read_update_status()
@@ -2210,8 +2203,8 @@ class Shell:
2210
2203
  if not target:
2211
2204
  return None
2212
2205
  # A release already installed this session needs a restart, not /update —
2213
- # keep this line in agreement with the install toast instead of telling
2214
- # the user to re-run an update that has already landed.
2206
+ # surface that here instead of telling the user to re-run an update that
2207
+ # has already landed.
2215
2208
  status = read_update_status()
2216
2209
  installed = (
2217
2210
  status is not None
@@ -2230,12 +2223,12 @@ class Shell:
2230
2223
  """Pick the startup update behavior and schedule it (non-blocking).
2231
2224
 
2232
2225
  - env kill-switch set → nothing (cache filters already suppress the
2233
- toast, matching today's hard-disable behavior).
2226
+ notice, matching today's hard-disable behavior).
2234
2227
  - enabled → silent background install.
2235
- - config-disabled OR source checkout → informational toast only
2236
- (`_auto_update`); self-suppresses for source checkouts because
2228
+ - config-disabled OR source checkout → refresh the persistent notice
2229
+ only (`_auto_update`); self-suppresses for source checkouts because
2237
2230
  `pending_update_notice()` returns None in that path.
2238
- - non-PythinkerSoul → same toast-only path (no runtime config to
2231
+ - non-PythinkerSoul → same notice-refresh path (no runtime config to
2239
2232
  consult), matching the prior unconditional `_auto_update` behavior.
2240
2233
  """
2241
2234
  if get_env_bool("PYTHINKER_CLI_NO_AUTO_UPDATE"):
@@ -0,0 +1 @@
1
+ import"./chunk-NNHCCRGN-DmZbXBJw.js";import{x as e}from"./mermaid-parser.core-BrCjxUcy.js";export{e as createArchitectureServices};