pythinker-code 0.54.0__tar.gz → 0.56.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 (1054) hide show
  1. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/PKG-INFO +23 -21
  2. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/README.md +22 -20
  3. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/pyproject.toml +1 -1
  4. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/CHANGELOG.md +35 -0
  5. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/background/manager.py +5 -1
  6. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/background/worker.py +6 -1
  7. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/config.py +5 -0
  8. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/llm.py +50 -0
  9. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/soul/compaction.py +11 -7
  10. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/soul/pythinkersoul.py +36 -5
  11. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/soul/toolset.py +10 -0
  12. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/tools/workflow/display.py +3 -3
  13. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/tools/workflow/engine.py +16 -0
  14. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/__init__.py +14 -14
  15. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/prompt.py +20 -0
  16. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/slash.py +1 -0
  17. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/sync_output.py +5 -1
  18. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/update_orchestrator.py +10 -0
  19. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/visualize/_interactive.py +26 -0
  20. pythinker_code-0.56.0/src/pythinker_code/web/static/assets/architecture-7EHR7CIX-BYw92_V4.js +1 -0
  21. pythinker_code-0.54.0/src/pythinker_code/web/static/assets/architectureDiagram-3BPJPVTR-D4n-n7vC.js → pythinker_code-0.56.0/src/pythinker_code/web/static/assets/architectureDiagram-3BPJPVTR-D-oTCQ9W.js +1 -1
  22. pythinker_code-0.54.0/src/pythinker_code/web/static/assets/blockDiagram-GPEHLZMM-TGZkXL6n.js → pythinker_code-0.56.0/src/pythinker_code/web/static/assets/blockDiagram-GPEHLZMM-D34_j76S.js +1 -1
  23. pythinker_code-0.54.0/src/pythinker_code/web/static/assets/bootstrap-BVMAisjM.js → pythinker_code-0.56.0/src/pythinker_code/web/static/assets/bootstrap-CpUR7Koq.js +5 -5
  24. pythinker_code-0.54.0/src/pythinker_code/web/static/assets/c4Diagram-AAUBKEIU-Cz6GwRDk.js → pythinker_code-0.56.0/src/pythinker_code/web/static/assets/c4Diagram-AAUBKEIU-C2mqoh1h.js +1 -1
  25. pythinker_code-0.56.0/src/pythinker_code/web/static/assets/channel-BGX8hmrU.js +1 -0
  26. pythinker_code-0.54.0/src/pythinker_code/web/static/assets/chunk-2J33WTMH-By6YTYJQ.js → pythinker_code-0.56.0/src/pythinker_code/web/static/assets/chunk-2J33WTMH-ShdbwtE-.js +1 -1
  27. pythinker_code-0.54.0/src/pythinker_code/web/static/assets/chunk-3OPIFGDE-Dt82C0bo.js → pythinker_code-0.56.0/src/pythinker_code/web/static/assets/chunk-3OPIFGDE-CJUUK0QK.js +1 -1
  28. pythinker_code-0.54.0/src/pythinker_code/web/static/assets/chunk-5ZQYHXKU-BM56TRb5.js → pythinker_code-0.56.0/src/pythinker_code/web/static/assets/chunk-5ZQYHXKU-xeGaUwvY.js +1 -1
  29. pythinker_code-0.54.0/src/pythinker_code/web/static/assets/chunk-727SXJPM-NDAU6W5T.js → pythinker_code-0.56.0/src/pythinker_code/web/static/assets/chunk-727SXJPM-Cy_RD8yP.js +1 -1
  30. pythinker_code-0.54.0/src/pythinker_code/web/static/assets/chunk-AQP2D5EJ-DUjGJRsU.js → pythinker_code-0.56.0/src/pythinker_code/web/static/assets/chunk-AQP2D5EJ-DMNmGzA_.js +1 -1
  31. pythinker_code-0.54.0/src/pythinker_code/web/static/assets/chunk-CSCIHK7Q-CEiGGFxh.js → pythinker_code-0.56.0/src/pythinker_code/web/static/assets/chunk-CSCIHK7Q-BkY8yJxw.js +1 -1
  32. pythinker_code-0.54.0/src/pythinker_code/web/static/assets/chunk-JAPRZBRM-Dt0AYZb8.js → pythinker_code-0.56.0/src/pythinker_code/web/static/assets/chunk-JAPRZBRM-R_RAdw32.js +4 -4
  33. pythinker_code-0.54.0/src/pythinker_code/web/static/assets/chunk-KSCS5N6A-LCyJwV_C.js → pythinker_code-0.56.0/src/pythinker_code/web/static/assets/chunk-KSCS5N6A-DOUIBKHM.js +1 -1
  34. pythinker_code-0.54.0/src/pythinker_code/web/static/assets/chunk-L5ZTLDWV-CrZNuc63.js → pythinker_code-0.56.0/src/pythinker_code/web/static/assets/chunk-L5ZTLDWV-D_5ebsa9.js +1 -1
  35. pythinker_code-0.54.0/src/pythinker_code/web/static/assets/chunk-LZXEDZCA-ns_8Fkhb.js → pythinker_code-0.56.0/src/pythinker_code/web/static/assets/chunk-LZXEDZCA-CNIP5ZJc.js +2 -2
  36. pythinker_code-0.54.0/src/pythinker_code/web/static/assets/chunk-ND2GUHAM-CdtQSNWw.js → pythinker_code-0.56.0/src/pythinker_code/web/static/assets/chunk-ND2GUHAM-CJ5TG2Ro.js +1 -1
  37. pythinker_code-0.54.0/src/pythinker_code/web/static/assets/chunk-NZK2D7GU-xkk-mxjz.js → pythinker_code-0.56.0/src/pythinker_code/web/static/assets/chunk-NZK2D7GU-COffKE0S.js +1 -1
  38. pythinker_code-0.54.0/src/pythinker_code/web/static/assets/chunk-O5CBEL6O-dLExb6dh.js → pythinker_code-0.56.0/src/pythinker_code/web/static/assets/chunk-O5CBEL6O-C5w7EJCo.js +1 -1
  39. pythinker_code-0.54.0/src/pythinker_code/web/static/assets/chunk-WU5MYG2G-DPtjJoLM.js → pythinker_code-0.56.0/src/pythinker_code/web/static/assets/chunk-WU5MYG2G-DWLWBJUd.js +1 -1
  40. pythinker_code-0.56.0/src/pythinker_code/web/static/assets/classDiagram-4FO5ZUOK-Dw4bWLQm.js +1 -0
  41. pythinker_code-0.56.0/src/pythinker_code/web/static/assets/classDiagram-v2-Q7XG4LA2-Dw4bWLQm.js +1 -0
  42. pythinker_code-0.54.0/src/pythinker_code/web/static/assets/code-block-IT6T5CEO-wXDiSLl-.js → pythinker_code-0.56.0/src/pythinker_code/web/static/assets/code-block-IT6T5CEO-C0JwfXrb.js +1 -1
  43. pythinker_code-0.54.0/src/pythinker_code/web/static/assets/dagre-BM42HDAG-Bn7E1Fj8.js → pythinker_code-0.56.0/src/pythinker_code/web/static/assets/dagre-BM42HDAG-BS7OVne_.js +1 -1
  44. pythinker_code-0.54.0/src/pythinker_code/web/static/assets/diagram-2AECGRRQ-Pa_ehGQL.js → pythinker_code-0.56.0/src/pythinker_code/web/static/assets/diagram-2AECGRRQ-BTg3lFST.js +1 -1
  45. pythinker_code-0.54.0/src/pythinker_code/web/static/assets/diagram-5GNKFQAL-BZZDITpc.js → pythinker_code-0.56.0/src/pythinker_code/web/static/assets/diagram-5GNKFQAL-BUAno9D9.js +1 -1
  46. pythinker_code-0.54.0/src/pythinker_code/web/static/assets/diagram-KO2AKTUF-B6xha9yc.js → pythinker_code-0.56.0/src/pythinker_code/web/static/assets/diagram-KO2AKTUF-CGpQcGTu.js +1 -1
  47. pythinker_code-0.54.0/src/pythinker_code/web/static/assets/diagram-LMA3HP47-BrAZ77AY.js → pythinker_code-0.56.0/src/pythinker_code/web/static/assets/diagram-LMA3HP47-DdfoR8iH.js +1 -1
  48. pythinker_code-0.54.0/src/pythinker_code/web/static/assets/diagram-OG6HWLK6-DK3mwNXR.js → pythinker_code-0.56.0/src/pythinker_code/web/static/assets/diagram-OG6HWLK6-B-2nIGQC.js +1 -1
  49. pythinker_code-0.54.0/src/pythinker_code/web/static/assets/dist-B49waVm5.js → pythinker_code-0.56.0/src/pythinker_code/web/static/assets/dist-v9L6Y4tR.js +1 -1
  50. pythinker_code-0.54.0/src/pythinker_code/web/static/assets/erDiagram-TEJ5UH35-m1kmZg7Q.js → pythinker_code-0.56.0/src/pythinker_code/web/static/assets/erDiagram-TEJ5UH35-Dkn6nBXX.js +1 -1
  51. pythinker_code-0.56.0/src/pythinker_code/web/static/assets/eventmodeling-FCH6USID-solrKU8m.js +1 -0
  52. pythinker_code-0.54.0/src/pythinker_code/web/static/assets/flowDiagram-I6XJVG4X-BpL0RG0_.js → pythinker_code-0.56.0/src/pythinker_code/web/static/assets/flowDiagram-I6XJVG4X-CqC1Lcvt.js +1 -1
  53. pythinker_code-0.54.0/src/pythinker_code/web/static/assets/ganttDiagram-6RSMTGT7-CMXTE2x3.js → pythinker_code-0.56.0/src/pythinker_code/web/static/assets/ganttDiagram-6RSMTGT7-BAoDDdO1.js +1 -1
  54. pythinker_code-0.54.0/src/pythinker_code/web/static/assets/gitGraph-WXDBUCRP-Cdu8YGW9.js → pythinker_code-0.56.0/src/pythinker_code/web/static/assets/gitGraph-WXDBUCRP-B6BXhOMH.js +1 -1
  55. pythinker_code-0.54.0/src/pythinker_code/web/static/assets/gitGraphDiagram-PVQCEYII-nZKsJ24J.js → pythinker_code-0.56.0/src/pythinker_code/web/static/assets/gitGraphDiagram-PVQCEYII-DYk1hKu6.js +1 -1
  56. pythinker_code-0.54.0/src/pythinker_code/web/static/assets/index-efBJITL2.js → pythinker_code-0.56.0/src/pythinker_code/web/static/assets/index-d4P4XfiK.js +2 -2
  57. pythinker_code-0.54.0/src/pythinker_code/web/static/assets/info-J43DQDTF-DLzjcqTz.js → pythinker_code-0.56.0/src/pythinker_code/web/static/assets/info-J43DQDTF-EId6Oz5v.js +1 -1
  58. pythinker_code-0.54.0/src/pythinker_code/web/static/assets/infoDiagram-5YYISTIA-Bpt_SGU1.js → pythinker_code-0.56.0/src/pythinker_code/web/static/assets/infoDiagram-5YYISTIA-CVSEC85r.js +1 -1
  59. pythinker_code-0.54.0/src/pythinker_code/web/static/assets/ishikawaDiagram-YF4QCWOH-BFhgsyA-.js → pythinker_code-0.56.0/src/pythinker_code/web/static/assets/ishikawaDiagram-YF4QCWOH-B8YI7s2L.js +1 -1
  60. pythinker_code-0.54.0/src/pythinker_code/web/static/assets/journeyDiagram-JHISSGLW-CjJVsVGJ.js → pythinker_code-0.56.0/src/pythinker_code/web/static/assets/journeyDiagram-JHISSGLW-BfAOteUW.js +1 -1
  61. pythinker_code-0.54.0/src/pythinker_code/web/static/assets/kanban-definition-UN3LZRKU-CEvaKXNJ.js → pythinker_code-0.56.0/src/pythinker_code/web/static/assets/kanban-definition-UN3LZRKU-DC0NPat0.js +1 -1
  62. pythinker_code-0.54.0/src/pythinker_code/web/static/assets/line-B8Jzd_QW.js → pythinker_code-0.56.0/src/pythinker_code/web/static/assets/line-RPziCRsV.js +1 -1
  63. pythinker_code-0.56.0/src/pythinker_code/web/static/assets/mermaid-VLURNSYL-DEMWXrjn.js +1 -0
  64. pythinker_code-0.54.0/src/pythinker_code/web/static/assets/mermaid-parser.core-C0ZLlUC_.js → pythinker_code-0.56.0/src/pythinker_code/web/static/assets/mermaid-parser.core-DJ-lswOc.js +2 -2
  65. pythinker_code-0.54.0/src/pythinker_code/web/static/assets/mermaid.core-C5dpWzov.js → pythinker_code-0.56.0/src/pythinker_code/web/static/assets/mermaid.core-BlZ1iz7p.js +3 -3
  66. pythinker_code-0.54.0/src/pythinker_code/web/static/assets/mindmap-definition-RKZ34NQL-BjPKmY-1.js → pythinker_code-0.56.0/src/pythinker_code/web/static/assets/mindmap-definition-RKZ34NQL-BmNncIUr.js +1 -1
  67. pythinker_code-0.54.0/src/pythinker_code/web/static/assets/packet-YPE3B663-DHMbkG_h.js → pythinker_code-0.56.0/src/pythinker_code/web/static/assets/packet-YPE3B663-DNxSBx_x.js +1 -1
  68. pythinker_code-0.54.0/src/pythinker_code/web/static/assets/pie-LRSECV5Y-BACrylWV.js → pythinker_code-0.56.0/src/pythinker_code/web/static/assets/pie-LRSECV5Y-4baAFGGq.js +1 -1
  69. pythinker_code-0.54.0/src/pythinker_code/web/static/assets/pieDiagram-4H26LBE5-C1vYiZPX.js → pythinker_code-0.56.0/src/pythinker_code/web/static/assets/pieDiagram-4H26LBE5-D7VDURr8.js +1 -1
  70. pythinker_code-0.54.0/src/pythinker_code/web/static/assets/quadrantDiagram-W4KKPZXB-DBPpIDOq.js → pythinker_code-0.56.0/src/pythinker_code/web/static/assets/quadrantDiagram-W4KKPZXB-5BNRSed4.js +1 -1
  71. pythinker_code-0.54.0/src/pythinker_code/web/static/assets/radar-GUYGQ44K-BEDtE020.js → pythinker_code-0.56.0/src/pythinker_code/web/static/assets/radar-GUYGQ44K-CJUK9U42.js +1 -1
  72. pythinker_code-0.54.0/src/pythinker_code/web/static/assets/requirementDiagram-4Y6WPE33-3Df-ZzVG.js → pythinker_code-0.56.0/src/pythinker_code/web/static/assets/requirementDiagram-4Y6WPE33-WrVH562b.js +1 -1
  73. pythinker_code-0.54.0/src/pythinker_code/web/static/assets/sankeyDiagram-5OEKKPKP-gMxap75A.js → pythinker_code-0.56.0/src/pythinker_code/web/static/assets/sankeyDiagram-5OEKKPKP-bq7l110w.js +1 -1
  74. pythinker_code-0.54.0/src/pythinker_code/web/static/assets/sequenceDiagram-3UESZ5HK-Bs4dfOLc.js → pythinker_code-0.56.0/src/pythinker_code/web/static/assets/sequenceDiagram-3UESZ5HK-D7Co-TdH.js +1 -1
  75. pythinker_code-0.54.0/src/pythinker_code/web/static/assets/stateDiagram-AJRCARHV-CJ2-32qW.js → pythinker_code-0.56.0/src/pythinker_code/web/static/assets/stateDiagram-AJRCARHV-BxWHnHG4.js +1 -1
  76. pythinker_code-0.56.0/src/pythinker_code/web/static/assets/stateDiagram-v2-BHNVJYJU-D6odN83X.js +1 -0
  77. pythinker_code-0.54.0/src/pythinker_code/web/static/assets/timeline-definition-PNZ67QCA-DGgll1Sz.js → pythinker_code-0.56.0/src/pythinker_code/web/static/assets/timeline-definition-PNZ67QCA-BPV0Bq-Q.js +1 -1
  78. pythinker_code-0.54.0/src/pythinker_code/web/static/assets/treeView-BLDUP644-_R2c4L7Y.js → pythinker_code-0.56.0/src/pythinker_code/web/static/assets/treeView-BLDUP644-D2A9BwMa.js +1 -1
  79. pythinker_code-0.54.0/src/pythinker_code/web/static/assets/treemap-LRROVOQU-BCHMzPCX.js → pythinker_code-0.56.0/src/pythinker_code/web/static/assets/treemap-LRROVOQU-CKI0YtvA.js +1 -1
  80. pythinker_code-0.54.0/src/pythinker_code/web/static/assets/vennDiagram-CIIHVFJN-Df0GpLqz.js → pythinker_code-0.56.0/src/pythinker_code/web/static/assets/vennDiagram-CIIHVFJN-BxR_Flz7.js +1 -1
  81. pythinker_code-0.54.0/src/pythinker_code/web/static/assets/wardley-L42UT6IY-DUzjEqyI.js → pythinker_code-0.56.0/src/pythinker_code/web/static/assets/wardley-L42UT6IY-DoJhfL99.js +1 -1
  82. pythinker_code-0.54.0/src/pythinker_code/web/static/assets/wardleyDiagram-YWT4CUSO-GTEhdIku.js → pythinker_code-0.56.0/src/pythinker_code/web/static/assets/wardleyDiagram-YWT4CUSO-C2cPq0nQ.js +1 -1
  83. pythinker_code-0.54.0/src/pythinker_code/web/static/assets/xychartDiagram-2RQKCTM6-DIfs3qcH.js → pythinker_code-0.56.0/src/pythinker_code/web/static/assets/xychartDiagram-2RQKCTM6-DbBm2yQI.js +1 -1
  84. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/index.html +1 -1
  85. pythinker_code-0.54.0/src/pythinker_code/web/static/assets/architecture-7EHR7CIX-YNeFThJ3.js +0 -1
  86. pythinker_code-0.54.0/src/pythinker_code/web/static/assets/channel-HNA7CUS2.js +0 -1
  87. pythinker_code-0.54.0/src/pythinker_code/web/static/assets/classDiagram-4FO5ZUOK-BD4rO6AF.js +0 -1
  88. pythinker_code-0.54.0/src/pythinker_code/web/static/assets/classDiagram-v2-Q7XG4LA2-BD4rO6AF.js +0 -1
  89. pythinker_code-0.54.0/src/pythinker_code/web/static/assets/eventmodeling-FCH6USID-Dev81jRN.js +0 -1
  90. pythinker_code-0.54.0/src/pythinker_code/web/static/assets/mermaid-VLURNSYL-i_Ih6fkd.js +0 -1
  91. pythinker_code-0.54.0/src/pythinker_code/web/static/assets/stateDiagram-v2-BHNVJYJU-BLgmR0t0.js +0 -1
  92. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/LICENSE +0 -0
  93. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/NOTICE +0 -0
  94. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/__init__.py +0 -0
  95. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/__main__.py +0 -0
  96. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/acp/AGENTS.md +0 -0
  97. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/acp/__init__.py +0 -0
  98. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/acp/convert.py +0 -0
  99. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/acp/host.py +0 -0
  100. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/acp/mcp.py +0 -0
  101. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/acp/server.py +0 -0
  102. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/acp/session.py +0 -0
  103. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/acp/tools.py +0 -0
  104. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/acp/types.py +0 -0
  105. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/acp/version.py +0 -0
  106. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/agents/default/agent.yaml +0 -0
  107. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/agents/default/ask.yaml +0 -0
  108. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/agents/default/code_reviewer.yaml +0 -0
  109. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/agents/default/coder.yaml +0 -0
  110. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/agents/default/debug.yaml +0 -0
  111. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/agents/default/debugger.yaml +0 -0
  112. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/agents/default/explore.yaml +0 -0
  113. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/agents/default/implementer.yaml +0 -0
  114. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/agents/default/judge.yaml +0 -0
  115. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/agents/default/plan.yaml +0 -0
  116. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/agents/default/planner.yaml +0 -0
  117. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/agents/default/review.yaml +0 -0
  118. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/agents/default/scout.yaml +0 -0
  119. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/agents/default/security_reviewer.yaml +0 -0
  120. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/agents/default/system.md +0 -0
  121. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/agents/default/verifier.yaml +0 -0
  122. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/agents/okabe/agent.yaml +0 -0
  123. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/agentspec.py +0 -0
  124. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/app.py +0 -0
  125. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/approval_runtime/__init__.py +0 -0
  126. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/approval_runtime/models.py +0 -0
  127. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/approval_runtime/runtime.py +0 -0
  128. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/auth/__init__.py +0 -0
  129. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/auth/alibaba.py +0 -0
  130. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/auth/anthropic_direct.py +0 -0
  131. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/auth/browser_login_page.py +0 -0
  132. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/auth/deepseek.py +0 -0
  133. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/auth/github_feedback.py +0 -0
  134. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/auth/kimi.py +0 -0
  135. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/auth/lm_studio.py +0 -0
  136. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/auth/minimax.py +0 -0
  137. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/auth/moonshot.py +0 -0
  138. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/auth/oauth.py +0 -0
  139. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/auth/ollama.py +0 -0
  140. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/auth/openai/__init__.py +0 -0
  141. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/auth/openai/_shared.py +0 -0
  142. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/auth/openai/browser_flow.py +0 -0
  143. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/auth/openai/catalog.py +0 -0
  144. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/auth/openai/config_apply.py +0 -0
  145. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/auth/openai/constants.py +0 -0
  146. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/auth/openai/login.py +0 -0
  147. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/auth/openai/models.py +0 -0
  148. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/auth/openai/oauth_client.py +0 -0
  149. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/auth/opencode_go.py +0 -0
  150. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/auth/openrouter.py +0 -0
  151. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/auth/platforms.py +0 -0
  152. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/auth/z_ai.py +0 -0
  153. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/background/__init__.py +0 -0
  154. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/background/agent_runner.py +0 -0
  155. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/background/ids.py +0 -0
  156. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/background/models.py +0 -0
  157. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/background/store.py +0 -0
  158. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/background/summary.py +0 -0
  159. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/cli/__init__.py +0 -0
  160. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/cli/__main__.py +0 -0
  161. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/cli/_lazy_group.py +0 -0
  162. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/cli/dashboard.py +0 -0
  163. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/cli/debug.py +0 -0
  164. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/cli/export.py +0 -0
  165. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/cli/info.py +0 -0
  166. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/cli/mcp.py +0 -0
  167. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/cli/plugin.py +0 -0
  168. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/cli/review.py +0 -0
  169. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/cli/secscan.py +0 -0
  170. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/cli/security_scan.py +0 -0
  171. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/cli/skill.py +0 -0
  172. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/cli/system_prompt.py +0 -0
  173. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/cli/toad.py +0 -0
  174. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/cli/update.py +0 -0
  175. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/cli/web.py +0 -0
  176. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/constant.py +0 -0
  177. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/dashboard/__init__.py +0 -0
  178. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/dashboard/api/__init__.py +0 -0
  179. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/dashboard/api/sessions.py +0 -0
  180. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/dashboard/api/statistics.py +0 -0
  181. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/dashboard/api/system.py +0 -0
  182. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/dashboard/app.py +0 -0
  183. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/dashboard/static/assets/highlighted-body-OFNGDK62-BxVUIXn9.js +0 -0
  184. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/dashboard/static/assets/index-DAN_VzOP.css +0 -0
  185. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/dashboard/static/assets/index-DYyxzHPY.js +0 -0
  186. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/dashboard/static/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
  187. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/dashboard/static/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
  188. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/dashboard/static/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
  189. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/dashboard/static/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
  190. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/dashboard/static/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
  191. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/dashboard/static/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
  192. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/dashboard/static/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
  193. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/dashboard/static/assets/mermaid-GHXKKRXX-BR6KjYwB.js +0 -0
  194. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/dashboard/static/index.html +0 -0
  195. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/events.py +0 -0
  196. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/exception.py +0 -0
  197. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/execution_profiles.py +0 -0
  198. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/extensions.py +0 -0
  199. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/feedback.py +0 -0
  200. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/feedback_repo.py +0 -0
  201. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/file_restore.py +0 -0
  202. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/hooks/__init__.py +0 -0
  203. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/hooks/config.py +0 -0
  204. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/hooks/engine.py +0 -0
  205. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/hooks/events.py +0 -0
  206. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/hooks/runner.py +0 -0
  207. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/lsp/__init__.py +0 -0
  208. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/lsp/client.py +0 -0
  209. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/lsp/diagnostics.py +0 -0
  210. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/lsp/framing.py +0 -0
  211. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/lsp/instance.py +0 -0
  212. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/lsp/manager.py +0 -0
  213. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/lsp/plugin_servers.py +0 -0
  214. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/lsp/protocol.py +0 -0
  215. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/lsp/recommend.py +0 -0
  216. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/lsp/service.py +0 -0
  217. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/memory/__init__.py +0 -0
  218. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/memory/consolidation.py +0 -0
  219. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/memory/harvest.py +0 -0
  220. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/memory/recall.py +0 -0
  221. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/memory/recap.py +0 -0
  222. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/memory/retriever.py +0 -0
  223. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/memory/sanitize.py +0 -0
  224. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/metadata.py +0 -0
  225. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/models_dev.py +0 -0
  226. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/native.py +0 -0
  227. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/notifications/__init__.py +0 -0
  228. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/notifications/llm.py +0 -0
  229. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/notifications/manager.py +0 -0
  230. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/notifications/models.py +0 -0
  231. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/notifications/notifier.py +0 -0
  232. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/notifications/store.py +0 -0
  233. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/notifications/wire.py +0 -0
  234. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/plugin/__init__.py +0 -0
  235. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/plugin/artifacts.py +0 -0
  236. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/plugin/dependency.py +0 -0
  237. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/plugin/directories.py +0 -0
  238. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/plugin/install.py +0 -0
  239. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/plugin/installed.py +0 -0
  240. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/plugin/integration.py +0 -0
  241. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/plugin/loader.py +0 -0
  242. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/plugin/manager.py +0 -0
  243. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/plugin/manifest.py +0 -0
  244. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/plugin/marketplace.py +0 -0
  245. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/plugin/options.py +0 -0
  246. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/plugin/policy.py +0 -0
  247. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/plugin/tool.py +0 -0
  248. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/project_memory.py +0 -0
  249. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/project_trust.py +0 -0
  250. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/prompt_templates.py +0 -0
  251. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/prompts/__init__.py +0 -0
  252. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/prompts/best_practices.md +0 -0
  253. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/prompts/compact.md +0 -0
  254. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/prompts/goal_continuation.md +0 -0
  255. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/prompts/goal_set.md +0 -0
  256. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/prompts/goal_wrap_up.md +0 -0
  257. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/prompts/init.md +0 -0
  258. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/prompts/learn.md +0 -0
  259. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/py.typed +0 -0
  260. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/scratchpad.py +0 -0
  261. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/session.py +0 -0
  262. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/session_cleanup.py +0 -0
  263. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/session_fork.py +0 -0
  264. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/session_recap.py +0 -0
  265. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/session_state.py +0 -0
  266. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/share.py +0 -0
  267. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/skill/__init__.py +0 -0
  268. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/skill/flow/__init__.py +0 -0
  269. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/skill/flow/d2.py +0 -0
  270. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/skill/flow/mermaid.py +0 -0
  271. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/skill/lockfile.py +0 -0
  272. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/skills/agent-creator/SKILL.md +0 -0
  273. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/skills/check-impl-against-spec/SKILL.md +0 -0
  274. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/skills/cleanup-audit/SKILL.md +0 -0
  275. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/skills/create-pr/SKILL.md +0 -0
  276. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/skills/customize-pythinker/SKILL.md +0 -0
  277. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/skills/designer-skill/SKILL.md +0 -0
  278. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/skills/diagnose-ci-failures/SKILL.md +0 -0
  279. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/skills/fix-errors/SKILL.md +0 -0
  280. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/skills/implement-specs/SKILL.md +0 -0
  281. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/skills/judge-minimum-diff/SKILL.md +0 -0
  282. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/skills/judge-overengineering-review/SKILL.md +0 -0
  283. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/skills/pr-walkthrough/SKILL.md +0 -0
  284. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/skills/pythinker-code-help/SKILL.md +0 -0
  285. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/skills/reproduce-bug-report/SKILL.md +0 -0
  286. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/skills/resolve-merge-conflicts/SKILL.md +0 -0
  287. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/skills/review-pr/SKILL.md +0 -0
  288. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/skills/skill-creator/SKILL.md +0 -0
  289. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/skills/spec-driven-implementation/SKILL.md +0 -0
  290. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/skills/write-product-spec/SKILL.md +0 -0
  291. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/skills/write-tech-spec/SKILL.md +0 -0
  292. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/soul/__init__.py +0 -0
  293. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/soul/agent.py +0 -0
  294. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/soul/api_errors.py +0 -0
  295. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/soul/approval.py +0 -0
  296. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/soul/btw.py +0 -0
  297. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/soul/compaction_restore.py +0 -0
  298. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/soul/context.py +0 -0
  299. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/soul/deliberation.py +0 -0
  300. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/soul/denwarenji.py +0 -0
  301. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/soul/dynamic_injection.py +0 -0
  302. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/soul/dynamic_injections/__init__.py +0 -0
  303. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/soul/dynamic_injections/agent_list.py +0 -0
  304. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/soul/dynamic_injections/auto_mode.py +0 -0
  305. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/soul/dynamic_injections/git_status.py +0 -0
  306. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/soul/dynamic_injections/goal_mode.py +0 -0
  307. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/soul/dynamic_injections/inline_commands.py +0 -0
  308. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/soul/dynamic_injections/lsp_diagnostics.py +0 -0
  309. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/soul/dynamic_injections/model_defense.py +0 -0
  310. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/soul/dynamic_injections/orchestration.py +0 -0
  311. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/soul/dynamic_injections/permissions_state.py +0 -0
  312. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/soul/dynamic_injections/plan_mode.py +0 -0
  313. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/soul/flow_runner.py +0 -0
  314. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/soul/live_tokens.py +0 -0
  315. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/soul/message.py +0 -0
  316. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/soul/permission.py +0 -0
  317. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/soul/slash.py +0 -0
  318. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/subagents/__init__.py +0 -0
  319. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/subagents/builder.py +0 -0
  320. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/subagents/codenames.py +0 -0
  321. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/subagents/core.py +0 -0
  322. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/subagents/discovery.py +0 -0
  323. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/subagents/git_context.py +0 -0
  324. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/subagents/models.py +0 -0
  325. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/subagents/output.py +0 -0
  326. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/subagents/registry.py +0 -0
  327. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/subagents/runner.py +0 -0
  328. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/subagents/store.py +0 -0
  329. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/subagents/usage.py +0 -0
  330. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/subagents/worktree.py +0 -0
  331. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/telemetry/__init__.py +0 -0
  332. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/telemetry/config.py +0 -0
  333. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/telemetry/crash.py +0 -0
  334. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/telemetry/errors.py +0 -0
  335. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/telemetry/metrics.py +0 -0
  336. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/telemetry/names.py +0 -0
  337. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/telemetry/otel.py +0 -0
  338. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/telemetry/sentry.py +0 -0
  339. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/telemetry/sink.py +0 -0
  340. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/thinking.py +0 -0
  341. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/tools/AGENTS.md +0 -0
  342. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/tools/__init__.py +0 -0
  343. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/tools/agent/__init__.py +0 -0
  344. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/tools/agent/description.md +0 -0
  345. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/tools/ask_user/__init__.py +0 -0
  346. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/tools/ask_user/description.md +0 -0
  347. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/tools/background/__init__.py +0 -0
  348. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/tools/background/handoff.md +0 -0
  349. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/tools/background/input.md +0 -0
  350. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/tools/background/list.md +0 -0
  351. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/tools/background/output.md +0 -0
  352. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/tools/background/stop.md +0 -0
  353. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/tools/display.py +0 -0
  354. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/tools/dmail/__init__.py +0 -0
  355. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/tools/dmail/dmail.md +0 -0
  356. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/tools/file/__init__.py +0 -0
  357. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/tools/file/glob.md +0 -0
  358. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/tools/file/glob.py +0 -0
  359. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/tools/file/grep.md +0 -0
  360. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/tools/file/grep_local.py +0 -0
  361. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/tools/file/plan_mode.py +0 -0
  362. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/tools/file/read.md +0 -0
  363. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/tools/file/read.py +0 -0
  364. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/tools/file/read_media.md +0 -0
  365. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/tools/file/read_media.py +0 -0
  366. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/tools/file/replace.md +0 -0
  367. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/tools/file/replace.py +0 -0
  368. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/tools/file/utils.py +0 -0
  369. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/tools/file/write.md +0 -0
  370. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/tools/file/write.py +0 -0
  371. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/tools/goal/__init__.py +0 -0
  372. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/tools/goal/update_goal.md +0 -0
  373. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/tools/lsp/__init__.py +0 -0
  374. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/tools/lsp/formatters.py +0 -0
  375. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/tools/lsp/schemas.py +0 -0
  376. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/tools/lsp/symbol_context.py +0 -0
  377. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/tools/lsp/tool.md +0 -0
  378. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/tools/lsp/tool.py +0 -0
  379. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/tools/mcp_resource/__init__.py +0 -0
  380. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/tools/mcp_resource/list_description.md +0 -0
  381. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/tools/mcp_resource/prompt_description.md +0 -0
  382. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/tools/mcp_resource/read_description.md +0 -0
  383. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/tools/memory/__init__.py +0 -0
  384. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/tools/memory/memory.md +0 -0
  385. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/tools/memory/routing_guard.py +0 -0
  386. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/tools/plan/__init__.py +0 -0
  387. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/tools/plan/description.md +0 -0
  388. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/tools/plan/enter.py +0 -0
  389. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/tools/plan/enter_description.md +0 -0
  390. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/tools/plan/handoff.py +0 -0
  391. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/tools/plan/heroes.py +0 -0
  392. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/tools/progress/__init__.py +0 -0
  393. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/tools/progress/description.md +0 -0
  394. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/tools/recall/__init__.py +0 -0
  395. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/tools/recall/description.md +0 -0
  396. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/tools/scratchpad/__init__.py +0 -0
  397. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/tools/scratchpad/scratchpad_tool.md +0 -0
  398. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/tools/shell/__init__.py +0 -0
  399. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/tools/shell/bash.md +0 -0
  400. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/tools/shell/powershell.md +0 -0
  401. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/tools/skill/__init__.py +0 -0
  402. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/tools/skill/_mcp_bridge.py +0 -0
  403. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/tools/skill/description.md +0 -0
  404. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/tools/suggest/__init__.py +0 -0
  405. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/tools/suggest/description.md +0 -0
  406. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/tools/test.py +0 -0
  407. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/tools/think/__init__.py +0 -0
  408. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/tools/think/think.md +0 -0
  409. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/tools/todo/__init__.py +0 -0
  410. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/tools/todo/set_todo_list.md +0 -0
  411. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/tools/tool_search/__init__.py +0 -0
  412. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/tools/tool_search/tool_search.md +0 -0
  413. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/tools/utils.py +0 -0
  414. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/tools/web/__init__.py +0 -0
  415. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/tools/web/_allowlist.py +0 -0
  416. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/tools/web/fetch.md +0 -0
  417. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/tools/web/fetch.py +0 -0
  418. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/tools/web/search.md +0 -0
  419. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/tools/web/search.py +0 -0
  420. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/tools/workflow/__init__.py +0 -0
  421. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/tools/workflow/description.md +0 -0
  422. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/tools/worktree/__init__.py +0 -0
  423. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/tools/worktree/enter_worktree.md +0 -0
  424. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/tools/worktree/exit_worktree.md +0 -0
  425. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/__init__.py +0 -0
  426. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/acp/__init__.py +0 -0
  427. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/color_utils.py +0 -0
  428. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/print/__init__.py +0 -0
  429. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/print/visualize.py +0 -0
  430. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/components/__init__.py +0 -0
  431. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/components/base.py +0 -0
  432. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/components/bash_execution.py +0 -0
  433. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/components/bordered_loader.py +0 -0
  434. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/components/diff.py +0 -0
  435. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/components/dynamic_border.py +0 -0
  436. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/components/footer.py +0 -0
  437. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/components/key_hints.py +0 -0
  438. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/components/markdown.py +0 -0
  439. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/components/messages.py +0 -0
  440. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/components/panel.py +0 -0
  441. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/components/render_utils.py +0 -0
  442. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/components/report.py +0 -0
  443. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/components/report_prose_blocks.py +0 -0
  444. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/components/report_update.py +0 -0
  445. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/components/settings_list.py +0 -0
  446. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/components/special_messages.py +0 -0
  447. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/components/tool_execution.py +0 -0
  448. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/console.py +0 -0
  449. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/debug.py +0 -0
  450. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/design_system.py +0 -0
  451. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/echo.py +0 -0
  452. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/export_import.py +0 -0
  453. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/glyphs.py +0 -0
  454. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/keyboard.py +0 -0
  455. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/keymap.py +0 -0
  456. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/markdown/__init__.py +0 -0
  457. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/markdown/audit.py +0 -0
  458. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/markdown/elements.py +0 -0
  459. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/markdown/fences.py +0 -0
  460. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/markdown/normalizers.py +0 -0
  461. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/markdown/renderer.py +0 -0
  462. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/markdown/streaming.py +0 -0
  463. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/mcp_status.py +0 -0
  464. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/model_picker.py +0 -0
  465. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/motion.py +0 -0
  466. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/oauth.py +0 -0
  467. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/placeholders.py +0 -0
  468. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/render_constants.py +0 -0
  469. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/replay.py +0 -0
  470. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/selector.py +0 -0
  471. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/selectors/__init__.py +0 -0
  472. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/selectors/code_theme.py +0 -0
  473. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/selectors/extension.py +0 -0
  474. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/selectors/oauth.py +0 -0
  475. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/selectors/settings.py +0 -0
  476. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/selectors/show_images.py +0 -0
  477. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/selectors/theme.py +0 -0
  478. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/selectors/thinking.py +0 -0
  479. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/session_picker.py +0 -0
  480. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/setup.py +0 -0
  481. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/spacing.py +0 -0
  482. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/spinner_words.py +0 -0
  483. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/startup.py +0 -0
  484. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/stats.py +0 -0
  485. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/stats_collector.py +0 -0
  486. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/stats_pricing.py +0 -0
  487. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/statusline.py +0 -0
  488. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/task_browser.py +0 -0
  489. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/tips.py +0 -0
  490. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/tool_renderers/__init__.py +0 -0
  491. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/tool_renderers/_file_diff.py +0 -0
  492. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/tool_renderers/_render_utils.py +0 -0
  493. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/tool_renderers/agent.py +0 -0
  494. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/tool_renderers/ask_user.py +0 -0
  495. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/tool_renderers/background.py +0 -0
  496. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/tool_renderers/bash.py +0 -0
  497. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/tool_renderers/edit.py +0 -0
  498. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/tool_renderers/find.py +0 -0
  499. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/tool_renderers/generic.py +0 -0
  500. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/tool_renderers/grep.py +0 -0
  501. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/tool_renderers/implement_judge.py +0 -0
  502. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/tool_renderers/lsp.py +0 -0
  503. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/tool_renderers/mcp_resource.py +0 -0
  504. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/tool_renderers/memory.py +0 -0
  505. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/tool_renderers/plan.py +0 -0
  506. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/tool_renderers/read.py +0 -0
  507. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/tool_renderers/read_media.py +0 -0
  508. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/tool_renderers/skill.py +0 -0
  509. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/tool_renderers/smart_search.py +0 -0
  510. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/tool_renderers/think.py +0 -0
  511. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/tool_renderers/todo.py +0 -0
  512. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/tool_renderers/tool_search.py +0 -0
  513. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/tool_renderers/web.py +0 -0
  514. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/tool_renderers/worktree.py +0 -0
  515. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/tool_renderers/write.py +0 -0
  516. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/update.py +0 -0
  517. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/usage.py +0 -0
  518. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/usage_activity.py +0 -0
  519. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/usage_adapters/__init__.py +0 -0
  520. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/usage_adapters/alibaba.py +0 -0
  521. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/usage_adapters/anthropic_admin.py +0 -0
  522. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/usage_adapters/base.py +0 -0
  523. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/usage_adapters/deepseek.py +0 -0
  524. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/usage_adapters/minimax.py +0 -0
  525. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/usage_adapters/openai_admin.py +0 -0
  526. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/usage_adapters/openai_chatgpt.py +0 -0
  527. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/usage_adapters/opencode_go.py +0 -0
  528. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/usage_adapters/openrouter.py +0 -0
  529. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/usage_adapters/pythinker.py +0 -0
  530. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/usage_adapters/pythinker_ai.py +0 -0
  531. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/usage_render.py +0 -0
  532. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/visualize/__init__.py +0 -0
  533. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/visualize/_activity_tree.py +0 -0
  534. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/visualize/_approval_panel.py +0 -0
  535. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/visualize/_blocks.py +0 -0
  536. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/visualize/_btw_panel.py +0 -0
  537. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/visualize/_dialog_shell.py +0 -0
  538. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/visualize/_diff_live.py +0 -0
  539. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/visualize/_input_router.py +0 -0
  540. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/visualize/_live_view.py +0 -0
  541. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/visualize/_question_panel.py +0 -0
  542. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/visualize/_transcript.py +0 -0
  543. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/shell/visualize/_worklog.py +0 -0
  544. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/terminal_background.py +0 -0
  545. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/terminal_capabilities.py +0 -0
  546. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/theme/__init__.py +0 -0
  547. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/theme/adapters/__init__.py +0 -0
  548. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/theme/adapters/markdown.py +0 -0
  549. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/theme/adapters/task_browser.py +0 -0
  550. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/theme/capabilities.py +0 -0
  551. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/theme/palettes.py +0 -0
  552. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/theme/pythinker_themes.py +0 -0
  553. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/theme/registry.py +0 -0
  554. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/theme/resolver.py +0 -0
  555. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/theme/spec.py +0 -0
  556. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/ui/tui_config.py +0 -0
  557. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/update_policy.py +0 -0
  558. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/usage_ratelimit_cache.py +0 -0
  559. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/utils/__init__.py +0 -0
  560. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/utils/aiohttp.py +0 -0
  561. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/utils/aioqueue.py +0 -0
  562. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/utils/artifacts.py +0 -0
  563. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/utils/broadcast.py +0 -0
  564. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/utils/changelog.py +0 -0
  565. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/utils/clipboard.py +0 -0
  566. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/utils/datetime.py +0 -0
  567. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/utils/diff.py +0 -0
  568. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/utils/editor.py +0 -0
  569. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/utils/environment.py +0 -0
  570. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/utils/envvar.py +0 -0
  571. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/utils/export.py +0 -0
  572. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/utils/file_filter.py +0 -0
  573. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/utils/file_read_cache.py +0 -0
  574. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/utils/frontmatter.py +0 -0
  575. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/utils/gitignore.py +0 -0
  576. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/utils/io.py +0 -0
  577. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/utils/logging.py +0 -0
  578. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/utils/mcp_names.py +0 -0
  579. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/utils/media_limits.py +0 -0
  580. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/utils/media_tags.py +0 -0
  581. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/utils/message.py +0 -0
  582. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/utils/path.py +0 -0
  583. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/utils/proctitle.py +0 -0
  584. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/utils/proxy.py +0 -0
  585. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/utils/pyinstaller.py +0 -0
  586. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/utils/rich/__init__.py +0 -0
  587. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/utils/rich/columns.py +0 -0
  588. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/utils/rich/diff_render.py +0 -0
  589. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/utils/rich/markdown.py +0 -0
  590. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/utils/rich/markdown_sample.md +0 -0
  591. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/utils/rich/markdown_sample_short.md +0 -0
  592. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/utils/rich/syntax.py +0 -0
  593. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/utils/sensitive.py +0 -0
  594. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/utils/server.py +0 -0
  595. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/utils/signals.py +0 -0
  596. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/utils/slashcmd.py +0 -0
  597. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/utils/sleep_inhibitor.py +0 -0
  598. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/utils/string.py +0 -0
  599. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/utils/subprocess_env.py +0 -0
  600. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/utils/term.py +0 -0
  601. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/utils/trust.py +0 -0
  602. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/utils/typing.py +0 -0
  603. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/__init__.py +0 -0
  604. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/api/__init__.py +0 -0
  605. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/api/config.py +0 -0
  606. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/api/open_in.py +0 -0
  607. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/api/sessions.py +0 -0
  608. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/app.py +0 -0
  609. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/auth.py +0 -0
  610. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/models.py +0 -0
  611. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/runner/__init__.py +0 -0
  612. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/runner/messages.py +0 -0
  613. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/runner/process.py +0 -0
  614. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/runner/worker.py +0 -0
  615. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/_headers +0 -0
  616. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  617. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  618. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  619. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  620. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  621. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  622. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  623. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  624. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  625. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  626. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  627. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  628. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  629. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  630. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  631. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  632. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  633. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  634. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  635. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  636. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  637. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  638. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  639. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  640. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  641. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  642. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  643. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  644. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  645. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  646. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  647. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  648. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  649. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  650. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  651. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  652. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  653. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  654. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  655. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  656. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  657. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  658. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  659. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  660. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  661. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  662. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  663. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  664. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  665. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  666. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  667. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  668. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  669. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  670. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  671. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  672. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  673. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  674. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  675. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/abap-CLvhMVsD.js +0 -0
  676. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/actionscript-3--17pq3dv.js +0 -0
  677. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/ada-C5qYipkI.js +0 -0
  678. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/andromeeda-vGVdxbeo.js +0 -0
  679. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/angular-html-BKhkKBsm.js +0 -0
  680. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/angular-ts-CYPbMJCA.js +0 -0
  681. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/apache-U0d_L8uA.js +0 -0
  682. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/apex-CGTLDQj6.js +0 -0
  683. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/apl-D7bENxmy.js +0 -0
  684. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/applescript-CCn79oCD.js +0 -0
  685. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/ara-4CJ0cIlV.js +0 -0
  686. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/arc-8BWbC-0s.js +0 -0
  687. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/array-BifhSqXX.js +0 -0
  688. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/asciidoc-DE70LPWp.js +0 -0
  689. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/asm-Cmm7eHzH.js +0 -0
  690. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/astro-B1l9MDUT.js +0 -0
  691. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/aurora-x-CDeNXAV0.js +0 -0
  692. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/awk-BWXHIvNe.js +0 -0
  693. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/ayu-dark-DluEY0Gj.js +0 -0
  694. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/ayu-light-C3h-C4tm.js +0 -0
  695. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/ayu-mirage-Bqwy1Gya.js +0 -0
  696. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/ballerina-B7ZEbQpA.js +0 -0
  697. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/bat-Bo4NYOV-.js +0 -0
  698. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/beancount-D-usSTwE.js +0 -0
  699. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/berry-DKpUyyne.js +0 -0
  700. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/bibtex-Ci_nEsc7.js +0 -0
  701. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/bicep-CUHmPFLl.js +0 -0
  702. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/bird2-C2hNVINV.js +0 -0
  703. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/blade-BlkqRXu6.js +0 -0
  704. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/bootstrap-BhLLvBaE.css +0 -0
  705. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/bsl-BkkzgIyY.js +0 -0
  706. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/c-PpPxyn8g.js +0 -0
  707. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/c3-CnJL0r0V.js +0 -0
  708. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/cadence-CQ2zXKGN.js +0 -0
  709. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/cairo-DLTphjLi.js +0 -0
  710. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/catppuccin-frappe-3VR1Za6u.js +0 -0
  711. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/catppuccin-latte-DwIHMF0Q.js +0 -0
  712. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/catppuccin-macchiato-DYnBP6_5.js +0 -0
  713. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/catppuccin-mocha-DYhrFGRu.js +0 -0
  714. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/character-entities-legacy-Wut6vMuj.js +0 -0
  715. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/chevrons-up-down-Dwo0Il5v.js +0 -0
  716. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/chunk-4BX2VUAB-C0kf5ycP.js +0 -0
  717. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/chunk-55IACEB6-QyFAFTWp.js +0 -0
  718. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/chunk-BSJP7CBP-DIpfLhEz.js +0 -0
  719. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/chunk-Cyuzqnbw.js +0 -0
  720. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/chunk-FMBD7UC4-C9D6P7Uq.js +0 -0
  721. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/chunk-NNHCCRGN-DmZbXBJw.js +0 -0
  722. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/chunk-QZHKN3VN-CyVdgm44.js +0 -0
  723. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/chunk-XPW4576I-ru3A962d.js +0 -0
  724. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/clarity-SemFz856.js +0 -0
  725. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/clojure-DqKBuwfJ.js +0 -0
  726. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/cmake-Bj61d0ZC.js +0 -0
  727. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/cobol-BoXxFQjh.js +0 -0
  728. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/codeowners-C8r90Shi.js +0 -0
  729. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/codeql-oeQT6MSM.js +0 -0
  730. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/coffee-B5TREocO.js +0 -0
  731. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/common-lisp-Cv5bFMCO.js +0 -0
  732. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/coq-BrsZFFmf.js +0 -0
  733. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/cose-bilkent-S5V4N54A-PjRvINHM.js +0 -0
  734. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/cpp-CVIk4zoB.js +0 -0
  735. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/crystal-CvUuUt6_.js +0 -0
  736. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/csharp-Ct8U2NOr.js +0 -0
  737. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/css-D7o5g6xi.js +0 -0
  738. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/csv-Dx-8-gkx.js +0 -0
  739. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/cue-CE9AQfxI.js +0 -0
  740. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/cypher-ClKdZ_lG.js +0 -0
  741. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/cytoscape.esm-jXPf2pm4.js +0 -0
  742. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/d-qD-0Kul2.js +0 -0
  743. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/dagre-Uyq5yTtG.js +0 -0
  744. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/dark-plus-Cs2F2srj.js +0 -0
  745. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/dart-DkHntEIa.js +0 -0
  746. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/dax-BkyTk9wS.js +0 -0
  747. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/defaultLocale-C8Fc0cco.js +0 -0
  748. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/desktop-Dlh5hvp9.js +0 -0
  749. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/diff-BDNflWRl.js +0 -0
  750. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/diff-Dvab7kiv.css +0 -0
  751. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/diff-woXpYk--.js +0 -0
  752. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/dist-B7jLwIkG.js +0 -0
  753. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/dist-D4B_Bs5p.js +0 -0
  754. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/dist-reBDvVlc.js +0 -0
  755. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/docker-IyjqRm3v.js +0 -0
  756. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/dotenv-_5a1GRtc.js +0 -0
  757. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/dracula-BHWKrbxM.js +0 -0
  758. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/dracula-soft-5eyTD99u.js +0 -0
  759. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/dream-maker-DW3nJb8Q.js +0 -0
  760. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/edge-CmXZi-az.js +0 -0
  761. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/elixir-BoRIkjDi.js +0 -0
  762. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/elm-Cm7sFdI1.js +0 -0
  763. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/emacs-lisp-C9PiwqqW.js +0 -0
  764. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/erb-DuMAGb6i.js +0 -0
  765. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/erlang-Cphh6RMH.js +0 -0
  766. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/everforest-dark-sB-x3p7T.js +0 -0
  767. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/everforest-light-Df2xbC6M.js +0 -0
  768. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/fennel-DQxkIbk2.js +0 -0
  769. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/fish-BJitypiv.js +0 -0
  770. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/fluent-C03EYrpw.js +0 -0
  771. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/fortran-fixed-form-DEKoE2YW.js +0 -0
  772. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/fortran-free-form-CYNrtFtB.js +0 -0
  773. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/fsharp-D13ZGOAj.js +0 -0
  774. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/gdresource-C0sCabJj.js +0 -0
  775. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/gdscript-Cp2uCuqX.js +0 -0
  776. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/gdshader-CBce3t8t.js +0 -0
  777. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/genie-CV2tkWYe.js +0 -0
  778. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/gherkin-DExj1W_8.js +0 -0
  779. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/git-commit-BSykSTBG.js +0 -0
  780. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/git-rebase-D2tSwjJb.js +0 -0
  781. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/github-dark-C-LZuMrd.js +0 -0
  782. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/github-dark-default-DXG-b-1a.js +0 -0
  783. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/github-dark-dimmed-Bx1FflLF.js +0 -0
  784. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/github-dark-high-contrast-B_tTalzw.js +0 -0
  785. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/github-light-EUqPIrTm.js +0 -0
  786. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/github-light-default-BXViO-2h.js +0 -0
  787. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/github-light-high-contrast-B68TUdTA.js +0 -0
  788. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/gleam-CSRkHgEL.js +0 -0
  789. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/glimmer-js--VVKNatA.js +0 -0
  790. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/glimmer-ts-Bfa_wiNC.js +0 -0
  791. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/glsl-MPwHyiXQ.js +0 -0
  792. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/gn-ilITqXS6.js +0 -0
  793. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/gnuplot-7GGW24-e.js +0 -0
  794. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/go-BJwz_mda.js +0 -0
  795. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/graphlib-C22s9MDV.js +0 -0
  796. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/graphql-NW854Khs.js +0 -0
  797. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/groovy-CacY0gHj.js +0 -0
  798. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/gruvbox-dark-hard-C820rvS2.js +0 -0
  799. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/gruvbox-dark-medium-BPjhmG05.js +0 -0
  800. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/gruvbox-dark-soft-MrdJrrXF.js +0 -0
  801. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/gruvbox-light-hard-BC_s9l72.js +0 -0
  802. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/gruvbox-light-medium-BAWPOn9u.js +0 -0
  803. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/gruvbox-light-soft-BSMLrYjP.js +0 -0
  804. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/hack-CSl79E5u.js +0 -0
  805. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/haml-Dmb1YmHj.js +0 -0
  806. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/handlebars-Du8DtnRB.js +0 -0
  807. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/haskell-D8IpX4py.js +0 -0
  808. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/haxe-OTjmBuCE.js +0 -0
  809. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/hcl-Dh228itO.js +0 -0
  810. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/hjson-CxZEssPk.js +0 -0
  811. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/hlsl-Cvrh5tZx.js +0 -0
  812. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/horizon-CE9ld1lL.js +0 -0
  813. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/horizon-bright-Br1oVSNq.js +0 -0
  814. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/houston-CsvMBhTu.js +0 -0
  815. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/html-Kpl3bQKd.js +0 -0
  816. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/html-derivative-BEEWNZ8Y.js +0 -0
  817. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/http-HvMG3K54.js +0 -0
  818. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/hurl-CLh1t2ES.js +0 -0
  819. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/hxml-B0Qn7Nwc.js +0 -0
  820. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/hy-CZbG8q4J.js +0 -0
  821. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/imba-DsUTQ-LC.js +0 -0
  822. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/ini-B5eOa1yu.js +0 -0
  823. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/init-D6jRqBbL.js +0 -0
  824. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
  825. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
  826. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
  827. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
  828. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
  829. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
  830. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
  831. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/java-Cst_eZTE.js +0 -0
  832. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/javascript-i_rUTyCW.js +0 -0
  833. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/jinja-CaXggA6f.js +0 -0
  834. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/jison-D9Fg2JgN.js +0 -0
  835. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/json-DS5j4FfK.js +0 -0
  836. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/json5-BR5RXkoi.js +0 -0
  837. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/jsonc-CYpm1nAK.js +0 -0
  838. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/jsonl-CmCQp5Yx.js +0 -0
  839. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/jsonnet-CJTPZ8u_.js +0 -0
  840. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/jssm-DXw9l8Rf.js +0 -0
  841. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/jsx-CFyhNHav.js +0 -0
  842. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/jsx-runtime-wSvXh6gi.js +0 -0
  843. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/julia-R8NNmfP1.js +0 -0
  844. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/just-BhhHYlS8.js +0 -0
  845. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/kanagawa-dragon-CXtmUGW6.js +0 -0
  846. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/kanagawa-lotus-BN08jTvb.js +0 -0
  847. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/kanagawa-wave-CTweb8Dz.js +0 -0
  848. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/katex-BGaDVET_.js +0 -0
  849. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/katex-BorAY7qD.css +0 -0
  850. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/kdl-CsD5j6eV.js +0 -0
  851. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/kotlin-DhhofPvG.js +0 -0
  852. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/kusto-BUv0MjJC.js +0 -0
  853. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/laserwave-C_8bwKvT.js +0 -0
  854. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/latex-D5k_uhWv.js +0 -0
  855. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/lean-CewbzKMR.js +0 -0
  856. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/less-DVTAwKKz.js +0 -0
  857. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/lib-BLxG8W6T.js +0 -0
  858. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/libesm-8-2luV-1.js +0 -0
  859. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/light-plus-DVQuIRkW.js +0 -0
  860. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/linear-BktLjFGX.js +0 -0
  861. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/liquid-Q0_hzjly.js +0 -0
  862. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/llvm-Cm23YOpf.js +0 -0
  863. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/log-BNLmms1o.js +0 -0
  864. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/logo-Cluzi2Zq.js +0 -0
  865. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/lua-VoGSg0xb.js +0 -0
  866. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/luau-CNKltnaQ.js +0 -0
  867. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/make-Dixweg8N.js +0 -0
  868. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/markdown-BYOwaDjH.js +0 -0
  869. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/marked.esm-DLdcrU5H.js +0 -0
  870. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/marko-D_aeUD__.js +0 -0
  871. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/material-theme-Bm3Qr25_.js +0 -0
  872. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/material-theme-darker-2IIEA8gg.js +0 -0
  873. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/material-theme-lighter-uhdI0v04.js +0 -0
  874. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/material-theme-ocean-CHQ94UKr.js +0 -0
  875. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/material-theme-palenight-B5W6OYN7.js +0 -0
  876. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/matlab-D7qyCx1q.js +0 -0
  877. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/mdc-BSifqehP.js +0 -0
  878. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/mdx-DQZ5AkYe.js +0 -0
  879. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/mermaid-Bk4SNUv9.js +0 -0
  880. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/min-dark-BSWPekZh.js +0 -0
  881. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/min-light-DDpmG2fV.js +0 -0
  882. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/mipsasm-BMqwQI7S.js +0 -0
  883. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/mojo-BgCJLMeH.js +0 -0
  884. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/monokai-CdkpiU2Y.js +0 -0
  885. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/moonbit-CaWjb8XO.js +0 -0
  886. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/move-B1IS1UjX.js +0 -0
  887. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/narrat-_X_XdTYD.js +0 -0
  888. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/nextflow-Bbiyy34d.js +0 -0
  889. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/nextflow-groovy-Dc_ddanL.js +0 -0
  890. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/nginx-CgHaWcsO.js +0 -0
  891. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/night-owl-DhmEMT88.js +0 -0
  892. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/night-owl-light-eJ-hLW7d.js +0 -0
  893. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/nim-BuixXxPS.js +0 -0
  894. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/nix-IvuFDN5E.js +0 -0
  895. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/nord-Cb4Vim4T.js +0 -0
  896. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/nushell-DcLAeLz5.js +0 -0
  897. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/objective-c-D1A_Heim.js +0 -0
  898. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/objective-cpp-BsSzOQcm.js +0 -0
  899. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/ocaml-O90oeIOV.js +0 -0
  900. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/odin-B1RWQWA5.js +0 -0
  901. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/one-dark-pro-CLwyXe_n.js +0 -0
  902. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/one-light-D7Lr4KcI.js +0 -0
  903. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/openscad-BUDT5pXO.js +0 -0
  904. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/ordinal-hYBb2elL.js +0 -0
  905. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/pascal-4ZHwLPI5.js +0 -0
  906. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/path-BWPyau1x.js +0 -0
  907. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/perl-BLMySlFJ.js +0 -0
  908. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/php-Czf_fybR.js +0 -0
  909. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/pkl-ot-7Btpt.js +0 -0
  910. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/plastic-DQwYfKfQ.js +0 -0
  911. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/plsql-DGHpHOYJ.js +0 -0
  912. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/po-BiJDBrnU.js +0 -0
  913. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/poimandres-DRFjx7u4.js +0 -0
  914. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/polar-C7UOKdEL.js +0 -0
  915. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/postcss-BXeXVLqQ.js +0 -0
  916. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/powerquery-DNMTfnFr.js +0 -0
  917. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/powershell-DshXNtvi.js +0 -0
  918. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/prisma-BsRQq5mF.js +0 -0
  919. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/prolog-iXnhIJG7.js +0 -0
  920. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/proto-DB4EqR-F.js +0 -0
  921. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/pug-CsZglf8T.js +0 -0
  922. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/puppet-CDv2pdJW.js +0 -0
  923. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/purescript-9MfHhQsQ.js +0 -0
  924. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/python-gzcpVVnB.js +0 -0
  925. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/qml-DcW_sT3t.js +0 -0
  926. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/qmldir-DCQb3MpD.js +0 -0
  927. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/qss-Fe1Jh2GI.js +0 -0
  928. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/r-D2d3McyU.js +0 -0
  929. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/racket-DcIDlBhZ.js +0 -0
  930. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/raku-B3gFvitq.js +0 -0
  931. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/razor-oFpUW61Z.js +0 -0
  932. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/red-CJ3rzSJv.js +0 -0
  933. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/reg-CRGYupPL.js +0 -0
  934. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/regexp-Bu0flJgP.js +0 -0
  935. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/rel-BtDbiS_P.js +0 -0
  936. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/riscv-Ckw8ddFX.js +0 -0
  937. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/ron-VUp2lXgN.js +0 -0
  938. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/rose-pine-BthvhNj6.js +0 -0
  939. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/rose-pine-dawn-Dg85fqjY.js +0 -0
  940. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/rose-pine-moon-hon4tzzS.js +0 -0
  941. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/rosmsg-CAekHB0j.js +0 -0
  942. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/rough.esm-CSKSodPl.js +0 -0
  943. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/rst-U6Eu7ipE.js +0 -0
  944. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/ruby-CUQsVT6d.js +0 -0
  945. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/rust-Cfkwpbl8.js +0 -0
  946. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/sas-CNBFrLhc.js +0 -0
  947. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/sass-DXrisJhu.js +0 -0
  948. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/scala-DKOlJaKm.js +0 -0
  949. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/scheme-DQCgrYNe.js +0 -0
  950. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/scss-CPnU-uuv.js +0 -0
  951. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/sdbl-bTVj8UrX.js +0 -0
  952. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/shaderlab-TOUzSsQk.js +0 -0
  953. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/shellscript-BbTp1yjG.js +0 -0
  954. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/shellsession-BmAC8SMF.js +0 -0
  955. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/slack-dark-DnToyrRv.js +0 -0
  956. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/slack-ochin-B2OO5cIa.js +0 -0
  957. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/smalltalk-B16xEiuN.js +0 -0
  958. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/snazzy-light-4G7pJPwS.js +0 -0
  959. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/solarized-dark-DV17i1UV.js +0 -0
  960. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/solarized-light-DSh2HLQt.js +0 -0
  961. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/solidity-CKzVLygQ.js +0 -0
  962. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/soy-CdbyEXp6.js +0 -0
  963. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/space-separated-tokens-DpjE5PGy.js +0 -0
  964. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/sparql-D_iOobhT.js +0 -0
  965. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/splunk-BC2Px7Mm.js +0 -0
  966. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/sql-hpBkusIy.js +0 -0
  967. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/src-D-NMWEou.js +0 -0
  968. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/ssh-config-BgfXC-Er.js +0 -0
  969. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/stata-DVbvk3qH.js +0 -0
  970. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/stylus-B6D30XZt.js +0 -0
  971. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/surrealql-DxccxuMd.js +0 -0
  972. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/svelte-DzNm5V2w.js +0 -0
  973. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/swift-DonLKvLd.js +0 -0
  974. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/synthwave-84-nFMaYfgc.js +0 -0
  975. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/system-verilog-DJ5XKQeo.js +0 -0
  976. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/systemd-BxMlprV5.js +0 -0
  977. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/talonscript-CohzipZa.js +0 -0
  978. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/tasl-DMoTqEGO.js +0 -0
  979. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/tcl-CZd0xW_V.js +0 -0
  980. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/templ-CsM0tTsw.js +0 -0
  981. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/terraform-DswuEJGm.js +0 -0
  982. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/tex-B0f_hYr8.js +0 -0
  983. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/tokyo-night-oM2G3aXe.js +0 -0
  984. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/toml-CcmNWLt0.js +0 -0
  985. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/ts-tags-Bf-FGGvT.js +0 -0
  986. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/tsv-sltzmVWM.js +0 -0
  987. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/tsx-DFvk7AwW.js +0 -0
  988. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/turtle-ByJddavk.js +0 -0
  989. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/twig-VJ4-Ntm0.js +0 -0
  990. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/typescript-DHTLvXzV.js +0 -0
  991. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/typespec-B88KGewJ.js +0 -0
  992. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/typst-DI99ib-x.js +0 -0
  993. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/v-DETTlOr0.js +0 -0
  994. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/v4-DqR3yzBO.js +0 -0
  995. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/vala-zf12oZj6.js +0 -0
  996. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/vb-Djn5o6TS.js +0 -0
  997. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/verilog-CiiDBU1e.js +0 -0
  998. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/vesper-D5bVUKB1.js +0 -0
  999. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/vhdl-BroJfC0k.js +0 -0
  1000. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/viml-DvXPmvsu.js +0 -0
  1001. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/vitesse-black-fwtXNY1n.js +0 -0
  1002. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/vitesse-dark-BZCL-v6S.js +0 -0
  1003. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/vitesse-light-VbXTXTou.js +0 -0
  1004. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/vue-D3dSYZKz.js +0 -0
  1005. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/vue-html-DQch_7VQ.js +0 -0
  1006. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/vue-vine-B67Dz05t.js +0 -0
  1007. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/vyper-CgoNMtux.js +0 -0
  1008. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/wasm-BnjxR4X6.js +0 -0
  1009. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/wasm-ByWQv1Qj.js +0 -0
  1010. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/wenyan-C8pVoKbM.js +0 -0
  1011. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/wgsl-BsKzXJz4.js +0 -0
  1012. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/wikitext-ClFFjSW2.js +0 -0
  1013. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/wit-DdvCle-K.js +0 -0
  1014. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/wolfram-DLL8P-h_.js +0 -0
  1015. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/xml-C33zriiW.js +0 -0
  1016. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/xsl-BFS2wyMt.js +0 -0
  1017. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/yaml-w0rMsuN4.js +0 -0
  1018. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/zenscript-BnlCZFoB.js +0 -0
  1019. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/assets/zig-CMLA9XwU.js +0 -0
  1020. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/brand/apple-touch-icon.png +0 -0
  1021. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/brand/arctecture.webp +0 -0
  1022. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/brand/bimi-logo.svg +0 -0
  1023. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/brand/favicon.ico +0 -0
  1024. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/brand/fonts/dm-sans-latin-ext.woff2 +0 -0
  1025. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/brand/fonts/dm-sans-latin.woff2 +0 -0
  1026. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/brand/fonts/instrument-sans-latin-ext.woff2 +0 -0
  1027. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/brand/fonts/instrument-sans-latin.woff2 +0 -0
  1028. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/brand/fonts/instrument-serif-latin-ext.woff2 +0 -0
  1029. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/brand/fonts/instrument-serif-latin.woff2 +0 -0
  1030. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-italic-latin-ext.woff2 +0 -0
  1031. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-italic-latin.woff2 +0 -0
  1032. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-latin-ext.woff2 +0 -0
  1033. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-latin.woff2 +0 -0
  1034. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/brand/fonts/roboto-latin-ext.woff2 +0 -0
  1035. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/brand/fonts/roboto-latin.woff2 +0 -0
  1036. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/brand/icon-192.png +0 -0
  1037. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/brand/icon-512.png +0 -0
  1038. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/brand/icon.svg +0 -0
  1039. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/brand/logo.png +0 -0
  1040. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/brand/pythinker_animated.svg +0 -0
  1041. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/brand/robots.txt +0 -0
  1042. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/install.ps1 +0 -0
  1043. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/install.sh +0 -0
  1044. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/static/logo.png +0 -0
  1045. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/store/__init__.py +0 -0
  1046. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/web/store/sessions.py +0 -0
  1047. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/wire/__init__.py +0 -0
  1048. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/wire/file.py +0 -0
  1049. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/wire/jsonrpc.py +0 -0
  1050. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/wire/protocol.py +0 -0
  1051. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/wire/root_hub.py +0 -0
  1052. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/wire/serde.py +0 -0
  1053. {pythinker_code-0.54.0 → pythinker_code-0.56.0}/src/pythinker_code/wire/server.py +0 -0
  1054. {pythinker_code-0.54.0 → pythinker_code-0.56.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.54.0
3
+ Version: 0.56.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,11 +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.54.0
118
+ ## 🆕 What's New in 0.56.0
119
119
 
120
- - **New `Workflow` tool for deterministic multi-agent orchestration.** The default agent can author and run a script that fans work out across subagents with `agent()`, `parallel()`, and `pipeline()`, with live progress, structured-schema output, an optional token budget, and a single up-front approval.
120
+ - **Windows shell UI recovers from mid-session console blanking.** Child processes spawned by the Shell tool, background tasks, and `!` commands no longer attach to the interactive console, and the prompt renderer forces an absolute repaint after terminal resizes and failed scrollback handoffs instead of diffing against a stale frame.
121
+ - **Workflow progress rendering and lifecycle fixes.** Progress display no longer duplicates agents truncated by the per-phase display cap, leaked `agent()` coroutines are closed when `parallel()` rejects its arguments, and a 1000-agent lifetime backstop now guards against runaway workflow loops.
122
+ - **Stale update-success notice cleared after downgrading.** Restarting into an older Homebrew install no longer leaves a permanent "Restart to apply" banner.
121
123
 
122
- Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.54.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.56.0`, or use the native installer for your platform from the [Releases page](https://github.com/Pythoughts-labs/pythinker-code/releases/latest).
123
125
 
124
126
 
125
127
  ---
@@ -209,7 +211,7 @@ matches your OS — no Python, Node, or `uv` prerequisite.
209
211
 
210
212
  | Platform | Recommended install | Artifact source |
211
213
  |---|---|---|
212
- | **🪟 Windows** | `irm https://pythinker.com/install.ps1 \| iex` | `PythinkerSetup-0.54.0.exe` from [Releases](https://github.com/Pythoughts-labs/pythinker-code/releases/latest) |
214
+ | **🪟 Windows** | `irm https://pythinker.com/install.ps1 \| iex` | `PythinkerSetup-0.56.0.exe` from [Releases](https://github.com/Pythoughts-labs/pythinker-code/releases/latest) |
213
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) |
214
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 |
215
217
  | **🐳 Docker** | `docker run --rm -it ghcr.io/pythoughts-labs/pythinker-code` | GHCR multi-arch image |
@@ -237,7 +239,7 @@ pythinker # start the interactive TUI
237
239
 
238
240
  ### 🪟 Windows — native installer
239
241
 
240
- `PythinkerSetup-0.54.0.exe` is a signed* Inno Setup wizard. Installs per-user
242
+ `PythinkerSetup-0.56.0.exe` is a signed* Inno Setup wizard. Installs per-user
241
243
  into `%LOCALAPPDATA%\Programs\Pythinker`, registers `pythinker` on your user
242
244
  PATH (`HKCU\Environment`), broadcasts `WM_SETTINGCHANGE` so new shells see
243
245
  the change. **No UAC prompt.**
@@ -248,13 +250,13 @@ irm https://pythinker.com/install.ps1 | iex
248
250
 
249
251
  # Or manually download the installer + checksum from the Releases page,
250
252
  # verify with Get-FileHash, then run:
251
- .\PythinkerSetup-0.54.0.exe
253
+ .\PythinkerSetup-0.56.0.exe
252
254
 
253
255
  # Open a fresh PowerShell
254
256
  pythinker --version
255
257
  ```
256
258
 
257
- **Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.54.0.exe /ALLUSERS`
259
+ **Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.56.0.exe /ALLUSERS`
258
260
  installs to `%ProgramFiles%\Pythinker` and writes PATH to HKLM (requires admin).
259
261
 
260
262
  **Upgrade:** `pythinker update` from inside the running app — it downloads
@@ -312,26 +314,26 @@ attached to every GitHub Release.
312
314
 
313
315
  ```sh
314
316
  # Debian / Ubuntu (x86_64)
315
- sudo dpkg -i pythinker-code_0.54.0_amd64.deb
317
+ sudo dpkg -i pythinker-code_0.56.0_amd64.deb
316
318
  sudo apt-get install -f # only if dpkg reports missing deps
317
319
 
318
320
  # Debian / Ubuntu (ARM64)
319
- sudo dpkg -i pythinker-code_0.54.0_arm64.deb
321
+ sudo dpkg -i pythinker-code_0.56.0_arm64.deb
320
322
 
321
323
  # Fedora / RHEL / openSUSE (x86_64)
322
- curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.54.0/pythinker-code-0.54.0.x86_64.rpm
323
- curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.54.0/pythinker-code-0.54.0.x86_64.rpm.sha256
324
- sha256sum -c pythinker-code-0.54.0.x86_64.rpm.sha256
324
+ curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.56.0/pythinker-code-0.56.0.x86_64.rpm
325
+ curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.56.0/pythinker-code-0.56.0.x86_64.rpm.sha256
326
+ sha256sum -c pythinker-code-0.56.0.x86_64.rpm.sha256
325
327
  # Fedora / RHEL:
326
- sudo dnf install ./pythinker-code-0.54.0.x86_64.rpm
328
+ sudo dnf install ./pythinker-code-0.56.0.x86_64.rpm
327
329
  # openSUSE:
328
- sudo zypper install ./pythinker-code-0.54.0.x86_64.rpm
330
+ sudo zypper install ./pythinker-code-0.56.0.x86_64.rpm
329
331
 
330
332
  # Fedora / RHEL (aarch64)
331
- curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.54.0/pythinker-code-0.54.0.aarch64.rpm
332
- curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.54.0/pythinker-code-0.54.0.aarch64.rpm.sha256
333
- sha256sum -c pythinker-code-0.54.0.aarch64.rpm.sha256
334
- sudo dnf install ./pythinker-code-0.54.0.aarch64.rpm
333
+ curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.56.0/pythinker-code-0.56.0.aarch64.rpm
334
+ curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.56.0/pythinker-code-0.56.0.aarch64.rpm.sha256
335
+ sha256sum -c pythinker-code-0.56.0.aarch64.rpm.sha256
336
+ sudo dnf install ./pythinker-code-0.56.0.aarch64.rpm
335
337
  ```
336
338
 
337
339
  Both packages drop a small `/usr/bin/pythinker` launcher that execs the real
@@ -340,8 +342,8 @@ binary under `/usr/lib/pythinker/`, so your `$PATH` stays tidy.
340
342
  **Verify before install:**
341
343
 
342
344
  ```sh
343
- sha256sum -c pythinker-code_0.54.0_amd64.deb.sha256 # Debian/Ubuntu
344
- sha256sum -c pythinker-code-0.54.0.x86_64.rpm.sha256 # Fedora/RHEL
345
+ sha256sum -c pythinker-code_0.56.0_amd64.deb.sha256 # Debian/Ubuntu
346
+ sha256sum -c pythinker-code-0.56.0.x86_64.rpm.sha256 # Fedora/RHEL
345
347
  ```
346
348
 
347
349
  **Upgrade:** download the new `.deb`/`.rpm` from Releases and `dpkg -i` /
@@ -50,11 +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.54.0
53
+ ## 🆕 What's New in 0.56.0
54
54
 
55
- - **New `Workflow` tool for deterministic multi-agent orchestration.** The default agent can author and run a script that fans work out across subagents with `agent()`, `parallel()`, and `pipeline()`, with live progress, structured-schema output, an optional token budget, and a single up-front approval.
55
+ - **Windows shell UI recovers from mid-session console blanking.** Child processes spawned by the Shell tool, background tasks, and `!` commands no longer attach to the interactive console, and the prompt renderer forces an absolute repaint after terminal resizes and failed scrollback handoffs instead of diffing against a stale frame.
56
+ - **Workflow progress rendering and lifecycle fixes.** Progress display no longer duplicates agents truncated by the per-phase display cap, leaked `agent()` coroutines are closed when `parallel()` rejects its arguments, and a 1000-agent lifetime backstop now guards against runaway workflow loops.
57
+ - **Stale update-success notice cleared after downgrading.** Restarting into an older Homebrew install no longer leaves a permanent "Restart to apply" banner.
56
58
 
57
- Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.54.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.56.0`, or use the native installer for your platform from the [Releases page](https://github.com/Pythoughts-labs/pythinker-code/releases/latest).
58
60
 
59
61
 
60
62
  ---
@@ -144,7 +146,7 @@ matches your OS — no Python, Node, or `uv` prerequisite.
144
146
 
145
147
  | Platform | Recommended install | Artifact source |
146
148
  |---|---|---|
147
- | **🪟 Windows** | `irm https://pythinker.com/install.ps1 \| iex` | `PythinkerSetup-0.54.0.exe` from [Releases](https://github.com/Pythoughts-labs/pythinker-code/releases/latest) |
149
+ | **🪟 Windows** | `irm https://pythinker.com/install.ps1 \| iex` | `PythinkerSetup-0.56.0.exe` from [Releases](https://github.com/Pythoughts-labs/pythinker-code/releases/latest) |
148
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) |
149
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 |
150
152
  | **🐳 Docker** | `docker run --rm -it ghcr.io/pythoughts-labs/pythinker-code` | GHCR multi-arch image |
@@ -172,7 +174,7 @@ pythinker # start the interactive TUI
172
174
 
173
175
  ### 🪟 Windows — native installer
174
176
 
175
- `PythinkerSetup-0.54.0.exe` is a signed* Inno Setup wizard. Installs per-user
177
+ `PythinkerSetup-0.56.0.exe` is a signed* Inno Setup wizard. Installs per-user
176
178
  into `%LOCALAPPDATA%\Programs\Pythinker`, registers `pythinker` on your user
177
179
  PATH (`HKCU\Environment`), broadcasts `WM_SETTINGCHANGE` so new shells see
178
180
  the change. **No UAC prompt.**
@@ -183,13 +185,13 @@ irm https://pythinker.com/install.ps1 | iex
183
185
 
184
186
  # Or manually download the installer + checksum from the Releases page,
185
187
  # verify with Get-FileHash, then run:
186
- .\PythinkerSetup-0.54.0.exe
188
+ .\PythinkerSetup-0.56.0.exe
187
189
 
188
190
  # Open a fresh PowerShell
189
191
  pythinker --version
190
192
  ```
191
193
 
192
- **Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.54.0.exe /ALLUSERS`
194
+ **Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.56.0.exe /ALLUSERS`
193
195
  installs to `%ProgramFiles%\Pythinker` and writes PATH to HKLM (requires admin).
194
196
 
195
197
  **Upgrade:** `pythinker update` from inside the running app — it downloads
@@ -247,26 +249,26 @@ attached to every GitHub Release.
247
249
 
248
250
  ```sh
249
251
  # Debian / Ubuntu (x86_64)
250
- sudo dpkg -i pythinker-code_0.54.0_amd64.deb
252
+ sudo dpkg -i pythinker-code_0.56.0_amd64.deb
251
253
  sudo apt-get install -f # only if dpkg reports missing deps
252
254
 
253
255
  # Debian / Ubuntu (ARM64)
254
- sudo dpkg -i pythinker-code_0.54.0_arm64.deb
256
+ sudo dpkg -i pythinker-code_0.56.0_arm64.deb
255
257
 
256
258
  # Fedora / RHEL / openSUSE (x86_64)
257
- curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.54.0/pythinker-code-0.54.0.x86_64.rpm
258
- curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.54.0/pythinker-code-0.54.0.x86_64.rpm.sha256
259
- sha256sum -c pythinker-code-0.54.0.x86_64.rpm.sha256
259
+ curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.56.0/pythinker-code-0.56.0.x86_64.rpm
260
+ curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.56.0/pythinker-code-0.56.0.x86_64.rpm.sha256
261
+ sha256sum -c pythinker-code-0.56.0.x86_64.rpm.sha256
260
262
  # Fedora / RHEL:
261
- sudo dnf install ./pythinker-code-0.54.0.x86_64.rpm
263
+ sudo dnf install ./pythinker-code-0.56.0.x86_64.rpm
262
264
  # openSUSE:
263
- sudo zypper install ./pythinker-code-0.54.0.x86_64.rpm
265
+ sudo zypper install ./pythinker-code-0.56.0.x86_64.rpm
264
266
 
265
267
  # Fedora / RHEL (aarch64)
266
- curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.54.0/pythinker-code-0.54.0.aarch64.rpm
267
- curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.54.0/pythinker-code-0.54.0.aarch64.rpm.sha256
268
- sha256sum -c pythinker-code-0.54.0.aarch64.rpm.sha256
269
- sudo dnf install ./pythinker-code-0.54.0.aarch64.rpm
268
+ curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.56.0/pythinker-code-0.56.0.aarch64.rpm
269
+ curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.56.0/pythinker-code-0.56.0.aarch64.rpm.sha256
270
+ sha256sum -c pythinker-code-0.56.0.aarch64.rpm.sha256
271
+ sudo dnf install ./pythinker-code-0.56.0.aarch64.rpm
270
272
  ```
271
273
 
272
274
  Both packages drop a small `/usr/bin/pythinker` launcher that execs the real
@@ -275,8 +277,8 @@ binary under `/usr/lib/pythinker/`, so your `$PATH` stays tidy.
275
277
  **Verify before install:**
276
278
 
277
279
  ```sh
278
- sha256sum -c pythinker-code_0.54.0_amd64.deb.sha256 # Debian/Ubuntu
279
- sha256sum -c pythinker-code-0.54.0.x86_64.rpm.sha256 # Fedora/RHEL
280
+ sha256sum -c pythinker-code_0.56.0_amd64.deb.sha256 # Debian/Ubuntu
281
+ sha256sum -c pythinker-code-0.56.0.x86_64.rpm.sha256 # Fedora/RHEL
280
282
  ```
281
283
 
282
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.54.0"
3
+ version = "0.56.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,41 @@ GitHub Releases page; `0.8.0` is the new starting line.
15
15
 
16
16
  ## Unreleased
17
17
 
18
+ ## 0.56.0 (2026-07-02)
19
+
20
+ - **Windows shell UI recovers from mid-session console blanking.** The TUI's
21
+ transcript and input box could go blank mid-session until a terminal restart;
22
+ child processes spawned by the Shell tool, background tasks, and `!` commands
23
+ no longer attach to the interactive console (`CREATE_NO_WINDOW`), and the
24
+ prompt renderer now forces an absolute repaint after terminal resizes and
25
+ failed scrollback handoffs instead of diffing against a stale frame.
26
+ - **Workflow progress rendering and lifecycle fixes.** Progress display no
27
+ longer duplicates agents once truncated by the per-phase display cap,
28
+ `agent()` coroutines are no longer leaked when `parallel()` rejects its
29
+ arguments, and a 1000-agent lifetime backstop now guards against runaway
30
+ workflow loops.
31
+ - **Stale update-success notice cleared after downgrading.** Restarting into
32
+ an older Homebrew install no longer leaves a permanent "Restart to apply"
33
+ banner — the `/update` command surfaces again as expected.
34
+
35
+ Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.56.0`, or use the native installer for your platform from the [Releases page](https://github.com/Pythoughts-labs/pythinker-code/releases/latest).
36
+
37
+ ## 0.55.0 (2026-06-30)
38
+
39
+ - **Local-model reliability fixes for compaction, Qwen3 reasoning, and stuck loops.**
40
+ Context-compaction summary output is now capped so a slow/degenerate local model
41
+ completion can no longer hang the soul loop indefinitely on local OpenAI-compatible
42
+ backends. Self-hosted `openai_legacy` endpoints (llama.cpp/vLLM/LM Studio) now send
43
+ Qwen3.x's binary `enable_thinking` chat-template toggle instead of a tiered
44
+ `reasoning_effort` value, since these models only support on/off and were silently
45
+ being promoted to full reasoning at every configured effort level. A second,
46
+ independent stuck-loop backstop (`max_consecutive_identical_calls`, default 10) now
47
+ stops a turn after enough consecutive tool calls with identical arguments,
48
+ regardless of whether each call reports success — catching loops where a tool
49
+ falsely reports success on a call that never made progress.
50
+
51
+ Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.55.0`, or use the native installer for your platform from the [Releases page](https://github.com/Pythoughts-labs/pythinker-code/releases/latest).
52
+
18
53
  ## 0.54.0 (2026-06-30)
19
54
 
20
55
  - **New `Workflow` tool for deterministic multi-agent orchestration.** The default
@@ -12,6 +12,7 @@ from pathlib import Path
12
12
  from typing import TYPE_CHECKING, Any, Literal
13
13
 
14
14
  from pythinker_host.local import local_host
15
+ from pythinker_host.windows import windows_console_detach_flags
15
16
 
16
17
  from pythinker_code.config import BackgroundConfig
17
18
  from pythinker_code.notifications import NotificationEvent, NotificationManager
@@ -243,7 +244,10 @@ class BackgroundTaskManager:
243
244
  "cwd": str(task_dir),
244
245
  }
245
246
  if os.name == "nt":
246
- kwargs["creationflags"] = getattr(subprocess, "CREATE_NEW_PROCESS_GROUP", 0)
247
+ # CREATE_NO_WINDOW: don't share the interactive console — a child
248
+ # touching it via the Win32 console API bypasses DEVNULL stdio and
249
+ # can blank the parent TUI until terminal restart.
250
+ kwargs["creationflags"] = windows_console_detach_flags()
247
251
  else:
248
252
  kwargs["start_new_session"] = True
249
253
 
@@ -9,6 +9,8 @@ import time
9
9
  from pathlib import Path
10
10
  from typing import Any
11
11
 
12
+ from pythinker_host.windows import windows_console_detach_flags
13
+
12
14
  from pythinker_code.utils.logging import logger
13
15
  from pythinker_code.utils.subprocess_env import get_clean_env, scrub_secret_env
14
16
 
@@ -185,7 +187,10 @@ async def run_background_task_worker(
185
187
  "env": scrub_secret_env(get_clean_env()) if spec.scrub_secrets else get_clean_env(),
186
188
  }
187
189
  if os.name == "nt":
188
- spawn_kwargs["creationflags"] = getattr(subprocess, "CREATE_NEW_PROCESS_GROUP", 0)
190
+ # CREATE_NO_WINDOW: don't share the interactive console — a child
191
+ # touching it via the Win32 console API bypasses the redirected
192
+ # stdio and can blank the parent TUI until terminal restart.
193
+ spawn_kwargs["creationflags"] = windows_console_detach_flags()
189
194
  else:
190
195
  spawn_kwargs["start_new_session"] = True
191
196
 
@@ -586,6 +586,11 @@ class LoopControl(BaseModel):
586
586
  call failed (a degenerate stuck loop), instead of continuing to
587
587
  ``max_steps_per_turn``. The turn ends with a ``stuck`` outcome and a handoff
588
588
  summary of what was tried. ``0`` disables the backstop. Default: 8."""
589
+ max_consecutive_identical_calls: int = Field(default=10, ge=0)
590
+ """Yield to the user after this many consecutive tool calls with identical
591
+ arguments, even if each call reports success. Tracked independently of
592
+ ``max_consecutive_failures`` so a tool that falsely reports success on a call
593
+ that made no progress can't defeat the backstop. ``0`` disables it. Default: 10."""
589
594
  max_truncation_recoveries: int = Field(default=3, ge=0)
590
595
  """When a model response is cut off by the output-token limit and makes no tool call,
591
596
  nudge the model to continue at most this many times per turn before surfacing the
@@ -61,6 +61,31 @@ class LLM:
61
61
  return self.chat_provider.model_name
62
62
 
63
63
 
64
+ # Providers whose generation kwargs use `max_output_tokens` instead of the
65
+ # more common `max_tokens` (OpenAI Chat-Completions-shaped and Anthropic
66
+ # providers, plus the first-party `pythinker` provider, all use `max_tokens`).
67
+ _MAX_OUTPUT_TOKENS_KWARG_OVERRIDES: dict[str, str] = {
68
+ "openai_responses": "max_output_tokens",
69
+ "openai_codex": "max_output_tokens",
70
+ "google_genai": "max_output_tokens",
71
+ "gemini": "max_output_tokens",
72
+ "vertexai": "max_output_tokens",
73
+ }
74
+
75
+
76
+ def capped_chat_provider(llm: LLM, max_output_tokens: int) -> ChatProvider:
77
+ """Return a copy of ``llm.chat_provider`` with its output length capped.
78
+
79
+ Callers needing a small, predictable cap regardless of the model's
80
+ usual output budget (e.g. a context-compaction summary) can use this
81
+ instead of hand-picking a provider-specific kwarg name.
82
+ """
83
+ provider_config = getattr(llm, "provider_config", None)
84
+ provider_type = getattr(provider_config, "type", None)
85
+ kwarg = _MAX_OUTPUT_TOKENS_KWARG_OVERRIDES.get(provider_type or "", "max_tokens")
86
+ return cast(Any, llm.chat_provider).with_generation_kwargs(**{kwarg: max_output_tokens})
87
+
88
+
64
89
  # Hosts that serve the genuine Anthropic API and therefore accept the
65
90
  # `tool_reference` / `defer_loading` beta content blocks that deferred tool
66
91
  # search depends on. The Claude API-key path and Anthropic OAuth both route
@@ -490,12 +515,22 @@ def create_llm(
490
515
  and not is_dashscope_legacy
491
516
  )
492
517
  is_glm_openai_legacy = provider.type == "openai_legacy" and _is_glm_model(model.model)
518
+ # Qwen3.x exposes a binary `enable_thinking` template toggle, not tiered
519
+ # reasoning effort; DashScope's own hosted endpoint already sends
520
+ # `enable_thinking` below, so only apply this for other openai_legacy
521
+ # routes (e.g. local llama.cpp/vLLM/LM Studio servers).
522
+ is_qwen3_openai_legacy = (
523
+ provider.type == "openai_legacy"
524
+ and _is_qwen3_model(model.model)
525
+ and not is_dashscope_legacy
526
+ )
493
527
  if (
494
528
  effective_effort is not None
495
529
  and supports_thinking
496
530
  and not is_kimi_openai_legacy
497
531
  and not is_glm_openai_legacy
498
532
  and not is_dashscope_legacy
533
+ and not is_qwen3_openai_legacy
499
534
  ):
500
535
  # Only explicitly send thinking controls for models that advertise
501
536
  # reasoning. Some OpenAI-compatible non-reasoning models reject even a
@@ -526,6 +561,13 @@ def create_llm(
526
561
  extra_body={"enable_thinking": thinking_on}
527
562
  )
528
563
 
564
+ # Self-hosted Qwen3.x servers (llama.cpp/vLLM/LM Studio) take the same
565
+ # `enable_thinking` toggle via the template-kwargs extra_body shape.
566
+ if is_qwen3_openai_legacy and effective_effort is not None:
567
+ chat_provider = cast(Any, chat_provider).with_generation_kwargs(
568
+ extra_body={"chat_template_kwargs": {"enable_thinking": thinking_on}}
569
+ )
570
+
529
571
  # Apply Pythinker AI-specific ``thinking.keep`` (preserved thinking) only when
530
572
  # the model is actually in thinking mode; otherwise the API would see a
531
573
  # ``thinking.keep`` without an accompanying ``thinking.type`` it honors.
@@ -663,6 +705,14 @@ def _is_glm_model(model_name: str) -> bool:
663
705
  return model_name.lower().replace("_", "-").startswith("glm-")
664
706
 
665
707
 
708
+ def _is_qwen3_model(model_name: str) -> bool:
709
+ """Qwen3.x (dense and MoE) models only support the chat template's
710
+ binary `enable_thinking` toggle, not tiered reasoning effort levels.
711
+ """
712
+ normalized = model_name.lower().replace("_", "-")
713
+ return "qwen3" in normalized or "qwen-3" in normalized
714
+
715
+
666
716
  def _is_dashscope_endpoint(base_url: str) -> bool:
667
717
  """True for any Alibaba DashScope endpoint (standard, intl, workspace)."""
668
718
  from urllib.parse import urlparse
@@ -9,7 +9,7 @@ from pythinker_core.message import Message
9
9
  from pythinker_core.tooling.empty import EmptyToolset
10
10
 
11
11
  import pythinker_code.prompts as prompts
12
- from pythinker_code.llm import LLM
12
+ from pythinker_code.llm import LLM, capped_chat_provider
13
13
  from pythinker_code.soul.api_errors import is_context_overflow_error
14
14
  from pythinker_code.soul.message import system
15
15
  from pythinker_code.utils.logging import logger
@@ -87,6 +87,11 @@ def should_prune(token_count: int, max_context_size: int, *, ratio: float) -> bo
87
87
  PRUNE_PLACEHOLDER = "[tool output elided to save context: {n} chars]"
88
88
  CAP_PLACEHOLDER = "\n[tool output capped: removed {n} chars]"
89
89
 
90
+ # A compaction summary is a short digest, not a full response — cap it well
91
+ # below the model's normal output budget so a degenerate/repetitive
92
+ # completion can't run unbounded and hang the soul loop.
93
+ _COMPACTION_MAX_OUTPUT_TOKENS = 4000
94
+
90
95
 
91
96
  def prune_stale_tool_outputs(
92
97
  messages: Sequence[Message], *, protect_last: int, min_chars: int
@@ -270,16 +275,15 @@ class SimpleCompaction:
270
275
  half is dropped and the request retried; ``(None, None)`` means even
271
276
  a single message did not fit.
272
277
 
273
- NOTE: the summary length is bounded by the chat provider's
274
- construction-time max output tokens (LLM default_max_tokens, or
275
- PYTHINKER_MODEL_MAX_TOKENS). A tighter per-call cap would require a
276
- max-tokens parameter on ``ChatProvider.generate`` (and
277
- ``pythinker_core.step``), which neither exposes today.
278
+ The summary's output length is capped at ``_COMPACTION_MAX_OUTPUT_TOKENS``
279
+ via a per-call generation kwarg (see ``capped_chat_provider``), so a
280
+ slow/degenerate completion can't run unbounded.
278
281
  """
282
+ capped_provider = capped_chat_provider(llm, _COMPACTION_MAX_OUTPUT_TOKENS)
279
283
  while True:
280
284
  try:
281
285
  result = await pythinker_core.step(
282
- chat_provider=llm.chat_provider,
286
+ chat_provider=capped_provider,
283
287
  system_prompt="You are a helpful assistant that compacts conversation context.",
284
288
  toolset=EmptyToolset(),
285
289
  history=[compact_message],
@@ -388,12 +388,17 @@ def _should_nudge_truncation(
388
388
 
389
389
 
390
390
  def _stuck_summary_message(
391
- failures: int, tool_calls: Sequence[ToolCall], tool_results: Sequence[ToolResult]
391
+ count: int,
392
+ tool_calls: Sequence[ToolCall],
393
+ tool_results: Sequence[ToolResult],
394
+ *,
395
+ reason: str = "steps each had every tool call fail",
392
396
  ) -> Message:
393
397
  """Build a concise handoff message when the loop yields on a degenerate stuck loop.
394
398
 
395
- Surfaces a count of consecutive all-error steps and a brief of what the last
396
- step tried, so the human can take over without reconstructing state.
399
+ Surfaces a count (consecutive all-error steps, or consecutive identical calls,
400
+ per ``reason``) and a brief of what the last step tried, so the human can take
401
+ over without reconstructing state.
397
402
  """
398
403
  calls_by_id = {call.id: call for call in tool_calls}
399
404
  tried: list[str] = []
@@ -409,8 +414,8 @@ def _stuck_summary_message(
409
414
  brief = brief[:200] + "…"
410
415
  tried.append(f"- {name}: {brief}")
411
416
  text = (
412
- f"I appear to be stuck — the last {failures} steps each had every tool call "
413
- "fail, so I'm stopping and handing control back to you rather than continuing.\n\n"
417
+ f"I appear to be stuck — the last {count} {reason}, so I'm stopping and "
418
+ "handing control back to you rather than continuing.\n\n"
414
419
  "What I last tried:\n" + "\n".join(tried) + "\n\n"
415
420
  "You can adjust the request, fix the underlying issue, or tell me how to proceed."
416
421
  )
@@ -2197,6 +2202,32 @@ class PythinkerSoul:
2197
2202
  return StepOutcome(stop_reason="stuck", assistant_message=summary)
2198
2203
  else:
2199
2204
  self._consecutive_failures = 0
2205
+
2206
+ # Second, independent backstop: the same tool call repeated with
2207
+ # identical arguments enough times in a row, regardless of whether
2208
+ # each call reports success — catches a tool that falsely reports
2209
+ # success on a call that never made progress, which the all-error
2210
+ # check above can't see.
2211
+ repeat_threshold = self._loop_control.max_consecutive_identical_calls
2212
+ if repeat_threshold and isinstance(self._agent.toolset, PythinkerToolset):
2213
+ repeat_count = self._agent.toolset.consecutive_repeat_count
2214
+ if repeat_count >= repeat_threshold:
2215
+ from pythinker_code.telemetry import track
2216
+
2217
+ summary = _stuck_summary_message(
2218
+ repeat_count,
2219
+ result.tool_calls,
2220
+ results,
2221
+ reason="tool calls were identical",
2222
+ )
2223
+ await self._context.append_message(summary)
2224
+ wire_send(TextPart(text=summary.extract_text(" ")))
2225
+ track(
2226
+ "agent_stuck_repeat",
2227
+ consecutive_repeat_calls=repeat_count,
2228
+ model=self._runtime.llm.model_name,
2229
+ )
2230
+ return StepOutcome(stop_reason="stuck", assistant_message=summary)
2200
2231
  return None
2201
2232
 
2202
2233
  # A tool-call-free message normally ends the turn. If it is only a
@@ -818,6 +818,16 @@ class PythinkerToolset:
818
818
  """Whether a cross-step duplicate was blocked in the current step."""
819
819
  return self._dedup_triggered
820
820
 
821
+ @property
822
+ def consecutive_repeat_count(self) -> int:
823
+ """Length of the current streak of identical-argument tool calls.
824
+
825
+ Tracked independently of each call's reported success/failure, so it
826
+ still catches a degenerate loop even if a tool falsely reports success
827
+ on a call that made no progress.
828
+ """
829
+ return self._consecutive_count
830
+
821
831
  def handle(self, tool_call: ToolCall) -> HandleResult:
822
832
  token = current_tool_call.set(tool_call)
823
833
  try:
@@ -84,7 +84,6 @@ def render_progress(snapshot: WorkflowSnapshot, max_agents: int = 6, max_logs: i
84
84
  lines = [
85
85
  f"◆ Workflow: {snapshot.name} ({snapshot.done_count}/{len(snapshot.agents)} done{state})"
86
86
  ]
87
- rendered: set[int] = set()
88
87
  phase_order = list(snapshot.phases)
89
88
  if snapshot.current_phase and snapshot.current_phase not in phase_order:
90
89
  phase_order.append(snapshot.current_phase)
@@ -95,9 +94,10 @@ def render_progress(snapshot: WorkflowSnapshot, max_agents: int = 6, max_logs: i
95
94
  done = sum(1 for a in agents if a.status == "done")
96
95
  lines.append(f" {phase} {done}/{len(agents)}")
97
96
  for agent in agents[-max_agents:]:
98
- rendered.add(agent.id)
99
97
  lines.append(f" #{agent.id} {_STATUS_ICON.get(agent.status, '?')} {agent.label}")
100
- unphased = [a for a in snapshot.agents if a.id not in rendered]
98
+ # Membership in phase_order, not an id set of rendered rows: agents cut by
99
+ # the per-phase max_agents tail must stay truncated, not reappear here.
100
+ unphased = [a for a in snapshot.agents if a.phase not in phase_order]
101
101
  for agent in unphased[-max_agents:]:
102
102
  lines.append(f" #{agent.id} {_STATUS_ICON.get(agent.status, '?')} {agent.label}")
103
103
  for message in snapshot.logs[-max_logs:]:
@@ -191,6 +191,12 @@ class WorkflowRuntimeError(Exception):
191
191
  """Raised when a workflow script misuses a primitive at runtime."""
192
192
 
193
193
 
194
+ # Lifetime cap on agent() calls per workflow run — a runaway-loop backstop
195
+ # (e.g. `while True: await agent(...)` with no token_budget set), mirroring
196
+ # the reference implementation. Set far above any real workflow.
197
+ MAX_TOTAL_AGENTS = 1000
198
+
199
+
194
200
  class AgentOptions:
195
201
  __slots__ = ("label", "phase", "schema", "model", "agent_type")
196
202
 
@@ -406,6 +412,11 @@ async def run_workflow(
406
412
  # batch instead of the whole dispatched set.
407
413
  if token_budget is not None and budget.remaining() <= 0:
408
414
  raise WorkflowRuntimeError("workflow token budget exhausted")
415
+ if state["agent_count"] >= MAX_TOTAL_AGENTS:
416
+ raise WorkflowRuntimeError(
417
+ f"workflow exceeded the {MAX_TOTAL_AGENTS}-agent lifetime cap; "
418
+ "this is a runaway-loop backstop"
419
+ )
409
420
  state["agent_count"] += 1
410
421
  # Captured into a local now, before the first `await` below: other
411
422
  # concurrently-dispatched agent() calls can advance
@@ -440,9 +451,14 @@ async def run_workflow(
440
451
 
441
452
  async def parallel(items: Sequence[Any]) -> list[Any]:
442
453
  if not isinstance(items, (list, tuple)):
454
+ # Close before raising: the argument may itself be (or contain)
455
+ # already-created agent() coroutines that would otherwise leak
456
+ # as "never awaited" warnings.
457
+ _close_coroutines(items)
443
458
  raise WorkflowRuntimeError("parallel() expects a list of awaitables")
444
459
  for item in items:
445
460
  if callable(item) and not inspect.isawaitable(item):
461
+ _close_coroutines(items)
446
462
  raise WorkflowRuntimeError(
447
463
  "parallel() expects awaitables, not functions: "
448
464
  "use parallel([agent('...'), agent('...')])"