pythinker-code 0.46.0__tar.gz → 0.47.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 (1001) hide show
  1. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/PKG-INFO +23 -23
  2. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/README.md +22 -22
  3. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/pyproject.toml +1 -1
  4. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/CHANGELOG.md +90 -0
  5. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/acp/session.py +8 -0
  6. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/agents/default/agent.yaml +4 -0
  7. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/app.py +19 -2
  8. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/cli/__init__.py +13 -2
  9. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/cli/mcp.py +104 -27
  10. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/cli/plugin.py +230 -1
  11. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/config.py +74 -0
  12. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/llm.py +8 -2
  13. pythinker_code-0.47.0/src/pythinker_code/plugin/artifacts.py +103 -0
  14. pythinker_code-0.47.0/src/pythinker_code/plugin/dependency.py +91 -0
  15. pythinker_code-0.47.0/src/pythinker_code/plugin/directories.py +94 -0
  16. pythinker_code-0.47.0/src/pythinker_code/plugin/install.py +417 -0
  17. pythinker_code-0.47.0/src/pythinker_code/plugin/installed.py +128 -0
  18. pythinker_code-0.47.0/src/pythinker_code/plugin/integration.py +251 -0
  19. pythinker_code-0.47.0/src/pythinker_code/plugin/loader.py +178 -0
  20. pythinker_code-0.47.0/src/pythinker_code/plugin/manifest.py +260 -0
  21. pythinker_code-0.47.0/src/pythinker_code/plugin/marketplace.py +208 -0
  22. pythinker_code-0.47.0/src/pythinker_code/plugin/options.py +45 -0
  23. pythinker_code-0.47.0/src/pythinker_code/plugin/policy.py +87 -0
  24. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/prompt_templates.py +5 -1
  25. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/prompts/__init__.py +5 -0
  26. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/skill/__init__.py +6 -8
  27. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/soul/agent.py +42 -17
  28. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/soul/compaction.py +39 -0
  29. pythinker_code-0.47.0/src/pythinker_code/soul/dynamic_injections/agent_list.py +85 -0
  30. pythinker_code-0.47.0/src/pythinker_code/soul/dynamic_injections/git_status.py +63 -0
  31. pythinker_code-0.47.0/src/pythinker_code/soul/live_tokens.py +47 -0
  32. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/soul/pythinkersoul.py +179 -4
  33. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/soul/toolset.py +421 -88
  34. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/subagents/discovery.py +32 -1
  35. pythinker_code-0.47.0/src/pythinker_code/telemetry/names.py +44 -0
  36. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/agent/__init__.py +63 -1
  37. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/agent/description.md +9 -0
  38. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/file/read_media.py +21 -4
  39. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/mcp_resource/__init__.py +78 -1
  40. pythinker_code-0.47.0/src/pythinker_code/tools/mcp_resource/prompt_description.md +17 -0
  41. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/plan/__init__.py +15 -1
  42. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/plan/description.md +3 -0
  43. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/recall/__init__.py +71 -10
  44. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/recall/description.md +6 -3
  45. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/todo/__init__.py +20 -0
  46. pythinker_code-0.47.0/src/pythinker_code/tools/tool_search/__init__.py +74 -0
  47. pythinker_code-0.47.0/src/pythinker_code/tools/tool_search/tool_search.md +7 -0
  48. pythinker_code-0.47.0/src/pythinker_code/tools/worktree/__init__.py +218 -0
  49. pythinker_code-0.47.0/src/pythinker_code/tools/worktree/enter_worktree.md +9 -0
  50. pythinker_code-0.47.0/src/pythinker_code/tools/worktree/exit_worktree.md +5 -0
  51. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/__init__.py +1 -1
  52. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/components/markdown.py +41 -1
  53. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/components/report.py +13 -3
  54. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/prompt.py +48 -10
  55. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/slash.py +59 -1
  56. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/tool_renderers/agent.py +69 -5
  57. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/visualize/_blocks.py +14 -3
  58. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/visualize/_interactive.py +10 -2
  59. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/visualize/_live_view.py +21 -5
  60. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/theme.py +2 -2
  61. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/utils/io.py +31 -0
  62. pythinker_code-0.47.0/src/pythinker_code/utils/mcp_names.py +60 -0
  63. pythinker_code-0.47.0/src/pythinker_code/utils/media_limits.py +20 -0
  64. pythinker_code-0.47.0/src/pythinker_code/web/static/assets/architecture-7EHR7CIX-BgGrIJTG.js +1 -0
  65. pythinker_code-0.46.0/src/pythinker_code/web/static/assets/architectureDiagram-3BPJPVTR-UoU1nAk7.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/architectureDiagram-3BPJPVTR-Czbbrggh.js +1 -1
  66. pythinker_code-0.46.0/src/pythinker_code/web/static/assets/blockDiagram-GPEHLZMM-71KoIQeZ.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/blockDiagram-GPEHLZMM-DuGxQ4gb.js +1 -1
  67. pythinker_code-0.46.0/src/pythinker_code/web/static/assets/bootstrap-B_vGg5Ny.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/bootstrap-BRW86uxF.js +5 -5
  68. pythinker_code-0.46.0/src/pythinker_code/web/static/assets/c4Diagram-AAUBKEIU-BuO74dDT.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/c4Diagram-AAUBKEIU-C9QqOozv.js +1 -1
  69. pythinker_code-0.47.0/src/pythinker_code/web/static/assets/channel-Bw8F6co7.js +1 -0
  70. pythinker_code-0.46.0/src/pythinker_code/web/static/assets/chunk-2J33WTMH-B7JEo7lz.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/chunk-2J33WTMH-CLDwXFrS.js +1 -1
  71. pythinker_code-0.46.0/src/pythinker_code/web/static/assets/chunk-3OPIFGDE-DmL9lwRX.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/chunk-3OPIFGDE-CgPHKDsU.js +1 -1
  72. pythinker_code-0.46.0/src/pythinker_code/web/static/assets/chunk-5ZQYHXKU-CBmTeQHC.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/chunk-5ZQYHXKU-DhesutHE.js +1 -1
  73. pythinker_code-0.46.0/src/pythinker_code/web/static/assets/chunk-727SXJPM-D62jKCyv.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/chunk-727SXJPM-mTEiNOi3.js +1 -1
  74. pythinker_code-0.46.0/src/pythinker_code/web/static/assets/chunk-AQP2D5EJ-BynCmQVm.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/chunk-AQP2D5EJ-DlSrZz-k.js +1 -1
  75. pythinker_code-0.46.0/src/pythinker_code/web/static/assets/chunk-CSCIHK7Q-QrY277S-.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/chunk-CSCIHK7Q-D0YCOqn9.js +1 -1
  76. pythinker_code-0.46.0/src/pythinker_code/web/static/assets/chunk-JAPRZBRM-DyAuAcwd.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/chunk-JAPRZBRM-CLY2Nkh7.js +4 -4
  77. pythinker_code-0.46.0/src/pythinker_code/web/static/assets/chunk-KSCS5N6A-B-L96nEP.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/chunk-KSCS5N6A-DbcFg-5f.js +1 -1
  78. pythinker_code-0.46.0/src/pythinker_code/web/static/assets/chunk-L5ZTLDWV-Dx2O-osv.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/chunk-L5ZTLDWV-8WkWOyc_.js +1 -1
  79. pythinker_code-0.46.0/src/pythinker_code/web/static/assets/chunk-LZXEDZCA-Ud8JWymF.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/chunk-LZXEDZCA-BUgkoo7u.js +2 -2
  80. pythinker_code-0.46.0/src/pythinker_code/web/static/assets/chunk-ND2GUHAM-D309EoC7.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/chunk-ND2GUHAM-C0HJXIEZ.js +1 -1
  81. pythinker_code-0.46.0/src/pythinker_code/web/static/assets/chunk-NZK2D7GU-CRryXTBY.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/chunk-NZK2D7GU-DBQjspgy.js +1 -1
  82. pythinker_code-0.46.0/src/pythinker_code/web/static/assets/chunk-O5CBEL6O-CG1Ia2Dd.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/chunk-O5CBEL6O-Y2JuT_28.js +1 -1
  83. pythinker_code-0.46.0/src/pythinker_code/web/static/assets/chunk-WU5MYG2G-CufdHSG9.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/chunk-WU5MYG2G-BSQmvLlf.js +1 -1
  84. pythinker_code-0.47.0/src/pythinker_code/web/static/assets/classDiagram-4FO5ZUOK-B3WrcDb4.js +1 -0
  85. pythinker_code-0.47.0/src/pythinker_code/web/static/assets/classDiagram-v2-Q7XG4LA2-B3WrcDb4.js +1 -0
  86. pythinker_code-0.46.0/src/pythinker_code/web/static/assets/code-block-IT6T5CEO-DMzMTNsT.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/code-block-IT6T5CEO-COJFtT1s.js +1 -1
  87. pythinker_code-0.46.0/src/pythinker_code/web/static/assets/dagre-BM42HDAG-DmUINU6q.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/dagre-BM42HDAG-C-63xbhz.js +1 -1
  88. pythinker_code-0.46.0/src/pythinker_code/web/static/assets/diagram-2AECGRRQ-P5YMGdQ8.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/diagram-2AECGRRQ-BA3t5dvt.js +1 -1
  89. pythinker_code-0.46.0/src/pythinker_code/web/static/assets/diagram-5GNKFQAL-BaimYqgQ.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/diagram-5GNKFQAL-Cn_tPFPy.js +1 -1
  90. pythinker_code-0.46.0/src/pythinker_code/web/static/assets/diagram-KO2AKTUF-DgpITRK9.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/diagram-KO2AKTUF-CNLlhwgh.js +1 -1
  91. pythinker_code-0.46.0/src/pythinker_code/web/static/assets/diagram-LMA3HP47-CMnhE9ZH.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/diagram-LMA3HP47-BubQEJye.js +1 -1
  92. pythinker_code-0.46.0/src/pythinker_code/web/static/assets/diagram-OG6HWLK6-BhLWHvOg.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/diagram-OG6HWLK6-B1zoPW4f.js +1 -1
  93. pythinker_code-0.46.0/src/pythinker_code/web/static/assets/dist-DPNOCkje.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/dist-C-YVtz9k.js +1 -1
  94. pythinker_code-0.46.0/src/pythinker_code/web/static/assets/erDiagram-TEJ5UH35-CHSdb2VU.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/erDiagram-TEJ5UH35-BrFwtQIS.js +1 -1
  95. pythinker_code-0.47.0/src/pythinker_code/web/static/assets/eventmodeling-FCH6USID-DjypEbTa.js +1 -0
  96. pythinker_code-0.46.0/src/pythinker_code/web/static/assets/flowDiagram-I6XJVG4X-FNGh8ANR.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/flowDiagram-I6XJVG4X-CMde8qln.js +1 -1
  97. pythinker_code-0.46.0/src/pythinker_code/web/static/assets/ganttDiagram-6RSMTGT7-BLTimgS0.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/ganttDiagram-6RSMTGT7-DqKHO3Gj.js +1 -1
  98. pythinker_code-0.46.0/src/pythinker_code/web/static/assets/gitGraph-WXDBUCRP-C3Dg6N-n.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/gitGraph-WXDBUCRP-DSsm7EeH.js +1 -1
  99. pythinker_code-0.46.0/src/pythinker_code/web/static/assets/gitGraphDiagram-PVQCEYII-BbiwVf9S.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/gitGraphDiagram-PVQCEYII-BPXFnSJu.js +1 -1
  100. pythinker_code-0.46.0/src/pythinker_code/web/static/assets/index-uSUCKoSL.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/index-DrLJ6Yzo.js +2 -2
  101. pythinker_code-0.46.0/src/pythinker_code/web/static/assets/info-J43DQDTF-BeSMeh6p.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/info-J43DQDTF-Ckpo8amK.js +1 -1
  102. pythinker_code-0.46.0/src/pythinker_code/web/static/assets/infoDiagram-5YYISTIA-BQxCJcq4.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/infoDiagram-5YYISTIA-BvhEvq2y.js +1 -1
  103. pythinker_code-0.46.0/src/pythinker_code/web/static/assets/ishikawaDiagram-YF4QCWOH-KaeLGrsH.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/ishikawaDiagram-YF4QCWOH-BGVm0gpH.js +1 -1
  104. pythinker_code-0.46.0/src/pythinker_code/web/static/assets/journeyDiagram-JHISSGLW-Kk2DXiQI.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/journeyDiagram-JHISSGLW-DGjKVrAu.js +1 -1
  105. pythinker_code-0.46.0/src/pythinker_code/web/static/assets/kanban-definition-UN3LZRKU-zn_6z8FY.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/kanban-definition-UN3LZRKU-DF4Ru5vp.js +1 -1
  106. pythinker_code-0.46.0/src/pythinker_code/web/static/assets/line-DCLS_X1f.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/line-zsX5pPNl.js +1 -1
  107. pythinker_code-0.47.0/src/pythinker_code/web/static/assets/mermaid-VLURNSYL-BY1nFAIo.js +1 -0
  108. pythinker_code-0.46.0/src/pythinker_code/web/static/assets/mermaid-parser.core-C_SVA4S7.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/mermaid-parser.core-DgXtwV12.js +2 -2
  109. pythinker_code-0.46.0/src/pythinker_code/web/static/assets/mermaid.core-ZgyZych2.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/mermaid.core-DDTnZJwj.js +3 -3
  110. pythinker_code-0.46.0/src/pythinker_code/web/static/assets/mindmap-definition-RKZ34NQL-DoPx6yXo.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/mindmap-definition-RKZ34NQL-DP-UXBwG.js +1 -1
  111. pythinker_code-0.46.0/src/pythinker_code/web/static/assets/packet-YPE3B663-DsBVFF3b.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/packet-YPE3B663-Dx3OSICL.js +1 -1
  112. pythinker_code-0.46.0/src/pythinker_code/web/static/assets/pie-LRSECV5Y-BqvyMS-y.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/pie-LRSECV5Y-IY3KukRR.js +1 -1
  113. pythinker_code-0.46.0/src/pythinker_code/web/static/assets/pieDiagram-4H26LBE5-C0o5b8QE.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/pieDiagram-4H26LBE5-Ch0k4QrE.js +1 -1
  114. pythinker_code-0.46.0/src/pythinker_code/web/static/assets/quadrantDiagram-W4KKPZXB-BeArUQAv.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/quadrantDiagram-W4KKPZXB-B8RbtJ2P.js +1 -1
  115. pythinker_code-0.46.0/src/pythinker_code/web/static/assets/radar-GUYGQ44K-B2ISte2b.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/radar-GUYGQ44K-D0YLOyN_.js +1 -1
  116. pythinker_code-0.46.0/src/pythinker_code/web/static/assets/requirementDiagram-4Y6WPE33-DZ5btT5r.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/requirementDiagram-4Y6WPE33-BTYkIO2O.js +1 -1
  117. pythinker_code-0.46.0/src/pythinker_code/web/static/assets/sankeyDiagram-5OEKKPKP-DEe_JEz3.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/sankeyDiagram-5OEKKPKP-C3lqfCj1.js +1 -1
  118. pythinker_code-0.46.0/src/pythinker_code/web/static/assets/sequenceDiagram-3UESZ5HK-BVRh_UVj.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/sequenceDiagram-3UESZ5HK-CxovAw-L.js +1 -1
  119. pythinker_code-0.46.0/src/pythinker_code/web/static/assets/stateDiagram-AJRCARHV-DAwizi72.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/stateDiagram-AJRCARHV-BAkLX0tZ.js +1 -1
  120. pythinker_code-0.47.0/src/pythinker_code/web/static/assets/stateDiagram-v2-BHNVJYJU-DsW61nNZ.js +1 -0
  121. pythinker_code-0.46.0/src/pythinker_code/web/static/assets/timeline-definition-PNZ67QCA-CLIYK9Jz.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/timeline-definition-PNZ67QCA-D8o-ffC-.js +1 -1
  122. pythinker_code-0.46.0/src/pythinker_code/web/static/assets/treeView-BLDUP644-DXcWQpz4.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/treeView-BLDUP644-CKwJMtWj.js +1 -1
  123. pythinker_code-0.46.0/src/pythinker_code/web/static/assets/treemap-LRROVOQU-D4DQ9pO_.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/treemap-LRROVOQU-0nn1YylS.js +1 -1
  124. pythinker_code-0.46.0/src/pythinker_code/web/static/assets/vennDiagram-CIIHVFJN-ChlhzFNb.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/vennDiagram-CIIHVFJN-BEkXoyJ2.js +1 -1
  125. pythinker_code-0.46.0/src/pythinker_code/web/static/assets/wardley-L42UT6IY-B0oYxi6O.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/wardley-L42UT6IY-BielzF7q.js +1 -1
  126. pythinker_code-0.46.0/src/pythinker_code/web/static/assets/wardleyDiagram-YWT4CUSO-Cr6wIf4f.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/wardleyDiagram-YWT4CUSO-CbsH-9xk.js +1 -1
  127. pythinker_code-0.46.0/src/pythinker_code/web/static/assets/xychartDiagram-2RQKCTM6-VwJzwioB.js → pythinker_code-0.47.0/src/pythinker_code/web/static/assets/xychartDiagram-2RQKCTM6-D4gCiMTY.js +1 -1
  128. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/index.html +1 -1
  129. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/wire/server.py +24 -1
  130. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/wire/types.py +81 -1
  131. pythinker_code-0.46.0/src/pythinker_code/web/static/assets/architecture-7EHR7CIX-DuYWmQ8n.js +0 -1
  132. pythinker_code-0.46.0/src/pythinker_code/web/static/assets/channel-6SKWVwR3.js +0 -1
  133. pythinker_code-0.46.0/src/pythinker_code/web/static/assets/classDiagram-4FO5ZUOK-CLfRoPJH.js +0 -1
  134. pythinker_code-0.46.0/src/pythinker_code/web/static/assets/classDiagram-v2-Q7XG4LA2-CLfRoPJH.js +0 -1
  135. pythinker_code-0.46.0/src/pythinker_code/web/static/assets/eventmodeling-FCH6USID-j7ey84Sq.js +0 -1
  136. pythinker_code-0.46.0/src/pythinker_code/web/static/assets/mermaid-VLURNSYL-BOvErqSv.js +0 -1
  137. pythinker_code-0.46.0/src/pythinker_code/web/static/assets/stateDiagram-v2-BHNVJYJU-BQ53hC4E.js +0 -1
  138. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/LICENSE +0 -0
  139. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/NOTICE +0 -0
  140. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/__init__.py +0 -0
  141. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/__main__.py +0 -0
  142. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/acp/AGENTS.md +0 -0
  143. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/acp/__init__.py +0 -0
  144. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/acp/convert.py +0 -0
  145. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/acp/host.py +0 -0
  146. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/acp/mcp.py +0 -0
  147. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/acp/server.py +0 -0
  148. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/acp/tools.py +0 -0
  149. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/acp/types.py +0 -0
  150. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/acp/version.py +0 -0
  151. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/agents/default/ask.yaml +0 -0
  152. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/agents/default/code_reviewer.yaml +0 -0
  153. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/agents/default/coder.yaml +0 -0
  154. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/agents/default/debug.yaml +0 -0
  155. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/agents/default/debugger.yaml +0 -0
  156. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/agents/default/explore.yaml +0 -0
  157. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/agents/default/implementer.yaml +0 -0
  158. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/agents/default/judge.yaml +0 -0
  159. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/agents/default/plan.yaml +0 -0
  160. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/agents/default/planner.yaml +0 -0
  161. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/agents/default/review.yaml +0 -0
  162. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/agents/default/scout.yaml +0 -0
  163. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/agents/default/security_reviewer.yaml +0 -0
  164. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/agents/default/system.md +0 -0
  165. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/agents/default/verifier.yaml +0 -0
  166. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/agents/okabe/agent.yaml +0 -0
  167. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/agentspec.py +0 -0
  168. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/approval_runtime/__init__.py +0 -0
  169. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/approval_runtime/models.py +0 -0
  170. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/approval_runtime/runtime.py +0 -0
  171. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/auth/__init__.py +0 -0
  172. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/auth/alibaba.py +0 -0
  173. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/auth/anthropic_direct.py +0 -0
  174. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/auth/browser_login_page.py +0 -0
  175. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/auth/deepseek.py +0 -0
  176. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/auth/github_feedback.py +0 -0
  177. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/auth/kimi.py +0 -0
  178. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/auth/lm_studio.py +0 -0
  179. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/auth/minimax.py +0 -0
  180. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/auth/moonshot.py +0 -0
  181. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/auth/oauth.py +0 -0
  182. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/auth/ollama.py +0 -0
  183. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/auth/openai/__init__.py +0 -0
  184. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/auth/openai/_shared.py +0 -0
  185. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/auth/openai/browser_flow.py +0 -0
  186. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/auth/openai/catalog.py +0 -0
  187. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/auth/openai/config_apply.py +0 -0
  188. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/auth/openai/constants.py +0 -0
  189. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/auth/openai/login.py +0 -0
  190. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/auth/openai/models.py +0 -0
  191. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/auth/openai/oauth_client.py +0 -0
  192. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/auth/opencode_go.py +0 -0
  193. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/auth/openrouter.py +0 -0
  194. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/auth/platforms.py +0 -0
  195. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/auth/z_ai.py +0 -0
  196. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/background/__init__.py +0 -0
  197. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/background/agent_runner.py +0 -0
  198. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/background/ids.py +0 -0
  199. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/background/manager.py +0 -0
  200. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/background/models.py +0 -0
  201. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/background/store.py +0 -0
  202. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/background/summary.py +0 -0
  203. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/background/worker.py +0 -0
  204. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/cli/__main__.py +0 -0
  205. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/cli/_lazy_group.py +0 -0
  206. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/cli/dashboard.py +0 -0
  207. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/cli/debug.py +0 -0
  208. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/cli/export.py +0 -0
  209. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/cli/info.py +0 -0
  210. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/cli/review.py +0 -0
  211. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/cli/secscan.py +0 -0
  212. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/cli/security_scan.py +0 -0
  213. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/cli/skill.py +0 -0
  214. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/cli/system_prompt.py +0 -0
  215. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/cli/toad.py +0 -0
  216. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/cli/update.py +0 -0
  217. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/cli/web.py +0 -0
  218. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/constant.py +0 -0
  219. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/dashboard/__init__.py +0 -0
  220. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/dashboard/api/__init__.py +0 -0
  221. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/dashboard/api/sessions.py +0 -0
  222. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/dashboard/api/statistics.py +0 -0
  223. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/dashboard/api/system.py +0 -0
  224. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/dashboard/app.py +0 -0
  225. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/dashboard/static/assets/highlighted-body-OFNGDK62-BxVUIXn9.js +0 -0
  226. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/dashboard/static/assets/index-DAN_VzOP.css +0 -0
  227. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/dashboard/static/assets/index-DYyxzHPY.js +0 -0
  228. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/dashboard/static/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
  229. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/dashboard/static/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
  230. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/dashboard/static/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
  231. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/dashboard/static/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
  232. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/dashboard/static/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
  233. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/dashboard/static/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
  234. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/dashboard/static/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
  235. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/dashboard/static/assets/mermaid-GHXKKRXX-BR6KjYwB.js +0 -0
  236. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/dashboard/static/index.html +0 -0
  237. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/events.py +0 -0
  238. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/exception.py +0 -0
  239. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/execution_profiles.py +0 -0
  240. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/extensions.py +0 -0
  241. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/feedback.py +0 -0
  242. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/feedback_repo.py +0 -0
  243. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/file_restore.py +0 -0
  244. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/hooks/__init__.py +0 -0
  245. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/hooks/config.py +0 -0
  246. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/hooks/engine.py +0 -0
  247. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/hooks/events.py +0 -0
  248. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/hooks/runner.py +0 -0
  249. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/memory/__init__.py +0 -0
  250. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/memory/consolidation.py +0 -0
  251. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/memory/harvest.py +0 -0
  252. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/memory/recall.py +0 -0
  253. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/memory/recap.py +0 -0
  254. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/memory/retriever.py +0 -0
  255. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/memory/sanitize.py +0 -0
  256. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/metadata.py +0 -0
  257. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/models_dev.py +0 -0
  258. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/native.py +0 -0
  259. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/notifications/__init__.py +0 -0
  260. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/notifications/llm.py +0 -0
  261. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/notifications/manager.py +0 -0
  262. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/notifications/models.py +0 -0
  263. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/notifications/notifier.py +0 -0
  264. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/notifications/store.py +0 -0
  265. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/notifications/wire.py +0 -0
  266. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/plugin/__init__.py +0 -0
  267. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/plugin/manager.py +0 -0
  268. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/plugin/tool.py +0 -0
  269. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/project_memory.py +0 -0
  270. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/project_trust.py +0 -0
  271. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/prompts/best_practices.md +0 -0
  272. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/prompts/compact.md +0 -0
  273. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/prompts/goal_continuation.md +0 -0
  274. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/prompts/goal_set.md +0 -0
  275. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/prompts/goal_wrap_up.md +0 -0
  276. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/prompts/init.md +0 -0
  277. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/prompts/learn.md +0 -0
  278. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/py.typed +0 -0
  279. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/scratchpad.py +0 -0
  280. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/session.py +0 -0
  281. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/session_cleanup.py +0 -0
  282. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/session_fork.py +0 -0
  283. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/session_recap.py +0 -0
  284. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/session_state.py +0 -0
  285. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/share.py +0 -0
  286. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/skill/flow/__init__.py +0 -0
  287. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/skill/flow/d2.py +0 -0
  288. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/skill/flow/mermaid.py +0 -0
  289. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/skill/lockfile.py +0 -0
  290. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/skills/agent-creator/SKILL.md +0 -0
  291. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/skills/check-impl-against-spec/SKILL.md +0 -0
  292. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/skills/create-pr/SKILL.md +0 -0
  293. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/skills/customize-pythinker/SKILL.md +0 -0
  294. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/skills/designer-skill/SKILL.md +0 -0
  295. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/skills/diagnose-ci-failures/SKILL.md +0 -0
  296. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/skills/fix-errors/SKILL.md +0 -0
  297. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/skills/implement-specs/SKILL.md +0 -0
  298. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/skills/pr-walkthrough/SKILL.md +0 -0
  299. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/skills/pythinker-code-help/SKILL.md +0 -0
  300. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/skills/reproduce-bug-report/SKILL.md +0 -0
  301. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/skills/resolve-merge-conflicts/SKILL.md +0 -0
  302. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/skills/review-pr/SKILL.md +0 -0
  303. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/skills/skill-creator/SKILL.md +0 -0
  304. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/skills/spec-driven-implementation/SKILL.md +0 -0
  305. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/skills/write-product-spec/SKILL.md +0 -0
  306. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/skills/write-tech-spec/SKILL.md +0 -0
  307. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/soul/__init__.py +0 -0
  308. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/soul/api_errors.py +0 -0
  309. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/soul/approval.py +0 -0
  310. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/soul/btw.py +0 -0
  311. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/soul/compaction_restore.py +0 -0
  312. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/soul/context.py +0 -0
  313. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/soul/deliberation.py +0 -0
  314. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/soul/denwarenji.py +0 -0
  315. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/soul/dynamic_injection.py +0 -0
  316. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/soul/dynamic_injections/__init__.py +0 -0
  317. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/soul/dynamic_injections/auto_mode.py +0 -0
  318. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/soul/dynamic_injections/goal_mode.py +0 -0
  319. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/soul/dynamic_injections/inline_commands.py +0 -0
  320. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/soul/dynamic_injections/model_defense.py +0 -0
  321. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/soul/dynamic_injections/orchestration.py +0 -0
  322. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/soul/dynamic_injections/permissions_state.py +0 -0
  323. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/soul/dynamic_injections/plan_mode.py +0 -0
  324. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/soul/flow_runner.py +0 -0
  325. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/soul/message.py +0 -0
  326. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/soul/permission.py +0 -0
  327. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/soul/slash.py +0 -0
  328. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/subagents/__init__.py +0 -0
  329. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/subagents/builder.py +0 -0
  330. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/subagents/codenames.py +0 -0
  331. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/subagents/core.py +0 -0
  332. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/subagents/git_context.py +0 -0
  333. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/subagents/models.py +0 -0
  334. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/subagents/output.py +0 -0
  335. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/subagents/registry.py +0 -0
  336. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/subagents/runner.py +0 -0
  337. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/subagents/store.py +0 -0
  338. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/subagents/usage.py +0 -0
  339. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/subagents/worktree.py +0 -0
  340. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/telemetry/__init__.py +0 -0
  341. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/telemetry/config.py +0 -0
  342. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/telemetry/crash.py +0 -0
  343. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/telemetry/errors.py +0 -0
  344. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/telemetry/metrics.py +0 -0
  345. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/telemetry/otel.py +0 -0
  346. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/telemetry/sentry.py +0 -0
  347. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/telemetry/sink.py +0 -0
  348. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/thinking.py +0 -0
  349. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/AGENTS.md +0 -0
  350. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/__init__.py +0 -0
  351. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/ask_user/__init__.py +0 -0
  352. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/ask_user/description.md +0 -0
  353. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/background/__init__.py +0 -0
  354. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/background/handoff.md +0 -0
  355. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/background/input.md +0 -0
  356. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/background/list.md +0 -0
  357. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/background/output.md +0 -0
  358. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/background/stop.md +0 -0
  359. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/display.py +0 -0
  360. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/dmail/__init__.py +0 -0
  361. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/dmail/dmail.md +0 -0
  362. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/file/__init__.py +0 -0
  363. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/file/glob.md +0 -0
  364. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/file/glob.py +0 -0
  365. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/file/grep.md +0 -0
  366. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/file/grep_local.py +0 -0
  367. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/file/plan_mode.py +0 -0
  368. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/file/read.md +0 -0
  369. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/file/read.py +0 -0
  370. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/file/read_media.md +0 -0
  371. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/file/replace.md +0 -0
  372. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/file/replace.py +0 -0
  373. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/file/utils.py +0 -0
  374. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/file/write.md +0 -0
  375. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/file/write.py +0 -0
  376. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/goal/__init__.py +0 -0
  377. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/goal/update_goal.md +0 -0
  378. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/mcp_resource/list_description.md +0 -0
  379. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/mcp_resource/read_description.md +0 -0
  380. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/memory/__init__.py +0 -0
  381. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/memory/memory.md +0 -0
  382. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/memory/routing_guard.py +0 -0
  383. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/plan/enter.py +0 -0
  384. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/plan/enter_description.md +0 -0
  385. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/plan/handoff.py +0 -0
  386. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/plan/heroes.py +0 -0
  387. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/progress/__init__.py +0 -0
  388. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/progress/description.md +0 -0
  389. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/scratchpad/__init__.py +0 -0
  390. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/scratchpad/scratchpad_tool.md +0 -0
  391. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/shell/__init__.py +0 -0
  392. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/shell/bash.md +0 -0
  393. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/shell/powershell.md +0 -0
  394. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/skill/__init__.py +0 -0
  395. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/skill/_mcp_bridge.py +0 -0
  396. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/skill/description.md +0 -0
  397. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/suggest/__init__.py +0 -0
  398. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/suggest/description.md +0 -0
  399. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/test.py +0 -0
  400. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/think/__init__.py +0 -0
  401. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/think/think.md +0 -0
  402. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/todo/set_todo_list.md +0 -0
  403. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/utils.py +0 -0
  404. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/web/__init__.py +0 -0
  405. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/web/_allowlist.py +0 -0
  406. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/web/fetch.md +0 -0
  407. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/web/fetch.py +0 -0
  408. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/web/search.md +0 -0
  409. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/tools/web/search.py +0 -0
  410. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/__init__.py +0 -0
  411. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/acp/__init__.py +0 -0
  412. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/color_utils.py +0 -0
  413. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/print/__init__.py +0 -0
  414. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/print/visualize.py +0 -0
  415. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/components/__init__.py +0 -0
  416. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/components/base.py +0 -0
  417. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/components/bash_execution.py +0 -0
  418. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/components/bordered_loader.py +0 -0
  419. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/components/diff.py +0 -0
  420. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/components/dynamic_border.py +0 -0
  421. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/components/footer.py +0 -0
  422. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/components/key_hints.py +0 -0
  423. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/components/messages.py +0 -0
  424. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/components/panel.py +0 -0
  425. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/components/render_utils.py +0 -0
  426. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/components/settings_list.py +0 -0
  427. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/components/special_messages.py +0 -0
  428. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/components/tool_execution.py +0 -0
  429. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/console.py +0 -0
  430. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/debug.py +0 -0
  431. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/design_system.py +0 -0
  432. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/echo.py +0 -0
  433. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/export_import.py +0 -0
  434. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/glyphs.py +0 -0
  435. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/keyboard.py +0 -0
  436. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/keymap.py +0 -0
  437. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/mcp_status.py +0 -0
  438. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/model_picker.py +0 -0
  439. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/motion.py +0 -0
  440. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/oauth.py +0 -0
  441. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/placeholders.py +0 -0
  442. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/render_constants.py +0 -0
  443. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/replay.py +0 -0
  444. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/selector.py +0 -0
  445. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/selectors/__init__.py +0 -0
  446. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/selectors/extension.py +0 -0
  447. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/selectors/oauth.py +0 -0
  448. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/selectors/settings.py +0 -0
  449. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/selectors/show_images.py +0 -0
  450. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/selectors/theme.py +0 -0
  451. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/selectors/thinking.py +0 -0
  452. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/session_picker.py +0 -0
  453. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/setup.py +0 -0
  454. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/spacing.py +0 -0
  455. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/spinner_words.py +0 -0
  456. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/startup.py +0 -0
  457. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/stats.py +0 -0
  458. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/stats_collector.py +0 -0
  459. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/stats_pricing.py +0 -0
  460. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/statusline.py +0 -0
  461. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/sync_output.py +0 -0
  462. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/task_browser.py +0 -0
  463. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/tips.py +0 -0
  464. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/tool_renderers/__init__.py +0 -0
  465. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/tool_renderers/_file_diff.py +0 -0
  466. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/tool_renderers/_render_utils.py +0 -0
  467. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/tool_renderers/ask_user.py +0 -0
  468. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/tool_renderers/background.py +0 -0
  469. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/tool_renderers/bash.py +0 -0
  470. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/tool_renderers/edit.py +0 -0
  471. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/tool_renderers/find.py +0 -0
  472. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/tool_renderers/generic.py +0 -0
  473. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/tool_renderers/grep.py +0 -0
  474. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/tool_renderers/plan.py +0 -0
  475. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/tool_renderers/read.py +0 -0
  476. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/tool_renderers/skill.py +0 -0
  477. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/tool_renderers/think.py +0 -0
  478. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/tool_renderers/todo.py +0 -0
  479. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/tool_renderers/web.py +0 -0
  480. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/tool_renderers/write.py +0 -0
  481. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/update.py +0 -0
  482. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/update_orchestrator.py +0 -0
  483. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/usage.py +0 -0
  484. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/usage_adapters/__init__.py +0 -0
  485. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/usage_adapters/alibaba.py +0 -0
  486. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/usage_adapters/anthropic_admin.py +0 -0
  487. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/usage_adapters/base.py +0 -0
  488. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/usage_adapters/deepseek.py +0 -0
  489. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/usage_adapters/minimax.py +0 -0
  490. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/usage_adapters/openai_admin.py +0 -0
  491. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/usage_adapters/openai_chatgpt.py +0 -0
  492. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/usage_adapters/opencode_go.py +0 -0
  493. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/usage_adapters/openrouter.py +0 -0
  494. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/usage_adapters/pythinker.py +0 -0
  495. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/usage_adapters/pythinker_ai.py +0 -0
  496. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/usage_render.py +0 -0
  497. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/visualize/__init__.py +0 -0
  498. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/visualize/_activity_tree.py +0 -0
  499. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/visualize/_approval_panel.py +0 -0
  500. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/visualize/_btw_panel.py +0 -0
  501. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/visualize/_dialog_shell.py +0 -0
  502. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/visualize/_input_router.py +0 -0
  503. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/visualize/_question_panel.py +0 -0
  504. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/visualize/_transcript.py +0 -0
  505. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/shell/visualize/_worklog.py +0 -0
  506. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/terminal_background.py +0 -0
  507. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/terminal_capabilities.py +0 -0
  508. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/ui/tui_config.py +0 -0
  509. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/update_policy.py +0 -0
  510. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/usage_ratelimit_cache.py +0 -0
  511. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/utils/__init__.py +0 -0
  512. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/utils/aiohttp.py +0 -0
  513. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/utils/aioqueue.py +0 -0
  514. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/utils/artifacts.py +0 -0
  515. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/utils/broadcast.py +0 -0
  516. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/utils/changelog.py +0 -0
  517. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/utils/clipboard.py +0 -0
  518. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/utils/datetime.py +0 -0
  519. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/utils/diff.py +0 -0
  520. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/utils/editor.py +0 -0
  521. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/utils/environment.py +0 -0
  522. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/utils/envvar.py +0 -0
  523. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/utils/export.py +0 -0
  524. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/utils/file_filter.py +0 -0
  525. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/utils/file_read_cache.py +0 -0
  526. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/utils/frontmatter.py +0 -0
  527. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/utils/gitignore.py +0 -0
  528. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/utils/logging.py +0 -0
  529. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/utils/media_tags.py +0 -0
  530. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/utils/message.py +0 -0
  531. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/utils/path.py +0 -0
  532. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/utils/proctitle.py +0 -0
  533. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/utils/proxy.py +0 -0
  534. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/utils/pyinstaller.py +0 -0
  535. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/utils/rich/__init__.py +0 -0
  536. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/utils/rich/columns.py +0 -0
  537. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/utils/rich/diff_render.py +0 -0
  538. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/utils/rich/markdown.py +0 -0
  539. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/utils/rich/markdown_sample.md +0 -0
  540. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/utils/rich/markdown_sample_short.md +0 -0
  541. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/utils/rich/syntax.py +0 -0
  542. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/utils/sensitive.py +0 -0
  543. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/utils/server.py +0 -0
  544. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/utils/signals.py +0 -0
  545. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/utils/slashcmd.py +0 -0
  546. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/utils/sleep_inhibitor.py +0 -0
  547. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/utils/string.py +0 -0
  548. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/utils/subprocess_env.py +0 -0
  549. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/utils/term.py +0 -0
  550. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/utils/trust.py +0 -0
  551. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/utils/typing.py +0 -0
  552. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/__init__.py +0 -0
  553. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/api/__init__.py +0 -0
  554. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/api/config.py +0 -0
  555. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/api/open_in.py +0 -0
  556. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/api/sessions.py +0 -0
  557. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/app.py +0 -0
  558. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/auth.py +0 -0
  559. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/models.py +0 -0
  560. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/runner/__init__.py +0 -0
  561. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/runner/messages.py +0 -0
  562. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/runner/process.py +0 -0
  563. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/runner/worker.py +0 -0
  564. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/_headers +0 -0
  565. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  566. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  567. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  568. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  569. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  570. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  571. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  572. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  573. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  574. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  575. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  576. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  577. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  578. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  579. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  580. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  581. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  582. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  583. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  584. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  585. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  586. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  587. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  588. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  589. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  590. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  591. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  592. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  593. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  594. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  595. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  596. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  597. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  598. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  599. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  600. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  601. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  602. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  603. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  604. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  605. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  606. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  607. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  608. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  609. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  610. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  611. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  612. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  613. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  614. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  615. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  616. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  617. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  618. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  619. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  620. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  621. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  622. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  623. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  624. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/abap-CLvhMVsD.js +0 -0
  625. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/actionscript-3--17pq3dv.js +0 -0
  626. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/ada-C5qYipkI.js +0 -0
  627. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/andromeeda-vGVdxbeo.js +0 -0
  628. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/angular-html-BKhkKBsm.js +0 -0
  629. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/angular-ts-CYPbMJCA.js +0 -0
  630. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/apache-U0d_L8uA.js +0 -0
  631. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/apex-CGTLDQj6.js +0 -0
  632. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/apl-D7bENxmy.js +0 -0
  633. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/applescript-CCn79oCD.js +0 -0
  634. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/ara-4CJ0cIlV.js +0 -0
  635. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/arc-8BWbC-0s.js +0 -0
  636. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/array-BifhSqXX.js +0 -0
  637. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/asciidoc-DE70LPWp.js +0 -0
  638. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/asm-Cmm7eHzH.js +0 -0
  639. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/astro-B1l9MDUT.js +0 -0
  640. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/aurora-x-CDeNXAV0.js +0 -0
  641. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/awk-BWXHIvNe.js +0 -0
  642. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/ayu-dark-DluEY0Gj.js +0 -0
  643. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/ayu-light-C3h-C4tm.js +0 -0
  644. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/ayu-mirage-Bqwy1Gya.js +0 -0
  645. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/ballerina-B7ZEbQpA.js +0 -0
  646. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/bat-Bo4NYOV-.js +0 -0
  647. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/beancount-D-usSTwE.js +0 -0
  648. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/berry-DKpUyyne.js +0 -0
  649. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/bibtex-Ci_nEsc7.js +0 -0
  650. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/bicep-CUHmPFLl.js +0 -0
  651. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/bird2-C2hNVINV.js +0 -0
  652. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/blade-BlkqRXu6.js +0 -0
  653. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/bootstrap-BhLLvBaE.css +0 -0
  654. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/bsl-BkkzgIyY.js +0 -0
  655. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/c-PpPxyn8g.js +0 -0
  656. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/c3-CnJL0r0V.js +0 -0
  657. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/cadence-CQ2zXKGN.js +0 -0
  658. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/cairo-DLTphjLi.js +0 -0
  659. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/catppuccin-frappe-3VR1Za6u.js +0 -0
  660. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/catppuccin-latte-DwIHMF0Q.js +0 -0
  661. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/catppuccin-macchiato-DYnBP6_5.js +0 -0
  662. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/catppuccin-mocha-DYhrFGRu.js +0 -0
  663. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/character-entities-legacy-Wut6vMuj.js +0 -0
  664. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/chevrons-up-down-Dwo0Il5v.js +0 -0
  665. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/chunk-4BX2VUAB-C0kf5ycP.js +0 -0
  666. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/chunk-55IACEB6-QyFAFTWp.js +0 -0
  667. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/chunk-BSJP7CBP-DIpfLhEz.js +0 -0
  668. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/chunk-Cyuzqnbw.js +0 -0
  669. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/chunk-FMBD7UC4-C9D6P7Uq.js +0 -0
  670. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/chunk-NNHCCRGN-DmZbXBJw.js +0 -0
  671. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/chunk-QZHKN3VN-CyVdgm44.js +0 -0
  672. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/chunk-XPW4576I-ru3A962d.js +0 -0
  673. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/clarity-SemFz856.js +0 -0
  674. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/clojure-DqKBuwfJ.js +0 -0
  675. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/cmake-Bj61d0ZC.js +0 -0
  676. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/cobol-BoXxFQjh.js +0 -0
  677. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/codeowners-C8r90Shi.js +0 -0
  678. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/codeql-oeQT6MSM.js +0 -0
  679. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/coffee-B5TREocO.js +0 -0
  680. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/common-lisp-Cv5bFMCO.js +0 -0
  681. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/coq-BrsZFFmf.js +0 -0
  682. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/cose-bilkent-S5V4N54A-PjRvINHM.js +0 -0
  683. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/cpp-CVIk4zoB.js +0 -0
  684. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/crystal-CvUuUt6_.js +0 -0
  685. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/csharp-Ct8U2NOr.js +0 -0
  686. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/css-D7o5g6xi.js +0 -0
  687. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/csv-Dx-8-gkx.js +0 -0
  688. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/cue-CE9AQfxI.js +0 -0
  689. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/cypher-ClKdZ_lG.js +0 -0
  690. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/cytoscape.esm-jXPf2pm4.js +0 -0
  691. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/d-qD-0Kul2.js +0 -0
  692. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/dagre-Uyq5yTtG.js +0 -0
  693. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/dark-plus-Cs2F2srj.js +0 -0
  694. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/dart-DkHntEIa.js +0 -0
  695. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/dax-BkyTk9wS.js +0 -0
  696. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/defaultLocale-C8Fc0cco.js +0 -0
  697. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/desktop-Dlh5hvp9.js +0 -0
  698. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/diff-BDNflWRl.js +0 -0
  699. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/diff-Dvab7kiv.css +0 -0
  700. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/diff-woXpYk--.js +0 -0
  701. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/dist-B7jLwIkG.js +0 -0
  702. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/dist-D4B_Bs5p.js +0 -0
  703. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/dist-reBDvVlc.js +0 -0
  704. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/docker-IyjqRm3v.js +0 -0
  705. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/dotenv-_5a1GRtc.js +0 -0
  706. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/dracula-BHWKrbxM.js +0 -0
  707. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/dracula-soft-5eyTD99u.js +0 -0
  708. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/dream-maker-DW3nJb8Q.js +0 -0
  709. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/edge-CmXZi-az.js +0 -0
  710. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/elixir-BoRIkjDi.js +0 -0
  711. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/elm-Cm7sFdI1.js +0 -0
  712. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/emacs-lisp-C9PiwqqW.js +0 -0
  713. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/erb-DuMAGb6i.js +0 -0
  714. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/erlang-Cphh6RMH.js +0 -0
  715. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/everforest-dark-sB-x3p7T.js +0 -0
  716. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/everforest-light-Df2xbC6M.js +0 -0
  717. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/fennel-DQxkIbk2.js +0 -0
  718. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/fish-BJitypiv.js +0 -0
  719. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/fluent-C03EYrpw.js +0 -0
  720. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/fortran-fixed-form-DEKoE2YW.js +0 -0
  721. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/fortran-free-form-CYNrtFtB.js +0 -0
  722. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/fsharp-D13ZGOAj.js +0 -0
  723. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/gdresource-C0sCabJj.js +0 -0
  724. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/gdscript-Cp2uCuqX.js +0 -0
  725. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/gdshader-CBce3t8t.js +0 -0
  726. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/genie-CV2tkWYe.js +0 -0
  727. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/gherkin-DExj1W_8.js +0 -0
  728. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/git-commit-BSykSTBG.js +0 -0
  729. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/git-rebase-D2tSwjJb.js +0 -0
  730. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/github-dark-C-LZuMrd.js +0 -0
  731. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/github-dark-default-DXG-b-1a.js +0 -0
  732. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/github-dark-dimmed-Bx1FflLF.js +0 -0
  733. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/github-dark-high-contrast-B_tTalzw.js +0 -0
  734. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/github-light-EUqPIrTm.js +0 -0
  735. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/github-light-default-BXViO-2h.js +0 -0
  736. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/github-light-high-contrast-B68TUdTA.js +0 -0
  737. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/gleam-CSRkHgEL.js +0 -0
  738. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/glimmer-js--VVKNatA.js +0 -0
  739. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/glimmer-ts-Bfa_wiNC.js +0 -0
  740. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/glsl-MPwHyiXQ.js +0 -0
  741. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/gn-ilITqXS6.js +0 -0
  742. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/gnuplot-7GGW24-e.js +0 -0
  743. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/go-BJwz_mda.js +0 -0
  744. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/graphlib-C22s9MDV.js +0 -0
  745. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/graphql-NW854Khs.js +0 -0
  746. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/groovy-CacY0gHj.js +0 -0
  747. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/gruvbox-dark-hard-C820rvS2.js +0 -0
  748. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/gruvbox-dark-medium-BPjhmG05.js +0 -0
  749. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/gruvbox-dark-soft-MrdJrrXF.js +0 -0
  750. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/gruvbox-light-hard-BC_s9l72.js +0 -0
  751. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/gruvbox-light-medium-BAWPOn9u.js +0 -0
  752. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/gruvbox-light-soft-BSMLrYjP.js +0 -0
  753. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/hack-CSl79E5u.js +0 -0
  754. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/haml-Dmb1YmHj.js +0 -0
  755. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/handlebars-Du8DtnRB.js +0 -0
  756. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/haskell-D8IpX4py.js +0 -0
  757. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/haxe-OTjmBuCE.js +0 -0
  758. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/hcl-Dh228itO.js +0 -0
  759. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/hjson-CxZEssPk.js +0 -0
  760. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/hlsl-Cvrh5tZx.js +0 -0
  761. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/horizon-CE9ld1lL.js +0 -0
  762. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/horizon-bright-Br1oVSNq.js +0 -0
  763. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/houston-CsvMBhTu.js +0 -0
  764. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/html-Kpl3bQKd.js +0 -0
  765. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/html-derivative-BEEWNZ8Y.js +0 -0
  766. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/http-HvMG3K54.js +0 -0
  767. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/hurl-CLh1t2ES.js +0 -0
  768. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/hxml-B0Qn7Nwc.js +0 -0
  769. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/hy-CZbG8q4J.js +0 -0
  770. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/imba-DsUTQ-LC.js +0 -0
  771. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/ini-B5eOa1yu.js +0 -0
  772. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/init-D6jRqBbL.js +0 -0
  773. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
  774. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
  775. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
  776. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
  777. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
  778. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
  779. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
  780. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/java-Cst_eZTE.js +0 -0
  781. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/javascript-i_rUTyCW.js +0 -0
  782. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/jinja-CaXggA6f.js +0 -0
  783. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/jison-D9Fg2JgN.js +0 -0
  784. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/json-DS5j4FfK.js +0 -0
  785. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/json5-BR5RXkoi.js +0 -0
  786. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/jsonc-CYpm1nAK.js +0 -0
  787. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/jsonl-CmCQp5Yx.js +0 -0
  788. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/jsonnet-CJTPZ8u_.js +0 -0
  789. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/jssm-DXw9l8Rf.js +0 -0
  790. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/jsx-CFyhNHav.js +0 -0
  791. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/jsx-runtime-wSvXh6gi.js +0 -0
  792. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/julia-R8NNmfP1.js +0 -0
  793. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/just-BhhHYlS8.js +0 -0
  794. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/kanagawa-dragon-CXtmUGW6.js +0 -0
  795. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/kanagawa-lotus-BN08jTvb.js +0 -0
  796. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/kanagawa-wave-CTweb8Dz.js +0 -0
  797. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/katex-BGaDVET_.js +0 -0
  798. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/katex-BorAY7qD.css +0 -0
  799. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/kdl-CsD5j6eV.js +0 -0
  800. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/kotlin-DhhofPvG.js +0 -0
  801. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/kusto-BUv0MjJC.js +0 -0
  802. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/laserwave-C_8bwKvT.js +0 -0
  803. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/latex-D5k_uhWv.js +0 -0
  804. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/lean-CewbzKMR.js +0 -0
  805. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/less-DVTAwKKz.js +0 -0
  806. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/lib-BLxG8W6T.js +0 -0
  807. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/libesm-8-2luV-1.js +0 -0
  808. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/light-plus-DVQuIRkW.js +0 -0
  809. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/linear-BktLjFGX.js +0 -0
  810. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/liquid-Q0_hzjly.js +0 -0
  811. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/llvm-Cm23YOpf.js +0 -0
  812. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/log-BNLmms1o.js +0 -0
  813. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/logo-Cluzi2Zq.js +0 -0
  814. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/lua-VoGSg0xb.js +0 -0
  815. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/luau-CNKltnaQ.js +0 -0
  816. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/make-Dixweg8N.js +0 -0
  817. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/markdown-BYOwaDjH.js +0 -0
  818. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/marked.esm-DLdcrU5H.js +0 -0
  819. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/marko-D_aeUD__.js +0 -0
  820. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/material-theme-Bm3Qr25_.js +0 -0
  821. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/material-theme-darker-2IIEA8gg.js +0 -0
  822. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/material-theme-lighter-uhdI0v04.js +0 -0
  823. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/material-theme-ocean-CHQ94UKr.js +0 -0
  824. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/material-theme-palenight-B5W6OYN7.js +0 -0
  825. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/matlab-D7qyCx1q.js +0 -0
  826. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/mdc-BSifqehP.js +0 -0
  827. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/mdx-DQZ5AkYe.js +0 -0
  828. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/mermaid-Bk4SNUv9.js +0 -0
  829. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/min-dark-BSWPekZh.js +0 -0
  830. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/min-light-DDpmG2fV.js +0 -0
  831. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/mipsasm-BMqwQI7S.js +0 -0
  832. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/mojo-BgCJLMeH.js +0 -0
  833. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/monokai-CdkpiU2Y.js +0 -0
  834. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/moonbit-CaWjb8XO.js +0 -0
  835. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/move-B1IS1UjX.js +0 -0
  836. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/narrat-_X_XdTYD.js +0 -0
  837. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/nextflow-Bbiyy34d.js +0 -0
  838. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/nextflow-groovy-Dc_ddanL.js +0 -0
  839. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/nginx-CgHaWcsO.js +0 -0
  840. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/night-owl-DhmEMT88.js +0 -0
  841. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/night-owl-light-eJ-hLW7d.js +0 -0
  842. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/nim-BuixXxPS.js +0 -0
  843. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/nix-IvuFDN5E.js +0 -0
  844. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/nord-Cb4Vim4T.js +0 -0
  845. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/nushell-DcLAeLz5.js +0 -0
  846. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/objective-c-D1A_Heim.js +0 -0
  847. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/objective-cpp-BsSzOQcm.js +0 -0
  848. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/ocaml-O90oeIOV.js +0 -0
  849. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/odin-B1RWQWA5.js +0 -0
  850. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/one-dark-pro-CLwyXe_n.js +0 -0
  851. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/one-light-D7Lr4KcI.js +0 -0
  852. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/openscad-BUDT5pXO.js +0 -0
  853. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/ordinal-hYBb2elL.js +0 -0
  854. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/pascal-4ZHwLPI5.js +0 -0
  855. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/path-BWPyau1x.js +0 -0
  856. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/perl-BLMySlFJ.js +0 -0
  857. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/php-Czf_fybR.js +0 -0
  858. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/pkl-ot-7Btpt.js +0 -0
  859. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/plastic-DQwYfKfQ.js +0 -0
  860. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/plsql-DGHpHOYJ.js +0 -0
  861. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/po-BiJDBrnU.js +0 -0
  862. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/poimandres-DRFjx7u4.js +0 -0
  863. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/polar-C7UOKdEL.js +0 -0
  864. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/postcss-BXeXVLqQ.js +0 -0
  865. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/powerquery-DNMTfnFr.js +0 -0
  866. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/powershell-DshXNtvi.js +0 -0
  867. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/prisma-BsRQq5mF.js +0 -0
  868. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/prolog-iXnhIJG7.js +0 -0
  869. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/proto-DB4EqR-F.js +0 -0
  870. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/pug-CsZglf8T.js +0 -0
  871. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/puppet-CDv2pdJW.js +0 -0
  872. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/purescript-9MfHhQsQ.js +0 -0
  873. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/python-gzcpVVnB.js +0 -0
  874. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/qml-DcW_sT3t.js +0 -0
  875. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/qmldir-DCQb3MpD.js +0 -0
  876. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/qss-Fe1Jh2GI.js +0 -0
  877. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/r-D2d3McyU.js +0 -0
  878. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/racket-DcIDlBhZ.js +0 -0
  879. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/raku-B3gFvitq.js +0 -0
  880. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/razor-oFpUW61Z.js +0 -0
  881. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/red-CJ3rzSJv.js +0 -0
  882. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/reg-CRGYupPL.js +0 -0
  883. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/regexp-Bu0flJgP.js +0 -0
  884. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/rel-BtDbiS_P.js +0 -0
  885. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/riscv-Ckw8ddFX.js +0 -0
  886. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/ron-VUp2lXgN.js +0 -0
  887. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/rose-pine-BthvhNj6.js +0 -0
  888. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/rose-pine-dawn-Dg85fqjY.js +0 -0
  889. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/rose-pine-moon-hon4tzzS.js +0 -0
  890. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/rosmsg-CAekHB0j.js +0 -0
  891. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/rough.esm-CSKSodPl.js +0 -0
  892. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/rst-U6Eu7ipE.js +0 -0
  893. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/ruby-CUQsVT6d.js +0 -0
  894. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/rust-Cfkwpbl8.js +0 -0
  895. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/sas-CNBFrLhc.js +0 -0
  896. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/sass-DXrisJhu.js +0 -0
  897. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/scala-DKOlJaKm.js +0 -0
  898. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/scheme-DQCgrYNe.js +0 -0
  899. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/scss-CPnU-uuv.js +0 -0
  900. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/sdbl-bTVj8UrX.js +0 -0
  901. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/shaderlab-TOUzSsQk.js +0 -0
  902. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/shellscript-BbTp1yjG.js +0 -0
  903. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/shellsession-BmAC8SMF.js +0 -0
  904. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/slack-dark-DnToyrRv.js +0 -0
  905. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/slack-ochin-B2OO5cIa.js +0 -0
  906. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/smalltalk-B16xEiuN.js +0 -0
  907. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/snazzy-light-4G7pJPwS.js +0 -0
  908. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/solarized-dark-DV17i1UV.js +0 -0
  909. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/solarized-light-DSh2HLQt.js +0 -0
  910. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/solidity-CKzVLygQ.js +0 -0
  911. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/soy-CdbyEXp6.js +0 -0
  912. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/space-separated-tokens-DpjE5PGy.js +0 -0
  913. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/sparql-D_iOobhT.js +0 -0
  914. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/splunk-BC2Px7Mm.js +0 -0
  915. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/sql-hpBkusIy.js +0 -0
  916. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/src-D-NMWEou.js +0 -0
  917. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/ssh-config-BgfXC-Er.js +0 -0
  918. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/stata-DVbvk3qH.js +0 -0
  919. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/stylus-B6D30XZt.js +0 -0
  920. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/surrealql-DxccxuMd.js +0 -0
  921. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/svelte-DzNm5V2w.js +0 -0
  922. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/swift-DonLKvLd.js +0 -0
  923. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/synthwave-84-nFMaYfgc.js +0 -0
  924. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/system-verilog-DJ5XKQeo.js +0 -0
  925. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/systemd-BxMlprV5.js +0 -0
  926. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/talonscript-CohzipZa.js +0 -0
  927. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/tasl-DMoTqEGO.js +0 -0
  928. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/tcl-CZd0xW_V.js +0 -0
  929. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/templ-CsM0tTsw.js +0 -0
  930. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/terraform-DswuEJGm.js +0 -0
  931. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/tex-B0f_hYr8.js +0 -0
  932. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/tokyo-night-oM2G3aXe.js +0 -0
  933. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/toml-CcmNWLt0.js +0 -0
  934. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/ts-tags-Bf-FGGvT.js +0 -0
  935. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/tsv-sltzmVWM.js +0 -0
  936. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/tsx-DFvk7AwW.js +0 -0
  937. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/turtle-ByJddavk.js +0 -0
  938. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/twig-VJ4-Ntm0.js +0 -0
  939. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/typescript-DHTLvXzV.js +0 -0
  940. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/typespec-B88KGewJ.js +0 -0
  941. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/typst-DI99ib-x.js +0 -0
  942. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/v-DETTlOr0.js +0 -0
  943. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/v4-DqR3yzBO.js +0 -0
  944. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/vala-zf12oZj6.js +0 -0
  945. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/vb-Djn5o6TS.js +0 -0
  946. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/verilog-CiiDBU1e.js +0 -0
  947. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/vesper-D5bVUKB1.js +0 -0
  948. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/vhdl-BroJfC0k.js +0 -0
  949. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/viml-DvXPmvsu.js +0 -0
  950. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/vitesse-black-fwtXNY1n.js +0 -0
  951. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/vitesse-dark-BZCL-v6S.js +0 -0
  952. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/vitesse-light-VbXTXTou.js +0 -0
  953. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/vue-D3dSYZKz.js +0 -0
  954. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/vue-html-DQch_7VQ.js +0 -0
  955. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/vue-vine-B67Dz05t.js +0 -0
  956. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/vyper-CgoNMtux.js +0 -0
  957. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/wasm-BnjxR4X6.js +0 -0
  958. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/wasm-ByWQv1Qj.js +0 -0
  959. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/wenyan-C8pVoKbM.js +0 -0
  960. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/wgsl-BsKzXJz4.js +0 -0
  961. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/wikitext-ClFFjSW2.js +0 -0
  962. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/wit-DdvCle-K.js +0 -0
  963. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/wolfram-DLL8P-h_.js +0 -0
  964. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/xml-C33zriiW.js +0 -0
  965. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/xsl-BFS2wyMt.js +0 -0
  966. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/yaml-w0rMsuN4.js +0 -0
  967. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/zenscript-BnlCZFoB.js +0 -0
  968. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/assets/zig-CMLA9XwU.js +0 -0
  969. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/brand/apple-touch-icon.png +0 -0
  970. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/brand/arctecture.webp +0 -0
  971. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/brand/bimi-logo.svg +0 -0
  972. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/brand/favicon.ico +0 -0
  973. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/brand/fonts/dm-sans-latin-ext.woff2 +0 -0
  974. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/brand/fonts/dm-sans-latin.woff2 +0 -0
  975. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/brand/fonts/instrument-sans-latin-ext.woff2 +0 -0
  976. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/brand/fonts/instrument-sans-latin.woff2 +0 -0
  977. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/brand/fonts/instrument-serif-latin-ext.woff2 +0 -0
  978. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/brand/fonts/instrument-serif-latin.woff2 +0 -0
  979. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-italic-latin-ext.woff2 +0 -0
  980. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-italic-latin.woff2 +0 -0
  981. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-latin-ext.woff2 +0 -0
  982. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/brand/fonts/libre-baskerville-latin.woff2 +0 -0
  983. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/brand/fonts/roboto-latin-ext.woff2 +0 -0
  984. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/brand/fonts/roboto-latin.woff2 +0 -0
  985. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/brand/icon-192.png +0 -0
  986. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/brand/icon-512.png +0 -0
  987. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/brand/icon.svg +0 -0
  988. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/brand/logo.png +0 -0
  989. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/brand/pythinker_animated.svg +0 -0
  990. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/brand/robots.txt +0 -0
  991. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/install.ps1 +0 -0
  992. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/install.sh +0 -0
  993. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/static/logo.png +0 -0
  994. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/store/__init__.py +0 -0
  995. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/web/store/sessions.py +0 -0
  996. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/wire/__init__.py +0 -0
  997. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/wire/file.py +0 -0
  998. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/wire/jsonrpc.py +0 -0
  999. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/wire/protocol.py +0 -0
  1000. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/wire/root_hub.py +0 -0
  1001. {pythinker_code-0.46.0 → pythinker_code-0.47.0}/src/pythinker_code/wire/serde.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pythinker-code
3
- Version: 0.46.0
3
+ Version: 0.47.0
4
4
  Summary: Pythinker — an agentic CLI developed by Pythoughts-labs.
5
5
  Keywords: cli,agent,ai,coding-assistant,llm,claude,openai,terminal
6
6
  Author: Pythoughts-labs
@@ -115,13 +115,13 @@ It speaks the [**Agent Client Protocol (ACP)**](https://github.com/agentclientpr
115
115
 
116
116
  ---
117
117
 
118
- ## 🆕 What's New in 0.46.0
118
+ ## 🆕 What's New in 0.47.0
119
119
 
120
- - **Faster auto-update detection.** The background startup update check now runs every 30 minutes instead of once a day, so a freshly published release is picked up within the hour rather than after a full day. A transient network error at startup is retried on the next launch instead of suppressing updates for the whole window.
121
- - **Persistent update notice under the prompt.** When a newer release is available, a yellow `↑ Update available — vX · /update` line sits directly under the input; after a background install it switches to a restart-to-apply message, then clears once you restart onto the new version. It stays out of the way for dismissed versions, disabled auto-update, and source checkouts.
122
- - **Welcome banner robot stays visible in narrow terminals.** Below ~68 columns the robot mark now stacks centered above the welcome copy instead of being dropped, so it stays on screen at any width that can render its Unicode glyphs.
120
+ - **Plugin marketplace.** `pythinker plugin marketplace` installs Claude/Codex-compatible plugins. Safe artifacts (skills, commands, agents) auto-activate; executable artifacts (hooks, MCP servers) stay opt-in. Plugin dependencies install transitively; `plugins.options` fills `${user_config.KEY}` placeholders in hook and MCP configs.
121
+ - **Live MCP management.** `/mcp disconnect`, `/mcp reconnect`, and `/mcp refresh` update a single server's toolset without restarting. Connected servers now push `tools/list_changed` notifications, so the agent's tool inventory stays current automatically.
122
+ - **Agent-loop hardening.** Root sessions receive a bounded git snapshot in the prompt (`git_status_injection`). `ToolSearch`, `EnterWorktree`, and `ExitWorktree` let agents discover live capabilities and isolate work in a git worktree. Proactive compaction failures hand off explicitly instead of aborting; the spend-ceiling nudge warns before the `budget_exhausted` stop.
123
123
 
124
- Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.46.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.47.0`, or use the native installer for your platform from the [Releases page](https://github.com/Pythoughts-labs/pythinker-code/releases/latest).
125
125
 
126
126
 
127
127
  ---
@@ -211,7 +211,7 @@ matches your OS — no Python, Node, or `uv` prerequisite.
211
211
 
212
212
  | Platform | Recommended install | Artifact source |
213
213
  |---|---|---|
214
- | **🪟 Windows** | `irm https://pythinker.com/install.ps1 \| iex` | `PythinkerSetup-0.46.0.exe` from [Releases](https://github.com/Pythoughts-labs/pythinker-code/releases/latest) |
214
+ | **🪟 Windows** | `irm https://pythinker.com/install.ps1 \| iex` | `PythinkerSetup-0.47.0.exe` from [Releases](https://github.com/Pythoughts-labs/pythinker-code/releases/latest) |
215
215
  | **<img src="https://img.shields.io/badge/-macOS-000000?style=flat-square&logo=apple&logoColor=white" alt="macOS"> / <img src="https://img.shields.io/badge/-Linux-FCC624?style=flat-square&logo=linux&logoColor=black" alt="Linux">** | `curl -fsSL https://pythinker.com/install.sh \| bash` | native tarball from [Releases](https://github.com/Pythoughts-labs/pythinker-code/releases/latest) |
216
216
  | **<img src="https://img.shields.io/badge/-macOS-000000?style=flat-square&logo=apple&logoColor=white" alt="macOS"> — Homebrew** | `brew install Pythoughts-labs/pythinker/pythinker-code` | auto-published Homebrew tap |
217
217
  | **🐳 Docker** | `docker run --rm -it ghcr.io/pythoughts-labs/pythinker-code` | GHCR multi-arch image |
@@ -239,7 +239,7 @@ pythinker # start the interactive TUI
239
239
 
240
240
  ### 🪟 Windows — native installer
241
241
 
242
- `PythinkerSetup-0.46.0.exe` is a signed* Inno Setup wizard. Installs per-user
242
+ `PythinkerSetup-0.47.0.exe` is a signed* Inno Setup wizard. Installs per-user
243
243
  into `%LOCALAPPDATA%\Programs\Pythinker`, registers `pythinker` on your user
244
244
  PATH (`HKCU\Environment`), broadcasts `WM_SETTINGCHANGE` so new shells see
245
245
  the change. **No UAC prompt.**
@@ -250,13 +250,13 @@ irm https://pythinker.com/install.ps1 | iex
250
250
 
251
251
  # Or manually download the installer + checksum from the Releases page,
252
252
  # verify with Get-FileHash, then run:
253
- .\PythinkerSetup-0.46.0.exe
253
+ .\PythinkerSetup-0.47.0.exe
254
254
 
255
255
  # Open a fresh PowerShell
256
256
  pythinker --version
257
257
  ```
258
258
 
259
- **Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.46.0.exe /ALLUSERS`
259
+ **Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.47.0.exe /ALLUSERS`
260
260
  installs to `%ProgramFiles%\Pythinker` and writes PATH to HKLM (requires admin).
261
261
 
262
262
  **Upgrade:** `pythinker update` from inside the running app — it downloads
@@ -314,26 +314,26 @@ attached to every GitHub Release.
314
314
 
315
315
  ```sh
316
316
  # Debian / Ubuntu (x86_64)
317
- sudo dpkg -i pythinker-code_0.46.0_amd64.deb
317
+ sudo dpkg -i pythinker-code_0.47.0_amd64.deb
318
318
  sudo apt-get install -f # only if dpkg reports missing deps
319
319
 
320
320
  # Debian / Ubuntu (ARM64)
321
- sudo dpkg -i pythinker-code_0.46.0_arm64.deb
321
+ sudo dpkg -i pythinker-code_0.47.0_arm64.deb
322
322
 
323
323
  # Fedora / RHEL / openSUSE (x86_64)
324
- curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.46.0/pythinker-code-0.46.0.x86_64.rpm
325
- curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.46.0/pythinker-code-0.46.0.x86_64.rpm.sha256
326
- sha256sum -c pythinker-code-0.46.0.x86_64.rpm.sha256
324
+ curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.47.0/pythinker-code-0.47.0.x86_64.rpm
325
+ curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.47.0/pythinker-code-0.47.0.x86_64.rpm.sha256
326
+ sha256sum -c pythinker-code-0.47.0.x86_64.rpm.sha256
327
327
  # Fedora / RHEL:
328
- sudo dnf install ./pythinker-code-0.46.0.x86_64.rpm
328
+ sudo dnf install ./pythinker-code-0.47.0.x86_64.rpm
329
329
  # openSUSE:
330
- sudo zypper install ./pythinker-code-0.46.0.x86_64.rpm
330
+ sudo zypper install ./pythinker-code-0.47.0.x86_64.rpm
331
331
 
332
332
  # Fedora / RHEL (aarch64)
333
- curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.46.0/pythinker-code-0.46.0.aarch64.rpm
334
- curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.46.0/pythinker-code-0.46.0.aarch64.rpm.sha256
335
- sha256sum -c pythinker-code-0.46.0.aarch64.rpm.sha256
336
- sudo dnf install ./pythinker-code-0.46.0.aarch64.rpm
333
+ curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.47.0/pythinker-code-0.47.0.aarch64.rpm
334
+ curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.47.0/pythinker-code-0.47.0.aarch64.rpm.sha256
335
+ sha256sum -c pythinker-code-0.47.0.aarch64.rpm.sha256
336
+ sudo dnf install ./pythinker-code-0.47.0.aarch64.rpm
337
337
  ```
338
338
 
339
339
  Both packages drop a small `/usr/bin/pythinker` launcher that execs the real
@@ -342,8 +342,8 @@ binary under `/usr/lib/pythinker/`, so your `$PATH` stays tidy.
342
342
  **Verify before install:**
343
343
 
344
344
  ```sh
345
- sha256sum -c pythinker-code_0.46.0_amd64.deb.sha256 # Debian/Ubuntu
346
- sha256sum -c pythinker-code-0.46.0.x86_64.rpm.sha256 # Fedora/RHEL
345
+ sha256sum -c pythinker-code_0.47.0_amd64.deb.sha256 # Debian/Ubuntu
346
+ sha256sum -c pythinker-code-0.47.0.x86_64.rpm.sha256 # Fedora/RHEL
347
347
  ```
348
348
 
349
349
  **Upgrade:** download the new `.deb`/`.rpm` from Releases and `dpkg -i` /
@@ -50,13 +50,13 @@ It speaks the [**Agent Client Protocol (ACP)**](https://github.com/agentclientpr
50
50
 
51
51
  ---
52
52
 
53
- ## 🆕 What's New in 0.46.0
53
+ ## 🆕 What's New in 0.47.0
54
54
 
55
- - **Faster auto-update detection.** The background startup update check now runs every 30 minutes instead of once a day, so a freshly published release is picked up within the hour rather than after a full day. A transient network error at startup is retried on the next launch instead of suppressing updates for the whole window.
56
- - **Persistent update notice under the prompt.** When a newer release is available, a yellow `↑ Update available — vX · /update` line sits directly under the input; after a background install it switches to a restart-to-apply message, then clears once you restart onto the new version. It stays out of the way for dismissed versions, disabled auto-update, and source checkouts.
57
- - **Welcome banner robot stays visible in narrow terminals.** Below ~68 columns the robot mark now stacks centered above the welcome copy instead of being dropped, so it stays on screen at any width that can render its Unicode glyphs.
55
+ - **Plugin marketplace.** `pythinker plugin marketplace` installs Claude/Codex-compatible plugins. Safe artifacts (skills, commands, agents) auto-activate; executable artifacts (hooks, MCP servers) stay opt-in. Plugin dependencies install transitively; `plugins.options` fills `${user_config.KEY}` placeholders in hook and MCP configs.
56
+ - **Live MCP management.** `/mcp disconnect`, `/mcp reconnect`, and `/mcp refresh` update a single server's toolset without restarting. Connected servers now push `tools/list_changed` notifications, so the agent's tool inventory stays current automatically.
57
+ - **Agent-loop hardening.** Root sessions receive a bounded git snapshot in the prompt (`git_status_injection`). `ToolSearch`, `EnterWorktree`, and `ExitWorktree` let agents discover live capabilities and isolate work in a git worktree. Proactive compaction failures hand off explicitly instead of aborting; the spend-ceiling nudge warns before the `budget_exhausted` stop.
58
58
 
59
- Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.46.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.47.0`, or use the native installer for your platform from the [Releases page](https://github.com/Pythoughts-labs/pythinker-code/releases/latest).
60
60
 
61
61
 
62
62
  ---
@@ -146,7 +146,7 @@ matches your OS — no Python, Node, or `uv` prerequisite.
146
146
 
147
147
  | Platform | Recommended install | Artifact source |
148
148
  |---|---|---|
149
- | **🪟 Windows** | `irm https://pythinker.com/install.ps1 \| iex` | `PythinkerSetup-0.46.0.exe` from [Releases](https://github.com/Pythoughts-labs/pythinker-code/releases/latest) |
149
+ | **🪟 Windows** | `irm https://pythinker.com/install.ps1 \| iex` | `PythinkerSetup-0.47.0.exe` from [Releases](https://github.com/Pythoughts-labs/pythinker-code/releases/latest) |
150
150
  | **<img src="https://img.shields.io/badge/-macOS-000000?style=flat-square&logo=apple&logoColor=white" alt="macOS"> / <img src="https://img.shields.io/badge/-Linux-FCC624?style=flat-square&logo=linux&logoColor=black" alt="Linux">** | `curl -fsSL https://pythinker.com/install.sh \| bash` | native tarball from [Releases](https://github.com/Pythoughts-labs/pythinker-code/releases/latest) |
151
151
  | **<img src="https://img.shields.io/badge/-macOS-000000?style=flat-square&logo=apple&logoColor=white" alt="macOS"> — Homebrew** | `brew install Pythoughts-labs/pythinker/pythinker-code` | auto-published Homebrew tap |
152
152
  | **🐳 Docker** | `docker run --rm -it ghcr.io/pythoughts-labs/pythinker-code` | GHCR multi-arch image |
@@ -174,7 +174,7 @@ pythinker # start the interactive TUI
174
174
 
175
175
  ### 🪟 Windows — native installer
176
176
 
177
- `PythinkerSetup-0.46.0.exe` is a signed* Inno Setup wizard. Installs per-user
177
+ `PythinkerSetup-0.47.0.exe` is a signed* Inno Setup wizard. Installs per-user
178
178
  into `%LOCALAPPDATA%\Programs\Pythinker`, registers `pythinker` on your user
179
179
  PATH (`HKCU\Environment`), broadcasts `WM_SETTINGCHANGE` so new shells see
180
180
  the change. **No UAC prompt.**
@@ -185,13 +185,13 @@ irm https://pythinker.com/install.ps1 | iex
185
185
 
186
186
  # Or manually download the installer + checksum from the Releases page,
187
187
  # verify with Get-FileHash, then run:
188
- .\PythinkerSetup-0.46.0.exe
188
+ .\PythinkerSetup-0.47.0.exe
189
189
 
190
190
  # Open a fresh PowerShell
191
191
  pythinker --version
192
192
  ```
193
193
 
194
- **Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.46.0.exe /ALLUSERS`
194
+ **Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.47.0.exe /ALLUSERS`
195
195
  installs to `%ProgramFiles%\Pythinker` and writes PATH to HKLM (requires admin).
196
196
 
197
197
  **Upgrade:** `pythinker update` from inside the running app — it downloads
@@ -249,26 +249,26 @@ attached to every GitHub Release.
249
249
 
250
250
  ```sh
251
251
  # Debian / Ubuntu (x86_64)
252
- sudo dpkg -i pythinker-code_0.46.0_amd64.deb
252
+ sudo dpkg -i pythinker-code_0.47.0_amd64.deb
253
253
  sudo apt-get install -f # only if dpkg reports missing deps
254
254
 
255
255
  # Debian / Ubuntu (ARM64)
256
- sudo dpkg -i pythinker-code_0.46.0_arm64.deb
256
+ sudo dpkg -i pythinker-code_0.47.0_arm64.deb
257
257
 
258
258
  # Fedora / RHEL / openSUSE (x86_64)
259
- curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.46.0/pythinker-code-0.46.0.x86_64.rpm
260
- curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.46.0/pythinker-code-0.46.0.x86_64.rpm.sha256
261
- sha256sum -c pythinker-code-0.46.0.x86_64.rpm.sha256
259
+ curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.47.0/pythinker-code-0.47.0.x86_64.rpm
260
+ curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.47.0/pythinker-code-0.47.0.x86_64.rpm.sha256
261
+ sha256sum -c pythinker-code-0.47.0.x86_64.rpm.sha256
262
262
  # Fedora / RHEL:
263
- sudo dnf install ./pythinker-code-0.46.0.x86_64.rpm
263
+ sudo dnf install ./pythinker-code-0.47.0.x86_64.rpm
264
264
  # openSUSE:
265
- sudo zypper install ./pythinker-code-0.46.0.x86_64.rpm
265
+ sudo zypper install ./pythinker-code-0.47.0.x86_64.rpm
266
266
 
267
267
  # Fedora / RHEL (aarch64)
268
- curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.46.0/pythinker-code-0.46.0.aarch64.rpm
269
- curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.46.0/pythinker-code-0.46.0.aarch64.rpm.sha256
270
- sha256sum -c pythinker-code-0.46.0.aarch64.rpm.sha256
271
- sudo dnf install ./pythinker-code-0.46.0.aarch64.rpm
268
+ curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.47.0/pythinker-code-0.47.0.aarch64.rpm
269
+ curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.47.0/pythinker-code-0.47.0.aarch64.rpm.sha256
270
+ sha256sum -c pythinker-code-0.47.0.aarch64.rpm.sha256
271
+ sudo dnf install ./pythinker-code-0.47.0.aarch64.rpm
272
272
  ```
273
273
 
274
274
  Both packages drop a small `/usr/bin/pythinker` launcher that execs the real
@@ -277,8 +277,8 @@ binary under `/usr/lib/pythinker/`, so your `$PATH` stays tidy.
277
277
  **Verify before install:**
278
278
 
279
279
  ```sh
280
- sha256sum -c pythinker-code_0.46.0_amd64.deb.sha256 # Debian/Ubuntu
281
- sha256sum -c pythinker-code-0.46.0.x86_64.rpm.sha256 # Fedora/RHEL
280
+ sha256sum -c pythinker-code_0.47.0_amd64.deb.sha256 # Debian/Ubuntu
281
+ sha256sum -c pythinker-code-0.47.0.x86_64.rpm.sha256 # Fedora/RHEL
282
282
  ```
283
283
 
284
284
  **Upgrade:** download the new `.deb`/`.rpm` from Releases and `dpkg -i` /
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "pythinker-code"
3
- version = "0.46.0"
3
+ version = "0.47.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,96 @@ GitHub Releases page; `0.8.0` is the new starting line.
15
15
 
16
16
  ## Unreleased
17
17
 
18
+ ## 0.47.0 (2026-06-16)
19
+
20
+ - **Plugin marketplaces and activation policy.** `pythinker plugin marketplace` can add,
21
+ refresh, install, and uninstall Claude/Codex-compatible marketplace plugins. Plugins
22
+ installed for Claude Code or Codex are auto-detected (no symlink): their safe artifacts
23
+ (skills, commands, agents) activate by default, while executable artifacts (hooks, MCP
24
+ servers) stay opt-in. Config `plugins.discover_external`, `plugins.external_exec`,
25
+ `plugins.enabled`, and `plugins.disabled` — plus `pythinker plugin enable/disable <name>`
26
+ — control which installed plugins contribute artifacts. Hook and MCP commands
27
+ expand `${CLAUDE_PLUGIN_ROOT}`/`${PYTHINKER_PLUGIN_ROOT}` and
28
+ `${CLAUDE_PLUGIN_DATA}`/`${PYTHINKER_PLUGIN_DATA}`.
29
+ - **Plugin dependencies.** Plugins may declare `dependencies`; installing one pulls its
30
+ transitive dependencies from the same marketplace (cross-marketplace deps are blocked),
31
+ and a plugin whose dependencies aren't present+enabled is disabled at load instead of
32
+ half-activating.
33
+ - **Plugin options (`userConfig`).** `${user_config.KEY}` in a plugin's MCP server configs
34
+ and hook commands is filled from `[plugins.options.<plugin>]` config; an artifact that
35
+ references an unconfigured option is skipped rather than run blank. (Content substitution,
36
+ `PYTHINKER_PLUGIN_OPTION_*` hook env vars, and keychain-backed sensitive storage are not
37
+ yet implemented.)
38
+ - **MCP tool lists refresh automatically when servers change.** Connected MCP
39
+ sessions stay open for `tools/list_changed` (and resources/prompts) notifications;
40
+ inventory is re-published without a manual `/mcp refresh`.
41
+ - **Shell live token readouts track output throughput.** The spinner and background
42
+ status line show session-wide output tokens produced during the current turn or
43
+ background stretch instead of the context-size snapshot.
44
+ - **MCP servers can be managed without a full reload.** `/mcp disconnect`, `/mcp reconnect`, and
45
+ `/mcp refresh` (or `retry`) update the live toolset for one server; disconnect unregisters its
46
+ tools and marks the server failed until reconnect.
47
+ - **Recall search matches session ids and plan slugs.** Prior-session keyword search now indexes
48
+ `session_id` and `plan_slug` in addition to titles so agents can find plan-linked sessions by slug.
49
+ - **Wire and ACP surfaces now get max-steps handoff summaries.** When a turn hits the step ceiling,
50
+ wire clients receive a streamed handoff event plus a `handoff` field on the `max_steps_reached`
51
+ result; ACP sessions emit the same summary text before returning `max_turn_requests`.
52
+ - **MCP CLI commands resolve normalized server names.** `mcp remove`, `mcp auth`, `mcp test`, and
53
+ `reset-auth` accept display names with spaces or slashes and map them to stored config keys; config
54
+ load applies the same normalization as add.
55
+ - **Compaction failure circuit breaker respects thresholds above one.** A proactive compaction
56
+ failure below `max_compaction_failures` no longer aborts the turn; the handoff fires only after
57
+ the configured number of consecutive failures.
58
+ - **AI eval gate schema is self-contained under `tests_ai/`.** Shared eval-case types live in
59
+ `tests_ai/eval_schema.py` so isolated `tests_ai` runs do not import from `tests_e2e`.
60
+ - **Softer TUI chrome in the dark theme.** Panel borders (welcome banner, menus) and the input-area
61
+ rules now render in a mid grey (`#8a8d91`) instead of near-white, for a less glaring look.
62
+ - **Stop-time memory extraction can now be enabled explicitly.** Added an opt-in
63
+ `memory.harvest_on_stop` setting that stages safe assistant decisions, blockers, evidence, and
64
+ next steps into the existing scratchpad recall flow at turn end without writing directly to
65
+ durable `MEMORY.md`.
66
+ - **Agents can now discover visible tools and temporarily work from a session worktree.** Added
67
+ `ToolSearch` plus root-session `EnterWorktree` and `ExitWorktree` tools so agents can find
68
+ currently available capabilities by keyword and isolate a session's operational working directory
69
+ in a git worktree without deleting user work on exit.
70
+ - **Root sessions now get a bounded git snapshot in the prompt.** When `git_status_injection` is
71
+ enabled (default), the agent receives branch, dirty-file summary, and recent commits as an
72
+ explicitly stale point-in-time reminder; disable via config or set `git_status_injection = false`.
73
+ - **Context compaction and MCP tool registration now fail more predictably.** Proactive compaction
74
+ failures hand back with an explicit `compaction_failed` stop instead of bubbling an unstructured
75
+ loop error, and MCP duplicate tool-name resolution now follows configured server order instead of
76
+ connection completion order. Tool hooks also retain the original model input even if a tool
77
+ mutates a nested argument object during execution.
78
+ - **Recall can now read bounded transcript windows.** `Recall(mode="read")` accepts
79
+ `message_offset` and `max_messages` so agents can inspect a precise, sanitized slice of a prior
80
+ workspace session without pulling the whole transcript into context.
81
+ - **MCP prompt templates can now be invoked from connected servers.** `InvokeMcpPrompt` renders a
82
+ server-published prompt with structured arguments and wraps the returned messages as untrusted
83
+ input for the model.
84
+ - **Telemetry, MCP config, and shell UX hardening.** Tool spans and metrics sanitize MCP/plugin
85
+ names; `mcp.json` load paths inject docker `--rm` and normalize server keys with collision
86
+ errors; shell suggestions accept via Alt+S into the prompt; markdown agent frontmatter maps
87
+ `max_turns`/`disallowed_tools`; `ReadMediaFile` enforces per-kind byte/pixel caps; written plans
88
+ without a Verification section get a soft warning; AI eval budgets can gate `tests_ai` reports.
89
+ - **Plan-mode exit guidance now requires verification.** The `ExitPlanMode` tool now tells agents
90
+ that written plans must include a Verification section with the smallest command, test, or check
91
+ for each meaningful change.
92
+ - **Agent-loop observability now emits explicit Wire events for key runtime state.** Added
93
+ `TodoListUpdated`, `SubagentToolFallback`, `AgentListDelta`, `ToolUseSkipped`, and
94
+ `ContextOverflowRecovered` events, with todo updates, subagent launch fallbacks, same-step tool
95
+ reuse/policy skips for tools that explicitly opt in, agent-list injections, and
96
+ context-overflow recovery now surfaced best-effort over Wire without changing existing tool
97
+ results.
98
+ - **Spend ceilings now warn before they stop a session.** When `max_session_cost_usd` is configured,
99
+ the loop appends a bounded system reminder after a turn crosses `budget_nudge_ratio` of the
100
+ ceiling, nudging the agent to conserve budget without auto-continuing or hiding a later
101
+ `budget_exhausted` stop.
102
+ - **The Agent tool description now gives clearer prompt-briefing guidance.** Fresh subagents should
103
+ receive the goal, scope, expected output contract, and verification criteria; the Haiku-style
104
+ tool-use summary from the blackbox reference was deliberately not ported.
105
+
106
+ Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.47.0`, or use the native installer for your platform from the [Releases page](https://github.com/Pythoughts-labs/pythinker-code/releases/latest).
107
+
18
108
  ## 0.46.0 (2026-06-14)
19
109
 
20
110
  - **Startup auto-update now picks up new releases within half an hour instead of up to a day.** The background update check was throttled to once every 24h, so a freshly published release could go unnoticed for a full day after the last check; the interval is now 30 minutes. The silent installer also no longer marks the throttle *before* the network call — a transient startup network error returns `FAILED` and is retried on the next launch instead of suppressing updates for the whole window.
@@ -17,6 +17,7 @@ from pythinker_code.acp.convert import (
17
17
  from pythinker_code.acp.types import ACPContentBlock
18
18
  from pythinker_code.app import PythinkerCLI
19
19
  from pythinker_code.soul import LLMNotSet, LLMNotSupported, MaxStepsReached, RunCancelled
20
+ from pythinker_code.soul.btw import generate_max_steps_handoff
20
21
  from pythinker_code.tools import extract_key_argument
21
22
  from pythinker_code.utils.logging import logger
22
23
  from pythinker_code.wire.types import (
@@ -242,6 +243,13 @@ class ACPSession:
242
243
  raise acp.RequestError.internal_error({"error": str(e)}) from e
243
244
  except MaxStepsReached as e:
244
245
  logger.warning("Max steps reached: {n_steps}", n_steps=e.n_steps)
246
+ try:
247
+ handoff = await generate_max_steps_handoff(self._cli.soul)
248
+ except Exception:
249
+ logger.warning("Max-steps handoff failed", exc_info=True)
250
+ handoff = None
251
+ if handoff:
252
+ await self._send_text(f"\n── handoff ──\n{handoff}")
245
253
  return acp.PromptResponse(stop_reason="max_turn_requests")
246
254
  except RunCancelled:
247
255
  logger.info("Prompt cancelled by user")
@@ -12,6 +12,9 @@ agent:
12
12
  # - "pythinker_code.tools.think:Think"
13
13
  - "pythinker_code.tools.ask_user:AskUserQuestion"
14
14
  - "pythinker_code.tools.todo:SetTodoList"
15
+ - "pythinker_code.tools.tool_search:ToolSearch"
16
+ - "pythinker_code.tools.worktree:EnterWorktree"
17
+ - "pythinker_code.tools.worktree:ExitWorktree"
15
18
  - "pythinker_code.tools.goal:UpdateGoal"
16
19
  - "pythinker_code.tools.progress:Progress"
17
20
  - "pythinker_code.tools.suggest:Suggest"
@@ -35,6 +38,7 @@ agent:
35
38
  - "pythinker_code.tools.web:FetchURL"
36
39
  - "pythinker_code.tools.mcp_resource:ListMcpResources"
37
40
  - "pythinker_code.tools.mcp_resource:ReadMcpResource"
41
+ - "pythinker_code.tools.mcp_resource:InvokeMcpPrompt"
38
42
  - "pythinker_code.tools.plan:ExitPlanMode"
39
43
  - "pythinker_code.tools.plan.enter:EnterPlanMode"
40
44
  subagents:
@@ -254,6 +254,21 @@ class PythinkerCLI:
254
254
  config.loop_control.max_ralph_iterations = max_ralph_iterations
255
255
  logger.info("Loaded config: {config}", config=config)
256
256
 
257
+ # Install the plugin activation policy for this session so artifact
258
+ # collectors (skills/agents/commands/hooks/mcp) honor config-configured
259
+ # enable-state and the external (Claude/Codex) opt-in.
260
+ from pythinker_code.plugin.policy import policy_from_config, set_plugin_policy
261
+
262
+ set_plugin_policy(
263
+ policy_from_config(
264
+ config.plugins.discover_external,
265
+ config.plugins.external_exec,
266
+ config.plugins.enabled,
267
+ config.plugins.disabled,
268
+ config.plugins.options,
269
+ )
270
+ )
271
+
257
272
  _phase_t = time.monotonic()
258
273
  oauth = OAuthManager(config)
259
274
 
@@ -392,10 +407,12 @@ class PythinkerCLI:
392
407
  # Already in plan mode from restored session, trigger activation reminder
393
408
  soul.schedule_plan_activation_reminder()
394
409
 
395
- # Create and inject hook engine
410
+ # Create and inject hook engine. Enabled plugins contribute lifecycle
411
+ # hooks; config hooks come first so a project hook is never shadowed.
396
412
  from pythinker_code.hooks.engine import HookEngine
413
+ from pythinker_code.plugin.integration import plugin_hook_defs
397
414
 
398
- hook_engine = HookEngine(config.hooks, cwd=str(session.work_dir))
415
+ hook_engine = HookEngine([*config.hooks, *plugin_hook_defs()], cwd=str(session.work_dir))
399
416
  if config.disabled_project_hooks:
400
417
  # The load-time logger.warning only reaches shell users; publish a
401
418
  # notification so web/ACP frontends also learn why their project
@@ -270,9 +270,13 @@ def _load_mcp_configs_from_cli_inputs(
270
270
  file_configs.append(project_mcp_file)
271
271
 
272
272
  configs: list[Any] = []
273
+ from pythinker_code.exception import MCPConfigError
274
+
275
+ from .mcp import prepare_mcp_config_dict
276
+
273
277
  for conf in file_configs:
274
278
  try:
275
- configs.append(json.loads(conf.read_text(encoding="utf-8")))
279
+ configs.append(prepare_mcp_config_dict(json.loads(conf.read_text(encoding="utf-8"))))
276
280
  except json.JSONDecodeError as e:
277
281
  raise typer.BadParameter(
278
282
  f"Invalid JSON in MCP config file {conf}: {e}",
@@ -283,12 +287,19 @@ def _load_mcp_configs_from_cli_inputs(
283
287
  f"Cannot read MCP config file {conf}: {e}",
284
288
  param_hint="--mcp-config-file",
285
289
  ) from e
290
+ except MCPConfigError as e:
291
+ raise typer.BadParameter(
292
+ f"Invalid MCP config in file {conf}: {e}",
293
+ param_hint="--mcp-config-file",
294
+ ) from e
286
295
 
287
296
  for conf in raw_mcp_config:
288
297
  try:
289
- configs.append(json.loads(conf))
298
+ configs.append(prepare_mcp_config_dict(json.loads(conf)))
290
299
  except json.JSONDecodeError as e:
291
300
  raise typer.BadParameter(f"Invalid JSON: {e}", param_hint="--mcp-config") from e
301
+ except MCPConfigError as e:
302
+ raise typer.BadParameter(f"Invalid MCP config: {e}", param_hint="--mcp-config") from e
292
303
 
293
304
  for path in _yaml_files_with_misplaced_mcp_servers():
294
305
  from pythinker_code.utils.logging import logger